1 <?php
  2 
  3 /**
  4  * REX_MEDIA[1].
  5  *
  6  * Attribute:
  7  *   - category  => Kategorie in die beim oeffnen des Medienpools gesprungen werden soll
  8  *   - types     => Filter für Dateiendungen die im Medienpool zur Auswahl stehen sollen
  9  *   - preview   => Bei Bildertypen ein Vorschaubild einblenden
 10  *   - output    => "mimetype": Mimetype des Bildes ausgeben
 11  *
 12  * @package redaxo\mediapool
 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 .= '&amp;rex_file_category=' . $category;
 59         }
 60 
 61         foreach ($args as $aname => $avalue) {
 62             $open_params .= '&amp;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