summaryrefslogtreecommitdiff
path: root/platform/www/lib/plugins/bureaucracy/helper/fieldfile.php
diff options
context:
space:
mode:
Diffstat (limited to 'platform/www/lib/plugins/bureaucracy/helper/fieldfile.php')
-rw-r--r--platform/www/lib/plugins/bureaucracy/helper/fieldfile.php75
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'] . ')' );
+ }
+ }
+}