summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/comment/helpers/comment.php1
-rw-r--r--modules/g2_import/controllers/g2.php9
-rw-r--r--modules/g2_import/helpers/g2_import.php22
-rw-r--r--modules/gallery/config/cookie.php5
-rw-r--r--modules/gallery/config/sendmail.php29
-rw-r--r--modules/gallery/controllers/admin_theme_options.php40
-rw-r--r--modules/gallery/controllers/albums.php2
-rw-r--r--modules/gallery/controllers/move.php71
-rw-r--r--modules/gallery/controllers/movies.php2
-rw-r--r--modules/gallery/controllers/photos.php2
-rw-r--r--modules/gallery/controllers/uploader.php8
-rw-r--r--modules/gallery/css/gallery.css8
-rw-r--r--modules/gallery/helpers/gallery_event.php12
-rw-r--r--modules/gallery/helpers/gallery_installer.php29
-rw-r--r--modules/gallery/helpers/gallery_task.php3
-rw-r--r--modules/gallery/helpers/graphics.php6
-rw-r--r--modules/gallery/helpers/l10n_scanner.php37
-rw-r--r--modules/gallery/helpers/movie.php2
-rw-r--r--modules/gallery/helpers/theme.php33
-rw-r--r--modules/gallery/helpers/user_profile.php13
-rw-r--r--modules/gallery/libraries/Form_Uploadify.php2
-rw-r--r--modules/gallery/libraries/IdentityProvider.php6
-rw-r--r--modules/gallery/libraries/Sendmail.php10
-rw-r--r--modules/gallery/libraries/Theme_View.php9
-rw-r--r--modules/gallery/models/item.php4
-rw-r--r--modules/gallery/module.info2
-rw-r--r--modules/gallery/tests/Gallery_Filters.php1
-rw-r--r--modules/gallery/tests/Sendmail_Test.php16
-rw-r--r--modules/gallery/views/admin_theme_options.html.php31
-rw-r--r--modules/gallery/views/form_uploadify.html.php241
-rw-r--r--modules/gallery/views/form_uploadify_buttons.html.php15
-rw-r--r--modules/gallery/views/move_browse.html.php50
-rw-r--r--modules/gallery/views/move_tree.html.php19
-rw-r--r--modules/notification/helpers/notification_event.php9
-rw-r--r--modules/organize/controllers/organize.php8
-rw-r--r--modules/organize/helpers/organize_event.php27
-rw-r--r--modules/organize/helpers/organize_installer.php7
-rw-r--r--modules/organize/lib/Gallery3WebClient.swfbin145197 -> 148799 bytes
-rw-r--r--modules/organize/views/organize_dialog.html.php16
-rw-r--r--modules/recaptcha/helpers/recaptcha_event.php22
-rw-r--r--modules/slideshow/helpers/slideshow_event.php3
41 files changed, 384 insertions, 448 deletions
diff --git a/modules/comment/helpers/comment.php b/modules/comment/helpers/comment.php
index 92a286c7..7aa007cb 100644
--- a/modules/comment/helpers/comment.php
+++ b/modules/comment/helpers/comment.php
@@ -45,6 +45,7 @@ class comment_Core {
->error_messages("required", t("You must enter a comment"));
$group->hidden("item_id")->value($item->id);
module::event("comment_add_form", $form);
+ module::event("captcha_protect_form", $form);
$group->submit("")->value(t("Add"))->class("ui-state-default ui-corner-all");
return $form;
diff --git a/modules/g2_import/controllers/g2.php b/modules/g2_import/controllers/g2.php
index 2c6ad1b4..d260c9b4 100644
--- a/modules/g2_import/controllers/g2.php
+++ b/modules/g2_import/controllers/g2.php
@@ -35,12 +35,9 @@ class G2_Controller extends Controller {
$id = $input->get("g2_itemId");
if ($id) {
- // Requests by id are either core.DownloadItem or
- // core.ShowItem requests.
- // Later versions of Gallery 2 don't specify g2_view if
- // it's the default (core.ShowItem).
- // And in some cases (bbcode, embedding) people are using
- // the id style URLs although URL rewriting is enabled.
+ // Requests by id are either core.DownloadItem or core.ShowItem requests. Later versions of
+ // Gallery 2 don't specify g2_view if it's the default (core.ShowItem). And in some cases
+ // (bbcode, embedding) people are using the id style URLs although URL rewriting is enabled.
$where = array(array("g2_id", "=", $id));
$view = $input->get("g2_view");
if ($view) {
diff --git a/modules/g2_import/helpers/g2_import.php b/modules/g2_import/helpers/g2_import.php
index f2e9dad9..c3737f8f 100644
--- a/modules/g2_import/helpers/g2_import.php
+++ b/modules/g2_import/helpers/g2_import.php
@@ -178,7 +178,17 @@ class g2_import_Core {
"module", "rewrite", "modrewrite.embeddedLocation", $g2_embed_location));
g2($gallery->getStorage()->checkPoint());
}
- self::$g2_base_url = $g2_embed_location;
+
+ if ($g2_embed_location) {
+ self::$g2_base_url = $g2_embed_location;
+ } else {
+ self::$g2_base_url = $GLOBALS["gallery"]->getUrlGenerator()->generateUrl(
+ array(),
+ array("forceSessionId" => false,
+ "htmlEntities" => false,
+ "urlEncode" => false,
+ "useAuthToken" => false));
+ }
return true;
}
@@ -689,8 +699,7 @@ class g2_import_Core {
$title = $g2_item->getTitle();
$title or $title = $g2_item->getPathComponent();
$messages[] =
- t("<a href=\"%g2_url\">%title</a> from Gallery 2 could not be processed; " .
- "(imported as <a href=\"%g3_url\">%title</a>)",
+ t("<a href=\"%g2_url\">%title</a> from Gallery 2 could not be processed; (imported as <a href=\"%g3_url\">%title</a>)",
array("g2_url" => $g2_item_url,
"g3_url" => $item->url(),
"title" => $title));
@@ -846,6 +855,11 @@ class g2_import_Core {
array("id" => $g2_comment_id, "exception" => (string)$e));
}
+ if (self::map($g2_comment->getId())) {
+ // Already imported
+ return;
+ }
+
$item_id = self::map($g2_comment->getParentId());
if (empty($item_id)) {
// Item was not mapped.
@@ -878,6 +892,8 @@ class g2_import_Core {
$e);
}
+ self::set_map($g2_comment->getId(), $comment->id, "comment");
+
// Backdate the creation date. We can't do this at creation time because
// Comment_Model::save() will override it.
db::update("comments")
diff --git a/modules/gallery/config/cookie.php b/modules/gallery/config/cookie.php
index ded3bdaa..7f6ea265 100644
--- a/modules/gallery/config/cookie.php
+++ b/modules/gallery/config/cookie.php
@@ -37,10 +37,9 @@ $config['path'] = '/';
$config['expire'] = 0;
/**
- * Enable this option to only allow the cookie to be read when using the a
- * secure protocol.
+ * Set the secure bit on the cookie if we're using HTTPS.
*/
-$config['secure'] = false;
+$config['secure'] = !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on';
/**
* Enable this option to disable the cookie from being accessed when using a
diff --git a/modules/gallery/config/sendmail.php b/modules/gallery/config/sendmail.php
deleted file mode 100644
index 65b1d59b..00000000
--- a/modules/gallery/config/sendmail.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php defined("SYSPATH") or die("No direct script access.");
-/**
- * Gallery - a web based photo album viewer and editor
- * Copyright (C) 2000-2010 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.
- */
-/**
- * PHP Mail Configuration parameters
- * from => email address that appears as the from address
- * line-length => word wrap length (PHP documentations suggest no larger tha 70 characters
- * reply-to => what goes into the reply to header
- */
-$config["from"] = "admin@gallery3.com";
-$config["line_length"] = 70;
-$config["reply_to"] = "public@gallery3.com";
-$config["header_separator"] = "\n";
diff --git a/modules/gallery/controllers/admin_theme_options.php b/modules/gallery/controllers/admin_theme_options.php
index 15a42ee5..57f32f96 100644
--- a/modules/gallery/controllers/admin_theme_options.php
+++ b/modules/gallery/controllers/admin_theme_options.php
@@ -22,14 +22,14 @@ class Admin_Theme_Options_Controller extends Admin_Controller {
$view = new Admin_View("admin.html");
$view->page_title = t("Theme options");
$view->content = new View("admin_theme_options.html");
- $view->content->form = theme::get_edit_form_admin();
+ $view->content->form = $this->_get_edit_form_admin();
print $view;
}
public function save() {
access::verify_csrf();
- $form = theme::get_edit_form_admin();
+ $form = $this->_get_edit_form_admin();
if ($form->validate()) {
module::set_var("gallery", "page_size", $form->edit_theme->page_size->value);
@@ -58,6 +58,7 @@ class Admin_Theme_Options_Controller extends Admin_Controller {
module::set_var("gallery", "header_text", $form->edit_theme->header_text->value);
module::set_var("gallery", "footer_text", $form->edit_theme->footer_text->value);
module::set_var("gallery", "show_credits", $form->edit_theme->show_credits->value);
+ module::set_var("gallery", "favicon_url", $form->edit_theme->favicon_url->value);
module::event("theme_edit_form_completed", $form);
@@ -70,5 +71,40 @@ class Admin_Theme_Options_Controller extends Admin_Controller {
print $view;
}
}
+
+ private function _get_edit_form_admin() {
+ $form = new Forge("admin/theme_options/save/", "", null, array("id" =>"g-theme-options-form"));
+ $group = $form->group("edit_theme")->label(t("Theme layout"));
+ $group->input("page_size")->label(t("Items per page"))->id("g-page-size")
+ ->rules("required|valid_digit")
+ ->error_messages("required", t("You must enter a number"))
+ ->error_messages("valid_digit", t("You must enter a number"))
+ ->value(module::get_var("gallery", "page_size"));
+ $group->input("thumb_size")->label(t("Thumbnail size (in pixels)"))->id("g-thumb-size")
+ ->rules("required|valid_digit")
+ ->error_messages("required", t("You must enter a number"))
+ ->error_messages("valid_digit", t("You must enter a number"))
+ ->value(module::get_var("gallery", "thumb_size"));
+ $group->input("resize_size")->label(t("Resized image size (in pixels)"))->id("g-resize-size")
+ ->rules("required|valid_digit")
+ ->error_messages("required", t("You must enter a number"))
+ ->error_messages("valid_digit", t("You must enter a number"))
+ ->value(module::get_var("gallery", "resize_size"));
+ $group->input("favicon_url")->label(t("URL (or relative path) to your favicon.ico"))
+ ->id("g-favicon")
+ ->value(module::get_var("gallery", "favicon_url"));
+ $group->textarea("header_text")->label(t("Header text"))->id("g-header-text")
+ ->value(module::get_var("gallery", "header_text"));
+ $group->textarea("footer_text")->label(t("Footer text"))->id("g-footer-text")
+ ->value(module::get_var("gallery", "footer_text"));
+ $group->checkbox("show_credits")->label(t("Show site credits"))->id("g-footer-text")
+ ->checked(module::get_var("gallery", "show_credits"));
+
+ module::event("theme_edit_form", $form);
+
+ $group = $form->group("buttons");
+ $group->submit("")->value(t("Save"));
+ return $form;
+ }
}
diff --git a/modules/gallery/controllers/albums.php b/modules/gallery/controllers/albums.php
index fb7d5c59..b0887195 100644
--- a/modules/gallery/controllers/albums.php
+++ b/modules/gallery/controllers/albums.php
@@ -68,7 +68,7 @@ class Albums_Controller extends Items_Controller {
$template->set_global("item", $album);
$template->set_global("children", $album->viewable()->children($page_size, $offset));
$template->set_global("children_count", $children_count);
- $template->set_global("parents", $album->parents());
+ $template->set_global("parents", $album->parents()->as_array()); // view calls empty() on this
$template->content = new View("album.html");
// We can't use math in ORM or the query builder, so do this by hand. It's important
diff --git a/modules/gallery/controllers/move.php b/modules/gallery/controllers/move.php
deleted file mode 100644
index 7b2d6165..00000000
--- a/modules/gallery/controllers/move.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php defined("SYSPATH") or die("No direct script access.");
-/**
- * Gallery - a web based photo album viewer and editor
- * Copyright (C) 2000-2010 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 Move_Controller extends Controller {
- public function browse($source_id) {
- $source = ORM::factory("item", $source_id);
- access::required("view", $source);
- access::required("edit", $source);
-
- $view = new View("move_browse.html");
- $view->source = $source;
- $view->tree = $this->_get_tree_html($source, ORM::factory("item", 1));
- print $view;
- }
-
- public function save($source_id) {
- access::verify_csrf();
- $source = ORM::factory("item", $source_id);
- $target = ORM::factory("item", Input::instance()->post("target_id"));
-
- access::required("view", $source);
- access::required("edit", $source);
- access::required("view", $target);
- access::required("edit", $target);
-
- item::move($source, $target);
-
- json::reply(array("result" => "success", "location" => $target->url()));
- }
-
- public function show_sub_tree($source_id, $target_id) {
- $source = ORM::factory("item", $source_id);
- $target = ORM::factory("item", $target_id);
- access::required("view", $source);
- access::required("edit", $source);
- access::required("view", $target);
- // show targets even if they're not editable because they may contain children which *are*
- // editable
-
- print $this->_get_tree_html($source, $target);
- }
-
- private function _get_tree_html($source, $target) {
- $view = new View("move_tree.html");
- $view->source = $source;
- $view->parent = $target;
- $view->children = ORM::factory("item")
- ->viewable()
- ->where("type", "=", "album")
- ->where("parent_id", "=", $target->id)
- ->find_all();
- return $view;
- }
-
-}
diff --git a/modules/gallery/controllers/movies.php b/modules/gallery/controllers/movies.php
index 02d2a497..717eb8aa 100644
--- a/modules/gallery/controllers/movies.php
+++ b/modules/gallery/controllers/movies.php
@@ -41,7 +41,7 @@ class Movies_Controller extends Items_Controller {
$template->set_global("item", $movie);
$template->set_global("children", array());
$template->set_global("children_count", 0);
- $template->set_global("parents", $movie->parents());
+ $template->set_global("parents", $movie->parents()->as_array());
$template->set_global("next_item", $next_item);
$template->set_global("previous_item", $previous_item);
$template->set_global("sibling_count", $movie->parent()->viewable()->children_count($where));
diff --git a/modules/gallery/controllers/photos.php b/modules/gallery/controllers/photos.php
index 8377e6c7..b22ac8e5 100644
--- a/modules/gallery/controllers/photos.php
+++ b/modules/gallery/controllers/photos.php
@@ -41,7 +41,7 @@ class Photos_Controller extends Items_Controller {
$template->set_global("item", $photo);
$template->set_global("children", array());
$template->set_global("children_count", 0);
- $template->set_global("parents", $photo->parents());
+ $template->set_global("parents", $photo->parents()->as_array());
$template->set_global("next_item", $next_item);
$template->set_global("previous_item", $previous_item);
$template->set_global("sibling_count", $photo->parent()->viewable()->children_count($where));
diff --git a/modules/gallery/controllers/uploader.php b/modules/gallery/controllers/uploader.php
index 85d344d6..fb496f60 100644
--- a/modules/gallery/controllers/uploader.php
+++ b/modules/gallery/controllers/uploader.php
@@ -102,6 +102,14 @@ class Uploader_Controller extends Controller {
}
}
+ public function status($success_count, $error_count) {
+ // The "errors" won't be properly pluralized :-/
+ print t2("Uploaded %count photo (%error errors)",
+ "Uploaded %count photos (%error errors)",
+ $success_count,
+ array("error" => $error_count));
+ }
+
public function finish() {
access::verify_csrf();
diff --git a/modules/gallery/css/gallery.css b/modules/gallery/css/gallery.css
index fb72bd48..275a3d7d 100644
--- a/modules/gallery/css/gallery.css
+++ b/modules/gallery/css/gallery.css
@@ -78,6 +78,10 @@
margin-bottom: 0
}
+#g-add-photos-status-message {
+ float: right;
+}
+
/* Permissions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
#g-edit-permissions-form {
@@ -196,3 +200,7 @@
.rtl #g-translations ol {
margin: 0 2em 1em 0;
}
+
+.rtl #g-add-photos-status-message {
+ float: left;
+}
diff --git a/modules/gallery/helpers/gallery_event.php b/modules/gallery/helpers/gallery_event.php
index e048118b..df5394c9 100644
--- a/modules/gallery/helpers/gallery_event.php
+++ b/modules/gallery/helpers/gallery_event.php
@@ -447,7 +447,6 @@ class gallery_event_Core {
break;
}
$cover_title = t("Choose as the album cover");
- $move_title = t("Move to another album");
$csrf = access::csrf_token();
@@ -478,17 +477,6 @@ class gallery_event_Core {
->url(url::site("quick/rotate/$item->id/cw?csrf=$csrf&amp;from_id={$theme_item->id}&amp;page_type=$page_type")));
}
- // @todo Don't move photos from the photo page; we don't yet have a good way of redirecting
- // after move
- if ($theme->page_subtype() == "album") {
- $options_menu
- ->append(Menu::factory("dialog")
- ->id("move")
- ->label($move_title)
- ->css_class("ui-icon-folder-open")
- ->url(url::site("move/browse/$item->id")));
- }
-
$parent = $item->parent();
if (access::can("edit", $parent)) {
// We can't make this item the highlight if it's an album with no album cover, or if it's
diff --git a/modules/gallery/helpers/gallery_installer.php b/modules/gallery/helpers/gallery_installer.php
index 569c5118..d5264fcc 100644
--- a/modules/gallery/helpers/gallery_installer.php
+++ b/modules/gallery/helpers/gallery_installer.php
@@ -300,7 +300,16 @@ class gallery_installer {
module::set_var("gallery", "simultaneous_upload_limit", 5);
module::set_var("gallery", "admin_area_timeout", 90 * 60);
module::set_var("gallery", "maintenance_mode", 0);
- module::set_version("gallery", 34);
+ module::set_var("gallery", "visible_title_length", 15);
+ module::set_var("gallery", "favicon_url", "lib/images/favicon.ico");
+
+ // Sendmail configuration
+ module::set_var("gallery", "email_from", "admin@example.com");
+ module::set_var("gallery", "email_reply_to", "public@example.com");
+ module::set_var("gallery", "email_line_length", 70);
+ module::set_var("gallery", "email_header_separator", serialize("\n"));
+
+ module::set_version("gallery", 37);
}
static function upgrade($version) {
@@ -584,6 +593,24 @@ class gallery_installer {
$db->query("ALTER TABLE {access_caches} ADD KEY (`item_id`)");
module::set_version("gallery", $version = 34);
}
+
+ if ($version == 34) {
+ module::set_var("gallery", "visible_title_length", 15);
+ module::set_version("gallery", $version = 35);
+ }
+
+ if ($version == 35) {
+ module::set_var("gallery", "favicon_url", "lib/images/favicon.ico");
+ module::set_version("gallery", $version = 36);
+ }
+
+ if ($version == 36) {
+ module::set_var("gallery", "email_from", "admin@example.com");
+ module::set_var("gallery", "email_reply_to", "public@example.com");
+ module::set_var("gallery", "email_line_length", 70);
+ module::set_var("gallery", "email_header_separator", serialize("\n"));
+ module::set_version("gallery", $version = 37);
+ }
}
static function uninstall() {
diff --git a/modules/gallery/helpers/gallery_task.php b/modules/gallery/helpers/gallery_task.php
index 6a1fc28a..0886aad0 100644
--- a/modules/gallery/helpers/gallery_task.php
+++ b/modules/gallery/helpers/gallery_task.php
@@ -58,8 +58,7 @@ class gallery_task_Core {
$tasks[] = Task_Definition::factory()
->callback("gallery_task::fix")
->name(t("Fix your Gallery"))
- ->description(t("Fix a variety of problems that might cause your Gallery to act " .
- "strangely. Requires maintenance mode."))
+ ->description(t("Fix a variety of problems that might cause your Gallery to act strangely. Requires maintenance mode."))
->severity(log::SUCCESS);
return $tasks;
diff --git a/modules/gallery/helpers/graphics.php b/modules/gallery/helpers/graphics.php
index cc4d2e76..bb085ea5 100644
--- a/modules/gallery/helpers/graphics.php
+++ b/modules/gallery/helpers/graphics.php
@@ -338,8 +338,7 @@ class graphics_Core {
} else {
$toolkits->imagemagick->installed = false;
$toolkits->imagemagick->error =
- t("ImageMagick is installed, but PHP's open_basedir restriction " .
- "prevents Gallery from using it.");
+ t("ImageMagick is installed, but PHP's open_basedir restriction prevents Gallery from using it.");
}
} else {
$toolkits->imagemagick->installed = false;
@@ -363,8 +362,7 @@ class graphics_Core {
} else {
$toolkits->graphicsmagick->installed = false;
$toolkits->graphicsmagick->error =
- t("GraphicsMagick is installed, but PHP's open_basedir restriction " .
- "prevents Gallery from using it.");
+ t("GraphicsMagick is installed, but PHP's open_basedir restriction prevents Gallery from using it.");
}
} else {
$toolkits->graphicsmagick->installed = false;
diff --git a/modules/gallery/helpers/l10n_scanner.php b/modules/gallery/helpers/l10n_scanner.php
index 2287a7ba..843c74f7 100644
--- a/modules/gallery/helpers/l10n_scanner.php
+++ b/modules/gallery/helpers/l10n_scanner.php
@@ -74,10 +74,21 @@ class l10n_scanner_Core {
unset($raw_tokens);
if (!empty($func_token_list["t"])) {
- l10n_scanner::_parse_t_calls($tokens, $func_token_list["t"], $cache);
+ $errors = l10n_scanner::_parse_t_calls($tokens, $func_token_list["t"], $cache);
+ foreach ($errors as $line => $error) {
+ Kohana_Log::add(
+ "error", "Translation scanner error. " .
+ "file: " . substr($file, strlen(DOCROOT)) . ", line: $line, context: $error");
+ }
}
+
if (!empty($func_token_list["t2"])) {
- l10n_scanner::_parse_plural_calls($tokens, $func_token_list["t2"], $cache);
+ $errors = l10n_scanner::_parse_plural_calls($tokens, $func_token_list["t2"], $cache);
+ foreach ($errors as $line => $error) {
+ Kohana_Log::add(
+ "error", "Translation scanner error. " .
+ "file: " . substr($file, strlen(DOCROOT)) . ", line: $line, context: $error");
+ }
}
}
@@ -91,6 +102,7 @@ class l10n_scanner_Core {
}
private static function _parse_t_calls(&$tokens, &$call_list, &$cache) {
+ $errors = array();
foreach ($call_list as $index) {
$function_name = $tokens[$index++];
$parens = $tokens[$index++];
@@ -103,14 +115,21 @@ class l10n_scanner_Core {
$message = self::_escape_quoted_string($first_param[1]);
l10n_scanner::process_message($message, $cache);
} else {
- // t() found, but inside is something which is not a string literal.
- // @todo Call status callback with error filename/line.
+ if (is_array($first_param) && ($first_param[0] == T_CONSTANT_ENCAPSED_STRING)) {
+ // Malformed string literals; escalate this
+ $errors[$first_param[2]] =
+ var_export(array($function_name, $parens, $first_param, $next_token), 1);
+ } else {
+ // t() found, but inside is something which is not a string literal. That's fine.
+ }
}
}
}
+ return $errors;
}
private static function _parse_plural_calls(&$tokens, &$call_list, &$cache) {
+ $errors = array();
foreach ($call_list as $index) {
$function_name = $tokens[$index++];
$parens = $tokens[$index++];
@@ -127,11 +146,17 @@ class l10n_scanner_Core {
$plural = self::_escape_quoted_string($second_param[1]);
l10n_scanner::process_message(array("one" => $singular, "other" => $plural), $cache);
} else {
- // t2() found, but inside is something which is not a string literal.
- // @todo Call status callback with error filename/line.
+ if (is_array($first_param) && $first_param[0] == T_CONSTANT_ENCAPSED_STRING) {
+ $errors[$first_param[2]] = var_export(
+ array($function_name, $parens, $first_param,
+ $first_separator, $second_param, $next_token), 1);
+ } else {
+ // t2() found, but inside is something which is not a string literal. That's fine.
+ }
}
}
}
+ return $errors;
}
/**
diff --git a/modules/gallery/helpers/movie.php b/modules/gallery/helpers/movie.php
index 4ff29a7b..3e55eefe 100644
--- a/modules/gallery/helpers/movie.php
+++ b/modules/gallery/helpers/movie.php
@@ -84,7 +84,7 @@ class movie_Core {
}
static function find_ffmpeg() {
- if (!$ffmpeg_path = module::get_var("gallery", "ffmpeg_path")) {
+ if (!($ffmpeg_path = module::get_var("gallery", "ffmpeg_path")) || !file_exists($ffmpeg_path)) {
$graphics_path = module::get_var("gallery", "graphics_toolkit_path", null);
putenv("PATH=" . getenv("PATH") . (empty($graphics_path) ? "" : ":$graphics_path") .
diff --git a/modules/gallery/helpers/theme.php b/modules/gallery/helpers/theme.php
index 9df3eaf2..1dc1f3b6 100644
--- a/modules/gallery/helpers/theme.php
+++ b/modules/gallery/helpers/theme.php
@@ -77,39 +77,6 @@ class theme_Core {
$config->set("core.modules", $modules);
}
- static function get_edit_form_admin() {
- $form = new Forge("admin/theme_options/save/", "", null, array("id" =>"g-theme-options-form"));
- $group = $form->group("edit_theme")->label(t("Theme layout"));
- $group->input("page_size")->label(t("Items per page"))->id("g-page-size")
- ->rules("required|valid_digit")
- ->error_messages("required", t("You must enter a number"))
- ->error_messages("valid_digit", t("You must enter a number"))
- ->value(module::get_var("gallery", "page_size"));
- $group->input("thumb_size")->label(t("Thumbnail size (in pixels)"))->id("g-thumb-size")
- ->rules("required|valid_digit")
- ->error_messages("required", t("You must enter a number"))
- ->error_messages("valid_digit", t("You must enter a number"))
- ->value(module::get_var("gallery", "thumb_size"));
- $group->input("resize_size")->label(t("Resized image size (in pixels)"))->id("g-resize-size")
- ->rules("required|valid_digit")
- ->error_messages("required", t("You must enter a number"))
- ->error_messages("valid_digit", t("You must enter a number"))
- ->value(module::get_var("gallery", "resize_size"));
- $group->textarea("header_text")->label(t("Header text"))->id("g-header-text")
- ->value(module::get_var("gallery", "header_text"));
- $group->textarea("footer_text")->label(t("Footer text"))->id("g-footer-text")
- ->value(module::get_var("gallery", "footer_text"));
- $group->checkbox("show_credits")->label(t("Show site credits"))->id("g-footer-text")
- ->checked(module::get_var("gallery", "show_credits"));
-
- module::event("theme_edit_form", $form);
-
- $group = $form->group("buttons")
- ->set_attr("style","border: none");
- $group->submit("")->value(t("Save"));
- return $form;
- }
-
static function get_info($theme_name) {
$theme_name = preg_replace("/[^a-zA-Z0-9\._-]/", "", $theme_name);
$file = THEMEPATH . "$theme_name/theme.info";
diff --git a/modules/gallery/helpers/user_profile.php b/modules/gallery/helpers/user_profile.php
index e5ebce84..d9cc8ace 100644
--- a/modules/gallery/helpers/user_profile.php
+++ b/modules/gallery/helpers/user_profile.php
@@ -35,19 +35,20 @@ class user_profile_Core {
$group->input("reply_to")
->label(t("From:"))
->rules("required|length[1, 256]|valid_email")
- ->error_messages("required", t("Field is required"))
- ->error_messages("max_length", t("Field exceeds 256 bytes"))
- ->error_messages("valid_email", t("Field is not a valid email address"));
+ ->error_messages("required", t("You must enter a valid email address"))
+ ->error_messages("max_length", t("Your email address is too long"))
+ ->error_messages("valid_email", t("You must enter a valid email address"));
$group->input("subject")
->label(t("Subject:"))
->rules("required|length[1, 256]")
- ->error_messages("required", t("Field is required"))
- ->error_messages("max_length", t("Field exceeds 256 bytes"));
+ ->error_messages("required", t("Your message must have a subject"))
+ ->error_messages("max_length", t("Your subject is too long"));
$group->textarea("message")
->label(t("Message:"))
->rules("required")
- ->error_messages("required", t("Field is required"));
+ ->error_messages("required", t("You must enter a message"));
module::event("user_profile_contact_form", $form);
+ module::event("captcha_protect_form", $form);
$group->submit("")->value(t("Send"));
return $form;
}
diff --git a/modules/gallery/libraries/Form_Uploadify.php b/modules/gallery/libraries/Form_Uploadify.php
index e5b6d819..79477763 100644
--- a/modules/gallery/libraries/Form_Uploadify.php
+++ b/modules/gallery/libraries/Form_Uploadify.php
@@ -46,6 +46,8 @@ class Form_Uploadify_Core extends Form_Input {
$v->album = $this->data["album"];
$v->script_data = $this->data["script_data"];
$v->simultaneous_upload_limit = module::get_var("gallery", "simultaneous_upload_limit");
+ $v->movies_allowed = (bool) movie::find_ffmpeg();
+ $v->suhosin_session_encrypt = (bool) ini_get("suhosin.session.encrypt");
return $v;
}
diff --git a/modules/gallery/libraries/IdentityProvider.php b/modules/gallery/libraries/IdentityProvider.php
index 5f341c90..4ef07e1a 100644
--- a/modules/gallery/libraries/IdentityProvider.php
+++ b/modules/gallery/libraries/IdentityProvider.php
@@ -61,8 +61,7 @@ class IdentityProvider_Core {
* Return a commen confirmation message
*/
static function confirmation_message() {
- return t("Are you sure you want to change your Identity Provider? " .
- "Continuing will delete all existing users.");
+ return t("Are you sure you want to change your Identity Provider? Continuing will delete all existing users.");
}
static function change_provider($new_provider) {
@@ -113,8 +112,7 @@ class IdentityProvider_Core {
}
message::error(
- t("Error attempting to enable \"%new_provider\" identity provider, " .
- "reverted to \"%old_provider\" identity provider",
+ t("Error attempting to enable \"%new_provider\" identity provider, reverted to \"%old_provider\" identity provider",
array("new_provider" => $new_provider, "old_provider" => $current_provider)));
$restore_already_running = false;
diff --git a/modules/gallery/libraries/Sendmail.php b/modules/gallery/libraries/Sendmail.php
index ded7b2ef..0fa554b4 100644
--- a/modules/gallery/libraries/Sendmail.php
+++ b/modules/gallery/libraries/Sendmail.php
@@ -35,10 +35,12 @@ class Sendmail_Core {
public function __construct() {
$this->headers = array();
- $config = Kohana::config("sendmail");
- foreach ($config as $key => $value) {
- $this->$key($value);
- }
+ $domain = Input::instance()->server("HTTP_HOST");
+ $this->from(module::get_var("gallery", "email_from", "admin@$domain"));
+ $this->reply_to(module::get_var("gallery", "email_reply_to", "public@$domain"));
+ $this->line_length(module::get_var("gallery", "email_line_length", 70));
+ $separator = module::get_var("gallery", "email_header_separator", null);
+ $this->header_separator(empty($separator) ? "\n" : deserialize($separator));
}
public function __get($key) {
diff --git a/modules/gallery/libraries/Theme_View.php b/modules/gallery/libraries/Theme_View.php
index 46291005..7a6bc1da 100644
--- a/modules/gallery/libraries/Theme_View.php
+++ b/modules/gallery/libraries/Theme_View.php
@@ -236,6 +236,13 @@ class Theme_View_Core extends Gallery_View {
case "thumb_bottom":
case "thumb_info":
case "thumb_top":
+ if ($function == "head") {
+ // Stash any CSS we have already; that came from the theme and we want theme CSS to
+ // override module CSs
+ $save_css = $this->css;
+ $this->css = array();
+ }
+
$blocks = array();
if (method_exists("gallery_theme", $function)) {
switch (count($args)) {
@@ -275,6 +282,8 @@ class Theme_View_Core extends Gallery_View {
}
if ($function == "head") {
+ // Merge the theme CSS/JS at the end
+ $this->css = array_merge($this->css, $save_css);
array_unshift($blocks, $this->combine_files($this->css, "css"));
array_unshift($blocks, $this->combine_files($this->scripts, "javascript"));
}
diff --git a/modules/gallery/models/item.php b/modules/gallery/models/item.php
index c4591279..1db766e9 100644
--- a/modules/gallery/models/item.php
+++ b/modules/gallery/models/item.php
@@ -411,7 +411,9 @@ class Item_Model extends ORM_MPTT {
}
// This will almost definitely trigger another save, so put it at the end so that we're
- // tail recursive.
+ // tail recursive. Null out the data file variable first, otherwise the next save will
+ // trigger an item_updated_data_file event.
+ $this->data_file = null;
module::event("item_created", $this);
} else {
// Update an existing item
diff --git a/modules/gallery/module.info b/modules/gallery/module.info
index 084a0945..901158b5 100644
--- a/modules/gallery/module.info
+++ b/modules/gallery/module.info
@@ -1,3 +1,3 @@
name = "Gallery 3"
description = "Gallery core application"
-version = 34
+version = 37
diff --git a/modules/gallery/tests/Gallery_Filters.php b/modules/gallery/tests/Gallery_Filters.php
index 052990d5..1c07f93e 100644
--- a/modules/gallery/tests/Gallery_Filters.php
+++ b/modules/gallery/tests/Gallery_Filters.php
@@ -43,7 +43,6 @@ class GalleryCodeFilterIterator extends FilterIterator {
strpos($path_name, MODPATH . "unit_test") !== false ||
strpos($path_name, MODPATH . "exif/lib") !== false ||
strpos($path_name, MODPATH . "user/lib/PasswordHash") !== false ||
- strpos($path_name, DOCROOT . "lib/swfupload") !== false ||
strpos($path_name, SYSPATH) !== false ||
strpos($path_name, MODPATH . "gallery/libraries/HTMLPurifier") !== false ||
substr($path_name, -1, 1) == "~");
diff --git a/modules/gallery/tests/Sendmail_Test.php b/modules/gallery/tests/Sendmail_Test.php
index b9406047..92974e5c 100644
--- a/modules/gallery/tests/Sendmail_Test.php
+++ b/modules/gallery/tests/Sendmail_Test.php
@@ -23,9 +23,10 @@ class Sendmail_Test extends Gallery_Unit_Test_Case {
}
public function sendmail_test() {
+ $domain = Input::instance()->server("HTTP_HOST");
$expected = "To: receiver@someemail.com\r\n" .
"From: from@gallery3.com\n" .
- "Reply-To: public@gallery3.com\r\n" .
+ "Reply-To: public@$domain\r\n" .
"Subject: Test Email Unit test\r\n\r\n" .
"The mail message body";
$result = Sendmail_For_Test::factory()
@@ -45,8 +46,9 @@ class Sendmail_Test extends Gallery_Unit_Test_Case {
}
public function sendmail_reply_to_test() {
+ $domain = Input::instance()->server("HTTP_HOST");
$expected = "To: receiver@someemail.com\r\n" .
- "From: from@gallery3.com\n" .
+ "From: admin@$domain\n" .
"Reply-To: reply-to@gallery3.com\r\n" .
"Subject: Test Email Unit test\r\n\r\n" .
"The mail message body";
@@ -61,9 +63,10 @@ class Sendmail_Test extends Gallery_Unit_Test_Case {
}
public function sendmail_html_message_test() {
+ $domain = Input::instance()->server("HTTP_HOST");
$expected = "To: receiver@someemail.com\r\n" .
- "From: from@gallery3.com\n" .
- "Reply-To: public@gallery3.com\n" .
+ "From: admin@$domain\n" .
+ "Reply-To: public@$domain\n" .
"MIME-Version: 1.0\n" .
"Content-Type: text/html; charset=UTF-8\r\n" .
"Subject: Test Email Unit test\r\n\r\n" .
@@ -80,9 +83,10 @@ class Sendmail_Test extends Gallery_Unit_Test_Case {
}
public function sendmail_wrapped_message_test() {
+ $domain = Input::instance()->server("HTTP_HOST");
$expected = "To: receiver@someemail.com\r\n" .
- "From: from@gallery3.com\n" .
- "Reply-To: public@gallery3.com\r\n" .
+ "From: admin@$domain\n" .
+ "Reply-To: public@$domain\r\n" .
"Subject: Test Email Unit test\r\n\r\n" .
"This is a long message that needs to go\n" .
"over forty characters If we get lucky we\n" .
diff --git a/modules/gallery/views/admin_theme_options.html.php b/modules/gallery/views/admin_theme_options.html.php
index b4a90682..e452913e 100644
--- a/modules/gallery/views/admin_theme_options.html.php
+++ b/modules/gallery/views/admin_theme_options.html.php
@@ -1,35 +1,4 @@
<?php defined("SYSPATH") or die("No direct script access.") ?>
-<script type="text/javascript">
- $("#g-theme-options-form").ready(function() {
- var contents = $("#g-theme-options-form fieldset:not(:last-child)");
- if (contents.length > 1) {
- $("<div id='g-theme-options-form-tabs'>" +
- " <ul class='tabnav'></ul>" +
- "</div>").insertBefore("#g-theme-options-form fieldset:last-child");
- $(contents).each(function(index) {
- var text = $("legend", this).text();
- var tabId = "tab_" + index;
- var tabContentId = "tab_content_" + index;
- if (text == "") {
- text = <?= t("Tab_")->for_js() ?> + index;
- }
- $(".tabnav").append(
- "<li><a id='" + tabId + "' href='#" + tabContentId + "'>" + text + "</a></li>");
- $("#g-theme-options-form-tabs").append(
- "<div id='" + tabContentId + "' class='tabdiv'></div>");
- if ($("li.g-error", this).length > 0) {
- $("#" + tabId).addClass("g-error");
- }
- $("#" + tabContentId).append($("ul", this));
- $(this).remove();
- });
- $("#g-theme-options-form-tabs").tabs({});
- } else {
- $("#g-theme-options-form fieldset:first legend").hide();
- }
- });
-</script>
-
<div class="g-block">
<h1> <?= t("Theme options") ?> </h1>
<div class="g-block-content">
diff --git a/modules/gallery/views/form_uploadify.html.php b/modules/gallery/views/form_uploadify.html.php
index 4f564b07..36f5f284 100644
--- a/modules/gallery/views/form_uploadify.html.php
+++ b/modules/gallery/views/form_uploadify.html.php
@@ -2,109 +2,162 @@
<script type="text/javascript" src="<?= url::file("lib/swfobject.js") ?>"></script>
<script type="text/javascript" src="<?= url::file("lib/uploadify/jquery.uploadify.min.js") ?>"></script>
<script type="text/javascript">
+ <? $flash_minimum_version = "9.0.24" ?>
+ var success_count = 0;
+ var error_count = 0;
+ var updating = 0;
$("#g-add-photos-canvas").ready(function () {
- $("#g-uploadify").uploadify({
- width: 150,
- height: 33,
- uploader: "<?= url::file("lib/uploadify/uploadify.swf") ?>",
- script: "<?= url::site("uploader/add_photo/{$album->id}") ?>",
- scriptData: <?= json_encode($script_data) ?>,
- fileExt: "*.gif;*.jpg;*.jpeg;*.png;*.flv;*.mp4;*.m4v;*.GIF;*.JPG;*.JPEG;*.PNG;*.FLV;*.MP4;*.M4V",
- fileDesc: <?= t("Photos and movies")->for_js() ?>,
- cancelImg: "<?= url::file("lib/uploadify/cancel.png") ?>",
- simUploadLimit: <?= $simultaneous_upload_limit ?>,
- wmode: "transparent",
- hideButton: true, /* should be true */
- auto: true,
- multi: true,
- onAllComplete: function(filesUploaded, errors, allbytesLoaded, speed) {
- $("#g-upload-cancel-all")
- .addClass("ui-state-disabled")
- .attr("disabled", "disabled");
- return true;
- },
- onClearQueue: function(event) {
- $("#g-upload-cancel-all")
- .addClass("ui-state-disabled")
- .attr("disabled", "disabled");
- return true;
- },
- onComplete: function(event, queueID, fileObj, response, data) {
- var re = /^error: (.*)$/i;
- var msg = re.exec(response);
- if (msg) {
- $("#g-add-photos-status ul").append(
- "<li class=\"g-error\">" + fileObj.name + " - " + msg[1] + "</li>");
- } else {
- $("#g-add-photos-status ul").append(
- "<li class=\"g-success\">" + fileObj.name + " - " + <?= t("Completed")->for_js() ?> + "</li>");
- }
- return true;
- },
- onError: function(event, queueID, fileObj, errorObj) {
- var msg = " - ";
- if (errorObj.type == "HTTP") {
- if (errorObj.info == "500") {
- msg += <?= t("Unable to process this file")->for_js() ?>;
- // Server error - check server logs
- } else if (errorObj.info == "404") {
- msg += <?= t("The upload script was not found.")->for_js() ?>;
- // Server script not found
- } else {
- // Server Error: status: errorObj.info
- msg += (<?= t("Server error: __INFO__")->for_js() ?>.replace("__INFO__", errorObj.info));
- }
- } else if (errorObj.type == "File Size") {
- var sizelimit = $("#g-uploadify").uploadifySettings(sizeLimit);
- msg += fileObj.name+' '+errorObj.type+' Limit: '+Math.round(d.sizeLimit/1024)+'KB';
- } else {
- msg += (<?= t("Server error: __INFO__ (__TYPE__)")->for_js() ?>
- .replace("__INFO__", errorObj.info)
- .replace("__TYPE__", errorObj.type));
- }
- $("#g-add-photos-status ul").append(
- "<li class=\"g-error\">" + fileObj.name + msg + "</li>");
- $("#g-uploadify" + queueID).remove();
- },
- onSelect: function(event) {
- if ($("#g-upload-cancel-all").hasClass("ui-state-disabled")) {
+ var update_status = function() {
+ if (updating) {
+ // poor man's mutex
+ setTimeout(function() { update_status(); }, 500);
+ }
+ updating = 1;
+ $.get("<?= url::site("uploader/status/_S/_E") ?>"
+ .replace("_S", success_count).replace("_E", error_count),
+ function(data) {
+ $("#g-add-photos-status-message").html(data);
+ updating = 0;
+ });
+ };
+
+ if (swfobject.hasFlashPlayerVersion("<?= $flash_minimum_version ?>")) {
+ $("#g-uploadify").uploadify({
+ width: 150,
+ height: 33,
+ uploader: "<?= url::file("lib/uploadify/uploadify.swf") ?>",
+ script: "<?= url::site("uploader/add_photo/{$album->id}") ?>",
+ scriptData: <?= json_encode($script_data) ?>,
+ fileExt: "*.gif;*.jpg;*.jpeg;*.png;*.GIF;*.JPG;*.JPEG;*.PNG<? if ($movies_allowed): ?>;*.flv;*.mp4;*.m4v;*.FLV;*.MP4;*.M4V<? endif ?>",
+ fileDesc: <?= t("Photos and movies")->for_js() ?>,
+ cancelImg: "<?= url::file("lib/uploadify/cancel.png") ?>",
+ simUploadLimit: <?= $simultaneous_upload_limit ?>,
+ wmode: "transparent",
+ hideButton: true, /* should be true */
+ auto: true,
+ multi: true,
+ onAllComplete: function(filesUploaded, errors, allbytesLoaded, speed) {
+ $("#g-upload-cancel-all")
+ .addClass("ui-state-disabled")
+ .attr("disabled", "disabled");
+ $("#g-upload-done")
+ .removeClass("ui-state-disabled")
+ .attr("disabled", null);
+ return true;
+ },
+ onClearQueue: function(event) {
$("#g-upload-cancel-all")
+ .addClass("ui-state-disabled")
+ .attr("disabled", "disabled");
+ $("#g-upload-done")
.removeClass("ui-state-disabled")
.attr("disabled", null);
+ return true;
+ },
+ onComplete: function(event, queueID, fileObj, response, data) {
+ var re = /^error: (.*)$/i;
+ var msg = re.exec(response);
+ $("#g-add-photos-status ul").append(
+ "<li id=\"q" + queueID + "\" class=\"g-success\">" + fileObj.name + " - " +
+ <?= t("Completed")->for_js() ?> + "</li>");
+ setTimeout(function() { $("#q" + queueID).slideUp("slow") }, 5000);
+ success_count++;
+ update_status();
+ return true;
+ },
+ onError: function(event, queueID, fileObj, errorObj) {
+ var msg = " - ";
+ if (errorObj.type == "HTTP") {
+ if (errorObj.info == "500") {
+ msg += <?= t("Unable to process this file")->for_js() ?>;
+ // Server error - check server logs
+ } else if (errorObj.info == "404") {
+ msg += <?= t("The upload script was not found.")->for_js() ?>;
+ // Server script not found
+ } else {
+ // Server Error: status: errorObj.info
+ msg += (<?= t("Server error: __INFO__")->for_js() ?>.replace("__INFO__", errorObj.info));
+ }
+ } else if (errorObj.type == "File Size") {
+ var sizelimit = $("#g-uploadify").uploadifySettings(sizeLimit);
+ msg += fileObj.name+' '+errorObj.type+' Limit: '+Math.round(d.sizeLimit/1024)+'KB';
+ } else {
+ msg += (<?= t("Server error: __INFO__ (__TYPE__)")->for_js() ?>
+ .replace("__INFO__", errorObj.info)
+ .replace("__TYPE__", errorObj.type));
+ }
+ $("#g-add-photos-status ul").append(
+ "<li class=\"g-error\">" + fileObj.name + msg + "</li>");
+ $("#g-uploadify" + queueID).remove();
+ error_count++;
+ update_status();
+ },
+ onSelect: function(event) {
+ if ($("#g-upload-cancel-all").hasClass("ui-state-disabled")) {
+ $("#g-upload-cancel-all")
+ .removeClass("ui-state-disabled")
+ .attr("disabled", null);
+ $("#g-upload-done")
+ .addClass("ui-state-disabled")
+ .attr("disabled", "disabled");
+ }
+ return true;
}
- return true;
- }
- });
+ });
+ } else {
+ $(".requires-flash").hide();
+ $(".no-flash").show();
+ }
});
</script>
-<? if (ini_get("suhosin.session.encrypt")): ?>
-<ul id="g-action-status" class="g-message-block">
- <li class="g-error">
- <?= t("Error: your server is configured to use the <a href=\"%encrypt_url\"><code>suhosin.session.encrypt</code></a> setting from <a href=\"%suhosin_url\">Suhosin</a>. You must disable this setting to upload photos.",
- array("encrypt_url" => "http://www.hardened-php.net/suhosin/configuration.html#suhosin.session.encrypt",
- "suhosin_url" => "http://www.hardened-php.net/suhosin/")) ?>
- </li>
-</ul>
-<? endif ?>
+<div class="requires-flash">
+ <? if ($suhosin_session_encrypt || !$movies_allowed): ?>
+ <div class="g-message-block g-info">
+ <? if ($suhosin_session_encrypt): ?>
+ <p class="g-error">
+ <?= t("Error: your server is configured to use the <a href=\"%encrypt_url\"><code>suhosin.session.encrypt</code></a> setting from <a href=\"%suhosin_url\">Suhosin</a>. You must disable this setting to upload photos.",
+ array("encrypt_url" => "http://www.hardened-php.net/suhosin/configuration.html#suhosin.session.encrypt",
+ "suhosin_url" => "http://www.hardened-php.net/suhosin/")) ?>
+ </p>
+ <? endif ?>
-<div>
- <p>
- <?= t("Photos will be uploaded to album: ") ?>
- </p>
- <ul class="g-breadcrumbs ui-helper-clearfix">
- <? foreach ($album->parents() as $i => $parent): ?>
- <li<? if ($i == 0) print " class=\"g-first\"" ?>> <?= html::clean($parent->title) ?> </li>
- <? endforeach ?>
- <li class="g-active"> <?= html::purify($album->title) ?> </li>
- </ul>
-</div>
+ <? if (!$movies_allowed): ?>
+ <p class="g-warning">
+ <?= t("Can't find <i>ffmpeg</i> on your system. Movie uploading disabled. <a href=\"%help_url\">Help!</a>", array("help_url" => "http://codex.gallery2.org/Gallery3:FAQ#Why_does_it_say_I.27m_missing_ffmpeg.3F")) ?>
+ </p>
+ <? endif ?>
+ </div>
+ <? endif ?>
+
+ <div>
+ <p>
+ <?= t("Photos will be uploaded to album: ") ?>
+ </p>
+ <ul class="g-breadcrumbs ui-helper-clearfix">
+ <? foreach ($album->parents() as $i => $parent): ?>
+ <li<? if ($i == 0) print " class=\"g-first\"" ?>> <?= html::clean($parent->title) ?> </li>
+ <? endforeach ?>
+ <li class="g-active"> <?= html::purify($album->title) ?> </li>
+ </ul>
+ </div>
-<div id="g-add-photos-canvas">
- <button id="g-add-photos-button" class="g-button ui-state-default ui-corner-all" href="#"><?= t("Select photos...") ?></button>
- <span id="g-uploadify"></span>
+ <div id="g-add-photos-canvas">
+ <button id="g-add-photos-button" class="g-button ui-state-default ui-corner-all" href="#"><?= t("Select photos...") ?></button>
+ <span id="g-uploadify"></span>
+ </div>
+ <div id="g-add-photos-status">
+ <ul id="g-action-status" class="g-message-block">
+ </ul>
+ </div>
</div>
-<div id="g-add-photos-status">
- <ul id="g-action-status" class="g-message-block">
- </ul>
+
+<div class="no-flash" style="display: none">
+ <p>
+ <?= t("Your browser must have Adobe Flash Player version %flash_minimum_version or greater installed to use this feature.", array("flash_minimum_version" => $flash_minimum_version)) ?>
+ </p>
+ <a href="http://www.adobe.com/go/getflashplayer">
+ <img src="<?= request::protocol() ?>://www.adobe.com/images/shared/download_buttons/get_flash_player.gif"
+ alt=<?= t("Get Adobe Flash Player")->for_js() ?> />
+ </a>
</div>
diff --git a/modules/gallery/views/form_uploadify_buttons.html.php b/modules/gallery/views/form_uploadify_buttons.html.php
index d88bb6aa..e002d82d 100644
--- a/modules/gallery/views/form_uploadify_buttons.html.php
+++ b/modules/gallery/views/form_uploadify_buttons.html.php
@@ -1,8 +1,11 @@
<?php defined("SYSPATH") or die("No direct script access.") ?>
-<!-- Proxy the done request back to our form, since its been ajaxified -->
-<button id="g-upload-done" class="ui-state-default ui-corner-all" onclick="$('#g-add-photos-form').submit();return false;">
+<div class="requires-flash">
+ <!-- Proxy the done request back to our form, since its been ajaxified -->
+ <button id="g-upload-done" class="ui-state-default ui-corner-all" onclick="$('#g-add-photos-form').submit();return false;">
<?= t("Done") ?>
-</button>
-<button id="g-upload-cancel-all" class="ui-state-default ui-corner-all ui-state-disabled" onclick="$('#g-uploadify').uploadifyClearQueue();return false;" disabled="disabled">
- <?= t("Cancel All") ?>
-</button>
+ </button>
+ <button id="g-upload-cancel-all" class="ui-state-default ui-corner-all ui-state-disabled" onclick="$('#g-uploadify').uploadifyClearQueue();return false;" disabled="disabled">
+ <?= t("Cancel uploads") ?>
+ </button>
+ <span id="g-add-photos-status-message" />
+</div>
diff --git a/modules/gallery/views/move_browse.html.php b/modules/gallery/views/move_browse.html.php
deleted file mode 100644
index f77c724c..00000000
--- a/modules/gallery/views/move_browse.html.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php defined("SYSPATH") or die("No direct script access.") ?>
-<div>
-<script type="text/javascript">
- var load_tree = function(target_id, locked) {
- var load_url = "<?= url::site("move/show_sub_tree/{$source->id}/__TARGETID__") ?>";
- var node = $("#node_" + target_id);
- $("#g-move .node a").removeClass("selected");
- node.find("a:first").addClass("selected");
- if (locked) {
- $("#g-move-button").attr("disabled", "disabled");
- $("#g-move form input[name=target_id]").attr("value", "");
- } else {
- $("#g-move-button").removeAttr("disabled");
- $("#g-move form input[name=target_id]").attr("value", target_id);
- }
- var sub_tree = $("#tree_" + target_id);
- if (sub_tree.length) {
- sub_tree.toggle();
- } else {
- $.get(load_url.replace("__TARGETID__", target_id), {},
- function(data) {
- node.html(data);
- node.find("a:first").addClass("selected");
- });
- }
- }
-</script>
-<h1 style="display:none" >
- <? if ($source->type == "photo"): ?>
- <?= t("Move this photo to a new album") ?>
- <? elseif ($source->type == "movie"): ?>
- <?= t("Move this movie to a new album") ?>
- <? elseif ($source->type == "album"): ?>
- <?= t("Move this album to a new album") ?>
- <? endif ?>
-</h1>
-<div id="g-move">
- <ul id="tree_0">
- <li id="node_1" class="node">
- <?= $tree ?>
- </li>
- </ul>
- <form method="post" action="<?= url::site("move/save/$source->id") ?>">
- <?= access::csrf_form_field() ?>
- <input type="hidden" name="target_id" value="" />
- <input type="submit" id="g-move-button" value="<?= t("Move")->for_html_attr() ?>"
- disabled="disabled" class="submit" />
- </form>
-</div>
-</div>
diff --git a/modules/gallery/views/move_tree.html.php b/modules/gallery/views/move_tree.html.php
deleted file mode 100644
index e629e1bb..00000000
--- a/modules/gallery/views/move_tree.html.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php defined("SYSPATH") or die("No direct script access.") ?>
-<?= $parent->thumb_img(array(), 25); ?>
-<? if (!access::can("edit", $parent) || $source->contains($parent)): ?>
-<a href="javascript:load_tree('<?= $parent->id ?>',1)"> <?= html::clean($parent->title) ?> <?= t("(locked)") ?> </a>
-<? else: ?>
-<a href="javascript:load_tree('<?= $parent->id ?>',0)"> <?= html::clean($parent->title) ?></a>
-<? endif ?>
-<ul id="tree_<?= $parent->id ?>">
- <? foreach ($children as $child): ?>
- <li id="node_<?= $child->id ?>" class="node">
- <?= $child->thumb_img(array(), 25); ?>
- <? if (!access::can("edit", $child) || $source->contains($child)): ?>
- <a href="javascript:load_tree('<?= $child->id ?>',1)"> <?= html::clean($child->title) ?> <?= t("(locked)") ?></a>
- <? else: ?>
- <a href="javascript:load_tree('<?= $child->id ?>',0)"> <?= html::clean($child->title) ?> </a>
- <? endif ?>
- </li>
- <? endforeach ?>
-</ul>
diff --git a/modules/notification/helpers/notification_event.php b/modules/notification/helpers/notification_event.php
index df9dbe48..5cd10de8 100644
--- a/modules/notification/helpers/notification_event.php
+++ b/modules/notification/helpers/notification_event.php
@@ -21,15 +21,6 @@ class notification_event_Core {
// The assumption is that the exception was logged at a lower level, but we
// don't want to screw up the processing that was generating the notification
// so we don't pass the exception up the call stack
- static function item_updated($original, $new) {
- try {
- notification::send_item_updated($original, $new);
- } catch (Exception $e) {
- Kohana_Log::add("error", "@todo notification_event::item_updated() failed");
- Kohana_Log::add("error", $e->getMessage() . "\n" . $e->getTraceAsString());
- }
- }
-
static function item_created($item) {
try {
notification::send_item_add($item);
diff --git a/modules/organize/controllers/organize.php b/modules/organize/controllers/organize.php
index 7b2ba8ef..2b6e4186 100644
--- a/modules/organize/controllers/organize.php
+++ b/modules/organize/controllers/organize.php
@@ -31,10 +31,9 @@ class Organize_Controller extends Controller {
$sort_fields[$field] = (string)$description;
}
$sort_order = array("ASC" => (string)t("Ascending"), "DESC" => (string)t("Descending"));
- $file_filter = json_encode(
- array("photo" => array("label" => "Images",
- "types" => array("*.jpg", "*.jpeg", "*.png", "*.gif")),
- "movie" => array("label" => "Movies", "types" => array("*.flv", "*.mp4", "*.m4v"))));
+ $file_filter = json_encode(array(
+ "photo" => array("label" => "Images", "types" => array("*.jpg", "*.jpeg", "*.png", "*.gif")),
+ "movie" => array("label" => "Movies", "types" => array("*.flv", "*.mp4", "*.m4v"))));
$v = new View("organize_dialog.html");
$v->album = $album;
@@ -43,6 +42,7 @@ class Organize_Controller extends Controller {
$v->file_filter = addslashes($file_filter);
$v->sort_order = addslashes(json_encode($sort_order));
$v->sort_fields = addslashes(json_encode($sort_fields));
+ $v->selected_id = Input::instance()->get("selected_id", null);
$v->rest_uri = url::site("rest") . "/";
$v->controller_uri = url::site("organize") . "/";
$v->swf_uri = url::file("modules/organize/lib/Gallery3WebClient.swf?") .
diff --git a/modules/organize/helpers/organize_event.php b/modules/organize/helpers/organize_event.php
index ae05fb5d..2f997600 100644
--- a/modules/organize/helpers/organize_event.php
+++ b/modules/organize/helpers/organize_event.php
@@ -32,13 +32,23 @@ class organize_event_Core {
}
static function context_menu($menu, $theme, $item) {
- if ($item->is_album() && access::can("edit", $item)) {
- $menu->get("options_menu")
- ->append(Menu::factory("dialog")
- ->id("organize")
- ->label(t("Organize album"))
- ->css_class("ui-icon-folder-open g-organize-link")
- ->url(url::site("organize/dialog/{$item->id}")));
+ if (access::can("edit", $item)) {
+ if ($item->is_album()) {
+ $menu->get("options_menu")
+ ->append(Menu::factory("dialog")
+ ->id("organize")
+ ->label(t("Organize album"))
+ ->css_class("ui-icon-folder-open g-organize-link")
+ ->url(url::site("organize/dialog/{$item->id}")));
+ } else {
+ $parent = $item->parent();
+ $menu->get("options_menu")
+ ->append(Menu::factory("dialog")
+ ->id("move")
+ ->label(t("Move to another album"))
+ ->css_class("ui-icon-folder-open g-organize-link")
+ ->url(url::site("organize/dialog/{$parent->id}?selected_id={$item->id}")));
+ }
}
}
@@ -51,8 +61,7 @@ class organize_event_Core {
static function module_change($changes) {
if (!module::is_active("rest") || in_array("rest", $changes->deactivate)) {
site_status::warning(
- t("The Organize module requires the Rest module. " .
- "<a href=\"%url\">Activate the Rest module now</a>",
+ t("The Organize module requires the Rest module. <a href=\"%url\">Activate the Rest module now</a>",
array("url" => html::mark_clean(url::site("admin/modules")))),
"organize_needs_rest");
} else {
diff --git a/modules/organize/helpers/organize_installer.php b/modules/organize/helpers/organize_installer.php
index bbe6fc65..2faa598b 100644
--- a/modules/organize/helpers/organize_installer.php
+++ b/modules/organize/helpers/organize_installer.php
@@ -22,12 +22,15 @@ class organize_installer {
site_status::clear("organize_needs_rest");
}
+ static function install() {
+ module::set_version("organize", $version = 2);
+ }
+
static function upgrade($version) {
if ($version == 1) {
if (!module::is_active("rest")) {
site_status::warning(
- t("The Organize module requires the Rest module. " .
- "<a href=\"%url\">Activate the Rest module now</a>",
+ t("The Organize module requires the Rest module. <a href=\"%url\">Activate the Rest module now</a>",
array("url" => html::mark_clean(url::site("admin/modules")))),
"organize_needs_rest");
}
diff --git a/modules/organize/lib/Gallery3WebClient.swf b/modules/organize/lib/Gallery3WebClient.swf
index b37a74c3..b82c8a42 100644
--- a/modules/organize/lib/Gallery3WebClient.swf
+++ b/modules/organize/lib/Gallery3WebClient.swf
Binary files differ
diff --git a/modules/organize/views/organize_dialog.html.php b/modules/organize/views/organize_dialog.html.php
index 4cc6385e..b76813ad 100644
--- a/modules/organize/views/organize_dialog.html.php
+++ b/modules/organize/views/organize_dialog.html.php
@@ -1,10 +1,6 @@
<?php defined("SYSPATH") or die("No direct script access.") ?>
<script type="text/javascript" src="<?= url::file("lib/swfobject.js") ?>"></script>
<style type="text/css" media="screen">
- #flashContent {
- //display:none;
- }
-
.g-organize {
padding: 0;
margins: 0;
@@ -21,10 +17,10 @@
</style>
<script type="text/javascript">
- $("#g-dialog").bind("dialogclose", function(event, ui) {
- // @todo do a call to organize/closing to end the batch
- window.location.reload();
- });
+ $("#g-dialog").bind("dialogclose", function(event, ui) {
+ // @todo do a call to organize/closing to end the batch
+ window.location.reload();
+ });
function closeOrganizeDialog() {
$("#g-dialog").dialog("close");
@@ -94,6 +90,7 @@
sortOrder: "<?= $sort_order ?>",
sortFields: "<?= $sort_fields ?>",
albumId: "<?= $album->id ?>",
+ selectedId: "<?= $selected_id ?>",
restUri: "<?= $rest_uri ?>",
controllerUri: "<?= $controller_uri ?>"
};
@@ -129,8 +126,7 @@
<h1 style="display:none"><?= t("Organize :: %name", array("name" => html::purify($album->title))) ?></h1>
<div id="flashContent">
<p>
- <?= t("To use the Organize feature, please ensure that Adobe Flash Player version %flash_minimum_version " .
- "or greater is installed.", array("flash_minimum_version" => $flash_minimum_version)) ?>
+ <?= t("Your browser must have Adobe Flash Player version %flash_minimum_version or greater installed to use this feature.", array("flash_minimum_version" => $flash_minimum_version)) ?>
</p>
<a href="http://www.adobe.com/go/getflashplayer">
<img src="<?= request::protocol() ?>://www.adobe.com/images/shared/download_buttons/get_flash_player.gif"
diff --git a/modules/recaptcha/helpers/recaptcha_event.php b/modules/recaptcha/helpers/recaptcha_event.php
index fda998e1..f185f92b 100644
--- a/modules/recaptcha/helpers/recaptcha_event.php
+++ b/modules/recaptcha/helpers/recaptcha_event.php
@@ -18,21 +18,17 @@
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
class recaptcha_event_Core {
- static function user_profile_contact_form($form) {
+ static function captcha_protect_form($form) {
if (module::get_var("recaptcha", "public_key")) {
- $form->message->recaptcha("recaptcha")->label("")->id("g-recaptcha");
- }
- }
+ foreach ($form->inputs as $input) {
+ if ($input instanceof Form_Group) {
+ $input->recaptcha("recaptcha")->label("")->id("g-recaptcha");
+ return;
+ }
+ }
- static function comment_add_form($form) {
- if (module::get_var("recaptcha", "public_key")) {
- $form->add_comment->recaptcha("recaptcha")->label("")->id("g-recaptcha");
- }
- }
-
- static function register_add_form($form) {
- if (module::get_var("recaptcha", "public_key")) {
- $form->register_user->recaptcha("recaptcha")->label("")->id("g-recaptcha");
+ // If we haven't returned yet, then add the captcha at the end of the form
+ $form->recaptcha("recaptcha")->label("")->id("g-recaptcha");
}
}
diff --git a/modules/slideshow/helpers/slideshow_event.php b/modules/slideshow/helpers/slideshow_event.php
index 6cb5d019..167fa7ff 100644
--- a/modules/slideshow/helpers/slideshow_event.php
+++ b/modules/slideshow/helpers/slideshow_event.php
@@ -27,8 +27,7 @@ class slideshow_event_Core {
static function module_change($changes) {
if (!module::is_active("rss") || in_array("rss", $changes->deactivate)) {
site_status::warning(
- t("The Slideshow module requires the RSS module. " .
- "<a href=\"%url\">Activate the RSS module now</a>",
+ t("The Slideshow module requires the RSS module. <a href=\"%url\">Activate the RSS module now</a>",
array("url" => html::mark_clean(url::site("admin/modules")))),
"slideshow_needs_rss");
} else {