+ * // Process uploaded file (sent by the form below), it'll print out message (if any)
+ * if(isset($_POST['etrigger_uploadfiles']))
+ * {
+ * // NOTE: chmod permissions after upload are set to 0755
+ * echo e107::getParser()->parseTemplate('{UPLOADFILE='.e_MEDIA.'public|process=1&upload_file_mask=jpg,jpeg,png,gif&upload_final_chmod=493}');
+ * }
+ *
+ * // Render upload form
+ * echo '';
+ *
+ *
+ * @todo Human readable *nix like permissions option (upload_final_chmod) e.g. 'rw-rw-r--' --> 0664, 'rwxrwxrwx' --> 0777
+ *
+ * @param string $parm upload_path|parameters (GET query format)
+ * Available parameters:
+ * - trigger [render] (string): name attribute of upload trigger button, default 'uploadfiles'
+ * - name [render|processing] (string): name of upload (file) field, without array brackets ([]), default 'file_userfile'
+ * - up_container [render] (string): the id attribute of upload container (containing upload field(s)), default 'up_container'
+ * - up_row [render] (string): the id attribute of upload added fields (diuplicates), default 'upline'
+ * - process [render|processing] ('0'|'1' boolean): main shortcode action, 0 - render markup, 1 - process uploaded files, default '0'
+ * - upload_file_mask [processing] (string): 'file_mask' parameter of process_uploaded_files() - comma-separated list of file types which if defined limits the allowed file types to those which are
+ * in both this list and the file specified by the 'filetypes' option. Enables restriction to, for example, image files. {@link process_uploaded_files()),
+ * default is empty string
+ * - upload_filetypes [processing] (string): 'filetypes' parameter of process_uploaded_files() - name of file containing list of valid file types, default is empty string
+ * - upload_extra_file_types [processing] (string): 'extra_file_types' parameter of process_uploaded_files() - '0' (default) rejects totally unknown file extensions;
+ * '1' accepts totally unknown file extensions which are in $options['filetypes'] file; comma-separated list of additional permitted file extensions
+ * - upload_final_chmod [processing] (string): 'final_chmod' parameter of process_uploaded_files() - chmod() to be applied to uploaded files (0644 default).
+ * NOTE: you need to provide number with numerci base of decimal (as a string) which will be auto-converted to octal number
+ * Example: '493' --> 0755; '511' --> 0777
+ * - upload_max_upload_size [processing] (string): 'max_upload_size' parameter of process_uploaded_files() - maximum size of uploaded files in bytes,
+ * or as a string with a 'multiplier' letter (e.g. 16M) at the end, default is empty string
+ * - upload_overwrite [processing] ('0'|'1' boolean): 'overwrite' parameter of process_uploaded_files() - maximum number of files which can be uploaded - default is '0' (unlimited)
+ * - return_type [processing] ('0'|'message'|'result'): 'message' (default) - return messages (eMessage::render() method);
+ * 'result' - return array generated by process_uploaded_files();
+ * '0' - return empty string;
+ * NOTE: upload messages are added to 'upload_shortcode' message namespace
+ *
+ * // render messages manually (return_type=0)
+ * echo e107::getMessage()->render('upload_shortcode');
+ * // OR copy them to the default message namespace
+ * e107::getMessage()->moveStack('upload_shortcode', 'default');
+ * // Do something... and render all messages
+ * echo e107::getMessage()->render();
+ *
+ * @return mixed Based on 'return_type' parameter - string or uploaded array result
+ */
+function uploadfile_shortcode($parm)
+{
+ if(!FILE_UPLOADS)
+ {
+ return LAN_UPLOAD_SERVEROFF;
+ }
+ if(USER_AREA === TRUE && !check_class(e107::getPref('upload_class')))
+ {
+ return LAN_DISABLED;
+ }
+
+ $parm = explode('|', $parm, 2);
+
+ $path = $parm[0];
+ if($path && !is_writable($path))
+ {
+ return LAN_UPLOAD_777." ".str_replace("../","",$path)."";
+ }
+
+ $parms = array();
+ parse_str(varset($parm[1], ''), $parms);
+
+ $parms = array_merge(array(
+ 'trigger' => 'uploadfiles',
+ 'name' => 'file_userfile',
+ 'up_container' => 'up_container',
+ 'up_row' => 'upline',
+ 'process' => '0',
+ 'upload_file_mask' => '',
+ 'upload_filetypes' => '',
+ 'upload_extra_file_types' => '0',
+ 'upload_final_chmod' => '',
+ 'upload_max_upload_size' => '0',
+ 'upload_max_file_count' => '0',
+ 'upload_overwrite' => '0',
+ 'return_type' => 'message',
+ ), $parms);
+
+ // PROCESS UPLOADED FILES
+ if($parms['process'])
+ {
+ e107_require_once(e_HANDLER.'upload_handler.php');
+ $options = array(
+ 'file_mask' => $parms['upload_file_mask'],
+ 'filetypes' => $parms['upload_filetypes'],
+ 'extra_file_types' => $parms['upload_extra_file_types'] ? true : false,
+ 'final_chmod' => $parms['upload_final_chmod'] ? intval(intval($parms['upload_final_chmod']), 8) : 0644,
+ 'max_upload_size' => $parms['upload_max_upload_size'],
+ 'file_array_name' => $parms['name'],
+ 'max_file_count' => $parms['upload_max_file_count'],
+ 'overwrite' => $parms['upload_overwrite'] ? true : false,
+ );
+
+ $uploaded = process_uploaded_files($path, false, $options);
+ if($uploaded)
+ {
+ $emessage = e107::getMessage();
+ foreach ($uploaded as $finfo)
+ {
+ $emessage->addStack($finfo['message'], 'upload_shortcode', $finfo['error'] ? E_MESSAGE_ERROR : E_MESSAGE_SUCCESS);
+ }
+ return($parms['return_type'] == 'message' ? $emessage->render('upload_shortcode') : '');
+ }
+ return($parms['return_type'] == 'result' ? $uploaded : '');
+ }
+
+ // RENDER FORM
+ $onclickt = !isset($parms['nowarn']) ? " onclick=\"return jsconfirm('".LAN_UPLOAD_CONFIRM."')\"" : '';
+ $onclickd = " onclick=\"duplicateHTML('{$parms['up_row']}','{$parms['up_container']}');\"";
+ $name = $parms['name'].'[]';
+
+ $text .="
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ";
+
+ return $text;
+}
\ No newline at end of file