init($args); //default namespace for file upload (pagepath:file_name) $this->opt['namespace'] = '.'; //check whenever the first argument is an upload namespace if (isset($args[0]) && preg_match('/^[a-z.\-_:]+$/', $args[0])) { $this->opt['namespace'] = array_shift($args); } $this->standardArgs($args); $attr = array(); if(!isset($this->opt['optional'])) { $attr['required'] = 'required'; } $this->tpl = form_makeFileField('@@NAME@@', '@@DISPLAY@@', '@@ID@@', '@@CLASS@@', $attr); if(!isset($this->opt['optional'])){ $this->tpl['class'] .= ' required'; } } /** * Handle a post to the field * * Accepts and validates a posted value. * * @param array $value The passed value or array or null if none given * @param helper_plugin_bureaucracy_field[] $fields (reference) form fields (POST handled upto $this field) * @param int $index index number of field in form * @param int $formid unique identifier of the form which contains this field * @return bool Whether the passed filename is valid */ public function handle_post($value, &$fields, $index, $formid) { $this->opt['file'] = $value; return parent::handle_post($value['name'], $fields, $index, $formid); } /** * @throws Exception max size, required or upload error */ protected function _validate() { global $lang; parent::_validate(); $file = $this->getParam('file'); if($file['error'] == 1 || $file['error'] == 2) { throw new Exception(sprintf($lang['uploadsize'],filesize_h(php_to_byte(ini_get('upload_max_filesize'))))); } else if($file['error'] == 4) { if(!isset($this->opt['optional'])) { throw new Exception(sprintf($this->getLang('e_required'),hsc($this->opt['label']))); } } else if( $file['error'] || !is_uploaded_file($file['tmp_name'])) { throw new Exception(hsc($this->opt['label']) .' '. $lang['uploadfail'] . ' (' .$file['error'] . ')' ); } } }