From a9e3692027dc767b340242ed18fe7184cbfd883d Mon Sep 17 00:00:00 2001 From: Tim Almdal Date: Thu, 21 May 2009 01:31:29 +0000 Subject: 1) This provides the editting functionality for albums and photos in the organize feature. 2) Remove the tag functionality at this point 3) Added a callback to handle validating conflicting names (only used by organize at this point. 4) Closes #231 --- core/controllers/core_organize.php | 99 +++++++++++++++++++++++++++++++ core/helpers/core_event.php | 13 +--- core/helpers/core_organize.php | 63 ++++++++++++++++++++ core/helpers/item.php | 20 ++++++- core/views/organize_edit_general.html.php | 15 ----- core/views/organize_edit_sort.html.php | 11 ---- 6 files changed, 184 insertions(+), 37 deletions(-) create mode 100644 core/controllers/core_organize.php create mode 100644 core/helpers/core_organize.php delete mode 100644 core/views/organize_edit_general.html.php delete mode 100644 core/views/organize_edit_sort.html.php (limited to 'core') diff --git a/core/controllers/core_organize.php b/core/controllers/core_organize.php new file mode 100644 index 00000000..99f8b199 --- /dev/null +++ b/core/controllers/core_organize.php @@ -0,0 +1,99 @@ +post("item"); + $item = ORM::factory("item") + ->in("id", $itemids[0]) + ->find(); + access::required("edit", $item); + + $form = core_organize::getGeneralEditForm($item); + if ($form->validate()) { + $orig = clone $item; + $item->title = $form->title->value; + $item->description = $form->description->value; + $item->rename($form->dirname->value); + $item->save(); + + module::event("item_updated", $orig, $item); + + if ($item->is_album()) { + log::success("content", "Updated album", "id\">view"); + $message = t("Saved album %album_title", array("album_title" => $item->title)); + } else { + log::success("content", "Updated photo", "id\">view"); + $message = t("Saved photo %photo_title", array("photo_title" => $item->title)); + } + print json_encode(array("form" => $form->__toString(), "message" => $message)); + } else { + print json_encode(array("form" => $form->__toString())); + } + } + + public function sort() { + access::verify_csrf(); + + $itemids = Input::instance()->post("item"); + $item = ORM::factory("item") + ->in("id", $itemids[0]) + ->find(); + access::required("edit", $item); + + $form = core_organize::getSortEditForm($item); + if ($form->validate()) { + $orig = clone $item; + $item->sort_column = $form->column->value; + $item->sort_order = $form->direction->value; + $item->save(); + + module::event("item_updated", $orig, $item); + + log::success("content", "Updated album", "id\">view"); + $message = t("Saved album %album_title", array("album_title" => $item->title)); + print json_encode(array("form" => $form->__toString(), "message" => $message)); + } else { + print json_encode(array("form" => $form->__toString())); + } + } + + public function reset_general() { + $itemids = Input::instance()->get("item"); + $item = ORM::factory("item") + ->in("id", $itemids[0]) + ->find(); + access::required("edit", $item); + + print core_organize::getGeneralEditForm($item); + } + + public function reset_sort() { + $itemids = Input::instance()->get("item"); + $item = ORM::factory("item") + ->in("id", $itemids[0]) + ->find(); + access::required("edit", $item); + + print core_organize::getSortEditForm($item); + } + +} diff --git a/core/helpers/core_event.php b/core/helpers/core_event.php index c9e4e743..d1869360 100644 --- a/core/helpers/core_event.php +++ b/core/helpers/core_event.php @@ -44,19 +44,12 @@ class core_event_Core { ->in("id", $event_parms->itemids[0]) ->find(); - $generalPane = new View("organize_edit_general.html"); - $generalPane->item = $item; - $event_parms->panes[] = array("label" => $item->is_album() ? t("Edit Album") : t("Edit Photo"), - "content" => $generalPane); + "content" => core_organize::getGeneralEditForm($item)); if ($item->is_album()) { - $sortPane = new View("organize_edit_sort.html"); - $sortPane->sort_by = $item->sort_column; - $sortPane->sort_order = - empty($item->sort_order) || $item->sort_order == "ASC" ? t("Ascending") : t("Descending"); - - $event_parms->panes[] = array("label" => t("Sort Order"), "content" => $sortPane); + $event_parms->panes[] = array("label" => t("Sort Order"), + "content" => core_organize::getSortEditForm($item)); } } diff --git a/core/helpers/core_organize.php b/core/helpers/core_organize.php new file mode 100644 index 00000000..6ccc0197 --- /dev/null +++ b/core/helpers/core_organize.php @@ -0,0 +1,63 @@ + "gEditGeneral", "ref" => "general")); + // In this case we know there is only 1 item, but in general we should loop + // and create multiple hidden items. + $generalPane->hidden("item[]")->value($item->id); + $generalPane->input("title")->label(t("Title"))->value($item->title); + $generalPane->textarea("description")->label(t("Description"))->value($item->description); + $generalPane->input("dirname")->label(t("Path Name"))->value($item->name) + ->callback("item::validate_no_slashes") + ->error_messages("no_slashes", t("The directory name can't contain a \"/\"")) + ->callback("item::validate_no_trailing_period") + ->error_messages("no_trailing_period", t("The directory name can't end in \".\"")) + ->callback("item::validate_no_name_conflict") + ->error_messages("conflict", t("The path name is not unique")); + + return $generalPane; + } + + static function getSortEditForm($item) { + $sortPane = new Forge("core_organize/__FUNCTION__", "", "post", + array("id" => "gEditSort", "ref" => "sort")); + $sortPane->hidden("item[]")->value($item->id); + $sortPane->dropdown("column", array("id" => "gAlbumSortColumn")) + ->label(t("Sort by")) + ->options(array("weight" => t("Default"), + "captured" => t("Capture Date"), + "created" => t("Creation Date"), + "title" => t("Title"), + "updated" => t("Updated Date"), + "view_count" => t("Number of views"), + "rand_key" => t("Random"))) + ->selected($item->sort_column); + $sortPane->dropdown("direction", array("id" => "gAlbumSortDirection")) + ->label(t("Order")) + ->options(array("ASC" => t("Ascending"), + "DESC" => t("Descending"))) + ->selected($item->sort_order); + + return $sortPane; + } +} diff --git a/core/helpers/item.php b/core/helpers/item.php index 8ff09535..7daaf1e1 100644 --- a/core/helpers/item.php +++ b/core/helpers/item.php @@ -79,9 +79,27 @@ class item_Core { } } - static function validate_no_trailing_period($input) { + static function validate_no_trailing_period($input) { if (rtrim($input->value, ".") !== $input->value) { $input->add_error("no_trailing_period", 1); } } + + static function validate_no_name_conflict($input) { + $itemid = Input::instance()->post("item"); + if (is_array($itemid)) { + $itemid = $itemid[0]; + } + $item = ORM::factory("item") + ->in("id", $itemid) + ->find(); + if (Database::instance() + ->from("items") + ->where("parent_id", $item->parent_id) + ->where("id <>", $item->id) + ->where("name", $input->value) + ->count_records()) { + $input->add_error("conflict", 1); + } + } } \ No newline at end of file diff --git a/core/views/organize_edit_general.html.php b/core/views/organize_edit_general.html.php deleted file mode 100644 index 84e666d8..00000000 --- a/core/views/organize_edit_general.html.php +++ /dev/null @@ -1,15 +0,0 @@ - - diff --git a/core/views/organize_edit_sort.html.php b/core/views/organize_edit_sort.html.php deleted file mode 100644 index 1151b014..00000000 --- a/core/views/organize_edit_sort.html.php +++ /dev/null @@ -1,11 +0,0 @@ - - -- cgit v1.2.3