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 @@ + +
+

+
+ +
+
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 @@ +