diff --git a/3.0/modules/albumpassword/controllers/albumpassword.php b/3.0/modules/albumpassword/controllers/albumpassword.php
new file mode 100644
index 00000000..b014b749
--- /dev/null
+++ b/3.0/modules/albumpassword/controllers/albumpassword.php
@@ -0,0 +1,152 @@
+form = $this->_get_password_form($id);
+ print $view;
+ }
+
+ public function login() {
+ // Display prompt to allow visitors to use their passwords.
+
+ // Create the page.
+ $view = new View("loginpassword.html");
+ $view->form = $this->_get_login_form();
+ print $view;
+ }
+
+ public function remove($id) {
+ // Remove a password from an album
+
+ // Make sure user has view/edit privileges for this item
+ $item = ORM::factory("item", $id);
+ access::required("view", $item);
+ access::required("edit", $item);
+
+ // Check for and delete the password.
+ $existing_password = ORM::factory("items_albumpassword")->where("album_id", "=", $id)->find();
+ if ($existing_password->loaded()) {
+ db::build()->delete("items_albumpasswords")->where("album_id", "=", $id)->execute();
+ message::success(t("Password Removed."));
+ }
+
+ // Redirect the user back to the album.
+ url::redirect(url::abs_site("albums/" . $id));
+ }
+
+ public function savepassword() {
+ // Save a newly assigned password.
+
+ // Prevent Cross Site Request Forgery
+ access::verify_csrf();
+
+ // Convert submitted data to local variables.
+ $album_id = Input::instance()->post("item_id");
+ $album_password = Input::instance()->post("assignpassword_password");
+
+ // Check for, and remove, any existing passwords.
+ $existing_password = ORM::factory("items_albumpassword")->where("album_id", "=", $album_id)->find();
+ if ($existing_password->loaded()) {
+ db::build()->delete("items_albumpasswords")->where("album_id", "=", $album_id)->execute();
+ }
+
+ // Save the new password.
+ $new_password = ORM::factory("items_albumpassword");
+ $new_password->album_id = $album_id;
+ $new_password->password = $album_password;
+ $new_password->save();
+
+ // Display a success message and close the dialog.
+ message::success(t("Password saved."));
+ json::reply(array("result" => "success"));
+ }
+
+ public function logout() {
+ // Delete a stored password cookie.
+ cookie::delete("g3_albumpassword");
+ url::redirect(url::abs_site("albums/1"));
+ }
+
+ public function checkpassword() {
+ // Check that a password is valid, then store in a browser cookie.
+
+ // Prevent Cross Site Request Forgery
+ access::verify_csrf();
+
+ // Convert submitted data to local variables.
+ $album_password = Input::instance()->post("albumpassword_password");
+
+ // See if the submitted password matches any in the database.
+ $existing_password = ORM::factory("items_albumpassword")
+ ->where("password", "=", $album_password)
+ ->find_all();
+
+ if (count($existing_password) > 0) {
+ // If the password if valid, then store it, and display a success message.
+ // If not, close the dialog and display a rejected message.
+ cookie::set("g3_albumpassword", $album_password);
+ message::success(t("Password Accepted."));
+ json::reply(array("result" => "success"));
+ } else {
+ message::error(t("Password Rejected."));
+ json::reply(array("result" => "success"));
+ }
+ }
+
+ private function _get_password_form($id) {
+ // Generate a form for assigning a new password.
+ $form = new Forge("albumpassword/savepassword", "", "post",
+ array("id" => "g-assign-password-form"));
+ $assignpassword_group = $form->group("Enter Password")
+ ->label(t("Enter Password:"));
+ $assignpassword_group->hidden("item_id")->value($id);
+ $assignpassword_group->input("assignpassword_password")
+ ->id('assignpassword_password')
+ ->label(t("Password:"));
+ $form->submit("save_password")->value(t("Save"));
+
+ // Return the newly generated form.
+ return $form;
+ }
+
+ private function _get_login_form($id) {
+ // Generate a form for allowing visitors to enter in their passwords.
+ $form = new Forge("albumpassword/checkpassword", "", "post",
+ array("id" => "g-login-password-form"));
+ $assignpassword_group = $form->group("Enter Password")
+ ->label(t("Enter Password:"));
+ $assignpassword_group->input("albumpassword_password")
+ ->id('albumpassword_password')
+ ->label(t("Password:"));
+ $form->submit("login_password")->value(t("Login"));
+
+ // Return the newly generated form.
+ return $form;
+ }
+}
diff --git a/3.0/modules/albumpassword/helpers/MY_item.php b/3.0/modules/albumpassword/helpers/MY_item.php
new file mode 100644
index 00000000..3e09a64d
--- /dev/null
+++ b/3.0/modules/albumpassword/helpers/MY_item.php
@@ -0,0 +1,53 @@
+where("id", "=", $model->id)->find();
+
+ // Figure out if the user can access this album.
+ $deny_access = false;
+ $existing_password = ORM::factory("items_albumpassword")->where("album_id", "=", $model->id)->find();
+ if ($existing_password->loaded()) {
+ if ((cookie::get("g3_albumpassword") != $existing_password->password) &&
+ (identity::active_user()->id != $album_item->owner_id))
+ $deny_access = true;
+ }
+
+ // set access::DENY if necessary.
+ if ($deny_access == true) {
+ $view_restrictions = array();
+ if (!identity::active_user()->admin) {
+ foreach (identity::group_ids_for_active_user() as $id) {
+ $view_restrictions[] = array("items.view_$id", "=", access::DENY);
+ }
+ }
+ }
+ if (count($view_restrictions)) {
+ $model->and_open()->merge_or_where($view_restrictions)->close();
+ }
+
+ return $model;
+ }
+}
diff --git a/3.0/modules/albumpassword/helpers/albumpassword_event.php b/3.0/modules/albumpassword/helpers/albumpassword_event.php
new file mode 100644
index 00000000..dd83c4d9
--- /dev/null
+++ b/3.0/modules/albumpassword/helpers/albumpassword_event.php
@@ -0,0 +1,104 @@
+item()) {
+ return;
+ }
+ $item = $theme->item();
+
+ // If there isn't currently a password stored in the cookie,
+ // then display the enter password link.
+ if (cookie::get("g3_albumpassword") == "") {
+ $menu->append(Menu::factory("dialog")
+ ->id("albumpassword_login")
+ ->css_id("g-album-password-login")
+ ->url(url::site("albumpassword/login"))
+ ->label(t("Enter password")));
+ } else {
+ // If a password has been entered already
+ // display the log out link, and links to the protected albums
+ $menu->append(Menu::factory("submenu")
+ ->id("albumpassword_protected")
+ ->css_id("g-album-password-protected")
+ ->label(t("Protected albums")));
+ $menu->get("albumpassword_protected")
+ ->append(Menu::factory("link")
+ ->id("albumpassword_logout")
+ ->css_id("g-album-password-logout")
+ ->url(url::site("albumpassword/logout"))
+ ->label(t("Clear password")));
+ $existing_password = ORM::factory("items_albumpassword")
+ ->where("password", "=", cookie::get("g3_albumpassword"))
+ ->find_all();
+ if (count($existing_password) > 0) {
+ $counter = 0;
+ while ($counter < count($existing_password)) {
+ $item_album = ORM::factory("item")->where("id", "=", $existing_password[$counter]->album_id)->find();
+ $menu->get("albumpassword_protected")
+ ->append(Menu::factory("link")
+ ->id("albumpassword_album" . $counter)
+ ->label(html::purify($item_album->title))
+ ->css_id("g-album-password-album" . $counter)
+ ->url(url::abs_site("{$item_album->type}s/{$item_album->id}")));
+ $counter++;
+ }
+ }
+ }
+
+ // If this is an album without a password, display a link for assigning one.
+ // If this is an album with a password, display a link to remove it.
+ if ($item->is_album()) {
+ if ((access::can("view", $item)) && (access::can("edit", $item))) {
+ $existing_password = ORM::factory("items_albumpassword")
+ ->where("album_id", "=", $item->id)
+ ->find_all();
+ if (count($existing_password) > 0) {
+ $menu->get("options_menu")
+ ->append(Menu::factory("link")
+ ->id("albumpassword_remove")
+ ->label(t("Remove password"))
+ ->css_id("g-album-password-remove")
+ ->url(url::site("albumpassword/remove/" . $item->id)));
+ } else {
+ $menu->get("options_menu")
+ ->append(Menu::factory("dialog")
+ ->id("albumpassword_assign")
+ ->label(t("Assign password"))
+ ->css_id("g-album-password-assign")
+ ->url(url::site("albumpassword/assign/" . $item->id)));
+ }
+ }
+ }
+ }
+
+ static function item_deleted($item) {
+ // If an album is deleted, remove any associated passwords.
+ $existingPasswords = ORM::factory("items_albumpassword")
+ ->where("album_id", "=", $item->id)
+ ->find_all();
+ if (count($existingPasswords) > 0) {
+ db::build()->delete("items_albumpassword")->where("album_id", "=", $item->id)->execute();
+ }
+ }
+}
diff --git a/3.0/modules/albumpassword/helpers/albumpassword_installer.php b/3.0/modules/albumpassword/helpers/albumpassword_installer.php
new file mode 100644
index 00000000..e59faffb
--- /dev/null
+++ b/3.0/modules/albumpassword/helpers/albumpassword_installer.php
@@ -0,0 +1,42 @@
+query("CREATE TABLE IF NOT EXISTS {items_albumpasswords} (
+ `id` int(9) NOT NULL auto_increment,
+ `album_id` int(9) NOT NULL,
+ `password` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`))
+ DEFAULT CHARSET=utf8;");
+
+
+ // Set the module's version number.
+ module::set_version("albumpassword", 1);
+ }
+
+ static function uninstall() {
+ // Delete the password table before uninstalling.
+ $db = Database::instance();
+ $db->query("DROP TABLE IF EXISTS {items_albumpassword};");
+ module::delete("albumpassword");
+ }
+}
diff --git a/3.0/modules/albumpassword/models/items_albumpassword.php b/3.0/modules/albumpassword/models/items_albumpassword.php
new file mode 100644
index 00000000..bf0b7341
--- /dev/null
+++ b/3.0/modules/albumpassword/models/items_albumpassword.php
@@ -0,0 +1,21 @@
+
+ function ajaxify_login_reset_form() {
+ $("#g-login form").ajaxForm({
+ dataType: "json",
+ success: function(data) {
+ if (data.form) {
+ $("#g-login form").replaceWith(data.form);
+ ajaxify_login_reset_form();
+ }
+ if (data.result == "success") {
+ $("#g-dialog").dialog("close");
+ window.location.reload();
+ }
+ }
+ });
+ };
+
+
diff --git a/3.0/modules/albumpassword/views/loginpassword.html.php b/3.0/modules/albumpassword/views/loginpassword.html.php
new file mode 100644
index 00000000..9ebb47fd
--- /dev/null
+++ b/3.0/modules/albumpassword/views/loginpassword.html.php
@@ -0,0 +1,24 @@
+
+
diff --git a/3.0/modules/editcreation/css/editcreation.css b/3.0/modules/editcreation/css/editcreation.css
old mode 100644
new mode 100755
index 6894018c..084dfd8d
--- a/3.0/modules/editcreation/css/editcreation.css
+++ b/3.0/modules/editcreation/css/editcreation.css
@@ -1,3 +1,8 @@
-select {
+form#g-edit-album-form fieldset ul li input,
+form#g-edit-album-form fieldset ul li select,
+form#g-edit-album-form fieldset ul li textarea,
+form#g-edit-photo-form fieldset ul li input,
+form#g-edit-photo-form fieldset ul li select,
+form#g-edit-photo-form fieldset ul li textarea {
display: inline;
}
diff --git a/3.0/modules/editcreation/module.info b/3.0/modules/editcreation/module.info
old mode 100644
new mode 100755
index 9f5a8c01..3b98c089
--- a/3.0/modules/editcreation/module.info
+++ b/3.0/modules/editcreation/module.info
@@ -1,3 +1,3 @@
name = "Edit Creation"
description = "Manually edit the creation date of an item in Gallery."
-version = 1
+version = 2
diff --git a/3.0/modules/hide/controllers/admin_hide.php b/3.0/modules/hide/controllers/admin_hide.php
new file mode 100644
index 00000000..a613d550
--- /dev/null
+++ b/3.0/modules/hide/controllers/admin_hide.php
@@ -0,0 +1,52 @@
+page_title = t("Item hiding settings");
+ $view->content = new View("admin_hide.html");
+ $view->content->form = $this->_get_admin_form();
+ $view->content->title = $view->page_title;
+ print $view;
+ }
+
+ public function save() {
+ access::verify_csrf();
+ $form = $this->_get_admin_form();
+ $form->validate();
+ module::set_var("hide", "access_permissions",
+ $form->access_permissions->value);
+ message::success(t("Item hiding settings updated"));
+ url::redirect("admin/hide");
+ }
+
+ private function _get_admin_form() {
+ $form = new Forge("admin/hide/save", "", "post",
+ array("id" => "g-hide-admin-form"));
+ $form->dropdown("access_permissions")
+ ->label(t("Who can see hidden items?"))
+ ->options(hide::get_groups_as_dropdown_options())
+ ->selected(module::get_var("hide", "access_permissions"));
+ $form->submit("save")->value(t("Save"));
+ return $form;
+ }
+}
diff --git a/3.0/modules/hide/controllers/display.php b/3.0/modules/hide/controllers/display.php
new file mode 100644
index 00000000..6dd2dfed
--- /dev/null
+++ b/3.0/modules/hide/controllers/display.php
@@ -0,0 +1,70 @@
+%title item", array("title" => html::purify($item->title)));
+
+ $this->_check_hide_permissions($item);
+ hide::hide($item);
+ message::success($msg);
+
+ json::reply(array("result" => "success", "reload" => 1));
+ }
+
+ /**
+ * Allows the given item to be displayed again.
+ *
+ * @param int $id the item id
+ */
+ public function show($id) {
+ $item = model_cache::get("item", $id);
+ $msg = t("Displayed %title item", array("title" => html::purify($item->title)));
+
+ $this->_check_hide_permissions($item);
+ hide::show($item);
+ message::success($msg);
+
+ json::reply(array("result" => "success", "reload" => 1));
+ }
+
+ /**
+ * Checks whether the given object can be hidden by the active user.
+ *
+ * @param Item_Model $item the item
+ */
+ private function _check_hide_permissions(Item_Model $item) {
+ access::verify_csrf();
+
+ access::required("view", $item);
+ access::required("edit", $item);
+
+ if (!hide::can_hide()) {
+ access::forbidden();
+ }
+ }
+}
diff --git a/3.0/modules/hide/helpers/MY_item.php b/3.0/modules/hide/helpers/MY_item.php
new file mode 100644
index 00000000..da546c39
--- /dev/null
+++ b/3.0/modules/hide/helpers/MY_item.php
@@ -0,0 +1,34 @@
+join("hidden_items", "items.id", "hidden_items.item_id", "LEFT OUTER")
+ ->and_where("hidden_items.item_id", "IS", NULL);
+ }
+
+ return $model;
+ }
+}
diff --git a/3.0/modules/hide/helpers/hide.php b/3.0/modules/hide/helpers/hide.php
new file mode 100644
index 00000000..38bd50fc
--- /dev/null
+++ b/3.0/modules/hide/helpers/hide.php
@@ -0,0 +1,147 @@
+select_list("id", "name");
+ return array_merge(array(self::NONE => t("Nobody")), $options);
+ }
+
+ /**
+ * Returns the hidden_item model related to the given item.
+ *
+ * There is an attempt to fetch the model from the database through the model
+ * cache. If it fails, a new unsaved model is created.
+ *
+ * @param Item_Model $item the item
+ * @return Hidden_Item_Model the related hidden_item model
+ */
+ static function get_hidden_item_model(Item_Model $item) {
+ try {
+ $model = model_cache::get("item", $id);
+ }
+ catch (Exception $e) {
+ $model = ORM::factory("hidden_item");
+ $model->item_id = $item->id;
+ $model->validate();
+ }
+
+ return $model;
+ }
+
+ /**
+ * Returns whether the given item can be hidden.
+ *
+ * @param Item_Model $item the item
+ * @return bool
+ */
+ static function can_be_hidden(Item_Model $item) {
+ if (empty($item)) {
+ return false;
+ }
+
+ if ($item->type == "album") {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns whether the given item is hidden.
+ *
+ * @param Item_Model $item the item
+ * @return bool
+ */
+ static function is_hidden(Item_Model $item) {
+ $model = self::get_hidden_item_model($item);
+ return $model->loaded();
+ }
+
+ /**
+ * Hides the given item.
+ *
+ * @param Item_Model $item the item to hide
+ */
+ static function hide(Item_Model $item) {
+ if (self::is_hidden($item)) {
+ return;
+ }
+
+ $hidden_item = self::get_hidden_item_model($item);
+ $hidden_item->save();
+ }
+
+ /**
+ * Allows the given item to be displayed again.
+ *
+ * @param Item_Model $item the item to display
+ */
+ static function show(Item_Model $item) {
+ if (!self::is_hidden($item)) {
+ return;
+ }
+
+ $hidden_item = self::get_hidden_item_model($item);
+ $hidden_item->delete();
+ }
+
+ /**
+ * Returns whether the active user can view hidden items.
+ *
+ * @return bool
+ */
+ static function can_view_hidden_items() {
+ if (identity::active_user()->admin) {
+ return true;
+ }
+
+ $authorized_group = module::get_var("hide", "access_permissions");
+ if (in_array($authorized_group, identity::group_ids_for_active_user())) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns whether the active user can hide any items.
+ *
+ * @return bool
+ */
+ static function can_hide() {
+ if (identity::active_user()->admin) {
+ return true;
+ }
+
+ return false;
+ }
+}
diff --git a/3.0/modules/hide/helpers/hide_event.php b/3.0/modules/hide/helpers/hide_event.php
new file mode 100644
index 00000000..da5962fa
--- /dev/null
+++ b/3.0/modules/hide/helpers/hide_event.php
@@ -0,0 +1,88 @@
+get("settings_menu")
+ ->append(Menu::factory("link")
+ ->label(t("Item hiding"))
+ ->url(url::site("admin/hide")));
+ }
+
+ static function site_menu($menu, $theme, $item_css_selector) {
+ $item = $theme->item();
+
+ if (!empty($item) && hide::can_be_hidden($item) && hide::can_hide($item)) {
+ $csrf = access::csrf_token();
+ $link = self::_get_hide_link_data($item);
+
+ $menu->get("options_menu")
+ ->append(Menu::factory("ajax_link")
+ ->label($link["text"])
+ ->ajax_handler("function(data) { window.location.reload() }")
+ ->url(url::site("display/".$link["action"]."/$item->id?csrf=$csrf")));
+ }
+ }
+
+ static function context_menu($menu, $theme, $item, $thumb_css_selector) {
+ if (hide::can_be_hidden($item) && hide::can_hide($item)) {
+ $csrf = access::csrf_token();
+ $link = self::_get_hide_link_data($item);
+
+ $menu
+ ->get("options_menu")
+ ->append(Menu::factory("ajax_link")
+ ->label($link["text"])
+ ->ajax_handler("function(data) { window.location.reload() }")
+ ->url(url::site("display/".$link["action"]."/$item->id?csrf=$csrf")));
+ }
+ }
+
+ /**
+ * Returns some data used to create a hide link.
+ *
+ * @param Item_Model $item the related item
+ * @return array
+ */
+ private static function _get_hide_link_data(Item_Model $item) {
+ if (hide::is_hidden($item)) {
+ $action = "show";
+ $action_label = "Show";
+ }
+ else {
+ $action = "hide";
+ $action_label = "Hide";
+ }
+
+ switch ($item->type) {
+ case "movie":
+ $item_type_label = "movie";
+ break;
+ default:
+ $item_type_label = "photo";
+ break;
+ }
+
+ $label = t("$action_label this $item_type_label");
+
+ return array("text" => $label, "action" => $action);
+ }
+}
diff --git a/3.0/modules/hide/helpers/hide_installer.php b/3.0/modules/hide/helpers/hide_installer.php
new file mode 100644
index 00000000..9bac8cbc
--- /dev/null
+++ b/3.0/modules/hide/helpers/hide_installer.php
@@ -0,0 +1,38 @@
+query("CREATE TABLE IF NOT EXISTS {hidden_items} (
+ `item_id` int(9) NOT NULL,
+ PRIMARY KEY (`item_id`))
+ DEFAULT CHARSET=utf8;");
+
+ module::set_var("hide", "access_permissions", hide::NONE);
+ module::set_version("hide", 1);
+ }
+
+ static function uninstall() {
+ $db = Database::instance();
+ $db->query("DROP TABLE IF EXISTS {hidden_items};");
+ }
+}
diff --git a/3.0/modules/hide/models/hidden_item.php b/3.0/modules/hide/models/hidden_item.php
new file mode 100644
index 00000000..a779a2dc
--- /dev/null
+++ b/3.0/modules/hide/models/hidden_item.php
@@ -0,0 +1,24 @@
+
+
+
= $title ?>
+
+ = $form ?>
+
+
diff --git a/3.0/modules/itemchecksum/controllers/itemchecksum.php b/3.0/modules/itemchecksum/controllers/itemchecksum.php
index 01cbfc4f..7123350d 100644
--- a/3.0/modules/itemchecksum/controllers/itemchecksum.php
+++ b/3.0/modules/itemchecksum/controllers/itemchecksum.php
@@ -86,4 +86,4 @@ class itemchecksum_Controller extends Controller {
print "0";
}
}
-}
\ No newline at end of file
+}
diff --git a/3.0/modules/itemchecksum/helpers/item_itemchecksums_rest.php b/3.0/modules/itemchecksum/helpers/item_itemchecksums_rest.php
new file mode 100644
index 00000000..3f109f66
--- /dev/null
+++ b/3.0/modules/itemchecksum/helpers/item_itemchecksums_rest.php
@@ -0,0 +1,42 @@
+url);
+ access::required("view", $item);
+
+ $checksums = array(rest::url("itemchecksum_md5", $item), rest::url("itemchecksum_sha1", $item));
+ return array(
+ "url" => $request->url,
+ "members" => $checksums);
+ }
+
+ static function resolve($id) {
+ $item = ORM::factory("item", $id);
+ if (!access::can("view", $item)) {
+ throw new Kohana_404_Exception();
+ }
+ return $item;
+ }
+
+ static function url($item) {
+ return url::abs_site("rest/item_checksums/{$item->id}");
+ }
+}
diff --git a/3.0/modules/itemchecksum/helpers/itemchecksum_md5_rest.php b/3.0/modules/itemchecksum/helpers/itemchecksum_md5_rest.php
new file mode 100644
index 00000000..4cd6dfa9
--- /dev/null
+++ b/3.0/modules/itemchecksum/helpers/itemchecksum_md5_rest.php
@@ -0,0 +1,55 @@
+url);
+ access::required("view", $item);
+ $checksum = "0";
+ // If the KeepOriginal module is active, check for/use the
+ // original image instead of the gallery edited version.
+ if (module::is_active("keeporiginal")) {
+ $original_image = VARPATH . "original/" . str_replace(VARPATH . "albums/", "", $item->file_path());
+ if ($item->is_photo() && file_exists($original_image)) {
+ $checksum = md5_file($original_image);
+ } else {
+ $checksum = md5_file($item->file_path());
+ }
+ } else {
+ $checksum = md5_file($item->file_path());
+ }
+ $data = array("checksum" => $checksum);
+
+ return array(
+ "url" => $request->url,
+ "entity" => $data);
+ }
+
+ static function resolve($id) {
+ $item = ORM::factory("item", $id);
+ if (!access::can("view", $item)) {
+ throw new Kohana_404_Exception();
+ }
+ return $item;
+ }
+
+ static function url($item) {
+ return url::abs_site("rest/itemchecksum_md5/{$item->id}");
+ }
+}
diff --git a/3.0/modules/itemchecksum/helpers/itemchecksum_rest.php b/3.0/modules/itemchecksum/helpers/itemchecksum_rest.php
new file mode 100644
index 00000000..a1404eaa
--- /dev/null
+++ b/3.0/modules/itemchecksum/helpers/itemchecksum_rest.php
@@ -0,0 +1,41 @@
+ array(
+ "url" => rest::url("item_itemchecksums", $resource)));
+ }
+ }
+
+ static function resolve($id) {
+ $item = ORM::factory("item", $id);
+ if (!access::can("view", $item)) {
+ throw new Kohana_404_Exception();
+ }
+ return $item;
+ }
+
+ static function url($item) {
+ return url::abs_site("rest/itemchecksum/{$item->id}");
+ }
+}
diff --git a/3.0/modules/itemchecksum/helpers/itemchecksum_sha1_rest.php b/3.0/modules/itemchecksum/helpers/itemchecksum_sha1_rest.php
new file mode 100644
index 00000000..9bb5f118
--- /dev/null
+++ b/3.0/modules/itemchecksum/helpers/itemchecksum_sha1_rest.php
@@ -0,0 +1,55 @@
+url);
+ access::required("view", $item);
+ $checksum = "0";
+ // If the KeepOriginal module is active, check for/use the
+ // original image instead of the gallery edited version.
+ if (module::is_active("keeporiginal")) {
+ $original_image = VARPATH . "original/" . str_replace(VARPATH . "albums/", "", $item->file_path());
+ if ($item->is_photo() && file_exists($original_image)) {
+ $checksum = sha1_file($original_image);
+ } else {
+ $checksum = sha1_file($item->file_path());
+ }
+ } else {
+ $checksum = sha1_file($item->file_path());
+ }
+ $data = array("checksum" => $checksum);
+
+ return array(
+ "url" => $request->url,
+ "entity" => $data);
+ }
+
+ static function resolve($id) {
+ $item = ORM::factory("item", $id);
+ if (!access::can("view", $item)) {
+ throw new Kohana_404_Exception();
+ }
+ return $item;
+ }
+
+ static function url($item) {
+ return url::abs_site("rest/itemchecksum_sha1/{$item->id}");
+ }
+}
diff --git a/3.0/modules/language_flags/css/language_flags_sidebar.css b/3.0/modules/language_flags/css/language_flags_sidebar.css
index e532f895..3e6d776b 100644
--- a/3.0/modules/language_flags/css/language_flags_sidebar.css
+++ b/3.0/modules/language_flags/css/language_flags_sidebar.css
@@ -16,13 +16,13 @@ vertical-align: middle;
width: 40px;
display: block;
margin-left: auto;
-margin-right: auto }
+margin-right: auto;
}
#g-selected-language-flag img {
width: 48px;
display: block;
margin-left: auto;
-margin-right: auto }
+margin-right: auto;
}
diff --git a/3.0/modules/metadescription/views/metadescription_block.html.php b/3.0/modules/metadescription/views/metadescription_block.html.php
index 7836beb3..2464b6f1 100644
--- a/3.0/modules/metadescription/views/metadescription_block.html.php
+++ b/3.0/modules/metadescription/views/metadescription_block.html.php
@@ -41,5 +41,5 @@
// Limit Description to 150 characters.
$metaDescription = substr($metaDescription, 0,150);
?>
-
-
+
+
diff --git a/3.0/modules/moduleupdates/controllers/admin_moduleupdates.php b/3.0/modules/moduleupdates/controllers/admin_moduleupdates.php
old mode 100644
new mode 100755
index 1a7a2508..921cf535
--- a/3.0/modules/moduleupdates/controllers/admin_moduleupdates.php
+++ b/3.0/modules/moduleupdates/controllers/admin_moduleupdates.php
@@ -197,7 +197,7 @@ class Admin_Moduleupdates_Controller extends Admin_Controller {
if ($devDebug == true){
if ($file == null) {
try {
- $file = fopen ("http://github.com/brentil/gallery3-contrib/raw/master/modules/".$module_name."/module.info", "r");
+ $file = fopen ("http://github.com/brentil/gallery3-contrib/raw/master/3.0/modules/".$module_name."/module.info", "r");
if ($file != null) {
$server = '(brentil)';
}
@@ -224,7 +224,7 @@ class Admin_Moduleupdates_Controller extends Admin_Controller {
//Check the Gallery3 Community Contributions GitHub
if ($file == null) {
try {
- $file = fopen ("http://github.com/gallery/gallery3-contrib/raw/master/modules/".$module_name."/module.info", "r");
+ $file = fopen ("http://github.com/gallery/gallery3-contrib/raw/master/3.0/modules/".$module_name."/module.info", "r");
if ($file != null) {
$server = '(G3CC)';
}
diff --git a/3.0/modules/moduleupdates/module.info b/3.0/modules/moduleupdates/module.info
old mode 100644
new mode 100755
index 8fad54ff..cf43770b
--- a/3.0/modules/moduleupdates/module.info
+++ b/3.0/modules/moduleupdates/module.info
@@ -1,3 +1,3 @@
name = "Module Updates"
description = "Compares your installed module version against the ones stored in the GitHub."
-version = 2
+version = 3
diff --git a/3.0/modules/square_thumbs/helpers/square_thumbs_graphics.php b/3.0/modules/square_thumbs/helpers/square_thumbs_graphics.php
new file mode 100644
index 00000000..a20355a9
--- /dev/null
+++ b/3.0/modules/square_thumbs/helpers/square_thumbs_graphics.php
@@ -0,0 +1,42 @@
+crop(min($dims[0], $dims[1]), min($dims[0], $dims[1]))
+ ->quality(module::get_var("gallery", "image_quality"))
+ ->save($output_file);
+ }
+}
diff --git a/3.0/modules/square_thumbs/helpers/square_thumbs_installer.php b/3.0/modules/square_thumbs/helpers/square_thumbs_installer.php
new file mode 100644
index 00000000..5ae45bfc
--- /dev/null
+++ b/3.0/modules/square_thumbs/helpers/square_thumbs_installer.php
@@ -0,0 +1,28 @@
+form = $this->_get_password_form($id);
+ print $view;
+ }
+
+ public function login() {
+ // Display prompt to allow visitors to use their passwords.
+
+ // Create the page.
+ $view = new View("loginpassword.html");
+ $view->form = $this->_get_login_form();
+ print $view;
+ }
+
+ public function remove($id) {
+ // Remove a password from an album
+
+ // Make sure user has view/edit privileges for this item
+ $item = ORM::factory("item", $id);
+ access::required("view", $item);
+ access::required("edit", $item);
+
+ // Check for and delete the password.
+ $existing_password = ORM::factory("items_albumpassword")->where("album_id", "=", $id)->find();
+ if ($existing_password->loaded()) {
+ db::build()->delete("items_albumpasswords")->where("album_id", "=", $id)->execute();
+ message::success(t("Password Removed."));
+ }
+
+ // Redirect the user back to the album.
+ url::redirect(url::abs_site("albums/" . $id));
+ }
+
+ public function savepassword() {
+ // Save a newly assigned password.
+
+ // Prevent Cross Site Request Forgery
+ access::verify_csrf();
+
+ // Convert submitted data to local variables.
+ $album_id = Input::instance()->post("item_id");
+ $album_password = Input::instance()->post("assignpassword_password");
+
+ // Check for, and remove, any existing passwords.
+ $existing_password = ORM::factory("items_albumpassword")->where("album_id", "=", $album_id)->find();
+ if ($existing_password->loaded()) {
+ db::build()->delete("items_albumpasswords")->where("album_id", "=", $album_id)->execute();
+ }
+
+ // Save the new password.
+ $new_password = ORM::factory("items_albumpassword");
+ $new_password->album_id = $album_id;
+ $new_password->password = $album_password;
+ $new_password->save();
+
+ // Display a success message and close the dialog.
+ message::success(t("Password saved."));
+ json::reply(array("result" => "success"));
+ }
+
+ public function logout() {
+ // Delete a stored password cookie.
+ cookie::delete("g3_albumpassword");
+ url::redirect(url::abs_site("albums/1"));
+ }
+
+ public function checkpassword() {
+ // Check that a password is valid, then store in a browser cookie.
+
+ // Prevent Cross Site Request Forgery
+ access::verify_csrf();
+
+ // Convert submitted data to local variables.
+ $album_password = Input::instance()->post("albumpassword_password");
+
+ // See if the submitted password matches any in the database.
+ $existing_password = ORM::factory("items_albumpassword")
+ ->where("password", "=", $album_password)
+ ->find_all();
+
+ if (count($existing_password) > 0) {
+ // If the password if valid, then store it, and display a success message.
+ // If not, close the dialog and display a rejected message.
+ cookie::set("g3_albumpassword", $album_password);
+ message::success(t("Password Accepted."));
+ json::reply(array("result" => "success"));
+ } else {
+ message::error(t("Password Rejected."));
+ json::reply(array("result" => "success"));
+ }
+ }
+
+ private function _get_password_form($id) {
+ // Generate a form for assigning a new password.
+ $form = new Forge("albumpassword/savepassword", "", "post",
+ array("id" => "g-assign-password-form"));
+ $assignpassword_group = $form->group("Enter Password")
+ ->label(t("Enter Password:"));
+ $assignpassword_group->hidden("item_id")->value($id);
+ $assignpassword_group->input("assignpassword_password")
+ ->id('assignpassword_password')
+ ->label(t("Password:"));
+ $form->submit("save_password")->value(t("Save"));
+
+ // Return the newly generated form.
+ return $form;
+ }
+
+ private function _get_login_form($id) {
+ // Generate a form for allowing visitors to enter in their passwords.
+ $form = new Forge("albumpassword/checkpassword", "", "post",
+ array("id" => "g-login-password-form"));
+ $assignpassword_group = $form->group("Enter Password")
+ ->label(t("Enter Password:"));
+ $assignpassword_group->input("albumpassword_password")
+ ->id('albumpassword_password')
+ ->label(t("Password:"));
+ $form->submit("login_password")->value(t("Login"));
+
+ // Return the newly generated form.
+ return $form;
+ }
+}
diff --git a/3.1/modules/albumpassword/helpers/MY_item.php b/3.1/modules/albumpassword/helpers/MY_item.php
new file mode 100644
index 00000000..3e09a64d
--- /dev/null
+++ b/3.1/modules/albumpassword/helpers/MY_item.php
@@ -0,0 +1,53 @@
+where("id", "=", $model->id)->find();
+
+ // Figure out if the user can access this album.
+ $deny_access = false;
+ $existing_password = ORM::factory("items_albumpassword")->where("album_id", "=", $model->id)->find();
+ if ($existing_password->loaded()) {
+ if ((cookie::get("g3_albumpassword") != $existing_password->password) &&
+ (identity::active_user()->id != $album_item->owner_id))
+ $deny_access = true;
+ }
+
+ // set access::DENY if necessary.
+ if ($deny_access == true) {
+ $view_restrictions = array();
+ if (!identity::active_user()->admin) {
+ foreach (identity::group_ids_for_active_user() as $id) {
+ $view_restrictions[] = array("items.view_$id", "=", access::DENY);
+ }
+ }
+ }
+ if (count($view_restrictions)) {
+ $model->and_open()->merge_or_where($view_restrictions)->close();
+ }
+
+ return $model;
+ }
+}
diff --git a/3.1/modules/albumpassword/helpers/albumpassword_event.php b/3.1/modules/albumpassword/helpers/albumpassword_event.php
new file mode 100644
index 00000000..dd83c4d9
--- /dev/null
+++ b/3.1/modules/albumpassword/helpers/albumpassword_event.php
@@ -0,0 +1,104 @@
+item()) {
+ return;
+ }
+ $item = $theme->item();
+
+ // If there isn't currently a password stored in the cookie,
+ // then display the enter password link.
+ if (cookie::get("g3_albumpassword") == "") {
+ $menu->append(Menu::factory("dialog")
+ ->id("albumpassword_login")
+ ->css_id("g-album-password-login")
+ ->url(url::site("albumpassword/login"))
+ ->label(t("Enter password")));
+ } else {
+ // If a password has been entered already
+ // display the log out link, and links to the protected albums
+ $menu->append(Menu::factory("submenu")
+ ->id("albumpassword_protected")
+ ->css_id("g-album-password-protected")
+ ->label(t("Protected albums")));
+ $menu->get("albumpassword_protected")
+ ->append(Menu::factory("link")
+ ->id("albumpassword_logout")
+ ->css_id("g-album-password-logout")
+ ->url(url::site("albumpassword/logout"))
+ ->label(t("Clear password")));
+ $existing_password = ORM::factory("items_albumpassword")
+ ->where("password", "=", cookie::get("g3_albumpassword"))
+ ->find_all();
+ if (count($existing_password) > 0) {
+ $counter = 0;
+ while ($counter < count($existing_password)) {
+ $item_album = ORM::factory("item")->where("id", "=", $existing_password[$counter]->album_id)->find();
+ $menu->get("albumpassword_protected")
+ ->append(Menu::factory("link")
+ ->id("albumpassword_album" . $counter)
+ ->label(html::purify($item_album->title))
+ ->css_id("g-album-password-album" . $counter)
+ ->url(url::abs_site("{$item_album->type}s/{$item_album->id}")));
+ $counter++;
+ }
+ }
+ }
+
+ // If this is an album without a password, display a link for assigning one.
+ // If this is an album with a password, display a link to remove it.
+ if ($item->is_album()) {
+ if ((access::can("view", $item)) && (access::can("edit", $item))) {
+ $existing_password = ORM::factory("items_albumpassword")
+ ->where("album_id", "=", $item->id)
+ ->find_all();
+ if (count($existing_password) > 0) {
+ $menu->get("options_menu")
+ ->append(Menu::factory("link")
+ ->id("albumpassword_remove")
+ ->label(t("Remove password"))
+ ->css_id("g-album-password-remove")
+ ->url(url::site("albumpassword/remove/" . $item->id)));
+ } else {
+ $menu->get("options_menu")
+ ->append(Menu::factory("dialog")
+ ->id("albumpassword_assign")
+ ->label(t("Assign password"))
+ ->css_id("g-album-password-assign")
+ ->url(url::site("albumpassword/assign/" . $item->id)));
+ }
+ }
+ }
+ }
+
+ static function item_deleted($item) {
+ // If an album is deleted, remove any associated passwords.
+ $existingPasswords = ORM::factory("items_albumpassword")
+ ->where("album_id", "=", $item->id)
+ ->find_all();
+ if (count($existingPasswords) > 0) {
+ db::build()->delete("items_albumpassword")->where("album_id", "=", $item->id)->execute();
+ }
+ }
+}
diff --git a/3.1/modules/albumpassword/helpers/albumpassword_installer.php b/3.1/modules/albumpassword/helpers/albumpassword_installer.php
new file mode 100644
index 00000000..e59faffb
--- /dev/null
+++ b/3.1/modules/albumpassword/helpers/albumpassword_installer.php
@@ -0,0 +1,42 @@
+query("CREATE TABLE IF NOT EXISTS {items_albumpasswords} (
+ `id` int(9) NOT NULL auto_increment,
+ `album_id` int(9) NOT NULL,
+ `password` varchar(64) NOT NULL,
+ PRIMARY KEY (`id`))
+ DEFAULT CHARSET=utf8;");
+
+
+ // Set the module's version number.
+ module::set_version("albumpassword", 1);
+ }
+
+ static function uninstall() {
+ // Delete the password table before uninstalling.
+ $db = Database::instance();
+ $db->query("DROP TABLE IF EXISTS {items_albumpassword};");
+ module::delete("albumpassword");
+ }
+}
diff --git a/3.1/modules/albumpassword/models/items_albumpassword.php b/3.1/modules/albumpassword/models/items_albumpassword.php
new file mode 100644
index 00000000..bf0b7341
--- /dev/null
+++ b/3.1/modules/albumpassword/models/items_albumpassword.php
@@ -0,0 +1,21 @@
+
+ function ajaxify_login_reset_form() {
+ $("#g-login form").ajaxForm({
+ dataType: "json",
+ success: function(data) {
+ if (data.form) {
+ $("#g-login form").replaceWith(data.form);
+ ajaxify_login_reset_form();
+ }
+ if (data.result == "success") {
+ $("#g-dialog").dialog("close");
+ window.location.reload();
+ }
+ }
+ });
+ };
+
+
diff --git a/3.1/modules/albumpassword/views/loginpassword.html.php b/3.1/modules/albumpassword/views/loginpassword.html.php
new file mode 100644
index 00000000..9ebb47fd
--- /dev/null
+++ b/3.1/modules/albumpassword/views/loginpassword.html.php
@@ -0,0 +1,24 @@
+
+
diff --git a/3.1/modules/editcreation/css/editcreation.css b/3.1/modules/editcreation/css/editcreation.css
old mode 100644
new mode 100755
index 6894018c..084dfd8d
--- a/3.1/modules/editcreation/css/editcreation.css
+++ b/3.1/modules/editcreation/css/editcreation.css
@@ -1,3 +1,8 @@
-select {
+form#g-edit-album-form fieldset ul li input,
+form#g-edit-album-form fieldset ul li select,
+form#g-edit-album-form fieldset ul li textarea,
+form#g-edit-photo-form fieldset ul li input,
+form#g-edit-photo-form fieldset ul li select,
+form#g-edit-photo-form fieldset ul li textarea {
display: inline;
}
diff --git a/3.1/modules/editcreation/module.info b/3.1/modules/editcreation/module.info
old mode 100644
new mode 100755
index 9f5a8c01..3b98c089
--- a/3.1/modules/editcreation/module.info
+++ b/3.1/modules/editcreation/module.info
@@ -1,3 +1,3 @@
name = "Edit Creation"
description = "Manually edit the creation date of an item in Gallery."
-version = 1
+version = 2
diff --git a/3.1/modules/itemchecksum/controllers/itemchecksum.php b/3.1/modules/itemchecksum/controllers/itemchecksum.php
index 01cbfc4f..7123350d 100644
--- a/3.1/modules/itemchecksum/controllers/itemchecksum.php
+++ b/3.1/modules/itemchecksum/controllers/itemchecksum.php
@@ -86,4 +86,4 @@ class itemchecksum_Controller extends Controller {
print "0";
}
}
-}
\ No newline at end of file
+}
diff --git a/3.1/modules/itemchecksum/helpers/item_itemchecksums_rest.php b/3.1/modules/itemchecksum/helpers/item_itemchecksums_rest.php
new file mode 100644
index 00000000..3f109f66
--- /dev/null
+++ b/3.1/modules/itemchecksum/helpers/item_itemchecksums_rest.php
@@ -0,0 +1,42 @@
+url);
+ access::required("view", $item);
+
+ $checksums = array(rest::url("itemchecksum_md5", $item), rest::url("itemchecksum_sha1", $item));
+ return array(
+ "url" => $request->url,
+ "members" => $checksums);
+ }
+
+ static function resolve($id) {
+ $item = ORM::factory("item", $id);
+ if (!access::can("view", $item)) {
+ throw new Kohana_404_Exception();
+ }
+ return $item;
+ }
+
+ static function url($item) {
+ return url::abs_site("rest/item_checksums/{$item->id}");
+ }
+}
diff --git a/3.1/modules/itemchecksum/helpers/itemchecksum_md5_rest.php b/3.1/modules/itemchecksum/helpers/itemchecksum_md5_rest.php
new file mode 100644
index 00000000..4cd6dfa9
--- /dev/null
+++ b/3.1/modules/itemchecksum/helpers/itemchecksum_md5_rest.php
@@ -0,0 +1,55 @@
+url);
+ access::required("view", $item);
+ $checksum = "0";
+ // If the KeepOriginal module is active, check for/use the
+ // original image instead of the gallery edited version.
+ if (module::is_active("keeporiginal")) {
+ $original_image = VARPATH . "original/" . str_replace(VARPATH . "albums/", "", $item->file_path());
+ if ($item->is_photo() && file_exists($original_image)) {
+ $checksum = md5_file($original_image);
+ } else {
+ $checksum = md5_file($item->file_path());
+ }
+ } else {
+ $checksum = md5_file($item->file_path());
+ }
+ $data = array("checksum" => $checksum);
+
+ return array(
+ "url" => $request->url,
+ "entity" => $data);
+ }
+
+ static function resolve($id) {
+ $item = ORM::factory("item", $id);
+ if (!access::can("view", $item)) {
+ throw new Kohana_404_Exception();
+ }
+ return $item;
+ }
+
+ static function url($item) {
+ return url::abs_site("rest/itemchecksum_md5/{$item->id}");
+ }
+}
diff --git a/3.1/modules/itemchecksum/helpers/itemchecksum_rest.php b/3.1/modules/itemchecksum/helpers/itemchecksum_rest.php
new file mode 100644
index 00000000..a1404eaa
--- /dev/null
+++ b/3.1/modules/itemchecksum/helpers/itemchecksum_rest.php
@@ -0,0 +1,41 @@
+ array(
+ "url" => rest::url("item_itemchecksums", $resource)));
+ }
+ }
+
+ static function resolve($id) {
+ $item = ORM::factory("item", $id);
+ if (!access::can("view", $item)) {
+ throw new Kohana_404_Exception();
+ }
+ return $item;
+ }
+
+ static function url($item) {
+ return url::abs_site("rest/itemchecksum/{$item->id}");
+ }
+}
diff --git a/3.1/modules/itemchecksum/helpers/itemchecksum_sha1_rest.php b/3.1/modules/itemchecksum/helpers/itemchecksum_sha1_rest.php
new file mode 100644
index 00000000..9bb5f118
--- /dev/null
+++ b/3.1/modules/itemchecksum/helpers/itemchecksum_sha1_rest.php
@@ -0,0 +1,55 @@
+url);
+ access::required("view", $item);
+ $checksum = "0";
+ // If the KeepOriginal module is active, check for/use the
+ // original image instead of the gallery edited version.
+ if (module::is_active("keeporiginal")) {
+ $original_image = VARPATH . "original/" . str_replace(VARPATH . "albums/", "", $item->file_path());
+ if ($item->is_photo() && file_exists($original_image)) {
+ $checksum = sha1_file($original_image);
+ } else {
+ $checksum = sha1_file($item->file_path());
+ }
+ } else {
+ $checksum = sha1_file($item->file_path());
+ }
+ $data = array("checksum" => $checksum);
+
+ return array(
+ "url" => $request->url,
+ "entity" => $data);
+ }
+
+ static function resolve($id) {
+ $item = ORM::factory("item", $id);
+ if (!access::can("view", $item)) {
+ throw new Kohana_404_Exception();
+ }
+ return $item;
+ }
+
+ static function url($item) {
+ return url::abs_site("rest/itemchecksum_sha1/{$item->id}");
+ }
+}
diff --git a/3.1/modules/language_flags/css/language_flags_sidebar.css b/3.1/modules/language_flags/css/language_flags_sidebar.css
index e532f895..3e6d776b 100644
--- a/3.1/modules/language_flags/css/language_flags_sidebar.css
+++ b/3.1/modules/language_flags/css/language_flags_sidebar.css
@@ -16,13 +16,13 @@ vertical-align: middle;
width: 40px;
display: block;
margin-left: auto;
-margin-right: auto }
+margin-right: auto;
}
#g-selected-language-flag img {
width: 48px;
display: block;
margin-left: auto;
-margin-right: auto }
+margin-right: auto;
}
diff --git a/3.1/modules/max_size/helpers/max_size_event.php b/3.1/modules/max_size/helpers/max_size_event.php
new file mode 100644
index 00000000..2fd1d1c5
--- /dev/null
+++ b/3.1/modules/max_size/helpers/max_size_event.php
@@ -0,0 +1,37 @@
+is_photo()) {
+ list ($width, $height, $mime_type) = photo::get_file_metadata($item->data_file);
+ if ($width > $max_size || $height > $max_size) {
+ $tempnam = tempnam(TMPPATH, "size");
+ $tmpfile = $tempnam . "." . pathinfo($item->data_file, PATHINFO_EXTENSION);
+ gallery_graphics::resize(
+ $item->data_file, $tmpfile,
+ array("width" => $max_size, "height" => $max_size, "master" => Image::AUTO));
+ rename($tmpfile, $item->data_file);
+ unlink($tempnam);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/3.1/modules/max_size/helpers/max_size_installer.php b/3.1/modules/max_size/helpers/max_size_installer.php
new file mode 100644
index 00000000..bd268b9c
--- /dev/null
+++ b/3.1/modules/max_size/helpers/max_size_installer.php
@@ -0,0 +1,25 @@
+
-
-
+
+
diff --git a/3.1/modules/moduleupdates/controllers/admin_moduleupdates.php b/3.1/modules/moduleupdates/controllers/admin_moduleupdates.php
old mode 100644
new mode 100755
index 1a7a2508..ee74c90d
--- a/3.1/modules/moduleupdates/controllers/admin_moduleupdates.php
+++ b/3.1/modules/moduleupdates/controllers/admin_moduleupdates.php
@@ -197,7 +197,7 @@ class Admin_Moduleupdates_Controller extends Admin_Controller {
if ($devDebug == true){
if ($file == null) {
try {
- $file = fopen ("http://github.com/brentil/gallery3-contrib/raw/master/modules/".$module_name."/module.info", "r");
+ $file = fopen ("http://github.com/brentil/gallery3-contrib/raw/master/3.1/modules/".$module_name."/module.info", "r");
if ($file != null) {
$server = '(brentil)';
}
@@ -224,7 +224,7 @@ class Admin_Moduleupdates_Controller extends Admin_Controller {
//Check the Gallery3 Community Contributions GitHub
if ($file == null) {
try {
- $file = fopen ("http://github.com/gallery/gallery3-contrib/raw/master/modules/".$module_name."/module.info", "r");
+ $file = fopen ("http://github.com/gallery/gallery3-contrib/raw/master/3.1/modules/".$module_name."/module.info", "r");
if ($file != null) {
$server = '(G3CC)';
}
diff --git a/3.1/modules/moduleupdates/module.info b/3.1/modules/moduleupdates/module.info
old mode 100644
new mode 100755
index 8fad54ff..cf43770b
--- a/3.1/modules/moduleupdates/module.info
+++ b/3.1/modules/moduleupdates/module.info
@@ -1,3 +1,3 @@
name = "Module Updates"
description = "Compares your installed module version against the ones stored in the GitHub."
-version = 2
+version = 3
diff --git a/3.1/modules/square_thumbs/helpers/square_thumbs_graphics.php b/3.1/modules/square_thumbs/helpers/square_thumbs_graphics.php
new file mode 100644
index 00000000..a20355a9
--- /dev/null
+++ b/3.1/modules/square_thumbs/helpers/square_thumbs_graphics.php
@@ -0,0 +1,42 @@
+crop(min($dims[0], $dims[1]), min($dims[0], $dims[1]))
+ ->quality(module::get_var("gallery", "image_quality"))
+ ->save($output_file);
+ }
+}
diff --git a/3.1/modules/square_thumbs/helpers/square_thumbs_installer.php b/3.1/modules/square_thumbs/helpers/square_thumbs_installer.php
new file mode 100644
index 00000000..5ae45bfc
--- /dev/null
+++ b/3.1/modules/square_thumbs/helpers/square_thumbs_installer.php
@@ -0,0 +1,28 @@
+