From 5c82ce33a21d309a58413106cc8910a2704137ee Mon Sep 17 00:00:00 2001 From: Tim Almdal Date: Tue, 10 Mar 2009 21:30:33 +0000 Subject: 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? --- modules/server_add/helpers/server_add_task.php | 85 ++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 modules/server_add/helpers/server_add_task.php (limited to 'modules/server_add/helpers/server_add_task.php') 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 @@ +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 -- cgit v1.2.3