summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/server_add/controllers/server_add.php44
-rw-r--r--modules/server_add/views/server_add_tree.html.php6
2 files changed, 35 insertions, 15 deletions
diff --git a/modules/server_add/controllers/server_add.php b/modules/server_add/controllers/server_add.php
index cf7077a8..446c5074 100644
--- a/modules/server_add/controllers/server_add.php
+++ b/modules/server_add/controllers/server_add.php
@@ -21,7 +21,7 @@ class Server_Add_Controller extends Admin_Controller {
public function browse($id) {
$paths = unserialize(module::get_var("server_add", "authorized_paths"));
foreach (array_keys($paths) as $path) {
- $files[$path] = basename($path);
+ $files[] = $path;
}
$item = ORM::factory("item", $id);
@@ -54,7 +54,7 @@ class Server_Add_Controller extends Admin_Controller {
}
}
- $tree->files[$file] = basename($file);
+ $tree->files[] = $file;
}
print $tree;
}
@@ -119,8 +119,8 @@ class Server_Add_Controller extends Admin_Controller {
case "init":
$task->set("mode", "build-file-list");
$task->set("queue", array_keys($selections));
- $task->status = t("Starting up");
$task->percent_complete = 0;
+ $task->status = t("Starting up");
batch::start();
break;
@@ -132,6 +132,11 @@ class Server_Add_Controller extends Admin_Controller {
while ($queue && microtime(true) - $start < 0.5) {
$file = array_shift($queue);
if (is_dir($file)) {
+ $entry = ORM::factory("server_add_file");
+ $entry->task_id = $task->id;
+ $entry->file = $file;
+ $entry->save();
+
$children = empty($selections[$file]) ? glob("$file/*") : $selections[$file];
} else {
$children = array($file);
@@ -187,6 +192,7 @@ class Server_Add_Controller extends Admin_Controller {
$item = model_cache::get("item", $item_id);
foreach ($entries as $entry) {
+ Kohana::log("alert",print_r($albums,1));
if (microtime(true) - $start > 0.5) {
break;
}
@@ -195,19 +201,33 @@ class Server_Add_Controller extends Admin_Controller {
$name = basename($relative_path);
$title = item::convert_filename_to_title($name);
if (is_dir($entry->file)) {
- if (isset($albums[$relative_path]) && $parent_id = $albums[$relative_path]) {
+ $parent_path = dirname($relative_path);
+ Kohana::log("alert",print_r("rp: $relative_path -> $parent_path",1));
+ if (isset($albums[$parent_path]) && $parent_id = $albums[$parent_path]) {
$parent = ORM::factory("item", $parent_id);
} else {
- $album = album::create($item, $name, $title, null, user::active()->id);
- $albums[$relative_path] = $album->id;
- $task->set("albums", $albums);
- }
- } else {
- if (strpos($relative_path, "/") !== false) {
- $parent = ORM::factory("item", $albums[dirname($relative_path)]);
- } else {
$parent = $item;
}
+ $album = album::create($parent, $name, $title, null, user::active()->id);
+ $albums[$relative_path] = $album->id;
+ $task->set("albums", $albums);
+ } else {
+ // Find the nearest selected parent. We check to see if any of the candidate parents
+ // were selected in the UI and if so, we use that. Otherwise, we fall back to making
+ // the parent the current item.
+ $parent_path = $relative_path;
+ $parent = null;
+ do {
+ if (strpos($parent_path, "/") !== false) {
+ if (array_key_exists($parent_path, $albums)) {
+ $parent = ORM::factory("item", $albums[$parent_path]);
+ } else {
+ $parent_path = dirname($parent_path);
+ }
+ } else {
+ $parent = $item;
+ }
+ } while (!$parent);
$extension = strtolower(pathinfo($name, PATHINFO_EXTENSION));
if (in_array($extension, array("gif", "png", "jpg", "jpeg"))) {
diff --git a/modules/server_add/views/server_add_tree.html.php b/modules/server_add/views/server_add_tree.html.php
index f8205a8b..74bc40e0 100644
--- a/modules/server_add/views/server_add_tree.html.php
+++ b/modules/server_add/views/server_add_tree.html.php
@@ -1,13 +1,13 @@
<?php defined("SYSPATH") or die("No direct script access.") ?>
-<? foreach ($files as $file => $name): ?>
+<? foreach ($files as $file): ?>
<? $id = substr(md5($file), 10) ?>
<li id="file_<?= $id ?>" class="<?= is_file($file) ? "gFile" : "gDirectory gCollapsed ui-icon-left" ?>">
<? if (is_dir($file)): ?>
<span onclick="open_close_branch('<?=$file?>', '<?=$id?>')" class="ui-icon ui-icon-plus"></span>
<? endif ?>
<label>
- <?= form::checkbox("path[]", p::clean($file), false, "onclick=click_node(this)") ?>
- <?= p::clean($name) ?>
+ <?= form::checkbox("path[]", $file, false, "onclick=click_node(this)") ?>
+ <?= p::clean(basename($file)) ?>
</label>
<? if (is_dir($file)): ?>
<ul id="tree_<?= $id ?>" style="display: none"></ul>