Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Permission/Assignment/AreaAssignment.php
Строк: 203
<?php

namespace ConcreteCorePermissionAssignment;

use 
PermissionAccess;
use 
ConcreteCoreAreaArea;
use 
Stack;
use 
Page;
use 
ConcreteCoreAreaSubArea;
use 
PermissionKey;
use 
Database;

class 
AreaAssignment extends Assignment
{
    protected 
$area;
    protected 
$permissionObjectToCheck;
    protected 
$inheritedPermissions = array(
        
'view_area' => 'view_page',
        
'edit_area_contents' => 'edit_page_contents',
        
'add_layout_to_area' => 'edit_page_contents',
        
'edit_area_design' => 'edit_page_contents',
        
'edit_area_permissions' => 'edit_page_permissions',
        
'schedule_area_contents_guest_access' => 'schedule_page_contents_guest_access',
        
'delete_area_contents' => 'edit_page_contents',
    );

    protected 
$blockTypeInheritedPermissions = array(
        
'add_block_to_area' => 'add_block',
        
'add_stack_to_area' => 'add_stack',
    );

    
/**
     * @param Area $a
     */
    
public function setPermissionObject($a)
    {
        
$ax $a;
        if (
$a->isGlobalArea()) {
            
$cx Stack::getByName($a->getAreaHandle(), 'ACTIVE');
            
$a Area::get($cxSTACKS_AREA_NAME);
            if (!
is_object($a)) {
                return 
false;
            }
        }

        if (
$a instanceof SubArea && !$a->overrideCollectionPermissions()) {
            
$a $a->getSubAreaParentPermissionsObject();
        }
        
$this->permissionObject $a;

        
// if the area overrides the collection permissions explicitly (with a one on the override column) we check
        
if ($a->overrideCollectionPermissions()) {
            
$this->permissionObjectToCheck $a;
        } else {
            if (
$a->getAreaCollectionInheritID() > 0) {
                
// in theory we're supposed to be inheriting some permissions from an area with the same handle,
                // set on the collection id specified above (inheritid). however, if someone's come along and
                // reverted that area to the page's permissions, there won't be any permissions, and we
                // won't see anything. so we have to check
                
$areac Page::getByID($a->getAreaCollectionInheritID());
                
$inheritArea Area::get($areac$a->getAreaHandle());
                if (
is_object($inheritArea) && $inheritArea->overrideCollectionPermissions()) {
                    
// okay, so that area is still around, still has set permissions on it. So we
                    // pass our current area to our grouplist, userinfolist objects, knowing that they will
                    // smartly inherit the correct items.
                    
$this->permissionObjectToCheck $inheritArea;
                }
            }

            if (!
$this->permissionObjectToCheck) {
                
$this->permissionObjectToCheck $a->getAreaCollectionObject();
            }
        }
    }

    public function 
getPermissionAccessObject()
    {
        
$db Database::connection();

        if (
$this->permissionObjectToCheck instanceof Area) {
            
$r $db->GetOne(
                
'select paID from AreaPermissionAssignments where cID = ? and arHandle = ? and pkID = ? ',
                array(
                    
$this->permissionObjectToCheck->getCollectionID(),
                    
$this->permissionObjectToCheck->getAreaHandle(),
                    
$this->pk->getPermissionKeyID(),
                )
            );
            if (
$r) {
                return 
PermissionAccess::getByID($r$this->pkfalse);
            }
        } elseif (isset(
$this->inheritedPermissions[$this->pk->getPermissionKeyHandle()])) {
            
// this is a page
            
$pk PermissionKey::getByHandle($this->inheritedPermissions[$this->pk->getPermissionKeyHandle()]);
            
$pk->setPermissionObject($this->permissionObjectToCheck);
            
$pae $pk->getPermissionAccessObject();

            return 
$pae;
        } elseif (isset(
$this->blockTypeInheritedPermissions[$this->pk->getPermissionKeyHandle()])) {
            
$pk PermissionKey::getByHandle($this->blockTypeInheritedPermissions[$this->pk->getPermissionKeyHandle()]);
            
$pae $pk->getPermissionAccessObject();

            return 
$pae;
        }

        return 
false;
    }

    public function 
getPermissionKeyToolsURL($task false)
    {
        
$area $this->getPermissionObject();
        
$c $area->getAreaCollectionObject();

        return 
parent::getPermissionKeyToolsURL($task) . '&cID=' $c->getCollectionID() . '&arHandle=' urlencode($area->getAreaHandle());
    }

    public function 
clearPermissionAssignment()
    {
        
$db Database::connection();
        
$area $this->getPermissionObject();
        
$c $area->getAreaCollectionObject();
        
$db->Execute('update AreaPermissionAssignments set paID = 0 where pkID = ? and cID = ? and arHandle = ?', array($this->pk->getPermissionKeyID(), $c->getCollectionID(), $area->getAreaHandle()));
    }

    public function 
assignPermissionAccess(PermissionAccess $pa)
    {
        
$db Database::connection();
        
$db->Replace(
            
'AreaPermissionAssignments',
            array(
                
'cID' => $this->getPermissionObject()->getCollectionID(),
                
'arHandle' => $this->getPermissionObject()->getAreaHandle(),
                
'paID' => $pa->getPermissionAccessID(),
                
'pkID' => $this->pk->getPermissionKeyID(),
            ),
            array(
'cID''arHandle''pkID'),
            
true
        
);
        
$pa->markAsInUse();
    }
}
Онлайн: 3
Реклама