Project

General

Profile

Bug #71461 ยป 71461-wip-01.diff

Christian Kuhn, 2016-01-28 17:35

View differences:

typo3/sysext/backend/Classes/Form/FormDataProvider/TcaSelectTreeItems.php
$treeDataProvider->setItemWhiteList($allowedUids);
$treeDataProvider->initializeTreeData();
/** @var ExtJsArrayTreeRenderer $treeRenderer */
$treeRenderer = GeneralUtility::makeInstance(ExtJsArrayTreeRenderer::class);
/** @var TableConfigurationTree $tree */
$tree = GeneralUtility::makeInstance(TableConfigurationTree::class);
$tree->setDataProvider($treeDataProvider);
$tree->setNodeRenderer($treeRenderer);
$treeItems = $this->prepareAdditionalItems($staticItems, $result['databaseRow'][$fieldName]);
$treeItems[] = $tree->render();
$rootNode = $treeDataProvider->getRoot();
if (!$rootNode->isInvalidRootNode()) {
/** @var ExtJsArrayTreeRenderer $treeRenderer */
$treeRenderer = GeneralUtility::makeInstance(ExtJsArrayTreeRenderer::class);
/** @var TableConfigurationTree $tree */
$tree = GeneralUtility::makeInstance(TableConfigurationTree::class);
$tree->setDataProvider($treeDataProvider);
$tree->setNodeRenderer($treeRenderer);
$treeItems[] = $tree->render();
}
$treeConfig = [
'items' => $treeItems,
typo3/sysext/backend/Classes/Security/CategoryPermissionsAspect.php
use TYPO3\CMS\Backend\Tree\TreeNodeCollection;
use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
use TYPO3\CMS\Core\Tree\TableConfiguration\DatabaseTreeDataProvider;
use TYPO3\CMS\Core\Utility\GeneralUtility;
/**
* We do not have AOP in TYPO3 for now, thus the aspect which
......
public function addUserPermissionsToCategoryTreeData(DatabaseTreeDataProvider $dataProvider, $treeData)
{
if (!$this->backendUserAuthentication->isAdmin() && $dataProvider->getTableName() === $this->categoryTableName) {
// Get User permissions related to category
$categoryMountPoints = $this->backendUserAuthentication->getCategoryMountPoints();
if (!empty($categoryMountPoints)) {
$rootNodeId = (int)$treeData->getId();
$rootLineOfRootNode = [];
if ($rootNodeId !== 0) {
$rootLineOfRootNode = $this->getParentIdsOfNode($rootNodeId);
$rootLineOfRootNode[] = $rootNodeId;
}
if (empty(array_intersect($rootLineOfRootNode, $categoryMountPoints))) {
$treeData->setInvalidRootNode(true);
}
}
// Backup child nodes to be processed.
$treeNodeCollection = $treeData->getChildNodes();
......
}
}
protected function getParentIdsOfNode($id)
{
$parentIds = [];
$database = $this->getDatabase();
$parent = $database->exec_SELECTgetSingleRow('parent', 'sys_category', 'uid=' . (int)$id . \TYPO3\CMS\Backend\Utility\BackendUtility::deleteClause($this->categoryTableName));
if (isset($parent['parent'])) {
$parentId = (int)$parent['parent'];
if ($parent > 0) {
$parentIds = $this->getParentIdsOfNode($parent['parent']);
}
$parentIds[] = $parentId;
}
return $parentIds;
}
/**
* Recursively look up for a category mount point within a tree.
*
......
}
return $result;
}
/**
* Return database connection
*
* @return \TYPO3\CMS\Core\Database\DatabaseConnection
*/
protected function getDatabase()
{
return $GLOBALS['TYPO3_DB'];
}
}
typo3/sysext/backend/Classes/Tree/TreeNode.php
protected $childNodes = null;
/**
* Set to TRUE if a root node is handled a user has no access to.
*
* @var bool
*/
protected $invalidRootNode = false;
/**
* Constructor
*
* You can move an initial data array to initialize the instance and further objects.
......
}
/**
* Set invalid root node
*
* @param bool $invalid
*/
public function setInvalidRootNode($invalid)
{
$this->invalidRootNode = (bool)$invalid;
}
/**
* Return true if root node is invalid
*
* @return bool
*/
public function isInvalidRootNode()
{
return $this->invalidRootNode;
}
/**
* Compares a node if it's identical to another node by the id property.
*
* @param \TYPO3\CMS\Backend\Tree\TreeNode $other
typo3/sysext/core/Classes/Tree/TableConfiguration/DatabaseTreeDataProvider.php
$iconFactory = GeneralUtility::makeInstance(IconFactory::class);
$node->setIcon($iconFactory->getIconForRecord($this->tableName, $row, Icon::SIZE_SMALL));
$node->setParentNode($parent);
$node->setInvalidRootNode($basicNode->isInvalidRootNode());
if ($basicNode->hasChildNodes()) {
$node->setHasChildren(true);
/** @var $childNodes \TYPO3\CMS\Backend\Tree\SortedTreeNodeCollection */
    (1-1/1)