summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/server_add/controllers/server_add.php103
-rw-r--r--modules/server_add/helpers/server_add_menu.php2
-rw-r--r--modules/server_add/js/server_add.js52
-rw-r--r--modules/server_add/views/server_add_tree.html.php29
-rw-r--r--modules/server_add/views/server_add_tree_dialog.html.php25
5 files changed, 117 insertions, 94 deletions
diff --git a/modules/server_add/controllers/server_add.php b/modules/server_add/controllers/server_add.php
index 4cd3cec7..45ec0a2e 100644
--- a/modules/server_add/controllers/server_add.php
+++ b/modules/server_add/controllers/server_add.php
@@ -18,26 +18,38 @@
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
class Server_Add_Controller extends Controller {
- public function index($id) {
- $paths = unserialize(module::get_var("server_add", "authorized_paths"));
-
+ public function browse($id) {
if (!user::active()->admin) {
access::forbidden();
}
+
+ $paths = unserialize(module::get_var("server_add", "authorized_paths"));
+ foreach (array_keys($paths) as $path) {
+ $files[$path] = basename($path);
+ }
+
$item = ORM::factory("item", $id);
$view = new View("server_add_tree_dialog.html");
$view->item = $item;
+ $view->tree = new View("server_add_tree.html");
+ $view->tree->files = $files;
+ print $view;
+ }
- $tree = new View("server_add_tree.html");
- $tree->data = array();
- $tree->checked = false;
- $tree->tree_id = "tree_$id";
- foreach (array_keys($paths) as $path) {
- $tree->data[$path] = array("path" => $path, "is_dir" => true);
+ private function _validate_path($path) {
+ if (!is_readable($path) || is_link($path)) {
+ throw new Exception("@todo BAD_PATH");
}
- $view->tree = $tree->__toString();
- print $view;
+
+ $authorized_paths = unserialize(module::get_var("server_add", "authorized_paths"));
+ foreach (array_keys($authorized_paths) as $valid_path) {
+ if (strpos($path, $valid_path) === 0) {
+ return;
+ }
+ }
+
+ throw new Exception("@todo BAD_PATH");
}
public function children() {
@@ -45,31 +57,32 @@ class Server_Add_Controller extends Controller {
access::forbidden();
}
- $paths = unserialize(module::get_var("server_add", "authorized_paths"));
- $path_valid = false;
- $path = $this->input->post("path");
- $checked = $this->input->post("checked") == "true";
+ $path = $this->input->get("path");
+ $this->_validate_path($path);
- foreach (array_keys($paths) as $valid_path) {
- if ($path_valid = strpos($path, $valid_path) === 0) {
- break;
+ $tree = new View("server_add_tree.html");
+ $tree->files = array();
+ $tree->tree_id = substr(md5($path), 10);
+
+ foreach (glob("$path/*") as $file) {
+ if (!is_readable($file)) {
+ continue;
}
- }
- if (empty($path_valid)) {
- throw new Exception("@todo BAD_PATH");
- }
- if (!is_readable($path) || is_link($path)) {
- kohana::show_404();
- }
+ if (!is_dir($file)) {
+ $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
+ if (!in_array($ext, array("gif", "jpeg", "jpg", "png", "flv", "mp4"))) {
+ continue;
+ }
+ }
- $tree = new View("server_add_tree.html");
- $tree->data = $this->_get_children($path);
- $tree->checked = $checked;
- $tree->tree_id = "tree_" . md5($path);
+ $tree->files[$file] = basename($file);
+ }
print $tree;
}
+ /* ================================================================================ */
+
function start($id) {
if (!user::active()->admin) {
access::forbidden();
@@ -237,36 +250,4 @@ class Server_Add_Controller extends Controller {
return $count;
}
-
- private function _get_children($path) {
- $directory_list = $file_list = array();
- $files = new DirectoryIterator($path);
- foreach ($files as $file) {
- if ($file->isDot() || $file->isLink()) {
- continue;
- }
- $filename = $file->getFilename();
- if ($filename[0] != ".") {
- if ($file->isDir()) {
- $directory_list[$filename] = array("path" => $file->getPathname(), "is_dir" => true);
- } else {
- $extension = strtolower(substr(strrchr($filename, '.'), 1));
- if ($file->isReadable() &&
- in_array($extension, array("gif", "jpeg", "jpg", "png", "flv", "mp4"))) {
- $file_list[$filename] = array("path" => $file->getPathname(), "is_dir" => false);
- }
- }
- }
- }
-
- ksort($directory_list);
- ksort($file_list);
-
- // We can't use array_merge here because if a file name is numeric, it will
- // get renumbered, so lets do it ourselves
- foreach ($file_list as $file => $fileinfo) {
- $directory_list[$file] = $fileinfo;
- }
- return $directory_list;
- }
} \ No newline at end of file
diff --git a/modules/server_add/helpers/server_add_menu.php b/modules/server_add/helpers/server_add_menu.php
index 23878913..0f01eb64 100644
--- a/modules/server_add/helpers/server_add_menu.php
+++ b/modules/server_add/helpers/server_add_menu.php
@@ -38,7 +38,7 @@ class server_add_menu_Core {
$server_add = Menu::factory("dialog")
->id("server_add")
->label(t("Add from server"))
- ->url(url::site("server_add/index/$item->id"));
+ ->url(url::site("server_add/browse/$item->id"));
$add_photos_item = $menu->get("add_photos_item");
$add_photos_menu = $menu->get("add_photos_menu");
diff --git a/modules/server_add/js/server_add.js b/modules/server_add/js/server_add.js
index e2526dbe..47340c45 100644
--- a/modules/server_add/js/server_add.js
+++ b/modules/server_add/js/server_add.js
@@ -1,3 +1,44 @@
+function open_close_branch(path, id) {
+ var parent = $("#file_" + id);
+ var children = $("#tree_" + id);
+ var icon = parent.find(".ui-icon:first");
+
+ if (!children.html()) {
+ parent.addClass("gLoadingSmall");
+ $.ajax({
+ url: GET_CHILDREN_URL.replace("__PATH__", path),
+ success: function(data, textStatus) {
+ children.html(data);
+ parent.removeClass("gLoadingSmall");
+
+ // Propagate checkbox value
+ children.find("input[type=checkbox]").attr(
+ "checked", parent.find("input[type=checkbox]:first").attr("checked"));
+ },
+ });
+ }
+
+ children.slideToggle("fast", function() {
+ if (children.is(":hidden")) {
+ icon.addClass("ui-icon-plus");
+ icon.removeClass("ui-icon-minus");
+ } else {
+ icon.addClass("ui-icon-minus");
+ icon.removeClass("ui-icon-plus");
+ parent.removeClass("gCollapsed");
+ }
+ });
+}
+
+function click_node(checkbox) {
+ var parent = $(checkbox).parents("li").get(0);
+ var checked = $(checkbox).attr("checked");
+ $(parent).find("input[type=checkbox]").attr("checked", checked);
+}
+
+/* ================================================================================ */
+
+/*
var paused = false;
var task = null;
@@ -82,16 +123,6 @@ function get_url(uri, task_id) {
return url;
}
-function checkbox_click(checkbox) {
- var parent = $(checkbox).parents("li").get(0);
- var checked = $(checkbox).attr("checked");
- if (!$(parent).hasClass("gCollapsed")) {
- $(parent).find(".gCheckboxTree input[type=checkbox]").attr("checked", checked);
- }
- var checkboxes = $("#gServerAdd :checkbox[checked]");
- $("#gServerAdd form :submit").attr("disabled", checkboxes.length == 0);
-}
-
function load_children(icon) {
$("#gDialog").addClass("gDialogLoadingLarge");
var parent = icon.parentNode;
@@ -203,3 +234,4 @@ function display_upload_error(error) {
});
}
+*/
diff --git a/modules/server_add/views/server_add_tree.html.php b/modules/server_add/views/server_add_tree.html.php
index 44f6bfbc..f8205a8b 100644
--- a/modules/server_add/views/server_add_tree.html.php
+++ b/modules/server_add/views/server_add_tree.html.php
@@ -1,12 +1,19 @@
<?php defined("SYSPATH") or die("No direct script access.") ?>
-<ul id="<?= $tree_id ?>" class="gCheckboxTree">
- <? foreach ($data as $file => $file_info): ?>
- <li class="<?= empty($file_info["is_dir"]) ? "gFile" : "gDirectory gCollapsed ui-icon-left" ?>">
- <? if (!empty($file_info["is_dir"])): ?>
- <span class="ui-icon ui-icon-plus"></span>
- <? endif ?>
- <label> <?= form::checkbox("checkbox[]", p::clean($file_info["path"]), $checked) . " " . p::clean($file) ?> </label>
- <div class="gServerAddChildren" style="display: none"></div>
- </li>
- <? endforeach ?>
-</ul>
+<? foreach ($files as $file => $name): ?>
+<? $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) ?>
+ </label>
+ <? if (is_dir($file)): ?>
+ <ul id="tree_<?= $id ?>" style="display: none"></ul>
+ <? endif ?>
+</li>
+<? endforeach ?>
+<? if (!$files): ?>
+<li class="gFile"> <i> <?= t("empty") ?> </i> </li>
+<? endif ?>
diff --git a/modules/server_add/views/server_add_tree_dialog.html.php b/modules/server_add/views/server_add_tree_dialog.html.php
index e2aa5d44..6e4db620 100644
--- a/modules/server_add/views/server_add_tree_dialog.html.php
+++ b/modules/server_add/views/server_add_tree_dialog.html.php
@@ -1,26 +1,29 @@
<?php defined("SYSPATH") or die("No direct script access.") ?>
-<script>
- var FATAL_ERROR = "<?= t("Fatal Error") ?>";
- var FILE_IMPORT_WARNING = "<?= t("Add from server warning") ?>";
- $("#gServerAdd").ready(function() {
- init_server_add_form();
- });
+<script type="text/javascript">
+ var GET_CHILDREN_URL = "<?= url::site("server_add/children?path=__PATH__") ?>";
</script>
+
<div id="gServerAdd">
<h1 style="display: none;"><?= t("Add Photos to '%title'", array("title" => p::clean($item->title))) ?></h1>
<p id="gDescription"><?= t("Photos will be added to album:") ?></p>
<ul class="gBreadcrumbs">
<? foreach ($item->parents() as $parent): ?>
- <li><?= p::clean($parent->title) ?></li>
+ <li>
+ <?= p::clean($parent->title) ?>
+ </li>
<? endforeach ?>
- <li class="active"><?= p::clean($item->title) ?></li>
+ <li class="active">
+ <?= p::clean($item->title) ?>
+ </li>
</ul>
- <?= form::open(url::abs_site("__ARGS__/{$id}__TASK_ID__?csrf=$csrf"), array("method" => "post")) ?>
- <div id="gServerAddTree" >
+ <?= form::open(url::abs_site("server_add/add"), array("method" => "post")) ?>
+ <?= access::csrf_form_field(); ?>
+ <ul id="gServerAddTree" class="gCheckboxTree">
<?= $tree ?>
- </div>
+ </ul>
+
<span>
<?= form::submit(array("id" => "gServerPauseButton", "name" => "add", "disabled" => true, "class" => "submit", "style" => "display:none"), t("Pause")) ?>
<?= form::submit(array("id" => "gServerAddButton", "name" => "add", "disabled" => true, "class" => "submit"), t("Add")) ?>