/**
  * Prepare a Resource for being shown in the tree
  *
  * @param modResource $resource
  * @return array
  */
 public function prepareResourceNode(modResource $resource)
 {
     $qtipField = $this->getProperty('qtipField');
     $nodeField = $this->getProperty('nodeField');
     $nodeFieldFallback = $this->getProperty('nodeFieldFallback');
     $noHref = $this->getProperty('noHref', false);
     $hasChildren = $resource->get('childrenCount') > 0 && !$resource->get('hide_children_in_tree');
     $class = array();
     if (!$resource->isfolder) {
         $class[] = 'x-tree-node-leaf';
     }
     if (!$resource->get('published')) {
         $class[] = 'unpublished';
     }
     if ($resource->get('deleted')) {
         $class[] = 'deleted';
     }
     if ($resource->get('hidemenu')) {
         $class[] = 'hidemenu';
     }
     if (!empty($this->permissions['save_document'])) {
         $class[] = $this->permissions['save_document'];
     }
     if (!empty($this->permissions['view_document'])) {
         $class[] = $this->permissions['view_document'];
     }
     if (!empty($this->permissions['edit_document'])) {
         $class[] = $this->permissions['edit_document'];
     }
     if (!empty($this->permissions['resource_duplicate'])) {
         if ($resource->parent != $this->defaultRootId || $this->modx->hasPermission('new_document_in_root')) {
             $class[] = $this->permissions['resource_duplicate'];
         }
     }
     if ($resource->allowChildrenResources) {
         if (!empty($this->permissions['new_document'])) {
             $class[] = $this->permissions['new_document'];
         }
         if (!empty($this->permissions['new_symlink'])) {
             $class[] = $this->permissions['new_symlink'];
         }
         if (!empty($this->permissions['new_weblink'])) {
             $class[] = $this->permissions['new_weblink'];
         }
         if (!empty($this->permissions['new_static_resource'])) {
             $class[] = $this->permissions['new_static_resource'];
         }
         if (!empty($this->permissions['resource_quick_create'])) {
             $class[] = $this->permissions['resource_quick_create'];
         }
     }
     if (!empty($this->permissions['resource_quick_update'])) {
         $class[] = $this->permissions['resource_quick_update'];
     }
     if (!empty($this->permissions['delete_document'])) {
         $class[] = $this->permissions['delete_document'];
     }
     if (!empty($this->permissions['undelete_document'])) {
         $class[] = $this->permissions['undelete_document'];
     }
     if (!empty($this->permissions['publish_document'])) {
         $class[] = $this->permissions['publish_document'];
     }
     if (!empty($this->permissions['unpublish_document'])) {
         $class[] = $this->permissions['unpublish_document'];
     }
     $active = false;
     if ($this->getProperty('currentResource') == $resource->id && $this->getProperty('currentAction') == 'resource/update') {
         $active = true;
     }
     $qtip = '';
     if (!empty($qtipField) && !empty($resource->{$qtipField})) {
         $qtip = '<b>' . strip_tags($resource->{$qtipField}) . '</b>';
     } else {
         if ($resource->longtitle != '') {
             $qtip = '<b>' . strip_tags($resource->longtitle) . '</b><br />';
         }
         if ($resource->description != '') {
             $qtip = '<i>' . strip_tags($resource->description) . '</i>';
         }
     }
     // Check for an icon class on the resource template
     $tplIcon = $resource->Template ? $resource->Template->icon : '';
     // Assign an icon class based on the class_key
     $classKey = strtolower($resource->get('class_key'));
     if (substr($classKey, 0, 3) == 'mod') {
         $classKey = substr($classKey, 3);
     }
     $classKeyIcon = $this->modx->getOption('mgr_tree_icon_' . $classKey, null, 'tree-resource', true);
     if (!empty($tplIcon)) {
         $iconCls[] = $tplIcon;
     } else {
         $iconCls[] = $classKeyIcon;
     }
     switch ($classKey) {
         case 'weblink':
             $iconCls[] = $this->modx->getOption('mgr_tree_icon_weblink', null, 'tree-weblink');
             break;
         case 'symlink':
             $iconCls[] = $this->modx->getOption('mgr_tree_icon_symlink', null, 'tree-symlink');
             break;
         case 'staticresource':
             $iconCls[] = $this->modx->getOption('mgr_tree_icon_staticresource', null, 'tree-static-resource');
             break;
     }
     // Icons specific with the context and resource ID for super specific tweaks
     $iconCls[] = 'icon-' . $resource->get('context_key') . '-' . $resource->get('id');
     $iconCls[] = 'icon-parent-' . $resource->get('context_key') . '-' . $resource->get('parent');
     // Modifiers to indicate resource _state_
     if ($hasChildren || $resource->isfolder) {
         if (empty($tplIcon) && $classKeyIcon == 'tree-resource') {
             $iconCls[] = $this->modx->getOption('mgr_tree_icon_folder', null, 'tree-folder');
         }
         $iconCls[] = 'parent-resource';
     }
     // Add icon class - and additional description to the tooltip - if the resource is locked.
     $locked = $resource->getLock();
     if ($locked && $locked != $this->modx->user->get('id')) {
         $iconCls[] = 'locked-resource';
         /** @var modUser $lockedBy */
         $lockedBy = $this->modx->getObject('modUser', $locked);
         if ($lockedBy) {
             $qtip .= ' - ' . $this->modx->lexicon('locked_by', array('username' => $lockedBy->get('username')));
         }
     }
     // Add the ID to the item text if the user has the permission
     $idNote = $this->modx->hasPermission('tree_show_resource_ids') ? ' <span dir="ltr">(' . $resource->id . ')</span>' : '';
     // Used in the preview_url, if sessions are disabled on the resource context we add an extra url param
     $sessionEnabled = '';
     if ($ctxSetting = $this->modx->getObject('modContextSetting', array('context_key' => $resource->get('context_key'), 'key' => 'session_enabled'))) {
         $sessionEnabled = $ctxSetting->get('value') == 0 ? array('preview' => 'true') : '';
     }
     $text = strip_tags($resource->get($nodeField));
     if (empty($text)) {
         $text = $resource->get($nodeFieldFallback);
         $text = strip_tags($text);
     }
     $itemArray = array('text' => $text . $idNote, 'id' => $resource->context_key . '_' . $resource->id, 'pk' => $resource->id, 'cls' => implode(' ', $class), 'iconCls' => implode(' ', $iconCls), 'type' => 'modResource', 'selected' => $active, 'classKey' => $resource->class_key, 'ctx' => $resource->context_key, 'hide_children_in_tree' => $resource->hide_children_in_tree, 'qtip' => $qtip, 'preview_url' => !$resource->get('deleted') ? $this->modx->makeUrl($resource->get('id'), $resource->get('context_key'), $sessionEnabled, 'full', array('xhtml_urls' => false)) : '', 'page' => empty($noHref) ? '?a=' . (!empty($this->permissions['edit_document']) ? 'resource/update' : 'resource/data') . '&id=' . $resource->id : '', 'allowDrop' => true);
     if (!$hasChildren) {
         $itemArray['hasChildren'] = false;
         $itemArray['children'] = array();
         $itemArray['expanded'] = true;
     } else {
         $itemArray['hasChildren'] = true;
     }
     $itemArray = $resource->prepareTreeNode($itemArray);
     return $itemArray;
 }
Exemple #2
0
 /**
  * Prepare a Resource for being shown in the tree
  *
  * @param modResource $resource
  * @return array
  */
 public function prepareResourceNode(modResource $resource)
 {
     $qtipField = $this->getProperty('qtipField');
     $nodeField = $this->getProperty('nodeField');
     $noHref = $this->getProperty('noHref', false);
     $hasChildren = (int) $resource->get('childrenCount') > 0 && $resource->get('hide_children_in_tree') == 0 ? true : false;
     $class = array();
     $class[] = 'icon-' . strtolower(str_replace('mod', '', $resource->get('class_key')));
     $class[] = $resource->isfolder ? 'icon-folder' : 'x-tree-node-leaf icon-resource';
     if (!$resource->get('published')) {
         $class[] = 'unpublished';
     }
     if ($resource->get('deleted')) {
         $class[] = 'deleted';
     }
     if ($resource->get('hidemenu')) {
         $class[] = 'hidemenu';
     }
     if (!empty($this->permissions['save_document'])) {
         $class[] = $this->permissions['save_document'];
     }
     if (!empty($this->permissions['view_document'])) {
         $class[] = $this->permissions['view_document'];
     }
     if (!empty($this->permissions['edit_document'])) {
         $class[] = $this->permissions['edit_document'];
     }
     if (!empty($this->permissions['resource_duplicate'])) {
         $class[] = $this->permissions['resource_duplicate'];
     }
     if ($resource->allowChildrenResources) {
         if (!empty($this->permissions['new_document'])) {
             $class[] = $this->permissions['new_document'];
         }
         if (!empty($this->permissions['new_symlink'])) {
             $class[] = $this->permissions['new_symlink'];
         }
         if (!empty($this->permissions['new_weblink'])) {
             $class[] = $this->permissions['new_weblink'];
         }
         if (!empty($this->permissions['new_static_resource'])) {
             $class[] = $this->permissions['new_static_resource'];
         }
         if (!empty($this->permissions['resource_quick_create'])) {
             $class[] = $this->permissions['resource_quick_create'];
         }
         if (!empty($this->permissions['resource_quick_update'])) {
             $class[] = $this->permissions['resource_quick_update'];
         }
     }
     if (!empty($this->permissions['delete_document'])) {
         $class[] = $this->permissions['delete_document'];
     }
     if (!empty($this->permissions['undelete_document'])) {
         $class[] = $this->permissions['undelete_document'];
     }
     if (!empty($this->permissions['publish_document'])) {
         $class[] = $this->permissions['publish_document'];
     }
     if (!empty($this->permissions['unpublish_document'])) {
         $class[] = $this->permissions['unpublish_document'];
     }
     if ($hasChildren) {
         $class[] = 'haschildren';
     }
     if ($this->getProperty('currentResource') == $resource->id && $this->getProperty('currentAction') == $this->actions['resource/update']) {
         $class[] = 'active-node';
     }
     $qtip = '';
     if (!empty($qtipField)) {
         $qtip = '<b>' . strip_tags($resource->{$qtipField}) . '</b>';
     } else {
         if ($resource->longtitle != '') {
             $qtip = '<b>' . strip_tags($resource->longtitle) . '</b><br />';
         }
         if ($resource->description != '') {
             $qtip = '<i>' . strip_tags($resource->description) . '</i>';
         }
     }
     $locked = $resource->getLock();
     if ($locked && $locked != $this->modx->user->get('id')) {
         $class[] = 'icon-locked';
         /** @var modUser $lockedBy */
         $lockedBy = $this->modx->getObject('modUser', $locked);
         if ($lockedBy) {
             $qtip .= ' - ' . $this->modx->lexicon('locked_by', array('username' => $lockedBy->get('username')));
         }
     }
     $idNote = $this->modx->hasPermission('tree_show_resource_ids') ? ' <span dir="ltr">(' . $resource->id . ')</span>' : '';
     $itemArray = array('text' => strip_tags($resource->{$nodeField}) . $idNote, 'id' => $resource->context_key . '_' . $resource->id, 'pk' => $resource->id, 'cls' => implode(' ', $class), 'type' => 'modResource', 'classKey' => $resource->class_key, 'ctx' => $resource->context_key, 'hide_children_in_tree' => $resource->hide_children_in_tree, 'qtip' => $qtip, 'preview_url' => !$resource->get('deleted') ? $this->modx->makeUrl($resource->get('id'), $resource->get('context_key'), '', 'full') : '', 'page' => empty($noHref) ? '?a=' . (!empty($this->permissions['edit_document']) ? $this->actions['resource/update'] : $this->actions['resource/data']) . '&id=' . $resource->id : '', 'allowDrop' => true);
     if (!$hasChildren) {
         $itemArray['hasChildren'] = false;
         $itemArray['children'] = array();
         $itemArray['expanded'] = true;
     } else {
         $itemArray['hasChildren'] = true;
     }
     $itemArray = $resource->prepareTreeNode($itemArray);
     return $itemArray;
 }