/core/model/modx/processors/element/getnodes.incategory.php

https://github.com/francisreboucas/revolution · PHP · 104 lines · 84 code · 10 blank · 10 comment · 21 complexity · 8903ab814fdc31b5c7adaa5a5662f033 MD5 · raw file

  1. <?php
  2. /**
  3. * @package modx
  4. */
  5. $nodes = array();
  6. /* 0: type, 1: element/category 2: elID 3: catID */
  7. $categoryId = isset($g[3]) ? $g[3] : ($g[1] == 'category' ? $g[2] : 0);
  8. $elementIdentifier = $g[0];
  9. $elementType = ucfirst($elementIdentifier);
  10. $elementClassKey = $ar_typemap[$elementIdentifier];
  11. /* first handle subcategories */
  12. $c = $modx->newQuery('modCategory');
  13. $c->select($modx->getSelectColumns('modCategory','modCategory'));
  14. $c->select('COUNT('.$elementClassKey.'.id) AS elementCount');
  15. $c->leftJoin($elementClassKey,$elementClassKey,$elementClassKey.'.category = modCategory.id');
  16. $c->where(array(
  17. 'parent' => $categoryId,
  18. ));
  19. $c->groupby($modx->getSelectColumns('modCategory','modCategory'));
  20. $c->sortby($modx->getSelectColumns('modCategory','modCategory','',array('category')),'ASC');
  21. $categories = $modx->getCollection('modCategory',$c);
  22. /* set permissions as css classes */
  23. $class = array('icon-category','folder');
  24. $types = array('template','tv','chunk','snippet','plugin');
  25. foreach ($types as $type) {
  26. if ($modx->hasPermission('new_'.$type)) {
  27. $class[] = 'pnew_'.$type;
  28. }
  29. }
  30. if ($modx->hasPermission('new_category')) $class[] = 'pnewcat';
  31. if ($modx->hasPermission('edit_category')) $class[] = 'peditcat';
  32. if ($modx->hasPermission('delete_category')) $class[] = 'pdelcat';
  33. $class = implode(' ',$class);
  34. /* loop through categories */
  35. foreach ($categories as $category) {
  36. if (!$category->checkPolicy('list')) continue;
  37. if ($category->get('elementCount') <= 0) continue;
  38. $nodes[] = array(
  39. 'text' => strip_tags($category->get('category')) . ' (' . $category->get('elementCount') . ')',
  40. 'id' => 'n_'.$g[0].'_category_'.($category->get('id') != null ? $category->get('id') : 0),
  41. 'pk' => $category->get('id'),
  42. 'category' => $category->get('id'),
  43. 'data' => $category->toArray(),
  44. 'leaf' => false,
  45. 'cls' => $class,
  46. 'classKey' => 'modCategory',
  47. 'elementType' => $elementType,
  48. 'page' => '',
  49. 'type' => $elementIdentifier,
  50. );
  51. }
  52. /* all elements in category */
  53. $c = $modx->newQuery($elementClassKey);
  54. $c->where(array(
  55. 'category' => $categoryId
  56. ));
  57. $c->sortby($elementIdentifier == 'template' ? 'templatename' : 'name','ASC');
  58. $elements = $modx->getCollection($elementClassKey,$c);
  59. /* do permission checks */
  60. $canNewElement = $modx->hasPermission('new_'.$elementIdentifier);
  61. $canEditElement = $modx->hasPermission('edit_'.$elementIdentifier);
  62. $canDeleteElement = $modx->hasPermission('delete_'.$elementIdentifier);
  63. $canNewCategory = $modx->hasPermission('new_category');
  64. $showElementIds = $modx->hasPermission('tree_show_element_ids');
  65. /* loop through elements */
  66. foreach ($elements as $element) {
  67. if (!$element->checkPolicy('list')) continue;
  68. $name = $elementIdentifier == 'template' ? $element->get('templatename') : $element->get('name');
  69. $class = array('icon-'.$elementIdentifier);
  70. if ($canNewElement) $class[] = 'pnew';
  71. if ($canEditElement && $element->checkPolicy(array('save' => true, 'view' => true))) $class[] = 'pedit';
  72. if ($canDeleteElement && $element->checkPolicy('remove')) $class[] = 'pdelete';
  73. if ($canNewCategory) $class[] = 'pnewcat';
  74. if ($element->get('locked')) $class[] = 'element-node-locked';
  75. if ($elementClassKey == 'modPlugin' && $element->get('disabled')) {
  76. $class[] = 'element-node-disabled';
  77. }
  78. $idNote = $showElementIds ? ' (' . $element->get('id') . ')' : '';
  79. $nodes[] = array(
  80. 'text' => strip_tags($name) . $idNote,
  81. 'id' => 'n_'.$elementIdentifier.'_element_'.$element->get('id').'_'.$element->get('category'),
  82. 'pk' => $element->get('id'),
  83. 'category' => $categoryId,
  84. 'leaf' => 1,
  85. 'name' => $name,
  86. 'cls' => implode(' ',$class),
  87. 'page' => 'index.php?a='.$ar_actionmap[$elementIdentifier].'&id='.$element->get('id'),
  88. 'type' => $elementIdentifier,
  89. 'elementType' => $elementType,
  90. 'classKey' => $elementClassKey,
  91. 'qtip' => strip_tags($element->get('description')),
  92. );
  93. }
  94. return $nodes;