Вход Регистрация
Файл: concrete5.7.5.6/concrete/tools/permissions/categories/page.php
Строк: 280
<?php
defined
('C5_EXECUTE') or die("Access Denied.");
use 
ConcreteCorePermissionAccessEntityEntity as PermissionAccessEntity;
use 
ConcreteCorePermissionDuration as PermissionDuration;
use 
ConcreteCorePermissionKeyPageKey as PagePermissionKey;
use 
ConcreteCoreWorkflowWorkflow as Workflow;
use 
ConcreteCoreWorkflowRequestChangePagePermissionsRequest as ChangePagePermissionsPageWorkflowRequest;
use 
ConcreteCoreWorkflowRequestChangePagePermissionsInheritanceRequest as ChangePagePermissionsInheritancePageWorkflowRequest;
use 
ConcreteCoreWorkflowRequestChangeSubpageDefaultsInheritanceRequest as ChangeSubpageDefaultsInheritancePageWorkflowRequest;
use 
ConcreteCorePermissionSet as PermissionSet;

$pages = array();
if (
is_array($_REQUEST['cID'])) {
    foreach(
$_REQUEST['cID'] as $cID) {
        
$c Page::getByID($cID);
        
$cp = new Permissions($c);
        if (
$cp->canEditPagePermissions()) {
            
$pages[] = $c;
        }
    }
} else {
    
$c Page::getByID($_REQUEST['cID']);
    
$cp = new Permissions($c);
    if (
$cp->canEditPagePermissions()) {
        
$pages[] = $c;
    }
}

if (
count($pages) > 0) { 
    if (
$_REQUEST['task'] == 'add_access_entity' && Loader::helper("validation/token")->validate('add_access_entity')) {
        
$pk PagePermissionKey::getByID($_REQUEST['pkID']);
        
$pe PermissionAccessEntity::getByID($_REQUEST['peID']);
        
$pd PermissionDuration::getByID($_REQUEST['pdID']);
        foreach(
$pages as $c) {
            
$pk->setPermissionObject($c);
            
$pa PermissionAccess::getByID($_REQUEST['paID'], $pk);
            
$pa->addListItem($pe$pd$_REQUEST['accessType']);
        }
    }

    if (
$_REQUEST['task'] == 'remove_access_entity' && Loader::helper("validation/token")->validate('remove_access_entity')) {
        
$pk PagePermissionKey::getByID($_REQUEST['pkID']);
        
$pe PermissionAccessEntity::getByID($_REQUEST['peID']);
        foreach(
$pages as $c) {
            
$pk->setPermissionObject($c);
            
$pa PermissionAccess::getByID($_REQUEST['paID'], $pk);
            
$pa->removeListItem($pe);
        }
    }

    if (
$_REQUEST['task'] == 'save_permission' && Loader::helper("validation/token")->validate('save_permission')) {
        
$pk PagePermissionKey::getByID($_REQUEST['pkID']);
        foreach(
$pages as $c) {
            
$pa PermissionAccess::getByID($_REQUEST['paID'], $pk);
            if(
is_object($pa)) {
                
$pa->save($_POST);
                
$pa->clearWorkflows();
                if (
is_array($_POST['wfID'])) {
                    foreach (
$_POST['wfID'] as $wfID) {
                        
$wf Workflow::getByID($wfID);
                        if (
is_object($wf)) {
                            
$pa->attachWorkflow($wf);
                        }
                    }
                }
            }
        }
    }

    if (
$_REQUEST['task'] == 'change_permission_inheritance' && Loader::helper("validation/token")->validate('change_permission_inheritance')) {
        
$deferred false;
        foreach(
$pages as $c) {
            if (
$c->getCollectionID() == HOME_CID) {
                continue;
            }

            
$pkr = new ChangePagePermissionsInheritancePageWorkflowRequest();
            
$pkr->setRequestedPage($c);
            
$pkr->setPagePermissionsInheritance($_REQUEST['mode']);
            
$pkr->setRequesterUserID($u->getUserID());
            
$response $pkr->trigger();
            if (!(
$response instanceof ConcreteCoreWorkflowProgressResponse)) {
                
$deferred true;
            }
        }
        
$obj = new stdClass;
        
$obj->deferred $deferred;
        print 
Loader::helper('json')->encode($obj);
        exit;
    }

    if (
$_REQUEST['task'] == 'change_subpage_defaults_inheritance' && Loader::helper("validation/token")->validate('change_subpage_defaults_inheritance')) {
        
$deferred false;
        foreach(
$pages as $c) {

            
$pkr = new ChangeSubpageDefaultsInheritancePageWorkflowRequest();
            
$pkr->setRequestedPage($c);
            
$pkr->setPagePermissionsInheritance($_REQUEST['inherit']);
            
$pkr->setRequesterUserID($u->getUserID());
            
$response $pkr->trigger();
            if (!(
$response instanceof ConcreteCoreWorkflowProgressResponse)) {
                
$deferred true;
            }
        }
        
$obj = new stdClass;
        
$obj->deferred $deferred;
        print 
Loader::helper('json')->encode($obj);
        exit;

    }

    if (
$_REQUEST['task'] == 'display_access_cell' && Loader::helper("validation/token")->validate('display_access_cell')) {
        
$pk PermissionKey::getByID($_REQUEST['pkID']);
        
$pk->setPermissionObject($c);
        
$pa PermissionAccess::getByID($_REQUEST['paID'], $pk);
        
Loader::element('permission/labels', array('pk' => $pk'pa' => $pa));
    }

    if (
$_REQUEST['task'] == 'save_permission_assignments' && Loader::helper("validation/token")->validate('save_permission_assignments')) {
        
$u = new User();
        
$permissions PermissionKey::getList('page');
        
$deferred false;
        foreach(
$pages as $c) {
            
$pkr = new ChangePagePermissionsPageWorkflowRequest();
            
$pkr->setRequestedPage($c);
            
$ps = new PermissionSet();
            
$ps->setPermissionKeyCategory('page');
            foreach(
$permissions as $pk) {
                
$paID $_POST['pkID'][$pk->getPermissionKeyID()];
                
$ps->addPermissionAssignment($pk->getPermissionKeyID(), $paID);
            }
            
$pkr->setPagePermissionSet($ps);
            
$pkr->setRequesterUserID($u->getUserID());
            
$u->unloadCollectionEdit($c);
            
$response $pkr->trigger();
            if (!(
$response instanceof ConcreteCoreWorkflowProgressResponse)) {
                
$deferred true;
            }
        }

        
$r = new PageEditResponse();
        
$r->setPage($c);
        if (
$deferred) {
            
$r->setMessage(t('Page permissions request saved successfully. You must approve this workflow request before the permissions are changed.'));
        } else {
            
$r->setMessage(t('Page permissions saved successfully.'));
        }
        
$r->outputJSON();
    }

    if (
$_REQUEST['task'] == 'bulk_add_access' && Loader::helper('validation/token')->validate('bulk_add_access')) {
        if (
is_array($_REQUEST['pkID'])) {
            
$pkID key($_REQUEST['pkID']);
            
$pk PermissionKey::getByID($pkID);
            
$newPAID $_REQUEST['pkID'][$pkID];
            
$u = new User();
            
$deferred false;

            foreach(
$pages as $c) {
                if (
$_REQUEST['paReplaceAll'] == 'add') {
                    
$pk->setPermissionObject($c);
                    
$pa $pk->getPermissionAccessObject();
                    if (
is_object($pa)) {
                        
// that means that we have to take the current $pa object, and the new $pa object, and merge them together into
                        // a third object, and try and assign that object
                        
$orig $pa->duplicate();
                        
$newpa PermissionAccess::getByID($newPAID$pk);
                        
$pa $newpa->duplicate($orig);
                    } else {
                        
// no current $pa object, which means we assign the new $pa object to this thing
                        
$pk->setPermissionObject($c);
                        
$pa PermissionAccess::getByID($newPAID$pk);
                    }
                } else {
                    
$pa PermissionAccess::getByID($newPAID$pk);
                }
                
$pkr = new ChangePagePermissionsPageWorkflowRequest();
                
$pkr->setRequestedPage($c);
                
$ps = new PermissionSet();
                
$ps->setPermissionKeyCategory('page');
                
$ps->addPermissionAssignment($pk->getPermissionKeyID(), $pa->getPermissionAccessID());
                
$pkr->setPagePermissionSet($ps);
                
$pkr->setRequesterUserID($u->getUserID());
                
$u->unloadCollectionEdit($c);
                
$response $pkr->trigger();
                if (!(
$response instanceof ConcreteCoreWorkflowProgressResponse)) {
                    
$deferred true;
                }
            }
        }
        exit;
    }

    if (
$_REQUEST['task'] == 'bulk_remove_access' && Loader::helper('validation/token')->validate('bulk_remove_access')) {

        
$pkID $_REQUEST['pkID'];
        
$pk PermissionKey::getByID($pkID);

        
$u = new User();
        
$deferred false;

        foreach(
$pages as $c) {
            
$pk->setPermissionObject($c);
            
$pa $pk->getPermissionAccessObject();
            
$matches = array();
            if (
is_object($pa)) {
                foreach(
$_REQUEST['listItem'] as $li) {
                    
$lii explode(':'$li);
                    
$peID $lii[0];
                    
$accessType $lii[1];
                    
$pdID $lii[2];


                    
$listItems $pa->getAccessListItems($accessType);
                    foreach(
$listItems as $as) {
                        
$entity $as->getAccessEntityObject();
                        
$pd $as->getPermissionDurationObject();
                        if (
$entity->getAccessEntityID() == $peID && ((is_object($pd) && $pd->getPermissionDurationID() == $pdID) || (!is_object($pd) && $pdID == 0))) {
                            
$matches[] = $as;
                        }
                    }
                }
                if (
count($matches) > 0) {
                    
$newpa $pa->duplicate();
                    
// remove the associated things.

                    
$listItems $newpa->getAccessListItems(PermissionKey::ACCESS_TYPE_ALL);
                    foreach(
$listItems as $li) {
                        foreach(
$matches as $as) {
                            
$entity $as->getAccessEntityObject();
                            
$pd $as->getPermissionDurationObject();
                            if (
$entity->getAccessEntityID() == $peID &&
                                ((
is_object($pd) && $pd->getPermissionDurationID() == $pdID) || (!is_object($pd) && $pdID == 0))) {
                                    
$newpa->removeListItem($entity);
                            }
                        }
                    }

                    
$pkr = new ChangePagePermissionsPageWorkflowRequest();
                    
$pkr->setRequestedPage($c);
                    
$ps = new PermissionSet();
                    
$ps->setPermissionKeyCategory('page');
                    
$ps->addPermissionAssignment($pk->getPermissionKeyID(), $newpa->getPermissionAccessID());
                    
$pkr->setPagePermissionSet($ps);
                    
$pkr->setRequesterUserID($u->getUserID());
                    
$u->unloadCollectionEdit($c);
                    
$response $pkr->trigger();
                    if (!(
$response instanceof ConcreteCoreWorkflowProgressResponse)) {
                        
$deferred true;
                    }
                }
            }
        }

        exit;
    }
}
Онлайн: 4
Реклама