76 lines
2.5 KiB
PHP
76 lines
2.5 KiB
PHP
<?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'] . ')' );
|
|
}
|
|
}
|
|
}
|