summaryrefslogtreecommitdiff
path: root/modules/organize/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'modules/organize/controllers')
-rw-r--r--modules/organize/controllers/organize.php194
1 files changed, 168 insertions, 26 deletions
diff --git a/modules/organize/controllers/organize.php b/modules/organize/controllers/organize.php
index 2b6e4186..df3130be 100644
--- a/modules/organize/controllers/organize.php
+++ b/modules/organize/controllers/organize.php
@@ -18,43 +18,185 @@
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
class Organize_Controller extends Controller {
+ function frame($album_id) {
+ $album = ORM::factory("item", $album_id);
+ access::required("view", $album);
+ access::required("edit", $album);
+
+ $v = new View("organize_frame.html");
+ $v->album = $album;
+ print $v;
+ }
+
function dialog($album_id) {
+ $album = ORM::factory("item", $album_id);
+ access::required("view", $album);
+ access::required("edit", $album);
+
+ $v = new View("organize_dialog.html");
+ $v->album = $album;
+ print $v;
+ }
+
+ function tree($selected_album_id) {
+ $root = ORM::factory("item", Input::instance()->post("root_id", 1));
+ $selected_album = ORM::factory("item", $selected_album_id);
+ access::required("view", $root);
+ access::required("view", $selected_album);
+
+ $tree = $this->_get_tree($root, $selected_album);
+ json::reply($tree);
+ }
+
+ function album_info($album_id) {
+ $album = ORM::factory("item", $album_id);
+ access::required("view", $album);
+
+ $data = array(
+ "sort_column" => $album->sort_column,
+ "sort_order" => $album->sort_order,
+ "editable" => access::can("edit", $album),
+ "title" => $album->title,
+ "children" => array());
+
+ foreach ($album->viewable()->children() as $child) {
+ $dims = $child->scale_dimensions(120);
+ $data["children"][] = array(
+ "id" => $child->id,
+ "thumb_url" => $child->has_thumb() ? $child->thumb_url() : null,
+ "width" => $dims[1],
+ "height" => $dims[0],
+ "type" => $child->type,
+ "title" => $child->title);
+ }
+ json::reply($data);
+ }
+
+ function reparent() {
+ access::verify_csrf();
+
$input = Input::instance();
+ $new_parent = ORM::factory("item", $input->post("target_id"));
+ access::required("edit", $new_parent);
+
+ foreach (explode(",", $input->post("source_ids")) as $source_id) {
+ $source = ORM::factory("item", $source_id);
+ access::required("edit", $source->parent());
+ if ($source->contains($new_parent) || $source->id == $new_parent->id) {
+ // Can't move an item into its own hierarchy. Silently skip this,
+ // since the UI shouldn't even allow this operation.
+ continue;
+ }
+
+ $source->parent_id = $new_parent->id;
+ $source->save();
+ }
+ json::reply(null);
+ }
+
+ function set_sort($album_id) {
+ access::verify_csrf();
$album = ORM::factory("item", $album_id);
access::required("view", $album);
access::required("edit", $album);
- $user = identity::active_user();
- $sort_fields = array();
- foreach (album::get_sort_order_options() as $field => $description) {
- $sort_fields[$field] = (string)$description;
+ foreach (array("sort_column", "sort_order") as $key) {
+ if ($val = Input::instance()->post($key)) {
+ $album->$key = $val;
+ }
}
- $sort_order = array("ASC" => (string)t("Ascending"), "DESC" => (string)t("Descending"));
- $file_filter = json_encode(array(
- "photo" => array("label" => "Images", "types" => array("*.jpg", "*.jpeg", "*.png", "*.gif")),
- "movie" => array("label" => "Movies", "types" => array("*.flv", "*.mp4", "*.m4v"))));
+ $album->save();
- $v = new View("organize_dialog.html");
- $v->album = $album;
- $v->domain = $input->server("HTTP_HOST");
- $v->access_key = rest::access_key();
- $v->file_filter = addslashes($file_filter);
- $v->sort_order = addslashes(json_encode($sort_order));
- $v->sort_fields = addslashes(json_encode($sort_fields));
- $v->selected_id = Input::instance()->get("selected_id", null);
- $v->rest_uri = url::site("rest") . "/";
- $v->controller_uri = url::site("organize") . "/";
- $v->swf_uri = url::file("modules/organize/lib/Gallery3WebClient.swf?") .
- filemtime(MODPATH . "organize/lib/Gallery3WebClient.swf");
- print $v;
+ json::reply(null);
+ }
+
+ function rearrange() {
+ access::verify_csrf();
+
+ $input = Input::instance();
+ $target = ORM::factory("item", $input->post("target_id"));
+ $album = $target->parent();
+ access::required("edit", $album);
+
+ if ($album->sort_column != "weight") {
+ // Force all the weights into the current order before changing the order to manual
+ $weight = 0;
+ foreach ($album->children() as $child) {
+ $child->weight = ++$weight;
+ $child->save();
+ }
+
+ $album->sort_column = "weight";
+ $album->sort_order = "ASC";
+ $album->save();
+ }
+
+ $source_ids = explode(",", $input->post("source_ids"));
+ $base_weight = $target->weight;
+ if ($input->post("relative") == "after") {
+ $base_weight++;
+ }
+
+ if ($source_ids) {
+ // Make a hole the right size
+ db::build()
+ ->update("items")
+ ->set("weight", db::expr("`weight` + " . count($source_ids)))
+ ->where("parent_id", "=", $album->id)
+ ->where("weight", ">=", $base_weight)
+ ->execute();
+
+ // Move all the source items to the right spots.
+ for ($i = 0; $i < count($source_ids); $i++) {
+ $source = ORM::factory("item", $source_ids[$i]);
+ if ($source->parent_id = $album->id) {
+ $source->weight = $base_weight + $i;
+ $source->save();
+ }
+ }
+ }
+ json::reply(null);
}
- function add_album_fields() {
- json::reply(array("title" => (string)t("Title"),
- "description" => (string)t("Description"),
- "name" => (string)t("Directory name"),
- "slug" => (string)t("Internet Address")));
+ function delete() {
+ access::verify_csrf();
+
+ $input = Input::instance();
+
+ foreach (explode(",", $input->post("item_ids")) as $item_id) {
+ $item = ORM::factory("item", $item_id);
+ if (access::can("edit", $item)) {
+ $item->delete();
+ }
+ }
+
+ json::reply(null);
}
+ private function _get_tree($item, $selected) {
+ $tree = array();
+ $children = $item->viewable()
+ ->children(null, null, array(array("type", "=", "album")))
+ ->as_array();
+ foreach ($children as $child) {
+ $node = array(
+ "allowDrag" => false,
+ "allowDrop" => access::can("edit", $child),
+ "editable" => false,
+ "expandable" => false,
+ "id" => $child->id,
+ "leaf" => $child->children_count(array(array("type", "=", "album"))) == 0,
+ "text" => $child->title,
+ "nodeType" => "async");
+
+ // If the child is in the selected path, open it now. Else, mark it async.
+ if ($child->contains($selected)) {
+ $node["children"] = $this->_get_tree($child, $selected);
+ $node["expanded"] = true;
+ }
+ $tree[] = $node;
+ }
+ return $tree;
+ }
}