public function is_file_valid_mimetype($file_path) { $has_files_global = FALSE; if (isset($_FILES[$this->key]) and !empty($_FILES[$this->key]['tmp_name'])) { $file_path = $_FILES[$this->key]['tmp_name']; $has_files_global = TRUE; } $extensions = array(); foreach ($this->mimetypes as $mimetype) { $valid_exts = File::exts_by_mime($mimetype); foreach ($valid_exts as $ext) { $extensions[] = $ext; } } $mimetype = explode(';', finfo_file(finfo_open(FILEINFO_MIME), $file_path))[0]; if ($has_files_global) { return in_array($mimetype, $this->mimetypes) and Upload::type($_FILES[$this->key], $extensions); } else { return in_array($mimetype, $this->mimetypes); } }
/** * Lookup a single file extension by MIME type. * * @param string $type MIME type to lookup * @return mixed First file extension matching or false */ public static function ext_by_mime($type) { return current(File::exts_by_mime($type)); }
public function action_edit() { $city = $this->get_orm_model('city', $this->_base_url); $this->values = $city->as_array(); $old_name = $city->name; if ($_POST) { $city->values($_POST, array('name', 'genitive_name', 'dativus_name')); $metro_count = count($city->metro->find_all()); if ($metro_count > 0) { $this->validation = Validation::factory($_FILES)->rule('metro_map', 'Upload::type', array(':value', array('jpg', 'jpeg', 'png', 'gif')))->rule('metro_map_clear', 'Upload::type', array(':value', array('jpg', 'jpeg', 'png', 'gif'))); } try { $city->update($this->validation); echo 1; foreach ($city->contents->find_all() as $content) { $content_ids[$content->type] = $content->id; } if ($metro_count > 0 and $this->validation->check()) { $hash_name = md5(date('YmdHis')); foreach ($_FILES as $img_name => $image) { if (!$image['size'] > 0) { continue; } $exts = File::exts_by_mime($image['type']); if ($exts[0] == 'jpe') { $exts[0] = 'jpeg'; } $name = $img_name == 'metro_map' ? $hash_name . '.' . $exts[0] : $hash_name . '_clear.' . $exts[0]; Upload::save($_FILES[$img_name], $name, 'assets/img/metro'); $path = 'assets/img/metro/' . $name; echo $path; $city_img_column = 'img_' . $img_name; $image_gd = Image::factory($path); if ($image_gd->width > 950) { $image_gd->resize(950, NULL); $image_gd->save(); } $city->{$city_img_column} = '/' . $path; } $city->update(); } $msg = __(Kohana::message('admin', 'city.edit_success'), array(':name' => $old_name)); $msg .= __(Kohana::message('admin', 'city.success_work_car_content_urls'), array(':content_id_car' => $content_ids['auto'], ':content_id_work' => $content_ids['work'])); if (array_key_exists('district', $content_ids)) { $msg .= __(Kohana::message('admin', 'city.success_district_urls'), array(':content_id_district' => $content_ids['district'])); } if (array_key_exists('metro', $content_ids)) { $msg .= __(Kohana::message('admin', 'city.success_metro_urls'), array(':content_id_metro' => $content_ids['metro'])); } Message::set(Message::SUCCESS, $msg); $this->request->redirect($this->_base_url); } catch (ORM_Validation_Exception $e) { $this->errors = $e->errors('models'); $this->values = $_POST; } } $this->template->title = 'Редактирование города "' . $old_name . '"'; $this->template->bc['#'] = $this->template->title; $this->view = View::factory('backend/item/city/form')->set('title', $this->template->title)->set('values', $this->values)->set('errors', $this->errors)->set('metro_stations_count', count($city->metro->find_all())); $this->template->content = $this->view; }
/** * Detirmine the filename from the url * @param string $url * @param string $mime_type * @return string */ public static function filename_from_url($url, $mime_type = NULL) { $filename_candidates = Upload_Util::filenames_candidates_from_url($url); $filename_candidates = array_filter($filename_candidates, 'Upload_Util::is_filename'); $file = count($filename_candidates) ? reset($filename_candidates) : uniqid(); $extensions = File::exts_by_mime($mime_type); $extension_candiates = array(is_array($extensions) ? end($extensions) : $extensions, pathinfo($file, PATHINFO_EXTENSION), 'jpg'); $extension_candiates = array_filter($extension_candiates); $extension = reset($extension_candiates); return Upload_Util::sanitize(pathinfo($file, PATHINFO_FILENAME)) . '.' . $extension; }