From aa3fa8858e3cc51280ab87313855172d5e3ea514 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Wed, 26 Jan 2011 19:50:12 -0700 Subject: [PATCH 01/39] Removed ui-icon-link css class for bitly site_menu item, it's not used. --- 3.1/modules/bitly/helpers/bitly_event.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3.1/modules/bitly/helpers/bitly_event.php b/3.1/modules/bitly/helpers/bitly_event.php index 62caf6b7..1efeb264 100644 --- a/3.1/modules/bitly/helpers/bitly_event.php +++ b/3.1/modules/bitly/helpers/bitly_event.php @@ -36,7 +36,7 @@ class bitly_event_Core { ->label(t("Shorten link with bit.ly")) ->url(url::site("bitly/shorten/{$theme->item->id}?csrf={$theme->csrf}")) ->css_id("g-bitly-shorten") - ->css_class("g-bitly-shorten ui-icon-link")); + ->css_class("g-bitly-shorten")); } } From 1cd2de2154a952eb01eb584e2a0c4e502880cb51 Mon Sep 17 00:00:00 2001 From: rWatcher Date: Mon, 31 Jan 2011 14:21:04 -0500 Subject: [PATCH 02/39] Added warning message that TagsInAlbum requires Tags. --- .../tagsinalbum/helpers/tagsinalbum_event.php | 37 +++++++++++++++++++ .../helpers/tagsinalbum_installer.php | 36 ++++++++++++++++++ .../tagsinalbum/helpers/tagsinalbum_event.php | 37 +++++++++++++++++++ .../helpers/tagsinalbum_installer.php | 36 ++++++++++++++++++ 4 files changed, 146 insertions(+) create mode 100644 3.0/modules/tagsinalbum/helpers/tagsinalbum_event.php create mode 100644 3.0/modules/tagsinalbum/helpers/tagsinalbum_installer.php create mode 100644 3.1/modules/tagsinalbum/helpers/tagsinalbum_event.php create mode 100644 3.1/modules/tagsinalbum/helpers/tagsinalbum_installer.php diff --git a/3.0/modules/tagsinalbum/helpers/tagsinalbum_event.php b/3.0/modules/tagsinalbum/helpers/tagsinalbum_event.php new file mode 100644 index 00000000..fe7339ae --- /dev/null +++ b/3.0/modules/tagsinalbum/helpers/tagsinalbum_event.php @@ -0,0 +1,37 @@ +module == "tag") { + $data->messages["warn"][] = t("The Tags In Album module requires the Tags module."); + } + } + + static function module_change($changes) { + if (!module::is_active("tag") || in_array("tag", $changes->deactivate)) { + site_status::warning( + t("The Tags In Album module requires the Tags module. Activate the Tags module now", + array("url" => html::mark_clean(url::site("admin/modules")))), + "tagsinalbum_needs_tag"); + } else { + site_status::clear("tagsinalbum_needs_tag"); + } + } +} diff --git a/3.0/modules/tagsinalbum/helpers/tagsinalbum_installer.php b/3.0/modules/tagsinalbum/helpers/tagsinalbum_installer.php new file mode 100644 index 00000000..4357ab87 --- /dev/null +++ b/3.0/modules/tagsinalbum/helpers/tagsinalbum_installer.php @@ -0,0 +1,36 @@ +module == "tag") { + $data->messages["warn"][] = t("The Tags In Album module requires the Tags module."); + } + } + + static function module_change($changes) { + if (!module::is_active("tag") || in_array("tag", $changes->deactivate)) { + site_status::warning( + t("The Tags In Album module requires the Tags module. Activate the Tags module now", + array("url" => html::mark_clean(url::site("admin/modules")))), + "tagsinalbum_needs_tag"); + } else { + site_status::clear("tagsinalbum_needs_tag"); + } + } +} diff --git a/3.1/modules/tagsinalbum/helpers/tagsinalbum_installer.php b/3.1/modules/tagsinalbum/helpers/tagsinalbum_installer.php new file mode 100644 index 00000000..4357ab87 --- /dev/null +++ b/3.1/modules/tagsinalbum/helpers/tagsinalbum_installer.php @@ -0,0 +1,36 @@ + Date: Wed, 2 Feb 2011 14:32:54 -0500 Subject: [PATCH 03/39] Create a new table to track all protected files. --- .../controllers/albumpassword.php | 37 +++++++++-- .../albumpassword/helpers/MY_access.php | 27 +++----- 3.0/modules/albumpassword/helpers/MY_item.php | 19 ++++-- .../helpers/albumpassword_event.php | 61 +++++++++++++++---- .../helpers/albumpassword_installer.php | 34 ++++++++--- .../models/albumpassword_idcache.php | 21 +++++++ 3.0/modules/albumpassword/module.info | 2 +- .../controllers/albumpassword.php | 37 +++++++++-- .../albumpassword/helpers/MY_access.php | 27 +++----- 3.1/modules/albumpassword/helpers/MY_item.php | 19 ++++-- .../helpers/albumpassword_event.php | 61 +++++++++++++++---- .../helpers/albumpassword_installer.php | 34 ++++++++--- .../models/albumpassword_idcache.php | 21 +++++++ 3.1/modules/albumpassword/module.info | 2 +- 14 files changed, 306 insertions(+), 96 deletions(-) create mode 100644 3.0/modules/albumpassword/models/albumpassword_idcache.php create mode 100644 3.1/modules/albumpassword/models/albumpassword_idcache.php diff --git a/3.0/modules/albumpassword/controllers/albumpassword.php b/3.0/modules/albumpassword/controllers/albumpassword.php index e2336f47..dfedcd2c 100644 --- a/3.0/modules/albumpassword/controllers/albumpassword.php +++ b/3.0/modules/albumpassword/controllers/albumpassword.php @@ -49,9 +49,12 @@ class albumpassword_Controller extends Controller { 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()) { + // Check for and delete the password and any cached ids assigned to it. + $existing_password = ORM::factory("items_albumpassword")->where("album_id", "=", $id)->find_all(); + if (count($existing_password) > 0) { + foreach ($existing_password as $one_password) { + db::build()->delete("albumpassword_idcaches")->where("password_id", "=", $one_password->id)->execute(); + } db::build()->delete("items_albumpasswords")->where("album_id", "=", $id)->execute(); message::success(t("Password Removed.")); } @@ -70,9 +73,12 @@ class albumpassword_Controller extends Controller { $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()) { + // Check for, and remove, any existing passwords and cached ids. + $existing_password = ORM::factory("items_albumpassword")->where("album_id", "=", $album_id)->find_all(); + if (count($existing_password) > 0) { + foreach ($existing_password as $one_password) { + db::build()->delete("albumpassword_idcaches")->where("password_id", "=", $one_password->id)->execute(); + } db::build()->delete("items_albumpasswords")->where("album_id", "=", $album_id)->execute(); } @@ -82,6 +88,25 @@ class albumpassword_Controller extends Controller { $new_password->password = $album_password; $new_password->save(); + // Add the album to the id cache. + $cached_album = ORM::factory("albumpassword_idcache"); + $cached_album->password_id = $new_password->id; + $cached_album->item_id = $album_id; + $cached_album->save(); + + // Check for any sub-items within the album, add all of them to the id cache. + $items = ORM::factory("item", $album_id) + ->viewable() + ->descendants(); + if (count($items) > 0) { + foreach ($items as $one_item) { + $cached_item = ORM::factory("albumpassword_idcache"); + $cached_item->password_id = $new_password->id; + $cached_item->item_id = $one_item->id; + $cached_item->save(); + } + } + // Display a success message and close the dialog. message::success(t("Password saved.")); print "\n\n\n\n\n"; diff --git a/3.0/modules/albumpassword/helpers/MY_access.php b/3.0/modules/albumpassword/helpers/MY_access.php index 339426b6..38b48fc3 100644 --- a/3.0/modules/albumpassword/helpers/MY_access.php +++ b/3.0/modules/albumpassword/helpers/MY_access.php @@ -21,38 +21,29 @@ class access extends access_Core { static function required($perm_name, $item) { // Original code from the required function in modules/gallery/helpers/access.php. - if (!self::can($perm_name, $item)) { + if (!access::can($perm_name, $item)) { if ($perm_name == "view") { // Treat as if the item didn't exist, don't leak any information. throw new Kohana_404_Exception(); } else { - self::forbidden(); + access::forbidden(); } // Begin rWatcher modifications. // Throw a 404 error when a user attempts to access a protected item, - // unless the password has been provided, or the user is the item's owner. + // unless the password has been provided, or the user is the item's owner. } elseif (module::get_var("albumpassword", "hideonly") == false) { - $album_item = ""; - do { - if ($album_item == "") { - if ($item->is_album()) { - $album_item = $item; - } else { - $album_item = $item->parent(); - } - } else { - $album_item = $album_item->parent(); - } - - $existing_password = ORM::factory("items_albumpassword")->where("album_id", "=", $album_item->id)->find(); + $item_protected = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->id)->find_all(); + if (count($item_protected) > 0) { + $existing_password = ORM::factory("items_albumpassword")->where("id", "=", $item_protected[0]->password_id)->find(); if ($existing_password->loaded()) { if ((cookie::get("g3_albumpassword") != $existing_password->password) && - (identity::active_user()->id != $album_item->owner_id)) { + (identity::active_user()->id != $item->owner_id) && + (!identity::active_user()->admin)) { throw new Kohana_404_Exception(); } } - } while ($album_item->parent_id > 0); + } } } } diff --git a/3.0/modules/albumpassword/helpers/MY_item.php b/3.0/modules/albumpassword/helpers/MY_item.php index 1af98cdc..e26b65c6 100644 --- a/3.0/modules/albumpassword/helpers/MY_item.php +++ b/3.0/modules/albumpassword/helpers/MY_item.php @@ -29,10 +29,21 @@ class item extends item_Core { // If not, hide whatever is restricted by an album password // that the current user is not the owner of. if (!identity::active_user()->admin) { - $model->and_open()->join("items_albumpasswords", "items.id", "items_albumpasswords.album_id", "LEFT OUTER") - ->and_where("items_albumpasswords.album_id", "IS", NULL) - ->or_where("items_albumpasswords.password", "=", cookie::get("g3_albumpassword")) - ->or_where("items.owner_id", "=", identity::active_user()->id)->close(); + + // Display items that are not in idcaches. + $model->and_open()->join("albumpassword_idcaches", "items.id", "albumpassword_idcaches.item_id", "LEFT OUTER") + ->and_where("albumpassword_idcaches.item_id", "IS", NULL); + + // ... Unless their password id corresponds with a valid password. + $existing_password = ORM::factory("items_albumpassword")->where("password", "=", cookie::get("g3_albumpassword"))->find_all(); + if (count($existing_password) > 0) { + foreach ($existing_password as $one_password) { + $model->or_where("albumpassword_idcaches.password_id", "=", $one_password->id); + } + } + + // Or the current user is the owner of the item. + $model->or_where("items.owner_id", "=", identity::active_user()->id)->close(); } return $model; diff --git a/3.0/modules/albumpassword/helpers/albumpassword_event.php b/3.0/modules/albumpassword/helpers/albumpassword_event.php index 72d549a4..cd981af1 100644 --- a/3.0/modules/albumpassword/helpers/albumpassword_event.php +++ b/3.0/modules/albumpassword/helpers/albumpassword_event.php @@ -81,27 +81,64 @@ class albumpassword_event_Core { ->css_id("g-album-password-remove") ->url(url::site("albumpassword/remove/" . $item->id))); } elseif ($item->id != 1) { - $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))); + $passworded_subitems = ORM::factory("item", $item->id) + ->and_open()->join("albumpassword_idcaches", "items.id", "albumpassword_idcaches.item_id", "LEFT OUTER") + ->where("albumpassword_idcaches.item_id", "IS NOT", NULL)->close() + ->descendants(); + + $existing_cacheditem = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->id)->find_all(); + if ((count($existing_cacheditem) == 0) && count($passworded_subitems) == 0) { + $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(); + // Check for and delete the password and any cached ids assigned to it. + $existing_password = ORM::factory("items_albumpassword")->where("album_id", "=", $item->id)->find_all(); + if (count($existing_password) > 0) { + foreach ($existing_password as $one_password) { + db::build()->delete("albumpassword_idcaches")->where("password_id", "=", $one_password->id)->execute(); + } + db::build()->delete("items_albumpasswords")->where("album_id", "=", $item->id)->execute(); + message::success(t("Password Removed.")); + } else { + db::build()->delete("albumpassword_idcaches")->where("item_id", "=", $item->id)->execute(); } } + static function item_created($item) { + // Check for any already existing password on parent album(s), if found, generate cache data for the new item. + $existing_password = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->parent_id)->find_all(); + if (count($existing_password) > 0) { + $new_cachedid = ORM::factory("albumpassword_idcache"); + $new_cachedid->password_id = $existing_password[0]->password_id; + $new_cachedid->item_id = $item->id; + $new_cachedid->save(); + } + } + + static function item_moved($item, $old_parent) { + // Delete any existing cache data. + db::build()->delete("albumpassword_idcaches")->where("item_id", "=", $item->id)->execute(); + + // Check for a password on the new parent, generate cache data if necessary. + $existing_password = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->parent_id)->find_all(); + if (count($existing_password) > 0) { + $new_cachedid = ORM::factory("albumpassword_idcache"); + $new_cachedid->password_id = $existing_password[0]->password_id; + $new_cachedid->item_id = $item->id; + $new_cachedid->save(); + } + } + static function admin_menu($menu, $theme) { // Add a link to the Album Password admin page to the Content menu. $menu->get("settings_menu") diff --git a/3.0/modules/albumpassword/helpers/albumpassword_installer.php b/3.0/modules/albumpassword/helpers/albumpassword_installer.php index 075f252a..39b7ccee 100644 --- a/3.0/modules/albumpassword/helpers/albumpassword_installer.php +++ b/3.0/modules/albumpassword/helpers/albumpassword_installer.php @@ -28,25 +28,45 @@ class albumpassword_installer { PRIMARY KEY (`id`)) DEFAULT CHARSET=utf8;"); + // Create a table to store a list of all protected items in. + $db->query("CREATE TABLE IF NOT EXISTS {albumpassword_idcaches} ( + `id` int(9) NOT NULL auto_increment, + `password_id` int(9) NOT NULL, + `item_id` int(9) NOT NULL, + PRIMARY KEY (`id`)) + DEFAULT CHARSET=utf8;"); + // Set the default value for this module's behavior. module::set_var("albumpassword", "hideonly", true); // Set the module's version number. - module::set_version("albumpassword", 2); + module::set_version("albumpassword", 3); } static function upgrade($version) { - // Set the default value for this module's behavior. - module::set_var("albumpassword", "hideonly", true); - - // Set the module's version number. - module::set_version("albumpassword", 2); + $db = Database::instance(); + if ($version == 1) { + // Set the default value for this module's behavior. + module::set_var("albumpassword", "hideonly", true); + module::set_version("albumpassword", $version = 2); + } + if ($version == 2) { + // Create a table to store a list of all protected items in. + $db->query("CREATE TABLE IF NOT EXISTS {albumpassword_idcaches} ( + `id` int(9) NOT NULL auto_increment, + `password_id` int(9) NOT NULL, + `item_id` int(9) NOT NULL, + PRIMARY KEY (`id`)) + DEFAULT CHARSET=utf8;"); + module::set_version("albumpassword", $version = 3); + } } static function uninstall() { // Delete the password table before uninstalling. $db = Database::instance(); - $db->query("DROP TABLE IF EXISTS {items_albumpassword};"); + $db->query("DROP TABLE IF EXISTS {items_albumpasswords};"); + $db->query("DROP TABLE IF EXISTS {albumpassword_idcaches};"); module::delete("albumpassword"); } } diff --git a/3.0/modules/albumpassword/models/albumpassword_idcache.php b/3.0/modules/albumpassword/models/albumpassword_idcache.php new file mode 100644 index 00000000..e3d80667 --- /dev/null +++ b/3.0/modules/albumpassword/models/albumpassword_idcache.php @@ -0,0 +1,21 @@ +where("album_id", "=", $id)->find(); - if ($existing_password->loaded()) { + // Check for and delete the password and any cached ids assigned to it. + $existing_password = ORM::factory("items_albumpassword")->where("album_id", "=", $id)->find_all(); + if (count($existing_password) > 0) { + foreach ($existing_password as $one_password) { + db::build()->delete("albumpassword_idcaches")->where("password_id", "=", $one_password->id)->execute(); + } db::build()->delete("items_albumpasswords")->where("album_id", "=", $id)->execute(); message::success(t("Password Removed.")); } @@ -70,9 +73,12 @@ class albumpassword_Controller extends Controller { $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()) { + // Check for, and remove, any existing passwords and cached ids. + $existing_password = ORM::factory("items_albumpassword")->where("album_id", "=", $album_id)->find_all(); + if (count($existing_password) > 0) { + foreach ($existing_password as $one_password) { + db::build()->delete("albumpassword_idcaches")->where("password_id", "=", $one_password->id)->execute(); + } db::build()->delete("items_albumpasswords")->where("album_id", "=", $album_id)->execute(); } @@ -82,6 +88,25 @@ class albumpassword_Controller extends Controller { $new_password->password = $album_password; $new_password->save(); + // Add the album to the id cache. + $cached_album = ORM::factory("albumpassword_idcache"); + $cached_album->password_id = $new_password->id; + $cached_album->item_id = $album_id; + $cached_album->save(); + + // Check for any sub-items within the album, add all of them to the id cache. + $items = ORM::factory("item", $album_id) + ->viewable() + ->descendants(); + if (count($items) > 0) { + foreach ($items as $one_item) { + $cached_item = ORM::factory("albumpassword_idcache"); + $cached_item->password_id = $new_password->id; + $cached_item->item_id = $one_item->id; + $cached_item->save(); + } + } + // Display a success message and close the dialog. message::success(t("Password saved.")); print "\n\n\n\n\n"; diff --git a/3.1/modules/albumpassword/helpers/MY_access.php b/3.1/modules/albumpassword/helpers/MY_access.php index 339426b6..38b48fc3 100644 --- a/3.1/modules/albumpassword/helpers/MY_access.php +++ b/3.1/modules/albumpassword/helpers/MY_access.php @@ -21,38 +21,29 @@ class access extends access_Core { static function required($perm_name, $item) { // Original code from the required function in modules/gallery/helpers/access.php. - if (!self::can($perm_name, $item)) { + if (!access::can($perm_name, $item)) { if ($perm_name == "view") { // Treat as if the item didn't exist, don't leak any information. throw new Kohana_404_Exception(); } else { - self::forbidden(); + access::forbidden(); } // Begin rWatcher modifications. // Throw a 404 error when a user attempts to access a protected item, - // unless the password has been provided, or the user is the item's owner. + // unless the password has been provided, or the user is the item's owner. } elseif (module::get_var("albumpassword", "hideonly") == false) { - $album_item = ""; - do { - if ($album_item == "") { - if ($item->is_album()) { - $album_item = $item; - } else { - $album_item = $item->parent(); - } - } else { - $album_item = $album_item->parent(); - } - - $existing_password = ORM::factory("items_albumpassword")->where("album_id", "=", $album_item->id)->find(); + $item_protected = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->id)->find_all(); + if (count($item_protected) > 0) { + $existing_password = ORM::factory("items_albumpassword")->where("id", "=", $item_protected[0]->password_id)->find(); if ($existing_password->loaded()) { if ((cookie::get("g3_albumpassword") != $existing_password->password) && - (identity::active_user()->id != $album_item->owner_id)) { + (identity::active_user()->id != $item->owner_id) && + (!identity::active_user()->admin)) { throw new Kohana_404_Exception(); } } - } while ($album_item->parent_id > 0); + } } } } diff --git a/3.1/modules/albumpassword/helpers/MY_item.php b/3.1/modules/albumpassword/helpers/MY_item.php index 1af98cdc..e26b65c6 100644 --- a/3.1/modules/albumpassword/helpers/MY_item.php +++ b/3.1/modules/albumpassword/helpers/MY_item.php @@ -29,10 +29,21 @@ class item extends item_Core { // If not, hide whatever is restricted by an album password // that the current user is not the owner of. if (!identity::active_user()->admin) { - $model->and_open()->join("items_albumpasswords", "items.id", "items_albumpasswords.album_id", "LEFT OUTER") - ->and_where("items_albumpasswords.album_id", "IS", NULL) - ->or_where("items_albumpasswords.password", "=", cookie::get("g3_albumpassword")) - ->or_where("items.owner_id", "=", identity::active_user()->id)->close(); + + // Display items that are not in idcaches. + $model->and_open()->join("albumpassword_idcaches", "items.id", "albumpassword_idcaches.item_id", "LEFT OUTER") + ->and_where("albumpassword_idcaches.item_id", "IS", NULL); + + // ... Unless their password id corresponds with a valid password. + $existing_password = ORM::factory("items_albumpassword")->where("password", "=", cookie::get("g3_albumpassword"))->find_all(); + if (count($existing_password) > 0) { + foreach ($existing_password as $one_password) { + $model->or_where("albumpassword_idcaches.password_id", "=", $one_password->id); + } + } + + // Or the current user is the owner of the item. + $model->or_where("items.owner_id", "=", identity::active_user()->id)->close(); } return $model; diff --git a/3.1/modules/albumpassword/helpers/albumpassword_event.php b/3.1/modules/albumpassword/helpers/albumpassword_event.php index 72d549a4..cd981af1 100644 --- a/3.1/modules/albumpassword/helpers/albumpassword_event.php +++ b/3.1/modules/albumpassword/helpers/albumpassword_event.php @@ -81,27 +81,64 @@ class albumpassword_event_Core { ->css_id("g-album-password-remove") ->url(url::site("albumpassword/remove/" . $item->id))); } elseif ($item->id != 1) { - $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))); + $passworded_subitems = ORM::factory("item", $item->id) + ->and_open()->join("albumpassword_idcaches", "items.id", "albumpassword_idcaches.item_id", "LEFT OUTER") + ->where("albumpassword_idcaches.item_id", "IS NOT", NULL)->close() + ->descendants(); + + $existing_cacheditem = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->id)->find_all(); + if ((count($existing_cacheditem) == 0) && count($passworded_subitems) == 0) { + $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(); + // Check for and delete the password and any cached ids assigned to it. + $existing_password = ORM::factory("items_albumpassword")->where("album_id", "=", $item->id)->find_all(); + if (count($existing_password) > 0) { + foreach ($existing_password as $one_password) { + db::build()->delete("albumpassword_idcaches")->where("password_id", "=", $one_password->id)->execute(); + } + db::build()->delete("items_albumpasswords")->where("album_id", "=", $item->id)->execute(); + message::success(t("Password Removed.")); + } else { + db::build()->delete("albumpassword_idcaches")->where("item_id", "=", $item->id)->execute(); } } + static function item_created($item) { + // Check for any already existing password on parent album(s), if found, generate cache data for the new item. + $existing_password = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->parent_id)->find_all(); + if (count($existing_password) > 0) { + $new_cachedid = ORM::factory("albumpassword_idcache"); + $new_cachedid->password_id = $existing_password[0]->password_id; + $new_cachedid->item_id = $item->id; + $new_cachedid->save(); + } + } + + static function item_moved($item, $old_parent) { + // Delete any existing cache data. + db::build()->delete("albumpassword_idcaches")->where("item_id", "=", $item->id)->execute(); + + // Check for a password on the new parent, generate cache data if necessary. + $existing_password = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->parent_id)->find_all(); + if (count($existing_password) > 0) { + $new_cachedid = ORM::factory("albumpassword_idcache"); + $new_cachedid->password_id = $existing_password[0]->password_id; + $new_cachedid->item_id = $item->id; + $new_cachedid->save(); + } + } + static function admin_menu($menu, $theme) { // Add a link to the Album Password admin page to the Content menu. $menu->get("settings_menu") diff --git a/3.1/modules/albumpassword/helpers/albumpassword_installer.php b/3.1/modules/albumpassword/helpers/albumpassword_installer.php index 075f252a..39b7ccee 100644 --- a/3.1/modules/albumpassword/helpers/albumpassword_installer.php +++ b/3.1/modules/albumpassword/helpers/albumpassword_installer.php @@ -28,25 +28,45 @@ class albumpassword_installer { PRIMARY KEY (`id`)) DEFAULT CHARSET=utf8;"); + // Create a table to store a list of all protected items in. + $db->query("CREATE TABLE IF NOT EXISTS {albumpassword_idcaches} ( + `id` int(9) NOT NULL auto_increment, + `password_id` int(9) NOT NULL, + `item_id` int(9) NOT NULL, + PRIMARY KEY (`id`)) + DEFAULT CHARSET=utf8;"); + // Set the default value for this module's behavior. module::set_var("albumpassword", "hideonly", true); // Set the module's version number. - module::set_version("albumpassword", 2); + module::set_version("albumpassword", 3); } static function upgrade($version) { - // Set the default value for this module's behavior. - module::set_var("albumpassword", "hideonly", true); - - // Set the module's version number. - module::set_version("albumpassword", 2); + $db = Database::instance(); + if ($version == 1) { + // Set the default value for this module's behavior. + module::set_var("albumpassword", "hideonly", true); + module::set_version("albumpassword", $version = 2); + } + if ($version == 2) { + // Create a table to store a list of all protected items in. + $db->query("CREATE TABLE IF NOT EXISTS {albumpassword_idcaches} ( + `id` int(9) NOT NULL auto_increment, + `password_id` int(9) NOT NULL, + `item_id` int(9) NOT NULL, + PRIMARY KEY (`id`)) + DEFAULT CHARSET=utf8;"); + module::set_version("albumpassword", $version = 3); + } } static function uninstall() { // Delete the password table before uninstalling. $db = Database::instance(); - $db->query("DROP TABLE IF EXISTS {items_albumpassword};"); + $db->query("DROP TABLE IF EXISTS {items_albumpasswords};"); + $db->query("DROP TABLE IF EXISTS {albumpassword_idcaches};"); module::delete("albumpassword"); } } diff --git a/3.1/modules/albumpassword/models/albumpassword_idcache.php b/3.1/modules/albumpassword/models/albumpassword_idcache.php new file mode 100644 index 00000000..e3d80667 --- /dev/null +++ b/3.1/modules/albumpassword/models/albumpassword_idcache.php @@ -0,0 +1,21 @@ + Date: Wed, 2 Feb 2011 23:51:32 -0500 Subject: [PATCH 04/39] Minor Bugfixes. --- 3.0/modules/exif_gps/controllers/exif_gps.php | 2 +- 3.0/modules/exif_gps/helpers/exif_gps_task.php | 10 ++++++---- 3.1/modules/exif_gps/controllers/exif_gps.php | 2 +- 3.1/modules/exif_gps/helpers/exif_gps_task.php | 10 ++++++---- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/3.0/modules/exif_gps/controllers/exif_gps.php b/3.0/modules/exif_gps/controllers/exif_gps.php index be6e92ac..52b94b9d 100644 --- a/3.0/modules/exif_gps/controllers/exif_gps.php +++ b/3.0/modules/exif_gps/controllers/exif_gps.php @@ -32,7 +32,7 @@ class EXIF_GPS_Controller extends Controller { ->order_by("exif_coordinates.latitude", "ASC") ->descendants(); $curr_album = ORM::factory("item")->where("id", "=", $type_id)->find_all(); - $map_title = $curr_album[0]->name; + $map_title = $curr_album[0]->title; } elseif ($map_type == "user") { // Generate an array of all items uploaded by the current user that // have exif gps coordinates and order by latitude (to group items diff --git a/3.0/modules/exif_gps/helpers/exif_gps_task.php b/3.0/modules/exif_gps/helpers/exif_gps_task.php index c3bcc73c..b07646ad 100644 --- a/3.0/modules/exif_gps/helpers/exif_gps_task.php +++ b/3.0/modules/exif_gps/helpers/exif_gps_task.php @@ -50,16 +50,18 @@ class exif_gps_task_Core { $completed = $task->get("completed"); // Generate an array of the next 100 photos to check. - $all_photos = ORM::factory("item") - ->where("id", ">", $last_id) - ->where("type", "=", "photo") - ->find_all(100); + //$all_photos = ORM::factory("item") + // ->where("id", ">", $last_id) + // ->where("type", "=", "photo") + // ->order_by("id") + // ->find_all(100); // Check each photo in the array to see if it already has exif gps data associated with it. // If it doesn't, attempt to extract gps coordinates. foreach (ORM::factory("item") ->where("id", ">", $last_id) ->where("type", "=", "photo") + ->order_by("id") ->find_all(100) as $item) { $record = ORM::factory("exif_coordinate")->where("item_id", "=", $item->id)->find(); diff --git a/3.1/modules/exif_gps/controllers/exif_gps.php b/3.1/modules/exif_gps/controllers/exif_gps.php index be6e92ac..52b94b9d 100644 --- a/3.1/modules/exif_gps/controllers/exif_gps.php +++ b/3.1/modules/exif_gps/controllers/exif_gps.php @@ -32,7 +32,7 @@ class EXIF_GPS_Controller extends Controller { ->order_by("exif_coordinates.latitude", "ASC") ->descendants(); $curr_album = ORM::factory("item")->where("id", "=", $type_id)->find_all(); - $map_title = $curr_album[0]->name; + $map_title = $curr_album[0]->title; } elseif ($map_type == "user") { // Generate an array of all items uploaded by the current user that // have exif gps coordinates and order by latitude (to group items diff --git a/3.1/modules/exif_gps/helpers/exif_gps_task.php b/3.1/modules/exif_gps/helpers/exif_gps_task.php index c3bcc73c..b07646ad 100644 --- a/3.1/modules/exif_gps/helpers/exif_gps_task.php +++ b/3.1/modules/exif_gps/helpers/exif_gps_task.php @@ -50,16 +50,18 @@ class exif_gps_task_Core { $completed = $task->get("completed"); // Generate an array of the next 100 photos to check. - $all_photos = ORM::factory("item") - ->where("id", ">", $last_id) - ->where("type", "=", "photo") - ->find_all(100); + //$all_photos = ORM::factory("item") + // ->where("id", ">", $last_id) + // ->where("type", "=", "photo") + // ->order_by("id") + // ->find_all(100); // Check each photo in the array to see if it already has exif gps data associated with it. // If it doesn't, attempt to extract gps coordinates. foreach (ORM::factory("item") ->where("id", ">", $last_id) ->where("type", "=", "photo") + ->order_by("id") ->find_all(100) as $item) { $record = ORM::factory("exif_coordinate")->where("item_id", "=", $item->id)->find(); From c6642aa9a20993b60c8dfbde376a7c83564bd2ea Mon Sep 17 00:00:00 2001 From: rWatcher Date: Thu, 3 Feb 2011 15:40:15 -0500 Subject: [PATCH 05/39] BugFix: Protected photos don't load properly. --- 3.0/modules/albumpassword/helpers/MY_access.php | 2 +- .../albumpassword/helpers/albumpassword_installer.php | 8 ++++---- 3.1/modules/albumpassword/helpers/MY_access.php | 2 +- .../albumpassword/helpers/albumpassword_installer.php | 8 ++++---- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/3.0/modules/albumpassword/helpers/MY_access.php b/3.0/modules/albumpassword/helpers/MY_access.php index 38b48fc3..bda1db32 100644 --- a/3.0/modules/albumpassword/helpers/MY_access.php +++ b/3.0/modules/albumpassword/helpers/MY_access.php @@ -33,7 +33,7 @@ class access extends access_Core { // Throw a 404 error when a user attempts to access a protected item, // unless the password has been provided, or the user is the item's owner. } elseif (module::get_var("albumpassword", "hideonly") == false) { - $item_protected = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->id)->find_all(); + $item_protected = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->id)->order_by("cache_id")->find_all(); if (count($item_protected) > 0) { $existing_password = ORM::factory("items_albumpassword")->where("id", "=", $item_protected[0]->password_id)->find(); if ($existing_password->loaded()) { diff --git a/3.0/modules/albumpassword/helpers/albumpassword_installer.php b/3.0/modules/albumpassword/helpers/albumpassword_installer.php index 39b7ccee..93a6d0c0 100644 --- a/3.0/modules/albumpassword/helpers/albumpassword_installer.php +++ b/3.0/modules/albumpassword/helpers/albumpassword_installer.php @@ -30,10 +30,10 @@ class albumpassword_installer { // Create a table to store a list of all protected items in. $db->query("CREATE TABLE IF NOT EXISTS {albumpassword_idcaches} ( - `id` int(9) NOT NULL auto_increment, + `cache_id` int(9) NOT NULL auto_increment, `password_id` int(9) NOT NULL, `item_id` int(9) NOT NULL, - PRIMARY KEY (`id`)) + PRIMARY KEY (`cache_id`)) DEFAULT CHARSET=utf8;"); // Set the default value for this module's behavior. @@ -53,10 +53,10 @@ class albumpassword_installer { if ($version == 2) { // Create a table to store a list of all protected items in. $db->query("CREATE TABLE IF NOT EXISTS {albumpassword_idcaches} ( - `id` int(9) NOT NULL auto_increment, + `cache_id` int(9) NOT NULL auto_increment, `password_id` int(9) NOT NULL, `item_id` int(9) NOT NULL, - PRIMARY KEY (`id`)) + PRIMARY KEY (`cache_id`)) DEFAULT CHARSET=utf8;"); module::set_version("albumpassword", $version = 3); } diff --git a/3.1/modules/albumpassword/helpers/MY_access.php b/3.1/modules/albumpassword/helpers/MY_access.php index 38b48fc3..bda1db32 100644 --- a/3.1/modules/albumpassword/helpers/MY_access.php +++ b/3.1/modules/albumpassword/helpers/MY_access.php @@ -33,7 +33,7 @@ class access extends access_Core { // Throw a 404 error when a user attempts to access a protected item, // unless the password has been provided, or the user is the item's owner. } elseif (module::get_var("albumpassword", "hideonly") == false) { - $item_protected = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->id)->find_all(); + $item_protected = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->id)->order_by("cache_id")->find_all(); if (count($item_protected) > 0) { $existing_password = ORM::factory("items_albumpassword")->where("id", "=", $item_protected[0]->password_id)->find(); if ($existing_password->loaded()) { diff --git a/3.1/modules/albumpassword/helpers/albumpassword_installer.php b/3.1/modules/albumpassword/helpers/albumpassword_installer.php index 39b7ccee..93a6d0c0 100644 --- a/3.1/modules/albumpassword/helpers/albumpassword_installer.php +++ b/3.1/modules/albumpassword/helpers/albumpassword_installer.php @@ -30,10 +30,10 @@ class albumpassword_installer { // Create a table to store a list of all protected items in. $db->query("CREATE TABLE IF NOT EXISTS {albumpassword_idcaches} ( - `id` int(9) NOT NULL auto_increment, + `cache_id` int(9) NOT NULL auto_increment, `password_id` int(9) NOT NULL, `item_id` int(9) NOT NULL, - PRIMARY KEY (`id`)) + PRIMARY KEY (`cache_id`)) DEFAULT CHARSET=utf8;"); // Set the default value for this module's behavior. @@ -53,10 +53,10 @@ class albumpassword_installer { if ($version == 2) { // Create a table to store a list of all protected items in. $db->query("CREATE TABLE IF NOT EXISTS {albumpassword_idcaches} ( - `id` int(9) NOT NULL auto_increment, + `cache_id` int(9) NOT NULL auto_increment, `password_id` int(9) NOT NULL, `item_id` int(9) NOT NULL, - PRIMARY KEY (`id`)) + PRIMARY KEY (`cache_id`)) DEFAULT CHARSET=utf8;"); module::set_version("albumpassword", $version = 3); } From adc6706ed91ae8cabfcdcb6b3b6b9658efd2052e Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Sun, 6 Feb 2011 21:22:11 -0700 Subject: [PATCH 06/39] Initial commit of Twitter module. OAuth access key retrieval and storage is working, posting tweets is not, yet. --- .../twitter/controllers/admin_twitter.php | 54 ++ 3.1/modules/twitter/css/twitter.css | 5 + 3.1/modules/twitter/helpers/twitter_event.php | 50 + 3.1/modules/twitter/helpers/twitter_theme.php | 25 + 3.1/modules/twitter/js/twitter.js | 36 + 3.1/modules/twitter/lib/OAuth.php | 874 ++++++++++++++++++ 3.1/modules/twitter/lib/images/darker.png | Bin 0 -> 2370 bytes 3.1/modules/twitter/lib/images/lighter.png | Bin 0 -> 2490 bytes 3.1/modules/twitter/lib/twitteroauth.php | 245 +++++ 3.1/modules/twitter/models/twitter_tweet.php | 21 + 3.1/modules/twitter/module.info | 3 + .../twitter/views/admin_twitter.html.php | 30 + 12 files changed, 1343 insertions(+) create mode 100644 3.1/modules/twitter/controllers/admin_twitter.php create mode 100644 3.1/modules/twitter/css/twitter.css create mode 100644 3.1/modules/twitter/helpers/twitter_event.php create mode 100644 3.1/modules/twitter/helpers/twitter_theme.php create mode 100644 3.1/modules/twitter/js/twitter.js create mode 100644 3.1/modules/twitter/lib/OAuth.php create mode 100644 3.1/modules/twitter/lib/images/darker.png create mode 100644 3.1/modules/twitter/lib/images/lighter.png create mode 100644 3.1/modules/twitter/lib/twitteroauth.php create mode 100644 3.1/modules/twitter/models/twitter_tweet.php create mode 100644 3.1/modules/twitter/module.info create mode 100644 3.1/modules/twitter/views/admin_twitter.html.php diff --git a/3.1/modules/twitter/controllers/admin_twitter.php b/3.1/modules/twitter/controllers/admin_twitter.php new file mode 100644 index 00000000..b2f61ab8 --- /dev/null +++ b/3.1/modules/twitter/controllers/admin_twitter.php @@ -0,0 +1,54 @@ +validate()) { + $consumer_key = $form->twitter_oauth->consumer_key->value; + $consumer_secret = $form->twitter_oauth->consumer_secret->value; + $default_tweet = $form->twitter_message->default_tweet->value; + $shorten_urls = $form->urls->shorten_urls->value; + + module::set_var("twitter", "consumer_key", $consumer_key); + module::set_var("twitter", "consumer_secret", $consumer_secret); + module::set_var("twitter", "default_tweet", $default_tweet); + module::set_var("twitter", "shorten_urls", $shorten_urls); + message::success("Twitter settings saved"); + } + } + $is_registered = twitter::is_registered(); + + $v = new Admin_View("admin.html"); + $v->page_title = t("Twitter"); + $v->content = new View("admin_twitter.html"); + $v->content->form = $form; + $v->content->is_registered = $is_registered; + + print $v; + } + +} \ No newline at end of file diff --git a/3.1/modules/twitter/css/twitter.css b/3.1/modules/twitter/css/twitter.css new file mode 100644 index 00000000..8bb82ccf --- /dev/null +++ b/3.1/modules/twitter/css/twitter.css @@ -0,0 +1,5 @@ +#g-twitter-character-count { + float: right; + font-size: 1.4em; + font-weight: bold; +} diff --git a/3.1/modules/twitter/helpers/twitter_event.php b/3.1/modules/twitter/helpers/twitter_event.php new file mode 100644 index 00000000..eabb047e --- /dev/null +++ b/3.1/modules/twitter/helpers/twitter_event.php @@ -0,0 +1,50 @@ +get("settings_menu") + ->append(Menu::factory("link") + ->id("twitter_menu") + ->label(t("Twitter")) + ->url(url::site("admin/twitter"))); + } + + static function site_menu($menu, $theme) { + $item = $theme->item(); + + $menu->get("options_menu") + ->append(Menu::factory("dialog") + ->id("twitter") + ->label(t("Share on Twitter")) + ->css_id("g-twitter-link") + ->url(url::site("twitter/dialog/{$item->id}"))); + } + + static function context_menu($menu, $theme, $item) { + $menu->get("options_menu") + ->append(Menu::factory("dialog") + ->id("twitter") + ->label(t("Share on Twitter")) + ->css_class("ui-icon-link g-twitter-share") + ->url(url::site("twitter/dialog/{$item->id}"))); + } + +} diff --git a/3.1/modules/twitter/helpers/twitter_theme.php b/3.1/modules/twitter/helpers/twitter_theme.php new file mode 100644 index 00000000..2862966d --- /dev/null +++ b/3.1/modules/twitter/helpers/twitter_theme.php @@ -0,0 +1,25 @@ +script("twitter.js"); + $theme->css("twitter.css"); + } +} diff --git a/3.1/modules/twitter/js/twitter.js b/3.1/modules/twitter/js/twitter.js new file mode 100644 index 00000000..3a816a9b --- /dev/null +++ b/3.1/modules/twitter/js/twitter.js @@ -0,0 +1,36 @@ +(function($) { + $.widget("ui.gallery_twitter", { + + _init: function() { + this._set_count(); + $(this.element).bind("keyup", this._set_count); + }, + + _set_count: function() { + var character_array = $("#g-tweet").val().split(""); + var count = character_array.length; + var remaining = 140 - count; //self.options.max_count - count; + var count_container = $("#g-twitter-character-count"); + var color = "#000000"; + var warn_color = "#7F0005"; //this.options.warn_color; + var error_color = "#FF0000"; //this.options.error_color; + if (remaining < 10) { + color = error_color; + } else if (remaining < 20) { + color = warn_color; + } + $(count_container).css("color", color); + $(count_container).html(remaining); + } + + }); + + $.extend($.ui.gallery_twitter, { + defaults: { + max_count: 140, + warn_color: "#7F0005", + error_color: "#FF0000" + } + }); + +})(jQuery); diff --git a/3.1/modules/twitter/lib/OAuth.php b/3.1/modules/twitter/lib/OAuth.php new file mode 100644 index 00000000..67a94c47 --- /dev/null +++ b/3.1/modules/twitter/lib/OAuth.php @@ -0,0 +1,874 @@ +key = $key; + $this->secret = $secret; + $this->callback_url = $callback_url; + } + + function __toString() { + return "OAuthConsumer[key=$this->key,secret=$this->secret]"; + } +} + +class OAuthToken { + // access tokens and request tokens + public $key; + public $secret; + + /** + * key = the token + * secret = the token secret + */ + function __construct($key, $secret) { + $this->key = $key; + $this->secret = $secret; + } + + /** + * generates the basic string serialization of a token that a server + * would respond to request_token and access_token calls with + */ + function to_string() { + return "oauth_token=" . + OAuthUtil::urlencode_rfc3986($this->key) . + "&oauth_token_secret=" . + OAuthUtil::urlencode_rfc3986($this->secret); + } + + function __toString() { + return $this->to_string(); + } +} + +/** + * A class for implementing a Signature Method + * See section 9 ("Signing Requests") in the spec + */ +abstract class OAuthSignatureMethod { + /** + * Needs to return the name of the Signature Method (ie HMAC-SHA1) + * @return string + */ + abstract public function get_name(); + + /** + * Build up the signature + * NOTE: The output of this function MUST NOT be urlencoded. + * the encoding is handled in OAuthRequest when the final + * request is serialized + * @param OAuthRequest $request + * @param OAuthConsumer $consumer + * @param OAuthToken $token + * @return string + */ + abstract public function build_signature($request, $consumer, $token); + + /** + * Verifies that a given signature is correct + * @param OAuthRequest $request + * @param OAuthConsumer $consumer + * @param OAuthToken $token + * @param string $signature + * @return bool + */ + public function check_signature($request, $consumer, $token, $signature) { + $built = $this->build_signature($request, $consumer, $token); + return $built == $signature; + } +} + +/** + * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104] + * where the Signature Base String is the text and the key is the concatenated values (each first + * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&' + * character (ASCII code 38) even if empty. + * - Chapter 9.2 ("HMAC-SHA1") + */ +class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod { + function get_name() { + return "HMAC-SHA1"; + } + + public function build_signature($request, $consumer, $token) { + $base_string = $request->get_signature_base_string(); + $request->base_string = $base_string; + + $key_parts = array( + $consumer->secret, + ($token) ? $token->secret : "" + ); + + $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); + $key = implode('&', $key_parts); + + return base64_encode(hash_hmac('sha1', $base_string, $key, true)); + } +} + +/** + * The PLAINTEXT method does not provide any security protection and SHOULD only be used + * over a secure channel such as HTTPS. It does not use the Signature Base String. + * - Chapter 9.4 ("PLAINTEXT") + */ +class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod { + public function get_name() { + return "PLAINTEXT"; + } + + /** + * oauth_signature is set to the concatenated encoded values of the Consumer Secret and + * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is + * empty. The result MUST be encoded again. + * - Chapter 9.4.1 ("Generating Signatures") + * + * Please note that the second encoding MUST NOT happen in the SignatureMethod, as + * OAuthRequest handles this! + */ + public function build_signature($request, $consumer, $token) { + $key_parts = array( + $consumer->secret, + ($token) ? $token->secret : "" + ); + + $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); + $key = implode('&', $key_parts); + $request->base_string = $key; + + return $key; + } +} + +/** + * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in + * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for + * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a + * verified way to the Service Provider, in a manner which is beyond the scope of this + * specification. + * - Chapter 9.3 ("RSA-SHA1") + */ +abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod { + public function get_name() { + return "RSA-SHA1"; + } + + // Up to the SP to implement this lookup of keys. Possible ideas are: + // (1) do a lookup in a table of trusted certs keyed off of consumer + // (2) fetch via http using a url provided by the requester + // (3) some sort of specific discovery code based on request + // + // Either way should return a string representation of the certificate + protected abstract function fetch_public_cert(&$request); + + // Up to the SP to implement this lookup of keys. Possible ideas are: + // (1) do a lookup in a table of trusted certs keyed off of consumer + // + // Either way should return a string representation of the certificate + protected abstract function fetch_private_cert(&$request); + + public function build_signature($request, $consumer, $token) { + $base_string = $request->get_signature_base_string(); + $request->base_string = $base_string; + + // Fetch the private key cert based on the request + $cert = $this->fetch_private_cert($request); + + // Pull the private key ID from the certificate + $privatekeyid = openssl_get_privatekey($cert); + + // Sign using the key + $ok = openssl_sign($base_string, $signature, $privatekeyid); + + // Release the key resource + openssl_free_key($privatekeyid); + + return base64_encode($signature); + } + + public function check_signature($request, $consumer, $token, $signature) { + $decoded_sig = base64_decode($signature); + + $base_string = $request->get_signature_base_string(); + + // Fetch the public key cert based on the request + $cert = $this->fetch_public_cert($request); + + // Pull the public key ID from the certificate + $publickeyid = openssl_get_publickey($cert); + + // Check the computed signature against the one passed in the query + $ok = openssl_verify($base_string, $decoded_sig, $publickeyid); + + // Release the key resource + openssl_free_key($publickeyid); + + return $ok == 1; + } +} + +class OAuthRequest { + private $parameters; + private $http_method; + private $http_url; + // for debug purposes + public $base_string; + public static $version = '1.0'; + public static $POST_INPUT = 'php://input'; + + function __construct($http_method, $http_url, $parameters=NULL) { + @$parameters or $parameters = array(); + $parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters); + $this->parameters = $parameters; + $this->http_method = $http_method; + $this->http_url = $http_url; + } + + + /** + * attempt to build up a request from what was passed to the server + */ + public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) { + $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") + ? 'http' + : 'https'; + @$http_url or $http_url = $scheme . + '://' . $_SERVER['HTTP_HOST'] . + ':' . + $_SERVER['SERVER_PORT'] . + $_SERVER['REQUEST_URI']; + @$http_method or $http_method = $_SERVER['REQUEST_METHOD']; + + // We weren't handed any parameters, so let's find the ones relevant to + // this request. + // If you run XML-RPC or similar you should use this to provide your own + // parsed parameter-list + if (!$parameters) { + // Find request headers + $request_headers = OAuthUtil::get_headers(); + + // Parse the query-string to find GET parameters + $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']); + + // It's a POST request of the proper content-type, so parse POST + // parameters and add those overriding any duplicates from GET + if ($http_method == "POST" + && @strstr($request_headers["Content-Type"], + "application/x-www-form-urlencoded") + ) { + $post_data = OAuthUtil::parse_parameters( + file_get_contents(self::$POST_INPUT) + ); + $parameters = array_merge($parameters, $post_data); + } + + // We have a Authorization-header with OAuth data. Parse the header + // and add those overriding any duplicates from GET or POST + if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") { + $header_parameters = OAuthUtil::split_header( + $request_headers['Authorization'] + ); + $parameters = array_merge($parameters, $header_parameters); + } + + } + + return new OAuthRequest($http_method, $http_url, $parameters); + } + + /** + * pretty much a helper function to set up the request + */ + public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) { + @$parameters or $parameters = array(); + $defaults = array("oauth_version" => OAuthRequest::$version, + "oauth_nonce" => OAuthRequest::generate_nonce(), + "oauth_timestamp" => OAuthRequest::generate_timestamp(), + "oauth_consumer_key" => $consumer->key); + if ($token) + $defaults['oauth_token'] = $token->key; + + $parameters = array_merge($defaults, $parameters); + + return new OAuthRequest($http_method, $http_url, $parameters); + } + + public function set_parameter($name, $value, $allow_duplicates = true) { + if ($allow_duplicates && isset($this->parameters[$name])) { + // We have already added parameter(s) with this name, so add to the list + if (is_scalar($this->parameters[$name])) { + // This is the first duplicate, so transform scalar (string) + // into an array so we can add the duplicates + $this->parameters[$name] = array($this->parameters[$name]); + } + + $this->parameters[$name][] = $value; + } else { + $this->parameters[$name] = $value; + } + } + + public function get_parameter($name) { + return isset($this->parameters[$name]) ? $this->parameters[$name] : null; + } + + public function get_parameters() { + return $this->parameters; + } + + public function unset_parameter($name) { + unset($this->parameters[$name]); + } + + /** + * The request parameters, sorted and concatenated into a normalized string. + * @return string + */ + public function get_signable_parameters() { + // Grab all parameters + $params = $this->parameters; + + // Remove oauth_signature if present + // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.") + if (isset($params['oauth_signature'])) { + unset($params['oauth_signature']); + } + + return OAuthUtil::build_http_query($params); + } + + /** + * Returns the base string of this request + * + * The base string defined as the method, the url + * and the parameters (normalized), each urlencoded + * and the concated with &. + */ + public function get_signature_base_string() { + $parts = array( + $this->get_normalized_http_method(), + $this->get_normalized_http_url(), + $this->get_signable_parameters() + ); + + $parts = OAuthUtil::urlencode_rfc3986($parts); + + return implode('&', $parts); + } + + /** + * just uppercases the http method + */ + public function get_normalized_http_method() { + return strtoupper($this->http_method); + } + + /** + * parses the url and rebuilds it to be + * scheme://host/path + */ + public function get_normalized_http_url() { + $parts = parse_url($this->http_url); + + $port = @$parts['port']; + $scheme = $parts['scheme']; + $host = $parts['host']; + $path = @$parts['path']; + + $port or $port = ($scheme == 'https') ? '443' : '80'; + + if (($scheme == 'https' && $port != '443') + || ($scheme == 'http' && $port != '80')) { + $host = "$host:$port"; + } + return "$scheme://$host$path"; + } + + /** + * builds a url usable for a GET request + */ + public function to_url() { + $post_data = $this->to_postdata(); + $out = $this->get_normalized_http_url(); + if ($post_data) { + $out .= '?'.$post_data; + } + return $out; + } + + /** + * builds the data one would send in a POST request + */ + public function to_postdata() { + return OAuthUtil::build_http_query($this->parameters); + } + + /** + * builds the Authorization: header + */ + public function to_header($realm=null) { + $first = true; + if($realm) { + $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"'; + $first = false; + } else + $out = 'Authorization: OAuth'; + + $total = array(); + foreach ($this->parameters as $k => $v) { + if (substr($k, 0, 5) != "oauth") continue; + if (is_array($v)) { + throw new OAuthException('Arrays not supported in headers'); + } + $out .= ($first) ? ' ' : ','; + $out .= OAuthUtil::urlencode_rfc3986($k) . + '="' . + OAuthUtil::urlencode_rfc3986($v) . + '"'; + $first = false; + } + return $out; + } + + public function __toString() { + return $this->to_url(); + } + + + public function sign_request($signature_method, $consumer, $token) { + $this->set_parameter( + "oauth_signature_method", + $signature_method->get_name(), + false + ); + $signature = $this->build_signature($signature_method, $consumer, $token); + $this->set_parameter("oauth_signature", $signature, false); + } + + public function build_signature($signature_method, $consumer, $token) { + $signature = $signature_method->build_signature($this, $consumer, $token); + return $signature; + } + + /** + * util function: current timestamp + */ + private static function generate_timestamp() { + return time(); + } + + /** + * util function: current nonce + */ + private static function generate_nonce() { + $mt = microtime(); + $rand = mt_rand(); + + return md5($mt . $rand); // md5s look nicer than numbers + } +} + +class OAuthServer { + protected $timestamp_threshold = 300; // in seconds, five minutes + protected $version = '1.0'; // hi blaine + protected $signature_methods = array(); + + protected $data_store; + + function __construct($data_store) { + $this->data_store = $data_store; + } + + public function add_signature_method($signature_method) { + $this->signature_methods[$signature_method->get_name()] = + $signature_method; + } + + // high level functions + + /** + * process a request_token request + * returns the request token on success + */ + public function fetch_request_token(&$request) { + $this->get_version($request); + + $consumer = $this->get_consumer($request); + + // no token required for the initial token request + $token = NULL; + + $this->check_signature($request, $consumer, $token); + + // Rev A change + $callback = $request->get_parameter('oauth_callback'); + $new_token = $this->data_store->new_request_token($consumer, $callback); + + return $new_token; + } + + /** + * process an access_token request + * returns the access token on success + */ + public function fetch_access_token(&$request) { + $this->get_version($request); + + $consumer = $this->get_consumer($request); + + // requires authorized request token + $token = $this->get_token($request, $consumer, "request"); + + $this->check_signature($request, $consumer, $token); + + // Rev A change + $verifier = $request->get_parameter('oauth_verifier'); + $new_token = $this->data_store->new_access_token($token, $consumer, $verifier); + + return $new_token; + } + + /** + * verify an api call, checks all the parameters + */ + public function verify_request(&$request) { + $this->get_version($request); + $consumer = $this->get_consumer($request); + $token = $this->get_token($request, $consumer, "access"); + $this->check_signature($request, $consumer, $token); + return array($consumer, $token); + } + + // Internals from here + /** + * version 1 + */ + private function get_version(&$request) { + $version = $request->get_parameter("oauth_version"); + if (!$version) { + // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. + // Chapter 7.0 ("Accessing Protected Ressources") + $version = '1.0'; + } + if ($version !== $this->version) { + throw new OAuthException("OAuth version '$version' not supported"); + } + return $version; + } + + /** + * figure out the signature with some defaults + */ + private function get_signature_method(&$request) { + $signature_method = + @$request->get_parameter("oauth_signature_method"); + + if (!$signature_method) { + // According to chapter 7 ("Accessing Protected Ressources") the signature-method + // parameter is required, and we can't just fallback to PLAINTEXT + throw new OAuthException('No signature method parameter. This parameter is required'); + } + + if (!in_array($signature_method, + array_keys($this->signature_methods))) { + throw new OAuthException( + "Signature method '$signature_method' not supported " . + "try one of the following: " . + implode(", ", array_keys($this->signature_methods)) + ); + } + return $this->signature_methods[$signature_method]; + } + + /** + * try to find the consumer for the provided request's consumer key + */ + private function get_consumer(&$request) { + $consumer_key = @$request->get_parameter("oauth_consumer_key"); + if (!$consumer_key) { + throw new OAuthException("Invalid consumer key"); + } + + $consumer = $this->data_store->lookup_consumer($consumer_key); + if (!$consumer) { + throw new OAuthException("Invalid consumer"); + } + + return $consumer; + } + + /** + * try to find the token for the provided request's token key + */ + private function get_token(&$request, $consumer, $token_type="access") { + $token_field = @$request->get_parameter('oauth_token'); + $token = $this->data_store->lookup_token( + $consumer, $token_type, $token_field + ); + if (!$token) { + throw new OAuthException("Invalid $token_type token: $token_field"); + } + return $token; + } + + /** + * all-in-one function to check the signature on a request + * should guess the signature method appropriately + */ + private function check_signature(&$request, $consumer, $token) { + // this should probably be in a different method + $timestamp = @$request->get_parameter('oauth_timestamp'); + $nonce = @$request->get_parameter('oauth_nonce'); + + $this->check_timestamp($timestamp); + $this->check_nonce($consumer, $token, $nonce, $timestamp); + + $signature_method = $this->get_signature_method($request); + + $signature = $request->get_parameter('oauth_signature'); + $valid_sig = $signature_method->check_signature( + $request, + $consumer, + $token, + $signature + ); + + if (!$valid_sig) { + throw new OAuthException("Invalid signature"); + } + } + + /** + * check that the timestamp is new enough + */ + private function check_timestamp($timestamp) { + if( ! $timestamp ) + throw new OAuthException( + 'Missing timestamp parameter. The parameter is required' + ); + + // verify that timestamp is recentish + $now = time(); + if (abs($now - $timestamp) > $this->timestamp_threshold) { + throw new OAuthException( + "Expired timestamp, yours $timestamp, ours $now" + ); + } + } + + /** + * check that the nonce is not repeated + */ + private function check_nonce($consumer, $token, $nonce, $timestamp) { + if( ! $nonce ) + throw new OAuthException( + 'Missing nonce parameter. The parameter is required' + ); + + // verify that the nonce is uniqueish + $found = $this->data_store->lookup_nonce( + $consumer, + $token, + $nonce, + $timestamp + ); + if ($found) { + throw new OAuthException("Nonce already used: $nonce"); + } + } + +} + +class OAuthDataStore { + function lookup_consumer($consumer_key) { + // implement me + } + + function lookup_token($consumer, $token_type, $token) { + // implement me + } + + function lookup_nonce($consumer, $token, $nonce, $timestamp) { + // implement me + } + + function new_request_token($consumer, $callback = null) { + // return a new token attached to this consumer + } + + function new_access_token($token, $consumer, $verifier = null) { + // return a new access token attached to this consumer + // for the user associated with this token if the request token + // is authorized + // should also invalidate the request token + } + +} + +class OAuthUtil { + public static function urlencode_rfc3986($input) { + if (is_array($input)) { + return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input); + } else if (is_scalar($input)) { + return str_replace( + '+', + ' ', + str_replace('%7E', '~', rawurlencode($input)) + ); + } else { + return ''; + } +} + + + // This decode function isn't taking into consideration the above + // modifications to the encoding process. However, this method doesn't + // seem to be used anywhere so leaving it as is. + public static function urldecode_rfc3986($string) { + return urldecode($string); + } + + // Utility function for turning the Authorization: header into + // parameters, has to do some unescaping + // Can filter out any non-oauth parameters if needed (default behaviour) + public static function split_header($header, $only_allow_oauth_parameters = true) { + $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/'; + $offset = 0; + $params = array(); + while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) { + $match = $matches[0]; + $header_name = $matches[2][0]; + $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0]; + if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) { + $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content); + } + $offset = $match[1] + strlen($match[0]); + } + + if (isset($params['realm'])) { + unset($params['realm']); + } + + return $params; + } + + // helper to try to sort out headers for people who aren't running apache + public static function get_headers() { + if (function_exists('apache_request_headers')) { + // we need this to get the actual Authorization: header + // because apache tends to tell us it doesn't exist + $headers = apache_request_headers(); + + // sanitize the output of apache_request_headers because + // we always want the keys to be Cased-Like-This and arh() + // returns the headers in the same case as they are in the + // request + $out = array(); + foreach( $headers AS $key => $value ) { + $key = str_replace( + " ", + "-", + ucwords(strtolower(str_replace("-", " ", $key))) + ); + $out[$key] = $value; + } + } else { + // otherwise we don't have apache and are just going to have to hope + // that $_SERVER actually contains what we need + $out = array(); + if( isset($_SERVER['CONTENT_TYPE']) ) + $out['Content-Type'] = $_SERVER['CONTENT_TYPE']; + if( isset($_ENV['CONTENT_TYPE']) ) + $out['Content-Type'] = $_ENV['CONTENT_TYPE']; + + foreach ($_SERVER as $key => $value) { + if (substr($key, 0, 5) == "HTTP_") { + // this is chaos, basically it is just there to capitalize the first + // letter of every word that is not an initial HTTP and strip HTTP + // code from przemek + $key = str_replace( + " ", + "-", + ucwords(strtolower(str_replace("_", " ", substr($key, 5)))) + ); + $out[$key] = $value; + } + } + } + return $out; + } + + // This function takes a input like a=b&a=c&d=e and returns the parsed + // parameters like this + // array('a' => array('b','c'), 'd' => 'e') + public static function parse_parameters( $input ) { + if (!isset($input) || !$input) return array(); + + $pairs = explode('&', $input); + + $parsed_parameters = array(); + foreach ($pairs as $pair) { + $split = explode('=', $pair, 2); + $parameter = OAuthUtil::urldecode_rfc3986($split[0]); + $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : ''; + + if (isset($parsed_parameters[$parameter])) { + // We have already recieved parameter(s) with this name, so add to the list + // of parameters with this name + + if (is_scalar($parsed_parameters[$parameter])) { + // This is the first duplicate, so transform scalar (string) into an array + // so we can add the duplicates + $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]); + } + + $parsed_parameters[$parameter][] = $value; + } else { + $parsed_parameters[$parameter] = $value; + } + } + return $parsed_parameters; + } + + public static function build_http_query($params) { + if (!$params) return ''; + + // Urlencode both keys and values + $keys = OAuthUtil::urlencode_rfc3986(array_keys($params)); + $values = OAuthUtil::urlencode_rfc3986(array_values($params)); + $params = array_combine($keys, $values); + + // Parameters are sorted by name, using lexicographical byte value ordering. + // Ref: Spec: 9.1.1 (1) + uksort($params, 'strcmp'); + + $pairs = array(); + foreach ($params as $parameter => $value) { + if (is_array($value)) { + // If two or more parameters share the same name, they are sorted by their value + // Ref: Spec: 9.1.1 (1) + natsort($value); + foreach ($value as $duplicate_value) { + $pairs[] = $parameter . '=' . $duplicate_value; + } + } else { + $pairs[] = $parameter . '=' . $value; + } + } + // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61) + // Each name-value pair is separated by an '&' character (ASCII code 38) + return implode('&', $pairs); + } +} + +?> diff --git a/3.1/modules/twitter/lib/images/darker.png b/3.1/modules/twitter/lib/images/darker.png new file mode 100644 index 0000000000000000000000000000000000000000..746b6b9f80c71049f2a4eb84ff72d5d1bf77c62c GIT binary patch literal 2370 zcmV-I3BC4-P)dbVG7wVRUJ4ZXi@?ZDjy8FEKeU zFgbGL({lg-0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q#1y$)1UwV2%AYn zK~!jg?VD?CQ|B4Sf5(m;U*kCB;v^&~X`mqlD70k=%6eVbQL0v*Xp7YQm8n{*b!>yJ z(!O+58|t*KV;|a1YSE?^(P~r!DwWWcmX(x3qEZMUPRQMkYn;T6?ZlUJ&OSJC634d` z2cpeC=_r2mzR&ajpNrq~p4TS=K=t-rGFh@@kd9Zj2}1SuU2^SRo90ZU_22>KvVNBN zN$bG_D6X`LEdRUY0LY>^=R%i5Bg_0Ea&bx0oC{qJjV$wvq$5|gLBmVSt0>W^0odPr zkvH4z-$^Jta{d3210W?h@h{a^F(j&a*$TCKc&?(53nP9G+XiPXlt^O&F&IP&hsn`s z5EPNA;FxsxVjtoV% z8w_x}#msH+D zUG^;@b5%E4eOZieLxC|GdqX0xe$&Ypj-jMNi8KOE2Y=kSfm@f>FeZxRDir+gt8;wj^zh!Z z4|1S;fIofHmFDiG$6VD-RKNGsNereu%r#2@czVNHJ~(6LRF^Ahouk{HM6Xf-GLk4F z2#V;a{+_juy`2LY@e>1%F6o1ag}KMDd^>Xs!v=aD&Ais3mCBO>f^ zz-{K7lr<8yYYhef7Mt|!Z9Imrv=m)I0RVfS+RTxTUf$^)Brr0G@8oEJduZEaPNXAHVpl8Ko(IhUV0|K-#%m*RAB1@**Dl z=s1!fueR#0OW`wyYIg< zsa}`I3qYPSa=Y>cLv*@FGU}&&*gGwL=D_FNS6R#x58XwfUdyTOetvVfk#J!#4KF;x zvGyKn7g|72@Z#~aNzb_gBBM&YEgjb6MgFF$k*NJpmz@@un+I-K&cC)k$QrE@kIjZG zid2|Q7;@FfqDY-y&Ch9>U1jV%1XGUb`j!;hxMg}*nFc%;pz4NalQwCD8!dNc7A`d zHF`|$sIN)OYh;t+9>+}hiH%pAbo}Z^-{-?KR(|-_2V7lLz!R&NMvv3R6Q5aRhyn%L9QNukNeYg;z4xn|*H zt{ll-v(SP<5ctU2!)PExv&}i)E=T(|v~{!R%mo_z8~~^lio~8|rp4*xp0K;{2Scnb zDPVnhF~@rc(5Y2iYtnIjWhu=UJu~V%y`xBy%vdNyuiH0kud*mjt`W*)+)r%0uBr@$ zAW&q`^XT>U1Vou-<(6ojBi0_?ZRz5q-Idtyc;BQ?i?NieCr7FYj`cfv`%Fj5+(a6o z(NV%mC2xIgPtsNA_$Y)ue z(H6(iw6=6|1Cq$sb|O4!+Cosu(|F91lh*NY-eyjL*2 zPp14#jdRp00ET>iMwBYvxArpZ^GEwivXu7ql5#>{u7-)zygM?N#;BZZzp=cC=T_G6 zm!|Vcg%W98rOCnGZ^Jg?M>gn??_7&dk|z7hkzA|C2f+O+YB8K?YpQttt8+<(5^3C0SHn|VHsbV;k)Nx^=^x{bW^1&+TB}7CC60F4`JlLy zO-rh%uPo)z*>>tJMTiJ9`l@m@kyxWe7UMtePxOtAQ{|p=4DqZ|L6c*Ma9HHbpqIOq zN>01naq9sb?y~bh-6Fo&v6XxG9htRPL6sBNbEf>n#&0&CXG{GO?q0DJ8EAI6*w%0& zp@&2W)!TQ;B}?M3Z>+K`;LmrgWw#A>_r))8n;BkT3>)?wjN9&LYoqqAO$=Gv5}L3W zw3O(z_<~_NhCC#Cxh%)!WWeJELEyz(*Ru7dH9Y#^QLKaRWcxTTDA4AjQ{~V%J_289 zV*SL%ISK{kMjh@zkm0e^i{!C5+S-!e7MuFNW#_SGetqLAZZN?9i_kwsCr=rf(A&NK zltX2*cDvh)-R(_j_}yn7M3yB)Nv0y-$onl9Xmif~r>HA|%j+lklIi6o)=z945=FW$ z@k^U>&ULW0i;>X)Ppn?b&T7+)cKe8*9Sx0_baAE2L;DU>TVzJB&Y^wK&A^C1byAiq zM#`Um0FGYh=jet0OA<==KAjA|7^G?Z(LKxjXI4uQm%`=H$TGi3`pQivxf~i<<`>!5 ooU_as0%ZTSEKBC;cx9XLUtuVuKI-|I^Z)<=07*qoM6N<$g3Pn2od5s; literal 0 HcmV?d00001 diff --git a/3.1/modules/twitter/lib/images/lighter.png b/3.1/modules/twitter/lib/images/lighter.png new file mode 100644 index 0000000000000000000000000000000000000000..297bb03404f2d7462ee9355aae38f5f5f3e47fbd GIT binary patch literal 2490 zcmV;r2}SmaP)dbVG7wVRUJ4ZXi@?ZDjy8FEKeU zFgbGL({lg-0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q#1y$)1UwV2@^>~ zK~!jg?VEdWl+_u=f8X9WA)72QVM!vF1VSK4AZQ?nK}o}NseS3JN$f zgRQMIo!W~OJ6`ZouvAJ_K&eH%O=zU35Dd9+OGJ}EvYTu++57IdU;kJVc9XpY6B?a; zX3k{ZIp=-eC+|7m`<-)kR{+>vQ7sWi9D|5ebEgWz_KIq$s4!>9f*d_|j-lj_V|e1| zv2!Q@e7>PCTvsDT9K#C=07>!<2 zJRT3v{^4m(e0B`AMuXes=AQD^+;C$tPj22q>4H*zdfz>`#KAid3>9xAeo+*W%jE#P zv+pgwyLbU*^X6iX@D|vxdJPV{BV^y=rMIzo>FtA}CzL%H7|@3PC-uR0k{o`MEpT&+ zmiCUwd$DjaD&G5mR^R=5Ugy>A zFL6`pd;osE=`rd~)-ZEc5shchvh}x5aZ~9nJpS;;UjCggyhMFX4IM@k^;K2OnpeX9 zJ+G59W-M>Ndx+<@J`*QB2?^MN1N-(fead7?=HEi6T!B@Box5IR=L;`>Ej{PX zHuTf??pp_V_K#2V&%f=WuDXUP)2>6K(eP;bS}ruV@b7*5sr;ydIrB8I2tIsDgsYdEB~aA*X6k7? zxX|2;qp^|Gwe@`Y#d&IupCC)EqUw`l7)GU&uTKu*U$o?QG#U*z%qZYj8`hDRoCLu8 zhbzgOI5DbLyT^;&?d{E@=<{Loc(HlBWQ@7?YwIarxgyB6oH@guS9eiXI-mWozJlq( z1uEY@fC2%N(MZ*iqs%Lw&3$(-XHs%f#Ci8GF3A_N^~J`q@N(Yec4#`>p8;Rm>`^(w z^()mX);zY6A1}KTOQ(hBpZ+tI2M_vvC6EgOasg^TuSW9u`2L~=xMTvlF=IdirA&q( z01}jz+(`M#6-+Id=Jypvl2wZSngV!x>{xvBuA7QRt)c4kYU--0D3~!Fhr>aA^+`_G z)iHDWG@POs#IMsQgCL+*sYp&si#>KieJ zAZPaXZl!3>9M-SjNX7dfvh?=bdf)$&1YWO*1jqy#ZFVPakM~lt{ns24pi(Mnce*e+ zoV|U5)IWA0uWtapa=C)>xf3{EU4zZ(WX19y(%RC@hySVMd_x1@*}REPr@KGD1PCBr zszd|P3jULJU(P|*6JUEpf1ZUYMN@b5y{gO~R0`R^ zzo2^1b1iYS>vBugsL9qPM&yVTyCwWp(Uo=ev@y*W7rS{ZmOePbh#j}_&X%YtxeZa(=9L5<&(e8Bi z<5wsYm^&^0MKr*8(egMLdIIf9`S}2Jn9Y=xl~T570XoAdF4!DlHH6a}anEJ-cv*VQ z<;7KRgYq-}Q)5qi@;qcECS38JtLDV#Y+3g(n;(3LUp}&dB%O}ct5)I-xFV2%>k11g zTUf@C&yKTa*KVdw^(R50loR*{_b2SKCHeZt4jkLpj^;ZlKOe6sQZ!>aT9uM(b0*;N zdYL_=0IS=B(gj7|CTgIo3w=s5DLNgUE;lDl z=6*ck(9~r1FRqNt5);TzP2p%4ylH~wfExv!+`pk8s}?!j(i+mgrP)GJVGd2L zrifxR3OQ=I9MLCX4Ray;#3LJ#2{HtkfT^vG#S0hk#JUIhwAC2&WDQrS)2nfk*V=iQ!Y2K(sVlqHpM%x^1{ck;y4Kin5jc`W;@8<8AFx4+YWs z?QSo2A}4+Q<6F?#y0F{rhttp_status; } + function lastAPICall() { return $this->last_api_call; } + + /** + * construct TwitterOAuth object + */ + function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) { + $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1(); + $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret); + if (!empty($oauth_token) && !empty($oauth_token_secret)) { + $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret); + } else { + $this->token = NULL; + } + } + + + /** + * Get a request_token from Twitter + * + * @returns a key/value array containing oauth_token and oauth_token_secret + */ + function getRequestToken($oauth_callback = NULL) { + $parameters = array(); + if (!empty($oauth_callback)) { + $parameters['oauth_callback'] = $oauth_callback; + } + $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters); + $token = OAuthUtil::parse_parameters($request); + $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); + return $token; + } + + /** + * Get the authorize URL + * + * @returns a string + */ + function getAuthorizeURL($token, $sign_in_with_twitter = TRUE) { + if (is_array($token)) { + $token = $token['oauth_token']; + } + if (empty($sign_in_with_twitter)) { + return $this->authorizeURL() . "?oauth_token={$token}"; + } else { + return $this->authenticateURL() . "?oauth_token={$token}"; + } + } + + /** + * Exchange request token and secret for an access token and + * secret, to sign API calls. + * + * @returns array("oauth_token" => "the-access-token", + * "oauth_token_secret" => "the-access-secret", + * "user_id" => "9436992", + * "screen_name" => "abraham") + */ + function getAccessToken($oauth_verifier = FALSE) { + $parameters = array(); + if (!empty($oauth_verifier)) { + $parameters['oauth_verifier'] = $oauth_verifier; + } + $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters); + $token = OAuthUtil::parse_parameters($request); + $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); + return $token; + } + + /** + * One time exchange of username and password for access token and secret. + * + * @returns array("oauth_token" => "the-access-token", + * "oauth_token_secret" => "the-access-secret", + * "user_id" => "9436992", + * "screen_name" => "abraham", + * "x_auth_expires" => "0") + */ + function getXAuthToken($username, $password) { + $parameters = array(); + $parameters['x_auth_username'] = $username; + $parameters['x_auth_password'] = $password; + $parameters['x_auth_mode'] = 'client_auth'; + $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters); + $token = OAuthUtil::parse_parameters($request); + $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); + return $token; + } + + /** + * GET wrapper for oAuthRequest. + */ + function get($url, $parameters = array()) { + $response = $this->oAuthRequest($url, 'GET', $parameters); + if ($this->format === 'json' && $this->decode_json) { + return json_decode($response); + } + return $response; + } + + /** + * POST wrapper for oAuthRequest. + */ + function post($url, $parameters = array()) { + $response = $this->oAuthRequest($url, 'POST', $parameters); + if ($this->format === 'json' && $this->decode_json) { + return json_decode($response); + } + return $response; + } + + /** + * DELETE wrapper for oAuthReqeust. + */ + function delete($url, $parameters = array()) { + $response = $this->oAuthRequest($url, 'DELETE', $parameters); + if ($this->format === 'json' && $this->decode_json) { + return json_decode($response); + } + return $response; + } + + /** + * Format and sign an OAuth / API request + */ + function oAuthRequest($url, $method, $parameters) { + if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) { + $url = "{$this->host}{$url}.{$this->format}"; + } + $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters); + $request->sign_request($this->sha1_method, $this->consumer, $this->token); + switch ($method) { + case 'GET': + return $this->http($request->to_url(), 'GET'); + default: + return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata()); + } + } + + /** + * Make an HTTP request + * + * @return API results + */ + function http($url, $method, $postfields = NULL) { + $this->http_info = array(); + $ci = curl_init(); + /* Curl settings */ + curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent); + curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); + curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout); + curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); + curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:')); + curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); + curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader')); + curl_setopt($ci, CURLOPT_HEADER, FALSE); + + switch ($method) { + case 'POST': + curl_setopt($ci, CURLOPT_POST, TRUE); + if (!empty($postfields)) { + curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); + } + break; + case 'DELETE': + curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); + if (!empty($postfields)) { + $url = "{$url}?{$postfields}"; + } + } + + curl_setopt($ci, CURLOPT_URL, $url); + $response = curl_exec($ci); + $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); + $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); + $this->url = $url; + curl_close ($ci); + return $response; + } + + /** + * Get the header info to store. + */ + function getHeader($ch, $header) { + $i = strpos($header, ':'); + if (!empty($i)) { + $key = str_replace('-', '_', strtolower(substr($header, 0, $i))); + $value = trim(substr($header, $i + 2)); + $this->http_header[$key] = $value; + } + return strlen($header); + } +} diff --git a/3.1/modules/twitter/models/twitter_tweet.php b/3.1/modules/twitter/models/twitter_tweet.php new file mode 100644 index 00000000..9a616cfd --- /dev/null +++ b/3.1/modules/twitter/models/twitter_tweet.php @@ -0,0 +1,21 @@ + +
+

+ +

dev.twitter.com/apps/new.", + array("twitter_apps_reg" => "http://dev.twitter.com/apps/new")) ?>

+
    +
  • +
  • +
  • url::abs_site())) ?>
  • +
  • +
  • +
  • url::abs_site())) ?>
  • +
  • +
+

+ +

Twitter application settings.", + array("twitter_apps" => "http://dev.twitter.com/apps")) ?>

+ +

bit.ly module to shorten + Gallery URLs in tweets.", array("bitly_module_url" => "http://codex.gallery2.org/Gallery3:Modules:bitly")) ?>

+ + +
+ +
+
From 265901c3d538907060ad777fa9f7170a08c191d1 Mon Sep 17 00:00:00 2001 From: rWatcher Date: Tue, 8 Feb 2011 15:34:12 -0500 Subject: [PATCH 07/39] Minor bugfix. --- 3.0/modules/albumpassword/helpers/albumpassword_event.php | 6 +++--- 3.1/modules/albumpassword/helpers/albumpassword_event.php | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/3.0/modules/albumpassword/helpers/albumpassword_event.php b/3.0/modules/albumpassword/helpers/albumpassword_event.php index cd981af1..0c9210ea 100644 --- a/3.0/modules/albumpassword/helpers/albumpassword_event.php +++ b/3.0/modules/albumpassword/helpers/albumpassword_event.php @@ -86,7 +86,7 @@ class albumpassword_event_Core { ->where("albumpassword_idcaches.item_id", "IS NOT", NULL)->close() ->descendants(); - $existing_cacheditem = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->id)->find_all(); + $existing_cacheditem = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->id)->order_by("cache_id")->find_all(); if ((count($existing_cacheditem) == 0) && count($passworded_subitems) == 0) { $menu->get("options_menu") ->append(Menu::factory("dialog") @@ -116,7 +116,7 @@ class albumpassword_event_Core { static function item_created($item) { // Check for any already existing password on parent album(s), if found, generate cache data for the new item. - $existing_password = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->parent_id)->find_all(); + $existing_password = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->parent_id)->order_by("cache_id")->find_all(); if (count($existing_password) > 0) { $new_cachedid = ORM::factory("albumpassword_idcache"); $new_cachedid->password_id = $existing_password[0]->password_id; @@ -130,7 +130,7 @@ class albumpassword_event_Core { db::build()->delete("albumpassword_idcaches")->where("item_id", "=", $item->id)->execute(); // Check for a password on the new parent, generate cache data if necessary. - $existing_password = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->parent_id)->find_all(); + $existing_password = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->parent_id)->order_by("cache_id")->find_all(); if (count($existing_password) > 0) { $new_cachedid = ORM::factory("albumpassword_idcache"); $new_cachedid->password_id = $existing_password[0]->password_id; diff --git a/3.1/modules/albumpassword/helpers/albumpassword_event.php b/3.1/modules/albumpassword/helpers/albumpassword_event.php index cd981af1..0c9210ea 100644 --- a/3.1/modules/albumpassword/helpers/albumpassword_event.php +++ b/3.1/modules/albumpassword/helpers/albumpassword_event.php @@ -86,7 +86,7 @@ class albumpassword_event_Core { ->where("albumpassword_idcaches.item_id", "IS NOT", NULL)->close() ->descendants(); - $existing_cacheditem = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->id)->find_all(); + $existing_cacheditem = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->id)->order_by("cache_id")->find_all(); if ((count($existing_cacheditem) == 0) && count($passworded_subitems) == 0) { $menu->get("options_menu") ->append(Menu::factory("dialog") @@ -116,7 +116,7 @@ class albumpassword_event_Core { static function item_created($item) { // Check for any already existing password on parent album(s), if found, generate cache data for the new item. - $existing_password = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->parent_id)->find_all(); + $existing_password = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->parent_id)->order_by("cache_id")->find_all(); if (count($existing_password) > 0) { $new_cachedid = ORM::factory("albumpassword_idcache"); $new_cachedid->password_id = $existing_password[0]->password_id; @@ -130,7 +130,7 @@ class albumpassword_event_Core { db::build()->delete("albumpassword_idcaches")->where("item_id", "=", $item->id)->execute(); // Check for a password on the new parent, generate cache data if necessary. - $existing_password = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->parent_id)->find_all(); + $existing_password = ORM::factory("albumpassword_idcache")->where("item_id", "=", $item->parent_id)->order_by("cache_id")->find_all(); if (count($existing_password) > 0) { $new_cachedid = ORM::factory("albumpassword_idcache"); $new_cachedid->password_id = $existing_password[0]->password_id; From 782f8372fba26f81d8a4e0b05e39756a7c022a0c Mon Sep 17 00:00:00 2001 From: rWatcher Date: Tue, 8 Feb 2011 15:49:52 -0500 Subject: [PATCH 08/39] Created a maintance task for upgrading from older versions of AlbumPassword. --- .../helpers/albumpassword_task.php | 138 ++++++++++++++++++ .../helpers/albumpassword_task.php | 138 ++++++++++++++++++ 2 files changed, 276 insertions(+) create mode 100644 3.0/modules/albumpassword/helpers/albumpassword_task.php create mode 100644 3.1/modules/albumpassword/helpers/albumpassword_task.php diff --git a/3.0/modules/albumpassword/helpers/albumpassword_task.php b/3.0/modules/albumpassword/helpers/albumpassword_task.php new file mode 100644 index 00000000..b6ea007a --- /dev/null +++ b/3.0/modules/albumpassword/helpers/albumpassword_task.php @@ -0,0 +1,138 @@ +join("albumpassword_idcaches", "items_albumpasswords.id", "albumpassword_idcaches.password_id", "LEFT OUTER") + ->and_where("albumpassword_idcaches.password_id", "IS", NULL)->count_all(); + + return array(Task_Definition::factory() + ->callback("albumpassword_task::update_idcaches") + ->name(t("Rebuild Album Password ID Caches DB")) + ->description(t("Logs the contents of all protected albums into the db.")) + ->severity($bad_albums ? log::WARNING : log::SUCCESS)); + } + + static function update_idcaches($task) { + // Populate the idcaches table with the contents of all protected albums. + + $start = microtime(true); + $total = $task->get("total"); + $existing_passwords = ORM::factory("items_albumpassword")->find_all(); + // If this is the first time this function has been run, + // delete and re-create the idcaches table, and set up + // some initial variables. + if (empty($total)) { + // Delete the idcache table and make a new one. + $db = Database::instance(); + $db->query("DROP TABLE IF EXISTS {albumpassword_idcaches};"); + $db->query("CREATE TABLE IF NOT EXISTS {albumpassword_idcaches} ( + `cache_id` int(9) NOT NULL auto_increment, + `password_id` int(9) NOT NULL, + `item_id` int(9) NOT NULL, + PRIMARY KEY (`cache_id`)) + DEFAULT CHARSET=utf8;"); + + // Set the initial values for all variables. + $task->set("total", count($existing_passwords)); + $total = $task->get("total"); + $task->set("last_album_counter", 0); + $task->set("last_id", 0); + $task->set("completed_albums", 0); + $task->set("completed_items", 0); + $task->set("total_items", 0); + } + + // Retrieve the values for variables from the last time this + // function was run. + $last_album_counter = $task->get("last_album_counter"); + $completed_albums = $task->get("completed_albums"); + $completed_items = $task->get("completed_items"); + $total_items = $task->get("total_items"); + $last_id = $task->get("last_id"); + + // If completed_items is 0, then we're just starting to process this + // album. Add the album to idcaches before adding it's contents. + if ($completed_items == 0) { + // Add the album to the id cache. + $cached_album = ORM::factory("albumpassword_idcache"); + $cached_album->password_id = $existing_passwords[$last_album_counter]->id; + $cached_album->item_id = $existing_passwords[$last_album_counter]->album_id; + $cached_album->save(); + + // Set total_items to the number of items in this album. + $total_items = ORM::factory("item", $existing_passwords[$last_album_counter]->album_id) + ->descendants_count(); + $task->set("total_items", $total_items); + } + + // Add each item in the album to idcaches. + foreach (ORM::factory("item", $existing_passwords[$last_album_counter]->album_id) + ->where("id", ">", $last_id) + ->order_by("id") + ->descendants(100) as $item) { + + $cached_item = ORM::factory("albumpassword_idcache"); + $cached_item->password_id =$existing_passwords[$last_album_counter]->id; + $cached_item->item_id = $item->id; + $cached_item->save(); + + $last_id = $item->id; + $completed_items++; + + // Set a time limit so the script doesn't time out. + if (microtime(true) - $start > 1.5) { + break; + } + } // end foreach + + // If completed_items equals total_items, then we've + // processed everything in the current album. + // Increase variables and set everything up for the + // next album. + if ($completed_items == $total_items) { + $completed_items = 0; + $last_album_counter++; + $completed_albums++; + $last_id = 0; + } + + // Store the current values of the variables for the next + // time this function is called. + $task->set("last_album_counter", $last_album_counter); + $task->set("last_id", $last_id); + $task->set("completed_albums", $completed_albums); + $task->set("completed_items", $completed_items); + + // Display the number of albums that have been completed before exiting. + if ($total == $completed_albums) { + $task->done = true; + $task->state = "success"; + $task->percent_complete = 100; + $task->status = t("Scanning Protected Album $completed_albums of $total"); + } else { + $task->percent_complete = round(100 * $completed / $total); + $task->status = t("Scanning Protected Album $completed_albums of $total -- $completed_items / $total_items files"); + } + } +} diff --git a/3.1/modules/albumpassword/helpers/albumpassword_task.php b/3.1/modules/albumpassword/helpers/albumpassword_task.php new file mode 100644 index 00000000..b6ea007a --- /dev/null +++ b/3.1/modules/albumpassword/helpers/albumpassword_task.php @@ -0,0 +1,138 @@ +join("albumpassword_idcaches", "items_albumpasswords.id", "albumpassword_idcaches.password_id", "LEFT OUTER") + ->and_where("albumpassword_idcaches.password_id", "IS", NULL)->count_all(); + + return array(Task_Definition::factory() + ->callback("albumpassword_task::update_idcaches") + ->name(t("Rebuild Album Password ID Caches DB")) + ->description(t("Logs the contents of all protected albums into the db.")) + ->severity($bad_albums ? log::WARNING : log::SUCCESS)); + } + + static function update_idcaches($task) { + // Populate the idcaches table with the contents of all protected albums. + + $start = microtime(true); + $total = $task->get("total"); + $existing_passwords = ORM::factory("items_albumpassword")->find_all(); + // If this is the first time this function has been run, + // delete and re-create the idcaches table, and set up + // some initial variables. + if (empty($total)) { + // Delete the idcache table and make a new one. + $db = Database::instance(); + $db->query("DROP TABLE IF EXISTS {albumpassword_idcaches};"); + $db->query("CREATE TABLE IF NOT EXISTS {albumpassword_idcaches} ( + `cache_id` int(9) NOT NULL auto_increment, + `password_id` int(9) NOT NULL, + `item_id` int(9) NOT NULL, + PRIMARY KEY (`cache_id`)) + DEFAULT CHARSET=utf8;"); + + // Set the initial values for all variables. + $task->set("total", count($existing_passwords)); + $total = $task->get("total"); + $task->set("last_album_counter", 0); + $task->set("last_id", 0); + $task->set("completed_albums", 0); + $task->set("completed_items", 0); + $task->set("total_items", 0); + } + + // Retrieve the values for variables from the last time this + // function was run. + $last_album_counter = $task->get("last_album_counter"); + $completed_albums = $task->get("completed_albums"); + $completed_items = $task->get("completed_items"); + $total_items = $task->get("total_items"); + $last_id = $task->get("last_id"); + + // If completed_items is 0, then we're just starting to process this + // album. Add the album to idcaches before adding it's contents. + if ($completed_items == 0) { + // Add the album to the id cache. + $cached_album = ORM::factory("albumpassword_idcache"); + $cached_album->password_id = $existing_passwords[$last_album_counter]->id; + $cached_album->item_id = $existing_passwords[$last_album_counter]->album_id; + $cached_album->save(); + + // Set total_items to the number of items in this album. + $total_items = ORM::factory("item", $existing_passwords[$last_album_counter]->album_id) + ->descendants_count(); + $task->set("total_items", $total_items); + } + + // Add each item in the album to idcaches. + foreach (ORM::factory("item", $existing_passwords[$last_album_counter]->album_id) + ->where("id", ">", $last_id) + ->order_by("id") + ->descendants(100) as $item) { + + $cached_item = ORM::factory("albumpassword_idcache"); + $cached_item->password_id =$existing_passwords[$last_album_counter]->id; + $cached_item->item_id = $item->id; + $cached_item->save(); + + $last_id = $item->id; + $completed_items++; + + // Set a time limit so the script doesn't time out. + if (microtime(true) - $start > 1.5) { + break; + } + } // end foreach + + // If completed_items equals total_items, then we've + // processed everything in the current album. + // Increase variables and set everything up for the + // next album. + if ($completed_items == $total_items) { + $completed_items = 0; + $last_album_counter++; + $completed_albums++; + $last_id = 0; + } + + // Store the current values of the variables for the next + // time this function is called. + $task->set("last_album_counter", $last_album_counter); + $task->set("last_id", $last_id); + $task->set("completed_albums", $completed_albums); + $task->set("completed_items", $completed_items); + + // Display the number of albums that have been completed before exiting. + if ($total == $completed_albums) { + $task->done = true; + $task->state = "success"; + $task->percent_complete = 100; + $task->status = t("Scanning Protected Album $completed_albums of $total"); + } else { + $task->percent_complete = round(100 * $completed / $total); + $task->status = t("Scanning Protected Album $completed_albums of $total -- $completed_items / $total_items files"); + } + } +} From e9235ba4c410dce339e362578d450db8d4785023 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Wed, 9 Feb 2011 18:40:32 -0700 Subject: [PATCH 09/39] Initial commit of Twitter module. OAuth access key retrieval and storage is working, posting tweets is not, yet. --- 3.1/modules/twitter/controllers/twitter.php | 235 ++++++++++++++++++ 3.1/modules/twitter/helpers/twitter.php | 122 +++++++++ .../twitter/helpers/twitter_installer.php | 50 ++++ 3 files changed, 407 insertions(+) create mode 100644 3.1/modules/twitter/controllers/twitter.php create mode 100644 3.1/modules/twitter/helpers/twitter.php create mode 100644 3.1/modules/twitter/helpers/twitter_installer.php diff --git a/3.1/modules/twitter/controllers/twitter.php b/3.1/modules/twitter/controllers/twitter.php new file mode 100644 index 00000000..e55ed674 --- /dev/null +++ b/3.1/modules/twitter/controllers/twitter.php @@ -0,0 +1,235 @@ +id; + $token_is_set = $this->_is_token_set($user_id); + + $v = new View("twitter_dialog.html"); + $v->is_registered = twitter::is_registered(); + $v->user_token_set = $token_is_set; + + if ($token_is_set) { + $v->type = $item->type; + $v->title = $item->title; + $v->description = $item->description; + $v->form = $form; + $v->character_count = twitter::$character_count; + } else { + $item_url = urlencode(url::abs_site($item->relative_url_cache)); + $v->user_id = $user_id; + $v->twitter_auth_url = url::site("twitter/redirect?item_url=$item_url"); + } + + print $v; + } + + /** + * Check if current user's Twitter credentials have been stored locally. + * @param int $user_id + * @return boolean + */ + private function _is_token_set($user_id) { + $twitter_user = $this->_get_twitter_user($user_id); + if (!empty($twitter_user->oauth_token) && !empty($twitter_user->oauth_token_secret)) { + return true; + } + return false; + } + + /** + * Get Twitter credentials for the current user. + * @param int $user_id + * @return mixed object|false + */ + private function _get_twitter_user($user_id) { + $twitter_user = ORM::factory("twitter_user")->where("user_id", "=", $user_id)->find(); + if ($twitter_user->loaded()) { + return $twitter_user; + } + return false; + } + + /** + * Verify credentials and redirect based on response from Twitter. + */ + public function callback() { + require_once(MODPATH . "twitter/lib/twitteroauth.php"); + + $consumer_key = module::get_var("twitter", "consumer_key"); + $consumer_secret = module::get_var("twitter", "consumer_secret"); + $oauth_token = Session::instance()->get("twitter_oauth_token"); + $oauth_token_secret = Session::instance()->get("twitter_oauth_token_secret"); + $item_url = Session::instance()->get("twitter_item_redirect"); + + // If the oauth_token is old redirect to the connect page + if (isset($_REQUEST['oauth_token']) && $oauth_token !== $_REQUEST['oauth_token']) { + Session::instance()->set("twitter_oauth_status", "old_token"); + $this->clear_twitter_session(); + url::redirect(url::site("twitter/redirect")); + } + + // Create TwitteroAuth object with app key/secret and token key/secret from default phase + $connection = new TwitterOAuth($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret); + + // Request access tokens from twitter + $access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']); + + // Save the access tokens + Session::instance()->set("twitter_access_token", $access_token); + + // Remove no longer needed request tokens + Session::instance()->delete("twitter_oauth_token"); + Session::instance()->delete("twitter_oauth_token_secret"); + + // If HTTP response is 200 continue otherwise send to connect page to retry + if (200 == $connection->http_code) { + // The user has been verified and the access tokens can be saved for future use + $this->save_twitter_user($access_token); + // Redirect to the tweet form + $item = ORM::factory("item", $item_id); + url::redirect(url::abs_site($item_url)); + } else { + // @todo Log HTTP status for application log and/or error message + $this->clear_twitter_session(); + url::redirect(url::site("twitter/redirect")); + } + } + + /** + * Save or update the current user's Twitter credentials. + * @param array $access_token + * @todo Ensure only one record per twitter_screen_name + */ + function save_twitter_user($access_token) { + $twitter_user = ORM::factory("twitter_user"); + $twitter_user->oauth_token = $access_token["oauth_token"]; + $twitter_user->oauth_token_secret = $access_token["oauth_token_secret"]; + $twitter_user->twitter_user_id = $access_token["user_id"]; + $twitter_user->screen_name = $access_token["screen_name"]; + $twitter_user->user_id = identity::active_user()->id; + $twitter_user->save(); + + message::success(t("Twitter access tokens saved!")); + } + + /** + * Redirect user to Twitter authorization page. + */ + function redirect() { + require_once(MODPATH . "twitter/lib/twitteroauth.php"); + + $consumer_key = module::get_var("twitter", "consumer_key"); + $consumer_secret = module::get_var("twitter", "consumer_secret"); + $oauth_callback = url::abs_site("twitter/callback"); + + // We'll want this after Twitter kicks back to our callback + if (!empty($_GET['item_url'])) { + Session::instance()->set("twitter_item_redirect", $_GET['item_url']); + } + + // Build TwitterOAuth object with client credentials + $connection = new TwitterOAuth($consumer_key, $consumer_secret); + + // Get temporary credentials. + $request_token = $connection->getRequestToken($oauth_callback); + + // Save temporary credentials to session. + Session::instance()->set("twitter_oauth_token", $request_token['oauth_token']); + Session::instance()->set("twitter_oauth_token_secret", $request_token['oauth_token_secret']); + + // If last connection failed don't display authorization link + if (200 == $connection->http_code) { + // Build authorize URL and redirect user to Twitter + $url = $connection->getAuthorizeURL($request_token["oauth_token"]); + url::redirect(url::site($url)); + } else { + // Show notification if something went wrong + message::success(t("Could not connect to Twitter. Refresh the page or try again later.")); + url::redirect(url::site($url)); + } + } + + /** + * Post a status update to Twitter + * @param string $message + */ + function tweet() { + access::verify_csrf(); + require_once(MODPATH . "twitter/lib/twitteroauth.php"); + + $form = twitter::get_tweet_form(); + + $user_id = identity::active_user()->id; + $item_url = url::abs_site($item->relative_url_cache); + $twitter_user = $this->_get_twitter_user($user_id); + $consumer_key = module::get_var("twitter", "consumer_key"); + $consumer_secret = module::get_var("twitter", "consumer_secret"); + + $connection = new TwitterOAuth( + $consumer_key, + $consumer_secret, + $twitter_user["oauth_key"], + $twitter_user["oauth_user"]); + + $connection->post('statuses/update', array('status' => $message)); + + if (200 == $connection->http_code) { + return true; + } else { + // @todo Save tweet with a status of not sent. + return false; + } + + if (request::method() == "post") { + if ($form->validate()) { + $message = $form->twitter_message->tweet->value; + if ($this->post($message, $item)) { + message::success(t("Tweet sent!")); + } else { + message::error(t("Unable to send Tweet. Try again later.")); + } + } + url::redirect(url::abs_site($item->relative_url_cache)); + } + + } + + /** + * Clear Twitter module session variables + */ + function clear_twitter_session() { + Session::instance()->delete("twitter_oauth_token"); + Session::instance()->delete("twitter_oauth_token_secret"); + Session::instance()->delete("twitter_access_token"); + } +} \ No newline at end of file diff --git a/3.1/modules/twitter/helpers/twitter.php b/3.1/modules/twitter/helpers/twitter.php new file mode 100644 index 00000000..4eb67789 --- /dev/null +++ b/3.1/modules/twitter/helpers/twitter.php @@ -0,0 +1,122 @@ + "g-configure-twitter-form")); + + $group_oauth = $form->group("twitter_oauth")->label(t("OAuth Settings")); + $group_oauth->input("consumer_key") + ->label(t("Consumer key")) + ->value(module::get_var("twitter", "consumer_key")); + $group_oauth->input("consumer_secret") + ->label(t("Consumer secret")) + ->value(module::get_var("twitter", "consumer_secret")); + + $group_tweet = $form->group("twitter_message")->label(t("Default Tweet")); + $group_tweet->input("default_tweet") + ->label("Default Tweet") + ->value(module::get_var("twitter", "default_tweet")); + // @todo Add reset default tweet button + + if (module::is_active("bitly")) { + $group_url = $form->group("urls")->label(t("Shorten URLs")); + $group_url->checkbox("shorten_urls") + ->label(t("Shorten URLs automatically with bit.ly")) + ->checked(module::get_var("twitter", "shorten_urls")); + } + + $form->submit("")->value(t("Save")); + return $form; + } + + /** + * + * @param $item + * @return Forge + */ + static function get_tweet_form($item) { + $long_url = url::abs_site($item->relative_url_cache); + $default_tweet = module::get_var("twitter", "default_tweet"); + $tweet = preg_replace("/%type/", $item->type, $default_tweet); + $tweet = preg_replace("/%title/", $item->title, $tweet); + $tweet = preg_replace("/%description/", $item->description, $tweet); + // If bit.ly module's enabled, get the item's URL and shorten it + // @todo Refactor bit.ly module so that it doesn't output a status message when called by other modules + if (module::is_active("bitly") && module::get_var("twitter", "shorten_urls")) { + $url = bitly::shorten_url($item->id); + } else { + $url = url::abs_site($item->relative_url_cache); + } + $tweet = preg_replace("/%url/", $url, $tweet); + $form = new Forge("twitter/tweet", "", "post", array("id" => "g-twitter-form")); + $group = $form->group("twitter_message")->label(t("Compose Tweet")); + $group->textarea("tweet") + ->value($tweet) + ->rules("required") + ->error_messages("required", t("Your tweet cannot be empty!")) + ->id("g-tweet"); + $group->hidden("item_id")->value($item->id); + $form->submit("")->value(t("Tweet")); + return $form; + } + + /** + * Has this Gallery been registered at dev.twitter.com/app? + * @return boolean + */ + static function is_registered() { + $consumer_key = module::get_var("twitter", "consumer_key"); + $consumer_secret = module::get_var("twitter", "consumer_secret"); + if (empty($consumer_key) || empty($consumer_secret)) { + site_status::warning( + t("Twitter module requires attention! Set the consumer key and secret.", + array("url" => html::mark_clean(url::site("admin/twitter")))), + "twitter_config"); + return false; + } else { + site_status::clear("twitter_config"); + return true; + } + } + + /** + * Reset the standard Tweet to the module default + * @return string + */ + static function reset_default_tweet() { + $default_tweet = t("Check out this %type, '%title': %description %url"); + module::set_var("twitter", "default_tweet", $default_tweet); + return $default_tweet; + } + +} diff --git a/3.1/modules/twitter/helpers/twitter_installer.php b/3.1/modules/twitter/helpers/twitter_installer.php new file mode 100644 index 00000000..7a4f77c6 --- /dev/null +++ b/3.1/modules/twitter/helpers/twitter_installer.php @@ -0,0 +1,50 @@ +query("CREATE TABLE {twitter_tweets} ( + `id` int(9) NOT NULL AUTO_INCREMENT, + `created` int(9) NOT NULL, + `item_id` int(9) NOT NULL, + `status` tinyint(1) NOT NULL, + `tweet` varchar(140) NOT NULL, + `user_id` int(9) NOT NULL, + PRIMARY KEY (`id`)) + DEFAULT CHARSET=utf8;"); + Database::instance() + ->query("CREATE TABLE {twitter_users} ( + `id` int(9) NOT NULL AUTO_INCREMENT, + `oauth_token` varchar(64) NOT NULL, + `oauth_token_secret` varchar(64) NOT NULL, + `screen_name` varchar(16) NOT NULL, + `twitter_user_id` int(9) NOT NULL, + `user_id` int(9) NOT NULL, + PRIMARY KEY (`id`)) + DEFAULT CHARSET=utf8;"); + module::set_version("twitter", 1); + twitter::reset_default_tweet(); + } + + static function deactivate() { + site_status::clear("twitter_config"); + } +} From 086e8554e90db559999641faf8d3c5677e62d6f1 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Wed, 9 Feb 2011 18:40:55 -0700 Subject: [PATCH 10/39] Initial commit of Twitter module. OAuth access key retrieval and storage is working, posting tweets is not, yet. --- 3.1/modules/twitter/models/twitter_user.php | 21 ++++++++++++++++++ .../twitter/views/twitter_dialog.html.php | 22 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 3.1/modules/twitter/models/twitter_user.php create mode 100644 3.1/modules/twitter/views/twitter_dialog.html.php diff --git a/3.1/modules/twitter/models/twitter_user.php b/3.1/modules/twitter/models/twitter_user.php new file mode 100644 index 00000000..fee9389f --- /dev/null +++ b/3.1/modules/twitter/models/twitter_user.php @@ -0,0 +1,21 @@ + + +
+

$type, "title"=> $title)) ?>

+ +

+ +

+

Sign in with Twitter

+ +
+ +
+ +
+
+ +
\ No newline at end of file From b7d8647316bb0fdeaa26fa203fc832dcc28e0524 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Wed, 9 Feb 2011 18:45:54 -0700 Subject: [PATCH 11/39] Removed unused class property. --- 3.1/modules/twitter/helpers/twitter.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/3.1/modules/twitter/helpers/twitter.php b/3.1/modules/twitter/helpers/twitter.php index 4eb67789..d0baf3a5 100644 --- a/3.1/modules/twitter/helpers/twitter.php +++ b/3.1/modules/twitter/helpers/twitter.php @@ -23,8 +23,6 @@ class twitter_Core { static $character_count = 140; - //public static $url = "http://twitter.com/home/?status="; - /** * * @return Forge From 00806139bb1ff97414b5a0914438749091795e07 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Sat, 12 Feb 2011 11:43:46 -0700 Subject: [PATCH 12/39] Moved status messages from helper to controller, shouldn't generate them when other modules shorten links, i.e. Twitter, etc. Log bit.ly errors. Added README. --- 3.1/modules/bitly/controllers/bitly.php | 9 ++++++++- 3.1/modules/bitly/helpers/bitly.php | 10 ++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/3.1/modules/bitly/controllers/bitly.php b/3.1/modules/bitly/controllers/bitly.php index 8fe68d0a..cfa615c3 100644 --- a/3.1/modules/bitly/controllers/bitly.php +++ b/3.1/modules/bitly/controllers/bitly.php @@ -33,8 +33,15 @@ class bitly_Controller extends Controller { access::required("view", $item); access::required("edit", $item); - // Get the item's URL and shorten it + // Shorten the item's URL $short_url = bitly::shorten_url($item_id); + + if ($short_url) { + message::success("Item URL shortened to $short_url"); + } else { + + message::error("Unable to shorten " . url::abs_site($item->relative_url_cache)); + } // Redirect back to the item url::redirect(url::abs_site($item->relative_url_cache)); diff --git a/3.1/modules/bitly/helpers/bitly.php b/3.1/modules/bitly/helpers/bitly.php index 526928fd..8ef8391a 100644 --- a/3.1/modules/bitly/helpers/bitly.php +++ b/3.1/modules/bitly/helpers/bitly.php @@ -187,8 +187,9 @@ class bitly_Core { $request = self::_build_http_request('shorten', $parameters); $response = self::_http_post($request, self::$api_host); $json_response = json_decode($response->body[0]); + $status_txt = $json_response->status_txt; - if ('OK' == $json_response->status_txt) { + if ('OK' == $status_txt) { $short_url = $json_response->data->url; // Save the link hash to the database $link = ORM::factory("bitly_link"); @@ -196,14 +197,11 @@ class bitly_Core { $link->hash = $json_response->data->hash; $link->global_hash = $json_response->data->global_hash; $link->save(); - - message::success("$long_url has been shortened to $short_url"); - return $json_response->data->url; } else { - message::error("Unable to shorten $long_url"); - // @todo log the error + $status_code = $json_response->status_code; + log::error("content", "Shortened URL", "Error: $status_code $status_txt item"); return false; } } From f37073b0c1dded53c800af969191cf4efd600dcf Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Sat, 12 Feb 2011 11:49:20 -0700 Subject: [PATCH 13/39] Added README --- 3.1/modules/bitly/README | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 3.1/modules/bitly/README diff --git a/3.1/modules/bitly/README b/3.1/modules/bitly/README new file mode 100644 index 00000000..d89fe4fe --- /dev/null +++ b/3.1/modules/bitly/README @@ -0,0 +1,12 @@ +ABOUT: +Shorten Gallery's album and item links using bit.ly's URL shortening service. + +INSTALLATION AND CONFIGURATION INSTRUCTIONS: +http://codex.gallery2.org/Gallery3:Modules:bitly + +QUESTIONS, COMMENTS? +http://2tbsp.com/content/bitly-module-gallery-3 + +ROADMAP: +- Provide multi-user support. +- Display shortened link statistics (clicks, etc.) From e40d98ec8e5f7a263cbb8defa145c1c57d95956d Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Sat, 12 Feb 2011 11:59:12 -0700 Subject: [PATCH 14/39] White-space and docblock updates. --- 3.1/modules/bitly/controllers/bitly.php | 1 - 3.1/modules/bitly/helpers/bitly.php | 19 ++++++++----------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/3.1/modules/bitly/controllers/bitly.php b/3.1/modules/bitly/controllers/bitly.php index cfa615c3..7a0b53c0 100644 --- a/3.1/modules/bitly/controllers/bitly.php +++ b/3.1/modules/bitly/controllers/bitly.php @@ -39,7 +39,6 @@ class bitly_Controller extends Controller { if ($short_url) { message::success("Item URL shortened to $short_url"); } else { - message::error("Unable to shorten " . url::abs_site($item->relative_url_cache)); } diff --git a/3.1/modules/bitly/helpers/bitly.php b/3.1/modules/bitly/helpers/bitly.php index 8ef8391a..f006362e 100644 --- a/3.1/modules/bitly/helpers/bitly.php +++ b/3.1/modules/bitly/helpers/bitly.php @@ -61,8 +61,8 @@ class bitly_Core { /** * Check a login and an API Key against bit.ly to make sure they're valid - * @param string $login the login - * @param string $api_key the API key + * @param string $login bit.ly login + * @param string $api_key bit.ly API key * @return boolean */ static function validate_config($login, $api_key) { @@ -115,15 +115,15 @@ class bitly_Core { } /** - * - * @param $type - * @param $parameters + * Assemble a bitly API request + * @param string $type Type of API request, ex. shorten + * @param array $params Query string key/value pairs * @return string */ - private static function _build_http_request($type, $parameters) { + private static function _build_http_request($type, $params) { $http_request = ''; - if (!empty($type) && count($parameters)) { - foreach($parameters as $k => $v) { + if (!empty($type) && count($params)) { + foreach($params as $k => $v) { $query_string[] = "$k=" . urlencode($v); } $path = "/" . self::$api_version . "/$type?" . implode('&', $query_string); @@ -175,7 +175,6 @@ class bitly_Core { $item = ORM::factory("item", $item_id); $short_url = ''; $long_url = url::abs_site($item->relative_url_cache); - $parameters = array( "login" => module::get_var("bitly", "login"), 'apiKey' => module::get_var("bitly", "api_key"), @@ -183,7 +182,6 @@ class bitly_Core { 'domain' => module::get_var("bitly", "domain"), 'format' => $format, ); - $request = self::_build_http_request('shorten', $parameters); $response = self::_http_post($request, self::$api_host); $json_response = json_decode($response->body[0]); @@ -198,7 +196,6 @@ class bitly_Core { $link->global_hash = $json_response->data->global_hash; $link->save(); return $json_response->data->url; - } else { $status_code = $json_response->status_code; log::error("content", "Shortened URL", "Error: $status_code $status_txt item"); From bdad42535fc33f6995bcea43cbbf2453653949a4 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Sat, 12 Feb 2011 17:17:05 -0700 Subject: [PATCH 15/39] Tweets are now being sent, but the page redirect/dialog is not handled properly on success, or failure. Added a reset the default tweet to the default tweet value to the admin form. --- 3.1/modules/twitter/controllers/twitter.php | 68 +++++++++---------- 3.1/modules/twitter/helpers/twitter.php | 33 +++------ .../twitter/views/admin_twitter.html.php | 4 +- 3 files changed, 47 insertions(+), 58 deletions(-) diff --git a/3.1/modules/twitter/controllers/twitter.php b/3.1/modules/twitter/controllers/twitter.php index e55ed674..1eee87a9 100644 --- a/3.1/modules/twitter/controllers/twitter.php +++ b/3.1/modules/twitter/controllers/twitter.php @@ -183,45 +183,45 @@ class Twitter_Controller extends Controller { * Post a status update to Twitter * @param string $message */ - function tweet() { + public function tweet($item_id) { access::verify_csrf(); - require_once(MODPATH . "twitter/lib/twitteroauth.php"); + + $item = ORM::factory("item", $item_id); + $form = twitter::get_tweet_form($item); + + if ($form->validate()) { + echo "Validated!"; + $user_id = identity::active_user()->id; + $item_url = url::abs_site($item->relative_url_cache); + $twitter_user = $this->_get_twitter_user($user_id); + $consumer_key = module::get_var("twitter", "consumer_key"); + $consumer_secret = module::get_var("twitter", "consumer_secret"); - $form = twitter::get_tweet_form(); + require_once(MODPATH . "twitter/lib/twitteroauth.php"); + + $connection = new TwitterOAuth( + $consumer_key, + $consumer_secret, + $twitter_user->oauth_token, + $twitter_user->oauth_token_secret); + + $message = $form->twitter_message->tweet->value; + $connection->post('statuses/update', array('status' => $message)); - $user_id = identity::active_user()->id; - $item_url = url::abs_site($item->relative_url_cache); - $twitter_user = $this->_get_twitter_user($user_id); - $consumer_key = module::get_var("twitter", "consumer_key"); - $consumer_secret = module::get_var("twitter", "consumer_secret"); - - $connection = new TwitterOAuth( - $consumer_key, - $consumer_secret, - $twitter_user["oauth_key"], - $twitter_user["oauth_user"]); - - $connection->post('statuses/update', array('status' => $message)); - - if (200 == $connection->http_code) { - return true; + if (200 == $connection->http_code) { + message::success(t("Tweet sent!")); + //url::redirect(url::abs_site($item->relative_url_cache)); + //json::reply(array("result" => "success")); + json::reply(array("result" => "success", "location" => $item->url())); + } else { + message::error(t("Unable to send Tweet. Try again later.")); + json::reply(array("result" => "error", "html" => (string)$form)); + // @todo Save tweet with a status of not sent. + } } else { - // @todo Save tweet with a status of not sent. - return false; + echo "validation failed"; + json::reply(array("result" => "error", "html" => (string)$form)); } - - if (request::method() == "post") { - if ($form->validate()) { - $message = $form->twitter_message->tweet->value; - if ($this->post($message, $item)) { - message::success(t("Tweet sent!")); - } else { - message::error(t("Unable to send Tweet. Try again later.")); - } - } - url::redirect(url::abs_site($item->relative_url_cache)); - } - } /** diff --git a/3.1/modules/twitter/helpers/twitter.php b/3.1/modules/twitter/helpers/twitter.php index d0baf3a5..f222c170 100644 --- a/3.1/modules/twitter/helpers/twitter.php +++ b/3.1/modules/twitter/helpers/twitter.php @@ -24,10 +24,9 @@ class twitter_Core { static $character_count = 140; /** - * - * @return Forge + * Get module configure form + * @return Forge * @todo Set global Twitter account - * @todo Default tweet message */ static function get_configure_form() { $form = new Forge("admin/twitter", "", "post", array("id" => "g-configure-twitter-form")); @@ -42,9 +41,11 @@ class twitter_Core { $group_tweet = $form->group("twitter_message")->label(t("Default Tweet")); $group_tweet->input("default_tweet") - ->label("Default Tweet") + ->label(t("Default Tweet")) ->value(module::get_var("twitter", "default_tweet")); - // @todo Add reset default tweet button + $group_tweet->checkbox("reset_tweet") + ->label(t("Reset to default on save")) + ->value(1); if (module::is_active("bitly")) { $group_url = $form->group("urls")->label(t("Shorten URLs")); @@ -52,14 +53,13 @@ class twitter_Core { ->label(t("Shorten URLs automatically with bit.ly")) ->checked(module::get_var("twitter", "shorten_urls")); } - $form->submit("")->value(t("Save")); return $form; } /** - * - * @param $item + * Get tweet form + * @param object $item * @return Forge */ static function get_tweet_form($item) { @@ -69,21 +69,20 @@ class twitter_Core { $tweet = preg_replace("/%title/", $item->title, $tweet); $tweet = preg_replace("/%description/", $item->description, $tweet); // If bit.ly module's enabled, get the item's URL and shorten it - // @todo Refactor bit.ly module so that it doesn't output a status message when called by other modules - if (module::is_active("bitly") && module::get_var("twitter", "shorten_urls")) { + if (!empty($item->id) && module::is_active("bitly") && module::get_var("twitter", "shorten_urls")) { $url = bitly::shorten_url($item->id); } else { $url = url::abs_site($item->relative_url_cache); } $tweet = preg_replace("/%url/", $url, $tweet); - $form = new Forge("twitter/tweet", "", "post", array("id" => "g-twitter-form")); + + $form = new Forge("twitter/tweet/$item->id", "", "post", array("id" => "g-twitter-tweet-form")); $group = $form->group("twitter_message")->label(t("Compose Tweet")); $group->textarea("tweet") ->value($tweet) ->rules("required") ->error_messages("required", t("Your tweet cannot be empty!")) ->id("g-tweet"); - $group->hidden("item_id")->value($item->id); $form->submit("")->value(t("Tweet")); return $form; } @@ -107,14 +106,4 @@ class twitter_Core { } } - /** - * Reset the standard Tweet to the module default - * @return string - */ - static function reset_default_tweet() { - $default_tweet = t("Check out this %type, '%title': %description %url"); - module::set_var("twitter", "default_tweet", $default_tweet); - return $default_tweet; - } - } diff --git a/3.1/modules/twitter/views/admin_twitter.html.php b/3.1/modules/twitter/views/admin_twitter.html.php index c70c2f46..807a72df 100644 --- a/3.1/modules/twitter/views/admin_twitter.html.php +++ b/3.1/modules/twitter/views/admin_twitter.html.php @@ -16,8 +16,8 @@

-

Twitter application settings.", +

Twitter application settings, if necessary.", array("twitter_apps" => "http://dev.twitter.com/apps")) ?>

bit.ly module to shorten From 815cbd4234651d94a22a0e7c13064c6dc38a8a12 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Sat, 12 Feb 2011 17:42:37 -0700 Subject: [PATCH 16/39] Added a reset the default tweet to the default tweet value to the admin form. --- .../twitter/controllers/admin_twitter.php | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/3.1/modules/twitter/controllers/admin_twitter.php b/3.1/modules/twitter/controllers/admin_twitter.php index b2f61ab8..a65168fb 100644 --- a/3.1/modules/twitter/controllers/admin_twitter.php +++ b/3.1/modules/twitter/controllers/admin_twitter.php @@ -19,9 +19,16 @@ */ class Admin_Twitter_Controller extends Admin_Controller { + public $default_tweet; + + function __construct() { + parent::__construct(); + $this->default_tweet = t("Check out this %type, '%title': %description %url"); + } + /** * bit.ly module's settings - * @todo Create/get and display the shortened value for this Gallery's root album (home page) + * @todo Show default tweet value after resetting it! */ public function index() { $form = twitter::get_configure_form(); @@ -30,7 +37,13 @@ class Admin_Twitter_Controller extends Admin_Controller { if ($form->validate()) { $consumer_key = $form->twitter_oauth->consumer_key->value; $consumer_secret = $form->twitter_oauth->consumer_secret->value; - $default_tweet = $form->twitter_message->default_tweet->value; + $reset_tweet = $form->twitter_message->reset_tweet->value; + if ($reset_tweet) { + $default_tweet = $this->default_tweet; + $form->twitter_message->default_tweet->value = $this->default_tweet; + } else { + $default_tweet = $form->twitter_message->default_tweet->value; + } $shorten_urls = $form->urls->shorten_urls->value; module::set_var("twitter", "consumer_key", $consumer_key); From 31b9f57a090af3df51b46b0c0d5e02a8766d09f7 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Sat, 12 Feb 2011 18:26:56 -0700 Subject: [PATCH 17/39] Don't show Tweet this menu items if the Twitter consumer key and secret are not sent. --- 3.1/modules/twitter/helpers/twitter_event.php | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/3.1/modules/twitter/helpers/twitter_event.php b/3.1/modules/twitter/helpers/twitter_event.php index eabb047e..37c923a9 100644 --- a/3.1/modules/twitter/helpers/twitter_event.php +++ b/3.1/modules/twitter/helpers/twitter_event.php @@ -29,22 +29,25 @@ class twitter_event_Core { static function site_menu($menu, $theme) { $item = $theme->item(); - - $menu->get("options_menu") - ->append(Menu::factory("dialog") - ->id("twitter") - ->label(t("Share on Twitter")) - ->css_id("g-twitter-link") - ->url(url::site("twitter/dialog/{$item->id}"))); + if (twitter::is_registered()) { + $menu->get("options_menu") + ->append(Menu::factory("dialog") + ->id("twitter") + ->label(t("Share on Twitter")) + ->css_id("g-twitter-link") + ->url(url::site("twitter/dialog/{$item->id}"))); + } } static function context_menu($menu, $theme, $item) { - $menu->get("options_menu") - ->append(Menu::factory("dialog") - ->id("twitter") - ->label(t("Share on Twitter")) - ->css_class("ui-icon-link g-twitter-share") - ->url(url::site("twitter/dialog/{$item->id}"))); + if (twitter::is_registered()) { + $menu->get("options_menu") + ->append(Menu::factory("dialog") + ->id("twitter") + ->label(t("Share on Twitter")) + ->css_class("ui-icon-link g-twitter-share") + ->url(url::site("twitter/dialog/{$item->id}"))); + } } } From 8eab4773677f85bdc42634f3e550540e849ae04a Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Sat, 12 Feb 2011 19:00:17 -0700 Subject: [PATCH 18/39] Save tweets sent successfully, and those which weren't sent. --- 3.1/modules/twitter/controllers/twitter.php | 34 ++++++++++++++++----- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/3.1/modules/twitter/controllers/twitter.php b/3.1/modules/twitter/controllers/twitter.php index 1eee87a9..36cbb722 100644 --- a/3.1/modules/twitter/controllers/twitter.php +++ b/3.1/modules/twitter/controllers/twitter.php @@ -179,6 +179,24 @@ class Twitter_Controller extends Controller { } } + /** + * Save tweets sent and those not sent because of Twitter API issues + * @param integer $item_id + * @param string $tweet The tweet sent, or the tweet that couldn't be sent + * @param boolean $status 1 for success and 0 for not sent + */ + public function save($item_id, $tweet, $status) { + if (!empty($item_id) && !empty($tweet) && !empty($status)) { + $t = ORM::factory("twitter_tweet"); + $t->created = time(); + $t->item_id = $item_id; + $t->tweet = $tweet; + $t->status = $status; + $t->user_id = identity::active_user()->id; + $t->save(); + } + } + /** * Post a status update to Twitter * @param string $message @@ -190,10 +208,8 @@ class Twitter_Controller extends Controller { $form = twitter::get_tweet_form($item); if ($form->validate()) { - echo "Validated!"; - $user_id = identity::active_user()->id; $item_url = url::abs_site($item->relative_url_cache); - $twitter_user = $this->_get_twitter_user($user_id); + $twitter_user = $this->_get_twitter_user(identity::active_user()->id); $consumer_key = module::get_var("twitter", "consumer_key"); $consumer_secret = module::get_var("twitter", "consumer_secret"); @@ -213,11 +229,15 @@ class Twitter_Controller extends Controller { //url::redirect(url::abs_site($item->relative_url_cache)); //json::reply(array("result" => "success")); json::reply(array("result" => "success", "location" => $item->url())); + $status = 1; } else { - message::error(t("Unable to send Tweet. Try again later.")); - json::reply(array("result" => "error", "html" => (string)$form)); - // @todo Save tweet with a status of not sent. - } + message::error(t("Unable to send Tweet. Your message has been saved. Please try again later.")); + json::reply(array("result" => "error", "location" => $item->url())); + $status = 0; + // @todo Log Twitter error response + } + $this->save($item_id, $message, $status); + } else { echo "validation failed"; json::reply(array("result" => "error", "html" => (string)$form)); From 5c3e9690dfc146a7b70926d23ac2b6e24497c3e2 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Sun, 13 Feb 2011 12:26:19 -0700 Subject: [PATCH 19/39] Store Twitter status id. --- 3.1/modules/twitter/helpers/twitter_installer.php | 1 + 1 file changed, 1 insertion(+) diff --git a/3.1/modules/twitter/helpers/twitter_installer.php b/3.1/modules/twitter/helpers/twitter_installer.php index 7a4f77c6..8cf4363c 100644 --- a/3.1/modules/twitter/helpers/twitter_installer.php +++ b/3.1/modules/twitter/helpers/twitter_installer.php @@ -26,6 +26,7 @@ class twitter_installer { `created` int(9) NOT NULL, `item_id` int(9) NOT NULL, `status` tinyint(1) NOT NULL, + `twitter_id` decimal(20,0) NULL, `tweet` varchar(140) NOT NULL, `user_id` int(9) NOT NULL, PRIMARY KEY (`id`)) From 1234f8c3ff5a70f14d2a5d1e70153e36ec11ecc0 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Sun, 13 Feb 2011 13:11:42 -0700 Subject: [PATCH 20/39] Save successful and failed Tweets. Load latest failed tweet for an item on subsequent attempts. Delete failed tweets for an item once a tweet is sent for that item successfully. Code cleanup and organization updates. --- 3.1/modules/twitter/controllers/twitter.php | 253 +++++++++++--------- 3.1/modules/twitter/helpers/twitter.php | 31 ++- 2 files changed, 170 insertions(+), 114 deletions(-) diff --git a/3.1/modules/twitter/controllers/twitter.php b/3.1/modules/twitter/controllers/twitter.php index 36cbb722..6804ff6a 100644 --- a/3.1/modules/twitter/controllers/twitter.php +++ b/3.1/modules/twitter/controllers/twitter.php @@ -20,6 +20,52 @@ class Twitter_Controller extends Controller { + /** + * Verify credentials and redirect based on response from Twitter. + */ + public function callback() { + require_once(MODPATH . "twitter/lib/twitteroauth.php"); + + $consumer_key = module::get_var("twitter", "consumer_key"); + $consumer_secret = module::get_var("twitter", "consumer_secret"); + $oauth_token = Session::instance()->get("twitter_oauth_token"); + $oauth_token_secret = Session::instance()->get("twitter_oauth_token_secret"); + $item_url = Session::instance()->get("twitter_item_redirect"); + + // If the oauth_token is old redirect to the connect page + if (isset($_REQUEST['oauth_token']) && $oauth_token !== $_REQUEST['oauth_token']) { + Session::instance()->set("twitter_oauth_status", "old_token"); + $this->_clear_session(); + url::redirect(url::site("twitter/redirect")); + } + + // Create TwitteroAuth object with app key/secret and token key/secret from default phase + $connection = new TwitterOAuth($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret); + + // Request access tokens from twitter + $access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']); + + // Save the access tokens + Session::instance()->set("twitter_access_token", $access_token); + + // Remove no longer needed request tokens + Session::instance()->delete("twitter_oauth_token"); + Session::instance()->delete("twitter_oauth_token_secret"); + + // If HTTP response is 200 continue otherwise send to connect page to retry + if (200 == $connection->http_code) { + // The user has been verified and the access tokens can be saved for future use + $this->save_user($access_token); + // Redirect to the tweet form + $item = ORM::factory("item", $item_id); + url::redirect(url::abs_site($item_url)); + } else { + // @todo Log HTTP status for application log and/or error message + $this->_clear_session(); + url::redirect(url::site("twitter/redirect")); + } + } + /** * Display Twitter status dialog. * @param int $item_id @@ -49,99 +95,9 @@ class Twitter_Controller extends Controller { $v->user_id = $user_id; $v->twitter_auth_url = url::site("twitter/redirect?item_url=$item_url"); } - print $v; } - /** - * Check if current user's Twitter credentials have been stored locally. - * @param int $user_id - * @return boolean - */ - private function _is_token_set($user_id) { - $twitter_user = $this->_get_twitter_user($user_id); - if (!empty($twitter_user->oauth_token) && !empty($twitter_user->oauth_token_secret)) { - return true; - } - return false; - } - - /** - * Get Twitter credentials for the current user. - * @param int $user_id - * @return mixed object|false - */ - private function _get_twitter_user($user_id) { - $twitter_user = ORM::factory("twitter_user")->where("user_id", "=", $user_id)->find(); - if ($twitter_user->loaded()) { - return $twitter_user; - } - return false; - } - - /** - * Verify credentials and redirect based on response from Twitter. - */ - public function callback() { - require_once(MODPATH . "twitter/lib/twitteroauth.php"); - - $consumer_key = module::get_var("twitter", "consumer_key"); - $consumer_secret = module::get_var("twitter", "consumer_secret"); - $oauth_token = Session::instance()->get("twitter_oauth_token"); - $oauth_token_secret = Session::instance()->get("twitter_oauth_token_secret"); - $item_url = Session::instance()->get("twitter_item_redirect"); - - // If the oauth_token is old redirect to the connect page - if (isset($_REQUEST['oauth_token']) && $oauth_token !== $_REQUEST['oauth_token']) { - Session::instance()->set("twitter_oauth_status", "old_token"); - $this->clear_twitter_session(); - url::redirect(url::site("twitter/redirect")); - } - - // Create TwitteroAuth object with app key/secret and token key/secret from default phase - $connection = new TwitterOAuth($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret); - - // Request access tokens from twitter - $access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']); - - // Save the access tokens - Session::instance()->set("twitter_access_token", $access_token); - - // Remove no longer needed request tokens - Session::instance()->delete("twitter_oauth_token"); - Session::instance()->delete("twitter_oauth_token_secret"); - - // If HTTP response is 200 continue otherwise send to connect page to retry - if (200 == $connection->http_code) { - // The user has been verified and the access tokens can be saved for future use - $this->save_twitter_user($access_token); - // Redirect to the tweet form - $item = ORM::factory("item", $item_id); - url::redirect(url::abs_site($item_url)); - } else { - // @todo Log HTTP status for application log and/or error message - $this->clear_twitter_session(); - url::redirect(url::site("twitter/redirect")); - } - } - - /** - * Save or update the current user's Twitter credentials. - * @param array $access_token - * @todo Ensure only one record per twitter_screen_name - */ - function save_twitter_user($access_token) { - $twitter_user = ORM::factory("twitter_user"); - $twitter_user->oauth_token = $access_token["oauth_token"]; - $twitter_user->oauth_token_secret = $access_token["oauth_token_secret"]; - $twitter_user->twitter_user_id = $access_token["user_id"]; - $twitter_user->screen_name = $access_token["screen_name"]; - $twitter_user->user_id = identity::active_user()->id; - $twitter_user->save(); - - message::success(t("Twitter access tokens saved!")); - } - /** * Redirect user to Twitter authorization page. */ @@ -182,24 +138,42 @@ class Twitter_Controller extends Controller { /** * Save tweets sent and those not sent because of Twitter API issues * @param integer $item_id - * @param string $tweet The tweet sent, or the tweet that couldn't be sent - * @param boolean $status 1 for success and 0 for not sent + * @param object $tweet The tweet sent, or the tweet that couldn't be sent */ - public function save($item_id, $tweet, $status) { - if (!empty($item_id) && !empty($tweet) && !empty($status)) { + public function save_tweet($tweet) { + if (!empty($tweet->item_id) && !empty($tweet->tweet) && !empty($tweet->status)) { $t = ORM::factory("twitter_tweet"); $t->created = time(); - $t->item_id = $item_id; - $t->tweet = $tweet; - $t->status = $status; + $t->item_id = $tweet->item_id; + $t->twitter_id = $tweet->twitter_id; + $t->tweet = $tweet->tweet; + $t->status = $tweet->status; $t->user_id = identity::active_user()->id; $t->save(); } } + /** + * Save or update the current user's Twitter credentials. + * @param array $access_token + * @todo Ensure only one record per twitter_screen_name + */ + function save_user($access_token) { + $u = ORM::factory("twitter_user"); + $u->oauth_token = $access_token["oauth_token"]; + $u->oauth_token_secret = $access_token["oauth_token_secret"]; + $u->twitter_user_id = $access_token["user_id"]; + $u->screen_name = $access_token["screen_name"]; + $u->user_id = identity::active_user()->id; + $u->save(); + + message::success(t("Twitter access tokens saved!")); + } + /** * Post a status update to Twitter * @param string $message + * @todo Update previously failed tweet, if one exists */ public function tweet($item_id) { access::verify_csrf(); @@ -209,7 +183,7 @@ class Twitter_Controller extends Controller { if ($form->validate()) { $item_url = url::abs_site($item->relative_url_cache); - $twitter_user = $this->_get_twitter_user(identity::active_user()->id); + $u = $this->_get_twitter_user(identity::active_user()->id); $consumer_key = module::get_var("twitter", "consumer_key"); $consumer_secret = module::get_var("twitter", "consumer_secret"); @@ -218,38 +192,93 @@ class Twitter_Controller extends Controller { $connection = new TwitterOAuth( $consumer_key, $consumer_secret, - $twitter_user->oauth_token, - $twitter_user->oauth_token_secret); + $u->oauth_token, + $u->oauth_token_secret); $message = $form->twitter_message->tweet->value; - $connection->post('statuses/update', array('status' => $message)); + $response = $connection->post('statuses/update', array('status' => $message)); if (200 == $connection->http_code) { - message::success(t("Tweet sent!")); - //url::redirect(url::abs_site($item->relative_url_cache)); - //json::reply(array("result" => "success")); - json::reply(array("result" => "success", "location" => $item->url())); $status = 1; + message::success(t("Tweet sent!")); + json::reply(array("result" => "success", "location" => $item->url())); } else { - message::error(t("Unable to send Tweet. Your message has been saved. Please try again later.")); - json::reply(array("result" => "error", "location" => $item->url())); $status = 0; - // @todo Log Twitter error response + log::error("content", "Twitter", "Unable to sent tweet, response code: " . $connection->http_code); + message::error(t("Unable to send Tweet. Your message has been saved. Please try again later.")); + json::reply(array("result" => "error", "html" => (string)$form)); } - $this->save($item_id, $message, $status); + $tweet->item_id = $item_id; + $tweet->twitter_id = $response->id; + $tweet->tweet = $message; + $tweet->status = $status; + + $this->save_tweet($tweet); + $this->_delete_failed($item_id); } else { - echo "validation failed"; json::reply(array("result" => "error", "html" => (string)$form)); } } + /** + * + * @param $tweet + */ + function update_tweet($tweet) { + + } + /** * Clear Twitter module session variables */ - function clear_twitter_session() { + private function _clear_session() { Session::instance()->delete("twitter_oauth_token"); Session::instance()->delete("twitter_oauth_token_secret"); Session::instance()->delete("twitter_access_token"); } -} \ No newline at end of file + + /** + * Delete all failed tweets by the current user for an item + * @param integer $item_id + * @todo Not implemented + */ + private function _delete_failed($item_id) { + if (is_numeric($item_id)) { + $user_id = identity::active_user()->id; + $result = db::build() + ->delete("twitter_tweets") + ->where("user_id", "=", $user_id) + ->where("item_id", "=", $item_id) + ->where("status", "=", 0) + ->execute(); + } + } + + /** + * Get Twitter credentials for the current user. + * @param int $user_id + * @return mixed object|false + */ + private function _get_twitter_user($user_id) { + $twitter_user = ORM::factory("twitter_user")->where("user_id", "=", $user_id)->find(); + if ($twitter_user->loaded()) { + return $twitter_user; + } + return false; + } + + /** + * Check if current user's Twitter credentials have been stored locally. + * @param int $user_id + * @return boolean + */ + private function _is_token_set($user_id) { + $twitter_user = $this->_get_twitter_user($user_id); + if (!empty($twitter_user->oauth_token) && !empty($twitter_user->oauth_token_secret)) { + return true; + } + return false; + } + +} diff --git a/3.1/modules/twitter/helpers/twitter.php b/3.1/modules/twitter/helpers/twitter.php index f222c170..f523dd3f 100644 --- a/3.1/modules/twitter/helpers/twitter.php +++ b/3.1/modules/twitter/helpers/twitter.php @@ -60,11 +60,18 @@ class twitter_Core { /** * Get tweet form * @param object $item - * @return Forge + * @return Forge + * @todo Load previously failed tweet for the current user for this item */ static function get_tweet_form($item) { $long_url = url::abs_site($item->relative_url_cache); - $default_tweet = module::get_var("twitter", "default_tweet"); + // Check for saved tweets for this user and item + $saved_tweet = self::get_failed($item->id); + if ($saved_tweet) { + $default_tweet = $saved_tweet; + } else { + $default_tweet = module::get_var("twitter", "default_tweet"); + } $tweet = preg_replace("/%type/", $item->type, $default_tweet); $tweet = preg_replace("/%title/", $item->title, $tweet); $tweet = preg_replace("/%description/", $item->description, $tweet); @@ -87,6 +94,26 @@ class twitter_Core { return $form; } + /** + * Get the most recent failed tweet for an item + * @param integer $item_id + * @return mixed object|false + * @todo Not implemented + */ + function get_failed($item_id) { + $user_id = identity::active_user()->id; + $t = ORM::factory("twitter_tweet") + ->where("item_id", "=", $item_id) + ->where("user_id", "=", $user_id) + ->where("status", "=", 0) + ->find(); + if ($t->loaded()) { + return $t->tweet; + } else { + return false; + } + } + /** * Has this Gallery been registered at dev.twitter.com/app? * @return boolean From b8d92a59af828a6a4fff11329fa65711d422466d Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Sun, 13 Feb 2011 13:53:39 -0700 Subject: [PATCH 21/39] Tweets table updates. Dropped 'status', instead look for empty twitter_id to indicate whether a tweet was sent successfully. Also changed 'created' to 'sent' and only set it after a tweet is successfully sent. --- 3.1/modules/twitter/controllers/twitter.php | 117 ++++++++---------- 3.1/modules/twitter/helpers/twitter.php | 3 +- .../twitter/helpers/twitter_installer.php | 5 +- 3 files changed, 58 insertions(+), 67 deletions(-) diff --git a/3.1/modules/twitter/controllers/twitter.php b/3.1/modules/twitter/controllers/twitter.php index 6804ff6a..8744d1c0 100644 --- a/3.1/modules/twitter/controllers/twitter.php +++ b/3.1/modules/twitter/controllers/twitter.php @@ -54,13 +54,11 @@ class Twitter_Controller extends Controller { // If HTTP response is 200 continue otherwise send to connect page to retry if (200 == $connection->http_code) { - // The user has been verified and the access tokens can be saved for future use - $this->save_user($access_token); - // Redirect to the tweet form + $this->_save_user($access_token); $item = ORM::factory("item", $item_id); url::redirect(url::abs_site($item_url)); } else { - // @todo Log HTTP status for application log and/or error message + log::error("content", "Twitter", "Unable to retrieve user access token: " . $connection->http_code); $this->_clear_session(); url::redirect(url::site("twitter/redirect")); } @@ -101,7 +99,7 @@ class Twitter_Controller extends Controller { /** * Redirect user to Twitter authorization page. */ - function redirect() { + public function redirect() { require_once(MODPATH . "twitter/lib/twitteroauth.php"); $consumer_key = module::get_var("twitter", "consumer_key"); @@ -135,45 +133,11 @@ class Twitter_Controller extends Controller { } } - /** - * Save tweets sent and those not sent because of Twitter API issues - * @param integer $item_id - * @param object $tweet The tweet sent, or the tweet that couldn't be sent - */ - public function save_tweet($tweet) { - if (!empty($tweet->item_id) && !empty($tweet->tweet) && !empty($tweet->status)) { - $t = ORM::factory("twitter_tweet"); - $t->created = time(); - $t->item_id = $tweet->item_id; - $t->twitter_id = $tweet->twitter_id; - $t->tweet = $tweet->tweet; - $t->status = $tweet->status; - $t->user_id = identity::active_user()->id; - $t->save(); - } - } - - /** - * Save or update the current user's Twitter credentials. - * @param array $access_token - * @todo Ensure only one record per twitter_screen_name - */ - function save_user($access_token) { - $u = ORM::factory("twitter_user"); - $u->oauth_token = $access_token["oauth_token"]; - $u->oauth_token_secret = $access_token["oauth_token_secret"]; - $u->twitter_user_id = $access_token["user_id"]; - $u->screen_name = $access_token["screen_name"]; - $u->user_id = identity::active_user()->id; - $u->save(); - - message::success(t("Twitter access tokens saved!")); - } - /** * Post a status update to Twitter - * @param string $message + * @param int $item_id * @todo Update previously failed tweet, if one exists + * @todo Display errors in Tweet dialog */ public function tweet($item_id) { access::verify_csrf(); @@ -183,7 +147,7 @@ class Twitter_Controller extends Controller { if ($form->validate()) { $item_url = url::abs_site($item->relative_url_cache); - $u = $this->_get_twitter_user(identity::active_user()->id); + $user = $this->_get_twitter_user(identity::active_user()->id); $consumer_key = module::get_var("twitter", "consumer_key"); $consumer_secret = module::get_var("twitter", "consumer_secret"); @@ -192,28 +156,25 @@ class Twitter_Controller extends Controller { $connection = new TwitterOAuth( $consumer_key, $consumer_secret, - $u->oauth_token, - $u->oauth_token_secret); + $user->oauth_token, + $user->oauth_token_secret); $message = $form->twitter_message->tweet->value; $response = $connection->post('statuses/update', array('status' => $message)); if (200 == $connection->http_code) { - $status = 1; message::success(t("Tweet sent!")); json::reply(array("result" => "success", "location" => $item->url())); } else { - $status = 0; - log::error("content", "Twitter", "Unable to sent tweet, response code: " . $connection->http_code); + log::error("content", "Twitter", "Unable to send tweet: " . $connection->http_code); message::error(t("Unable to send Tweet. Your message has been saved. Please try again later.")); json::reply(array("result" => "error", "html" => (string)$form)); } $tweet->item_id = $item_id; - $tweet->twitter_id = $response->id; + (!empty($response->id)) ? $tweet->twitter_id = $response->id : $tweet->twitter_id = NULL; $tweet->tweet = $message; - $tweet->status = $status; - $this->save_tweet($tweet); + $this->_save_tweet($tweet); $this->_delete_failed($item_id); } else { @@ -221,14 +182,6 @@ class Twitter_Controller extends Controller { } } - /** - * - * @param $tweet - */ - function update_tweet($tweet) { - - } - /** * Clear Twitter module session variables */ @@ -240,8 +193,7 @@ class Twitter_Controller extends Controller { /** * Delete all failed tweets by the current user for an item - * @param integer $item_id - * @todo Not implemented + * @param int $item_id */ private function _delete_failed($item_id) { if (is_numeric($item_id)) { @@ -250,14 +202,14 @@ class Twitter_Controller extends Controller { ->delete("twitter_tweets") ->where("user_id", "=", $user_id) ->where("item_id", "=", $item_id) - ->where("status", "=", 0) + ->where("twitter_id", "=", "") ->execute(); } } /** * Get Twitter credentials for the current user. - * @param int $user_id + * @param int $user_id * @return mixed object|false */ private function _get_twitter_user($user_id) { @@ -281,4 +233,45 @@ class Twitter_Controller extends Controller { return false; } + /** + * Save new tweets + * @param object $tweet + */ + private function _save_tweet($tweet) { + if (!empty($tweet->item_id) && !empty($tweet->tweet)) { + $t = ORM::factory("twitter_tweet"); + $t->item_id = $tweet->item_id; + $t->twitter_id = $tweet->twitter_id; + $t->tweet = $tweet->tweet; + $t->sent = (!empty($tweet->twitter_id)) ? time() : NULL; + $t->user_id = identity::active_user()->id; + $t->save(); + } + } + + /** + * Save or update the current user's Twitter credentials. + * @param array $access_token + * @todo Ensure only one record per twitter_screen_name + */ + private function _save_user($access_token) { + $u = ORM::factory("twitter_user"); + $u->oauth_token = $access_token["oauth_token"]; + $u->oauth_token_secret = $access_token["oauth_token_secret"]; + $u->twitter_user_id = $access_token["user_id"]; + $u->screen_name = $access_token["screen_name"]; + $u->user_id = identity::active_user()->id; + $u->save(); + + message::success(t("Twitter access tokens saved!")); + } + + /** + * Update a previously failed tweet + * @param object $tweet + */ + private function _update_tweet($tweet) { + + } + } diff --git a/3.1/modules/twitter/helpers/twitter.php b/3.1/modules/twitter/helpers/twitter.php index f523dd3f..59dc16c4 100644 --- a/3.1/modules/twitter/helpers/twitter.php +++ b/3.1/modules/twitter/helpers/twitter.php @@ -98,14 +98,13 @@ class twitter_Core { * Get the most recent failed tweet for an item * @param integer $item_id * @return mixed object|false - * @todo Not implemented */ function get_failed($item_id) { $user_id = identity::active_user()->id; $t = ORM::factory("twitter_tweet") ->where("item_id", "=", $item_id) ->where("user_id", "=", $user_id) - ->where("status", "=", 0) + ->where("twitter_id", "=", "") ->find(); if ($t->loaded()) { return $t->tweet; diff --git a/3.1/modules/twitter/helpers/twitter_installer.php b/3.1/modules/twitter/helpers/twitter_installer.php index 8cf4363c..bff04bb4 100644 --- a/3.1/modules/twitter/helpers/twitter_installer.php +++ b/3.1/modules/twitter/helpers/twitter_installer.php @@ -23,12 +23,11 @@ class twitter_installer { Database::instance() ->query("CREATE TABLE {twitter_tweets} ( `id` int(9) NOT NULL AUTO_INCREMENT, - `created` int(9) NOT NULL, `item_id` int(9) NOT NULL, - `status` tinyint(1) NOT NULL, `twitter_id` decimal(20,0) NULL, `tweet` varchar(140) NOT NULL, - `user_id` int(9) NOT NULL, + `sent` int(9) NULL, + `created` int(9) NOT NULL, PRIMARY KEY (`id`)) DEFAULT CHARSET=utf8;"); Database::instance() From 00b1f375c6b647dceb17c925dc1815d3a1390916 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Sun, 13 Feb 2011 14:10:40 -0700 Subject: [PATCH 22/39] Expand the size of the tweet column until I better understand how G3 handles UTP-8 and Twitter's tweet length rules and UTF-8. --- 3.1/modules/twitter/helpers/twitter_installer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3.1/modules/twitter/helpers/twitter_installer.php b/3.1/modules/twitter/helpers/twitter_installer.php index bff04bb4..4e256b64 100644 --- a/3.1/modules/twitter/helpers/twitter_installer.php +++ b/3.1/modules/twitter/helpers/twitter_installer.php @@ -25,7 +25,7 @@ class twitter_installer { `id` int(9) NOT NULL AUTO_INCREMENT, `item_id` int(9) NOT NULL, `twitter_id` decimal(20,0) NULL, - `tweet` varchar(140) NOT NULL, + `tweet` varchar(255) NOT NULL, `sent` int(9) NULL, `created` int(9) NOT NULL, PRIMARY KEY (`id`)) From a5907ea38e4d866284f62e4dad516b307d2ae39f Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Sun, 13 Feb 2011 14:56:24 -0700 Subject: [PATCH 23/39] Update previously failed tweet for an item upon a subsequent successful tweet. --- 3.1/modules/twitter/controllers/twitter.php | 36 ++++----------------- 3.1/modules/twitter/helpers/twitter.php | 15 +++++---- 2 files changed, 15 insertions(+), 36 deletions(-) diff --git a/3.1/modules/twitter/controllers/twitter.php b/3.1/modules/twitter/controllers/twitter.php index 8744d1c0..870df2b5 100644 --- a/3.1/modules/twitter/controllers/twitter.php +++ b/3.1/modules/twitter/controllers/twitter.php @@ -136,8 +136,7 @@ class Twitter_Controller extends Controller { /** * Post a status update to Twitter * @param int $item_id - * @todo Update previously failed tweet, if one exists - * @todo Display errors in Tweet dialog + * @todo Display Twitter API errors in Tweet dialog */ public function tweet($item_id) { access::verify_csrf(); @@ -173,9 +172,8 @@ class Twitter_Controller extends Controller { $tweet->item_id = $item_id; (!empty($response->id)) ? $tweet->twitter_id = $response->id : $tweet->twitter_id = NULL; $tweet->tweet = $message; - + $tweet->id = $form->twitter_message->tweet_id->value; $this->_save_tweet($tweet); - $this->_delete_failed($item_id); } else { json::reply(array("result" => "error", "html" => (string)$form)); @@ -191,22 +189,6 @@ class Twitter_Controller extends Controller { Session::instance()->delete("twitter_access_token"); } - /** - * Delete all failed tweets by the current user for an item - * @param int $item_id - */ - private function _delete_failed($item_id) { - if (is_numeric($item_id)) { - $user_id = identity::active_user()->id; - $result = db::build() - ->delete("twitter_tweets") - ->where("user_id", "=", $user_id) - ->where("item_id", "=", $item_id) - ->where("twitter_id", "=", "") - ->execute(); - } - } - /** * Get Twitter credentials for the current user. * @param int $user_id @@ -239,7 +221,11 @@ class Twitter_Controller extends Controller { */ private function _save_tweet($tweet) { if (!empty($tweet->item_id) && !empty($tweet->tweet)) { - $t = ORM::factory("twitter_tweet"); + if ($tweet->id > 0) { + $t = ORM::factory("twitter_tweet")->where("id", "=", $tweet->id)->find(); + } else { + $t = ORM::factory("twitter_tweet"); + } $t->item_id = $tweet->item_id; $t->twitter_id = $tweet->twitter_id; $t->tweet = $tweet->tweet; @@ -266,12 +252,4 @@ class Twitter_Controller extends Controller { message::success(t("Twitter access tokens saved!")); } - /** - * Update a previously failed tweet - * @param object $tweet - */ - private function _update_tweet($tweet) { - - } - } diff --git a/3.1/modules/twitter/helpers/twitter.php b/3.1/modules/twitter/helpers/twitter.php index 59dc16c4..54df4e67 100644 --- a/3.1/modules/twitter/helpers/twitter.php +++ b/3.1/modules/twitter/helpers/twitter.php @@ -26,7 +26,6 @@ class twitter_Core { /** * Get module configure form * @return Forge - * @todo Set global Twitter account */ static function get_configure_form() { $form = new Forge("admin/twitter", "", "post", array("id" => "g-configure-twitter-form")); @@ -61,16 +60,17 @@ class twitter_Core { * Get tweet form * @param object $item * @return Forge - * @todo Load previously failed tweet for the current user for this item */ static function get_tweet_form($item) { $long_url = url::abs_site($item->relative_url_cache); // Check for saved tweets for this user and item - $saved_tweet = self::get_failed($item->id); - if ($saved_tweet) { - $default_tweet = $saved_tweet; + $saved = self::get_failed($item->id); + if ($saved) { + $default_tweet = $saved->tweet; + $tweet_id = $saved->id; } else { $default_tweet = module::get_var("twitter", "default_tweet"); + $tweet_id = 0; } $tweet = preg_replace("/%type/", $item->type, $default_tweet); $tweet = preg_replace("/%title/", $item->title, $tweet); @@ -90,6 +90,7 @@ class twitter_Core { ->rules("required") ->error_messages("required", t("Your tweet cannot be empty!")) ->id("g-tweet"); + $group->hidden("tweet_id")->value($tweet_id)->id("tweet_id"); $form->submit("")->value(t("Tweet")); return $form; } @@ -104,10 +105,10 @@ class twitter_Core { $t = ORM::factory("twitter_tweet") ->where("item_id", "=", $item_id) ->where("user_id", "=", $user_id) - ->where("twitter_id", "=", "") + ->where("twitter_id", "IS", NULL) ->find(); if ($t->loaded()) { - return $t->tweet; + return $t; } else { return false; } From e659f89527aea52c88107e72acb33ba29e9aa667 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Sun, 13 Feb 2011 19:46:51 -0700 Subject: [PATCH 24/39] Moved twitteroauth library to vendor folder. Include this library's license file. Fixed path to "login with twitter" images. --- 3.1/modules/twitter/controllers/twitter.php | 22 +- .../twitter/vendor/twitteroauth/LICENSE | 22 + .../twitter/vendor/twitteroauth/OAuth.php | 874 ++++++++++++++++++ .../vendor/twitteroauth/images/darker.png | Bin 0 -> 2370 bytes .../vendor/twitteroauth/images/lighter.png | Bin 0 -> 2490 bytes .../vendor/twitteroauth/twitteroauth.php | 245 +++++ .../twitter/views/twitter_dialog.html.php | 2 +- 7 files changed, 1153 insertions(+), 12 deletions(-) create mode 100644 3.1/modules/twitter/vendor/twitteroauth/LICENSE create mode 100644 3.1/modules/twitter/vendor/twitteroauth/OAuth.php create mode 100644 3.1/modules/twitter/vendor/twitteroauth/images/darker.png create mode 100644 3.1/modules/twitter/vendor/twitteroauth/images/lighter.png create mode 100644 3.1/modules/twitter/vendor/twitteroauth/twitteroauth.php diff --git a/3.1/modules/twitter/controllers/twitter.php b/3.1/modules/twitter/controllers/twitter.php index 870df2b5..d9bc7a1f 100644 --- a/3.1/modules/twitter/controllers/twitter.php +++ b/3.1/modules/twitter/controllers/twitter.php @@ -24,7 +24,7 @@ class Twitter_Controller extends Controller { * Verify credentials and redirect based on response from Twitter. */ public function callback() { - require_once(MODPATH . "twitter/lib/twitteroauth.php"); + require_once(MODPATH . "twitter/vendor/twitteroauth/twitteroauth.php"); $consumer_key = module::get_var("twitter", "consumer_key"); $consumer_secret = module::get_var("twitter", "consumer_secret"); @@ -100,8 +100,8 @@ class Twitter_Controller extends Controller { * Redirect user to Twitter authorization page. */ public function redirect() { - require_once(MODPATH . "twitter/lib/twitteroauth.php"); - + require_once(MODPATH . "twitter/vendor/twitteroauth/twitteroauth.php"); + $consumer_key = module::get_var("twitter", "consumer_key"); $consumer_secret = module::get_var("twitter", "consumer_secret"); $oauth_callback = url::abs_site("twitter/callback"); @@ -110,13 +110,13 @@ class Twitter_Controller extends Controller { if (!empty($_GET['item_url'])) { Session::instance()->set("twitter_item_redirect", $_GET['item_url']); } - + // Build TwitterOAuth object with client credentials $connection = new TwitterOAuth($consumer_key, $consumer_secret); // Get temporary credentials. $request_token = $connection->getRequestToken($oauth_callback); - + // Save temporary credentials to session. Session::instance()->set("twitter_oauth_token", $request_token['oauth_token']); Session::instance()->set("twitter_oauth_token_secret", $request_token['oauth_token_secret']); @@ -140,24 +140,24 @@ class Twitter_Controller extends Controller { */ public function tweet($item_id) { access::verify_csrf(); - + $item = ORM::factory("item", $item_id); $form = twitter::get_tweet_form($item); - + if ($form->validate()) { $item_url = url::abs_site($item->relative_url_cache); $user = $this->_get_twitter_user(identity::active_user()->id); $consumer_key = module::get_var("twitter", "consumer_key"); $consumer_secret = module::get_var("twitter", "consumer_secret"); - require_once(MODPATH . "twitter/lib/twitteroauth.php"); - + require_once(MODPATH . "twitter/vendor/twitteroauth/twitteroauth.php"); + $connection = new TwitterOAuth( $consumer_key, $consumer_secret, $user->oauth_token, $user->oauth_token_secret); - + $message = $form->twitter_message->tweet->value; $response = $connection->post('statuses/update', array('status' => $message)); @@ -174,7 +174,7 @@ class Twitter_Controller extends Controller { $tweet->tweet = $message; $tweet->id = $form->twitter_message->tweet_id->value; $this->_save_tweet($tweet); - + } else { json::reply(array("result" => "error", "html" => (string)$form)); } diff --git a/3.1/modules/twitter/vendor/twitteroauth/LICENSE b/3.1/modules/twitter/vendor/twitteroauth/LICENSE new file mode 100644 index 00000000..233854f1 --- /dev/null +++ b/3.1/modules/twitter/vendor/twitteroauth/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2009 Abraham Williams - http://abrah.am - abraham@poseurte.ch + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/3.1/modules/twitter/vendor/twitteroauth/OAuth.php b/3.1/modules/twitter/vendor/twitteroauth/OAuth.php new file mode 100644 index 00000000..67a94c47 --- /dev/null +++ b/3.1/modules/twitter/vendor/twitteroauth/OAuth.php @@ -0,0 +1,874 @@ +key = $key; + $this->secret = $secret; + $this->callback_url = $callback_url; + } + + function __toString() { + return "OAuthConsumer[key=$this->key,secret=$this->secret]"; + } +} + +class OAuthToken { + // access tokens and request tokens + public $key; + public $secret; + + /** + * key = the token + * secret = the token secret + */ + function __construct($key, $secret) { + $this->key = $key; + $this->secret = $secret; + } + + /** + * generates the basic string serialization of a token that a server + * would respond to request_token and access_token calls with + */ + function to_string() { + return "oauth_token=" . + OAuthUtil::urlencode_rfc3986($this->key) . + "&oauth_token_secret=" . + OAuthUtil::urlencode_rfc3986($this->secret); + } + + function __toString() { + return $this->to_string(); + } +} + +/** + * A class for implementing a Signature Method + * See section 9 ("Signing Requests") in the spec + */ +abstract class OAuthSignatureMethod { + /** + * Needs to return the name of the Signature Method (ie HMAC-SHA1) + * @return string + */ + abstract public function get_name(); + + /** + * Build up the signature + * NOTE: The output of this function MUST NOT be urlencoded. + * the encoding is handled in OAuthRequest when the final + * request is serialized + * @param OAuthRequest $request + * @param OAuthConsumer $consumer + * @param OAuthToken $token + * @return string + */ + abstract public function build_signature($request, $consumer, $token); + + /** + * Verifies that a given signature is correct + * @param OAuthRequest $request + * @param OAuthConsumer $consumer + * @param OAuthToken $token + * @param string $signature + * @return bool + */ + public function check_signature($request, $consumer, $token, $signature) { + $built = $this->build_signature($request, $consumer, $token); + return $built == $signature; + } +} + +/** + * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104] + * where the Signature Base String is the text and the key is the concatenated values (each first + * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&' + * character (ASCII code 38) even if empty. + * - Chapter 9.2 ("HMAC-SHA1") + */ +class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod { + function get_name() { + return "HMAC-SHA1"; + } + + public function build_signature($request, $consumer, $token) { + $base_string = $request->get_signature_base_string(); + $request->base_string = $base_string; + + $key_parts = array( + $consumer->secret, + ($token) ? $token->secret : "" + ); + + $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); + $key = implode('&', $key_parts); + + return base64_encode(hash_hmac('sha1', $base_string, $key, true)); + } +} + +/** + * The PLAINTEXT method does not provide any security protection and SHOULD only be used + * over a secure channel such as HTTPS. It does not use the Signature Base String. + * - Chapter 9.4 ("PLAINTEXT") + */ +class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod { + public function get_name() { + return "PLAINTEXT"; + } + + /** + * oauth_signature is set to the concatenated encoded values of the Consumer Secret and + * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is + * empty. The result MUST be encoded again. + * - Chapter 9.4.1 ("Generating Signatures") + * + * Please note that the second encoding MUST NOT happen in the SignatureMethod, as + * OAuthRequest handles this! + */ + public function build_signature($request, $consumer, $token) { + $key_parts = array( + $consumer->secret, + ($token) ? $token->secret : "" + ); + + $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); + $key = implode('&', $key_parts); + $request->base_string = $key; + + return $key; + } +} + +/** + * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in + * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for + * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a + * verified way to the Service Provider, in a manner which is beyond the scope of this + * specification. + * - Chapter 9.3 ("RSA-SHA1") + */ +abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod { + public function get_name() { + return "RSA-SHA1"; + } + + // Up to the SP to implement this lookup of keys. Possible ideas are: + // (1) do a lookup in a table of trusted certs keyed off of consumer + // (2) fetch via http using a url provided by the requester + // (3) some sort of specific discovery code based on request + // + // Either way should return a string representation of the certificate + protected abstract function fetch_public_cert(&$request); + + // Up to the SP to implement this lookup of keys. Possible ideas are: + // (1) do a lookup in a table of trusted certs keyed off of consumer + // + // Either way should return a string representation of the certificate + protected abstract function fetch_private_cert(&$request); + + public function build_signature($request, $consumer, $token) { + $base_string = $request->get_signature_base_string(); + $request->base_string = $base_string; + + // Fetch the private key cert based on the request + $cert = $this->fetch_private_cert($request); + + // Pull the private key ID from the certificate + $privatekeyid = openssl_get_privatekey($cert); + + // Sign using the key + $ok = openssl_sign($base_string, $signature, $privatekeyid); + + // Release the key resource + openssl_free_key($privatekeyid); + + return base64_encode($signature); + } + + public function check_signature($request, $consumer, $token, $signature) { + $decoded_sig = base64_decode($signature); + + $base_string = $request->get_signature_base_string(); + + // Fetch the public key cert based on the request + $cert = $this->fetch_public_cert($request); + + // Pull the public key ID from the certificate + $publickeyid = openssl_get_publickey($cert); + + // Check the computed signature against the one passed in the query + $ok = openssl_verify($base_string, $decoded_sig, $publickeyid); + + // Release the key resource + openssl_free_key($publickeyid); + + return $ok == 1; + } +} + +class OAuthRequest { + private $parameters; + private $http_method; + private $http_url; + // for debug purposes + public $base_string; + public static $version = '1.0'; + public static $POST_INPUT = 'php://input'; + + function __construct($http_method, $http_url, $parameters=NULL) { + @$parameters or $parameters = array(); + $parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters); + $this->parameters = $parameters; + $this->http_method = $http_method; + $this->http_url = $http_url; + } + + + /** + * attempt to build up a request from what was passed to the server + */ + public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) { + $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") + ? 'http' + : 'https'; + @$http_url or $http_url = $scheme . + '://' . $_SERVER['HTTP_HOST'] . + ':' . + $_SERVER['SERVER_PORT'] . + $_SERVER['REQUEST_URI']; + @$http_method or $http_method = $_SERVER['REQUEST_METHOD']; + + // We weren't handed any parameters, so let's find the ones relevant to + // this request. + // If you run XML-RPC or similar you should use this to provide your own + // parsed parameter-list + if (!$parameters) { + // Find request headers + $request_headers = OAuthUtil::get_headers(); + + // Parse the query-string to find GET parameters + $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']); + + // It's a POST request of the proper content-type, so parse POST + // parameters and add those overriding any duplicates from GET + if ($http_method == "POST" + && @strstr($request_headers["Content-Type"], + "application/x-www-form-urlencoded") + ) { + $post_data = OAuthUtil::parse_parameters( + file_get_contents(self::$POST_INPUT) + ); + $parameters = array_merge($parameters, $post_data); + } + + // We have a Authorization-header with OAuth data. Parse the header + // and add those overriding any duplicates from GET or POST + if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") { + $header_parameters = OAuthUtil::split_header( + $request_headers['Authorization'] + ); + $parameters = array_merge($parameters, $header_parameters); + } + + } + + return new OAuthRequest($http_method, $http_url, $parameters); + } + + /** + * pretty much a helper function to set up the request + */ + public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) { + @$parameters or $parameters = array(); + $defaults = array("oauth_version" => OAuthRequest::$version, + "oauth_nonce" => OAuthRequest::generate_nonce(), + "oauth_timestamp" => OAuthRequest::generate_timestamp(), + "oauth_consumer_key" => $consumer->key); + if ($token) + $defaults['oauth_token'] = $token->key; + + $parameters = array_merge($defaults, $parameters); + + return new OAuthRequest($http_method, $http_url, $parameters); + } + + public function set_parameter($name, $value, $allow_duplicates = true) { + if ($allow_duplicates && isset($this->parameters[$name])) { + // We have already added parameter(s) with this name, so add to the list + if (is_scalar($this->parameters[$name])) { + // This is the first duplicate, so transform scalar (string) + // into an array so we can add the duplicates + $this->parameters[$name] = array($this->parameters[$name]); + } + + $this->parameters[$name][] = $value; + } else { + $this->parameters[$name] = $value; + } + } + + public function get_parameter($name) { + return isset($this->parameters[$name]) ? $this->parameters[$name] : null; + } + + public function get_parameters() { + return $this->parameters; + } + + public function unset_parameter($name) { + unset($this->parameters[$name]); + } + + /** + * The request parameters, sorted and concatenated into a normalized string. + * @return string + */ + public function get_signable_parameters() { + // Grab all parameters + $params = $this->parameters; + + // Remove oauth_signature if present + // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.") + if (isset($params['oauth_signature'])) { + unset($params['oauth_signature']); + } + + return OAuthUtil::build_http_query($params); + } + + /** + * Returns the base string of this request + * + * The base string defined as the method, the url + * and the parameters (normalized), each urlencoded + * and the concated with &. + */ + public function get_signature_base_string() { + $parts = array( + $this->get_normalized_http_method(), + $this->get_normalized_http_url(), + $this->get_signable_parameters() + ); + + $parts = OAuthUtil::urlencode_rfc3986($parts); + + return implode('&', $parts); + } + + /** + * just uppercases the http method + */ + public function get_normalized_http_method() { + return strtoupper($this->http_method); + } + + /** + * parses the url and rebuilds it to be + * scheme://host/path + */ + public function get_normalized_http_url() { + $parts = parse_url($this->http_url); + + $port = @$parts['port']; + $scheme = $parts['scheme']; + $host = $parts['host']; + $path = @$parts['path']; + + $port or $port = ($scheme == 'https') ? '443' : '80'; + + if (($scheme == 'https' && $port != '443') + || ($scheme == 'http' && $port != '80')) { + $host = "$host:$port"; + } + return "$scheme://$host$path"; + } + + /** + * builds a url usable for a GET request + */ + public function to_url() { + $post_data = $this->to_postdata(); + $out = $this->get_normalized_http_url(); + if ($post_data) { + $out .= '?'.$post_data; + } + return $out; + } + + /** + * builds the data one would send in a POST request + */ + public function to_postdata() { + return OAuthUtil::build_http_query($this->parameters); + } + + /** + * builds the Authorization: header + */ + public function to_header($realm=null) { + $first = true; + if($realm) { + $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"'; + $first = false; + } else + $out = 'Authorization: OAuth'; + + $total = array(); + foreach ($this->parameters as $k => $v) { + if (substr($k, 0, 5) != "oauth") continue; + if (is_array($v)) { + throw new OAuthException('Arrays not supported in headers'); + } + $out .= ($first) ? ' ' : ','; + $out .= OAuthUtil::urlencode_rfc3986($k) . + '="' . + OAuthUtil::urlencode_rfc3986($v) . + '"'; + $first = false; + } + return $out; + } + + public function __toString() { + return $this->to_url(); + } + + + public function sign_request($signature_method, $consumer, $token) { + $this->set_parameter( + "oauth_signature_method", + $signature_method->get_name(), + false + ); + $signature = $this->build_signature($signature_method, $consumer, $token); + $this->set_parameter("oauth_signature", $signature, false); + } + + public function build_signature($signature_method, $consumer, $token) { + $signature = $signature_method->build_signature($this, $consumer, $token); + return $signature; + } + + /** + * util function: current timestamp + */ + private static function generate_timestamp() { + return time(); + } + + /** + * util function: current nonce + */ + private static function generate_nonce() { + $mt = microtime(); + $rand = mt_rand(); + + return md5($mt . $rand); // md5s look nicer than numbers + } +} + +class OAuthServer { + protected $timestamp_threshold = 300; // in seconds, five minutes + protected $version = '1.0'; // hi blaine + protected $signature_methods = array(); + + protected $data_store; + + function __construct($data_store) { + $this->data_store = $data_store; + } + + public function add_signature_method($signature_method) { + $this->signature_methods[$signature_method->get_name()] = + $signature_method; + } + + // high level functions + + /** + * process a request_token request + * returns the request token on success + */ + public function fetch_request_token(&$request) { + $this->get_version($request); + + $consumer = $this->get_consumer($request); + + // no token required for the initial token request + $token = NULL; + + $this->check_signature($request, $consumer, $token); + + // Rev A change + $callback = $request->get_parameter('oauth_callback'); + $new_token = $this->data_store->new_request_token($consumer, $callback); + + return $new_token; + } + + /** + * process an access_token request + * returns the access token on success + */ + public function fetch_access_token(&$request) { + $this->get_version($request); + + $consumer = $this->get_consumer($request); + + // requires authorized request token + $token = $this->get_token($request, $consumer, "request"); + + $this->check_signature($request, $consumer, $token); + + // Rev A change + $verifier = $request->get_parameter('oauth_verifier'); + $new_token = $this->data_store->new_access_token($token, $consumer, $verifier); + + return $new_token; + } + + /** + * verify an api call, checks all the parameters + */ + public function verify_request(&$request) { + $this->get_version($request); + $consumer = $this->get_consumer($request); + $token = $this->get_token($request, $consumer, "access"); + $this->check_signature($request, $consumer, $token); + return array($consumer, $token); + } + + // Internals from here + /** + * version 1 + */ + private function get_version(&$request) { + $version = $request->get_parameter("oauth_version"); + if (!$version) { + // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. + // Chapter 7.0 ("Accessing Protected Ressources") + $version = '1.0'; + } + if ($version !== $this->version) { + throw new OAuthException("OAuth version '$version' not supported"); + } + return $version; + } + + /** + * figure out the signature with some defaults + */ + private function get_signature_method(&$request) { + $signature_method = + @$request->get_parameter("oauth_signature_method"); + + if (!$signature_method) { + // According to chapter 7 ("Accessing Protected Ressources") the signature-method + // parameter is required, and we can't just fallback to PLAINTEXT + throw new OAuthException('No signature method parameter. This parameter is required'); + } + + if (!in_array($signature_method, + array_keys($this->signature_methods))) { + throw new OAuthException( + "Signature method '$signature_method' not supported " . + "try one of the following: " . + implode(", ", array_keys($this->signature_methods)) + ); + } + return $this->signature_methods[$signature_method]; + } + + /** + * try to find the consumer for the provided request's consumer key + */ + private function get_consumer(&$request) { + $consumer_key = @$request->get_parameter("oauth_consumer_key"); + if (!$consumer_key) { + throw new OAuthException("Invalid consumer key"); + } + + $consumer = $this->data_store->lookup_consumer($consumer_key); + if (!$consumer) { + throw new OAuthException("Invalid consumer"); + } + + return $consumer; + } + + /** + * try to find the token for the provided request's token key + */ + private function get_token(&$request, $consumer, $token_type="access") { + $token_field = @$request->get_parameter('oauth_token'); + $token = $this->data_store->lookup_token( + $consumer, $token_type, $token_field + ); + if (!$token) { + throw new OAuthException("Invalid $token_type token: $token_field"); + } + return $token; + } + + /** + * all-in-one function to check the signature on a request + * should guess the signature method appropriately + */ + private function check_signature(&$request, $consumer, $token) { + // this should probably be in a different method + $timestamp = @$request->get_parameter('oauth_timestamp'); + $nonce = @$request->get_parameter('oauth_nonce'); + + $this->check_timestamp($timestamp); + $this->check_nonce($consumer, $token, $nonce, $timestamp); + + $signature_method = $this->get_signature_method($request); + + $signature = $request->get_parameter('oauth_signature'); + $valid_sig = $signature_method->check_signature( + $request, + $consumer, + $token, + $signature + ); + + if (!$valid_sig) { + throw new OAuthException("Invalid signature"); + } + } + + /** + * check that the timestamp is new enough + */ + private function check_timestamp($timestamp) { + if( ! $timestamp ) + throw new OAuthException( + 'Missing timestamp parameter. The parameter is required' + ); + + // verify that timestamp is recentish + $now = time(); + if (abs($now - $timestamp) > $this->timestamp_threshold) { + throw new OAuthException( + "Expired timestamp, yours $timestamp, ours $now" + ); + } + } + + /** + * check that the nonce is not repeated + */ + private function check_nonce($consumer, $token, $nonce, $timestamp) { + if( ! $nonce ) + throw new OAuthException( + 'Missing nonce parameter. The parameter is required' + ); + + // verify that the nonce is uniqueish + $found = $this->data_store->lookup_nonce( + $consumer, + $token, + $nonce, + $timestamp + ); + if ($found) { + throw new OAuthException("Nonce already used: $nonce"); + } + } + +} + +class OAuthDataStore { + function lookup_consumer($consumer_key) { + // implement me + } + + function lookup_token($consumer, $token_type, $token) { + // implement me + } + + function lookup_nonce($consumer, $token, $nonce, $timestamp) { + // implement me + } + + function new_request_token($consumer, $callback = null) { + // return a new token attached to this consumer + } + + function new_access_token($token, $consumer, $verifier = null) { + // return a new access token attached to this consumer + // for the user associated with this token if the request token + // is authorized + // should also invalidate the request token + } + +} + +class OAuthUtil { + public static function urlencode_rfc3986($input) { + if (is_array($input)) { + return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input); + } else if (is_scalar($input)) { + return str_replace( + '+', + ' ', + str_replace('%7E', '~', rawurlencode($input)) + ); + } else { + return ''; + } +} + + + // This decode function isn't taking into consideration the above + // modifications to the encoding process. However, this method doesn't + // seem to be used anywhere so leaving it as is. + public static function urldecode_rfc3986($string) { + return urldecode($string); + } + + // Utility function for turning the Authorization: header into + // parameters, has to do some unescaping + // Can filter out any non-oauth parameters if needed (default behaviour) + public static function split_header($header, $only_allow_oauth_parameters = true) { + $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/'; + $offset = 0; + $params = array(); + while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) { + $match = $matches[0]; + $header_name = $matches[2][0]; + $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0]; + if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) { + $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content); + } + $offset = $match[1] + strlen($match[0]); + } + + if (isset($params['realm'])) { + unset($params['realm']); + } + + return $params; + } + + // helper to try to sort out headers for people who aren't running apache + public static function get_headers() { + if (function_exists('apache_request_headers')) { + // we need this to get the actual Authorization: header + // because apache tends to tell us it doesn't exist + $headers = apache_request_headers(); + + // sanitize the output of apache_request_headers because + // we always want the keys to be Cased-Like-This and arh() + // returns the headers in the same case as they are in the + // request + $out = array(); + foreach( $headers AS $key => $value ) { + $key = str_replace( + " ", + "-", + ucwords(strtolower(str_replace("-", " ", $key))) + ); + $out[$key] = $value; + } + } else { + // otherwise we don't have apache and are just going to have to hope + // that $_SERVER actually contains what we need + $out = array(); + if( isset($_SERVER['CONTENT_TYPE']) ) + $out['Content-Type'] = $_SERVER['CONTENT_TYPE']; + if( isset($_ENV['CONTENT_TYPE']) ) + $out['Content-Type'] = $_ENV['CONTENT_TYPE']; + + foreach ($_SERVER as $key => $value) { + if (substr($key, 0, 5) == "HTTP_") { + // this is chaos, basically it is just there to capitalize the first + // letter of every word that is not an initial HTTP and strip HTTP + // code from przemek + $key = str_replace( + " ", + "-", + ucwords(strtolower(str_replace("_", " ", substr($key, 5)))) + ); + $out[$key] = $value; + } + } + } + return $out; + } + + // This function takes a input like a=b&a=c&d=e and returns the parsed + // parameters like this + // array('a' => array('b','c'), 'd' => 'e') + public static function parse_parameters( $input ) { + if (!isset($input) || !$input) return array(); + + $pairs = explode('&', $input); + + $parsed_parameters = array(); + foreach ($pairs as $pair) { + $split = explode('=', $pair, 2); + $parameter = OAuthUtil::urldecode_rfc3986($split[0]); + $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : ''; + + if (isset($parsed_parameters[$parameter])) { + // We have already recieved parameter(s) with this name, so add to the list + // of parameters with this name + + if (is_scalar($parsed_parameters[$parameter])) { + // This is the first duplicate, so transform scalar (string) into an array + // so we can add the duplicates + $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]); + } + + $parsed_parameters[$parameter][] = $value; + } else { + $parsed_parameters[$parameter] = $value; + } + } + return $parsed_parameters; + } + + public static function build_http_query($params) { + if (!$params) return ''; + + // Urlencode both keys and values + $keys = OAuthUtil::urlencode_rfc3986(array_keys($params)); + $values = OAuthUtil::urlencode_rfc3986(array_values($params)); + $params = array_combine($keys, $values); + + // Parameters are sorted by name, using lexicographical byte value ordering. + // Ref: Spec: 9.1.1 (1) + uksort($params, 'strcmp'); + + $pairs = array(); + foreach ($params as $parameter => $value) { + if (is_array($value)) { + // If two or more parameters share the same name, they are sorted by their value + // Ref: Spec: 9.1.1 (1) + natsort($value); + foreach ($value as $duplicate_value) { + $pairs[] = $parameter . '=' . $duplicate_value; + } + } else { + $pairs[] = $parameter . '=' . $value; + } + } + // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61) + // Each name-value pair is separated by an '&' character (ASCII code 38) + return implode('&', $pairs); + } +} + +?> diff --git a/3.1/modules/twitter/vendor/twitteroauth/images/darker.png b/3.1/modules/twitter/vendor/twitteroauth/images/darker.png new file mode 100644 index 0000000000000000000000000000000000000000..746b6b9f80c71049f2a4eb84ff72d5d1bf77c62c GIT binary patch literal 2370 zcmV-I3BC4-P)dbVG7wVRUJ4ZXi@?ZDjy8FEKeU zFgbGL({lg-0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q#1y$)1UwV2%AYn zK~!jg?VD?CQ|B4Sf5(m;U*kCB;v^&~X`mqlD70k=%6eVbQL0v*Xp7YQm8n{*b!>yJ z(!O+58|t*KV;|a1YSE?^(P~r!DwWWcmX(x3qEZMUPRQMkYn;T6?ZlUJ&OSJC634d` z2cpeC=_r2mzR&ajpNrq~p4TS=K=t-rGFh@@kd9Zj2}1SuU2^SRo90ZU_22>KvVNBN zN$bG_D6X`LEdRUY0LY>^=R%i5Bg_0Ea&bx0oC{qJjV$wvq$5|gLBmVSt0>W^0odPr zkvH4z-$^Jta{d3210W?h@h{a^F(j&a*$TCKc&?(53nP9G+XiPXlt^O&F&IP&hsn`s z5EPNA;FxsxVjtoV% z8w_x}#msH+D zUG^;@b5%E4eOZieLxC|GdqX0xe$&Ypj-jMNi8KOE2Y=kSfm@f>FeZxRDir+gt8;wj^zh!Z z4|1S;fIofHmFDiG$6VD-RKNGsNereu%r#2@czVNHJ~(6LRF^Ahouk{HM6Xf-GLk4F z2#V;a{+_juy`2LY@e>1%F6o1ag}KMDd^>Xs!v=aD&Ais3mCBO>f^ zz-{K7lr<8yYYhef7Mt|!Z9Imrv=m)I0RVfS+RTxTUf$^)Brr0G@8oEJduZEaPNXAHVpl8Ko(IhUV0|K-#%m*RAB1@**Dl z=s1!fueR#0OW`wyYIg< zsa}`I3qYPSa=Y>cLv*@FGU}&&*gGwL=D_FNS6R#x58XwfUdyTOetvVfk#J!#4KF;x zvGyKn7g|72@Z#~aNzb_gBBM&YEgjb6MgFF$k*NJpmz@@un+I-K&cC)k$QrE@kIjZG zid2|Q7;@FfqDY-y&Ch9>U1jV%1XGUb`j!;hxMg}*nFc%;pz4NalQwCD8!dNc7A`d zHF`|$sIN)OYh;t+9>+}hiH%pAbo}Z^-{-?KR(|-_2V7lLz!R&NMvv3R6Q5aRhyn%L9QNukNeYg;z4xn|*H zt{ll-v(SP<5ctU2!)PExv&}i)E=T(|v~{!R%mo_z8~~^lio~8|rp4*xp0K;{2Scnb zDPVnhF~@rc(5Y2iYtnIjWhu=UJu~V%y`xBy%vdNyuiH0kud*mjt`W*)+)r%0uBr@$ zAW&q`^XT>U1Vou-<(6ojBi0_?ZRz5q-Idtyc;BQ?i?NieCr7FYj`cfv`%Fj5+(a6o z(NV%mC2xIgPtsNA_$Y)ue z(H6(iw6=6|1Cq$sb|O4!+Cosu(|F91lh*NY-eyjL*2 zPp14#jdRp00ET>iMwBYvxArpZ^GEwivXu7ql5#>{u7-)zygM?N#;BZZzp=cC=T_G6 zm!|Vcg%W98rOCnGZ^Jg?M>gn??_7&dk|z7hkzA|C2f+O+YB8K?YpQttt8+<(5^3C0SHn|VHsbV;k)Nx^=^x{bW^1&+TB}7CC60F4`JlLy zO-rh%uPo)z*>>tJMTiJ9`l@m@kyxWe7UMtePxOtAQ{|p=4DqZ|L6c*Ma9HHbpqIOq zN>01naq9sb?y~bh-6Fo&v6XxG9htRPL6sBNbEf>n#&0&CXG{GO?q0DJ8EAI6*w%0& zp@&2W)!TQ;B}?M3Z>+K`;LmrgWw#A>_r))8n;BkT3>)?wjN9&LYoqqAO$=Gv5}L3W zw3O(z_<~_NhCC#Cxh%)!WWeJELEyz(*Ru7dH9Y#^QLKaRWcxTTDA4AjQ{~V%J_289 zV*SL%ISK{kMjh@zkm0e^i{!C5+S-!e7MuFNW#_SGetqLAZZN?9i_kwsCr=rf(A&NK zltX2*cDvh)-R(_j_}yn7M3yB)Nv0y-$onl9Xmif~r>HA|%j+lklIi6o)=z945=FW$ z@k^U>&ULW0i;>X)Ppn?b&T7+)cKe8*9Sx0_baAE2L;DU>TVzJB&Y^wK&A^C1byAiq zM#`Um0FGYh=jet0OA<==KAjA|7^G?Z(LKxjXI4uQm%`=H$TGi3`pQivxf~i<<`>!5 ooU_as0%ZTSEKBC;cx9XLUtuVuKI-|I^Z)<=07*qoM6N<$g3Pn2od5s; literal 0 HcmV?d00001 diff --git a/3.1/modules/twitter/vendor/twitteroauth/images/lighter.png b/3.1/modules/twitter/vendor/twitteroauth/images/lighter.png new file mode 100644 index 0000000000000000000000000000000000000000..297bb03404f2d7462ee9355aae38f5f5f3e47fbd GIT binary patch literal 2490 zcmV;r2}SmaP)dbVG7wVRUJ4ZXi@?ZDjy8FEKeU zFgbGL({lg-0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q#1y$)1UwV2@^>~ zK~!jg?VEdWl+_u=f8X9WA)72QVM!vF1VSK4AZQ?nK}o}NseS3JN$f zgRQMIo!W~OJ6`ZouvAJ_K&eH%O=zU35Dd9+OGJ}EvYTu++57IdU;kJVc9XpY6B?a; zX3k{ZIp=-eC+|7m`<-)kR{+>vQ7sWi9D|5ebEgWz_KIq$s4!>9f*d_|j-lj_V|e1| zv2!Q@e7>PCTvsDT9K#C=07>!<2 zJRT3v{^4m(e0B`AMuXes=AQD^+;C$tPj22q>4H*zdfz>`#KAid3>9xAeo+*W%jE#P zv+pgwyLbU*^X6iX@D|vxdJPV{BV^y=rMIzo>FtA}CzL%H7|@3PC-uR0k{o`MEpT&+ zmiCUwd$DjaD&G5mR^R=5Ugy>A zFL6`pd;osE=`rd~)-ZEc5shchvh}x5aZ~9nJpS;;UjCggyhMFX4IM@k^;K2OnpeX9 zJ+G59W-M>Ndx+<@J`*QB2?^MN1N-(fead7?=HEi6T!B@Box5IR=L;`>Ej{PX zHuTf??pp_V_K#2V&%f=WuDXUP)2>6K(eP;bS}ruV@b7*5sr;ydIrB8I2tIsDgsYdEB~aA*X6k7? zxX|2;qp^|Gwe@`Y#d&IupCC)EqUw`l7)GU&uTKu*U$o?QG#U*z%qZYj8`hDRoCLu8 zhbzgOI5DbLyT^;&?d{E@=<{Loc(HlBWQ@7?YwIarxgyB6oH@guS9eiXI-mWozJlq( z1uEY@fC2%N(MZ*iqs%Lw&3$(-XHs%f#Ci8GF3A_N^~J`q@N(Yec4#`>p8;Rm>`^(w z^()mX);zY6A1}KTOQ(hBpZ+tI2M_vvC6EgOasg^TuSW9u`2L~=xMTvlF=IdirA&q( z01}jz+(`M#6-+Id=Jypvl2wZSngV!x>{xvBuA7QRt)c4kYU--0D3~!Fhr>aA^+`_G z)iHDWG@POs#IMsQgCL+*sYp&si#>KieJ zAZPaXZl!3>9M-SjNX7dfvh?=bdf)$&1YWO*1jqy#ZFVPakM~lt{ns24pi(Mnce*e+ zoV|U5)IWA0uWtapa=C)>xf3{EU4zZ(WX19y(%RC@hySVMd_x1@*}REPr@KGD1PCBr zszd|P3jULJU(P|*6JUEpf1ZUYMN@b5y{gO~R0`R^ zzo2^1b1iYS>vBugsL9qPM&yVTyCwWp(Uo=ev@y*W7rS{ZmOePbh#j}_&X%YtxeZa(=9L5<&(e8Bi z<5wsYm^&^0MKr*8(egMLdIIf9`S}2Jn9Y=xl~T570XoAdF4!DlHH6a}anEJ-cv*VQ z<;7KRgYq-}Q)5qi@;qcECS38JtLDV#Y+3g(n;(3LUp}&dB%O}ct5)I-xFV2%>k11g zTUf@C&yKTa*KVdw^(R50loR*{_b2SKCHeZt4jkLpj^;ZlKOe6sQZ!>aT9uM(b0*;N zdYL_=0IS=B(gj7|CTgIo3w=s5DLNgUE;lDl z=6*ck(9~r1FRqNt5);TzP2p%4ylH~wfExv!+`pk8s}?!j(i+mgrP)GJVGd2L zrifxR3OQ=I9MLCX4Ray;#3LJ#2{HtkfT^vG#S0hk#JUIhwAC2&WDQrS)2nfk*V=iQ!Y2K(sVlqHpM%x^1{ck;y4Kin5jc`W;@8<8AFx4+YWs z?QSo2A}4+Q<6F?#y0F{rhttp_status; } + function lastAPICall() { return $this->last_api_call; } + + /** + * construct TwitterOAuth object + */ + function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) { + $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1(); + $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret); + if (!empty($oauth_token) && !empty($oauth_token_secret)) { + $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret); + } else { + $this->token = NULL; + } + } + + + /** + * Get a request_token from Twitter + * + * @returns a key/value array containing oauth_token and oauth_token_secret + */ + function getRequestToken($oauth_callback = NULL) { + $parameters = array(); + if (!empty($oauth_callback)) { + $parameters['oauth_callback'] = $oauth_callback; + } + $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters); + $token = OAuthUtil::parse_parameters($request); + $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); + return $token; + } + + /** + * Get the authorize URL + * + * @returns a string + */ + function getAuthorizeURL($token, $sign_in_with_twitter = TRUE) { + if (is_array($token)) { + $token = $token['oauth_token']; + } + if (empty($sign_in_with_twitter)) { + return $this->authorizeURL() . "?oauth_token={$token}"; + } else { + return $this->authenticateURL() . "?oauth_token={$token}"; + } + } + + /** + * Exchange request token and secret for an access token and + * secret, to sign API calls. + * + * @returns array("oauth_token" => "the-access-token", + * "oauth_token_secret" => "the-access-secret", + * "user_id" => "9436992", + * "screen_name" => "abraham") + */ + function getAccessToken($oauth_verifier = FALSE) { + $parameters = array(); + if (!empty($oauth_verifier)) { + $parameters['oauth_verifier'] = $oauth_verifier; + } + $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters); + $token = OAuthUtil::parse_parameters($request); + $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); + return $token; + } + + /** + * One time exchange of username and password for access token and secret. + * + * @returns array("oauth_token" => "the-access-token", + * "oauth_token_secret" => "the-access-secret", + * "user_id" => "9436992", + * "screen_name" => "abraham", + * "x_auth_expires" => "0") + */ + function getXAuthToken($username, $password) { + $parameters = array(); + $parameters['x_auth_username'] = $username; + $parameters['x_auth_password'] = $password; + $parameters['x_auth_mode'] = 'client_auth'; + $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters); + $token = OAuthUtil::parse_parameters($request); + $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); + return $token; + } + + /** + * GET wrapper for oAuthRequest. + */ + function get($url, $parameters = array()) { + $response = $this->oAuthRequest($url, 'GET', $parameters); + if ($this->format === 'json' && $this->decode_json) { + return json_decode($response); + } + return $response; + } + + /** + * POST wrapper for oAuthRequest. + */ + function post($url, $parameters = array()) { + $response = $this->oAuthRequest($url, 'POST', $parameters); + if ($this->format === 'json' && $this->decode_json) { + return json_decode($response); + } + return $response; + } + + /** + * DELETE wrapper for oAuthReqeust. + */ + function delete($url, $parameters = array()) { + $response = $this->oAuthRequest($url, 'DELETE', $parameters); + if ($this->format === 'json' && $this->decode_json) { + return json_decode($response); + } + return $response; + } + + /** + * Format and sign an OAuth / API request + */ + function oAuthRequest($url, $method, $parameters) { + if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) { + $url = "{$this->host}{$url}.{$this->format}"; + } + $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters); + $request->sign_request($this->sha1_method, $this->consumer, $this->token); + switch ($method) { + case 'GET': + return $this->http($request->to_url(), 'GET'); + default: + return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata()); + } + } + + /** + * Make an HTTP request + * + * @return API results + */ + function http($url, $method, $postfields = NULL) { + $this->http_info = array(); + $ci = curl_init(); + /* Curl settings */ + curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent); + curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); + curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout); + curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); + curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:')); + curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); + curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader')); + curl_setopt($ci, CURLOPT_HEADER, FALSE); + + switch ($method) { + case 'POST': + curl_setopt($ci, CURLOPT_POST, TRUE); + if (!empty($postfields)) { + curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); + } + break; + case 'DELETE': + curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); + if (!empty($postfields)) { + $url = "{$url}?{$postfields}"; + } + } + + curl_setopt($ci, CURLOPT_URL, $url); + $response = curl_exec($ci); + $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); + $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); + $this->url = $url; + curl_close ($ci); + return $response; + } + + /** + * Get the header info to store. + */ + function getHeader($ch, $header) { + $i = strpos($header, ':'); + if (!empty($i)) { + $key = str_replace('-', '_', strtolower(substr($header, 0, $i))); + $value = trim(substr($header, $i + 2)); + $this->http_header[$key] = $value; + } + return strlen($header); + } +} diff --git a/3.1/modules/twitter/views/twitter_dialog.html.php b/3.1/modules/twitter/views/twitter_dialog.html.php index a7cf91ba..751e5b20 100644 --- a/3.1/modules/twitter/views/twitter_dialog.html.php +++ b/3.1/modules/twitter/views/twitter_dialog.html.php @@ -10,7 +10,7 @@

-

Sign in with Twitter

+

" alt="Sign in with Twitter"/>

From 2db277328ec1f32a840cc1eb2bdc4c4d92e7b7d7 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Sun, 13 Feb 2011 19:49:18 -0700 Subject: [PATCH 25/39] Remove lib folder --- 3.1/modules/twitter/lib/OAuth.php | 874 --------------------- 3.1/modules/twitter/lib/images/darker.png | Bin 2370 -> 0 bytes 3.1/modules/twitter/lib/images/lighter.png | Bin 2490 -> 0 bytes 3.1/modules/twitter/lib/twitteroauth.php | 245 ------ 4 files changed, 1119 deletions(-) delete mode 100644 3.1/modules/twitter/lib/OAuth.php delete mode 100644 3.1/modules/twitter/lib/images/darker.png delete mode 100644 3.1/modules/twitter/lib/images/lighter.png delete mode 100644 3.1/modules/twitter/lib/twitteroauth.php diff --git a/3.1/modules/twitter/lib/OAuth.php b/3.1/modules/twitter/lib/OAuth.php deleted file mode 100644 index 67a94c47..00000000 --- a/3.1/modules/twitter/lib/OAuth.php +++ /dev/null @@ -1,874 +0,0 @@ -key = $key; - $this->secret = $secret; - $this->callback_url = $callback_url; - } - - function __toString() { - return "OAuthConsumer[key=$this->key,secret=$this->secret]"; - } -} - -class OAuthToken { - // access tokens and request tokens - public $key; - public $secret; - - /** - * key = the token - * secret = the token secret - */ - function __construct($key, $secret) { - $this->key = $key; - $this->secret = $secret; - } - - /** - * generates the basic string serialization of a token that a server - * would respond to request_token and access_token calls with - */ - function to_string() { - return "oauth_token=" . - OAuthUtil::urlencode_rfc3986($this->key) . - "&oauth_token_secret=" . - OAuthUtil::urlencode_rfc3986($this->secret); - } - - function __toString() { - return $this->to_string(); - } -} - -/** - * A class for implementing a Signature Method - * See section 9 ("Signing Requests") in the spec - */ -abstract class OAuthSignatureMethod { - /** - * Needs to return the name of the Signature Method (ie HMAC-SHA1) - * @return string - */ - abstract public function get_name(); - - /** - * Build up the signature - * NOTE: The output of this function MUST NOT be urlencoded. - * the encoding is handled in OAuthRequest when the final - * request is serialized - * @param OAuthRequest $request - * @param OAuthConsumer $consumer - * @param OAuthToken $token - * @return string - */ - abstract public function build_signature($request, $consumer, $token); - - /** - * Verifies that a given signature is correct - * @param OAuthRequest $request - * @param OAuthConsumer $consumer - * @param OAuthToken $token - * @param string $signature - * @return bool - */ - public function check_signature($request, $consumer, $token, $signature) { - $built = $this->build_signature($request, $consumer, $token); - return $built == $signature; - } -} - -/** - * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104] - * where the Signature Base String is the text and the key is the concatenated values (each first - * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&' - * character (ASCII code 38) even if empty. - * - Chapter 9.2 ("HMAC-SHA1") - */ -class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod { - function get_name() { - return "HMAC-SHA1"; - } - - public function build_signature($request, $consumer, $token) { - $base_string = $request->get_signature_base_string(); - $request->base_string = $base_string; - - $key_parts = array( - $consumer->secret, - ($token) ? $token->secret : "" - ); - - $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); - $key = implode('&', $key_parts); - - return base64_encode(hash_hmac('sha1', $base_string, $key, true)); - } -} - -/** - * The PLAINTEXT method does not provide any security protection and SHOULD only be used - * over a secure channel such as HTTPS. It does not use the Signature Base String. - * - Chapter 9.4 ("PLAINTEXT") - */ -class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod { - public function get_name() { - return "PLAINTEXT"; - } - - /** - * oauth_signature is set to the concatenated encoded values of the Consumer Secret and - * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is - * empty. The result MUST be encoded again. - * - Chapter 9.4.1 ("Generating Signatures") - * - * Please note that the second encoding MUST NOT happen in the SignatureMethod, as - * OAuthRequest handles this! - */ - public function build_signature($request, $consumer, $token) { - $key_parts = array( - $consumer->secret, - ($token) ? $token->secret : "" - ); - - $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); - $key = implode('&', $key_parts); - $request->base_string = $key; - - return $key; - } -} - -/** - * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in - * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for - * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a - * verified way to the Service Provider, in a manner which is beyond the scope of this - * specification. - * - Chapter 9.3 ("RSA-SHA1") - */ -abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod { - public function get_name() { - return "RSA-SHA1"; - } - - // Up to the SP to implement this lookup of keys. Possible ideas are: - // (1) do a lookup in a table of trusted certs keyed off of consumer - // (2) fetch via http using a url provided by the requester - // (3) some sort of specific discovery code based on request - // - // Either way should return a string representation of the certificate - protected abstract function fetch_public_cert(&$request); - - // Up to the SP to implement this lookup of keys. Possible ideas are: - // (1) do a lookup in a table of trusted certs keyed off of consumer - // - // Either way should return a string representation of the certificate - protected abstract function fetch_private_cert(&$request); - - public function build_signature($request, $consumer, $token) { - $base_string = $request->get_signature_base_string(); - $request->base_string = $base_string; - - // Fetch the private key cert based on the request - $cert = $this->fetch_private_cert($request); - - // Pull the private key ID from the certificate - $privatekeyid = openssl_get_privatekey($cert); - - // Sign using the key - $ok = openssl_sign($base_string, $signature, $privatekeyid); - - // Release the key resource - openssl_free_key($privatekeyid); - - return base64_encode($signature); - } - - public function check_signature($request, $consumer, $token, $signature) { - $decoded_sig = base64_decode($signature); - - $base_string = $request->get_signature_base_string(); - - // Fetch the public key cert based on the request - $cert = $this->fetch_public_cert($request); - - // Pull the public key ID from the certificate - $publickeyid = openssl_get_publickey($cert); - - // Check the computed signature against the one passed in the query - $ok = openssl_verify($base_string, $decoded_sig, $publickeyid); - - // Release the key resource - openssl_free_key($publickeyid); - - return $ok == 1; - } -} - -class OAuthRequest { - private $parameters; - private $http_method; - private $http_url; - // for debug purposes - public $base_string; - public static $version = '1.0'; - public static $POST_INPUT = 'php://input'; - - function __construct($http_method, $http_url, $parameters=NULL) { - @$parameters or $parameters = array(); - $parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters); - $this->parameters = $parameters; - $this->http_method = $http_method; - $this->http_url = $http_url; - } - - - /** - * attempt to build up a request from what was passed to the server - */ - public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) { - $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") - ? 'http' - : 'https'; - @$http_url or $http_url = $scheme . - '://' . $_SERVER['HTTP_HOST'] . - ':' . - $_SERVER['SERVER_PORT'] . - $_SERVER['REQUEST_URI']; - @$http_method or $http_method = $_SERVER['REQUEST_METHOD']; - - // We weren't handed any parameters, so let's find the ones relevant to - // this request. - // If you run XML-RPC or similar you should use this to provide your own - // parsed parameter-list - if (!$parameters) { - // Find request headers - $request_headers = OAuthUtil::get_headers(); - - // Parse the query-string to find GET parameters - $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']); - - // It's a POST request of the proper content-type, so parse POST - // parameters and add those overriding any duplicates from GET - if ($http_method == "POST" - && @strstr($request_headers["Content-Type"], - "application/x-www-form-urlencoded") - ) { - $post_data = OAuthUtil::parse_parameters( - file_get_contents(self::$POST_INPUT) - ); - $parameters = array_merge($parameters, $post_data); - } - - // We have a Authorization-header with OAuth data. Parse the header - // and add those overriding any duplicates from GET or POST - if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") { - $header_parameters = OAuthUtil::split_header( - $request_headers['Authorization'] - ); - $parameters = array_merge($parameters, $header_parameters); - } - - } - - return new OAuthRequest($http_method, $http_url, $parameters); - } - - /** - * pretty much a helper function to set up the request - */ - public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) { - @$parameters or $parameters = array(); - $defaults = array("oauth_version" => OAuthRequest::$version, - "oauth_nonce" => OAuthRequest::generate_nonce(), - "oauth_timestamp" => OAuthRequest::generate_timestamp(), - "oauth_consumer_key" => $consumer->key); - if ($token) - $defaults['oauth_token'] = $token->key; - - $parameters = array_merge($defaults, $parameters); - - return new OAuthRequest($http_method, $http_url, $parameters); - } - - public function set_parameter($name, $value, $allow_duplicates = true) { - if ($allow_duplicates && isset($this->parameters[$name])) { - // We have already added parameter(s) with this name, so add to the list - if (is_scalar($this->parameters[$name])) { - // This is the first duplicate, so transform scalar (string) - // into an array so we can add the duplicates - $this->parameters[$name] = array($this->parameters[$name]); - } - - $this->parameters[$name][] = $value; - } else { - $this->parameters[$name] = $value; - } - } - - public function get_parameter($name) { - return isset($this->parameters[$name]) ? $this->parameters[$name] : null; - } - - public function get_parameters() { - return $this->parameters; - } - - public function unset_parameter($name) { - unset($this->parameters[$name]); - } - - /** - * The request parameters, sorted and concatenated into a normalized string. - * @return string - */ - public function get_signable_parameters() { - // Grab all parameters - $params = $this->parameters; - - // Remove oauth_signature if present - // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.") - if (isset($params['oauth_signature'])) { - unset($params['oauth_signature']); - } - - return OAuthUtil::build_http_query($params); - } - - /** - * Returns the base string of this request - * - * The base string defined as the method, the url - * and the parameters (normalized), each urlencoded - * and the concated with &. - */ - public function get_signature_base_string() { - $parts = array( - $this->get_normalized_http_method(), - $this->get_normalized_http_url(), - $this->get_signable_parameters() - ); - - $parts = OAuthUtil::urlencode_rfc3986($parts); - - return implode('&', $parts); - } - - /** - * just uppercases the http method - */ - public function get_normalized_http_method() { - return strtoupper($this->http_method); - } - - /** - * parses the url and rebuilds it to be - * scheme://host/path - */ - public function get_normalized_http_url() { - $parts = parse_url($this->http_url); - - $port = @$parts['port']; - $scheme = $parts['scheme']; - $host = $parts['host']; - $path = @$parts['path']; - - $port or $port = ($scheme == 'https') ? '443' : '80'; - - if (($scheme == 'https' && $port != '443') - || ($scheme == 'http' && $port != '80')) { - $host = "$host:$port"; - } - return "$scheme://$host$path"; - } - - /** - * builds a url usable for a GET request - */ - public function to_url() { - $post_data = $this->to_postdata(); - $out = $this->get_normalized_http_url(); - if ($post_data) { - $out .= '?'.$post_data; - } - return $out; - } - - /** - * builds the data one would send in a POST request - */ - public function to_postdata() { - return OAuthUtil::build_http_query($this->parameters); - } - - /** - * builds the Authorization: header - */ - public function to_header($realm=null) { - $first = true; - if($realm) { - $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"'; - $first = false; - } else - $out = 'Authorization: OAuth'; - - $total = array(); - foreach ($this->parameters as $k => $v) { - if (substr($k, 0, 5) != "oauth") continue; - if (is_array($v)) { - throw new OAuthException('Arrays not supported in headers'); - } - $out .= ($first) ? ' ' : ','; - $out .= OAuthUtil::urlencode_rfc3986($k) . - '="' . - OAuthUtil::urlencode_rfc3986($v) . - '"'; - $first = false; - } - return $out; - } - - public function __toString() { - return $this->to_url(); - } - - - public function sign_request($signature_method, $consumer, $token) { - $this->set_parameter( - "oauth_signature_method", - $signature_method->get_name(), - false - ); - $signature = $this->build_signature($signature_method, $consumer, $token); - $this->set_parameter("oauth_signature", $signature, false); - } - - public function build_signature($signature_method, $consumer, $token) { - $signature = $signature_method->build_signature($this, $consumer, $token); - return $signature; - } - - /** - * util function: current timestamp - */ - private static function generate_timestamp() { - return time(); - } - - /** - * util function: current nonce - */ - private static function generate_nonce() { - $mt = microtime(); - $rand = mt_rand(); - - return md5($mt . $rand); // md5s look nicer than numbers - } -} - -class OAuthServer { - protected $timestamp_threshold = 300; // in seconds, five minutes - protected $version = '1.0'; // hi blaine - protected $signature_methods = array(); - - protected $data_store; - - function __construct($data_store) { - $this->data_store = $data_store; - } - - public function add_signature_method($signature_method) { - $this->signature_methods[$signature_method->get_name()] = - $signature_method; - } - - // high level functions - - /** - * process a request_token request - * returns the request token on success - */ - public function fetch_request_token(&$request) { - $this->get_version($request); - - $consumer = $this->get_consumer($request); - - // no token required for the initial token request - $token = NULL; - - $this->check_signature($request, $consumer, $token); - - // Rev A change - $callback = $request->get_parameter('oauth_callback'); - $new_token = $this->data_store->new_request_token($consumer, $callback); - - return $new_token; - } - - /** - * process an access_token request - * returns the access token on success - */ - public function fetch_access_token(&$request) { - $this->get_version($request); - - $consumer = $this->get_consumer($request); - - // requires authorized request token - $token = $this->get_token($request, $consumer, "request"); - - $this->check_signature($request, $consumer, $token); - - // Rev A change - $verifier = $request->get_parameter('oauth_verifier'); - $new_token = $this->data_store->new_access_token($token, $consumer, $verifier); - - return $new_token; - } - - /** - * verify an api call, checks all the parameters - */ - public function verify_request(&$request) { - $this->get_version($request); - $consumer = $this->get_consumer($request); - $token = $this->get_token($request, $consumer, "access"); - $this->check_signature($request, $consumer, $token); - return array($consumer, $token); - } - - // Internals from here - /** - * version 1 - */ - private function get_version(&$request) { - $version = $request->get_parameter("oauth_version"); - if (!$version) { - // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. - // Chapter 7.0 ("Accessing Protected Ressources") - $version = '1.0'; - } - if ($version !== $this->version) { - throw new OAuthException("OAuth version '$version' not supported"); - } - return $version; - } - - /** - * figure out the signature with some defaults - */ - private function get_signature_method(&$request) { - $signature_method = - @$request->get_parameter("oauth_signature_method"); - - if (!$signature_method) { - // According to chapter 7 ("Accessing Protected Ressources") the signature-method - // parameter is required, and we can't just fallback to PLAINTEXT - throw new OAuthException('No signature method parameter. This parameter is required'); - } - - if (!in_array($signature_method, - array_keys($this->signature_methods))) { - throw new OAuthException( - "Signature method '$signature_method' not supported " . - "try one of the following: " . - implode(", ", array_keys($this->signature_methods)) - ); - } - return $this->signature_methods[$signature_method]; - } - - /** - * try to find the consumer for the provided request's consumer key - */ - private function get_consumer(&$request) { - $consumer_key = @$request->get_parameter("oauth_consumer_key"); - if (!$consumer_key) { - throw new OAuthException("Invalid consumer key"); - } - - $consumer = $this->data_store->lookup_consumer($consumer_key); - if (!$consumer) { - throw new OAuthException("Invalid consumer"); - } - - return $consumer; - } - - /** - * try to find the token for the provided request's token key - */ - private function get_token(&$request, $consumer, $token_type="access") { - $token_field = @$request->get_parameter('oauth_token'); - $token = $this->data_store->lookup_token( - $consumer, $token_type, $token_field - ); - if (!$token) { - throw new OAuthException("Invalid $token_type token: $token_field"); - } - return $token; - } - - /** - * all-in-one function to check the signature on a request - * should guess the signature method appropriately - */ - private function check_signature(&$request, $consumer, $token) { - // this should probably be in a different method - $timestamp = @$request->get_parameter('oauth_timestamp'); - $nonce = @$request->get_parameter('oauth_nonce'); - - $this->check_timestamp($timestamp); - $this->check_nonce($consumer, $token, $nonce, $timestamp); - - $signature_method = $this->get_signature_method($request); - - $signature = $request->get_parameter('oauth_signature'); - $valid_sig = $signature_method->check_signature( - $request, - $consumer, - $token, - $signature - ); - - if (!$valid_sig) { - throw new OAuthException("Invalid signature"); - } - } - - /** - * check that the timestamp is new enough - */ - private function check_timestamp($timestamp) { - if( ! $timestamp ) - throw new OAuthException( - 'Missing timestamp parameter. The parameter is required' - ); - - // verify that timestamp is recentish - $now = time(); - if (abs($now - $timestamp) > $this->timestamp_threshold) { - throw new OAuthException( - "Expired timestamp, yours $timestamp, ours $now" - ); - } - } - - /** - * check that the nonce is not repeated - */ - private function check_nonce($consumer, $token, $nonce, $timestamp) { - if( ! $nonce ) - throw new OAuthException( - 'Missing nonce parameter. The parameter is required' - ); - - // verify that the nonce is uniqueish - $found = $this->data_store->lookup_nonce( - $consumer, - $token, - $nonce, - $timestamp - ); - if ($found) { - throw new OAuthException("Nonce already used: $nonce"); - } - } - -} - -class OAuthDataStore { - function lookup_consumer($consumer_key) { - // implement me - } - - function lookup_token($consumer, $token_type, $token) { - // implement me - } - - function lookup_nonce($consumer, $token, $nonce, $timestamp) { - // implement me - } - - function new_request_token($consumer, $callback = null) { - // return a new token attached to this consumer - } - - function new_access_token($token, $consumer, $verifier = null) { - // return a new access token attached to this consumer - // for the user associated with this token if the request token - // is authorized - // should also invalidate the request token - } - -} - -class OAuthUtil { - public static function urlencode_rfc3986($input) { - if (is_array($input)) { - return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input); - } else if (is_scalar($input)) { - return str_replace( - '+', - ' ', - str_replace('%7E', '~', rawurlencode($input)) - ); - } else { - return ''; - } -} - - - // This decode function isn't taking into consideration the above - // modifications to the encoding process. However, this method doesn't - // seem to be used anywhere so leaving it as is. - public static function urldecode_rfc3986($string) { - return urldecode($string); - } - - // Utility function for turning the Authorization: header into - // parameters, has to do some unescaping - // Can filter out any non-oauth parameters if needed (default behaviour) - public static function split_header($header, $only_allow_oauth_parameters = true) { - $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/'; - $offset = 0; - $params = array(); - while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) { - $match = $matches[0]; - $header_name = $matches[2][0]; - $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0]; - if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) { - $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content); - } - $offset = $match[1] + strlen($match[0]); - } - - if (isset($params['realm'])) { - unset($params['realm']); - } - - return $params; - } - - // helper to try to sort out headers for people who aren't running apache - public static function get_headers() { - if (function_exists('apache_request_headers')) { - // we need this to get the actual Authorization: header - // because apache tends to tell us it doesn't exist - $headers = apache_request_headers(); - - // sanitize the output of apache_request_headers because - // we always want the keys to be Cased-Like-This and arh() - // returns the headers in the same case as they are in the - // request - $out = array(); - foreach( $headers AS $key => $value ) { - $key = str_replace( - " ", - "-", - ucwords(strtolower(str_replace("-", " ", $key))) - ); - $out[$key] = $value; - } - } else { - // otherwise we don't have apache and are just going to have to hope - // that $_SERVER actually contains what we need - $out = array(); - if( isset($_SERVER['CONTENT_TYPE']) ) - $out['Content-Type'] = $_SERVER['CONTENT_TYPE']; - if( isset($_ENV['CONTENT_TYPE']) ) - $out['Content-Type'] = $_ENV['CONTENT_TYPE']; - - foreach ($_SERVER as $key => $value) { - if (substr($key, 0, 5) == "HTTP_") { - // this is chaos, basically it is just there to capitalize the first - // letter of every word that is not an initial HTTP and strip HTTP - // code from przemek - $key = str_replace( - " ", - "-", - ucwords(strtolower(str_replace("_", " ", substr($key, 5)))) - ); - $out[$key] = $value; - } - } - } - return $out; - } - - // This function takes a input like a=b&a=c&d=e and returns the parsed - // parameters like this - // array('a' => array('b','c'), 'd' => 'e') - public static function parse_parameters( $input ) { - if (!isset($input) || !$input) return array(); - - $pairs = explode('&', $input); - - $parsed_parameters = array(); - foreach ($pairs as $pair) { - $split = explode('=', $pair, 2); - $parameter = OAuthUtil::urldecode_rfc3986($split[0]); - $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : ''; - - if (isset($parsed_parameters[$parameter])) { - // We have already recieved parameter(s) with this name, so add to the list - // of parameters with this name - - if (is_scalar($parsed_parameters[$parameter])) { - // This is the first duplicate, so transform scalar (string) into an array - // so we can add the duplicates - $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]); - } - - $parsed_parameters[$parameter][] = $value; - } else { - $parsed_parameters[$parameter] = $value; - } - } - return $parsed_parameters; - } - - public static function build_http_query($params) { - if (!$params) return ''; - - // Urlencode both keys and values - $keys = OAuthUtil::urlencode_rfc3986(array_keys($params)); - $values = OAuthUtil::urlencode_rfc3986(array_values($params)); - $params = array_combine($keys, $values); - - // Parameters are sorted by name, using lexicographical byte value ordering. - // Ref: Spec: 9.1.1 (1) - uksort($params, 'strcmp'); - - $pairs = array(); - foreach ($params as $parameter => $value) { - if (is_array($value)) { - // If two or more parameters share the same name, they are sorted by their value - // Ref: Spec: 9.1.1 (1) - natsort($value); - foreach ($value as $duplicate_value) { - $pairs[] = $parameter . '=' . $duplicate_value; - } - } else { - $pairs[] = $parameter . '=' . $value; - } - } - // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61) - // Each name-value pair is separated by an '&' character (ASCII code 38) - return implode('&', $pairs); - } -} - -?> diff --git a/3.1/modules/twitter/lib/images/darker.png b/3.1/modules/twitter/lib/images/darker.png deleted file mode 100644 index 746b6b9f80c71049f2a4eb84ff72d5d1bf77c62c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2370 zcmV-I3BC4-P)dbVG7wVRUJ4ZXi@?ZDjy8FEKeU zFgbGL({lg-0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q#1y$)1UwV2%AYn zK~!jg?VD?CQ|B4Sf5(m;U*kCB;v^&~X`mqlD70k=%6eVbQL0v*Xp7YQm8n{*b!>yJ z(!O+58|t*KV;|a1YSE?^(P~r!DwWWcmX(x3qEZMUPRQMkYn;T6?ZlUJ&OSJC634d` z2cpeC=_r2mzR&ajpNrq~p4TS=K=t-rGFh@@kd9Zj2}1SuU2^SRo90ZU_22>KvVNBN zN$bG_D6X`LEdRUY0LY>^=R%i5Bg_0Ea&bx0oC{qJjV$wvq$5|gLBmVSt0>W^0odPr zkvH4z-$^Jta{d3210W?h@h{a^F(j&a*$TCKc&?(53nP9G+XiPXlt^O&F&IP&hsn`s z5EPNA;FxsxVjtoV% z8w_x}#msH+D zUG^;@b5%E4eOZieLxC|GdqX0xe$&Ypj-jMNi8KOE2Y=kSfm@f>FeZxRDir+gt8;wj^zh!Z z4|1S;fIofHmFDiG$6VD-RKNGsNereu%r#2@czVNHJ~(6LRF^Ahouk{HM6Xf-GLk4F z2#V;a{+_juy`2LY@e>1%F6o1ag}KMDd^>Xs!v=aD&Ais3mCBO>f^ zz-{K7lr<8yYYhef7Mt|!Z9Imrv=m)I0RVfS+RTxTUf$^)Brr0G@8oEJduZEaPNXAHVpl8Ko(IhUV0|K-#%m*RAB1@**Dl z=s1!fueR#0OW`wyYIg< zsa}`I3qYPSa=Y>cLv*@FGU}&&*gGwL=D_FNS6R#x58XwfUdyTOetvVfk#J!#4KF;x zvGyKn7g|72@Z#~aNzb_gBBM&YEgjb6MgFF$k*NJpmz@@un+I-K&cC)k$QrE@kIjZG zid2|Q7;@FfqDY-y&Ch9>U1jV%1XGUb`j!;hxMg}*nFc%;pz4NalQwCD8!dNc7A`d zHF`|$sIN)OYh;t+9>+}hiH%pAbo}Z^-{-?KR(|-_2V7lLz!R&NMvv3R6Q5aRhyn%L9QNukNeYg;z4xn|*H zt{ll-v(SP<5ctU2!)PExv&}i)E=T(|v~{!R%mo_z8~~^lio~8|rp4*xp0K;{2Scnb zDPVnhF~@rc(5Y2iYtnIjWhu=UJu~V%y`xBy%vdNyuiH0kud*mjt`W*)+)r%0uBr@$ zAW&q`^XT>U1Vou-<(6ojBi0_?ZRz5q-Idtyc;BQ?i?NieCr7FYj`cfv`%Fj5+(a6o z(NV%mC2xIgPtsNA_$Y)ue z(H6(iw6=6|1Cq$sb|O4!+Cosu(|F91lh*NY-eyjL*2 zPp14#jdRp00ET>iMwBYvxArpZ^GEwivXu7ql5#>{u7-)zygM?N#;BZZzp=cC=T_G6 zm!|Vcg%W98rOCnGZ^Jg?M>gn??_7&dk|z7hkzA|C2f+O+YB8K?YpQttt8+<(5^3C0SHn|VHsbV;k)Nx^=^x{bW^1&+TB}7CC60F4`JlLy zO-rh%uPo)z*>>tJMTiJ9`l@m@kyxWe7UMtePxOtAQ{|p=4DqZ|L6c*Ma9HHbpqIOq zN>01naq9sb?y~bh-6Fo&v6XxG9htRPL6sBNbEf>n#&0&CXG{GO?q0DJ8EAI6*w%0& zp@&2W)!TQ;B}?M3Z>+K`;LmrgWw#A>_r))8n;BkT3>)?wjN9&LYoqqAO$=Gv5}L3W zw3O(z_<~_NhCC#Cxh%)!WWeJELEyz(*Ru7dH9Y#^QLKaRWcxTTDA4AjQ{~V%J_289 zV*SL%ISK{kMjh@zkm0e^i{!C5+S-!e7MuFNW#_SGetqLAZZN?9i_kwsCr=rf(A&NK zltX2*cDvh)-R(_j_}yn7M3yB)Nv0y-$onl9Xmif~r>HA|%j+lklIi6o)=z945=FW$ z@k^U>&ULW0i;>X)Ppn?b&T7+)cKe8*9Sx0_baAE2L;DU>TVzJB&Y^wK&A^C1byAiq zM#`Um0FGYh=jet0OA<==KAjA|7^G?Z(LKxjXI4uQm%`=H$TGi3`pQivxf~i<<`>!5 ooU_as0%ZTSEKBC;cx9XLUtuVuKI-|I^Z)<=07*qoM6N<$g3Pn2od5s; diff --git a/3.1/modules/twitter/lib/images/lighter.png b/3.1/modules/twitter/lib/images/lighter.png deleted file mode 100644 index 297bb03404f2d7462ee9355aae38f5f5f3e47fbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2490 zcmV;r2}SmaP)dbVG7wVRUJ4ZXi@?ZDjy8FEKeU zFgbGL({lg-0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q#1y$)1UwV2@^>~ zK~!jg?VEdWl+_u=f8X9WA)72QVM!vF1VSK4AZQ?nK}o}NseS3JN$f zgRQMIo!W~OJ6`ZouvAJ_K&eH%O=zU35Dd9+OGJ}EvYTu++57IdU;kJVc9XpY6B?a; zX3k{ZIp=-eC+|7m`<-)kR{+>vQ7sWi9D|5ebEgWz_KIq$s4!>9f*d_|j-lj_V|e1| zv2!Q@e7>PCTvsDT9K#C=07>!<2 zJRT3v{^4m(e0B`AMuXes=AQD^+;C$tPj22q>4H*zdfz>`#KAid3>9xAeo+*W%jE#P zv+pgwyLbU*^X6iX@D|vxdJPV{BV^y=rMIzo>FtA}CzL%H7|@3PC-uR0k{o`MEpT&+ zmiCUwd$DjaD&G5mR^R=5Ugy>A zFL6`pd;osE=`rd~)-ZEc5shchvh}x5aZ~9nJpS;;UjCggyhMFX4IM@k^;K2OnpeX9 zJ+G59W-M>Ndx+<@J`*QB2?^MN1N-(fead7?=HEi6T!B@Box5IR=L;`>Ej{PX zHuTf??pp_V_K#2V&%f=WuDXUP)2>6K(eP;bS}ruV@b7*5sr;ydIrB8I2tIsDgsYdEB~aA*X6k7? zxX|2;qp^|Gwe@`Y#d&IupCC)EqUw`l7)GU&uTKu*U$o?QG#U*z%qZYj8`hDRoCLu8 zhbzgOI5DbLyT^;&?d{E@=<{Loc(HlBWQ@7?YwIarxgyB6oH@guS9eiXI-mWozJlq( z1uEY@fC2%N(MZ*iqs%Lw&3$(-XHs%f#Ci8GF3A_N^~J`q@N(Yec4#`>p8;Rm>`^(w z^()mX);zY6A1}KTOQ(hBpZ+tI2M_vvC6EgOasg^TuSW9u`2L~=xMTvlF=IdirA&q( z01}jz+(`M#6-+Id=Jypvl2wZSngV!x>{xvBuA7QRt)c4kYU--0D3~!Fhr>aA^+`_G z)iHDWG@POs#IMsQgCL+*sYp&si#>KieJ zAZPaXZl!3>9M-SjNX7dfvh?=bdf)$&1YWO*1jqy#ZFVPakM~lt{ns24pi(Mnce*e+ zoV|U5)IWA0uWtapa=C)>xf3{EU4zZ(WX19y(%RC@hySVMd_x1@*}REPr@KGD1PCBr zszd|P3jULJU(P|*6JUEpf1ZUYMN@b5y{gO~R0`R^ zzo2^1b1iYS>vBugsL9qPM&yVTyCwWp(Uo=ev@y*W7rS{ZmOePbh#j}_&X%YtxeZa(=9L5<&(e8Bi z<5wsYm^&^0MKr*8(egMLdIIf9`S}2Jn9Y=xl~T570XoAdF4!DlHH6a}anEJ-cv*VQ z<;7KRgYq-}Q)5qi@;qcECS38JtLDV#Y+3g(n;(3LUp}&dB%O}ct5)I-xFV2%>k11g zTUf@C&yKTa*KVdw^(R50loR*{_b2SKCHeZt4jkLpj^;ZlKOe6sQZ!>aT9uM(b0*;N zdYL_=0IS=B(gj7|CTgIo3w=s5DLNgUE;lDl z=6*ck(9~r1FRqNt5);TzP2p%4ylH~wfExv!+`pk8s}?!j(i+mgrP)GJVGd2L zrifxR3OQ=I9MLCX4Ray;#3LJ#2{HtkfT^vG#S0hk#JUIhwAC2&WDQrS)2nfk*V=iQ!Y2K(sVlqHpM%x^1{ck;y4Kin5jc`W;@8<8AFx4+YWs z?QSo2A}4+Q<6F?#y0F{rhttp_status; } - function lastAPICall() { return $this->last_api_call; } - - /** - * construct TwitterOAuth object - */ - function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) { - $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1(); - $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret); - if (!empty($oauth_token) && !empty($oauth_token_secret)) { - $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret); - } else { - $this->token = NULL; - } - } - - - /** - * Get a request_token from Twitter - * - * @returns a key/value array containing oauth_token and oauth_token_secret - */ - function getRequestToken($oauth_callback = NULL) { - $parameters = array(); - if (!empty($oauth_callback)) { - $parameters['oauth_callback'] = $oauth_callback; - } - $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters); - $token = OAuthUtil::parse_parameters($request); - $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); - return $token; - } - - /** - * Get the authorize URL - * - * @returns a string - */ - function getAuthorizeURL($token, $sign_in_with_twitter = TRUE) { - if (is_array($token)) { - $token = $token['oauth_token']; - } - if (empty($sign_in_with_twitter)) { - return $this->authorizeURL() . "?oauth_token={$token}"; - } else { - return $this->authenticateURL() . "?oauth_token={$token}"; - } - } - - /** - * Exchange request token and secret for an access token and - * secret, to sign API calls. - * - * @returns array("oauth_token" => "the-access-token", - * "oauth_token_secret" => "the-access-secret", - * "user_id" => "9436992", - * "screen_name" => "abraham") - */ - function getAccessToken($oauth_verifier = FALSE) { - $parameters = array(); - if (!empty($oauth_verifier)) { - $parameters['oauth_verifier'] = $oauth_verifier; - } - $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters); - $token = OAuthUtil::parse_parameters($request); - $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); - return $token; - } - - /** - * One time exchange of username and password for access token and secret. - * - * @returns array("oauth_token" => "the-access-token", - * "oauth_token_secret" => "the-access-secret", - * "user_id" => "9436992", - * "screen_name" => "abraham", - * "x_auth_expires" => "0") - */ - function getXAuthToken($username, $password) { - $parameters = array(); - $parameters['x_auth_username'] = $username; - $parameters['x_auth_password'] = $password; - $parameters['x_auth_mode'] = 'client_auth'; - $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters); - $token = OAuthUtil::parse_parameters($request); - $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); - return $token; - } - - /** - * GET wrapper for oAuthRequest. - */ - function get($url, $parameters = array()) { - $response = $this->oAuthRequest($url, 'GET', $parameters); - if ($this->format === 'json' && $this->decode_json) { - return json_decode($response); - } - return $response; - } - - /** - * POST wrapper for oAuthRequest. - */ - function post($url, $parameters = array()) { - $response = $this->oAuthRequest($url, 'POST', $parameters); - if ($this->format === 'json' && $this->decode_json) { - return json_decode($response); - } - return $response; - } - - /** - * DELETE wrapper for oAuthReqeust. - */ - function delete($url, $parameters = array()) { - $response = $this->oAuthRequest($url, 'DELETE', $parameters); - if ($this->format === 'json' && $this->decode_json) { - return json_decode($response); - } - return $response; - } - - /** - * Format and sign an OAuth / API request - */ - function oAuthRequest($url, $method, $parameters) { - if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) { - $url = "{$this->host}{$url}.{$this->format}"; - } - $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters); - $request->sign_request($this->sha1_method, $this->consumer, $this->token); - switch ($method) { - case 'GET': - return $this->http($request->to_url(), 'GET'); - default: - return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata()); - } - } - - /** - * Make an HTTP request - * - * @return API results - */ - function http($url, $method, $postfields = NULL) { - $this->http_info = array(); - $ci = curl_init(); - /* Curl settings */ - curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent); - curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); - curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout); - curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); - curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:')); - curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); - curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader')); - curl_setopt($ci, CURLOPT_HEADER, FALSE); - - switch ($method) { - case 'POST': - curl_setopt($ci, CURLOPT_POST, TRUE); - if (!empty($postfields)) { - curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); - } - break; - case 'DELETE': - curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); - if (!empty($postfields)) { - $url = "{$url}?{$postfields}"; - } - } - - curl_setopt($ci, CURLOPT_URL, $url); - $response = curl_exec($ci); - $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); - $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); - $this->url = $url; - curl_close ($ci); - return $response; - } - - /** - * Get the header info to store. - */ - function getHeader($ch, $header) { - $i = strpos($header, ':'); - if (!empty($i)) { - $key = str_replace('-', '_', strtolower(substr($header, 0, $i))); - $value = trim(substr($header, $i + 2)); - $this->http_header[$key] = $value; - } - return strlen($header); - } -} From 8d613c1b9d1c0afb806cba1861e52b47bbec8687 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Sun, 13 Feb 2011 22:35:15 -0700 Subject: [PATCH 26/39] Correct error message display and redirect. --- 3.1/modules/twitter/controllers/twitter.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/3.1/modules/twitter/controllers/twitter.php b/3.1/modules/twitter/controllers/twitter.php index d9bc7a1f..c29efedf 100644 --- a/3.1/modules/twitter/controllers/twitter.php +++ b/3.1/modules/twitter/controllers/twitter.php @@ -136,7 +136,6 @@ class Twitter_Controller extends Controller { /** * Post a status update to Twitter * @param int $item_id - * @todo Display Twitter API errors in Tweet dialog */ public function tweet($item_id) { access::verify_csrf(); @@ -165,9 +164,10 @@ class Twitter_Controller extends Controller { message::success(t("Tweet sent!")); json::reply(array("result" => "success", "location" => $item->url())); } else { - log::error("content", "Twitter", "Unable to send tweet: " . $connection->http_code); - message::error(t("Unable to send Tweet. Your message has been saved. Please try again later.")); - json::reply(array("result" => "error", "html" => (string)$form)); + message::error(t("Unable to send, your Tweet has been saved. Please try again later.")); + log::error("content", "Twitter", t("Unable to send tweet: %http_code", + array("http_code" => $connection->http_code))); + json::reply(array("result" => "success", "location" => $item->url())); } $tweet->item_id = $item_id; (!empty($response->id)) ? $tweet->twitter_id = $response->id : $tweet->twitter_id = NULL; From 1fc1a27364dd62d43d8542f526ae2ca0b068f105 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Mon, 14 Feb 2011 17:19:25 -0700 Subject: [PATCH 27/39] Re-added user_id to CREATE TABLE in the installer helper. --- 3.1/modules/twitter/helpers/twitter_installer.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/3.1/modules/twitter/helpers/twitter_installer.php b/3.1/modules/twitter/helpers/twitter_installer.php index 4e256b64..58016a08 100644 --- a/3.1/modules/twitter/helpers/twitter_installer.php +++ b/3.1/modules/twitter/helpers/twitter_installer.php @@ -24,10 +24,10 @@ class twitter_installer { ->query("CREATE TABLE {twitter_tweets} ( `id` int(9) NOT NULL AUTO_INCREMENT, `item_id` int(9) NOT NULL, + `sent` int(9) NULL, `twitter_id` decimal(20,0) NULL, `tweet` varchar(255) NOT NULL, - `sent` int(9) NULL, - `created` int(9) NOT NULL, + `user_id` int(9) NOT NULL, PRIMARY KEY (`id`)) DEFAULT CHARSET=utf8;"); Database::instance() From c5d19be54bf930a924a3037ce24f348cf77b79f8 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Mon, 14 Feb 2011 17:24:55 -0700 Subject: [PATCH 28/39] Use url::file() instead of url::site() when referencing images. --- 3.1/modules/twitter/views/twitter_dialog.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3.1/modules/twitter/views/twitter_dialog.html.php b/3.1/modules/twitter/views/twitter_dialog.html.php index 751e5b20..b916de2e 100644 --- a/3.1/modules/twitter/views/twitter_dialog.html.php +++ b/3.1/modules/twitter/views/twitter_dialog.html.php @@ -10,7 +10,7 @@

-

" alt="Sign in with Twitter"/>

+

" alt="Sign in with Twitter"/>

From 6fb1e21416dfa1542ee6308efe707efecb306796 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Mon, 14 Feb 2011 19:24:19 -0700 Subject: [PATCH 29/39] Don't show 'Share on Twitter' link if the user's not logged in. --- 3.1/modules/twitter/helpers/twitter_event.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/3.1/modules/twitter/helpers/twitter_event.php b/3.1/modules/twitter/helpers/twitter_event.php index 37c923a9..5dc810d6 100644 --- a/3.1/modules/twitter/helpers/twitter_event.php +++ b/3.1/modules/twitter/helpers/twitter_event.php @@ -28,8 +28,8 @@ class twitter_event_Core { } static function site_menu($menu, $theme) { - $item = $theme->item(); - if (twitter::is_registered()) { + if ((identity::active_user()->id > 1) && twitter::is_registered()) { + $item = $theme->item(); $menu->get("options_menu") ->append(Menu::factory("dialog") ->id("twitter") @@ -40,7 +40,7 @@ class twitter_event_Core { } static function context_menu($menu, $theme, $item) { - if (twitter::is_registered()) { + if ((identity::active_user()->id > 1) && twitter::is_registered()) { $menu->get("options_menu") ->append(Menu::factory("dialog") ->id("twitter") From cb9cf301331280c86c5fa9f8b021715149176768 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Mon, 14 Feb 2011 20:17:53 -0700 Subject: [PATCH 30/39] Fix Twitter OAuth redirect, update access token saved confirmation message. --- 3.1/modules/twitter/controllers/twitter.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/3.1/modules/twitter/controllers/twitter.php b/3.1/modules/twitter/controllers/twitter.php index c29efedf..ecd195d6 100644 --- a/3.1/modules/twitter/controllers/twitter.php +++ b/3.1/modules/twitter/controllers/twitter.php @@ -125,11 +125,11 @@ class Twitter_Controller extends Controller { if (200 == $connection->http_code) { // Build authorize URL and redirect user to Twitter $url = $connection->getAuthorizeURL($request_token["oauth_token"]); - url::redirect(url::site($url)); + url::redirect($url); } else { // Show notification if something went wrong message::success(t("Could not connect to Twitter. Refresh the page or try again later.")); - url::redirect(url::site($url)); + url::redirect(urldecode($_GET['item_url'])); } } @@ -249,7 +249,7 @@ class Twitter_Controller extends Controller { $u->user_id = identity::active_user()->id; $u->save(); - message::success(t("Twitter access tokens saved!")); + message::success(t("Success! You may now share Gallery items on Twitter.")); } } From 94e0758c27065c5d9391c098455545144f1b0cee Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Mon, 14 Feb 2011 20:43:47 -0700 Subject: [PATCH 31/39] Updated authorize notice message. --- 3.1/modules/twitter/views/twitter_dialog.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3.1/modules/twitter/views/twitter_dialog.html.php b/3.1/modules/twitter/views/twitter_dialog.html.php index b916de2e..b39c7928 100644 --- a/3.1/modules/twitter/views/twitter_dialog.html.php +++ b/3.1/modules/twitter/views/twitter_dialog.html.php @@ -9,7 +9,7 @@

-

+

" alt="Sign in with Twitter"/>

From eddddf04b141b39b60fcaba5074978634f084bfa Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Mon, 14 Feb 2011 22:40:08 -0700 Subject: [PATCH 32/39] Restored reset_default_tweet(), without it the default tweet value isn't set during installation. --- 3.1/modules/twitter/controllers/admin_twitter.php | 9 +-------- 3.1/modules/twitter/helpers/twitter.php | 4 ++++ 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/3.1/modules/twitter/controllers/admin_twitter.php b/3.1/modules/twitter/controllers/admin_twitter.php index a65168fb..5c954953 100644 --- a/3.1/modules/twitter/controllers/admin_twitter.php +++ b/3.1/modules/twitter/controllers/admin_twitter.php @@ -19,13 +19,6 @@ */ class Admin_Twitter_Controller extends Admin_Controller { - public $default_tweet; - - function __construct() { - parent::__construct(); - $this->default_tweet = t("Check out this %type, '%title': %description %url"); - } - /** * bit.ly module's settings * @todo Show default tweet value after resetting it! @@ -40,7 +33,7 @@ class Admin_Twitter_Controller extends Admin_Controller { $reset_tweet = $form->twitter_message->reset_tweet->value; if ($reset_tweet) { $default_tweet = $this->default_tweet; - $form->twitter_message->default_tweet->value = $this->default_tweet; + $form->twitter_message->default_tweet->value = twitter::reset_default_tweet(); } else { $default_tweet = $form->twitter_message->default_tweet->value; } diff --git a/3.1/modules/twitter/helpers/twitter.php b/3.1/modules/twitter/helpers/twitter.php index 54df4e67..ceea12f5 100644 --- a/3.1/modules/twitter/helpers/twitter.php +++ b/3.1/modules/twitter/helpers/twitter.php @@ -133,4 +133,8 @@ class twitter_Core { } } + static function reset_default_tweet() { + return t("Check out this %type, '%title': %description %url"); + } + } From 6e605a809535050de2554dd2f037820c902d63a1 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Mon, 14 Feb 2011 22:52:22 -0700 Subject: [PATCH 33/39] Redirect after updating settings. --- 3.1/modules/twitter/controllers/admin_twitter.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/3.1/modules/twitter/controllers/admin_twitter.php b/3.1/modules/twitter/controllers/admin_twitter.php index 5c954953..7d1400ab 100644 --- a/3.1/modules/twitter/controllers/admin_twitter.php +++ b/3.1/modules/twitter/controllers/admin_twitter.php @@ -32,8 +32,7 @@ class Admin_Twitter_Controller extends Admin_Controller { $consumer_secret = $form->twitter_oauth->consumer_secret->value; $reset_tweet = $form->twitter_message->reset_tweet->value; if ($reset_tweet) { - $default_tweet = $this->default_tweet; - $form->twitter_message->default_tweet->value = twitter::reset_default_tweet(); + $default_tweet = twitter::reset_default_tweet(); } else { $default_tweet = $form->twitter_message->default_tweet->value; } @@ -43,7 +42,9 @@ class Admin_Twitter_Controller extends Admin_Controller { module::set_var("twitter", "consumer_secret", $consumer_secret); module::set_var("twitter", "default_tweet", $default_tweet); module::set_var("twitter", "shorten_urls", $shorten_urls); + message::success("Twitter settings saved"); + url::redirect("admin/twitter"); } } $is_registered = twitter::is_registered(); From a541f954cde5a9cc0a2c5fad0a01b6626ffccc0d Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Tue, 15 Feb 2011 13:29:54 -0700 Subject: [PATCH 34/39] Update bit.ly README. Added twitter README. --- 3.1/modules/bitly/README | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/3.1/modules/bitly/README b/3.1/modules/bitly/README index d89fe4fe..3c385366 100644 --- a/3.1/modules/bitly/README +++ b/3.1/modules/bitly/README @@ -1,12 +1,12 @@ ABOUT: Shorten Gallery's album and item links using bit.ly's URL shortening service. -INSTALLATION AND CONFIGURATION INSTRUCTIONS: +INSTALLATION AND CONFIGURATION: http://codex.gallery2.org/Gallery3:Modules:bitly -QUESTIONS, COMMENTS? -http://2tbsp.com/content/bitly-module-gallery-3 +SUPPORT/BUG REPORTS: +http://gallery.menalto.com/node/100816 ROADMAP: -- Provide multi-user support. -- Display shortened link statistics (clicks, etc.) +* Provide multi-user support. +* Display shortened link statistics (clicks, etc.) From 4b090fbe27550b5f33a1a48fc125bf954578649c Mon Sep 17 00:00:00 2001 From: dmolavi Date: Tue, 15 Feb 2011 20:29:36 -0500 Subject: [PATCH 35/39] Moving photoannotation to photo_annotation for consistancy w/ codex. --- .../controllers/admin_photoannotation.php | 0 .../controllers/photoannotation.php | 0 .../css/colorpicker.css | 322 +++++++++--------- .../css/photoannotation.css | 0 .../helpers/photoannotation.php | 0 .../helpers/photoannotation_block.php | 0 .../helpers/photoannotation_event.php | 0 .../helpers/photoannotation_installer.php | 0 .../helpers/photoannotation_theme.php | 0 .../images/blank.gif | Bin .../images/colorpicker_background.png | Bin .../images/colorpicker_hex.png | Bin .../images/colorpicker_hsb_b.png | Bin .../images/colorpicker_hsb_h.png | Bin .../images/colorpicker_hsb_s.png | Bin .../images/colorpicker_indic.gif | Bin .../images/colorpicker_overlay.png | Bin .../images/colorpicker_rgb_b.png | Bin .../images/colorpicker_rgb_g.png | Bin .../images/colorpicker_rgb_r.png | Bin .../images/colorpicker_select.gif | Bin .../images/colorpicker_submit.png | Bin .../images/custom_background.png | Bin .../images/custom_hex.png | Bin .../images/custom_hsb_b.png | Bin .../images/custom_hsb_h.png | Bin .../images/custom_hsb_s.png | Bin .../images/custom_indic.gif | Bin .../images/custom_rgb_b.png | Bin .../images/custom_rgb_g.png | Bin .../images/custom_rgb_r.png | Bin .../images/custom_submit.png | Bin .../images/delete.png | Bin .../images/edit.png | Bin .../images/select.png | Bin .../images/select2.png | Bin .../images/slider.png | Bin .../js/jquery.annotate.js | 0 .../js/jquery.annotate.min.js | 0 .../js/jquery.colorpicker.js | 0 .../js/jquery.colorpicker.min.js | 0 .../models/items_face.php | 0 .../models/items_note.php | 0 .../models/items_user.php | 0 .../models/photoannotation_notification.php | 0 .../module.info | 6 +- .../views/admin_photoannotation.html.php | 0 .../admin_photoannotation_converter.html.php | 0 ...n_photoannotation_tagsmaintanance.html.php | 0 .../views/photoannotation_block.html.php | 0 .../views/photoannotation_cloud.html.php | 0 .../photoannotation_highlight_block.html.php | 0 .../photoannotation_user_search.html.php | 0 53 files changed, 164 insertions(+), 164 deletions(-) rename 3.0/modules/{photoannotation => photo_annotation}/controllers/admin_photoannotation.php (100%) mode change 100755 => 100644 rename 3.0/modules/{photoannotation => photo_annotation}/controllers/photoannotation.php (100%) rename 3.0/modules/{photoannotation => photo_annotation}/css/colorpicker.css (94%) rename 3.0/modules/{photoannotation => photo_annotation}/css/photoannotation.css (100%) rename 3.0/modules/{photoannotation => photo_annotation}/helpers/photoannotation.php (100%) rename 3.0/modules/{photoannotation => photo_annotation}/helpers/photoannotation_block.php (100%) rename 3.0/modules/{photoannotation => photo_annotation}/helpers/photoannotation_event.php (100%) rename 3.0/modules/{photoannotation => photo_annotation}/helpers/photoannotation_installer.php (100%) rename 3.0/modules/{photoannotation => photo_annotation}/helpers/photoannotation_theme.php (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/blank.gif (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/colorpicker_background.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/colorpicker_hex.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/colorpicker_hsb_b.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/colorpicker_hsb_h.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/colorpicker_hsb_s.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/colorpicker_indic.gif (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/colorpicker_overlay.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/colorpicker_rgb_b.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/colorpicker_rgb_g.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/colorpicker_rgb_r.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/colorpicker_select.gif (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/colorpicker_submit.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/custom_background.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/custom_hex.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/custom_hsb_b.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/custom_hsb_h.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/custom_hsb_s.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/custom_indic.gif (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/custom_rgb_b.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/custom_rgb_g.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/custom_rgb_r.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/custom_submit.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/delete.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/edit.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/select.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/select2.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/images/slider.png (100%) rename 3.0/modules/{photoannotation => photo_annotation}/js/jquery.annotate.js (100%) rename 3.0/modules/{photoannotation => photo_annotation}/js/jquery.annotate.min.js (100%) rename 3.0/modules/{photoannotation => photo_annotation}/js/jquery.colorpicker.js (100%) rename 3.0/modules/{photoannotation => photo_annotation}/js/jquery.colorpicker.min.js (100%) rename 3.0/modules/{photoannotation => photo_annotation}/models/items_face.php (100%) rename 3.0/modules/{photoannotation => photo_annotation}/models/items_note.php (100%) rename 3.0/modules/{photoannotation => photo_annotation}/models/items_user.php (100%) rename 3.0/modules/{photoannotation => photo_annotation}/models/photoannotation_notification.php (100%) rename 3.0/modules/{photoannotation => photo_annotation}/module.info (99%) rename 3.0/modules/{photoannotation => photo_annotation}/views/admin_photoannotation.html.php (100%) rename 3.0/modules/{photoannotation => photo_annotation}/views/admin_photoannotation_converter.html.php (100%) rename 3.0/modules/{photoannotation => photo_annotation}/views/admin_photoannotation_tagsmaintanance.html.php (100%) rename 3.0/modules/{photoannotation => photo_annotation}/views/photoannotation_block.html.php (100%) rename 3.0/modules/{photoannotation => photo_annotation}/views/photoannotation_cloud.html.php (100%) rename 3.0/modules/{photoannotation => photo_annotation}/views/photoannotation_highlight_block.html.php (100%) rename 3.0/modules/{photoannotation => photo_annotation}/views/photoannotation_user_search.html.php (100%) diff --git a/3.0/modules/photoannotation/controllers/admin_photoannotation.php b/3.0/modules/photo_annotation/controllers/admin_photoannotation.php old mode 100755 new mode 100644 similarity index 100% rename from 3.0/modules/photoannotation/controllers/admin_photoannotation.php rename to 3.0/modules/photo_annotation/controllers/admin_photoannotation.php diff --git a/3.0/modules/photoannotation/controllers/photoannotation.php b/3.0/modules/photo_annotation/controllers/photoannotation.php similarity index 100% rename from 3.0/modules/photoannotation/controllers/photoannotation.php rename to 3.0/modules/photo_annotation/controllers/photoannotation.php diff --git a/3.0/modules/photoannotation/css/colorpicker.css b/3.0/modules/photo_annotation/css/colorpicker.css similarity index 94% rename from 3.0/modules/photoannotation/css/colorpicker.css rename to 3.0/modules/photo_annotation/css/colorpicker.css index 05b02b48..0b3d5d93 100644 --- a/3.0/modules/photoannotation/css/colorpicker.css +++ b/3.0/modules/photo_annotation/css/colorpicker.css @@ -1,161 +1,161 @@ -.colorpicker { - width: 356px; - height: 176px; - overflow: hidden; - position: absolute; - background: url(../images/colorpicker_background.png); - font-family: Arial, Helvetica, sans-serif; - display: none; -} -.colorpicker_color { - width: 150px; - height: 150px; - left: 14px; - top: 13px; - position: absolute; - background: #f00; - overflow: hidden; - cursor: crosshair; -} -.colorpicker_color div { - position: absolute; - top: 0; - left: 0; - width: 150px; - height: 150px; - background: url(../images/colorpicker_overlay.png); -} -.colorpicker_color div div { - position: absolute; - top: 0; - left: 0; - width: 11px; - height: 11px; - overflow: hidden; - background: url(../images/colorpicker_select.gif); - margin: -5px 0 0 -5px; -} -.colorpicker_hue { - position: absolute; - top: 13px; - left: 171px; - width: 35px; - height: 150px; - cursor: n-resize; -} -.colorpicker_hue div { - position: absolute; - width: 35px; - height: 9px; - overflow: hidden; - background: url(../images/colorpicker_indic.gif) left top; - margin: -4px 0 0 0; - left: 0px; -} -.colorpicker_new_color { - position: absolute; - width: 60px; - height: 30px; - left: 213px; - top: 13px; - background: #f00; -} -.colorpicker_current_color { - position: absolute; - width: 60px; - height: 30px; - left: 283px; - top: 13px; - background: #f00; -} -.colorpicker input { - background-color: transparent; - border: 1px solid transparent; - position: absolute; - font-size: 10px; - font-family: Arial, Helvetica, sans-serif; - color: #898989; - top: 4px; - right: 11px; - text-align: right; - margin: 0; - padding: 0; - height: 11px; -} -.colorpicker_hex { - position: absolute; - width: 72px; - height: 22px; - background: url(../images/colorpicker_hex.png) top; - left: 212px; - top: 142px; -} -.colorpicker_hex input { - right: 6px; -} -.colorpicker_field { - height: 22px; - width: 62px; - background-position: top; - position: absolute; -} -.colorpicker_field span { - position: absolute; - width: 12px; - height: 22px; - overflow: hidden; - top: 0; - right: 0; - cursor: n-resize; -} -.colorpicker_rgb_r { - background-image: url(../images/colorpicker_rgb_r.png); - top: 52px; - left: 212px; -} -.colorpicker_rgb_g { - background-image: url(../images/colorpicker_rgb_g.png); - top: 82px; - left: 212px; -} -.colorpicker_rgb_b { - background-image: url(../images/colorpicker_rgb_b.png); - top: 112px; - left: 212px; -} -.colorpicker_hsb_h { - background-image: url(../images/colorpicker_hsb_h.png); - top: 52px; - left: 282px; -} -.colorpicker_hsb_s { - background-image: url(../images/colorpicker_hsb_s.png); - top: 82px; - left: 282px; -} -.colorpicker_hsb_b { - background-image: url(../images/colorpicker_hsb_b.png); - top: 112px; - left: 282px; -} -.colorpicker_submit { - position: absolute; - width: 22px; - height: 22px; - background: url(../images/colorpicker_submit.png) top; - left: 322px; - top: 142px; - overflow: hidden; -} -.colorpicker_focus { - background-position: center; -} -.colorpicker_hex.colorpicker_focus { - background-position: bottom; -} -.colorpicker_submit.colorpicker_focus { - background-position: bottom; -} -.colorpicker_slider { - background-position: bottom; -} +.colorpicker { + width: 356px; + height: 176px; + overflow: hidden; + position: absolute; + background: url(../images/colorpicker_background.png); + font-family: Arial, Helvetica, sans-serif; + display: none; +} +.colorpicker_color { + width: 150px; + height: 150px; + left: 14px; + top: 13px; + position: absolute; + background: #f00; + overflow: hidden; + cursor: crosshair; +} +.colorpicker_color div { + position: absolute; + top: 0; + left: 0; + width: 150px; + height: 150px; + background: url(../images/colorpicker_overlay.png); +} +.colorpicker_color div div { + position: absolute; + top: 0; + left: 0; + width: 11px; + height: 11px; + overflow: hidden; + background: url(../images/colorpicker_select.gif); + margin: -5px 0 0 -5px; +} +.colorpicker_hue { + position: absolute; + top: 13px; + left: 171px; + width: 35px; + height: 150px; + cursor: n-resize; +} +.colorpicker_hue div { + position: absolute; + width: 35px; + height: 9px; + overflow: hidden; + background: url(../images/colorpicker_indic.gif) left top; + margin: -4px 0 0 0; + left: 0px; +} +.colorpicker_new_color { + position: absolute; + width: 60px; + height: 30px; + left: 213px; + top: 13px; + background: #f00; +} +.colorpicker_current_color { + position: absolute; + width: 60px; + height: 30px; + left: 283px; + top: 13px; + background: #f00; +} +.colorpicker input { + background-color: transparent; + border: 1px solid transparent; + position: absolute; + font-size: 10px; + font-family: Arial, Helvetica, sans-serif; + color: #898989; + top: 4px; + right: 11px; + text-align: right; + margin: 0; + padding: 0; + height: 11px; +} +.colorpicker_hex { + position: absolute; + width: 72px; + height: 22px; + background: url(../images/colorpicker_hex.png) top; + left: 212px; + top: 142px; +} +.colorpicker_hex input { + right: 6px; +} +.colorpicker_field { + height: 22px; + width: 62px; + background-position: top; + position: absolute; +} +.colorpicker_field span { + position: absolute; + width: 12px; + height: 22px; + overflow: hidden; + top: 0; + right: 0; + cursor: n-resize; +} +.colorpicker_rgb_r { + background-image: url(../images/colorpicker_rgb_r.png); + top: 52px; + left: 212px; +} +.colorpicker_rgb_g { + background-image: url(../images/colorpicker_rgb_g.png); + top: 82px; + left: 212px; +} +.colorpicker_rgb_b { + background-image: url(../images/colorpicker_rgb_b.png); + top: 112px; + left: 212px; +} +.colorpicker_hsb_h { + background-image: url(../images/colorpicker_hsb_h.png); + top: 52px; + left: 282px; +} +.colorpicker_hsb_s { + background-image: url(../images/colorpicker_hsb_s.png); + top: 82px; + left: 282px; +} +.colorpicker_hsb_b { + background-image: url(../images/colorpicker_hsb_b.png); + top: 112px; + left: 282px; +} +.colorpicker_submit { + position: absolute; + width: 22px; + height: 22px; + background: url(../images/colorpicker_submit.png) top; + left: 322px; + top: 142px; + overflow: hidden; +} +.colorpicker_focus { + background-position: center; +} +.colorpicker_hex.colorpicker_focus { + background-position: bottom; +} +.colorpicker_submit.colorpicker_focus { + background-position: bottom; +} +.colorpicker_slider { + background-position: bottom; +} diff --git a/3.0/modules/photoannotation/css/photoannotation.css b/3.0/modules/photo_annotation/css/photoannotation.css similarity index 100% rename from 3.0/modules/photoannotation/css/photoannotation.css rename to 3.0/modules/photo_annotation/css/photoannotation.css diff --git a/3.0/modules/photoannotation/helpers/photoannotation.php b/3.0/modules/photo_annotation/helpers/photoannotation.php similarity index 100% rename from 3.0/modules/photoannotation/helpers/photoannotation.php rename to 3.0/modules/photo_annotation/helpers/photoannotation.php diff --git a/3.0/modules/photoannotation/helpers/photoannotation_block.php b/3.0/modules/photo_annotation/helpers/photoannotation_block.php similarity index 100% rename from 3.0/modules/photoannotation/helpers/photoannotation_block.php rename to 3.0/modules/photo_annotation/helpers/photoannotation_block.php diff --git a/3.0/modules/photoannotation/helpers/photoannotation_event.php b/3.0/modules/photo_annotation/helpers/photoannotation_event.php similarity index 100% rename from 3.0/modules/photoannotation/helpers/photoannotation_event.php rename to 3.0/modules/photo_annotation/helpers/photoannotation_event.php diff --git a/3.0/modules/photoannotation/helpers/photoannotation_installer.php b/3.0/modules/photo_annotation/helpers/photoannotation_installer.php similarity index 100% rename from 3.0/modules/photoannotation/helpers/photoannotation_installer.php rename to 3.0/modules/photo_annotation/helpers/photoannotation_installer.php diff --git a/3.0/modules/photoannotation/helpers/photoannotation_theme.php b/3.0/modules/photo_annotation/helpers/photoannotation_theme.php similarity index 100% rename from 3.0/modules/photoannotation/helpers/photoannotation_theme.php rename to 3.0/modules/photo_annotation/helpers/photoannotation_theme.php diff --git a/3.0/modules/photoannotation/images/blank.gif b/3.0/modules/photo_annotation/images/blank.gif similarity index 100% rename from 3.0/modules/photoannotation/images/blank.gif rename to 3.0/modules/photo_annotation/images/blank.gif diff --git a/3.0/modules/photoannotation/images/colorpicker_background.png b/3.0/modules/photo_annotation/images/colorpicker_background.png similarity index 100% rename from 3.0/modules/photoannotation/images/colorpicker_background.png rename to 3.0/modules/photo_annotation/images/colorpicker_background.png diff --git a/3.0/modules/photoannotation/images/colorpicker_hex.png b/3.0/modules/photo_annotation/images/colorpicker_hex.png similarity index 100% rename from 3.0/modules/photoannotation/images/colorpicker_hex.png rename to 3.0/modules/photo_annotation/images/colorpicker_hex.png diff --git a/3.0/modules/photoannotation/images/colorpicker_hsb_b.png b/3.0/modules/photo_annotation/images/colorpicker_hsb_b.png similarity index 100% rename from 3.0/modules/photoannotation/images/colorpicker_hsb_b.png rename to 3.0/modules/photo_annotation/images/colorpicker_hsb_b.png diff --git a/3.0/modules/photoannotation/images/colorpicker_hsb_h.png b/3.0/modules/photo_annotation/images/colorpicker_hsb_h.png similarity index 100% rename from 3.0/modules/photoannotation/images/colorpicker_hsb_h.png rename to 3.0/modules/photo_annotation/images/colorpicker_hsb_h.png diff --git a/3.0/modules/photoannotation/images/colorpicker_hsb_s.png b/3.0/modules/photo_annotation/images/colorpicker_hsb_s.png similarity index 100% rename from 3.0/modules/photoannotation/images/colorpicker_hsb_s.png rename to 3.0/modules/photo_annotation/images/colorpicker_hsb_s.png diff --git a/3.0/modules/photoannotation/images/colorpicker_indic.gif b/3.0/modules/photo_annotation/images/colorpicker_indic.gif similarity index 100% rename from 3.0/modules/photoannotation/images/colorpicker_indic.gif rename to 3.0/modules/photo_annotation/images/colorpicker_indic.gif diff --git a/3.0/modules/photoannotation/images/colorpicker_overlay.png b/3.0/modules/photo_annotation/images/colorpicker_overlay.png similarity index 100% rename from 3.0/modules/photoannotation/images/colorpicker_overlay.png rename to 3.0/modules/photo_annotation/images/colorpicker_overlay.png diff --git a/3.0/modules/photoannotation/images/colorpicker_rgb_b.png b/3.0/modules/photo_annotation/images/colorpicker_rgb_b.png similarity index 100% rename from 3.0/modules/photoannotation/images/colorpicker_rgb_b.png rename to 3.0/modules/photo_annotation/images/colorpicker_rgb_b.png diff --git a/3.0/modules/photoannotation/images/colorpicker_rgb_g.png b/3.0/modules/photo_annotation/images/colorpicker_rgb_g.png similarity index 100% rename from 3.0/modules/photoannotation/images/colorpicker_rgb_g.png rename to 3.0/modules/photo_annotation/images/colorpicker_rgb_g.png diff --git a/3.0/modules/photoannotation/images/colorpicker_rgb_r.png b/3.0/modules/photo_annotation/images/colorpicker_rgb_r.png similarity index 100% rename from 3.0/modules/photoannotation/images/colorpicker_rgb_r.png rename to 3.0/modules/photo_annotation/images/colorpicker_rgb_r.png diff --git a/3.0/modules/photoannotation/images/colorpicker_select.gif b/3.0/modules/photo_annotation/images/colorpicker_select.gif similarity index 100% rename from 3.0/modules/photoannotation/images/colorpicker_select.gif rename to 3.0/modules/photo_annotation/images/colorpicker_select.gif diff --git a/3.0/modules/photoannotation/images/colorpicker_submit.png b/3.0/modules/photo_annotation/images/colorpicker_submit.png similarity index 100% rename from 3.0/modules/photoannotation/images/colorpicker_submit.png rename to 3.0/modules/photo_annotation/images/colorpicker_submit.png diff --git a/3.0/modules/photoannotation/images/custom_background.png b/3.0/modules/photo_annotation/images/custom_background.png similarity index 100% rename from 3.0/modules/photoannotation/images/custom_background.png rename to 3.0/modules/photo_annotation/images/custom_background.png diff --git a/3.0/modules/photoannotation/images/custom_hex.png b/3.0/modules/photo_annotation/images/custom_hex.png similarity index 100% rename from 3.0/modules/photoannotation/images/custom_hex.png rename to 3.0/modules/photo_annotation/images/custom_hex.png diff --git a/3.0/modules/photoannotation/images/custom_hsb_b.png b/3.0/modules/photo_annotation/images/custom_hsb_b.png similarity index 100% rename from 3.0/modules/photoannotation/images/custom_hsb_b.png rename to 3.0/modules/photo_annotation/images/custom_hsb_b.png diff --git a/3.0/modules/photoannotation/images/custom_hsb_h.png b/3.0/modules/photo_annotation/images/custom_hsb_h.png similarity index 100% rename from 3.0/modules/photoannotation/images/custom_hsb_h.png rename to 3.0/modules/photo_annotation/images/custom_hsb_h.png diff --git a/3.0/modules/photoannotation/images/custom_hsb_s.png b/3.0/modules/photo_annotation/images/custom_hsb_s.png similarity index 100% rename from 3.0/modules/photoannotation/images/custom_hsb_s.png rename to 3.0/modules/photo_annotation/images/custom_hsb_s.png diff --git a/3.0/modules/photoannotation/images/custom_indic.gif b/3.0/modules/photo_annotation/images/custom_indic.gif similarity index 100% rename from 3.0/modules/photoannotation/images/custom_indic.gif rename to 3.0/modules/photo_annotation/images/custom_indic.gif diff --git a/3.0/modules/photoannotation/images/custom_rgb_b.png b/3.0/modules/photo_annotation/images/custom_rgb_b.png similarity index 100% rename from 3.0/modules/photoannotation/images/custom_rgb_b.png rename to 3.0/modules/photo_annotation/images/custom_rgb_b.png diff --git a/3.0/modules/photoannotation/images/custom_rgb_g.png b/3.0/modules/photo_annotation/images/custom_rgb_g.png similarity index 100% rename from 3.0/modules/photoannotation/images/custom_rgb_g.png rename to 3.0/modules/photo_annotation/images/custom_rgb_g.png diff --git a/3.0/modules/photoannotation/images/custom_rgb_r.png b/3.0/modules/photo_annotation/images/custom_rgb_r.png similarity index 100% rename from 3.0/modules/photoannotation/images/custom_rgb_r.png rename to 3.0/modules/photo_annotation/images/custom_rgb_r.png diff --git a/3.0/modules/photoannotation/images/custom_submit.png b/3.0/modules/photo_annotation/images/custom_submit.png similarity index 100% rename from 3.0/modules/photoannotation/images/custom_submit.png rename to 3.0/modules/photo_annotation/images/custom_submit.png diff --git a/3.0/modules/photoannotation/images/delete.png b/3.0/modules/photo_annotation/images/delete.png similarity index 100% rename from 3.0/modules/photoannotation/images/delete.png rename to 3.0/modules/photo_annotation/images/delete.png diff --git a/3.0/modules/photoannotation/images/edit.png b/3.0/modules/photo_annotation/images/edit.png similarity index 100% rename from 3.0/modules/photoannotation/images/edit.png rename to 3.0/modules/photo_annotation/images/edit.png diff --git a/3.0/modules/photoannotation/images/select.png b/3.0/modules/photo_annotation/images/select.png similarity index 100% rename from 3.0/modules/photoannotation/images/select.png rename to 3.0/modules/photo_annotation/images/select.png diff --git a/3.0/modules/photoannotation/images/select2.png b/3.0/modules/photo_annotation/images/select2.png similarity index 100% rename from 3.0/modules/photoannotation/images/select2.png rename to 3.0/modules/photo_annotation/images/select2.png diff --git a/3.0/modules/photoannotation/images/slider.png b/3.0/modules/photo_annotation/images/slider.png similarity index 100% rename from 3.0/modules/photoannotation/images/slider.png rename to 3.0/modules/photo_annotation/images/slider.png diff --git a/3.0/modules/photoannotation/js/jquery.annotate.js b/3.0/modules/photo_annotation/js/jquery.annotate.js similarity index 100% rename from 3.0/modules/photoannotation/js/jquery.annotate.js rename to 3.0/modules/photo_annotation/js/jquery.annotate.js diff --git a/3.0/modules/photoannotation/js/jquery.annotate.min.js b/3.0/modules/photo_annotation/js/jquery.annotate.min.js similarity index 100% rename from 3.0/modules/photoannotation/js/jquery.annotate.min.js rename to 3.0/modules/photo_annotation/js/jquery.annotate.min.js diff --git a/3.0/modules/photoannotation/js/jquery.colorpicker.js b/3.0/modules/photo_annotation/js/jquery.colorpicker.js similarity index 100% rename from 3.0/modules/photoannotation/js/jquery.colorpicker.js rename to 3.0/modules/photo_annotation/js/jquery.colorpicker.js diff --git a/3.0/modules/photoannotation/js/jquery.colorpicker.min.js b/3.0/modules/photo_annotation/js/jquery.colorpicker.min.js similarity index 100% rename from 3.0/modules/photoannotation/js/jquery.colorpicker.min.js rename to 3.0/modules/photo_annotation/js/jquery.colorpicker.min.js diff --git a/3.0/modules/photoannotation/models/items_face.php b/3.0/modules/photo_annotation/models/items_face.php similarity index 100% rename from 3.0/modules/photoannotation/models/items_face.php rename to 3.0/modules/photo_annotation/models/items_face.php diff --git a/3.0/modules/photoannotation/models/items_note.php b/3.0/modules/photo_annotation/models/items_note.php similarity index 100% rename from 3.0/modules/photoannotation/models/items_note.php rename to 3.0/modules/photo_annotation/models/items_note.php diff --git a/3.0/modules/photoannotation/models/items_user.php b/3.0/modules/photo_annotation/models/items_user.php similarity index 100% rename from 3.0/modules/photoannotation/models/items_user.php rename to 3.0/modules/photo_annotation/models/items_user.php diff --git a/3.0/modules/photoannotation/models/photoannotation_notification.php b/3.0/modules/photo_annotation/models/photoannotation_notification.php similarity index 100% rename from 3.0/modules/photoannotation/models/photoannotation_notification.php rename to 3.0/modules/photo_annotation/models/photoannotation_notification.php diff --git a/3.0/modules/photoannotation/module.info b/3.0/modules/photo_annotation/module.info similarity index 99% rename from 3.0/modules/photoannotation/module.info rename to 3.0/modules/photo_annotation/module.info index 133c2456..b603a755 100644 --- a/3.0/modules/photoannotation/module.info +++ b/3.0/modules/photo_annotation/module.info @@ -1,3 +1,3 @@ -name = "Photo Annotation" -description = "Allows you to assign tags and notes to areas on your photos. This module is partially compatible with the TagFaces module by rWatcher. This means that notes and faces that you create in either one will be shown and are editable by the other module as well. If you added users to an annotation area though they will only be displayed with the Photo Annotation module. You cannot run both modules at the same time." -version = 4 +name = "Photo Annotation" +description = "Allows you to assign tags and notes to areas on your photos. This module is partially compatible with the TagFaces module by rWatcher. This means that notes and faces that you create in either one will be shown and are editable by the other module as well. If you added users to an annotation area though they will only be displayed with the Photo Annotation module. You cannot run both modules at the same time." +version = 4 diff --git a/3.0/modules/photoannotation/views/admin_photoannotation.html.php b/3.0/modules/photo_annotation/views/admin_photoannotation.html.php similarity index 100% rename from 3.0/modules/photoannotation/views/admin_photoannotation.html.php rename to 3.0/modules/photo_annotation/views/admin_photoannotation.html.php diff --git a/3.0/modules/photoannotation/views/admin_photoannotation_converter.html.php b/3.0/modules/photo_annotation/views/admin_photoannotation_converter.html.php similarity index 100% rename from 3.0/modules/photoannotation/views/admin_photoannotation_converter.html.php rename to 3.0/modules/photo_annotation/views/admin_photoannotation_converter.html.php diff --git a/3.0/modules/photoannotation/views/admin_photoannotation_tagsmaintanance.html.php b/3.0/modules/photo_annotation/views/admin_photoannotation_tagsmaintanance.html.php similarity index 100% rename from 3.0/modules/photoannotation/views/admin_photoannotation_tagsmaintanance.html.php rename to 3.0/modules/photo_annotation/views/admin_photoannotation_tagsmaintanance.html.php diff --git a/3.0/modules/photoannotation/views/photoannotation_block.html.php b/3.0/modules/photo_annotation/views/photoannotation_block.html.php similarity index 100% rename from 3.0/modules/photoannotation/views/photoannotation_block.html.php rename to 3.0/modules/photo_annotation/views/photoannotation_block.html.php diff --git a/3.0/modules/photoannotation/views/photoannotation_cloud.html.php b/3.0/modules/photo_annotation/views/photoannotation_cloud.html.php similarity index 100% rename from 3.0/modules/photoannotation/views/photoannotation_cloud.html.php rename to 3.0/modules/photo_annotation/views/photoannotation_cloud.html.php diff --git a/3.0/modules/photoannotation/views/photoannotation_highlight_block.html.php b/3.0/modules/photo_annotation/views/photoannotation_highlight_block.html.php similarity index 100% rename from 3.0/modules/photoannotation/views/photoannotation_highlight_block.html.php rename to 3.0/modules/photo_annotation/views/photoannotation_highlight_block.html.php diff --git a/3.0/modules/photoannotation/views/photoannotation_user_search.html.php b/3.0/modules/photo_annotation/views/photoannotation_user_search.html.php similarity index 100% rename from 3.0/modules/photoannotation/views/photoannotation_user_search.html.php rename to 3.0/modules/photo_annotation/views/photoannotation_user_search.html.php From 442716a75b7aa54e13a2b560270669d988de7cdb Mon Sep 17 00:00:00 2001 From: dmolavi Date: Tue, 15 Feb 2011 20:34:00 -0500 Subject: [PATCH 36/39] Naming inconsistency between git and codex (git used british english, codex used american english). --- 3.0/modules/{gwtorganise => gwtorganize}/.classpath | 0 .../.externalToolBuilders/New_Builder.launch | 0 3.0/modules/{gwtorganise => gwtorganize}/.project | 0 .../com.google.appengine.eclipse.core.prefs | 0 .../.settings/com.google.gdt.eclipse.core.prefs | 0 .../.settings/com.google.gwt.eclipse.core.prefs | 0 3.0/modules/{gwtorganise => gwtorganize}/build.xml | 0 .../controllers/admin_gwtorganise.php | 0 .../controllers/admin_upload_configure.php | 0 .../controllers/json_album.php | 0 .../helpers/gwtorganise_event.php | 0 .../helpers/gwtorganise_installer.php | 0 .../helpers/revision.php | 0 .../helpers/upload_configuration.php | 0 .../{gwtorganise => gwtorganize}/module.info | 0 .../src/META-INF/jdoconfig.xml | 0 .../src/com/gloopics/g3viewer/G3viewer.gwt.xml | 0 .../src/com/gloopics/g3viewer/client/Album.java | 0 .../g3viewer/client/AlbumItemDropContainer.java | 0 .../src/com/gloopics/g3viewer/client/AlbumTree.java | 0 .../g3viewer/client/AlbumTreeDropController.java | 0 .../com/gloopics/g3viewer/client/AsyncResizer.java | 0 .../com/gloopics/g3viewer/client/AsyncRunner.java | 0 .../gloopics/g3viewer/client/ConfirmDialogBox.java | 0 .../g3viewer/client/DropZoneController.java | 0 .../src/com/gloopics/g3viewer/client/G3Viewer.java | 0 .../com/gloopics/g3viewer/client/HttpDialogBox.java | 0 .../gloopics/g3viewer/client/HttpDialogHandler.java | 0 .../g3viewer/client/HttpSuccessHandler.java | 0 .../gloopics/g3viewer/client/ImageDialogBox.java | 0 .../gloopics/g3viewer/client/InformationBar.java | 0 .../src/com/gloopics/g3viewer/client/Item.java | 0 .../g3viewer/client/JSONResponseCallback.java | 0 .../g3viewer/client/JSONResponseTextHandler.java | 0 .../src/com/gloopics/g3viewer/client/Loading.java | 0 .../g3viewer/client/MyPickupDragController.java | 0 .../com/gloopics/g3viewer/client/ResizeOptions.java | 0 .../com/gloopics/g3viewer/client/UploadControl.java | 0 .../g3viewer/client/UploadControlNoGears.java | 0 .../com/gloopics/g3viewer/client/UploadFile.java | 0 .../src/com/gloopics/g3viewer/client/Utils.java | 0 .../src/com/gloopics/g3viewer/client/View.java | 0 .../com/gloopics/g3viewer/client/canvas/Canvas.java | 0 .../gloopics/g3viewer/client/canvas/Factory.java | 0 .../g3viewer/client/canvas/ResizeFilter.java | 0 .../g3viewer/client/dnddesktop/DesktopDrop.java | 0 .../g3viewer/client/dnddesktop/DesktopDropBase.java | 0 .../g3viewer/client/dnddesktop/DesktopDropFile.java | 0 .../client/dnddesktop/DesktopDropFileIE.java | 0 .../client/dnddesktop/DesktopDroppableWidget.java | 0 .../client/dnddesktop/DndDesktopFactory.java | 0 .../client/dnddesktop/DndDesktopFactoryIE.java | 0 .../client/dnddesktop/DndDesktopFactoryNoGears.java | 0 .../src/com/gloopics/g3viewer/public/G3viewer.css | 0 .../src/com/gloopics/g3viewer/public/loading.gif | Bin .../src/log4j.properties | 0 .../views/gwtorganise_view.html.php | 0 .../{gwtorganise => gwtorganize}/war/.htaccess | 0 .../war/WEB-INF/classes/META-INF/jdoconfig.xml | 0 .../classes/com/gloopics/g3viewer/G3viewer.gwt.xml | 0 .../com/gloopics/g3viewer/client/Album$1.class | Bin .../com/gloopics/g3viewer/client/Album$10.class | Bin .../com/gloopics/g3viewer/client/Album$11.class | Bin .../com/gloopics/g3viewer/client/Album$12.class | Bin .../com/gloopics/g3viewer/client/Album$2$1.class | Bin .../com/gloopics/g3viewer/client/Album$2.class | Bin .../com/gloopics/g3viewer/client/Album$3$1.class | Bin .../com/gloopics/g3viewer/client/Album$3.class | Bin .../com/gloopics/g3viewer/client/Album$4$1.class | Bin .../com/gloopics/g3viewer/client/Album$4.class | Bin .../com/gloopics/g3viewer/client/Album$5.class | Bin .../com/gloopics/g3viewer/client/Album$6.class | Bin .../com/gloopics/g3viewer/client/Album$7.class | Bin .../com/gloopics/g3viewer/client/Album$8.class | Bin .../com/gloopics/g3viewer/client/Album$9.class | Bin .../com/gloopics/g3viewer/client/Album.class | Bin .../g3viewer/client/AlbumItemDropContainer.class | Bin .../com/gloopics/g3viewer/client/AlbumTree$1.class | Bin .../com/gloopics/g3viewer/client/AlbumTree.class | Bin .../g3viewer/client/AlbumTreeDropController.class | Bin .../com/gloopics/g3viewer/client/AsyncResizer.class | Bin .../com/gloopics/g3viewer/client/AsyncRunner.class | Bin .../g3viewer/client/ConfirmDialogBox$1.class | Bin .../g3viewer/client/ConfirmDialogBox$2.class | Bin .../client/ConfirmDialogBox$ConfirmCallBack.class | Bin .../gloopics/g3viewer/client/ConfirmDialogBox.class | Bin .../g3viewer/client/DropZoneController.class | Bin .../com/gloopics/g3viewer/client/G3Viewer$1$1.class | Bin .../com/gloopics/g3viewer/client/G3Viewer$1.class | Bin .../com/gloopics/g3viewer/client/G3Viewer$2.class | Bin .../g3viewer/client/G3Viewer$ErrorDialog$1.class | Bin .../g3viewer/client/G3Viewer$ErrorDialog.class | Bin .../g3viewer/client/G3Viewer$SimplePanelEx.class | Bin .../com/gloopics/g3viewer/client/G3Viewer.class | Bin .../gloopics/g3viewer/client/HttpDialogBox$1.class | Bin .../gloopics/g3viewer/client/HttpDialogBox$2.class | Bin .../gloopics/g3viewer/client/HttpDialogBox$3.class | Bin .../gloopics/g3viewer/client/HttpDialogBox$4.class | Bin .../gloopics/g3viewer/client/HttpDialogBox$5.class | Bin .../client/HttpDialogBox$RequestCallbackImpl.class | Bin .../gloopics/g3viewer/client/HttpDialogBox.class | Bin .../g3viewer/client/HttpDialogHandler.class | Bin .../g3viewer/client/HttpSuccessHandler.class | Bin .../gloopics/g3viewer/client/ImageDialogBox$1.class | Bin .../gloopics/g3viewer/client/ImageDialogBox$2.class | Bin .../gloopics/g3viewer/client/ImageDialogBox$3.class | Bin .../gloopics/g3viewer/client/ImageDialogBox.class | Bin .../g3viewer/client/InformationBar$1$1.class | Bin .../gloopics/g3viewer/client/InformationBar$1.class | Bin .../gloopics/g3viewer/client/InformationBar.class | Bin .../com/gloopics/g3viewer/client/Item$1.class | Bin .../com/gloopics/g3viewer/client/Item$2.class | Bin .../com/gloopics/g3viewer/client/Item$3.class | Bin .../com/gloopics/g3viewer/client/Item$4$1.class | Bin .../com/gloopics/g3viewer/client/Item$4.class | Bin .../com/gloopics/g3viewer/client/Item$5$1.class | Bin .../com/gloopics/g3viewer/client/Item$5.class | Bin .../com/gloopics/g3viewer/client/Item$6$1.class | Bin .../com/gloopics/g3viewer/client/Item$6.class | Bin .../com/gloopics/g3viewer/client/Item$7$1.class | Bin .../com/gloopics/g3viewer/client/Item$7.class | Bin .../com/gloopics/g3viewer/client/Item$8$1.class | Bin .../com/gloopics/g3viewer/client/Item$8.class | Bin .../com/gloopics/g3viewer/client/Item$9.class | Bin .../classes/com/gloopics/g3viewer/client/Item.class | Bin .../g3viewer/client/JSONResponseCallback.class | Bin .../g3viewer/client/JSONResponseTextHandler.class | Bin .../com/gloopics/g3viewer/client/Loading.class | Bin .../g3viewer/client/MyPickupDragController.class | Bin .../gloopics/g3viewer/client/ResizeOptions.class | Bin .../gloopics/g3viewer/client/UploadControl.class | Bin .../g3viewer/client/UploadControlNoGears.class | Bin .../com/gloopics/g3viewer/client/UploadFile$1.class | Bin .../com/gloopics/g3viewer/client/UploadFile$2.class | Bin .../com/gloopics/g3viewer/client/UploadFile$3.class | Bin .../g3viewer/client/UploadFile$ProgressBar.class | Bin .../com/gloopics/g3viewer/client/UploadFile.class | Bin .../com/gloopics/g3viewer/client/Utils.class | Bin .../com/gloopics/g3viewer/client/View$1$1$1.class | Bin .../com/gloopics/g3viewer/client/View$1$1.class | Bin .../com/gloopics/g3viewer/client/View$1.class | Bin .../com/gloopics/g3viewer/client/View$2$1.class | Bin .../com/gloopics/g3viewer/client/View$2.class | Bin .../com/gloopics/g3viewer/client/View$3$1.class | Bin .../com/gloopics/g3viewer/client/View$3.class | Bin .../classes/com/gloopics/g3viewer/client/View.class | Bin .../gloopics/g3viewer/client/canvas/Canvas.class | Bin .../gloopics/g3viewer/client/canvas/Factory.class | Bin .../g3viewer/client/canvas/ResizeFilter$1.class | Bin .../g3viewer/client/canvas/ResizeFilter$2.class | Bin .../g3viewer/client/canvas/ResizeFilter.class | Bin .../g3viewer/client/dnddesktop/DesktopDrop.class | Bin .../client/dnddesktop/DesktopDropBase.class | Bin .../client/dnddesktop/DesktopDropFile.class | Bin .../client/dnddesktop/DesktopDropFileIE.class | Bin .../client/dnddesktop/DesktopDroppableWidget.class | Bin .../client/dnddesktop/DndDesktopFactory.class | Bin .../client/dnddesktop/DndDesktopFactoryIE.class | Bin .../dnddesktop/DndDesktopFactoryNoGears$1.class | Bin .../dnddesktop/DndDesktopFactoryNoGears.class | Bin .../com/gloopics/g3viewer/public/G3viewer.css | 0 .../com/gloopics/g3viewer/public/loading.gif | Bin .../war/WEB-INF/classes/log4j.properties | 0 .../war/WEB-INF/lib/appengine-api-1.0-sdk-1.2.5.jar | Bin .../war/WEB-INF/lib/appengine-api-labs-1.2.5.jar | Bin .../war/WEB-INF/lib/datanucleus-appengine-1.0.3.jar | Bin .../war/WEB-INF/lib/datanucleus-core-1.1.5.jar | Bin .../war/WEB-INF/lib/datanucleus-jpa-1.1.5.jar | Bin .../war/WEB-INF/lib/geronimo-jpa_3.0_spec-1.1.1.jar | Bin .../war/WEB-INF/lib/geronimo-jta_1.1_spec-1.1.1.jar | Bin .../war/WEB-INF/lib/gwt-servlet.jar | Bin .../war/WEB-INF/lib/jdo2-api-2.3-eb.jar | Bin .../0A9476898799A150D840F0B1C3672921.cache.png | Bin .../0D97DF37194D1924CC80394AAA96B9A3.cache.html | 0 .../27AC86F0820D8F960DBF73C151C0332B.cache.html | 0 .../396F806CD63ABD414BFBB9D57429F05B.cache.png | Bin .../4AFE598FDFDF189DD61F57E554328B10.cache.html | 0 .../4E8EC2279CB4B46228EFF0682ED166A4.cache.html | 0 .../4F7AD7D8299143D876CB4071BE00BF02.cache.html | 0 .../6462B363383D23B8418857B7A6FAD85B.cache.html | 0 .../71ED95F3DFB964762667E45E2922704D.cache.html | 0 .../8603379B5088782D2C0620FAE856E112.cache.png | Bin .../884CB866FECF37EDDE4914CA60AF2511.cache.html | 0 .../9DC95FB4BEC084EF810751F04B440FD7.cache.html | 0 .../A8FBB0ADAFEE7F8EA1CDB15765D13A7F.cache.html | 0 .../CE15F73DB4EDED1CF8F93F95A728792D.cache.html | 0 .../D096B0ED44CBABF1A6B1F2C2D31F4FCC.cache.html | 0 .../DF7764EEC1903CD03C9545B354D8D8E4.cache.png | Bin .../E44767377485D18D6B6864F65BA8EF73.cache.png | Bin .../EDC7827FEEA59EE44AD790B1C6430C45.cache.png | Bin .../war/g3viewer/G3viewer.css | 0 .../war/g3viewer/clear.cache.gif | Bin .../0D97DF37194D1924CC80394AAA96B9A3/1.cache.js | 0 .../0D97DF37194D1924CC80394AAA96B9A3/2.cache.js | 0 .../0D97DF37194D1924CC80394AAA96B9A3/3.cache.js | 0 .../27AC86F0820D8F960DBF73C151C0332B/1.cache.js | 0 .../27AC86F0820D8F960DBF73C151C0332B/2.cache.js | 0 .../27AC86F0820D8F960DBF73C151C0332B/3.cache.js | 0 .../4AFE598FDFDF189DD61F57E554328B10/1.cache.js | 0 .../4AFE598FDFDF189DD61F57E554328B10/2.cache.js | 0 .../4AFE598FDFDF189DD61F57E554328B10/3.cache.js | 0 .../4E8EC2279CB4B46228EFF0682ED166A4/1.cache.js | 0 .../4E8EC2279CB4B46228EFF0682ED166A4/2.cache.js | 0 .../4E8EC2279CB4B46228EFF0682ED166A4/3.cache.js | 0 .../4F7AD7D8299143D876CB4071BE00BF02/1.cache.js | 0 .../4F7AD7D8299143D876CB4071BE00BF02/2.cache.js | 0 .../4F7AD7D8299143D876CB4071BE00BF02/3.cache.js | 0 .../6462B363383D23B8418857B7A6FAD85B/1.cache.js | 0 .../6462B363383D23B8418857B7A6FAD85B/2.cache.js | 0 .../6462B363383D23B8418857B7A6FAD85B/3.cache.js | 0 .../71ED95F3DFB964762667E45E2922704D/1.cache.js | 0 .../71ED95F3DFB964762667E45E2922704D/2.cache.js | 0 .../71ED95F3DFB964762667E45E2922704D/3.cache.js | 0 .../884CB866FECF37EDDE4914CA60AF2511/1.cache.js | 0 .../884CB866FECF37EDDE4914CA60AF2511/2.cache.js | 0 .../884CB866FECF37EDDE4914CA60AF2511/3.cache.js | 0 .../9DC95FB4BEC084EF810751F04B440FD7/1.cache.js | 0 .../9DC95FB4BEC084EF810751F04B440FD7/2.cache.js | 0 .../9DC95FB4BEC084EF810751F04B440FD7/3.cache.js | 0 .../A8FBB0ADAFEE7F8EA1CDB15765D13A7F/1.cache.js | 0 .../A8FBB0ADAFEE7F8EA1CDB15765D13A7F/2.cache.js | 0 .../A8FBB0ADAFEE7F8EA1CDB15765D13A7F/3.cache.js | 0 .../CE15F73DB4EDED1CF8F93F95A728792D/1.cache.js | 0 .../CE15F73DB4EDED1CF8F93F95A728792D/2.cache.js | 0 .../CE15F73DB4EDED1CF8F93F95A728792D/3.cache.js | 0 .../D096B0ED44CBABF1A6B1F2C2D31F4FCC/1.cache.js | 0 .../D096B0ED44CBABF1A6B1F2C2D31F4FCC/2.cache.js | 0 .../D096B0ED44CBABF1A6B1F2C2D31F4FCC/3.cache.js | 0 .../war/g3viewer/g3viewer.nocache.js | 0 .../war/g3viewer/gears_init.js | 0 .../war/g3viewer/gwt/standard/images/corner.png | Bin .../war/g3viewer/gwt/standard/images/corner_ie6.png | Bin .../war/g3viewer/gwt/standard/images/hborder.png | Bin .../g3viewer/gwt/standard/images/hborder_ie6.png | Bin .../standard/images/ie6/corner_dialog_topleft.png | Bin .../standard/images/ie6/corner_dialog_topright.png | Bin .../gwt/standard/images/ie6/hborder_blue_shadow.png | Bin .../gwt/standard/images/ie6/hborder_gray_shadow.png | Bin .../gwt/standard/images/ie6/vborder_blue_shadow.png | Bin .../gwt/standard/images/ie6/vborder_gray_shadow.png | Bin .../war/g3viewer/gwt/standard/images/vborder.png | Bin .../g3viewer/gwt/standard/images/vborder_ie6.png | Bin .../war/g3viewer/gwt/standard/standard.css | 0 .../war/g3viewer/gwt/standard/standard_rtl.css | 0 .../war/g3viewer/hosted.html | 0 .../war/g3viewer/loading.gif | Bin .../{gwtorganise => gwtorganize}/war/index.php | 0 3.1/modules/{gwtorganise => gwtorganize}/.classpath | 0 .../.externalToolBuilders/New_Builder.launch | 0 3.1/modules/{gwtorganise => gwtorganize}/.project | 0 .../com.google.appengine.eclipse.core.prefs | 0 .../.settings/com.google.gdt.eclipse.core.prefs | 0 .../.settings/com.google.gwt.eclipse.core.prefs | 0 3.1/modules/{gwtorganise => gwtorganize}/build.xml | 0 .../controllers/admin_gwtorganise.php | 0 .../controllers/admin_upload_configure.php | 0 .../controllers/json_album.php | 0 .../helpers/gwtorganise_event.php | 0 .../helpers/gwtorganise_installer.php | 0 .../helpers/revision.php | 0 .../helpers/upload_configuration.php | 0 .../{gwtorganise => gwtorganize}/module.info | 0 .../src/META-INF/jdoconfig.xml | 0 .../src/com/gloopics/g3viewer/G3viewer.gwt.xml | 0 .../src/com/gloopics/g3viewer/client/Album.java | 0 .../g3viewer/client/AlbumItemDropContainer.java | 0 .../src/com/gloopics/g3viewer/client/AlbumTree.java | 0 .../g3viewer/client/AlbumTreeDropController.java | 0 .../com/gloopics/g3viewer/client/AsyncResizer.java | 0 .../com/gloopics/g3viewer/client/AsyncRunner.java | 0 .../gloopics/g3viewer/client/ConfirmDialogBox.java | 0 .../g3viewer/client/DropZoneController.java | 0 .../src/com/gloopics/g3viewer/client/G3Viewer.java | 0 .../com/gloopics/g3viewer/client/HttpDialogBox.java | 0 .../gloopics/g3viewer/client/HttpDialogHandler.java | 0 .../g3viewer/client/HttpSuccessHandler.java | 0 .../gloopics/g3viewer/client/ImageDialogBox.java | 0 .../gloopics/g3viewer/client/InformationBar.java | 0 .../src/com/gloopics/g3viewer/client/Item.java | 0 .../g3viewer/client/JSONResponseCallback.java | 0 .../g3viewer/client/JSONResponseTextHandler.java | 0 .../src/com/gloopics/g3viewer/client/Loading.java | 0 .../g3viewer/client/MyPickupDragController.java | 0 .../com/gloopics/g3viewer/client/ResizeOptions.java | 0 .../com/gloopics/g3viewer/client/UploadControl.java | 0 .../g3viewer/client/UploadControlNoGears.java | 0 .../com/gloopics/g3viewer/client/UploadFile.java | 0 .../src/com/gloopics/g3viewer/client/Utils.java | 0 .../src/com/gloopics/g3viewer/client/View.java | 0 .../com/gloopics/g3viewer/client/canvas/Canvas.java | 0 .../gloopics/g3viewer/client/canvas/Factory.java | 0 .../g3viewer/client/canvas/ResizeFilter.java | 0 .../g3viewer/client/dnddesktop/DesktopDrop.java | 0 .../g3viewer/client/dnddesktop/DesktopDropBase.java | 0 .../g3viewer/client/dnddesktop/DesktopDropFile.java | 0 .../client/dnddesktop/DesktopDropFileIE.java | 0 .../client/dnddesktop/DesktopDroppableWidget.java | 0 .../client/dnddesktop/DndDesktopFactory.java | 0 .../client/dnddesktop/DndDesktopFactoryIE.java | 0 .../client/dnddesktop/DndDesktopFactoryNoGears.java | 0 .../src/com/gloopics/g3viewer/public/G3viewer.css | 0 .../src/com/gloopics/g3viewer/public/loading.gif | Bin .../src/log4j.properties | 0 .../views/gwtorganise_view.html.php | 0 .../{gwtorganise => gwtorganize}/war/.htaccess | 0 .../war/WEB-INF/classes/META-INF/jdoconfig.xml | 0 .../classes/com/gloopics/g3viewer/G3viewer.gwt.xml | 0 .../com/gloopics/g3viewer/client/Album$1.class | Bin .../com/gloopics/g3viewer/client/Album$10.class | Bin .../com/gloopics/g3viewer/client/Album$11.class | Bin .../com/gloopics/g3viewer/client/Album$12.class | Bin .../com/gloopics/g3viewer/client/Album$2$1.class | Bin .../com/gloopics/g3viewer/client/Album$2.class | Bin .../com/gloopics/g3viewer/client/Album$3$1.class | Bin .../com/gloopics/g3viewer/client/Album$3.class | Bin .../com/gloopics/g3viewer/client/Album$4$1.class | Bin .../com/gloopics/g3viewer/client/Album$4.class | Bin .../com/gloopics/g3viewer/client/Album$5.class | Bin .../com/gloopics/g3viewer/client/Album$6.class | Bin .../com/gloopics/g3viewer/client/Album$7.class | Bin .../com/gloopics/g3viewer/client/Album$8.class | Bin .../com/gloopics/g3viewer/client/Album$9.class | Bin .../com/gloopics/g3viewer/client/Album.class | Bin .../g3viewer/client/AlbumItemDropContainer.class | Bin .../com/gloopics/g3viewer/client/AlbumTree$1.class | Bin .../com/gloopics/g3viewer/client/AlbumTree.class | Bin .../g3viewer/client/AlbumTreeDropController.class | Bin .../com/gloopics/g3viewer/client/AsyncResizer.class | Bin .../com/gloopics/g3viewer/client/AsyncRunner.class | Bin .../g3viewer/client/ConfirmDialogBox$1.class | Bin .../g3viewer/client/ConfirmDialogBox$2.class | Bin .../client/ConfirmDialogBox$ConfirmCallBack.class | Bin .../gloopics/g3viewer/client/ConfirmDialogBox.class | Bin .../g3viewer/client/DropZoneController.class | Bin .../com/gloopics/g3viewer/client/G3Viewer$1$1.class | Bin .../com/gloopics/g3viewer/client/G3Viewer$1.class | Bin .../com/gloopics/g3viewer/client/G3Viewer$2.class | Bin .../g3viewer/client/G3Viewer$ErrorDialog$1.class | Bin .../g3viewer/client/G3Viewer$ErrorDialog.class | Bin .../g3viewer/client/G3Viewer$SimplePanelEx.class | Bin .../com/gloopics/g3viewer/client/G3Viewer.class | Bin .../gloopics/g3viewer/client/HttpDialogBox$1.class | Bin .../gloopics/g3viewer/client/HttpDialogBox$2.class | Bin .../gloopics/g3viewer/client/HttpDialogBox$3.class | Bin .../gloopics/g3viewer/client/HttpDialogBox$4.class | Bin .../gloopics/g3viewer/client/HttpDialogBox$5.class | Bin .../client/HttpDialogBox$RequestCallbackImpl.class | Bin .../gloopics/g3viewer/client/HttpDialogBox.class | Bin .../g3viewer/client/HttpDialogHandler.class | Bin .../g3viewer/client/HttpSuccessHandler.class | Bin .../gloopics/g3viewer/client/ImageDialogBox$1.class | Bin .../gloopics/g3viewer/client/ImageDialogBox$2.class | Bin .../gloopics/g3viewer/client/ImageDialogBox$3.class | Bin .../gloopics/g3viewer/client/ImageDialogBox.class | Bin .../g3viewer/client/InformationBar$1$1.class | Bin .../gloopics/g3viewer/client/InformationBar$1.class | Bin .../gloopics/g3viewer/client/InformationBar.class | Bin .../com/gloopics/g3viewer/client/Item$1.class | Bin .../com/gloopics/g3viewer/client/Item$2.class | Bin .../com/gloopics/g3viewer/client/Item$3.class | Bin .../com/gloopics/g3viewer/client/Item$4$1.class | Bin .../com/gloopics/g3viewer/client/Item$4.class | Bin .../com/gloopics/g3viewer/client/Item$5$1.class | Bin .../com/gloopics/g3viewer/client/Item$5.class | Bin .../com/gloopics/g3viewer/client/Item$6$1.class | Bin .../com/gloopics/g3viewer/client/Item$6.class | Bin .../com/gloopics/g3viewer/client/Item$7$1.class | Bin .../com/gloopics/g3viewer/client/Item$7.class | Bin .../com/gloopics/g3viewer/client/Item$8$1.class | Bin .../com/gloopics/g3viewer/client/Item$8.class | Bin .../com/gloopics/g3viewer/client/Item$9.class | Bin .../classes/com/gloopics/g3viewer/client/Item.class | Bin .../g3viewer/client/JSONResponseCallback.class | Bin .../g3viewer/client/JSONResponseTextHandler.class | Bin .../com/gloopics/g3viewer/client/Loading.class | Bin .../g3viewer/client/MyPickupDragController.class | Bin .../gloopics/g3viewer/client/ResizeOptions.class | Bin .../gloopics/g3viewer/client/UploadControl.class | Bin .../g3viewer/client/UploadControlNoGears.class | Bin .../com/gloopics/g3viewer/client/UploadFile$1.class | Bin .../com/gloopics/g3viewer/client/UploadFile$2.class | Bin .../com/gloopics/g3viewer/client/UploadFile$3.class | Bin .../g3viewer/client/UploadFile$ProgressBar.class | Bin .../com/gloopics/g3viewer/client/UploadFile.class | Bin .../com/gloopics/g3viewer/client/Utils.class | Bin .../com/gloopics/g3viewer/client/View$1$1$1.class | Bin .../com/gloopics/g3viewer/client/View$1$1.class | Bin .../com/gloopics/g3viewer/client/View$1.class | Bin .../com/gloopics/g3viewer/client/View$2$1.class | Bin .../com/gloopics/g3viewer/client/View$2.class | Bin .../com/gloopics/g3viewer/client/View$3$1.class | Bin .../com/gloopics/g3viewer/client/View$3.class | Bin .../classes/com/gloopics/g3viewer/client/View.class | Bin .../gloopics/g3viewer/client/canvas/Canvas.class | Bin .../gloopics/g3viewer/client/canvas/Factory.class | Bin .../g3viewer/client/canvas/ResizeFilter$1.class | Bin .../g3viewer/client/canvas/ResizeFilter$2.class | Bin .../g3viewer/client/canvas/ResizeFilter.class | Bin .../g3viewer/client/dnddesktop/DesktopDrop.class | Bin .../client/dnddesktop/DesktopDropBase.class | Bin .../client/dnddesktop/DesktopDropFile.class | Bin .../client/dnddesktop/DesktopDropFileIE.class | Bin .../client/dnddesktop/DesktopDroppableWidget.class | Bin .../client/dnddesktop/DndDesktopFactory.class | Bin .../client/dnddesktop/DndDesktopFactoryIE.class | Bin .../dnddesktop/DndDesktopFactoryNoGears$1.class | Bin .../dnddesktop/DndDesktopFactoryNoGears.class | Bin .../com/gloopics/g3viewer/public/G3viewer.css | 0 .../com/gloopics/g3viewer/public/loading.gif | Bin .../war/WEB-INF/classes/log4j.properties | 0 .../war/WEB-INF/lib/appengine-api-1.0-sdk-1.2.5.jar | Bin .../war/WEB-INF/lib/appengine-api-labs-1.2.5.jar | Bin .../war/WEB-INF/lib/datanucleus-appengine-1.0.3.jar | Bin .../war/WEB-INF/lib/datanucleus-core-1.1.5.jar | Bin .../war/WEB-INF/lib/datanucleus-jpa-1.1.5.jar | Bin .../war/WEB-INF/lib/geronimo-jpa_3.0_spec-1.1.1.jar | Bin .../war/WEB-INF/lib/geronimo-jta_1.1_spec-1.1.1.jar | Bin .../war/WEB-INF/lib/gwt-servlet.jar | Bin .../war/WEB-INF/lib/jdo2-api-2.3-eb.jar | Bin .../0A9476898799A150D840F0B1C3672921.cache.png | Bin .../0D97DF37194D1924CC80394AAA96B9A3.cache.html | 0 .../27AC86F0820D8F960DBF73C151C0332B.cache.html | 0 .../396F806CD63ABD414BFBB9D57429F05B.cache.png | Bin .../4AFE598FDFDF189DD61F57E554328B10.cache.html | 0 .../4E8EC2279CB4B46228EFF0682ED166A4.cache.html | 0 .../4F7AD7D8299143D876CB4071BE00BF02.cache.html | 0 .../6462B363383D23B8418857B7A6FAD85B.cache.html | 0 .../71ED95F3DFB964762667E45E2922704D.cache.html | 0 .../8603379B5088782D2C0620FAE856E112.cache.png | Bin .../884CB866FECF37EDDE4914CA60AF2511.cache.html | 0 .../9DC95FB4BEC084EF810751F04B440FD7.cache.html | 0 .../A8FBB0ADAFEE7F8EA1CDB15765D13A7F.cache.html | 0 .../CE15F73DB4EDED1CF8F93F95A728792D.cache.html | 0 .../D096B0ED44CBABF1A6B1F2C2D31F4FCC.cache.html | 0 .../DF7764EEC1903CD03C9545B354D8D8E4.cache.png | Bin .../E44767377485D18D6B6864F65BA8EF73.cache.png | Bin .../EDC7827FEEA59EE44AD790B1C6430C45.cache.png | Bin .../war/g3viewer/G3viewer.css | 0 .../war/g3viewer/clear.cache.gif | Bin .../0D97DF37194D1924CC80394AAA96B9A3/1.cache.js | 0 .../0D97DF37194D1924CC80394AAA96B9A3/2.cache.js | 0 .../0D97DF37194D1924CC80394AAA96B9A3/3.cache.js | 0 .../27AC86F0820D8F960DBF73C151C0332B/1.cache.js | 0 .../27AC86F0820D8F960DBF73C151C0332B/2.cache.js | 0 .../27AC86F0820D8F960DBF73C151C0332B/3.cache.js | 0 .../4AFE598FDFDF189DD61F57E554328B10/1.cache.js | 0 .../4AFE598FDFDF189DD61F57E554328B10/2.cache.js | 0 .../4AFE598FDFDF189DD61F57E554328B10/3.cache.js | 0 .../4E8EC2279CB4B46228EFF0682ED166A4/1.cache.js | 0 .../4E8EC2279CB4B46228EFF0682ED166A4/2.cache.js | 0 .../4E8EC2279CB4B46228EFF0682ED166A4/3.cache.js | 0 .../4F7AD7D8299143D876CB4071BE00BF02/1.cache.js | 0 .../4F7AD7D8299143D876CB4071BE00BF02/2.cache.js | 0 .../4F7AD7D8299143D876CB4071BE00BF02/3.cache.js | 0 .../6462B363383D23B8418857B7A6FAD85B/1.cache.js | 0 .../6462B363383D23B8418857B7A6FAD85B/2.cache.js | 0 .../6462B363383D23B8418857B7A6FAD85B/3.cache.js | 0 .../71ED95F3DFB964762667E45E2922704D/1.cache.js | 0 .../71ED95F3DFB964762667E45E2922704D/2.cache.js | 0 .../71ED95F3DFB964762667E45E2922704D/3.cache.js | 0 .../884CB866FECF37EDDE4914CA60AF2511/1.cache.js | 0 .../884CB866FECF37EDDE4914CA60AF2511/2.cache.js | 0 .../884CB866FECF37EDDE4914CA60AF2511/3.cache.js | 0 .../9DC95FB4BEC084EF810751F04B440FD7/1.cache.js | 0 .../9DC95FB4BEC084EF810751F04B440FD7/2.cache.js | 0 .../9DC95FB4BEC084EF810751F04B440FD7/3.cache.js | 0 .../A8FBB0ADAFEE7F8EA1CDB15765D13A7F/1.cache.js | 0 .../A8FBB0ADAFEE7F8EA1CDB15765D13A7F/2.cache.js | 0 .../A8FBB0ADAFEE7F8EA1CDB15765D13A7F/3.cache.js | 0 .../CE15F73DB4EDED1CF8F93F95A728792D/1.cache.js | 0 .../CE15F73DB4EDED1CF8F93F95A728792D/2.cache.js | 0 .../CE15F73DB4EDED1CF8F93F95A728792D/3.cache.js | 0 .../D096B0ED44CBABF1A6B1F2C2D31F4FCC/1.cache.js | 0 .../D096B0ED44CBABF1A6B1F2C2D31F4FCC/2.cache.js | 0 .../D096B0ED44CBABF1A6B1F2C2D31F4FCC/3.cache.js | 0 .../war/g3viewer/g3viewer.nocache.js | 0 .../war/g3viewer/gears_init.js | 0 .../war/g3viewer/gwt/standard/images/corner.png | Bin .../war/g3viewer/gwt/standard/images/corner_ie6.png | Bin .../war/g3viewer/gwt/standard/images/hborder.png | Bin .../g3viewer/gwt/standard/images/hborder_ie6.png | Bin .../standard/images/ie6/corner_dialog_topleft.png | Bin .../standard/images/ie6/corner_dialog_topright.png | Bin .../gwt/standard/images/ie6/hborder_blue_shadow.png | Bin .../gwt/standard/images/ie6/hborder_gray_shadow.png | Bin .../gwt/standard/images/ie6/vborder_blue_shadow.png | Bin .../gwt/standard/images/ie6/vborder_gray_shadow.png | Bin .../war/g3viewer/gwt/standard/images/vborder.png | Bin .../g3viewer/gwt/standard/images/vborder_ie6.png | Bin .../war/g3viewer/gwt/standard/standard.css | 0 .../war/g3viewer/gwt/standard/standard_rtl.css | 0 .../war/g3viewer/hosted.html | 0 .../war/g3viewer/loading.gif | Bin .../{gwtorganise => gwtorganize}/war/index.php | 0 494 files changed, 0 insertions(+), 0 deletions(-) rename 3.0/modules/{gwtorganise => gwtorganize}/.classpath (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/.externalToolBuilders/New_Builder.launch (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/.project (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/.settings/com.google.appengine.eclipse.core.prefs (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/.settings/com.google.gdt.eclipse.core.prefs (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/.settings/com.google.gwt.eclipse.core.prefs (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/build.xml (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/controllers/admin_gwtorganise.php (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/controllers/admin_upload_configure.php (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/controllers/json_album.php (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/helpers/gwtorganise_event.php (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/helpers/gwtorganise_installer.php (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/helpers/revision.php (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/helpers/upload_configuration.php (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/module.info (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/META-INF/jdoconfig.xml (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/G3viewer.gwt.xml (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/Album.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/AlbumItemDropContainer.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/AlbumTree.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/AlbumTreeDropController.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/AsyncResizer.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/AsyncRunner.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/ConfirmDialogBox.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/DropZoneController.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/G3Viewer.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/HttpDialogBox.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/HttpDialogHandler.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/HttpSuccessHandler.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/ImageDialogBox.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/InformationBar.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/Item.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/JSONResponseCallback.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/JSONResponseTextHandler.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/Loading.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/MyPickupDragController.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/ResizeOptions.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/UploadControl.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/UploadControlNoGears.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/UploadFile.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/Utils.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/View.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/canvas/Canvas.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/canvas/Factory.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/canvas/ResizeFilter.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.java (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/public/G3viewer.css (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/public/loading.gif (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/src/log4j.properties (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/views/gwtorganise_view.html.php (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/.htaccess (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/META-INF/jdoconfig.xml (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/G3viewer.gwt.xml (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$10.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$11.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$12.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$5.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$6.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$7.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$8.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$9.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumItemDropContainer.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTreeDropController.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncResizer.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncRunner.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$2.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$ConfirmCallBack.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/DropZoneController.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$2.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$SimplePanelEx.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$2.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$3.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$4.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$5.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$RequestCallbackImpl.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogHandler.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpSuccessHandler.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$2.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$3.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$2.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$3.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$9.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseCallback.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseTextHandler.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Loading.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/MyPickupDragController.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/ResizeOptions.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControl.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControlNoGears.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$2.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$3.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$ProgressBar.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Utils.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/View.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Canvas.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Factory.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$2.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears$1.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.class (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/public/G3viewer.css (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/public/loading.gif (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/log4j.properties (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/lib/appengine-api-1.0-sdk-1.2.5.jar (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/lib/appengine-api-labs-1.2.5.jar (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/lib/datanucleus-appengine-1.0.3.jar (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/lib/datanucleus-core-1.1.5.jar (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/lib/datanucleus-jpa-1.1.5.jar (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/lib/geronimo-jpa_3.0_spec-1.1.1.jar (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/lib/geronimo-jta_1.1_spec-1.1.1.jar (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/lib/gwt-servlet.jar (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/WEB-INF/lib/jdo2-api-2.3-eb.jar (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/0A9476898799A150D840F0B1C3672921.cache.png (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/0D97DF37194D1924CC80394AAA96B9A3.cache.html (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/27AC86F0820D8F960DBF73C151C0332B.cache.html (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/396F806CD63ABD414BFBB9D57429F05B.cache.png (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/4AFE598FDFDF189DD61F57E554328B10.cache.html (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/4E8EC2279CB4B46228EFF0682ED166A4.cache.html (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/4F7AD7D8299143D876CB4071BE00BF02.cache.html (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/6462B363383D23B8418857B7A6FAD85B.cache.html (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/71ED95F3DFB964762667E45E2922704D.cache.html (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/8603379B5088782D2C0620FAE856E112.cache.png (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/884CB866FECF37EDDE4914CA60AF2511.cache.html (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/9DC95FB4BEC084EF810751F04B440FD7.cache.html (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/A8FBB0ADAFEE7F8EA1CDB15765D13A7F.cache.html (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/CE15F73DB4EDED1CF8F93F95A728792D.cache.html (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/D096B0ED44CBABF1A6B1F2C2D31F4FCC.cache.html (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/DF7764EEC1903CD03C9545B354D8D8E4.cache.png (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/E44767377485D18D6B6864F65BA8EF73.cache.png (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/EDC7827FEEA59EE44AD790B1C6430C45.cache.png (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/G3viewer.css (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/clear.cache.gif (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/1.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/2.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/3.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/1.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/2.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/3.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/1.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/2.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/3.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/1.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/2.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/3.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/1.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/2.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/3.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/1.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/2.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/3.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/1.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/2.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/3.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/1.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/2.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/3.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/1.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/2.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/3.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/1.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/2.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/3.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/1.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/2.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/3.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/1.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/2.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/3.cache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/g3viewer.nocache.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/gears_init.js (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/corner.png (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/corner_ie6.png (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/hborder.png (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/hborder_ie6.png (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topleft.png (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topright.png (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/ie6/hborder_blue_shadow.png (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/ie6/hborder_gray_shadow.png (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/ie6/vborder_blue_shadow.png (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/ie6/vborder_gray_shadow.png (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/vborder.png (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/vborder_ie6.png (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/standard.css (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/standard_rtl.css (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/hosted.html (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/g3viewer/loading.gif (100%) rename 3.0/modules/{gwtorganise => gwtorganize}/war/index.php (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/.classpath (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/.externalToolBuilders/New_Builder.launch (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/.project (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/.settings/com.google.appengine.eclipse.core.prefs (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/.settings/com.google.gdt.eclipse.core.prefs (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/.settings/com.google.gwt.eclipse.core.prefs (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/build.xml (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/controllers/admin_gwtorganise.php (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/controllers/admin_upload_configure.php (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/controllers/json_album.php (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/helpers/gwtorganise_event.php (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/helpers/gwtorganise_installer.php (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/helpers/revision.php (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/helpers/upload_configuration.php (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/module.info (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/META-INF/jdoconfig.xml (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/G3viewer.gwt.xml (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/Album.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/AlbumItemDropContainer.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/AlbumTree.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/AlbumTreeDropController.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/AsyncResizer.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/AsyncRunner.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/ConfirmDialogBox.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/DropZoneController.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/G3Viewer.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/HttpDialogBox.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/HttpDialogHandler.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/HttpSuccessHandler.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/ImageDialogBox.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/InformationBar.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/Item.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/JSONResponseCallback.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/JSONResponseTextHandler.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/Loading.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/MyPickupDragController.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/ResizeOptions.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/UploadControl.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/UploadControlNoGears.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/UploadFile.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/Utils.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/View.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/canvas/Canvas.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/canvas/Factory.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/canvas/ResizeFilter.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.java (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/public/G3viewer.css (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/com/gloopics/g3viewer/public/loading.gif (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/src/log4j.properties (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/views/gwtorganise_view.html.php (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/.htaccess (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/META-INF/jdoconfig.xml (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/G3viewer.gwt.xml (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$10.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$11.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$12.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$5.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$6.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$7.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$8.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$9.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumItemDropContainer.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTreeDropController.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncResizer.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncRunner.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$2.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$ConfirmCallBack.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/DropZoneController.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$2.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$SimplePanelEx.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$2.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$3.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$4.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$5.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$RequestCallbackImpl.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogHandler.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpSuccessHandler.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$2.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$3.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$2.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$3.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$9.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseCallback.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseTextHandler.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Loading.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/MyPickupDragController.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/ResizeOptions.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControl.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControlNoGears.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$2.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$3.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$ProgressBar.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/Utils.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/View.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Canvas.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Factory.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$2.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears$1.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.class (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/public/G3viewer.css (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/com/gloopics/g3viewer/public/loading.gif (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/classes/log4j.properties (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/lib/appengine-api-1.0-sdk-1.2.5.jar (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/lib/appengine-api-labs-1.2.5.jar (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/lib/datanucleus-appengine-1.0.3.jar (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/lib/datanucleus-core-1.1.5.jar (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/lib/datanucleus-jpa-1.1.5.jar (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/lib/geronimo-jpa_3.0_spec-1.1.1.jar (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/lib/geronimo-jta_1.1_spec-1.1.1.jar (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/lib/gwt-servlet.jar (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/WEB-INF/lib/jdo2-api-2.3-eb.jar (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/0A9476898799A150D840F0B1C3672921.cache.png (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/0D97DF37194D1924CC80394AAA96B9A3.cache.html (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/27AC86F0820D8F960DBF73C151C0332B.cache.html (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/396F806CD63ABD414BFBB9D57429F05B.cache.png (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/4AFE598FDFDF189DD61F57E554328B10.cache.html (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/4E8EC2279CB4B46228EFF0682ED166A4.cache.html (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/4F7AD7D8299143D876CB4071BE00BF02.cache.html (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/6462B363383D23B8418857B7A6FAD85B.cache.html (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/71ED95F3DFB964762667E45E2922704D.cache.html (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/8603379B5088782D2C0620FAE856E112.cache.png (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/884CB866FECF37EDDE4914CA60AF2511.cache.html (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/9DC95FB4BEC084EF810751F04B440FD7.cache.html (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/A8FBB0ADAFEE7F8EA1CDB15765D13A7F.cache.html (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/CE15F73DB4EDED1CF8F93F95A728792D.cache.html (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/D096B0ED44CBABF1A6B1F2C2D31F4FCC.cache.html (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/DF7764EEC1903CD03C9545B354D8D8E4.cache.png (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/E44767377485D18D6B6864F65BA8EF73.cache.png (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/EDC7827FEEA59EE44AD790B1C6430C45.cache.png (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/G3viewer.css (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/clear.cache.gif (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/1.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/2.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/3.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/1.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/2.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/3.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/1.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/2.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/3.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/1.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/2.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/3.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/1.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/2.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/3.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/1.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/2.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/3.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/1.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/2.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/3.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/1.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/2.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/3.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/1.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/2.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/3.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/1.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/2.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/3.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/1.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/2.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/3.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/1.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/2.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/3.cache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/g3viewer.nocache.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/gears_init.js (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/corner.png (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/corner_ie6.png (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/hborder.png (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/hborder_ie6.png (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topleft.png (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topright.png (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/ie6/hborder_blue_shadow.png (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/ie6/hborder_gray_shadow.png (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/ie6/vborder_blue_shadow.png (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/ie6/vborder_gray_shadow.png (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/vborder.png (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/images/vborder_ie6.png (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/standard.css (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/gwt/standard/standard_rtl.css (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/hosted.html (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/g3viewer/loading.gif (100%) rename 3.1/modules/{gwtorganise => gwtorganize}/war/index.php (100%) diff --git a/3.0/modules/gwtorganise/.classpath b/3.0/modules/gwtorganize/.classpath similarity index 100% rename from 3.0/modules/gwtorganise/.classpath rename to 3.0/modules/gwtorganize/.classpath diff --git a/3.0/modules/gwtorganise/.externalToolBuilders/New_Builder.launch b/3.0/modules/gwtorganize/.externalToolBuilders/New_Builder.launch similarity index 100% rename from 3.0/modules/gwtorganise/.externalToolBuilders/New_Builder.launch rename to 3.0/modules/gwtorganize/.externalToolBuilders/New_Builder.launch diff --git a/3.0/modules/gwtorganise/.project b/3.0/modules/gwtorganize/.project similarity index 100% rename from 3.0/modules/gwtorganise/.project rename to 3.0/modules/gwtorganize/.project diff --git a/3.0/modules/gwtorganise/.settings/com.google.appengine.eclipse.core.prefs b/3.0/modules/gwtorganize/.settings/com.google.appengine.eclipse.core.prefs similarity index 100% rename from 3.0/modules/gwtorganise/.settings/com.google.appengine.eclipse.core.prefs rename to 3.0/modules/gwtorganize/.settings/com.google.appengine.eclipse.core.prefs diff --git a/3.0/modules/gwtorganise/.settings/com.google.gdt.eclipse.core.prefs b/3.0/modules/gwtorganize/.settings/com.google.gdt.eclipse.core.prefs similarity index 100% rename from 3.0/modules/gwtorganise/.settings/com.google.gdt.eclipse.core.prefs rename to 3.0/modules/gwtorganize/.settings/com.google.gdt.eclipse.core.prefs diff --git a/3.0/modules/gwtorganise/.settings/com.google.gwt.eclipse.core.prefs b/3.0/modules/gwtorganize/.settings/com.google.gwt.eclipse.core.prefs similarity index 100% rename from 3.0/modules/gwtorganise/.settings/com.google.gwt.eclipse.core.prefs rename to 3.0/modules/gwtorganize/.settings/com.google.gwt.eclipse.core.prefs diff --git a/3.0/modules/gwtorganise/build.xml b/3.0/modules/gwtorganize/build.xml similarity index 100% rename from 3.0/modules/gwtorganise/build.xml rename to 3.0/modules/gwtorganize/build.xml diff --git a/3.0/modules/gwtorganise/controllers/admin_gwtorganise.php b/3.0/modules/gwtorganize/controllers/admin_gwtorganise.php similarity index 100% rename from 3.0/modules/gwtorganise/controllers/admin_gwtorganise.php rename to 3.0/modules/gwtorganize/controllers/admin_gwtorganise.php diff --git a/3.0/modules/gwtorganise/controllers/admin_upload_configure.php b/3.0/modules/gwtorganize/controllers/admin_upload_configure.php similarity index 100% rename from 3.0/modules/gwtorganise/controllers/admin_upload_configure.php rename to 3.0/modules/gwtorganize/controllers/admin_upload_configure.php diff --git a/3.0/modules/gwtorganise/controllers/json_album.php b/3.0/modules/gwtorganize/controllers/json_album.php similarity index 100% rename from 3.0/modules/gwtorganise/controllers/json_album.php rename to 3.0/modules/gwtorganize/controllers/json_album.php diff --git a/3.0/modules/gwtorganise/helpers/gwtorganise_event.php b/3.0/modules/gwtorganize/helpers/gwtorganise_event.php similarity index 100% rename from 3.0/modules/gwtorganise/helpers/gwtorganise_event.php rename to 3.0/modules/gwtorganize/helpers/gwtorganise_event.php diff --git a/3.0/modules/gwtorganise/helpers/gwtorganise_installer.php b/3.0/modules/gwtorganize/helpers/gwtorganise_installer.php similarity index 100% rename from 3.0/modules/gwtorganise/helpers/gwtorganise_installer.php rename to 3.0/modules/gwtorganize/helpers/gwtorganise_installer.php diff --git a/3.0/modules/gwtorganise/helpers/revision.php b/3.0/modules/gwtorganize/helpers/revision.php similarity index 100% rename from 3.0/modules/gwtorganise/helpers/revision.php rename to 3.0/modules/gwtorganize/helpers/revision.php diff --git a/3.0/modules/gwtorganise/helpers/upload_configuration.php b/3.0/modules/gwtorganize/helpers/upload_configuration.php similarity index 100% rename from 3.0/modules/gwtorganise/helpers/upload_configuration.php rename to 3.0/modules/gwtorganize/helpers/upload_configuration.php diff --git a/3.0/modules/gwtorganise/module.info b/3.0/modules/gwtorganize/module.info similarity index 100% rename from 3.0/modules/gwtorganise/module.info rename to 3.0/modules/gwtorganize/module.info diff --git a/3.0/modules/gwtorganise/src/META-INF/jdoconfig.xml b/3.0/modules/gwtorganize/src/META-INF/jdoconfig.xml similarity index 100% rename from 3.0/modules/gwtorganise/src/META-INF/jdoconfig.xml rename to 3.0/modules/gwtorganize/src/META-INF/jdoconfig.xml diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/G3viewer.gwt.xml b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/G3viewer.gwt.xml similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/G3viewer.gwt.xml rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/G3viewer.gwt.xml diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/Album.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/Album.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/Album.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/Album.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/AlbumItemDropContainer.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/AlbumItemDropContainer.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/AlbumItemDropContainer.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/AlbumItemDropContainer.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/AlbumTree.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/AlbumTree.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/AlbumTree.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/AlbumTree.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/AlbumTreeDropController.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/AlbumTreeDropController.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/AlbumTreeDropController.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/AlbumTreeDropController.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/AsyncResizer.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/AsyncResizer.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/AsyncResizer.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/AsyncResizer.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/AsyncRunner.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/AsyncRunner.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/AsyncRunner.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/AsyncRunner.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/ConfirmDialogBox.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/ConfirmDialogBox.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/ConfirmDialogBox.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/ConfirmDialogBox.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/DropZoneController.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/DropZoneController.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/DropZoneController.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/DropZoneController.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/G3Viewer.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/G3Viewer.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/G3Viewer.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/G3Viewer.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/HttpDialogBox.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/HttpDialogBox.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/HttpDialogBox.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/HttpDialogBox.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/HttpDialogHandler.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/HttpDialogHandler.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/HttpDialogHandler.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/HttpDialogHandler.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/HttpSuccessHandler.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/HttpSuccessHandler.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/HttpSuccessHandler.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/HttpSuccessHandler.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/ImageDialogBox.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/ImageDialogBox.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/ImageDialogBox.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/ImageDialogBox.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/InformationBar.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/InformationBar.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/InformationBar.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/InformationBar.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/Item.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/Item.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/Item.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/Item.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/JSONResponseCallback.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/JSONResponseCallback.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/JSONResponseCallback.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/JSONResponseCallback.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/JSONResponseTextHandler.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/JSONResponseTextHandler.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/JSONResponseTextHandler.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/JSONResponseTextHandler.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/Loading.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/Loading.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/Loading.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/Loading.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/MyPickupDragController.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/MyPickupDragController.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/MyPickupDragController.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/MyPickupDragController.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/ResizeOptions.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/ResizeOptions.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/ResizeOptions.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/ResizeOptions.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/UploadControl.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/UploadControl.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/UploadControl.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/UploadControl.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/UploadControlNoGears.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/UploadControlNoGears.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/UploadControlNoGears.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/UploadControlNoGears.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/UploadFile.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/UploadFile.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/UploadFile.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/UploadFile.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/Utils.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/Utils.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/Utils.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/Utils.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/View.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/View.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/View.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/View.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/Canvas.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/canvas/Canvas.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/Canvas.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/canvas/Canvas.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/Factory.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/canvas/Factory.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/Factory.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/canvas/Factory.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/ResizeFilter.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/canvas/ResizeFilter.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/ResizeFilter.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/canvas/ResizeFilter.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.java b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.java similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.java rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.java diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/public/G3viewer.css b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/public/G3viewer.css similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/public/G3viewer.css rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/public/G3viewer.css diff --git a/3.0/modules/gwtorganise/src/com/gloopics/g3viewer/public/loading.gif b/3.0/modules/gwtorganize/src/com/gloopics/g3viewer/public/loading.gif similarity index 100% rename from 3.0/modules/gwtorganise/src/com/gloopics/g3viewer/public/loading.gif rename to 3.0/modules/gwtorganize/src/com/gloopics/g3viewer/public/loading.gif diff --git a/3.0/modules/gwtorganise/src/log4j.properties b/3.0/modules/gwtorganize/src/log4j.properties similarity index 100% rename from 3.0/modules/gwtorganise/src/log4j.properties rename to 3.0/modules/gwtorganize/src/log4j.properties diff --git a/3.0/modules/gwtorganise/views/gwtorganise_view.html.php b/3.0/modules/gwtorganize/views/gwtorganise_view.html.php similarity index 100% rename from 3.0/modules/gwtorganise/views/gwtorganise_view.html.php rename to 3.0/modules/gwtorganize/views/gwtorganise_view.html.php diff --git a/3.0/modules/gwtorganise/war/.htaccess b/3.0/modules/gwtorganize/war/.htaccess similarity index 100% rename from 3.0/modules/gwtorganise/war/.htaccess rename to 3.0/modules/gwtorganize/war/.htaccess diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/META-INF/jdoconfig.xml b/3.0/modules/gwtorganize/war/WEB-INF/classes/META-INF/jdoconfig.xml similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/META-INF/jdoconfig.xml rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/META-INF/jdoconfig.xml diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/G3viewer.gwt.xml b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/G3viewer.gwt.xml similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/G3viewer.gwt.xml rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/G3viewer.gwt.xml diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$10.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$10.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$10.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$10.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$11.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$11.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$11.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$11.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$12.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$12.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$12.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$12.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$5.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$5.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$5.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$5.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$6.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$6.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$6.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$6.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$7.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$7.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$7.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$7.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$8.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$8.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$8.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$8.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$9.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$9.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$9.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$9.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumItemDropContainer.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumItemDropContainer.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumItemDropContainer.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumItemDropContainer.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTreeDropController.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTreeDropController.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTreeDropController.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTreeDropController.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncResizer.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncResizer.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncResizer.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncResizer.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncRunner.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncRunner.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncRunner.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncRunner.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$2.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$2.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$2.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$2.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$ConfirmCallBack.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$ConfirmCallBack.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$ConfirmCallBack.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$ConfirmCallBack.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/DropZoneController.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/DropZoneController.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/DropZoneController.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/DropZoneController.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$2.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$2.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$2.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$2.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$SimplePanelEx.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$SimplePanelEx.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$SimplePanelEx.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$SimplePanelEx.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$2.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$2.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$2.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$2.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$3.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$3.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$3.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$3.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$4.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$4.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$4.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$4.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$5.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$5.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$5.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$5.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$RequestCallbackImpl.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$RequestCallbackImpl.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$RequestCallbackImpl.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$RequestCallbackImpl.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogHandler.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogHandler.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogHandler.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogHandler.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpSuccessHandler.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpSuccessHandler.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpSuccessHandler.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpSuccessHandler.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$2.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$2.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$2.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$2.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$3.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$3.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$3.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$3.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$2.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$2.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$2.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$2.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$3.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$3.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$3.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$3.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$9.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$9.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$9.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$9.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseCallback.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseCallback.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseCallback.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseCallback.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseTextHandler.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseTextHandler.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseTextHandler.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseTextHandler.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Loading.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Loading.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Loading.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Loading.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/MyPickupDragController.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/MyPickupDragController.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/MyPickupDragController.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/MyPickupDragController.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ResizeOptions.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ResizeOptions.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ResizeOptions.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ResizeOptions.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControl.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControl.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControl.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControl.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControlNoGears.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControlNoGears.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControlNoGears.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControlNoGears.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$2.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$2.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$2.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$2.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$3.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$3.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$3.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$3.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$ProgressBar.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$ProgressBar.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$ProgressBar.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$ProgressBar.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Utils.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Utils.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Utils.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Utils.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Canvas.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Canvas.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Canvas.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Canvas.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Factory.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Factory.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Factory.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Factory.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$2.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$2.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$2.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$2.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears$1.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears$1.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears$1.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears$1.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.class b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.class similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.class rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.class diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/public/G3viewer.css b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/public/G3viewer.css similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/public/G3viewer.css rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/public/G3viewer.css diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/public/loading.gif b/3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/public/loading.gif similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/public/loading.gif rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/public/loading.gif diff --git a/3.0/modules/gwtorganise/war/WEB-INF/classes/log4j.properties b/3.0/modules/gwtorganize/war/WEB-INF/classes/log4j.properties similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/classes/log4j.properties rename to 3.0/modules/gwtorganize/war/WEB-INF/classes/log4j.properties diff --git a/3.0/modules/gwtorganise/war/WEB-INF/lib/appengine-api-1.0-sdk-1.2.5.jar b/3.0/modules/gwtorganize/war/WEB-INF/lib/appengine-api-1.0-sdk-1.2.5.jar similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/lib/appengine-api-1.0-sdk-1.2.5.jar rename to 3.0/modules/gwtorganize/war/WEB-INF/lib/appengine-api-1.0-sdk-1.2.5.jar diff --git a/3.0/modules/gwtorganise/war/WEB-INF/lib/appengine-api-labs-1.2.5.jar b/3.0/modules/gwtorganize/war/WEB-INF/lib/appengine-api-labs-1.2.5.jar similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/lib/appengine-api-labs-1.2.5.jar rename to 3.0/modules/gwtorganize/war/WEB-INF/lib/appengine-api-labs-1.2.5.jar diff --git a/3.0/modules/gwtorganise/war/WEB-INF/lib/datanucleus-appengine-1.0.3.jar b/3.0/modules/gwtorganize/war/WEB-INF/lib/datanucleus-appengine-1.0.3.jar similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/lib/datanucleus-appengine-1.0.3.jar rename to 3.0/modules/gwtorganize/war/WEB-INF/lib/datanucleus-appengine-1.0.3.jar diff --git a/3.0/modules/gwtorganise/war/WEB-INF/lib/datanucleus-core-1.1.5.jar b/3.0/modules/gwtorganize/war/WEB-INF/lib/datanucleus-core-1.1.5.jar similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/lib/datanucleus-core-1.1.5.jar rename to 3.0/modules/gwtorganize/war/WEB-INF/lib/datanucleus-core-1.1.5.jar diff --git a/3.0/modules/gwtorganise/war/WEB-INF/lib/datanucleus-jpa-1.1.5.jar b/3.0/modules/gwtorganize/war/WEB-INF/lib/datanucleus-jpa-1.1.5.jar similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/lib/datanucleus-jpa-1.1.5.jar rename to 3.0/modules/gwtorganize/war/WEB-INF/lib/datanucleus-jpa-1.1.5.jar diff --git a/3.0/modules/gwtorganise/war/WEB-INF/lib/geronimo-jpa_3.0_spec-1.1.1.jar b/3.0/modules/gwtorganize/war/WEB-INF/lib/geronimo-jpa_3.0_spec-1.1.1.jar similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/lib/geronimo-jpa_3.0_spec-1.1.1.jar rename to 3.0/modules/gwtorganize/war/WEB-INF/lib/geronimo-jpa_3.0_spec-1.1.1.jar diff --git a/3.0/modules/gwtorganise/war/WEB-INF/lib/geronimo-jta_1.1_spec-1.1.1.jar b/3.0/modules/gwtorganize/war/WEB-INF/lib/geronimo-jta_1.1_spec-1.1.1.jar similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/lib/geronimo-jta_1.1_spec-1.1.1.jar rename to 3.0/modules/gwtorganize/war/WEB-INF/lib/geronimo-jta_1.1_spec-1.1.1.jar diff --git a/3.0/modules/gwtorganise/war/WEB-INF/lib/gwt-servlet.jar b/3.0/modules/gwtorganize/war/WEB-INF/lib/gwt-servlet.jar similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/lib/gwt-servlet.jar rename to 3.0/modules/gwtorganize/war/WEB-INF/lib/gwt-servlet.jar diff --git a/3.0/modules/gwtorganise/war/WEB-INF/lib/jdo2-api-2.3-eb.jar b/3.0/modules/gwtorganize/war/WEB-INF/lib/jdo2-api-2.3-eb.jar similarity index 100% rename from 3.0/modules/gwtorganise/war/WEB-INF/lib/jdo2-api-2.3-eb.jar rename to 3.0/modules/gwtorganize/war/WEB-INF/lib/jdo2-api-2.3-eb.jar diff --git a/3.0/modules/gwtorganise/war/g3viewer/0A9476898799A150D840F0B1C3672921.cache.png b/3.0/modules/gwtorganize/war/g3viewer/0A9476898799A150D840F0B1C3672921.cache.png similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/0A9476898799A150D840F0B1C3672921.cache.png rename to 3.0/modules/gwtorganize/war/g3viewer/0A9476898799A150D840F0B1C3672921.cache.png diff --git a/3.0/modules/gwtorganise/war/g3viewer/0D97DF37194D1924CC80394AAA96B9A3.cache.html b/3.0/modules/gwtorganize/war/g3viewer/0D97DF37194D1924CC80394AAA96B9A3.cache.html similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/0D97DF37194D1924CC80394AAA96B9A3.cache.html rename to 3.0/modules/gwtorganize/war/g3viewer/0D97DF37194D1924CC80394AAA96B9A3.cache.html diff --git a/3.0/modules/gwtorganise/war/g3viewer/27AC86F0820D8F960DBF73C151C0332B.cache.html b/3.0/modules/gwtorganize/war/g3viewer/27AC86F0820D8F960DBF73C151C0332B.cache.html similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/27AC86F0820D8F960DBF73C151C0332B.cache.html rename to 3.0/modules/gwtorganize/war/g3viewer/27AC86F0820D8F960DBF73C151C0332B.cache.html diff --git a/3.0/modules/gwtorganise/war/g3viewer/396F806CD63ABD414BFBB9D57429F05B.cache.png b/3.0/modules/gwtorganize/war/g3viewer/396F806CD63ABD414BFBB9D57429F05B.cache.png similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/396F806CD63ABD414BFBB9D57429F05B.cache.png rename to 3.0/modules/gwtorganize/war/g3viewer/396F806CD63ABD414BFBB9D57429F05B.cache.png diff --git a/3.0/modules/gwtorganise/war/g3viewer/4AFE598FDFDF189DD61F57E554328B10.cache.html b/3.0/modules/gwtorganize/war/g3viewer/4AFE598FDFDF189DD61F57E554328B10.cache.html similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/4AFE598FDFDF189DD61F57E554328B10.cache.html rename to 3.0/modules/gwtorganize/war/g3viewer/4AFE598FDFDF189DD61F57E554328B10.cache.html diff --git a/3.0/modules/gwtorganise/war/g3viewer/4E8EC2279CB4B46228EFF0682ED166A4.cache.html b/3.0/modules/gwtorganize/war/g3viewer/4E8EC2279CB4B46228EFF0682ED166A4.cache.html similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/4E8EC2279CB4B46228EFF0682ED166A4.cache.html rename to 3.0/modules/gwtorganize/war/g3viewer/4E8EC2279CB4B46228EFF0682ED166A4.cache.html diff --git a/3.0/modules/gwtorganise/war/g3viewer/4F7AD7D8299143D876CB4071BE00BF02.cache.html b/3.0/modules/gwtorganize/war/g3viewer/4F7AD7D8299143D876CB4071BE00BF02.cache.html similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/4F7AD7D8299143D876CB4071BE00BF02.cache.html rename to 3.0/modules/gwtorganize/war/g3viewer/4F7AD7D8299143D876CB4071BE00BF02.cache.html diff --git a/3.0/modules/gwtorganise/war/g3viewer/6462B363383D23B8418857B7A6FAD85B.cache.html b/3.0/modules/gwtorganize/war/g3viewer/6462B363383D23B8418857B7A6FAD85B.cache.html similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/6462B363383D23B8418857B7A6FAD85B.cache.html rename to 3.0/modules/gwtorganize/war/g3viewer/6462B363383D23B8418857B7A6FAD85B.cache.html diff --git a/3.0/modules/gwtorganise/war/g3viewer/71ED95F3DFB964762667E45E2922704D.cache.html b/3.0/modules/gwtorganize/war/g3viewer/71ED95F3DFB964762667E45E2922704D.cache.html similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/71ED95F3DFB964762667E45E2922704D.cache.html rename to 3.0/modules/gwtorganize/war/g3viewer/71ED95F3DFB964762667E45E2922704D.cache.html diff --git a/3.0/modules/gwtorganise/war/g3viewer/8603379B5088782D2C0620FAE856E112.cache.png b/3.0/modules/gwtorganize/war/g3viewer/8603379B5088782D2C0620FAE856E112.cache.png similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/8603379B5088782D2C0620FAE856E112.cache.png rename to 3.0/modules/gwtorganize/war/g3viewer/8603379B5088782D2C0620FAE856E112.cache.png diff --git a/3.0/modules/gwtorganise/war/g3viewer/884CB866FECF37EDDE4914CA60AF2511.cache.html b/3.0/modules/gwtorganize/war/g3viewer/884CB866FECF37EDDE4914CA60AF2511.cache.html similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/884CB866FECF37EDDE4914CA60AF2511.cache.html rename to 3.0/modules/gwtorganize/war/g3viewer/884CB866FECF37EDDE4914CA60AF2511.cache.html diff --git a/3.0/modules/gwtorganise/war/g3viewer/9DC95FB4BEC084EF810751F04B440FD7.cache.html b/3.0/modules/gwtorganize/war/g3viewer/9DC95FB4BEC084EF810751F04B440FD7.cache.html similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/9DC95FB4BEC084EF810751F04B440FD7.cache.html rename to 3.0/modules/gwtorganize/war/g3viewer/9DC95FB4BEC084EF810751F04B440FD7.cache.html diff --git a/3.0/modules/gwtorganise/war/g3viewer/A8FBB0ADAFEE7F8EA1CDB15765D13A7F.cache.html b/3.0/modules/gwtorganize/war/g3viewer/A8FBB0ADAFEE7F8EA1CDB15765D13A7F.cache.html similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/A8FBB0ADAFEE7F8EA1CDB15765D13A7F.cache.html rename to 3.0/modules/gwtorganize/war/g3viewer/A8FBB0ADAFEE7F8EA1CDB15765D13A7F.cache.html diff --git a/3.0/modules/gwtorganise/war/g3viewer/CE15F73DB4EDED1CF8F93F95A728792D.cache.html b/3.0/modules/gwtorganize/war/g3viewer/CE15F73DB4EDED1CF8F93F95A728792D.cache.html similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/CE15F73DB4EDED1CF8F93F95A728792D.cache.html rename to 3.0/modules/gwtorganize/war/g3viewer/CE15F73DB4EDED1CF8F93F95A728792D.cache.html diff --git a/3.0/modules/gwtorganise/war/g3viewer/D096B0ED44CBABF1A6B1F2C2D31F4FCC.cache.html b/3.0/modules/gwtorganize/war/g3viewer/D096B0ED44CBABF1A6B1F2C2D31F4FCC.cache.html similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/D096B0ED44CBABF1A6B1F2C2D31F4FCC.cache.html rename to 3.0/modules/gwtorganize/war/g3viewer/D096B0ED44CBABF1A6B1F2C2D31F4FCC.cache.html diff --git a/3.0/modules/gwtorganise/war/g3viewer/DF7764EEC1903CD03C9545B354D8D8E4.cache.png b/3.0/modules/gwtorganize/war/g3viewer/DF7764EEC1903CD03C9545B354D8D8E4.cache.png similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/DF7764EEC1903CD03C9545B354D8D8E4.cache.png rename to 3.0/modules/gwtorganize/war/g3viewer/DF7764EEC1903CD03C9545B354D8D8E4.cache.png diff --git a/3.0/modules/gwtorganise/war/g3viewer/E44767377485D18D6B6864F65BA8EF73.cache.png b/3.0/modules/gwtorganize/war/g3viewer/E44767377485D18D6B6864F65BA8EF73.cache.png similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/E44767377485D18D6B6864F65BA8EF73.cache.png rename to 3.0/modules/gwtorganize/war/g3viewer/E44767377485D18D6B6864F65BA8EF73.cache.png diff --git a/3.0/modules/gwtorganise/war/g3viewer/EDC7827FEEA59EE44AD790B1C6430C45.cache.png b/3.0/modules/gwtorganize/war/g3viewer/EDC7827FEEA59EE44AD790B1C6430C45.cache.png similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/EDC7827FEEA59EE44AD790B1C6430C45.cache.png rename to 3.0/modules/gwtorganize/war/g3viewer/EDC7827FEEA59EE44AD790B1C6430C45.cache.png diff --git a/3.0/modules/gwtorganise/war/g3viewer/G3viewer.css b/3.0/modules/gwtorganize/war/g3viewer/G3viewer.css similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/G3viewer.css rename to 3.0/modules/gwtorganize/war/g3viewer/G3viewer.css diff --git a/3.0/modules/gwtorganise/war/g3viewer/clear.cache.gif b/3.0/modules/gwtorganize/war/g3viewer/clear.cache.gif similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/clear.cache.gif rename to 3.0/modules/gwtorganize/war/g3viewer/clear.cache.gif diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/1.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/1.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/1.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/1.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/2.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/2.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/2.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/2.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/3.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/3.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/3.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/3.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/1.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/1.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/1.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/1.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/2.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/2.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/2.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/2.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/3.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/3.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/3.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/3.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/1.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/1.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/1.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/1.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/2.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/2.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/2.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/2.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/3.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/3.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/3.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/3.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/1.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/1.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/1.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/1.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/2.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/2.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/2.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/2.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/3.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/3.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/3.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/3.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/1.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/1.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/1.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/1.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/2.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/2.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/2.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/2.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/3.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/3.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/3.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/3.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/1.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/1.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/1.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/1.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/2.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/2.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/2.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/2.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/3.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/3.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/3.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/3.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/1.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/1.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/1.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/1.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/2.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/2.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/2.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/2.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/3.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/3.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/3.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/3.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/1.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/1.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/1.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/1.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/2.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/2.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/2.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/2.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/3.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/3.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/3.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/3.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/1.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/1.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/1.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/1.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/2.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/2.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/2.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/2.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/3.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/3.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/3.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/3.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/1.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/1.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/1.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/1.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/2.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/2.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/2.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/2.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/3.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/3.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/3.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/3.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/1.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/1.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/1.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/1.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/2.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/2.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/2.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/2.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/3.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/3.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/3.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/3.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/1.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/1.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/1.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/1.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/2.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/2.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/2.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/2.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/3.cache.js b/3.0/modules/gwtorganize/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/3.cache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/3.cache.js rename to 3.0/modules/gwtorganize/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/3.cache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/g3viewer.nocache.js b/3.0/modules/gwtorganize/war/g3viewer/g3viewer.nocache.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/g3viewer.nocache.js rename to 3.0/modules/gwtorganize/war/g3viewer/g3viewer.nocache.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/gears_init.js b/3.0/modules/gwtorganize/war/g3viewer/gears_init.js similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/gears_init.js rename to 3.0/modules/gwtorganize/war/g3viewer/gears_init.js diff --git a/3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/corner.png b/3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/corner.png similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/corner.png rename to 3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/corner.png diff --git a/3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/corner_ie6.png b/3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/corner_ie6.png similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/corner_ie6.png rename to 3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/corner_ie6.png diff --git a/3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/hborder.png b/3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/hborder.png similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/hborder.png rename to 3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/hborder.png diff --git a/3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/hborder_ie6.png b/3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/hborder_ie6.png similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/hborder_ie6.png rename to 3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/hborder_ie6.png diff --git a/3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topleft.png b/3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topleft.png similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topleft.png rename to 3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topleft.png diff --git a/3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topright.png b/3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topright.png similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topright.png rename to 3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topright.png diff --git a/3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/hborder_blue_shadow.png b/3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/hborder_blue_shadow.png similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/hborder_blue_shadow.png rename to 3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/hborder_blue_shadow.png diff --git a/3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/hborder_gray_shadow.png b/3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/hborder_gray_shadow.png similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/hborder_gray_shadow.png rename to 3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/hborder_gray_shadow.png diff --git a/3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/vborder_blue_shadow.png b/3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/vborder_blue_shadow.png similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/vborder_blue_shadow.png rename to 3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/vborder_blue_shadow.png diff --git a/3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/vborder_gray_shadow.png b/3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/vborder_gray_shadow.png similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/vborder_gray_shadow.png rename to 3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/vborder_gray_shadow.png diff --git a/3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/vborder.png b/3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/vborder.png similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/vborder.png rename to 3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/vborder.png diff --git a/3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/vborder_ie6.png b/3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/vborder_ie6.png similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/gwt/standard/images/vborder_ie6.png rename to 3.0/modules/gwtorganize/war/g3viewer/gwt/standard/images/vborder_ie6.png diff --git a/3.0/modules/gwtorganise/war/g3viewer/gwt/standard/standard.css b/3.0/modules/gwtorganize/war/g3viewer/gwt/standard/standard.css similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/gwt/standard/standard.css rename to 3.0/modules/gwtorganize/war/g3viewer/gwt/standard/standard.css diff --git a/3.0/modules/gwtorganise/war/g3viewer/gwt/standard/standard_rtl.css b/3.0/modules/gwtorganize/war/g3viewer/gwt/standard/standard_rtl.css similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/gwt/standard/standard_rtl.css rename to 3.0/modules/gwtorganize/war/g3viewer/gwt/standard/standard_rtl.css diff --git a/3.0/modules/gwtorganise/war/g3viewer/hosted.html b/3.0/modules/gwtorganize/war/g3viewer/hosted.html similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/hosted.html rename to 3.0/modules/gwtorganize/war/g3viewer/hosted.html diff --git a/3.0/modules/gwtorganise/war/g3viewer/loading.gif b/3.0/modules/gwtorganize/war/g3viewer/loading.gif similarity index 100% rename from 3.0/modules/gwtorganise/war/g3viewer/loading.gif rename to 3.0/modules/gwtorganize/war/g3viewer/loading.gif diff --git a/3.0/modules/gwtorganise/war/index.php b/3.0/modules/gwtorganize/war/index.php similarity index 100% rename from 3.0/modules/gwtorganise/war/index.php rename to 3.0/modules/gwtorganize/war/index.php diff --git a/3.1/modules/gwtorganise/.classpath b/3.1/modules/gwtorganize/.classpath similarity index 100% rename from 3.1/modules/gwtorganise/.classpath rename to 3.1/modules/gwtorganize/.classpath diff --git a/3.1/modules/gwtorganise/.externalToolBuilders/New_Builder.launch b/3.1/modules/gwtorganize/.externalToolBuilders/New_Builder.launch similarity index 100% rename from 3.1/modules/gwtorganise/.externalToolBuilders/New_Builder.launch rename to 3.1/modules/gwtorganize/.externalToolBuilders/New_Builder.launch diff --git a/3.1/modules/gwtorganise/.project b/3.1/modules/gwtorganize/.project similarity index 100% rename from 3.1/modules/gwtorganise/.project rename to 3.1/modules/gwtorganize/.project diff --git a/3.1/modules/gwtorganise/.settings/com.google.appengine.eclipse.core.prefs b/3.1/modules/gwtorganize/.settings/com.google.appengine.eclipse.core.prefs similarity index 100% rename from 3.1/modules/gwtorganise/.settings/com.google.appengine.eclipse.core.prefs rename to 3.1/modules/gwtorganize/.settings/com.google.appengine.eclipse.core.prefs diff --git a/3.1/modules/gwtorganise/.settings/com.google.gdt.eclipse.core.prefs b/3.1/modules/gwtorganize/.settings/com.google.gdt.eclipse.core.prefs similarity index 100% rename from 3.1/modules/gwtorganise/.settings/com.google.gdt.eclipse.core.prefs rename to 3.1/modules/gwtorganize/.settings/com.google.gdt.eclipse.core.prefs diff --git a/3.1/modules/gwtorganise/.settings/com.google.gwt.eclipse.core.prefs b/3.1/modules/gwtorganize/.settings/com.google.gwt.eclipse.core.prefs similarity index 100% rename from 3.1/modules/gwtorganise/.settings/com.google.gwt.eclipse.core.prefs rename to 3.1/modules/gwtorganize/.settings/com.google.gwt.eclipse.core.prefs diff --git a/3.1/modules/gwtorganise/build.xml b/3.1/modules/gwtorganize/build.xml similarity index 100% rename from 3.1/modules/gwtorganise/build.xml rename to 3.1/modules/gwtorganize/build.xml diff --git a/3.1/modules/gwtorganise/controllers/admin_gwtorganise.php b/3.1/modules/gwtorganize/controllers/admin_gwtorganise.php similarity index 100% rename from 3.1/modules/gwtorganise/controllers/admin_gwtorganise.php rename to 3.1/modules/gwtorganize/controllers/admin_gwtorganise.php diff --git a/3.1/modules/gwtorganise/controllers/admin_upload_configure.php b/3.1/modules/gwtorganize/controllers/admin_upload_configure.php similarity index 100% rename from 3.1/modules/gwtorganise/controllers/admin_upload_configure.php rename to 3.1/modules/gwtorganize/controllers/admin_upload_configure.php diff --git a/3.1/modules/gwtorganise/controllers/json_album.php b/3.1/modules/gwtorganize/controllers/json_album.php similarity index 100% rename from 3.1/modules/gwtorganise/controllers/json_album.php rename to 3.1/modules/gwtorganize/controllers/json_album.php diff --git a/3.1/modules/gwtorganise/helpers/gwtorganise_event.php b/3.1/modules/gwtorganize/helpers/gwtorganise_event.php similarity index 100% rename from 3.1/modules/gwtorganise/helpers/gwtorganise_event.php rename to 3.1/modules/gwtorganize/helpers/gwtorganise_event.php diff --git a/3.1/modules/gwtorganise/helpers/gwtorganise_installer.php b/3.1/modules/gwtorganize/helpers/gwtorganise_installer.php similarity index 100% rename from 3.1/modules/gwtorganise/helpers/gwtorganise_installer.php rename to 3.1/modules/gwtorganize/helpers/gwtorganise_installer.php diff --git a/3.1/modules/gwtorganise/helpers/revision.php b/3.1/modules/gwtorganize/helpers/revision.php similarity index 100% rename from 3.1/modules/gwtorganise/helpers/revision.php rename to 3.1/modules/gwtorganize/helpers/revision.php diff --git a/3.1/modules/gwtorganise/helpers/upload_configuration.php b/3.1/modules/gwtorganize/helpers/upload_configuration.php similarity index 100% rename from 3.1/modules/gwtorganise/helpers/upload_configuration.php rename to 3.1/modules/gwtorganize/helpers/upload_configuration.php diff --git a/3.1/modules/gwtorganise/module.info b/3.1/modules/gwtorganize/module.info similarity index 100% rename from 3.1/modules/gwtorganise/module.info rename to 3.1/modules/gwtorganize/module.info diff --git a/3.1/modules/gwtorganise/src/META-INF/jdoconfig.xml b/3.1/modules/gwtorganize/src/META-INF/jdoconfig.xml similarity index 100% rename from 3.1/modules/gwtorganise/src/META-INF/jdoconfig.xml rename to 3.1/modules/gwtorganize/src/META-INF/jdoconfig.xml diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/G3viewer.gwt.xml b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/G3viewer.gwt.xml similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/G3viewer.gwt.xml rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/G3viewer.gwt.xml diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/Album.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/Album.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/Album.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/Album.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/AlbumItemDropContainer.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/AlbumItemDropContainer.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/AlbumItemDropContainer.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/AlbumItemDropContainer.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/AlbumTree.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/AlbumTree.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/AlbumTree.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/AlbumTree.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/AlbumTreeDropController.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/AlbumTreeDropController.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/AlbumTreeDropController.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/AlbumTreeDropController.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/AsyncResizer.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/AsyncResizer.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/AsyncResizer.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/AsyncResizer.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/AsyncRunner.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/AsyncRunner.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/AsyncRunner.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/AsyncRunner.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/ConfirmDialogBox.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/ConfirmDialogBox.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/ConfirmDialogBox.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/ConfirmDialogBox.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/DropZoneController.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/DropZoneController.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/DropZoneController.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/DropZoneController.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/G3Viewer.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/G3Viewer.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/G3Viewer.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/G3Viewer.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/HttpDialogBox.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/HttpDialogBox.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/HttpDialogBox.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/HttpDialogBox.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/HttpDialogHandler.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/HttpDialogHandler.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/HttpDialogHandler.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/HttpDialogHandler.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/HttpSuccessHandler.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/HttpSuccessHandler.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/HttpSuccessHandler.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/HttpSuccessHandler.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/ImageDialogBox.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/ImageDialogBox.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/ImageDialogBox.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/ImageDialogBox.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/InformationBar.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/InformationBar.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/InformationBar.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/InformationBar.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/Item.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/Item.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/Item.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/Item.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/JSONResponseCallback.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/JSONResponseCallback.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/JSONResponseCallback.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/JSONResponseCallback.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/JSONResponseTextHandler.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/JSONResponseTextHandler.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/JSONResponseTextHandler.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/JSONResponseTextHandler.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/Loading.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/Loading.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/Loading.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/Loading.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/MyPickupDragController.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/MyPickupDragController.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/MyPickupDragController.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/MyPickupDragController.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/ResizeOptions.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/ResizeOptions.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/ResizeOptions.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/ResizeOptions.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/UploadControl.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/UploadControl.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/UploadControl.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/UploadControl.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/UploadControlNoGears.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/UploadControlNoGears.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/UploadControlNoGears.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/UploadControlNoGears.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/UploadFile.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/UploadFile.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/UploadFile.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/UploadFile.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/Utils.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/Utils.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/Utils.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/Utils.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/View.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/View.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/View.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/View.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/Canvas.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/canvas/Canvas.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/Canvas.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/canvas/Canvas.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/Factory.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/canvas/Factory.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/Factory.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/canvas/Factory.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/ResizeFilter.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/canvas/ResizeFilter.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/canvas/ResizeFilter.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/canvas/ResizeFilter.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.java b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.java similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.java rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.java diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/public/G3viewer.css b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/public/G3viewer.css similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/public/G3viewer.css rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/public/G3viewer.css diff --git a/3.1/modules/gwtorganise/src/com/gloopics/g3viewer/public/loading.gif b/3.1/modules/gwtorganize/src/com/gloopics/g3viewer/public/loading.gif similarity index 100% rename from 3.1/modules/gwtorganise/src/com/gloopics/g3viewer/public/loading.gif rename to 3.1/modules/gwtorganize/src/com/gloopics/g3viewer/public/loading.gif diff --git a/3.1/modules/gwtorganise/src/log4j.properties b/3.1/modules/gwtorganize/src/log4j.properties similarity index 100% rename from 3.1/modules/gwtorganise/src/log4j.properties rename to 3.1/modules/gwtorganize/src/log4j.properties diff --git a/3.1/modules/gwtorganise/views/gwtorganise_view.html.php b/3.1/modules/gwtorganize/views/gwtorganise_view.html.php similarity index 100% rename from 3.1/modules/gwtorganise/views/gwtorganise_view.html.php rename to 3.1/modules/gwtorganize/views/gwtorganise_view.html.php diff --git a/3.1/modules/gwtorganise/war/.htaccess b/3.1/modules/gwtorganize/war/.htaccess similarity index 100% rename from 3.1/modules/gwtorganise/war/.htaccess rename to 3.1/modules/gwtorganize/war/.htaccess diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/META-INF/jdoconfig.xml b/3.1/modules/gwtorganize/war/WEB-INF/classes/META-INF/jdoconfig.xml similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/META-INF/jdoconfig.xml rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/META-INF/jdoconfig.xml diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/G3viewer.gwt.xml b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/G3viewer.gwt.xml similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/G3viewer.gwt.xml rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/G3viewer.gwt.xml diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$10.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$10.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$10.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$10.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$11.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$11.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$11.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$11.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$12.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$12.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$12.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$12.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$2.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$3.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$4.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$5.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$5.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$5.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$5.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$6.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$6.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$6.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$6.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$7.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$7.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$7.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$7.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$8.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$8.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$8.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$8.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$9.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$9.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$9.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album$9.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Album.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumItemDropContainer.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumItemDropContainer.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumItemDropContainer.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumItemDropContainer.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTree.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTreeDropController.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTreeDropController.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTreeDropController.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AlbumTreeDropController.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncResizer.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncResizer.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncResizer.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncResizer.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncRunner.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncRunner.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncRunner.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/AsyncRunner.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$2.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$2.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$2.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$2.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$ConfirmCallBack.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$ConfirmCallBack.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$ConfirmCallBack.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox$ConfirmCallBack.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ConfirmDialogBox.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/DropZoneController.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/DropZoneController.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/DropZoneController.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/DropZoneController.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$2.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$2.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$2.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$2.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$ErrorDialog.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$SimplePanelEx.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$SimplePanelEx.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$SimplePanelEx.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer$SimplePanelEx.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/G3Viewer.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$2.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$2.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$2.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$2.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$3.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$3.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$3.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$3.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$4.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$4.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$4.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$4.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$5.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$5.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$5.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$5.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$RequestCallbackImpl.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$RequestCallbackImpl.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$RequestCallbackImpl.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox$RequestCallbackImpl.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogBox.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogHandler.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogHandler.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogHandler.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpDialogHandler.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpSuccessHandler.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpSuccessHandler.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpSuccessHandler.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/HttpSuccessHandler.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$2.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$2.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$2.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$2.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$3.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$3.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$3.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox$3.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ImageDialogBox.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/InformationBar.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$2.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$2.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$2.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$2.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$3.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$3.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$3.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$3.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$4.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$5.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$6.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$7.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$8.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$9.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$9.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$9.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item$9.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Item.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseCallback.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseCallback.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseCallback.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseCallback.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseTextHandler.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseTextHandler.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseTextHandler.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/JSONResponseTextHandler.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Loading.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Loading.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Loading.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Loading.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/MyPickupDragController.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/MyPickupDragController.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/MyPickupDragController.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/MyPickupDragController.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ResizeOptions.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ResizeOptions.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/ResizeOptions.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/ResizeOptions.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControl.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControl.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControl.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControl.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControlNoGears.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControlNoGears.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControlNoGears.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadControlNoGears.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$2.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$2.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$2.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$2.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$3.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$3.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$3.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$3.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$ProgressBar.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$ProgressBar.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$ProgressBar.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile$ProgressBar.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/UploadFile.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Utils.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Utils.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/Utils.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/Utils.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$2.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View$3.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/View.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/View.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Canvas.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Canvas.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Canvas.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Canvas.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Factory.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Factory.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Factory.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/Factory.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$2.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$2.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$2.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter$2.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/canvas/ResizeFilter.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDrop.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropBase.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFile.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDropFileIE.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DesktopDroppableWidget.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactory.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryIE.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears$1.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears$1.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears$1.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears$1.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.class b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.class similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.class rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/client/dnddesktop/DndDesktopFactoryNoGears.class diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/public/G3viewer.css b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/public/G3viewer.css similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/public/G3viewer.css rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/public/G3viewer.css diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/public/loading.gif b/3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/public/loading.gif similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/com/gloopics/g3viewer/public/loading.gif rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/com/gloopics/g3viewer/public/loading.gif diff --git a/3.1/modules/gwtorganise/war/WEB-INF/classes/log4j.properties b/3.1/modules/gwtorganize/war/WEB-INF/classes/log4j.properties similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/classes/log4j.properties rename to 3.1/modules/gwtorganize/war/WEB-INF/classes/log4j.properties diff --git a/3.1/modules/gwtorganise/war/WEB-INF/lib/appengine-api-1.0-sdk-1.2.5.jar b/3.1/modules/gwtorganize/war/WEB-INF/lib/appengine-api-1.0-sdk-1.2.5.jar similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/lib/appengine-api-1.0-sdk-1.2.5.jar rename to 3.1/modules/gwtorganize/war/WEB-INF/lib/appengine-api-1.0-sdk-1.2.5.jar diff --git a/3.1/modules/gwtorganise/war/WEB-INF/lib/appengine-api-labs-1.2.5.jar b/3.1/modules/gwtorganize/war/WEB-INF/lib/appengine-api-labs-1.2.5.jar similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/lib/appengine-api-labs-1.2.5.jar rename to 3.1/modules/gwtorganize/war/WEB-INF/lib/appengine-api-labs-1.2.5.jar diff --git a/3.1/modules/gwtorganise/war/WEB-INF/lib/datanucleus-appengine-1.0.3.jar b/3.1/modules/gwtorganize/war/WEB-INF/lib/datanucleus-appengine-1.0.3.jar similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/lib/datanucleus-appengine-1.0.3.jar rename to 3.1/modules/gwtorganize/war/WEB-INF/lib/datanucleus-appengine-1.0.3.jar diff --git a/3.1/modules/gwtorganise/war/WEB-INF/lib/datanucleus-core-1.1.5.jar b/3.1/modules/gwtorganize/war/WEB-INF/lib/datanucleus-core-1.1.5.jar similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/lib/datanucleus-core-1.1.5.jar rename to 3.1/modules/gwtorganize/war/WEB-INF/lib/datanucleus-core-1.1.5.jar diff --git a/3.1/modules/gwtorganise/war/WEB-INF/lib/datanucleus-jpa-1.1.5.jar b/3.1/modules/gwtorganize/war/WEB-INF/lib/datanucleus-jpa-1.1.5.jar similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/lib/datanucleus-jpa-1.1.5.jar rename to 3.1/modules/gwtorganize/war/WEB-INF/lib/datanucleus-jpa-1.1.5.jar diff --git a/3.1/modules/gwtorganise/war/WEB-INF/lib/geronimo-jpa_3.0_spec-1.1.1.jar b/3.1/modules/gwtorganize/war/WEB-INF/lib/geronimo-jpa_3.0_spec-1.1.1.jar similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/lib/geronimo-jpa_3.0_spec-1.1.1.jar rename to 3.1/modules/gwtorganize/war/WEB-INF/lib/geronimo-jpa_3.0_spec-1.1.1.jar diff --git a/3.1/modules/gwtorganise/war/WEB-INF/lib/geronimo-jta_1.1_spec-1.1.1.jar b/3.1/modules/gwtorganize/war/WEB-INF/lib/geronimo-jta_1.1_spec-1.1.1.jar similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/lib/geronimo-jta_1.1_spec-1.1.1.jar rename to 3.1/modules/gwtorganize/war/WEB-INF/lib/geronimo-jta_1.1_spec-1.1.1.jar diff --git a/3.1/modules/gwtorganise/war/WEB-INF/lib/gwt-servlet.jar b/3.1/modules/gwtorganize/war/WEB-INF/lib/gwt-servlet.jar similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/lib/gwt-servlet.jar rename to 3.1/modules/gwtorganize/war/WEB-INF/lib/gwt-servlet.jar diff --git a/3.1/modules/gwtorganise/war/WEB-INF/lib/jdo2-api-2.3-eb.jar b/3.1/modules/gwtorganize/war/WEB-INF/lib/jdo2-api-2.3-eb.jar similarity index 100% rename from 3.1/modules/gwtorganise/war/WEB-INF/lib/jdo2-api-2.3-eb.jar rename to 3.1/modules/gwtorganize/war/WEB-INF/lib/jdo2-api-2.3-eb.jar diff --git a/3.1/modules/gwtorganise/war/g3viewer/0A9476898799A150D840F0B1C3672921.cache.png b/3.1/modules/gwtorganize/war/g3viewer/0A9476898799A150D840F0B1C3672921.cache.png similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/0A9476898799A150D840F0B1C3672921.cache.png rename to 3.1/modules/gwtorganize/war/g3viewer/0A9476898799A150D840F0B1C3672921.cache.png diff --git a/3.1/modules/gwtorganise/war/g3viewer/0D97DF37194D1924CC80394AAA96B9A3.cache.html b/3.1/modules/gwtorganize/war/g3viewer/0D97DF37194D1924CC80394AAA96B9A3.cache.html similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/0D97DF37194D1924CC80394AAA96B9A3.cache.html rename to 3.1/modules/gwtorganize/war/g3viewer/0D97DF37194D1924CC80394AAA96B9A3.cache.html diff --git a/3.1/modules/gwtorganise/war/g3viewer/27AC86F0820D8F960DBF73C151C0332B.cache.html b/3.1/modules/gwtorganize/war/g3viewer/27AC86F0820D8F960DBF73C151C0332B.cache.html similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/27AC86F0820D8F960DBF73C151C0332B.cache.html rename to 3.1/modules/gwtorganize/war/g3viewer/27AC86F0820D8F960DBF73C151C0332B.cache.html diff --git a/3.1/modules/gwtorganise/war/g3viewer/396F806CD63ABD414BFBB9D57429F05B.cache.png b/3.1/modules/gwtorganize/war/g3viewer/396F806CD63ABD414BFBB9D57429F05B.cache.png similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/396F806CD63ABD414BFBB9D57429F05B.cache.png rename to 3.1/modules/gwtorganize/war/g3viewer/396F806CD63ABD414BFBB9D57429F05B.cache.png diff --git a/3.1/modules/gwtorganise/war/g3viewer/4AFE598FDFDF189DD61F57E554328B10.cache.html b/3.1/modules/gwtorganize/war/g3viewer/4AFE598FDFDF189DD61F57E554328B10.cache.html similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/4AFE598FDFDF189DD61F57E554328B10.cache.html rename to 3.1/modules/gwtorganize/war/g3viewer/4AFE598FDFDF189DD61F57E554328B10.cache.html diff --git a/3.1/modules/gwtorganise/war/g3viewer/4E8EC2279CB4B46228EFF0682ED166A4.cache.html b/3.1/modules/gwtorganize/war/g3viewer/4E8EC2279CB4B46228EFF0682ED166A4.cache.html similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/4E8EC2279CB4B46228EFF0682ED166A4.cache.html rename to 3.1/modules/gwtorganize/war/g3viewer/4E8EC2279CB4B46228EFF0682ED166A4.cache.html diff --git a/3.1/modules/gwtorganise/war/g3viewer/4F7AD7D8299143D876CB4071BE00BF02.cache.html b/3.1/modules/gwtorganize/war/g3viewer/4F7AD7D8299143D876CB4071BE00BF02.cache.html similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/4F7AD7D8299143D876CB4071BE00BF02.cache.html rename to 3.1/modules/gwtorganize/war/g3viewer/4F7AD7D8299143D876CB4071BE00BF02.cache.html diff --git a/3.1/modules/gwtorganise/war/g3viewer/6462B363383D23B8418857B7A6FAD85B.cache.html b/3.1/modules/gwtorganize/war/g3viewer/6462B363383D23B8418857B7A6FAD85B.cache.html similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/6462B363383D23B8418857B7A6FAD85B.cache.html rename to 3.1/modules/gwtorganize/war/g3viewer/6462B363383D23B8418857B7A6FAD85B.cache.html diff --git a/3.1/modules/gwtorganise/war/g3viewer/71ED95F3DFB964762667E45E2922704D.cache.html b/3.1/modules/gwtorganize/war/g3viewer/71ED95F3DFB964762667E45E2922704D.cache.html similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/71ED95F3DFB964762667E45E2922704D.cache.html rename to 3.1/modules/gwtorganize/war/g3viewer/71ED95F3DFB964762667E45E2922704D.cache.html diff --git a/3.1/modules/gwtorganise/war/g3viewer/8603379B5088782D2C0620FAE856E112.cache.png b/3.1/modules/gwtorganize/war/g3viewer/8603379B5088782D2C0620FAE856E112.cache.png similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/8603379B5088782D2C0620FAE856E112.cache.png rename to 3.1/modules/gwtorganize/war/g3viewer/8603379B5088782D2C0620FAE856E112.cache.png diff --git a/3.1/modules/gwtorganise/war/g3viewer/884CB866FECF37EDDE4914CA60AF2511.cache.html b/3.1/modules/gwtorganize/war/g3viewer/884CB866FECF37EDDE4914CA60AF2511.cache.html similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/884CB866FECF37EDDE4914CA60AF2511.cache.html rename to 3.1/modules/gwtorganize/war/g3viewer/884CB866FECF37EDDE4914CA60AF2511.cache.html diff --git a/3.1/modules/gwtorganise/war/g3viewer/9DC95FB4BEC084EF810751F04B440FD7.cache.html b/3.1/modules/gwtorganize/war/g3viewer/9DC95FB4BEC084EF810751F04B440FD7.cache.html similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/9DC95FB4BEC084EF810751F04B440FD7.cache.html rename to 3.1/modules/gwtorganize/war/g3viewer/9DC95FB4BEC084EF810751F04B440FD7.cache.html diff --git a/3.1/modules/gwtorganise/war/g3viewer/A8FBB0ADAFEE7F8EA1CDB15765D13A7F.cache.html b/3.1/modules/gwtorganize/war/g3viewer/A8FBB0ADAFEE7F8EA1CDB15765D13A7F.cache.html similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/A8FBB0ADAFEE7F8EA1CDB15765D13A7F.cache.html rename to 3.1/modules/gwtorganize/war/g3viewer/A8FBB0ADAFEE7F8EA1CDB15765D13A7F.cache.html diff --git a/3.1/modules/gwtorganise/war/g3viewer/CE15F73DB4EDED1CF8F93F95A728792D.cache.html b/3.1/modules/gwtorganize/war/g3viewer/CE15F73DB4EDED1CF8F93F95A728792D.cache.html similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/CE15F73DB4EDED1CF8F93F95A728792D.cache.html rename to 3.1/modules/gwtorganize/war/g3viewer/CE15F73DB4EDED1CF8F93F95A728792D.cache.html diff --git a/3.1/modules/gwtorganise/war/g3viewer/D096B0ED44CBABF1A6B1F2C2D31F4FCC.cache.html b/3.1/modules/gwtorganize/war/g3viewer/D096B0ED44CBABF1A6B1F2C2D31F4FCC.cache.html similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/D096B0ED44CBABF1A6B1F2C2D31F4FCC.cache.html rename to 3.1/modules/gwtorganize/war/g3viewer/D096B0ED44CBABF1A6B1F2C2D31F4FCC.cache.html diff --git a/3.1/modules/gwtorganise/war/g3viewer/DF7764EEC1903CD03C9545B354D8D8E4.cache.png b/3.1/modules/gwtorganize/war/g3viewer/DF7764EEC1903CD03C9545B354D8D8E4.cache.png similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/DF7764EEC1903CD03C9545B354D8D8E4.cache.png rename to 3.1/modules/gwtorganize/war/g3viewer/DF7764EEC1903CD03C9545B354D8D8E4.cache.png diff --git a/3.1/modules/gwtorganise/war/g3viewer/E44767377485D18D6B6864F65BA8EF73.cache.png b/3.1/modules/gwtorganize/war/g3viewer/E44767377485D18D6B6864F65BA8EF73.cache.png similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/E44767377485D18D6B6864F65BA8EF73.cache.png rename to 3.1/modules/gwtorganize/war/g3viewer/E44767377485D18D6B6864F65BA8EF73.cache.png diff --git a/3.1/modules/gwtorganise/war/g3viewer/EDC7827FEEA59EE44AD790B1C6430C45.cache.png b/3.1/modules/gwtorganize/war/g3viewer/EDC7827FEEA59EE44AD790B1C6430C45.cache.png similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/EDC7827FEEA59EE44AD790B1C6430C45.cache.png rename to 3.1/modules/gwtorganize/war/g3viewer/EDC7827FEEA59EE44AD790B1C6430C45.cache.png diff --git a/3.1/modules/gwtorganise/war/g3viewer/G3viewer.css b/3.1/modules/gwtorganize/war/g3viewer/G3viewer.css similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/G3viewer.css rename to 3.1/modules/gwtorganize/war/g3viewer/G3viewer.css diff --git a/3.1/modules/gwtorganise/war/g3viewer/clear.cache.gif b/3.1/modules/gwtorganize/war/g3viewer/clear.cache.gif similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/clear.cache.gif rename to 3.1/modules/gwtorganize/war/g3viewer/clear.cache.gif diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/1.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/1.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/1.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/1.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/2.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/2.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/2.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/2.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/3.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/3.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/3.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/0D97DF37194D1924CC80394AAA96B9A3/3.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/1.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/1.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/1.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/1.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/2.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/2.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/2.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/2.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/3.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/3.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/3.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/27AC86F0820D8F960DBF73C151C0332B/3.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/1.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/1.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/1.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/1.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/2.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/2.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/2.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/2.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/3.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/3.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/3.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/4AFE598FDFDF189DD61F57E554328B10/3.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/1.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/1.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/1.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/1.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/2.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/2.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/2.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/2.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/3.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/3.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/3.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/4E8EC2279CB4B46228EFF0682ED166A4/3.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/1.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/1.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/1.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/1.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/2.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/2.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/2.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/2.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/3.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/3.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/3.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/4F7AD7D8299143D876CB4071BE00BF02/3.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/1.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/1.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/1.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/1.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/2.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/2.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/2.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/2.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/3.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/3.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/3.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/6462B363383D23B8418857B7A6FAD85B/3.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/1.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/1.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/1.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/1.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/2.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/2.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/2.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/2.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/3.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/3.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/3.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/71ED95F3DFB964762667E45E2922704D/3.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/1.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/1.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/1.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/1.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/2.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/2.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/2.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/2.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/3.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/3.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/3.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/884CB866FECF37EDDE4914CA60AF2511/3.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/1.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/1.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/1.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/1.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/2.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/2.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/2.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/2.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/3.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/3.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/3.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/9DC95FB4BEC084EF810751F04B440FD7/3.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/1.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/1.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/1.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/1.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/2.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/2.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/2.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/2.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/3.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/3.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/3.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/A8FBB0ADAFEE7F8EA1CDB15765D13A7F/3.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/1.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/1.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/1.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/1.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/2.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/2.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/2.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/2.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/3.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/3.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/3.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/CE15F73DB4EDED1CF8F93F95A728792D/3.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/1.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/1.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/1.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/1.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/2.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/2.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/2.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/2.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/3.cache.js b/3.1/modules/gwtorganize/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/3.cache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/3.cache.js rename to 3.1/modules/gwtorganize/war/g3viewer/deferredjs/D096B0ED44CBABF1A6B1F2C2D31F4FCC/3.cache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/g3viewer.nocache.js b/3.1/modules/gwtorganize/war/g3viewer/g3viewer.nocache.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/g3viewer.nocache.js rename to 3.1/modules/gwtorganize/war/g3viewer/g3viewer.nocache.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/gears_init.js b/3.1/modules/gwtorganize/war/g3viewer/gears_init.js similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/gears_init.js rename to 3.1/modules/gwtorganize/war/g3viewer/gears_init.js diff --git a/3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/corner.png b/3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/corner.png similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/corner.png rename to 3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/corner.png diff --git a/3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/corner_ie6.png b/3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/corner_ie6.png similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/corner_ie6.png rename to 3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/corner_ie6.png diff --git a/3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/hborder.png b/3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/hborder.png similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/hborder.png rename to 3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/hborder.png diff --git a/3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/hborder_ie6.png b/3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/hborder_ie6.png similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/hborder_ie6.png rename to 3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/hborder_ie6.png diff --git a/3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topleft.png b/3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topleft.png similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topleft.png rename to 3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topleft.png diff --git a/3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topright.png b/3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topright.png similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topright.png rename to 3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/corner_dialog_topright.png diff --git a/3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/hborder_blue_shadow.png b/3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/hborder_blue_shadow.png similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/hborder_blue_shadow.png rename to 3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/hborder_blue_shadow.png diff --git a/3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/hborder_gray_shadow.png b/3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/hborder_gray_shadow.png similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/hborder_gray_shadow.png rename to 3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/hborder_gray_shadow.png diff --git a/3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/vborder_blue_shadow.png b/3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/vborder_blue_shadow.png similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/vborder_blue_shadow.png rename to 3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/vborder_blue_shadow.png diff --git a/3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/vborder_gray_shadow.png b/3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/vborder_gray_shadow.png similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/ie6/vborder_gray_shadow.png rename to 3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/ie6/vborder_gray_shadow.png diff --git a/3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/vborder.png b/3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/vborder.png similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/vborder.png rename to 3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/vborder.png diff --git a/3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/vborder_ie6.png b/3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/vborder_ie6.png similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/gwt/standard/images/vborder_ie6.png rename to 3.1/modules/gwtorganize/war/g3viewer/gwt/standard/images/vborder_ie6.png diff --git a/3.1/modules/gwtorganise/war/g3viewer/gwt/standard/standard.css b/3.1/modules/gwtorganize/war/g3viewer/gwt/standard/standard.css similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/gwt/standard/standard.css rename to 3.1/modules/gwtorganize/war/g3viewer/gwt/standard/standard.css diff --git a/3.1/modules/gwtorganise/war/g3viewer/gwt/standard/standard_rtl.css b/3.1/modules/gwtorganize/war/g3viewer/gwt/standard/standard_rtl.css similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/gwt/standard/standard_rtl.css rename to 3.1/modules/gwtorganize/war/g3viewer/gwt/standard/standard_rtl.css diff --git a/3.1/modules/gwtorganise/war/g3viewer/hosted.html b/3.1/modules/gwtorganize/war/g3viewer/hosted.html similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/hosted.html rename to 3.1/modules/gwtorganize/war/g3viewer/hosted.html diff --git a/3.1/modules/gwtorganise/war/g3viewer/loading.gif b/3.1/modules/gwtorganize/war/g3viewer/loading.gif similarity index 100% rename from 3.1/modules/gwtorganise/war/g3viewer/loading.gif rename to 3.1/modules/gwtorganize/war/g3viewer/loading.gif diff --git a/3.1/modules/gwtorganise/war/index.php b/3.1/modules/gwtorganize/war/index.php similarity index 100% rename from 3.1/modules/gwtorganise/war/index.php rename to 3.1/modules/gwtorganize/war/index.php From 0bd89b69b6c3f8062b8408c35926691bee42f593 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Wed, 16 Feb 2011 22:29:43 -0700 Subject: [PATCH 37/39] Check to see if we have an item before adding Twitter site_menu item. --- 3.1/modules/twitter/helpers/twitter_event.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/3.1/modules/twitter/helpers/twitter_event.php b/3.1/modules/twitter/helpers/twitter_event.php index 5dc810d6..81b78c28 100644 --- a/3.1/modules/twitter/helpers/twitter_event.php +++ b/3.1/modules/twitter/helpers/twitter_event.php @@ -28,8 +28,8 @@ class twitter_event_Core { } static function site_menu($menu, $theme) { - if ((identity::active_user()->id > 1) && twitter::is_registered()) { - $item = $theme->item(); + $item = $theme->item(); + if ($item && twitter::is_registered() && (identity::active_user()->id > 1)) { $menu->get("options_menu") ->append(Menu::factory("dialog") ->id("twitter") From a7aea129fb8843b372c0cc7049e8dd4058724500 Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Wed, 16 Feb 2011 23:22:01 -0700 Subject: [PATCH 38/39] Added README. --- 3.1/modules/twitter/README | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 3.1/modules/twitter/README diff --git a/3.1/modules/twitter/README b/3.1/modules/twitter/README new file mode 100644 index 00000000..e63d9ea1 --- /dev/null +++ b/3.1/modules/twitter/README @@ -0,0 +1,15 @@ +ABOUT: +Share photos, movies, and albums on Twitter, directly from Gallery. + +INSTALLATION AND CONFIGURATION: +http://codex.gallery2.org/Gallery3:Modules:twitter + +SUPPORT/BUG REPORTS: +http://gallery.menalto.com/node/100791 + +ROADMAP: +* Provide a reset access token button on the user's profile. +* Display Twitter profile/follow links on Gallery user profile pages. +* Provide "Share on Twitter" for anonymous users. +* Display item (re)tweets. +* Twitter identity provider (log into Gallery with Twitter) From 34923c773f8e306a4ca438b07cb6ad82b04a3c3e Mon Sep 17 00:00:00 2001 From: Chad Kieffer Date: Wed, 16 Feb 2011 23:22:48 -0700 Subject: [PATCH 39/39] Truncate default tweet values longer than 140. --- 3.1/modules/twitter/helpers/twitter.php | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/3.1/modules/twitter/helpers/twitter.php b/3.1/modules/twitter/helpers/twitter.php index ceea12f5..506da5c4 100644 --- a/3.1/modules/twitter/helpers/twitter.php +++ b/3.1/modules/twitter/helpers/twitter.php @@ -60,6 +60,7 @@ class twitter_Core { * Get tweet form * @param object $item * @return Forge + * @todo Truncate the $tweet at 140 - strlen($url) */ static function get_tweet_form($item) { $long_url = url::abs_site($item->relative_url_cache); @@ -81,7 +82,16 @@ class twitter_Core { } else { $url = url::abs_site($item->relative_url_cache); } - $tweet = preg_replace("/%url/", $url, $tweet); + + // Truncate the default tweet if it's too long + $url_length = strlen($url) + 1; + $tweet_length = strlen($tweet); + + if (($tweet_length + $url_length) > self::$character_count) { + $trim_pos = 0 - (($tweet_length + $url_length) - 140); + $tweet = substr($tweet, 0, $trim_pos); + } + $tweet = $tweet . ' ' . $url; $form = new Forge("twitter/tweet/$item->id", "", "post", array("id" => "g-twitter-tweet-form")); $group = $form->group("twitter_message")->label(t("Compose Tweet")); @@ -134,7 +144,7 @@ class twitter_Core { } static function reset_default_tweet() { - return t("Check out this %type, '%title': %description %url"); + return t("Check out this %type, '%title': %description"); } }