diff options
author | Tim Almdal <tnalmdal@shaw.ca> | 2009-03-10 21:30:33 +0000 |
---|---|---|
committer | Tim Almdal <tnalmdal@shaw.ca> | 2009-03-10 21:30:33 +0000 |
commit | 5c82ce33a21d309a58413106cc8910a2704137ee (patch) | |
tree | 713fa89dace64d8dfa6135dc3f09b24e6bad71cd /modules/server_add/helpers/server_add_task.php | |
parent | 068c44e2011aee23ad6f43c0e238c2dba65da8e3 (diff) |
Refactor the server add module to make use of the task api (Ticket
#125). Haven't quite figured out what to do with the errors in the
context. Maybe they should show on the mainenance screen?
Diffstat (limited to 'modules/server_add/helpers/server_add_task.php')
-rw-r--r-- | modules/server_add/helpers/server_add_task.php | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/modules/server_add/helpers/server_add_task.php b/modules/server_add/helpers/server_add_task.php new file mode 100644 index 00000000..1475a28a --- /dev/null +++ b/modules/server_add/helpers/server_add_task.php @@ -0,0 +1,85 @@ +<?php defined("SYSPATH") or die("No direct script access."); +/** + * Gallery - a web based photo album viewer and editor + * Copyright (C) 2000-2008 Bharat Mediratta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + */ +class server_add_task_Core { + static function available_tasks() { + // Return empty array so nothing appears in the maintenance screen + return array(); + } + + static function add_from_server($task) { + $context = unserialize($task->context); + try { + $parent = ORM::factory("item", $context["item_id"]); + access::required("server_add", $parent); + if (!$parent->is_album()) { + throw new Exception("@todo BAD_ALBUM"); + } + + $paths = unserialize(module::get_var("server_add", "authorized_paths")); + $path = $context["paths"][$context["next"]]; + + $path_valid = false; + $item_path = ""; + foreach (array_keys($paths) as $valid_path) { + if ($path_valid = strpos($path, $valid_path) === 0) { + $item_path = substr($path, strlen($valid_path)); + $item_path = explode("/", ltrim($item_path,"/")); + $source_path = $valid_path; + break; + } + } + if (empty($path_valid)) { + throw new Exception("@todo BAD_PATH"); + } + for ($i = 0; $i < count($item_path); $i++) { + $name = $item_path[$i]; + $source_path .= "/$name"; + if (is_link($source_path) || !is_readable($source_path)) { + kohana::show_404(); + } + $pathinfo = pathinfo($source_path); + set_time_limit(30); + if (is_dir($source_path)) { + $album = ORM::factory("item") + ->where("name", $name) + ->where("parent_id", $parent->id) + ->find(); + if (!$album->loaded) { + $album = album::create($parent, $name, $name, null, user::active()->id); + } + $parent = $album; + } else if (in_array($pathinfo["extension"], array("flv", "mp4"))) { + $movie = movie::create($parent, $source_path, basename($source_path), + basename($source_path), null, user::active()->id); + } else { + $photo = photo::create($parent, $source_path, basename($source_path), + basename($source_path), null, user::active()->id); + } + } + } catch(Exception $e) { + $context["errors"][$path] = $e->getMessage(); + } + $task->done = (++$context["next"]) >= count($context["paths"]); + $task->context = serialize($context); + $task->state = "success"; + $task->percent_complete = ($context["next"] / (float)count($context["paths"])) * 100; + } + +}
\ No newline at end of file |