summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/gallery/controllers/albums.php42
-rw-r--r--modules/gallery/controllers/movies.php38
-rw-r--r--modules/gallery/controllers/photos.php38
-rw-r--r--modules/gallery/helpers/item.php45
4 files changed, 92 insertions, 71 deletions
diff --git a/modules/gallery/controllers/albums.php b/modules/gallery/controllers/albums.php
index 3c1a0adf..feaea76d 100644
--- a/modules/gallery/controllers/albums.php
+++ b/modules/gallery/controllers/albums.php
@@ -131,40 +131,32 @@ class Albums_Controller extends Items_Controller {
$form->edit_item->dirname->value != $album->name ||
$form->edit_item->slug->value != $album->slug) {
// Make sure that there's not a conflict
- if ($row = Database::instance()
- ->select(array("name", "slug"))
- ->from("items")
- ->where("parent_id", $album->parent_id)
- ->where("id <>", $album->id)
- ->open_paren()
- ->where("name", $form->edit_item->dirname->value)
- ->orwhere("slug", $form->edit_item->slug->value)
- ->close_paren()
- ->get()
- ->current()) {
- if ($row->name == $form->edit_item->dirname->value) {
- $form->edit_item->dirname->add_error("name_conflict", 1);
- }
- if ($row->slug == $form->edit_item->slug->value) {
- $form->edit_item->slug->add_error("slug_conflict", 1);
- }
- $valid = false;
+ $errors = item::check_for_conflicts(
+ $album, $form->edit_item->dirname->value, $form->edit_item->slug->value);
+
+ if (!empty($errors["name_conflict"])) {
+ $form->edit_item->dirname->add_error("name_conflict", 1);
+ }
+ if (!empty($errors["slug_conflict"])) {
+ $form->edit_item->slug->add_error("slug_conflict", 1);
}
+ $valid = empty($errors);
}
}
if ($valid) {
$watching_album = $album->url() != ($location = parse_url(request::referrer(), PHP_URL_PATH));
- $album->title = $form->edit_item->title->value;
- $album->description = $form->edit_item->description->value;
- $album->sort_column = $form->edit_item->sort_order->column->value;
- $album->sort_order = $form->edit_item->sort_order->direction->value;
+ $new_values = array("title" => $form->edit_item->title->value,
+ "description" => $form->edit_item->description->value,
+ "sort_column" => $form->edit_item->sort_order->column->value,
+ "sort_order" => $form->edit_item->sort_order->direction->value,
+ "slug" => $form->edit_item->slug->value);
if ($album->id != 1) {
- $album->rename($form->edit_item->dirname->value);
+ $new_values["name"] = $form->edit_item->dirname->value;
}
- $album->slug = $form->edit_item->slug->value;
- $album->save();
+ item::update($album, $new_values);
+
module::event("item_edit_form_completed", $album, $form);
log::success("content", "Updated album", "<a href=\"albums/$album->id\">view</a>");
diff --git a/modules/gallery/controllers/movies.php b/modules/gallery/controllers/movies.php
index 575b2b60..4e0916b3 100644
--- a/modules/gallery/controllers/movies.php
+++ b/modules/gallery/controllers/movies.php
@@ -76,34 +76,26 @@ class Movies_Controller extends Items_Controller {
if ($form->edit_item->filename->value != $movie->name ||
$form->edit_item->slug->value != $movie->slug) {
// Make sure that there's not a name or slug conflict
- if ($row = Database::instance()
- ->select(array("name", "slug"))
- ->from("items")
- ->where("parent_id", $movie->parent_id)
- ->where("id <>", $movie->id)
- ->open_paren()
- ->where("name", $form->edit_item->filename->value)
- ->orwhere("slug", $form->edit_item->slug->value)
- ->close_paren()
- ->get()
- ->current()) {
- if ($row->name == $form->edit_item->filename->value) {
- $form->edit_item->filename->add_error("name_conflict", 1);
- }
- if ($row->slug == $form->edit_item->slug->value) {
- $form->edit_item->slug->add_error("slug_conflict", 1);
- }
- $valid = false;
+ $errors = item::check_for_conflicts(
+ $movie, $form->edit_item->filename->value, $form->edit_item->slug->value);
+
+ if (!empty($errors["name_conflict"])) {
+ $form->edit_item->filename->add_error("name_conflict", 1);
+ }
+ if (!empty($errors["slug_conflict"])) {
+ $form->edit_item->slug->add_error("slug_conflict", 1);
}
+ $valid = empty($errors);
}
}
if ($valid) {
- $movie->title = $form->edit_item->title->value;
- $movie->description = $form->edit_item->description->value;
- $movie->slug = $form->edit_item->slug->value;
- $movie->rename($form->edit_item->filename->value);
- $movie->save();
+ $new_values = array("title" => $form->edit_item->title->value,
+ "description" => $form->edit_item->description->value,
+ "name" => $form->edit_item->filename->value,
+ "slug" => $form->edit_item->slug->value);
+ item::update($movie, $new_values);
+
module::event("item_edit_form_completed", $movie, $form);
log::success("content", "Updated movie", "<a href=\"{$movie->url()}\">view</a>");
diff --git a/modules/gallery/controllers/photos.php b/modules/gallery/controllers/photos.php
index ba4cfb83..f2c0f5dd 100644
--- a/modules/gallery/controllers/photos.php
+++ b/modules/gallery/controllers/photos.php
@@ -76,36 +76,28 @@ class Photos_Controller extends Items_Controller {
if ($form->edit_item->filename->value != $photo->name ||
$form->edit_item->slug->value != $photo->slug) {
// Make sure that there's not a name or slug conflict
- if ($row = Database::instance()
- ->select(array("name", "slug"))
- ->from("items")
- ->where("parent_id", $photo->parent_id)
- ->where("id <>", $photo->id)
- ->open_paren()
- ->where("name", $form->edit_item->filename->value)
- ->orwhere("slug", $form->edit_item->slug->value)
- ->close_paren()
- ->get()
- ->current()) {
- if ($row->name == $form->edit_item->filename->value) {
- $form->edit_item->filename->add_error("name_conflict", 1);
- }
- if ($row->slug == $form->edit_item->slug->value) {
- $form->edit_item->slug->add_error("slug_conflict", 1);
- }
- $valid = false;
+ $errors = item::check_for_conflicts(
+ $photo, $form->edit_item->filename->value, $form->edit_item->slug->value);
+
+ if (!empty($errors["name_conflict"])) {
+ $form->edit_item->filename->add_error("name_conflict", 1);
+ }
+ if (!empty($errors["slug_conflict"])) {
+ $form->edit_item->slug->add_error("slug_conflict", 1);
}
+ $valid = empty($errors);
}
}
if ($valid) {
$watching_album = $photo->url() != ($location = parse_url(request::referrer(), PHP_URL_PATH));
- $photo->title = $form->edit_item->title->value;
- $photo->description = $form->edit_item->description->value;
- $photo->slug = $form->edit_item->slug->value;
- $photo->rename($form->edit_item->filename->value);
- $photo->save();
+ $new_values = array("title" => $form->edit_item->title->value,
+ "description" => $form->edit_item->description->value,
+ "name" => $form->edit_item->filename->value,
+ "slug" => $form->edit_item->slug->value);
+ item::update($photo, $new_values);
+
module::event("item_edit_form_completed", $photo, $form);
log::success("content", "Updated photo", "<a href=\"{$photo->url()}\">view</a>");
diff --git a/modules/gallery/helpers/item.php b/modules/gallery/helpers/item.php
index f8e6534e..6348c256 100644
--- a/modules/gallery/helpers/item.php
+++ b/modules/gallery/helpers/item.php
@@ -96,6 +96,51 @@ class item_Core {
}
}
+
+ static function update($item, $fields) {
+ $dirty = false;
+ if ($item->id != 1 && !empty($fields["name"]) && $fields["name"] != $item->name) {
+ $item->rename($fields["name"]);
+ unset($fields["name"]);
+ $dirty = true;
+ }
+ foreach ($fields as $field => $value) {
+ if ($value !== $item->$field) {
+ $item->$field = $value;
+ $dirty = true;
+ }
+ }
+
+ if ($dirty) {
+ $item->save();
+ }
+ }
+
+ static function check_for_conflicts($item, $new_name, $new_slug) {
+ $errors = array();
+
+ if ($row = Database::instance()
+ ->select(array("name", "slug"))
+ ->from("items")
+ ->where("parent_id", $item->parent_id)
+ ->where("id <>", $item->id)
+ ->open_paren()
+ ->where("name", $new_name)
+ ->orwhere("slug", $new_slug)
+ ->close_paren()
+ ->get()
+ ->current()) {
+ if ($row->name == $new_name) {
+ $errors["name_conflict"] = 1;
+ }
+ if ($row->slug == $new_slug) {
+ $errors["slug_conflict"] = 1;
+ }
+ }
+
+ return $errors;
+ }
+
/**
* Sanitize a filename into something presentable as an item title
* @param string $filename