summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/controllers/core_organize.php99
-rw-r--r--core/helpers/core_event.php13
-rw-r--r--core/helpers/core_organize.php63
-rw-r--r--core/helpers/item.php20
-rw-r--r--core/views/organize_edit_general.html.php15
-rw-r--r--core/views/organize_edit_sort.html.php11
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>