diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/controllers/core_organize.php | 99 | ||||
-rw-r--r-- | core/helpers/core_event.php | 13 | ||||
-rw-r--r-- | core/helpers/core_organize.php | 63 | ||||
-rw-r--r-- | core/helpers/item.php | 20 | ||||
-rw-r--r-- | core/views/organize_edit_general.html.php | 15 | ||||
-rw-r--r-- | core/views/organize_edit_sort.html.php | 11 |
6 files changed, 184 insertions, 37 deletions
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 @@ +<?php defined("SYSPATH") or die("No direct script access."); +/** + * Gallery - a web based photo album viewer and editor + * Copyright (C) 2000-2009 Bharat Mediratta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + */ +class Core_Organize_Controller extends Controller { + public function general() { + access::verify_csrf(); + + $itemids = Input::instance()->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", "<a href=\"albums/$item->id\">view</a>"); + $message = t("Saved album %album_title", array("album_title" => $item->title)); + } else { + log::success("content", "Updated photo", "<a href=\"photos/$item->id\">view</a>"); + $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", "<a href=\"albums/$item->id\">view</a>"); + $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 @@ +<?php defined("SYSPATH") or die("No direct script access."); +/** + * Gallery - a web based photo album viewer and editor + * Copyright (C) 2000-2009 Bharat Mediratta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + */ + +class core_organize_Core { + static function getGeneralEditForm($item) { + $generalPane = new Forge("core_organize/__FUNCTION__", "", "post", + array("id" => "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 @@ -<?php defined("SYSPATH") or die("No direct script access.") ?> -<ul> - <li> - <label for="title"><?= t("Title") ?></label> - <div id="title" type="text" class="textbox" ><?= $item->title ?></div> - </li> - <li> - <label for="description"><?= t("Description") ?></label> - <div id="description" class="textarea" ><?= $item->description ?></div> - </li> - <li> - <label for="dirname"><?= t("Directory Name") ?></label> - <div id="dirname" type="text" class="textbox" ><?= $item->name ?></div> - </li> -</ul> 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 @@ -<?php defined("SYSPATH") or die("No direct script access.") ?> -<ul> - <li> - <label for="sortby"><?= t("Sort By") ?></label> - <div id="sortby" class="textbox"><?= $sort_by ?></div> - </li> - <li> - <label for="sortorder"><?= t("Sort Order") ?></label> - <div id="sortorder" class="textbox"><?= $sort_order ?></div> - </li> -</ul> |