diff options
Diffstat (limited to 'platform/www/lib/plugins/bureaucracy/helper/fieldfile.php')
-rw-r--r-- | platform/www/lib/plugins/bureaucracy/helper/fieldfile.php | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/platform/www/lib/plugins/bureaucracy/helper/fieldfile.php b/platform/www/lib/plugins/bureaucracy/helper/fieldfile.php new file mode 100644 index 0000000..285308e --- /dev/null +++ b/platform/www/lib/plugins/bureaucracy/helper/fieldfile.php @@ -0,0 +1,75 @@ +<?php + +/** + * File upload field + */ +class helper_plugin_bureaucracy_fieldfile extends helper_plugin_bureaucracy_field { + + /** + * Arguments: + * - cmd + * - label + * - ^ (optional) + * + * @param array $args The tokenized definition, only split at spaces + */ + function initialize($args) { + $this->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'] . ')' ); + } + } +} |