1 <?php
2
3 4 5 6 7
8 class rex_media_category_select extends rex_select
9 {
10 private $check_perms;
11
12 13 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 29 30 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