public function validate($data = NULL) { foreach ($this->_meta->fields() as $column => $field) { if ($field instanceof Field_File) { Torn_Uploader::init($field, $this); } } return parent::validate($data); }
public function action_upload() { $field = 'Filedata'; if (($value = Arr::get($_FILES, $field, FALSE)) === FALSE) { $this->request->response = 'error'; return; } if (!Upload::not_empty($value) or !Upload::valid($value)) { $this->request->response = 'error'; return; } if ($tmp_name = Torn_Uploader::upload_to_cache($value, $field)) { $this->request->response = 'done;' . $tmp_name; } else { $this->request->response = 'error'; } }
<?php defined('SYSPATH') or die('No direct script access.'); if (Kohana::config('torn')->default_controller) { Route::set('torn/upload', 'torn/upload')->defaults(array('controller' => 'torn', 'action' => 'upload')); Route::set('torn/config', 'torn/config')->defaults(array('controller' => 'torn', 'action' => 'config')); Route::set('torn/cancel', 'torn/cancel(/<hash>)', array('hash' => '(?:[a-z0-9]{32}-[a-z0-9]{32})|(?:--hash--)'))->defaults(array('controller' => 'torn', 'action' => 'cancel', 'hash' => NULL)); Route::set('torn/media', 'torn/media/<media>', array('media' => '(.+?\\.(js|swf))(\\+.+?\\.js)*'))->defaults(array('controller' => 'torn', 'action' => 'media')); } Torn_Uploader::garbage_collector();
public function invoke(Validate $array, $field) { $value = $array[$field]; if (!is_array($value)) { return TRUE; } $cache = Cache::instance(); $surfix = Kohana::config('torn')->surfix->temp; $cached = $this->model->get($field . $surfix); $current = $this->model->get($field, FALSE); $used_cached = FALSE; $empty_check = FALSE; if (!Upload::not_empty($value) and empty($cached) and !empty($current)) { $this->model->set($field, $current); $array[$field] = $current; return TRUE; } if (!Upload::not_empty($value) and preg_match('/^[a-z0-9]{32}-[a-z0-9]{32}$/iD', $cached)) { $value = Arr::get($cache->get($cached), 'upload', $value); $used_cached = TRUE; } $modified_rules = $this->rules; foreach ($this->rules as $rule => $params) { if (!utf8::strcasecmp($rule, 'Upload::not_empty')) { unset($modified_rules[$rule]); $modified_rules['Torn_Uploader::not_empty'] = NULL; break; } } $validate = Validate::factory(array($field => $value))->filters($field, $this->filters)->rules($field, $modified_rules)->callbacks($field, $this->callbacks); if (!$validate->check()) { foreach ($validate->errors() as $v) { list($error, $params) = $v; $array->error($field, $error, $params); } return FALSE; } $validate = $array->as_array(); $value = $validate[$field]; if ($tmp_name = Torn_Uploader::upload_to_cache($value, $field) and !$used_cached) { $array[$field] = $tmp_name; } else { $array[$field] = Arr::get($_POST, $field . $surfix, $value); } $this->model->set($field, $array[$field]); return TRUE; }