1 <?php
2
3 4 5 6 7 8 9 10 11 12 13
14 class rex_var_media extends rex_var
15 {
16 protected function getOutput()
17 {
18 $id = $this->getArg('id', 0, true);
19 if (!in_array($this->getContext(), ['module', 'action']) || !is_numeric($id) || $id < 1 || $id > 10) {
20 return false;
21 }
22
23 $value = $this->getContextData()->getValue('media' . $id);
24
25 if ($this->hasArg('isset') && $this->getArg('isset')) {
26 return $value ? 'true' : 'false';
27 }
28
29 if ($this->hasArg('widget') && $this->getArg('widget')) {
30 if (!$this->environmentIs(self::ENV_INPUT)) {
31 return false;
32 }
33 $args = [];
34 foreach (['category', 'preview', 'types'] as $key) {
35 if ($this->hasArg($key)) {
36 $args[$key] = $this->getArg($key);
37 }
38 }
39 $value = self::getWidget($id, 'REX_INPUT_MEDIA[' . $id . ']', $value, $args);
40 } else {
41 if ($this->hasArg('output') && $this->getArg('output') == 'mimetype') {
42 $media = rex_media::get($value);
43 if ($media) {
44 $value = $media->getType();
45 }
46 } elseif ($this->hasArg('field') && $field = $this->getParsedArg('field')) {
47 return 'htmlspecialchars(rex_media::get(' . self::quote($value) . ')->getValue(' . $field . '))';
48 }
49 }
50
51 return self::quote($value);
52 }
53
54 public static function getWidget($id, $name, $value, array $args = [])
55 {
56 $open_params = '';
57 if (isset($args['category']) && ($category = (int) $args['category'])) {
58 $open_params .= '&rex_file_category=' . $category;
59 }
60
61 foreach ($args as $aname => $avalue) {
62 $open_params .= '&args[' . urlencode($aname) . ']=' . urlencode($avalue);
63 }
64
65 $wdgtClass = ' rex-js-widget-media';
66 if (isset($args['preview']) && $args['preview']) {
67 $wdgtClass .= ' rex-js-widget-preview';
68 if (rex_addon::get('media_manager')->isAvailable()) {
69 $wdgtClass .= ' rex-js-widget-preview-media-manager';
70 }
71 }
72
73 $disabled = ' disabled';
74 $open_func = '';
75 $add_func = '';
76 $delete_func = '';
77 $view_func = '';
78 if (rex::getUser()->getComplexPerm('media')->hasMediaPerm()) {
79 $disabled = '';
80 $open_func = 'openREXMedia(' . $id . ',\'' . $open_params . '\');';
81 $add_func = 'addREXMedia(' . $id . ',\'' . $open_params . '\');';
82 $delete_func = 'deleteREXMedia(' . $id . ');';
83 $view_func = 'viewREXMedia(' . $id . ',\'' . $open_params . '\');';
84 }
85
86 $e = [];
87 $e['before'] = '<div class="rex-js-widget' . $wdgtClass . '">';
88 $e['field'] = '<input class="form-control" type="text" name="' . $name . '" value="' . $value . '" id="REX_MEDIA_' . $id . '" readonly />';
89 $e['functionButtons'] = '
90 <a href="#" class="btn btn-popup" onclick="' . $open_func . 'return false;" title="' . rex_i18n::msg('var_media_open') . '"' . $disabled . '><i class="rex-icon rex-icon-open-mediapool"></i></a>
91 <a href="#" class="btn btn-popup" onclick="' . $add_func . 'return false;" title="' . rex_i18n::msg('var_media_new') . '"' . $disabled . '><i class="rex-icon rex-icon-add-media"></i></a>
92 <a href="#" class="btn btn-popup" onclick="' . $delete_func . 'return false;" title="' . rex_i18n::msg('var_media_remove') . '"' . $disabled . '><i class="rex-icon rex-icon-delete-media"></i></a>
93 <a href="#" class="btn btn-popup" onclick="' . $view_func . 'return false;" title="' . rex_i18n::msg('var_media_view') . '"' . $disabled . '><i class="rex-icon rex-icon-view-media"></i></a>';
94 $e['after'] = '<div class="rex-js-media-preview"></div></div>';
95
96 $fragment = new rex_fragment();
97 $fragment->setVar('elements', [$e], false);
98 $media = $fragment->parse('core/form/widget.php');
99
100 return $media;
101 }
102 }
103