1 <?php
 2 
 3 /**
 4  * Class MediaKategorie Select.
 5  *
 6  * @package redaxo\mediapool
 7  */
 8 class rex_media_category_select extends rex_select
 9 {
10     private $check_perms;
11 
12     /**
13      * @var int|int[]
14      */
15     private $rootId;
16 
17     private $loaded = false;
18 
19     public function __construct($check_perms = true)
20     {
21         $this->check_perms = $check_perms;
22         $this->rootId = null;
23 
24         parent::__construct();
25     }
26 
27     /**
28      * Kategorie-Id oder ein Array von Kategorie-Ids als Wurzelelemente der Select-Box.
29      *
30      * @param mixed $rootId Kategorie-Id oder Array von Kategorie-Ids zur Identifikation der Wurzelelemente
31      */
32     public function setRootId($rootId)
33     {
34         $this->rootId = $rootId;
35     }
36 
37     protected function addCatOptions()
38     {
39         if ($this->rootId !== null) {
40             if (is_array($this->rootId)) {
41                 foreach ($this->rootId as $rootId) {
42                     if ($rootCat = rex_media_category::get($rootId)) {
43                         $this->addCatOption($rootCat);
44                     }
45                 }
46             } else {
47                 if ($rootCat = rex_media_category::get($this->rootId)) {
48                     $this->addCatOption($rootCat);
49                 }
50             }
51         } else {
52             if ($rootCats = rex_media_category::getRootCategories()) {
53                 foreach ($rootCats as $rootCat) {
54                     $this->addCatOption($rootCat);
55                 }
56             }
57         }
58     }
59 
60     protected function addCatOption(rex_media_category $mediacat)
61     {
62         if (!$this->check_perms ||
63                 $this->check_perms && rex::getUser()->getComplexPerm('media')->hasCategoryPerm($mediacat->getId())
64         ) {
65             $mid = $mediacat->getId();
66             $mname = $mediacat->getName();
67 
68             $this->addOption($mname, $mid, $mid, $mediacat->getParentId());
69             $childs = $mediacat->getChildren();
70             if (is_array($childs)) {
71                 foreach ($childs as $child) {
72                     $this->addCatOption($child);
73                 }
74             }
75         }
76     }
77 
78     public function get()
79     {
80         if (!$this->loaded) {
81             $this->addCatOptions();
82             $this->loaded = true;
83         }
84 
85         return parent::get();
86     }
87 }
88