summaryrefslogtreecommitdiff
path: root/modules/gallery/helpers
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2009-09-07 15:41:03 -0700
committerBharat Mediratta <bharat@menalto.com>2009-09-07 15:42:08 -0700
commit3f997562dee7fa45fec58604dd894d9c523a1113 (patch)
tree2508fdb8ecc95e660fc555d7c64bbf59affed2ed /modules/gallery/helpers
parent68a78f7cced4f26436d7bdbc6acdd9e0a9ada4df (diff)
Add support for a per-item "slug" which will be the user-visible url
component for that given item. Album hierarchies are represented by nested slugs. By default, we convert the filename to a slug when you create an album, photo or movie.
Diffstat (limited to 'modules/gallery/helpers')
-rw-r--r--modules/gallery/helpers/album.php17
-rw-r--r--modules/gallery/helpers/gallery_installer.php17
-rw-r--r--modules/gallery/helpers/item.php8
-rw-r--r--modules/gallery/helpers/movie.php17
-rw-r--r--modules/gallery/helpers/photo.php19
5 files changed, 67 insertions, 11 deletions
diff --git a/modules/gallery/helpers/album.php b/modules/gallery/helpers/album.php
index d46f21ac..78c5062f 100644
--- a/modules/gallery/helpers/album.php
+++ b/modules/gallery/helpers/album.php
@@ -30,9 +30,10 @@ class album_Core {
* @param string $name the name of this new album (it will become the directory name on disk)
* @param integer $title the title of the new album
* @param string $description (optional) the longer description of this album
+ * @param string $slug (optional) the url component for this photo
* @return Item_Model
*/
- static function create($parent, $name, $title, $description=null, $owner_id=null) {
+ static function create($parent, $name, $title, $description=null, $owner_id=null, $slug=null) {
if (!$parent->loaded || !$parent->is_album()) {
throw new Exception("@todo INVALID_PARENT");
}
@@ -47,6 +48,10 @@ class album_Core {
throw new Exception("@todo NAME_CANNOT_END_IN_PERIOD");
}
+ if (empty($slug)) {
+ $slug = item::convert_filename_to_slug($name);
+ }
+
$album = ORM::factory("item");
$album->type = "album";
$album->title = $title;
@@ -55,15 +60,23 @@ class album_Core {
$album->owner_id = $owner_id;
$album->thumb_dirty = 1;
$album->resize_dirty = 1;
+ $album->slug = $slug;
$album->rand_key = ((float)mt_rand()) / (float)mt_getrandmax();
$album->sort_column = "created";
$album->sort_order = "ASC";
+ // Randomize the name or slug if there's a conflict
+ // @todo Improve this. Random numbers are not user friendly
while (ORM::factory("item")
->where("parent_id", $parent->id)
+ ->open_paren()
->where("name", $album->name)
+ ->orwhere("slug", $album->slug)
+ ->close_paren()
->find()->id) {
- $album->name = "{$name}-" . rand();
+ $rand = rand();
+ $album->name = "{$name}-$rand";
+ $album->slug = "{$slug}-$rand";
}
$album = $album->add_to_parent($parent);
diff --git a/modules/gallery/helpers/gallery_installer.php b/modules/gallery/helpers/gallery_installer.php
index 40830bc0..91654afe 100644
--- a/modules/gallery/helpers/gallery_installer.php
+++ b/modules/gallery/helpers/gallery_installer.php
@@ -80,10 +80,12 @@ class gallery_installer {
`parent_id` int(9) NOT NULL,
`rand_key` float default NULL,
`relative_path_cache` varchar(255) default NULL,
+ `relative_url_cache` varchar(255) default NULL,
`resize_dirty` boolean default 1,
`resize_height` int(9) default NULL,
`resize_width` int(9) default NULL,
`right_ptr` int(9) NOT NULL,
+ `slug` varchar(255) default NULL,
`sort_column` varchar(64) default NULL,
`sort_order` char(4) default 'ASC',
`thumb_dirty` boolean default 1,
@@ -260,7 +262,7 @@ class gallery_installer {
module::set_var("gallery", "show_credits", 1);
// @todo this string needs to be picked up by l10n_scanner
module::set_var("gallery", "credits", "Powered by <a href=\"%url\">Gallery %version</a>");
- module::set_version("gallery", 11);
+ module::set_version("gallery", 12);
}
static function upgrade($version) {
@@ -343,7 +345,18 @@ class gallery_installer {
module::set_version("gallery", $version = 11);
}
-}
+
+ if ($version == 11) {
+ $db->query("ALTER TABLE {items} ADD COLUMN `relative_url_cache` varchar(255) DEFAULT NULL");
+ $db->query("ALTER TABLE {items} ADD COLUMN `slug` varchar(255) DEFAULT NULL");
+
+ // This is imperfect since some of the slugs may contain invalid characters, but it'll do
+ // for now because we don't want a lengthy operation here.
+ $db->query("UPDATE {items} SET `slug` = `name`");
+ $db->query("UPDATE {items} SET `relative_url_cache` = `relative_path_cache`");
+ module::set_version("gallery", $version = 12);
+ }
+ }
static function uninstall() {
$db = Database::instance();
diff --git a/modules/gallery/helpers/item.php b/modules/gallery/helpers/item.php
index 8839861f..bf948731 100644
--- a/modules/gallery/helpers/item.php
+++ b/modules/gallery/helpers/item.php
@@ -121,6 +121,14 @@ class item_Core {
}
/**
+ * Convert a filename into something we can use as a url component.
+ * @param string $filename
+ */
+ static function convert_filename_to_slug($filename) {
+ return preg_replace("/[^A-Za-z0-9-_]+/", "-", pathinfo($filename, PATHINFO_FILENAME));
+ }
+
+ /**
* Display delete confirmation message and form
* @param object $item
* @return string form
diff --git a/modules/gallery/helpers/movie.php b/modules/gallery/helpers/movie.php
index ec975cb0..59bf5c19 100644
--- a/modules/gallery/helpers/movie.php
+++ b/modules/gallery/helpers/movie.php
@@ -31,10 +31,11 @@ class movie_Core {
* @param string $name the filename to use for this photo in the album
* @param integer $title the title of the new photo
* @param string $description (optional) the longer description of this photo
+ * @param string $slug (optional) the url component for this photo
* @return Item_Model
*/
static function create($parent, $filename, $name, $title,
- $description=null, $owner_id=null) {
+ $description=null, $owner_id=null, $slug=null) {
if (!$parent->loaded || !$parent->is_album()) {
throw new Exception("@todo INVALID_PARENT");
}
@@ -67,6 +68,10 @@ class movie_Core {
$name .= "." . $pi["extension"];
}
+ if (empty($slug)) {
+ $slug = item::convert_filename_to_slug($name);
+ }
+
$movie = ORM::factory("item");
$movie->type = "movie";
$movie->title = $title;
@@ -79,15 +84,21 @@ class movie_Core {
$movie->thumb_dirty = 1;
$movie->resize_dirty = 1;
$movie->sort_column = "weight";
+ $movie->slug = $slug;
$movie->rand_key = ((float)mt_rand()) / (float)mt_getrandmax();
// Randomize the name if there's a conflict
+ // @todo Improve this. Random numbers are not user friendly
while (ORM::factory("item")
->where("parent_id", $parent->id)
+ ->open_paren()
->where("name", $movie->name)
+ ->orwhere("slug", $movie->slug)
+ ->close_paren()
->find()->id) {
- // @todo Improve this. Random numbers are not user friendly
- $movie->name = rand() . "." . $pi["extension"];
+ $rand = rand();
+ $movie->name = "{$name}.$rand.{$pi['extension']}";
+ $movie->slug = "{$slug}-$rand";
}
// This saves the photo
diff --git a/modules/gallery/helpers/photo.php b/modules/gallery/helpers/photo.php
index 40b645a2..c713fff9 100644
--- a/modules/gallery/helpers/photo.php
+++ b/modules/gallery/helpers/photo.php
@@ -31,10 +31,11 @@ class photo_Core {
* @param string $name the filename to use for this photo in the album
* @param integer $title the title of the new photo
* @param string $description (optional) the longer description of this photo
+ * @param string $slug (optional) the url component for this photo
* @return Item_Model
*/
static function create($parent, $filename, $name, $title,
- $description=null, $owner_id=null) {
+ $description=null, $owner_id=null, $slug=null) {
if (!$parent->loaded || !$parent->is_album()) {
throw new Exception("@todo INVALID_PARENT");
}
@@ -66,6 +67,10 @@ class photo_Core {
$name .= "." . $pi["extension"];
}
+ if (empty($slug)) {
+ $slug = item::convert_filename_to_slug($name);
+ }
+
$photo = ORM::factory("item");
$photo->type = "photo";
$photo->title = $title;
@@ -78,15 +83,21 @@ class photo_Core {
$photo->thumb_dirty = 1;
$photo->resize_dirty = 1;
$photo->sort_column = "weight";
+ $photo->slug = $slug;
$photo->rand_key = ((float)mt_rand()) / (float)mt_getrandmax();
- // Randomize the name if there's a conflict
+ // Randomize the name or slug if there's a conflict
+ // @todo Improve this. Random numbers are not user friendly
while (ORM::factory("item")
->where("parent_id", $parent->id)
+ ->open_paren()
->where("name", $photo->name)
+ ->orwhere("slug", $photo->slug)
+ ->close_paren()
->find()->id) {
- // @todo Improve this. Random numbers are not user friendly
- $photo->name = rand() . "." . $pi["extension"];
+ $rand = rand();
+ $photo->name = "{$name}.$rand.{$pi['extension']}";
+ $photo->slug = "{$slug}-$rand";
}
// This saves the photo