diff --git a/e107_handlers/form_handler.php b/e107_handlers/form_handler.php index cfca25ca7..854db518f 100644 --- a/e107_handlers/form_handler.php +++ b/e107_handlers/form_handler.php @@ -776,30 +776,54 @@ class e_form - + /** + * File Picker + * @param string name eg. 'myfield' or 'myfield[]' + * @param mixed default + * @param string label + * @param mixed sc_parameters + */ function filepicker($name, $default, $label = '', $sc_parameters = '') { $tp = e107::getParser(); $name_id = $this->name2id($name); + if(is_string($sc_parameters)) { if(strpos($sc_parameters, '=') === false) $sc_parameters = 'media='.$sc_parameters; parse_str($sc_parameters, $sc_parameters); } - $cat = vartrue($sc_parameters['media']) ? $tp->toDB($sc_parameters['media']) : "_common_file"; + $cat = vartrue($sc_parameters['media']) ? $tp->toDB($sc_parameters['media']) : "_common_file"; - $default_label = ($default) ? $default : "Choose a file"; - $label = "".basename($default_label).""; + if($sc_parameters['data'] === 'array') + { + // Do not use $this->hidden() method - as it will break 'id' value. + $ret .= ""; + $ret .= ""; + $ret .= ""; + + $default = $default['path']; + } + else + { + $ret .= ""; + } + + + $default_label = ($default) ? $default : "Choose a file"; + $label = "".basename($default_label).""; - $sc_parameters['mode'] = 'main'; - $sc_parameters['action'] = 'dialog'; + $sc_parameters['mode'] = 'main'; + $sc_parameters['action'] = 'dialog'; // $ret .= $this->mediaUrl($cat, $label,$name_id,"mode=dialog&action=list"); - $ret .= $this->mediaUrl($cat, $label,$name_id,$sc_parameters); - $ret .= ""; - + $ret .= $this->mediaUrl($cat, $label,$name_id,$sc_parameters); + + + + return $ret; @@ -3396,11 +3420,19 @@ class e_form break; case 'files': + + if($attributes['data'] == 'array') + { + $parms['data'] = 'array'; + } + $ret = '
    '; for ($i=0; $i < 5; $i++) { - $k = $key.'['.$i.'][path]'; - $ival = $value[$i]['path']; + // $k = $key.'['.$i.'][path]'; + // $ival = $value[$i]['path']; + $k = $key.'['.$i.']'; + $ival = $value[$i]; $ret .= '
  1. '.$this->filepicker($k, $ival, defset($label, $label), $parms).'
  2. '; } $ret .= '
'; diff --git a/e107_web/js/core/mediaManager.js b/e107_web/js/core/mediaManager.js index 7ce11d523..acbaefb5f 100644 --- a/e107_web/js/core/mediaManager.js +++ b/e107_web/js/core/mediaManager.js @@ -119,13 +119,13 @@ $(document).ready(function() // console.log(this); - var id = $(this).attr('data-id'); + var id = $(this).attr('data-id'); // id of the mm item var target = $(this).attr('data-target'); - var path = $(this).attr('data-path'); + var path = $(this).attr('data-path'); // path of the mm item var preview = $(this).attr('data-preview'); var src = $(this).attr('data-src'); var bbcode = $(this).attr('data-bbcode'); // TinyMce/Textarea insert mode - var name = $(this).attr('data-name'); + var name = $(this).attr('data-name'); // title of the mm item var width = $(this).attr('data-width'); var height = ''; // disable for now - will be updated by bb parser. // $(this).attr('data-height'); var type = $(this).attr('data-type'); @@ -198,10 +198,36 @@ $(document).ready(function() $('div#' + target + "_prev", window.top.document).html(preview); // set new value $('span#' + target + "_prev", window.top.document).html(preview); // set new value - // see $frm->filepicker() + // @see $frm->filepicker() if(target !='') { - $('input#' + target , window.top.document).attr('value',path); // set new value + if($('input#' + target)!== undefined) + { + $('input#' + target , window.top.document).attr('value',path); // set new value + } + + + // array mode : + var pathTarget = target + '-path'; + var nameTarget = target + '-name'; + var idTarget = target + '-id'; + + + if($('input#' + pathTarget)!== undefined) + { + $('input#' + pathTarget , window.top.document).attr('value',path); // set new value + } + + if($('input#' + nameTarget)!== undefined) + { + $('input#' + nameTarget , window.top.document).attr('value',name); // set new value + } + + if($('input#' + idTarget)!== undefined) + { + $('input#' + idTarget , window.top.document).attr('value',id); // set new value + } + }