summaryrefslogtreecommitdiff
path: root/modules/server_add/helpers
diff options
context:
space:
mode:
authorTim Almdal <tnalmdal@shaw.ca>2009-04-08 15:11:55 +0000
committerTim Almdal <tnalmdal@shaw.ca>2009-04-08 15:11:55 +0000
commit523c467eed670c59580ede2ab1dbe8b4ad59c800 (patch)
tree149ee450f7430c5f2fb34ff6e3143865cf5cce54 /modules/server_add/helpers
parentb6f59e17f1a7f5627eea807dcd049bbc6242d3e6 (diff)
Fixes issues with Server Add:
1) Fixes Ticket #208 2) Fixes Ticket #190 3) Fixes an unticketed issue where two items could collide when creating the thumbnail and/or resize. For example, loading a.flv and a.jpg would have generated the same thumbnail image. This change adds a random value to the name to avoid conflicts. 4) Added item::__set() to clear the relative path if the name changes
Diffstat (limited to 'modules/server_add/helpers')
-rw-r--r--modules/server_add/helpers/server_add_task.php77
1 files changed, 37 insertions, 40 deletions
diff --git a/modules/server_add/helpers/server_add_task.php b/modules/server_add/helpers/server_add_task.php
index 1475a28a..2812777d 100644
--- a/modules/server_add/helpers/server_add_task.php
+++ b/modules/server_add/helpers/server_add_task.php
@@ -26,60 +26,57 @@ class server_add_task_Core {
static function add_from_server($task) {
$context = unserialize($task->context);
try {
- $parent = ORM::factory("item", $context["item_id"]);
+ $paths = array_keys(unserialize(module::get_var("server_add", "authorized_paths")));
+ $path = $paths[$context["next_path"]];
+ $file = $context["files"][$path][$context["position"]];
+ $parent = ORM::factory("item", $file["parent_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();
+ $name = $file["name"];
+ if ($file["type"] == "album") {
+ $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);
}
- $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);
+ /*
+ * Now that we have a new album. Go through the remaining files to import and change the
+ * parent_id of any file that has the same relative path as this album's path.
+ */
+ $album_path = "{$file['path']}/$name";
+ for ($idx = $context["position"] + 1; $idx < count($context["files"][$path]); $idx++) {
+ if (strpos($context["files"][$path][$idx]["path"], $album_path) === 0) {
+ $context["files"][$path][$idx]["parent_id"] = $album->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 {
+ $extension = strtolower(substr(strrchr($name, '.'), 1));
+ $source_path = "$path{$file['path']}/$name";
+ if (in_array($extension, array("flv", "mp4"))) {
+ $movie = movie::create($parent, $source_path, $name, $name,
+ null, user::active()->id);
} else {
- $photo = photo::create($parent, $source_path, basename($source_path),
- basename($source_path), null, user::active()->id);
+ $photo = photo::create($parent, $source_path, $name, $name,
+ null, user::active()->id);
}
}
+
+ $context["counter"]++;
+ if (++$context["position"] >= count($context["files"][$path])) {
+ $context["next_path"]++;
+ $context["position"] = 0;
+ }
} 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;
+ $task->percent_complete = ($context["counter"] / (float)$context["total"]) * 100;
+ $task->done = $context["counter"] == (float)$context["total"];
}
-
} \ No newline at end of file