diff --git a/contrib/favorites/theme.php b/contrib/favorites/theme.php
index eb283006..6a45876e 100644
--- a/contrib/favorites/theme.php
+++ b/contrib/favorites/theme.php
@@ -1,43 +1,43 @@
-id);
- if(!$is_favorited) {
- $html = "
- ";
- }
- else {
- $html = "
- ";
- }
-
- return $html;
- }
-
- public function display_people($username_array) {
- global $page;
-
- $i_favorites = count($username_array);
- $html = "$i_favorites people:";
-
- foreach($username_array as $row) {
- $username = html_escape($row['name']);
- $html .= "$username ";
- }
-
- $page->add_block(new Block("Favorited By", $html, "left", 25));
- }
-}
-
-?>
+id);
+ if(!$is_favorited) {
+ $html = "
+ ";
+ }
+ else {
+ $html = "
+ ";
+ }
+
+ return $html;
+ }
+
+ public function display_people($username_array) {
+ global $page;
+
+ $i_favorites = count($username_array);
+ $html = "$i_favorites people:";
+
+ foreach($username_array as $row) {
+ $username = html_escape($row['name']);
+ $html .= "$username ";
+ }
+
+ $page->add_block(new Block("Favorited By", $html, "left", 25));
+ }
+}
+
+?>
diff --git a/contrib/sitemap/main.php b/contrib/sitemap/main.php
index 8052ce39..306c3085 100644
--- a/contrib/sitemap/main.php
+++ b/contrib/sitemap/main.php
@@ -1,54 +1,54 @@
-
- * License: GPLv2
- * Description: Adds sitemap.xml on request.
- * Documentation:
- */
-
-class XMLSitemap extends SimpleExtension {
- public function onPageRequest($event) {
- if($event->page_matches("sitemap.xml")) {
- $images = Image::find_images(0, 50, array());
- $this->do_xml($images);
- }
- }
-
- private function do_xml($images) {
- global $page;
- $page->set_mode("data");
- $page->set_type("application/xml");
-
- $data = "";
- foreach($images as $image) {
- $link = make_http(make_link("post/view/{$image->id}"));
- $posted = date("Y-m-d", $image->posted_timestamp);
-
- $data .= "
-
- $link
- $posted
- monthly
- 0.8
-
- ";
- }
-
- $base_href = make_http(make_link("post/list"));
-
- $xml = "<"."?xml version=\"1.0\" encoding=\"utf-8\"?".">
-
-
- $base_href
- 2009-01-01
- monthly
- 1
-
- $data
-
- ";
- $page->set_data($xml);
- }
-}
-?>
+
+ * License: GPLv2
+ * Description: Adds sitemap.xml on request.
+ * Documentation:
+ */
+
+class XMLSitemap extends SimpleExtension {
+ public function onPageRequest($event) {
+ if($event->page_matches("sitemap.xml")) {
+ $images = Image::find_images(0, 50, array());
+ $this->do_xml($images);
+ }
+ }
+
+ private function do_xml($images) {
+ global $page;
+ $page->set_mode("data");
+ $page->set_type("application/xml");
+
+ $data = "";
+ foreach($images as $image) {
+ $link = make_http(make_link("post/view/{$image->id}"));
+ $posted = date("Y-m-d", $image->posted_timestamp);
+
+ $data .= "
+
+ $link
+ $posted
+ monthly
+ 0.8
+
+ ";
+ }
+
+ $base_href = make_http(make_link("post/list"));
+
+ $xml = "<"."?xml version=\"1.0\" encoding=\"utf-8\"?".">
+
+
+ $base_href
+ 2009-01-01
+ monthly
+ 1
+
+ $data
+
+ ";
+ $page->set_data($xml);
+ }
+}
+?>
diff --git a/contrib/tag_history/main.php b/contrib/tag_history/main.php
index 2ce64339..6ebe9fe2 100644
--- a/contrib/tag_history/main.php
+++ b/contrib/tag_history/main.php
@@ -1,219 +1,219 @@
-
- * Description: Keep a record of tag changes
- */
-
-class Tag_History implements Extension {
- var $theme;
-
- public function receive_event(Event $event) {
- global $config, $database, $page, $user;
- if(is_null($this->theme)) $this->theme = get_theme_object($this);
-
- if(($event instanceof InitExtEvent)) {
- $config->set_default_int("history_limit", -1);
-
- // shimmie is being installed so call install to create the table.
- if($config->get_int("ext_tag_history_version") < 3) {
- $this->install();
- }
- }
-
- if(($event instanceof PageRequestEvent) && $event->page_matches("tag_history"))
- {
- if($event->get_arg(0) == "revert")
- {
- // this is a request to revert to a previous version of the tags
- if($config->get_bool("tag_edit_anon") || !$user->is_anonymous()) {
- $this->process_revert_request($_POST['revert']);
- }
- }
- else if($event->count_args() == 1)
- {
- // must be an attempt to view a tag history
- $image_id = int_escape($event->get_arg(0));
- $this->theme->display_history_page($page, $image_id, $this->get_tag_history_from_id($image_id));
- }
- else {
- $this->theme->display_global_page($page, $this->get_global_tag_history());
- }
- }
- if(($event instanceof DisplayingImageEvent))
- {
- // handle displaying a link on the view page
- $this->theme->display_history_link($page, $event->image->id);
- }
- if(($event instanceof ImageDeletionEvent))
- {
- // handle removing of history when an image is deleted
- $this->delete_all_tag_history($event->image->id);
- }
- if(($event instanceof SetupBuildingEvent)) {
- $sb = new SetupBlock("Tag History");
- $sb->add_label("Limit to ");
- $sb->add_int_option("history_limit");
- $sb->add_label(" entires per image");
- $sb->add_label(" (-1 for unlimited)");
- $event->panel->add_block($sb);
- }
- if(($event instanceof TagSetEvent)) {
- $this->add_tag_history($event->image, $event->tags);
- }
- }
-
- protected function install()
- {
- global $database;
- global $config;
-
- if($config->get_int("ext_tag_history_version") < 1) {
- $database->create_table("tag_histories", "
- id SCORE_AIPK,
- image_id INTEGER NOT NULL,
- user_id INTEGER NOT NULL,
- user_ip SCORE_INET NOT NULL,
- tags TEXT NOT NULL,
- date_set DATETIME NOT NULL,
- INDEX(image_id),
- FOREIGN KEY (image_id) REFERENCES images(id) ON DELETE CASCADE,
- FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
- ");
- $config->set_int("ext_tag_history_version", 3);
- }
-
- if($config->get_int("ext_tag_history_version") == 1) {
- $database->Execute("ALTER TABLE tag_histories ADD COLUMN user_id INTEGER NOT NULL");
- $database->Execute("ALTER TABLE tag_histories ADD COLUMN date_set DATETIME NOT NULL");
- $config->set_int("ext_tag_history_version", 2);
- }
-
- if($config->get_int("ext_tag_history_version") == 2) {
- $database->Execute("ALTER TABLE tag_histories ADD COLUMN user_ip CHAR(15) NOT NULL");
- $config->set_int("ext_tag_history_version", 3);
- }
- }
-
- /*
- * this function is called when a revert request is received
- */
- private function process_revert_request($revert_id)
- {
- global $page;
- // check for the nothing case
- if($revert_id=="nothing")
- {
- // tried to set it too the same thing so ignore it (might be a bot)
- // go back to the index page with you
- $page->set_mode("redirect");
- $page->set_redirect(make_link());
- return;
- }
-
- $revert_id = int_escape($revert_id);
-
- // lets get this revert id assuming it exists
- $result = $this->get_tag_history_from_revert($revert_id);
-
- if($result==null)
- {
- // there is no history entry with that id so either the image was deleted
- // while the user was viewing the history, someone is playing with form
- // variables or we have messed up in code somewhere.
- die("Error: No tag history with specified id was found.");
- }
-
- // lets get the values out of the result
- $stored_result_id = $result->fields['id'];
- $stored_image_id = $result->fields['image_id'];
- $stored_tags = $result->fields['tags'];
-
- // all should be ok so we can revert by firing the SetUserTags event.
- send_event(new TagSetEvent(Image::by_id($stored_image_id), $stored_tags));
-
- // all should be done now so redirect the user back to the image
- $page->set_mode("redirect");
- $page->set_redirect(make_link("post/view/$stored_image_id"));
- }
-
- public function get_tag_history_from_revert($revert_id)
- {
- global $database;
- $row = $database->execute("
- SELECT tag_histories.*, users.name
- FROM tag_histories
- JOIN users ON tag_histories.user_id = users.id
- WHERE tag_histories.id = ?", array($revert_id));
- return ($row ? $row : null);
- }
-
- public function get_tag_history_from_id($image_id)
- {
- global $database;
- $row = $database->get_all("
- SELECT tag_histories.*, users.name
- FROM tag_histories
- JOIN users ON tag_histories.user_id = users.id
- WHERE image_id = ?
- ORDER BY tag_histories.id DESC",
- array($image_id));
- return ($row ? $row : array());
- }
-
- public function get_global_tag_history()
- {
- global $database;
- $row = $database->get_all("
- SELECT tag_histories.*, users.name
- FROM tag_histories
- JOIN users ON tag_histories.user_id = users.id
- ORDER BY tag_histories.id DESC
- LIMIT 100");
- return ($row ? $row : array());
- }
-
- /*
- * this function is called when an image has been deleted
- */
- private function delete_all_tag_history($image_id)
- {
- global $database;
- $database->execute("DELETE FROM tag_histories WHERE image_id = ?", array($image_id));
- }
-
- /*
- * this function is called just before an images tag are changed
- */
- private function add_tag_history($image, $tags)
- {
- global $database;
- global $config;
- global $user;
-
- $new_tags = Tag::implode($tags);
- $old_tags = Tag::implode($image->get_tag_array());
- if($new_tags == $old_tags) return;
-
- // add a history entry
- $allowed = $config->get_int("history_limit");
- if($allowed == 0) return;
-
- $row = $database->execute("
- INSERT INTO tag_histories(image_id, tags, user_id, user_ip, date_set)
- VALUES (?, ?, ?, ?, now())",
- array($image->id, $new_tags, $user->id, $_SERVER['REMOTE_ADDR']));
-
- // if needed remove oldest one
- if($allowed == -1) return;
- $entries = $database->db->GetOne("SELECT COUNT(*) FROM tag_histories WHERE image_id = ?", array($image->id));
- if($entries > $allowed)
- {
- // TODO: Make these queries better
- $min_id = $database->db->GetOne("SELECT MIN(id) FROM tag_histories WHERE image_id = ?", array($image->id));
- $database->execute("DELETE FROM tag_histories WHERE id = ?", array($min_id));
- }
- }
-}
-add_event_listener(new Tag_History(), 40); // in before tags are actually set, so that "get current tags" works
-?>
+
+ * Description: Keep a record of tag changes
+ */
+
+class Tag_History implements Extension {
+ var $theme;
+
+ public function receive_event(Event $event) {
+ global $config, $database, $page, $user;
+ if(is_null($this->theme)) $this->theme = get_theme_object($this);
+
+ if(($event instanceof InitExtEvent)) {
+ $config->set_default_int("history_limit", -1);
+
+ // shimmie is being installed so call install to create the table.
+ if($config->get_int("ext_tag_history_version") < 3) {
+ $this->install();
+ }
+ }
+
+ if(($event instanceof PageRequestEvent) && $event->page_matches("tag_history"))
+ {
+ if($event->get_arg(0) == "revert")
+ {
+ // this is a request to revert to a previous version of the tags
+ if($config->get_bool("tag_edit_anon") || !$user->is_anonymous()) {
+ $this->process_revert_request($_POST['revert']);
+ }
+ }
+ else if($event->count_args() == 1)
+ {
+ // must be an attempt to view a tag history
+ $image_id = int_escape($event->get_arg(0));
+ $this->theme->display_history_page($page, $image_id, $this->get_tag_history_from_id($image_id));
+ }
+ else {
+ $this->theme->display_global_page($page, $this->get_global_tag_history());
+ }
+ }
+ if(($event instanceof DisplayingImageEvent))
+ {
+ // handle displaying a link on the view page
+ $this->theme->display_history_link($page, $event->image->id);
+ }
+ if(($event instanceof ImageDeletionEvent))
+ {
+ // handle removing of history when an image is deleted
+ $this->delete_all_tag_history($event->image->id);
+ }
+ if(($event instanceof SetupBuildingEvent)) {
+ $sb = new SetupBlock("Tag History");
+ $sb->add_label("Limit to ");
+ $sb->add_int_option("history_limit");
+ $sb->add_label(" entires per image");
+ $sb->add_label(" (-1 for unlimited)");
+ $event->panel->add_block($sb);
+ }
+ if(($event instanceof TagSetEvent)) {
+ $this->add_tag_history($event->image, $event->tags);
+ }
+ }
+
+ protected function install()
+ {
+ global $database;
+ global $config;
+
+ if($config->get_int("ext_tag_history_version") < 1) {
+ $database->create_table("tag_histories", "
+ id SCORE_AIPK,
+ image_id INTEGER NOT NULL,
+ user_id INTEGER NOT NULL,
+ user_ip SCORE_INET NOT NULL,
+ tags TEXT NOT NULL,
+ date_set DATETIME NOT NULL,
+ INDEX(image_id),
+ FOREIGN KEY (image_id) REFERENCES images(id) ON DELETE CASCADE,
+ FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
+ ");
+ $config->set_int("ext_tag_history_version", 3);
+ }
+
+ if($config->get_int("ext_tag_history_version") == 1) {
+ $database->Execute("ALTER TABLE tag_histories ADD COLUMN user_id INTEGER NOT NULL");
+ $database->Execute("ALTER TABLE tag_histories ADD COLUMN date_set DATETIME NOT NULL");
+ $config->set_int("ext_tag_history_version", 2);
+ }
+
+ if($config->get_int("ext_tag_history_version") == 2) {
+ $database->Execute("ALTER TABLE tag_histories ADD COLUMN user_ip CHAR(15) NOT NULL");
+ $config->set_int("ext_tag_history_version", 3);
+ }
+ }
+
+ /*
+ * this function is called when a revert request is received
+ */
+ private function process_revert_request($revert_id)
+ {
+ global $page;
+ // check for the nothing case
+ if($revert_id=="nothing")
+ {
+ // tried to set it too the same thing so ignore it (might be a bot)
+ // go back to the index page with you
+ $page->set_mode("redirect");
+ $page->set_redirect(make_link());
+ return;
+ }
+
+ $revert_id = int_escape($revert_id);
+
+ // lets get this revert id assuming it exists
+ $result = $this->get_tag_history_from_revert($revert_id);
+
+ if($result==null)
+ {
+ // there is no history entry with that id so either the image was deleted
+ // while the user was viewing the history, someone is playing with form
+ // variables or we have messed up in code somewhere.
+ die("Error: No tag history with specified id was found.");
+ }
+
+ // lets get the values out of the result
+ $stored_result_id = $result->fields['id'];
+ $stored_image_id = $result->fields['image_id'];
+ $stored_tags = $result->fields['tags'];
+
+ // all should be ok so we can revert by firing the SetUserTags event.
+ send_event(new TagSetEvent(Image::by_id($stored_image_id), $stored_tags));
+
+ // all should be done now so redirect the user back to the image
+ $page->set_mode("redirect");
+ $page->set_redirect(make_link("post/view/$stored_image_id"));
+ }
+
+ public function get_tag_history_from_revert($revert_id)
+ {
+ global $database;
+ $row = $database->execute("
+ SELECT tag_histories.*, users.name
+ FROM tag_histories
+ JOIN users ON tag_histories.user_id = users.id
+ WHERE tag_histories.id = ?", array($revert_id));
+ return ($row ? $row : null);
+ }
+
+ public function get_tag_history_from_id($image_id)
+ {
+ global $database;
+ $row = $database->get_all("
+ SELECT tag_histories.*, users.name
+ FROM tag_histories
+ JOIN users ON tag_histories.user_id = users.id
+ WHERE image_id = ?
+ ORDER BY tag_histories.id DESC",
+ array($image_id));
+ return ($row ? $row : array());
+ }
+
+ public function get_global_tag_history()
+ {
+ global $database;
+ $row = $database->get_all("
+ SELECT tag_histories.*, users.name
+ FROM tag_histories
+ JOIN users ON tag_histories.user_id = users.id
+ ORDER BY tag_histories.id DESC
+ LIMIT 100");
+ return ($row ? $row : array());
+ }
+
+ /*
+ * this function is called when an image has been deleted
+ */
+ private function delete_all_tag_history($image_id)
+ {
+ global $database;
+ $database->execute("DELETE FROM tag_histories WHERE image_id = ?", array($image_id));
+ }
+
+ /*
+ * this function is called just before an images tag are changed
+ */
+ private function add_tag_history($image, $tags)
+ {
+ global $database;
+ global $config;
+ global $user;
+
+ $new_tags = Tag::implode($tags);
+ $old_tags = Tag::implode($image->get_tag_array());
+ if($new_tags == $old_tags) return;
+
+ // add a history entry
+ $allowed = $config->get_int("history_limit");
+ if($allowed == 0) return;
+
+ $row = $database->execute("
+ INSERT INTO tag_histories(image_id, tags, user_id, user_ip, date_set)
+ VALUES (?, ?, ?, ?, now())",
+ array($image->id, $new_tags, $user->id, $_SERVER['REMOTE_ADDR']));
+
+ // if needed remove oldest one
+ if($allowed == -1) return;
+ $entries = $database->db->GetOne("SELECT COUNT(*) FROM tag_histories WHERE image_id = ?", array($image->id));
+ if($entries > $allowed)
+ {
+ // TODO: Make these queries better
+ $min_id = $database->db->GetOne("SELECT MIN(id) FROM tag_histories WHERE image_id = ?", array($image->id));
+ $database->execute("DELETE FROM tag_histories WHERE id = ?", array($min_id));
+ }
+ }
+}
+add_event_listener(new Tag_History(), 40); // in before tags are actually set, so that "get current tags" works
+?>
diff --git a/contrib/tips/main.php b/contrib/tips/main.php
index f16e9c1d..859072eb 100644
--- a/contrib/tips/main.php
+++ b/contrib/tips/main.php
@@ -1,175 +1,175 @@
-
- * License: GPLv2
- * Description: Show a random line of text in the subheader space
- * Documentation:
- * Formatting is done with HTML
- */
-
-class Tips extends SimpleExtension {
- public function onInitExt($event) {
- global $config, $database;
-
- if ($config->get_int("ext_tips_version") < 1){
- $database->create_table("tips", "
- id SCORE_AIPK,
- enable SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N,
- image TEXT NOT NULL,
- text TEXT NOT NULL,
- INDEX (id)
- ");
-
- $database->execute("
- INSERT INTO tips (enable, image, text)
- VALUES (?, ?, ?)",
- array("Y", "coins.png", "Do you like this extension? Please support us for developing new ones. Donate through paypal ."));
-
- $config->set_int("ext_tips_version", 1);
- log_info("tips", "extension installed");
- }
- }
-
- public function onPageRequest($event) {
- global $page, $user;
-
- $this->getTip();
-
- if($event->page_matches("tips")) {
- switch($event->get_arg(0)) {
- case "list":
- {
- if($user->is_admin()) {
- $this->manageTips();
- $this->getAll();
- }
- break;
- }
- case "new":
- {
- break;
- }
- case "save":
- {
- if($user->is_admin()) {
- $this->saveTip();
-
- $page->set_mode("redirect");
- $page->set_redirect(make_link("tips/list"));
- }
- break;
- }
- case "status":
- {
- if($user->is_admin()) {
- $tipID = int_escape($event->get_arg(1));
- $this->setStatus($tipID);
-
- $page->set_mode("redirect");
- $page->set_redirect(make_link("tips/list"));
- }
- break;
- }
- case "delete":
- {
- if($user->is_admin()) {
- $tipID = int_escape($event->get_arg(1));
- $this->deleteTip($tipID);
-
- $page->set_mode("redirect");
- $page->set_redirect(make_link("tips/list"));
- }
- break;
- }
- }
- }
- }
-
- public function onUserBlockBuilding($event) {
- global $user;
- if($user->is_admin()) {
- $event->add_link("Tips Editor", make_link("tips/list"));
- }
- }
-
- private function manageTips() {
- $data_href = get_base_href();
- $url = $data_href."/ext/tips/images/";
-
- $dirPath = dir('./ext/tips/images');
- $images = array();
- while(($file = $dirPath->read()) !== false) {
- if($file[0] != ".") {
- $images[] = trim($file);
- }
- }
- $dirPath->close();
- sort($images);
-
- $this->theme->manageTips($url, $images);
- }
-
- private function saveTip() {
- global $database;
-
- $enable = isset($_POST["enable"]) ? "Y" : "N";
- $image = html_escape($_POST["image"]);
- $text = $_POST["text"];
-
- $database->execute("
- INSERT INTO tips (enable, image, text)
- VALUES (?, ?, ?)",
- array($enable, $image, $text));
-
- }
-
- private function getTip() {
- global $database;
-
- $data_href = get_base_href();
- $url = $data_href."/ext/tips/images/";
-
- $tip = $database->get_row("SELECT * ".
- "FROM tips ".
- "WHERE enable = 'Y' ".
- "ORDER BY RAND() ".
- "LIMIT 1");
-
- if($tip) {
- $this->theme->showTip($url, $tip);
- }
- }
-
- private function getAll() {
- global $database;
-
- $data_href = get_base_href();
- $url = $data_href."/ext/tips/images/";
-
- $tips = $database->get_all("SELECT * FROM tips ORDER BY id ASC");
-
- $this->theme->showAll($url, $tips);
- }
-
- private function setStatus($tipID) {
- global $database;
-
- $tip = $database->get_row("SELECT * FROM tips WHERE id = ? ", array($tipID));
-
- if($tip['enable'] == "Y") {
- $enable = "N";
- } elseif($tip['enable'] == "N") {
- $enable = "Y";
- }
-
- $database->execute("UPDATE tips SET enable = ? WHERE id = ?", array ($enable, $tipID));
- }
-
- private function deleteTip($tipID) {
- global $database;
- $database->execute("DELETE FROM tips WHERE id = ?", array($tipID));
- }
-}
-?>
-
+
+ * License: GPLv2
+ * Description: Show a random line of text in the subheader space
+ * Documentation:
+ * Formatting is done with HTML
+ */
+
+class Tips extends SimpleExtension {
+ public function onInitExt($event) {
+ global $config, $database;
+
+ if ($config->get_int("ext_tips_version") < 1){
+ $database->create_table("tips", "
+ id SCORE_AIPK,
+ enable SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N,
+ image TEXT NOT NULL,
+ text TEXT NOT NULL,
+ INDEX (id)
+ ");
+
+ $database->execute("
+ INSERT INTO tips (enable, image, text)
+ VALUES (?, ?, ?)",
+ array("Y", "coins.png", "Do you like this extension? Please support us for developing new ones. Donate through paypal ."));
+
+ $config->set_int("ext_tips_version", 1);
+ log_info("tips", "extension installed");
+ }
+ }
+
+ public function onPageRequest($event) {
+ global $page, $user;
+
+ $this->getTip();
+
+ if($event->page_matches("tips")) {
+ switch($event->get_arg(0)) {
+ case "list":
+ {
+ if($user->is_admin()) {
+ $this->manageTips();
+ $this->getAll();
+ }
+ break;
+ }
+ case "new":
+ {
+ break;
+ }
+ case "save":
+ {
+ if($user->is_admin()) {
+ $this->saveTip();
+
+ $page->set_mode("redirect");
+ $page->set_redirect(make_link("tips/list"));
+ }
+ break;
+ }
+ case "status":
+ {
+ if($user->is_admin()) {
+ $tipID = int_escape($event->get_arg(1));
+ $this->setStatus($tipID);
+
+ $page->set_mode("redirect");
+ $page->set_redirect(make_link("tips/list"));
+ }
+ break;
+ }
+ case "delete":
+ {
+ if($user->is_admin()) {
+ $tipID = int_escape($event->get_arg(1));
+ $this->deleteTip($tipID);
+
+ $page->set_mode("redirect");
+ $page->set_redirect(make_link("tips/list"));
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ public function onUserBlockBuilding($event) {
+ global $user;
+ if($user->is_admin()) {
+ $event->add_link("Tips Editor", make_link("tips/list"));
+ }
+ }
+
+ private function manageTips() {
+ $data_href = get_base_href();
+ $url = $data_href."/ext/tips/images/";
+
+ $dirPath = dir('./ext/tips/images');
+ $images = array();
+ while(($file = $dirPath->read()) !== false) {
+ if($file[0] != ".") {
+ $images[] = trim($file);
+ }
+ }
+ $dirPath->close();
+ sort($images);
+
+ $this->theme->manageTips($url, $images);
+ }
+
+ private function saveTip() {
+ global $database;
+
+ $enable = isset($_POST["enable"]) ? "Y" : "N";
+ $image = html_escape($_POST["image"]);
+ $text = $_POST["text"];
+
+ $database->execute("
+ INSERT INTO tips (enable, image, text)
+ VALUES (?, ?, ?)",
+ array($enable, $image, $text));
+
+ }
+
+ private function getTip() {
+ global $database;
+
+ $data_href = get_base_href();
+ $url = $data_href."/ext/tips/images/";
+
+ $tip = $database->get_row("SELECT * ".
+ "FROM tips ".
+ "WHERE enable = 'Y' ".
+ "ORDER BY RAND() ".
+ "LIMIT 1");
+
+ if($tip) {
+ $this->theme->showTip($url, $tip);
+ }
+ }
+
+ private function getAll() {
+ global $database;
+
+ $data_href = get_base_href();
+ $url = $data_href."/ext/tips/images/";
+
+ $tips = $database->get_all("SELECT * FROM tips ORDER BY id ASC");
+
+ $this->theme->showAll($url, $tips);
+ }
+
+ private function setStatus($tipID) {
+ global $database;
+
+ $tip = $database->get_row("SELECT * FROM tips WHERE id = ? ", array($tipID));
+
+ if($tip['enable'] == "Y") {
+ $enable = "N";
+ } elseif($tip['enable'] == "N") {
+ $enable = "Y";
+ }
+
+ $database->execute("UPDATE tips SET enable = ? WHERE id = ?", array ($enable, $tipID));
+ }
+
+ private function deleteTip($tipID) {
+ global $database;
+ $database->execute("DELETE FROM tips WHERE id = ?", array($tipID));
+ }
+}
+?>
+
diff --git a/contrib/tips/theme.php b/contrib/tips/theme.php
index be5457cd..03b0865b 100644
--- a/contrib/tips/theme.php
+++ b/contrib/tips/theme.php
@@ -1,99 +1,99 @@
-- Select Image - ";
-
- foreach($images as $image){
- $select .= "".$image." \n";
- }
-
- $select .= "";
-
- $html = "
-
-";
-
- $page->set_title("Tips List");
- $page->set_heading("Tips List");
- $page->add_block(new NavBlock());
- $page->add_block(new Block("Add Tip", $html, "main", 10));
- }
-
- public function showTip($url, $tip) {
- global $page;
-
- $img = "";
- if(!empty($tip['image'])) {
- $img = " ";
- }
- $html = "".$img.$tip['text']."
";
- $page->add_block(new Block(null, $html, "subheading", 10));
- }
-
- public function showAll($url, $tips){
- global $user, $page;
-
- $html = "".
- "".
- "ID ".
- "Enabled ".
- "Image ".
- "Text ";
-
- if($user->is_admin()){
- $html .= "Action ";
- }
-
- $html .= " ";
-
- $n = 0;
- foreach ($tips as $tip)
- {
- $oe = ($n++ % 2 == 0) ? "even" : "odd";
-
- $tip_enable = ($tip['enable'] == "Y") ? "Yes" : "No";
- $set_link = "".$tip_enable." ";
-
- $html .= "".
- "".$tip['id']." ".
- "".$set_link." ".
- (
- empty($tip['image']) ?
- " " :
- " "
- ).
- "".$tip['text']." ";
-
- $del_link = "Delete ";
-
- if($user->is_admin()){
- $html .= "".$del_link." ";
- }
-
- $html .= " ";
- }
- $html .= "
";
-
- $page->add_block(new Block("All Tips", $html, "main", 20));
- }
-}
-?>
+- Select Image - ";
+
+ foreach($images as $image){
+ $select .= "".$image." \n";
+ }
+
+ $select .= "";
+
+ $html = "
+
+
+
+";
+
+ $page->set_title("Tips List");
+ $page->set_heading("Tips List");
+ $page->add_block(new NavBlock());
+ $page->add_block(new Block("Add Tip", $html, "main", 10));
+ }
+
+ public function showTip($url, $tip) {
+ global $page;
+
+ $img = "";
+ if(!empty($tip['image'])) {
+ $img = " ";
+ }
+ $html = "".$img.$tip['text']."
";
+ $page->add_block(new Block(null, $html, "subheading", 10));
+ }
+
+ public function showAll($url, $tips){
+ global $user, $page;
+
+ $html = "".
+ "".
+ "ID ".
+ "Enabled ".
+ "Image ".
+ "Text ";
+
+ if($user->is_admin()){
+ $html .= "Action ";
+ }
+
+ $html .= " ";
+
+ $n = 0;
+ foreach ($tips as $tip)
+ {
+ $oe = ($n++ % 2 == 0) ? "even" : "odd";
+
+ $tip_enable = ($tip['enable'] == "Y") ? "Yes" : "No";
+ $set_link = "".$tip_enable." ";
+
+ $html .= "".
+ "".$tip['id']." ".
+ "".$set_link." ".
+ (
+ empty($tip['image']) ?
+ " " :
+ " "
+ ).
+ "".$tip['text']." ";
+
+ $del_link = "Delete ";
+
+ if($user->is_admin()){
+ $html .= "".$del_link." ";
+ }
+
+ $html .= " ";
+ }
+ $html .= "
";
+
+ $page->add_block(new Block("All Tips", $html, "main", 20));
+ }
+}
+?>
diff --git a/lib/adodb/datadict/datadict-sapdb.inc.php b/lib/adodb/datadict/datadict-sapdb.inc.php
index 37de29ed..9b539efa 100644
--- a/lib/adodb/datadict/datadict-sapdb.inc.php
+++ b/lib/adodb/datadict/datadict-sapdb.inc.php
@@ -1,121 +1,121 @@
-type;
- $len = $fieldobj->max_length;
- }
- static $maxdb_type2adodb = array(
- 'VARCHAR' => 'C',
- 'CHARACTER' => 'C',
- 'LONG' => 'X', // no way to differ between 'X' and 'B' :-(
- 'DATE' => 'D',
- 'TIMESTAMP' => 'T',
- 'BOOLEAN' => 'L',
- 'INTEGER' => 'I4',
- 'SMALLINT' => 'I2',
- 'FLOAT' => 'F',
- 'FIXED' => 'N',
- );
- $type = isset($maxdb_type2adodb[$t]) ? $maxdb_type2adodb[$t] : 'C';
-
- // convert integer-types simulated with fixed back to integer
- if ($t == 'FIXED' && !$fieldobj->scale && ($len == 20 || $len == 3)) {
- $type = $len == 20 ? 'I8' : 'I1';
- }
- if ($fieldobj->auto_increment) $type = 'R';
-
- return $type;
- }
-
- // return string must begin with space
- function _CreateSuffix($fname,$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned)
- {
- $suffix = '';
- if ($funsigned) $suffix .= ' UNSIGNED';
- if ($fnotnull) $suffix .= ' NOT NULL';
- if ($fautoinc) $suffix .= ' DEFAULT SERIAL';
- elseif (strlen($fdefault)) $suffix .= " DEFAULT $fdefault";
- if ($fconstraint) $suffix .= ' '.$fconstraint;
- return $suffix;
- }
-
- function AddColumnSQL($tabname, $flds)
- {
- $tabname = $this->TableName ($tabname);
- $sql = array();
- list($lines,$pkey) = $this->_GenFields($flds);
- return array( 'ALTER TABLE ' . $tabname . ' ADD (' . implode(', ',$lines) . ')' );
- }
-
- function AlterColumnSQL($tabname, $flds)
- {
- $tabname = $this->TableName ($tabname);
- $sql = array();
- list($lines,$pkey) = $this->_GenFields($flds);
- return array( 'ALTER TABLE ' . $tabname . ' MODIFY (' . implode(', ',$lines) . ')' );
- }
-
- function DropColumnSQL($tabname, $flds)
- {
- $tabname = $this->TableName ($tabname);
- if (!is_array($flds)) $flds = explode(',',$flds);
- foreach($flds as $k => $v) {
- $flds[$k] = $this->NameQuote($v);
- }
- return array( 'ALTER TABLE ' . $tabname . ' DROP (' . implode(', ',$flds) . ')' );
- }
-}
-
+type;
+ $len = $fieldobj->max_length;
+ }
+ static $maxdb_type2adodb = array(
+ 'VARCHAR' => 'C',
+ 'CHARACTER' => 'C',
+ 'LONG' => 'X', // no way to differ between 'X' and 'B' :-(
+ 'DATE' => 'D',
+ 'TIMESTAMP' => 'T',
+ 'BOOLEAN' => 'L',
+ 'INTEGER' => 'I4',
+ 'SMALLINT' => 'I2',
+ 'FLOAT' => 'F',
+ 'FIXED' => 'N',
+ );
+ $type = isset($maxdb_type2adodb[$t]) ? $maxdb_type2adodb[$t] : 'C';
+
+ // convert integer-types simulated with fixed back to integer
+ if ($t == 'FIXED' && !$fieldobj->scale && ($len == 20 || $len == 3)) {
+ $type = $len == 20 ? 'I8' : 'I1';
+ }
+ if ($fieldobj->auto_increment) $type = 'R';
+
+ return $type;
+ }
+
+ // return string must begin with space
+ function _CreateSuffix($fname,$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned)
+ {
+ $suffix = '';
+ if ($funsigned) $suffix .= ' UNSIGNED';
+ if ($fnotnull) $suffix .= ' NOT NULL';
+ if ($fautoinc) $suffix .= ' DEFAULT SERIAL';
+ elseif (strlen($fdefault)) $suffix .= " DEFAULT $fdefault";
+ if ($fconstraint) $suffix .= ' '.$fconstraint;
+ return $suffix;
+ }
+
+ function AddColumnSQL($tabname, $flds)
+ {
+ $tabname = $this->TableName ($tabname);
+ $sql = array();
+ list($lines,$pkey) = $this->_GenFields($flds);
+ return array( 'ALTER TABLE ' . $tabname . ' ADD (' . implode(', ',$lines) . ')' );
+ }
+
+ function AlterColumnSQL($tabname, $flds)
+ {
+ $tabname = $this->TableName ($tabname);
+ $sql = array();
+ list($lines,$pkey) = $this->_GenFields($flds);
+ return array( 'ALTER TABLE ' . $tabname . ' MODIFY (' . implode(', ',$lines) . ')' );
+ }
+
+ function DropColumnSQL($tabname, $flds)
+ {
+ $tabname = $this->TableName ($tabname);
+ if (!is_array($flds)) $flds = explode(',',$flds);
+ foreach($flds as $k => $v) {
+ $flds[$k] = $this->NameQuote($v);
+ }
+ return array( 'ALTER TABLE ' . $tabname . ' DROP (' . implode(', ',$flds) . ')' );
+ }
+}
+
?>
\ No newline at end of file
diff --git a/lib/akismet.class.php b/lib/akismet.class.php
index 5c676f83..84fb2062 100644
--- a/lib/akismet.class.php
+++ b/lib/akismet.class.php
@@ -1,356 +1,356 @@
-Usage
- *
- * $comment = array(
- * 'author' => 'viagra-test-123',
- * 'email' => 'test@example.com',
- * 'website' => 'http://www.example.com/',
- * 'body' => 'This is a test comment',
- * 'permalink' => 'http://yourdomain.com/yourblogpost.url',
- * );
- *
- * $akismet = new Akismet('http://www.yourdomain.com/', 'YOUR_WORDPRESS_API_KEY', $comment);
- *
- * if($akismet->isError()) {
- * echo"Couldn't connected to Akismet server!";
- * } else {
- * if($akismet->isSpam()) {
- * echo"Spam detected";
- * } else {
- * echo"yay, no spam!";
- * }
- * }
- *
- *
- * @author Bret Kuhns {@link www.miphp.net}
- * @link http://www.miphp.net/blog/view/php4_akismet_class/
- * @version 0.3.3
- * @license http://www.opensource.org/licenses/mit-license.php MIT License
- */
-
-
-
-// Error constants
-define("AKISMET_SERVER_NOT_FOUND", 0);
-define("AKISMET_RESPONSE_FAILED", 1);
-define("AKISMET_INVALID_KEY", 2);
-
-
-
-// Base class to assist in error handling between Akismet classes
-class AkismetObject {
- var $errors = array();
-
-
- /**
- * Add a new error to the errors array in the object
- *
- * @param String $name A name (array key) for the error
- * @param String $string The error message
- * @return void
- */
- // Set an error in the object
- function setError($name, $message) {
- $this->errors[$name] = $message;
- }
-
-
- /**
- * Return a specific error message from the errors array
- *
- * @param String $name The name of the error you want
- * @return mixed Returns a String if the error exists, a false boolean if it does not exist
- */
- function getError($name) {
- if($this->isError($name)) {
- return $this->errors[$name];
- } else {
- return false;
- }
- }
-
-
- /**
- * Return all errors in the object
- *
- * @return String[]
- */
- function getErrors() {
- return (array)$this->errors;
- }
-
-
- /**
- * Check if a certain error exists
- *
- * @param String $name The name of the error you want
- * @return boolean
- */
- function isError($name) {
- return isset($this->errors[$name]);
- }
-
-
- /**
- * Check if any errors exist
- *
- * @return boolean
- */
- function errorsExist() {
- return (count($this->errors) > 0);
- }
-
-
-}
-
-
-
-
-
-// Used by the Akismet class to communicate with the Akismet service
-class AkismetHttpClient extends AkismetObject {
- var $akismetVersion = '1.1';
- var $con;
- var $host;
- var $port;
- var $apiKey;
- var $blogUrl;
- var $errors = array();
-
-
- // Constructor
- function AkismetHttpClient($host, $blogUrl, $apiKey, $port = 80) {
- $this->host = $host;
- $this->port = $port;
- $this->blogUrl = $blogUrl;
- $this->apiKey = $apiKey;
- }
-
-
- // Use the connection active in $con to get a response from the server and return that response
- function getResponse($request, $path, $type = "post", $responseLength = 1160) {
- $this->_connect();
-
- if($this->con && !$this->isError(AKISMET_SERVER_NOT_FOUND)) {
- $request =
- strToUpper($type)." /{$this->akismetVersion}/$path HTTP/1.1\r\n" .
- "Host: ".((!empty($this->apiKey)) ? $this->apiKey."." : null)."{$this->host}\r\n" .
- "Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n" .
- "Content-Length: ".strlen($request)."\r\n" .
- "User-Agent: Akismet PHP4 Class\r\n" .
- "\r\n" .
- $request
- ;
- $response = "";
-
- @fwrite($this->con, $request);
-
- while(!feof($this->con)) {
- $response .= @fgets($this->con, $responseLength);
- }
-
- $response = explode("\r\n\r\n", $response, 2);
- return $response[1];
- } else {
- $this->setError(AKISMET_RESPONSE_FAILED, "The response could not be retrieved.");
- }
-
- $this->_disconnect();
- }
-
-
- // Connect to the Akismet server and store that connection in the instance variable $con
- function _connect() {
- if(!($this->con = @fsockopen($this->host, $this->port))) {
- $this->setError(AKISMET_SERVER_NOT_FOUND, "Could not connect to akismet server.");
- }
- }
-
-
- // Close the connection to the Akismet server
- function _disconnect() {
- @fclose($this->con);
- }
-
-
-}
-
-
-
-
-
-// The controlling class. This is the ONLY class the user should instantiate in
-// order to use the Akismet service!
-class Akismet extends AkismetObject {
- var $apiPort = 80;
- var $akismetServer = 'rest.akismet.com';
- var $akismetVersion = '1.1';
- var $http;
-
- var $ignore = array(
- 'HTTP_COOKIE',
- 'HTTP_X_FORWARDED_FOR',
- 'HTTP_X_FORWARDED_HOST',
- 'HTTP_MAX_FORWARDS',
- 'HTTP_X_FORWARDED_SERVER',
- 'REDIRECT_STATUS',
- 'SERVER_PORT',
- 'PATH',
- 'DOCUMENT_ROOT',
- 'SERVER_ADMIN',
- 'QUERY_STRING',
- 'PHP_SELF'
- );
-
- var $blogUrl = "";
- var $apiKey = "";
- var $comment = array();
-
-
- /**
- * Constructor
- *
- * Set instance variables, connect to Akismet, and check API key
- *
- * @param String $blogUrl The URL to your own blog
- * @param String $apiKey Your wordpress API key
- * @param String[] $comment A formatted comment array to be examined by the Akismet service
- */
- function Akismet($blogUrl, $apiKey, $comment) {
- $this->blogUrl = $blogUrl;
- $this->apiKey = $apiKey;
-
- // Populate the comment array with information needed by Akismet
- $this->comment = $comment;
- $this->_formatCommentArray();
-
- if(!isset($this->comment['user_ip'])) {
- $this->comment['user_ip'] = ($_SERVER['REMOTE_ADDR'] != getenv('SERVER_ADDR')) ? $_SERVER['REMOTE_ADDR'] : getenv('HTTP_X_FORWARDED_FOR');
- }
- if(!isset($this->comment['user_agent'])) {
- $this->comment['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
- }
- if(!isset($this->comment['referrer'])) {
- $this->comment['referrer'] = $_SERVER['HTTP_REFERER'];
- }
- $this->comment['blog'] = $blogUrl;
-
- // Connect to the Akismet server and populate errors if they exist
- $this->http = new AkismetHttpClient($this->akismetServer, $blogUrl, $apiKey);
- if($this->http->errorsExist()) {
- $this->errors = array_merge($this->errors, $this->http->getErrors());
- }
-
- // Check if the API key is valid
- if(!$this->_isValidApiKey($apiKey)) {
- $this->setError(AKISMET_INVALID_KEY, "Your Akismet API key is not valid.");
- }
- }
-
-
- /**
- * Query the Akismet and determine if the comment is spam or not
- *
- * @return boolean
- */
- function isSpam() {
- $response = $this->http->getResponse($this->_getQueryString(), 'comment-check');
-
- return ($response == "true");
- }
-
-
- /**
- * Submit this comment as an unchecked spam to the Akismet server
- *
- * @return void
- */
- function submitSpam() {
- $this->http->getResponse($this->_getQueryString(), 'submit-spam');
- }
-
-
- /**
- * Submit a false-positive comment as "ham" to the Akismet server
- *
- * @return void
- */
- function submitHam() {
- $this->http->getResponse($this->_getQueryString(), 'submit-ham');
- }
-
-
- /**
- * Check with the Akismet server to determine if the API key is valid
- *
- * @access Protected
- * @param String $key The Wordpress API key passed from the constructor argument
- * @return boolean
- */
- function _isValidApiKey($key) {
- $keyCheck = $this->http->getResponse("key=".$this->apiKey."&blog=".$this->blogUrl, 'verify-key');
-
- return ($keyCheck == "valid");
- }
-
-
- /**
- * Format the comment array in accordance to the Akismet API
- *
- * @access Protected
- * @return void
- */
- function _formatCommentArray() {
- $format = array(
- 'type' => 'comment_type',
- 'author' => 'comment_author',
- 'email' => 'comment_author_email',
- 'website' => 'comment_author_url',
- 'body' => 'comment_content'
- );
-
- foreach($format as $short => $long) {
- if(isset($this->comment[$short])) {
- $this->comment[$long] = $this->comment[$short];
- unset($this->comment[$short]);
- }
- }
- }
-
-
- /**
- * Build a query string for use with HTTP requests
- *
- * @access Protected
- * @return String
- */
- function _getQueryString() {
- foreach($_SERVER as $key => $value) {
- if(!in_array($key, $this->ignore)) {
- if($key == 'REMOTE_ADDR') {
- $this->comment[$key] = $this->comment['user_ip'];
- } else {
- $this->comment[$key] = $value;
- }
- }
- }
-
- $query_string = '';
-
- foreach($this->comment as $key => $data) {
- if(is_string($data)) {
- $query_string .= $key . '=' . urlencode(stripslashes($data)) . '&';
- }
- }
-
- return $query_string;
- }
-
-
-}
-?>
+Usage
+ *
+ * $comment = array(
+ * 'author' => 'viagra-test-123',
+ * 'email' => 'test@example.com',
+ * 'website' => 'http://www.example.com/',
+ * 'body' => 'This is a test comment',
+ * 'permalink' => 'http://yourdomain.com/yourblogpost.url',
+ * );
+ *
+ * $akismet = new Akismet('http://www.yourdomain.com/', 'YOUR_WORDPRESS_API_KEY', $comment);
+ *
+ * if($akismet->isError()) {
+ * echo"Couldn't connected to Akismet server!";
+ * } else {
+ * if($akismet->isSpam()) {
+ * echo"Spam detected";
+ * } else {
+ * echo"yay, no spam!";
+ * }
+ * }
+ *
+ *
+ * @author Bret Kuhns {@link www.miphp.net}
+ * @link http://www.miphp.net/blog/view/php4_akismet_class/
+ * @version 0.3.3
+ * @license http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+
+
+
+// Error constants
+define("AKISMET_SERVER_NOT_FOUND", 0);
+define("AKISMET_RESPONSE_FAILED", 1);
+define("AKISMET_INVALID_KEY", 2);
+
+
+
+// Base class to assist in error handling between Akismet classes
+class AkismetObject {
+ var $errors = array();
+
+
+ /**
+ * Add a new error to the errors array in the object
+ *
+ * @param String $name A name (array key) for the error
+ * @param String $string The error message
+ * @return void
+ */
+ // Set an error in the object
+ function setError($name, $message) {
+ $this->errors[$name] = $message;
+ }
+
+
+ /**
+ * Return a specific error message from the errors array
+ *
+ * @param String $name The name of the error you want
+ * @return mixed Returns a String if the error exists, a false boolean if it does not exist
+ */
+ function getError($name) {
+ if($this->isError($name)) {
+ return $this->errors[$name];
+ } else {
+ return false;
+ }
+ }
+
+
+ /**
+ * Return all errors in the object
+ *
+ * @return String[]
+ */
+ function getErrors() {
+ return (array)$this->errors;
+ }
+
+
+ /**
+ * Check if a certain error exists
+ *
+ * @param String $name The name of the error you want
+ * @return boolean
+ */
+ function isError($name) {
+ return isset($this->errors[$name]);
+ }
+
+
+ /**
+ * Check if any errors exist
+ *
+ * @return boolean
+ */
+ function errorsExist() {
+ return (count($this->errors) > 0);
+ }
+
+
+}
+
+
+
+
+
+// Used by the Akismet class to communicate with the Akismet service
+class AkismetHttpClient extends AkismetObject {
+ var $akismetVersion = '1.1';
+ var $con;
+ var $host;
+ var $port;
+ var $apiKey;
+ var $blogUrl;
+ var $errors = array();
+
+
+ // Constructor
+ function AkismetHttpClient($host, $blogUrl, $apiKey, $port = 80) {
+ $this->host = $host;
+ $this->port = $port;
+ $this->blogUrl = $blogUrl;
+ $this->apiKey = $apiKey;
+ }
+
+
+ // Use the connection active in $con to get a response from the server and return that response
+ function getResponse($request, $path, $type = "post", $responseLength = 1160) {
+ $this->_connect();
+
+ if($this->con && !$this->isError(AKISMET_SERVER_NOT_FOUND)) {
+ $request =
+ strToUpper($type)." /{$this->akismetVersion}/$path HTTP/1.1\r\n" .
+ "Host: ".((!empty($this->apiKey)) ? $this->apiKey."." : null)."{$this->host}\r\n" .
+ "Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n" .
+ "Content-Length: ".strlen($request)."\r\n" .
+ "User-Agent: Akismet PHP4 Class\r\n" .
+ "\r\n" .
+ $request
+ ;
+ $response = "";
+
+ @fwrite($this->con, $request);
+
+ while(!feof($this->con)) {
+ $response .= @fgets($this->con, $responseLength);
+ }
+
+ $response = explode("\r\n\r\n", $response, 2);
+ return $response[1];
+ } else {
+ $this->setError(AKISMET_RESPONSE_FAILED, "The response could not be retrieved.");
+ }
+
+ $this->_disconnect();
+ }
+
+
+ // Connect to the Akismet server and store that connection in the instance variable $con
+ function _connect() {
+ if(!($this->con = @fsockopen($this->host, $this->port))) {
+ $this->setError(AKISMET_SERVER_NOT_FOUND, "Could not connect to akismet server.");
+ }
+ }
+
+
+ // Close the connection to the Akismet server
+ function _disconnect() {
+ @fclose($this->con);
+ }
+
+
+}
+
+
+
+
+
+// The controlling class. This is the ONLY class the user should instantiate in
+// order to use the Akismet service!
+class Akismet extends AkismetObject {
+ var $apiPort = 80;
+ var $akismetServer = 'rest.akismet.com';
+ var $akismetVersion = '1.1';
+ var $http;
+
+ var $ignore = array(
+ 'HTTP_COOKIE',
+ 'HTTP_X_FORWARDED_FOR',
+ 'HTTP_X_FORWARDED_HOST',
+ 'HTTP_MAX_FORWARDS',
+ 'HTTP_X_FORWARDED_SERVER',
+ 'REDIRECT_STATUS',
+ 'SERVER_PORT',
+ 'PATH',
+ 'DOCUMENT_ROOT',
+ 'SERVER_ADMIN',
+ 'QUERY_STRING',
+ 'PHP_SELF'
+ );
+
+ var $blogUrl = "";
+ var $apiKey = "";
+ var $comment = array();
+
+
+ /**
+ * Constructor
+ *
+ * Set instance variables, connect to Akismet, and check API key
+ *
+ * @param String $blogUrl The URL to your own blog
+ * @param String $apiKey Your wordpress API key
+ * @param String[] $comment A formatted comment array to be examined by the Akismet service
+ */
+ function Akismet($blogUrl, $apiKey, $comment) {
+ $this->blogUrl = $blogUrl;
+ $this->apiKey = $apiKey;
+
+ // Populate the comment array with information needed by Akismet
+ $this->comment = $comment;
+ $this->_formatCommentArray();
+
+ if(!isset($this->comment['user_ip'])) {
+ $this->comment['user_ip'] = ($_SERVER['REMOTE_ADDR'] != getenv('SERVER_ADDR')) ? $_SERVER['REMOTE_ADDR'] : getenv('HTTP_X_FORWARDED_FOR');
+ }
+ if(!isset($this->comment['user_agent'])) {
+ $this->comment['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
+ }
+ if(!isset($this->comment['referrer'])) {
+ $this->comment['referrer'] = $_SERVER['HTTP_REFERER'];
+ }
+ $this->comment['blog'] = $blogUrl;
+
+ // Connect to the Akismet server and populate errors if they exist
+ $this->http = new AkismetHttpClient($this->akismetServer, $blogUrl, $apiKey);
+ if($this->http->errorsExist()) {
+ $this->errors = array_merge($this->errors, $this->http->getErrors());
+ }
+
+ // Check if the API key is valid
+ if(!$this->_isValidApiKey($apiKey)) {
+ $this->setError(AKISMET_INVALID_KEY, "Your Akismet API key is not valid.");
+ }
+ }
+
+
+ /**
+ * Query the Akismet and determine if the comment is spam or not
+ *
+ * @return boolean
+ */
+ function isSpam() {
+ $response = $this->http->getResponse($this->_getQueryString(), 'comment-check');
+
+ return ($response == "true");
+ }
+
+
+ /**
+ * Submit this comment as an unchecked spam to the Akismet server
+ *
+ * @return void
+ */
+ function submitSpam() {
+ $this->http->getResponse($this->_getQueryString(), 'submit-spam');
+ }
+
+
+ /**
+ * Submit a false-positive comment as "ham" to the Akismet server
+ *
+ * @return void
+ */
+ function submitHam() {
+ $this->http->getResponse($this->_getQueryString(), 'submit-ham');
+ }
+
+
+ /**
+ * Check with the Akismet server to determine if the API key is valid
+ *
+ * @access Protected
+ * @param String $key The Wordpress API key passed from the constructor argument
+ * @return boolean
+ */
+ function _isValidApiKey($key) {
+ $keyCheck = $this->http->getResponse("key=".$this->apiKey."&blog=".$this->blogUrl, 'verify-key');
+
+ return ($keyCheck == "valid");
+ }
+
+
+ /**
+ * Format the comment array in accordance to the Akismet API
+ *
+ * @access Protected
+ * @return void
+ */
+ function _formatCommentArray() {
+ $format = array(
+ 'type' => 'comment_type',
+ 'author' => 'comment_author',
+ 'email' => 'comment_author_email',
+ 'website' => 'comment_author_url',
+ 'body' => 'comment_content'
+ );
+
+ foreach($format as $short => $long) {
+ if(isset($this->comment[$short])) {
+ $this->comment[$long] = $this->comment[$short];
+ unset($this->comment[$short]);
+ }
+ }
+ }
+
+
+ /**
+ * Build a query string for use with HTTP requests
+ *
+ * @access Protected
+ * @return String
+ */
+ function _getQueryString() {
+ foreach($_SERVER as $key => $value) {
+ if(!in_array($key, $this->ignore)) {
+ if($key == 'REMOTE_ADDR') {
+ $this->comment[$key] = $this->comment['user_ip'];
+ } else {
+ $this->comment[$key] = $value;
+ }
+ }
+ }
+
+ $query_string = '';
+
+ foreach($this->comment as $key => $data) {
+ if(is_string($data)) {
+ $query_string .= $key . '=' . urlencode(stripslashes($data)) . '&';
+ }
+ }
+
+ return $query_string;
+ }
+
+
+}
+?>
diff --git a/themes/danbooru/layout.class.php b/themes/danbooru/layout.class.php
index e76164c5..41801a9c 100644
--- a/themes/danbooru/layout.class.php
+++ b/themes/danbooru/layout.class.php
@@ -1,218 +1,218 @@
-
-* Link: http://trac.shishnet.org/shimmie2/
-* License: GPLv2
-* Description: This is a simple theme changing the css to make shimme
-* look more like danbooru as well as adding a custom links
-* bar and title to the top of every page.
-*/
-//Small changes added by zshall
-//Changed CSS and layout to make shimmie look even more like danbooru
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-Danbooru Theme - Notes (Bzchan)
-
-Files: default.php, sidebar.js, style.css
-
-How to use a theme
-- Copy the danbooru folder with all its contained files into the "themes"
- directory in your shimmie installation.
-- Log into your shimmie and change the Theme in the Board Config to your
- desired theme.
-
-Changes in this theme include
-- Adding and editing various elements in the style.css file.
-- $site_name and $front_name retreival from config added.
-- $custom_link and $title_link preparation just before html is outputed.
-- Altered outputed html to include the custom links and removed heading
- from being displayed (subheading is still displayed)
-- Note that only the sidebar has been left aligned. Could not properly
- left align the main block because blocks without headers currently do
- not have ids on there div elements. (this was a problem because
- paginator block must be centered and everything else left aligned)
-
-Tips
-- You can change custom links to point to whatever pages you want as well as adding
- more custom links.
-- The main title link points to the Front Page set in your Board Config options.
-- The text of the main title is the Title set in your Board Config options.
-- Themes make no changes to your database or main code files so you can switch
- back and forward to other themes all you like.
-
-* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-class Layout {
- public function display_page($page) {
- global $config;
-
- $theme_name = $config->get_string('theme');
- $base_href = $config->get_string('base_href');
- $data_href = get_base_href();
- $contact_link = $config->get_string('contact_link');
- $version = "Shimmie-".VERSION;
-
-
- $header_html = "";
- foreach($page->headers as $line) {
- $header_html .= "\t\t$line\n";
- }
-
- $left_block_html = "";
- $user_block_html = "";
- $main_block_html = "";
-
- foreach($page->blocks as $block) {
- switch($block->section) {
- case "left":
- $left_block_html .= $this->block_to_html($block, true);
- break;
- case "user":
- $user_block_html .= $block->body; // $this->block_to_html($block, true);
- break;
- case "main":
- if($block->header == "Images") {
- $block->header = " ";
- }
- $main_block_html .= $this->block_to_html($block, false);
- break;
- default:
- print "error: {$block->header} using an unknown section ({$block->section})";
- break;
- }
- }
-
- $debug = get_debug_info();
-
- $contact = empty($contact_link) ? "" : "Contact ";
-
- if(empty($this->subheading)) {
- $subheading = "";
- }
- else {
- $subheading = "
{$this->subheading}
";
- }
-
- $site_name = $config->get_string('title'); // bzchan: change from normal default to get title for top of page
- $main_page = $config->get_string('main_page'); // bzchan: change from normal default to get main page for top of page
-
- // bzchan: CUSTOM LINKS are prepared here, change these to whatever you like
- $custom_links = "";
- $custom_links .= "My Account ";
- $custom_links .= "Posts ";
- $custom_links .= "Comments ";
- $custom_links .= "Tags ";
- $custom_links .= "Upload ";
- $custom_links .= "Wiki ";
- $custom_links .= "More » ";
-
- $custom_sublinks = "";
- // hack
- global $user;
- $username = url_escape($user->name);
- // hack
- $qp = _get_query_parts();
- // php sucks
- switch($qp[0]) {
- default:
- $custom_sublinks .= $user_block_html;
- break;
- case "post":
- case "comment":
- case "upload":
- $custom_sublinks .= "All ";
- $custom_sublinks .= "My Favorites ";
- $custom_sublinks .= "Help ";
- break;
- case "wiki":
- $custom_sublinks .= "Index ";
- $custom_sublinks .= "Rules ";
- $custom_sublinks .= "Help ";
- break;
- case "tags":
- $custom_sublinks .= "Map ";
- $custom_sublinks .= "Alphabetic ";
- $custom_sublinks .= "Popularity ";
- $custom_sublinks .= "Categories ";
- $custom_sublinks .= "Aliases ";
- $custom_sublinks .= "Help ";
- break;
- }
-
- // bzchan: failed attempt to add heading after title_link (failure was it looked bad)
- //if($this->heading==$site_name)$this->heading = '';
- //$title_link = "";
-
- // bzchan: prepare main title link
- $title_link = "";
-
- if($page->left_enabled) {
- $left = "$left_block_html
";
- $withleft = "withleft";
- }
- else {
- $left = "";
- $withleft = "noleft";
- }
-
- print <<
-
-
- {$page->title}
-
-
-$header_html
-
-
-
-
-
-
- $subheading
-
- $left
- $main_block_html
-
-
-
-
-EOD;
- }
-
- function block_to_html($block, $hidable=false) {
- $h = $block->header;
- $s = $block->section;
- $b = $block->body;
- $html = "";
- if($hidable) {
- $i = str_replace(' ', '_', $h.$s);
- if(!is_null($h)) $html .= "\n$h \n";
- if(!is_null($b)) $html .= "$b
\n";
- }
- else {
- $i = str_replace(' ', '_', $h.$s);
- if(!is_null($h)) $html .= "\n$h \n";
- if(!is_null($b)) $html .= "$b
\n";
- }
- return $html;
- }
-}
-?>
+
+* Link: http://trac.shishnet.org/shimmie2/
+* License: GPLv2
+* Description: This is a simple theme changing the css to make shimme
+* look more like danbooru as well as adding a custom links
+* bar and title to the top of every page.
+*/
+//Small changes added by zshall
+//Changed CSS and layout to make shimmie look even more like danbooru
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+Danbooru Theme - Notes (Bzchan)
+
+Files: default.php, sidebar.js, style.css
+
+How to use a theme
+- Copy the danbooru folder with all its contained files into the "themes"
+ directory in your shimmie installation.
+- Log into your shimmie and change the Theme in the Board Config to your
+ desired theme.
+
+Changes in this theme include
+- Adding and editing various elements in the style.css file.
+- $site_name and $front_name retreival from config added.
+- $custom_link and $title_link preparation just before html is outputed.
+- Altered outputed html to include the custom links and removed heading
+ from being displayed (subheading is still displayed)
+- Note that only the sidebar has been left aligned. Could not properly
+ left align the main block because blocks without headers currently do
+ not have ids on there div elements. (this was a problem because
+ paginator block must be centered and everything else left aligned)
+
+Tips
+- You can change custom links to point to whatever pages you want as well as adding
+ more custom links.
+- The main title link points to the Front Page set in your Board Config options.
+- The text of the main title is the Title set in your Board Config options.
+- Themes make no changes to your database or main code files so you can switch
+ back and forward to other themes all you like.
+
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+class Layout {
+ public function display_page($page) {
+ global $config;
+
+ $theme_name = $config->get_string('theme');
+ $base_href = $config->get_string('base_href');
+ $data_href = get_base_href();
+ $contact_link = $config->get_string('contact_link');
+ $version = "Shimmie-".VERSION;
+
+
+ $header_html = "";
+ foreach($page->headers as $line) {
+ $header_html .= "\t\t$line\n";
+ }
+
+ $left_block_html = "";
+ $user_block_html = "";
+ $main_block_html = "";
+
+ foreach($page->blocks as $block) {
+ switch($block->section) {
+ case "left":
+ $left_block_html .= $this->block_to_html($block, true);
+ break;
+ case "user":
+ $user_block_html .= $block->body; // $this->block_to_html($block, true);
+ break;
+ case "main":
+ if($block->header == "Images") {
+ $block->header = " ";
+ }
+ $main_block_html .= $this->block_to_html($block, false);
+ break;
+ default:
+ print "error: {$block->header} using an unknown section ({$block->section})";
+ break;
+ }
+ }
+
+ $debug = get_debug_info();
+
+ $contact = empty($contact_link) ? "" : "Contact ";
+
+ if(empty($this->subheading)) {
+ $subheading = "";
+ }
+ else {
+ $subheading = "
{$this->subheading}
";
+ }
+
+ $site_name = $config->get_string('title'); // bzchan: change from normal default to get title for top of page
+ $main_page = $config->get_string('main_page'); // bzchan: change from normal default to get main page for top of page
+
+ // bzchan: CUSTOM LINKS are prepared here, change these to whatever you like
+ $custom_links = "";
+ $custom_links .= "My Account ";
+ $custom_links .= "Posts ";
+ $custom_links .= "Comments ";
+ $custom_links .= "Tags ";
+ $custom_links .= "Upload ";
+ $custom_links .= "Wiki ";
+ $custom_links .= "More » ";
+
+ $custom_sublinks = "";
+ // hack
+ global $user;
+ $username = url_escape($user->name);
+ // hack
+ $qp = _get_query_parts();
+ // php sucks
+ switch($qp[0]) {
+ default:
+ $custom_sublinks .= $user_block_html;
+ break;
+ case "post":
+ case "comment":
+ case "upload":
+ $custom_sublinks .= "All ";
+ $custom_sublinks .= "My Favorites ";
+ $custom_sublinks .= "Help ";
+ break;
+ case "wiki":
+ $custom_sublinks .= "Index ";
+ $custom_sublinks .= "Rules ";
+ $custom_sublinks .= "Help ";
+ break;
+ case "tags":
+ $custom_sublinks .= "Map ";
+ $custom_sublinks .= "Alphabetic ";
+ $custom_sublinks .= "Popularity ";
+ $custom_sublinks .= "Categories ";
+ $custom_sublinks .= "Aliases ";
+ $custom_sublinks .= "Help ";
+ break;
+ }
+
+ // bzchan: failed attempt to add heading after title_link (failure was it looked bad)
+ //if($this->heading==$site_name)$this->heading = '';
+ //$title_link = "";
+
+ // bzchan: prepare main title link
+ $title_link = "";
+
+ if($page->left_enabled) {
+ $left = "$left_block_html
";
+ $withleft = "withleft";
+ }
+ else {
+ $left = "";
+ $withleft = "noleft";
+ }
+
+ print <<
+
+
+ {$page->title}
+
+
+$header_html
+
+
+
+
+
+
+ $subheading
+
+ $left
+ $main_block_html
+
+
+
+
+EOD;
+ }
+
+ function block_to_html($block, $hidable=false) {
+ $h = $block->header;
+ $s = $block->section;
+ $b = $block->body;
+ $html = "";
+ if($hidable) {
+ $i = str_replace(' ', '_', $h.$s);
+ if(!is_null($h)) $html .= "\n$h \n";
+ if(!is_null($b)) $html .= "$b
\n";
+ }
+ else {
+ $i = str_replace(' ', '_', $h.$s);
+ if(!is_null($h)) $html .= "\n$h \n";
+ if(!is_null($b)) $html .= "$b
\n";
+ }
+ return $html;
+ }
+}
+?>