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

namespace ConcreteCorePermissionAssignment;

use 
PermissionAccess;
use 
ConcreteCoreBlockBlock;
use 
Area;
use 
ConcreteCoreAreaSubArea;
use 
PermissionKey;
use 
Page;
use 
Database;

class 
BlockAssignment extends Assignment
{
    protected 
$permissionObjectToCheck;
    protected 
$inheritedAreaPermissions = array(
        
'view_block' => 'view_area',
        
'edit_block' => 'edit_area_contents',
        
'edit_block_custom_template' => 'edit_area_contents',
        
'edit_block_design' => 'edit_area_contents',
        
'edit_block_permissions' => 'edit_area_permissions',
        
'schedule_guest_access' => 'schedule_area_contents_guest_access',
        
'edit_block_name' => 'edit_area_contents',
        
'edit_block_cache_settings' => 'edit_area_contents',
        
'delete_block' => 'delete_area_contents',
    );
    protected 
$inheritedPagePermissions = array(
        
'view_block' => 'view_page',
        
'edit_block' => 'edit_page_contents',
        
'edit_block_custom_template' => 'edit_page_contents',
        
'edit_block_design' => 'edit_page_contents',
        
'edit_block_permissions' => 'edit_page_permissions',
        
'edit_block_name' => 'edit_page_contents',
        
'edit_block_cache_settings' => 'edit_page_contents',
        
'schedule_guest_access' => 'schedule_page_contents_guest_access',
        
'delete_block' => 'edit_page_contents',
    );

    
/**
     * @param Block $b
     */
    
public function setPermissionObject($b)
    {
        
$this->permissionObject $b;

        
// if the area overrides the collection permissions explicitly (with a one on the override column) we check
        
if ($b->overrideAreaPermissions()) {
            
$this->permissionObjectToCheck $b;
        } else {
            
$a $b->getBlockAreaObject();
            if (
$a instanceof SubArea && !$a->overrideCollectionPermissions()) {
                
$a $a->getSubAreaParentPermissionsObject();
            }
            if (
is_object($a)) {
                if (
$a->overrideCollectionPermissions()) {
                    
$this->permissionObjectToCheck $a;
                } elseif (
$a->getAreaCollectionInheritID()) {
                    
$mcID $a->getAreaCollectionInheritID();
                    
$mc Page::getByID($mcID'RECENT');
                    
$ma Area::get($mc$a->getAreaHandle());
                    if (
$ma->overrideCollectionPermissions()) {
                        
$this->permissionObjectToCheck $ma;
                    } else {
                        
$this->permissionObjectToCheck $ma->getAreaCollectionObject();
                    }
                } else {
                    
$this->permissionObjectToCheck $a->getAreaCollectionObject();
                }
            } else {
                
$this->permissionObjectToCheck Page::getCurrentPage();
            }
        }
    }

    public function 
getPermissionAccessObject()
    {
        
$db Database::connection();
        if (
$this->permissionObjectToCheck instanceof Block) {
            
$co $this->permissionObjectToCheck->getBlockCollectionObject();
            
$paID $db->GetOne(
                
'select paID from BlockPermissionAssignments where cID = ? and cvID = ? and bID = ? and pkID = ? ',
                array(
                    
$co->getCollectionID(),
                    
$co->getVersionID(),
                    
$this->permissionObject->getBlockID(),
                    
$this->pk->getPermissionKeyID(),
                )
            );
            if (
$paID) {
                
$pae PermissionAccess::getByID($paID$this->pkfalse);
            }
        } elseif (
$this->permissionObjectToCheck instanceof Area && isset($this->inheritedAreaPermissions[$this->pk->getPermissionKeyHandle()])) {
            
$pk PermissionKey::getByHandle($this->inheritedAreaPermissions[$this->pk->getPermissionKeyHandle()]);
            
$pk->setPermissionObject($this->permissionObjectToCheck);
            
$pae $pk->getPermissionAccessObject();
        } elseif (
$this->permissionObjectToCheck instanceof Page && isset($this->inheritedPagePermissions[$this->pk->getPermissionKeyHandle()])) {
            
$pk PermissionKey::getByHandle($this->inheritedPagePermissions[$this->pk->getPermissionKeyHandle()]);
            
$pk->setPermissionObject($this->permissionObjectToCheck);
            
$pae $pk->getPermissionAccessObject();
        }

        return 
$pae;
    }

    public function 
clearPermissionAssignment()
    {
        
$db Database::connection();
        
$co $this->permissionObject->getBlockCollectionObject();
        
$db->Execute('update BlockPermissionAssignments set paID = 0 where pkID = ? and bID = ? and cvID = ? and cID = ?', array($this->pk->getPermissionKeyID(), $this->permissionObject->getBlockID(), $co->getVersionID(), $co->getCollectionID()));
    }

    public function 
assignPermissionAccess(PermissionAccess $pa)
    {
        
$db Database::connection();
        
$co $this->permissionObject->getBlockCollectionObject();
        
$arHandle $this->permissionObject->getAreaHandle();
        
$db->Replace(
            
'BlockPermissionAssignments',
            array(
                
'cID' => $co->getCollectionID(),
                
'paID' => $pa->getPermissionAccessID(),
                
'cvID' => $co->getVersionID(),
                
'bID' => $this->permissionObject->getBlockID(),
                
'pkID' => $this->pk->getPermissionKeyID(),
            ),
            array(
'cID''cvID''bID''pkID'),
            
true
        
);
        
$pa->markAsInUse();
    }

    public function 
getPermissionKeyToolsURL($task false)
    {
        
$b $this->getPermissionObject();
        
$c $b->getBlockCollectionObject();
        
$arHandle $b->getAreaHandle();

        return 
parent::getPermissionKeyToolsURL($task) . '&cID=' $c->getCollectionID() . '&cvID=' $c->getVersionID() . '&bID=' $b->getBlockID() . '&arHandle=' urlencode($arHandle);
    }
}
Онлайн: 3
Реклама