Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Job/PermissionRebuild.php
<?php

namespace XF\Job;

class
PermissionRebuild extends AbstractJob
{
    protected
$defaultData = [
       
'steps' => 0,
       
'combinationId' => 0,
       
'cleaned' => false
   
];

    public function
run($maxRunTime)
    {
       
$start = microtime(true);

        if (!
$this->data['cleaned'])
        {
           
/** @var \XF\Repository\PermissionCombination $combinationRepo */
           
$combinationRepo = $this->app->repository('XF:PermissionCombination');
           
$combinationRepo->deleteUnusedPermissionCombinations();

           
$this->data['cleaned'] = true;
        }

       
$this->data['steps']++;

       
$db = $this->app->db();
       
$em = $this->app->em();
       
$app = \XF::app();
       
$combinationIds = $db->fetchAllColumn("
            SELECT permission_combination_id
            FROM xf_permission_combination
            WHERE permission_combination_id > ?
            ORDER BY permission_combination_id
        "
, $this->data['combinationId']);
        if (!
$combinationIds)
        {
           
// there are situations where we run this job but not with this unique key, so this is unnecessary
           
$this->app->jobManager()->cancelUniqueJob('permissionRebuild');

            return
$this->complete();
        }

       
$permissionBuilder = $app->permissionBuilder();

        foreach (
$combinationIds AS $combinationId)
        {
           
$this->data['combinationId'] = $combinationId;

           
/** @var \XF\Entity\PermissionCombination $combination */
           
$combination = $em->find('XF:PermissionCombination', $combinationId);
            if (!
$combination)
            {
                continue;
            }

           
$permissionBuilder->rebuildCombination($combination);

            if (
microtime(true) - $start >= $maxRunTime)
            {
                break;
            }
        }

        return
$this->resume();
    }

    public function
getStatusMessage()
    {
       
$actionPhrase = \XF::phrase('rebuilding');
       
$typePhrase = \XF::phrase('permissions');
        return
sprintf('%s... %s %s', $actionPhrase, $typePhrase, str_repeat('. ', $this->data['steps']));
    }

    public function
canCancel()
    {
        return
false;
    }

    public function
canTriggerByChoice()
    {
        return
false;
    }
}