dos2unix
This commit is contained in:
parent
7c946db89f
commit
e0584f6e3e
@ -1,43 +1,43 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
class FavoritesTheme extends Themelet {
|
class FavoritesTheme extends Themelet {
|
||||||
public function get_voter_html(Image $image, $is_favorited) {
|
public function get_voter_html(Image $image, $is_favorited) {
|
||||||
global $page, $user;
|
global $page, $user;
|
||||||
|
|
||||||
$i_image_id = int_escape($image->id);
|
$i_image_id = int_escape($image->id);
|
||||||
if(!$is_favorited) {
|
if(!$is_favorited) {
|
||||||
$html = "<form action='".make_link("change_favorite")."' method='POST'>
|
$html = "<form action='".make_link("change_favorite")."' method='POST'>
|
||||||
<input type='hidden' name='image_id' value='$i_image_id'>
|
<input type='hidden' name='image_id' value='$i_image_id'>
|
||||||
<input type='hidden' name='favorite_action' value='set'>
|
<input type='hidden' name='favorite_action' value='set'>
|
||||||
<input type='submit' value='Favorite'>
|
<input type='submit' value='Favorite'>
|
||||||
</form>
|
</form>
|
||||||
";
|
";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$html = "<form action='".make_link("change_favorite")."' method='POST'>
|
$html = "<form action='".make_link("change_favorite")."' method='POST'>
|
||||||
<input type='hidden' name='image_id' value='$i_image_id'>
|
<input type='hidden' name='image_id' value='$i_image_id'>
|
||||||
<input type='hidden' name='favorite_action' value='unset'>
|
<input type='hidden' name='favorite_action' value='unset'>
|
||||||
<input type='submit' value='Un-Favorite'>
|
<input type='submit' value='Un-Favorite'>
|
||||||
</form>
|
</form>
|
||||||
";
|
";
|
||||||
}
|
}
|
||||||
|
|
||||||
return $html;
|
return $html;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function display_people($username_array) {
|
public function display_people($username_array) {
|
||||||
global $page;
|
global $page;
|
||||||
|
|
||||||
$i_favorites = count($username_array);
|
$i_favorites = count($username_array);
|
||||||
$html = "$i_favorites people:";
|
$html = "$i_favorites people:";
|
||||||
|
|
||||||
foreach($username_array as $row) {
|
foreach($username_array as $row) {
|
||||||
$username = html_escape($row['name']);
|
$username = html_escape($row['name']);
|
||||||
$html .= "<br><a href='".make_link("user/$username")."'>$username</a>";
|
$html .= "<br><a href='".make_link("user/$username")."'>$username</a>";
|
||||||
}
|
}
|
||||||
|
|
||||||
$page->add_block(new Block("Favorited By", $html, "left", 25));
|
$page->add_block(new Block("Favorited By", $html, "left", 25));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
@ -1,54 +1,54 @@
|
|||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
* Name: XML Sitemap
|
* Name: XML Sitemap
|
||||||
* Author: Sein Kraft <mail@seinkraft.info>
|
* Author: Sein Kraft <mail@seinkraft.info>
|
||||||
* License: GPLv2
|
* License: GPLv2
|
||||||
* Description: Adds sitemap.xml on request.
|
* Description: Adds sitemap.xml on request.
|
||||||
* Documentation:
|
* Documentation:
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class XMLSitemap extends SimpleExtension {
|
class XMLSitemap extends SimpleExtension {
|
||||||
public function onPageRequest($event) {
|
public function onPageRequest($event) {
|
||||||
if($event->page_matches("sitemap.xml")) {
|
if($event->page_matches("sitemap.xml")) {
|
||||||
$images = Image::find_images(0, 50, array());
|
$images = Image::find_images(0, 50, array());
|
||||||
$this->do_xml($images);
|
$this->do_xml($images);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function do_xml($images) {
|
private function do_xml($images) {
|
||||||
global $page;
|
global $page;
|
||||||
$page->set_mode("data");
|
$page->set_mode("data");
|
||||||
$page->set_type("application/xml");
|
$page->set_type("application/xml");
|
||||||
|
|
||||||
$data = "";
|
$data = "";
|
||||||
foreach($images as $image) {
|
foreach($images as $image) {
|
||||||
$link = make_http(make_link("post/view/{$image->id}"));
|
$link = make_http(make_link("post/view/{$image->id}"));
|
||||||
$posted = date("Y-m-d", $image->posted_timestamp);
|
$posted = date("Y-m-d", $image->posted_timestamp);
|
||||||
|
|
||||||
$data .= "
|
$data .= "
|
||||||
<url>
|
<url>
|
||||||
<loc>$link</loc>
|
<loc>$link</loc>
|
||||||
<lastmod>$posted</lastmod>
|
<lastmod>$posted</lastmod>
|
||||||
<changefreq>monthly</changefreq>
|
<changefreq>monthly</changefreq>
|
||||||
<priority>0.8</priority>
|
<priority>0.8</priority>
|
||||||
</url>
|
</url>
|
||||||
";
|
";
|
||||||
}
|
}
|
||||||
|
|
||||||
$base_href = make_http(make_link("post/list"));
|
$base_href = make_http(make_link("post/list"));
|
||||||
|
|
||||||
$xml = "<"."?xml version=\"1.0\" encoding=\"utf-8\"?".">
|
$xml = "<"."?xml version=\"1.0\" encoding=\"utf-8\"?".">
|
||||||
<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">
|
<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">
|
||||||
<url>
|
<url>
|
||||||
<loc>$base_href</loc>
|
<loc>$base_href</loc>
|
||||||
<lastmod>2009-01-01</lastmod>
|
<lastmod>2009-01-01</lastmod>
|
||||||
<changefreq>monthly</changefreq>
|
<changefreq>monthly</changefreq>
|
||||||
<priority>1</priority>
|
<priority>1</priority>
|
||||||
</url>
|
</url>
|
||||||
$data
|
$data
|
||||||
</urlset>
|
</urlset>
|
||||||
";
|
";
|
||||||
$page->set_data($xml);
|
$page->set_data($xml);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
@ -1,219 +1,219 @@
|
|||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
* Name: Tag History
|
* Name: Tag History
|
||||||
* Author: Bzchan <bzchan@animemahou.com>
|
* Author: Bzchan <bzchan@animemahou.com>
|
||||||
* Description: Keep a record of tag changes
|
* Description: Keep a record of tag changes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class Tag_History implements Extension {
|
class Tag_History implements Extension {
|
||||||
var $theme;
|
var $theme;
|
||||||
|
|
||||||
public function receive_event(Event $event) {
|
public function receive_event(Event $event) {
|
||||||
global $config, $database, $page, $user;
|
global $config, $database, $page, $user;
|
||||||
if(is_null($this->theme)) $this->theme = get_theme_object($this);
|
if(is_null($this->theme)) $this->theme = get_theme_object($this);
|
||||||
|
|
||||||
if(($event instanceof InitExtEvent)) {
|
if(($event instanceof InitExtEvent)) {
|
||||||
$config->set_default_int("history_limit", -1);
|
$config->set_default_int("history_limit", -1);
|
||||||
|
|
||||||
// shimmie is being installed so call install to create the table.
|
// shimmie is being installed so call install to create the table.
|
||||||
if($config->get_int("ext_tag_history_version") < 3) {
|
if($config->get_int("ext_tag_history_version") < 3) {
|
||||||
$this->install();
|
$this->install();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(($event instanceof PageRequestEvent) && $event->page_matches("tag_history"))
|
if(($event instanceof PageRequestEvent) && $event->page_matches("tag_history"))
|
||||||
{
|
{
|
||||||
if($event->get_arg(0) == "revert")
|
if($event->get_arg(0) == "revert")
|
||||||
{
|
{
|
||||||
// this is a request to revert to a previous version of the tags
|
// this is a request to revert to a previous version of the tags
|
||||||
if($config->get_bool("tag_edit_anon") || !$user->is_anonymous()) {
|
if($config->get_bool("tag_edit_anon") || !$user->is_anonymous()) {
|
||||||
$this->process_revert_request($_POST['revert']);
|
$this->process_revert_request($_POST['revert']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if($event->count_args() == 1)
|
else if($event->count_args() == 1)
|
||||||
{
|
{
|
||||||
// must be an attempt to view a tag history
|
// must be an attempt to view a tag history
|
||||||
$image_id = int_escape($event->get_arg(0));
|
$image_id = int_escape($event->get_arg(0));
|
||||||
$this->theme->display_history_page($page, $image_id, $this->get_tag_history_from_id($image_id));
|
$this->theme->display_history_page($page, $image_id, $this->get_tag_history_from_id($image_id));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$this->theme->display_global_page($page, $this->get_global_tag_history());
|
$this->theme->display_global_page($page, $this->get_global_tag_history());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(($event instanceof DisplayingImageEvent))
|
if(($event instanceof DisplayingImageEvent))
|
||||||
{
|
{
|
||||||
// handle displaying a link on the view page
|
// handle displaying a link on the view page
|
||||||
$this->theme->display_history_link($page, $event->image->id);
|
$this->theme->display_history_link($page, $event->image->id);
|
||||||
}
|
}
|
||||||
if(($event instanceof ImageDeletionEvent))
|
if(($event instanceof ImageDeletionEvent))
|
||||||
{
|
{
|
||||||
// handle removing of history when an image is deleted
|
// handle removing of history when an image is deleted
|
||||||
$this->delete_all_tag_history($event->image->id);
|
$this->delete_all_tag_history($event->image->id);
|
||||||
}
|
}
|
||||||
if(($event instanceof SetupBuildingEvent)) {
|
if(($event instanceof SetupBuildingEvent)) {
|
||||||
$sb = new SetupBlock("Tag History");
|
$sb = new SetupBlock("Tag History");
|
||||||
$sb->add_label("Limit to ");
|
$sb->add_label("Limit to ");
|
||||||
$sb->add_int_option("history_limit");
|
$sb->add_int_option("history_limit");
|
||||||
$sb->add_label(" entires per image");
|
$sb->add_label(" entires per image");
|
||||||
$sb->add_label("<br>(-1 for unlimited)");
|
$sb->add_label("<br>(-1 for unlimited)");
|
||||||
$event->panel->add_block($sb);
|
$event->panel->add_block($sb);
|
||||||
}
|
}
|
||||||
if(($event instanceof TagSetEvent)) {
|
if(($event instanceof TagSetEvent)) {
|
||||||
$this->add_tag_history($event->image, $event->tags);
|
$this->add_tag_history($event->image, $event->tags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function install()
|
protected function install()
|
||||||
{
|
{
|
||||||
global $database;
|
global $database;
|
||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
if($config->get_int("ext_tag_history_version") < 1) {
|
if($config->get_int("ext_tag_history_version") < 1) {
|
||||||
$database->create_table("tag_histories", "
|
$database->create_table("tag_histories", "
|
||||||
id SCORE_AIPK,
|
id SCORE_AIPK,
|
||||||
image_id INTEGER NOT NULL,
|
image_id INTEGER NOT NULL,
|
||||||
user_id INTEGER NOT NULL,
|
user_id INTEGER NOT NULL,
|
||||||
user_ip SCORE_INET NOT NULL,
|
user_ip SCORE_INET NOT NULL,
|
||||||
tags TEXT NOT NULL,
|
tags TEXT NOT NULL,
|
||||||
date_set DATETIME NOT NULL,
|
date_set DATETIME NOT NULL,
|
||||||
INDEX(image_id),
|
INDEX(image_id),
|
||||||
FOREIGN KEY (image_id) REFERENCES images(id) ON DELETE CASCADE,
|
FOREIGN KEY (image_id) REFERENCES images(id) ON DELETE CASCADE,
|
||||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||||||
");
|
");
|
||||||
$config->set_int("ext_tag_history_version", 3);
|
$config->set_int("ext_tag_history_version", 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
if($config->get_int("ext_tag_history_version") == 1) {
|
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 user_id INTEGER NOT NULL");
|
||||||
$database->Execute("ALTER TABLE tag_histories ADD COLUMN date_set DATETIME NOT NULL");
|
$database->Execute("ALTER TABLE tag_histories ADD COLUMN date_set DATETIME NOT NULL");
|
||||||
$config->set_int("ext_tag_history_version", 2);
|
$config->set_int("ext_tag_history_version", 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if($config->get_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");
|
$database->Execute("ALTER TABLE tag_histories ADD COLUMN user_ip CHAR(15) NOT NULL");
|
||||||
$config->set_int("ext_tag_history_version", 3);
|
$config->set_int("ext_tag_history_version", 3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* this function is called when a revert request is received
|
* this function is called when a revert request is received
|
||||||
*/
|
*/
|
||||||
private function process_revert_request($revert_id)
|
private function process_revert_request($revert_id)
|
||||||
{
|
{
|
||||||
global $page;
|
global $page;
|
||||||
// check for the nothing case
|
// check for the nothing case
|
||||||
if($revert_id=="nothing")
|
if($revert_id=="nothing")
|
||||||
{
|
{
|
||||||
// tried to set it too the same thing so ignore it (might be a bot)
|
// tried to set it too the same thing so ignore it (might be a bot)
|
||||||
// go back to the index page with you
|
// go back to the index page with you
|
||||||
$page->set_mode("redirect");
|
$page->set_mode("redirect");
|
||||||
$page->set_redirect(make_link());
|
$page->set_redirect(make_link());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$revert_id = int_escape($revert_id);
|
$revert_id = int_escape($revert_id);
|
||||||
|
|
||||||
// lets get this revert id assuming it exists
|
// lets get this revert id assuming it exists
|
||||||
$result = $this->get_tag_history_from_revert($revert_id);
|
$result = $this->get_tag_history_from_revert($revert_id);
|
||||||
|
|
||||||
if($result==null)
|
if($result==null)
|
||||||
{
|
{
|
||||||
// there is no history entry with that id so either the image was deleted
|
// 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
|
// while the user was viewing the history, someone is playing with form
|
||||||
// variables or we have messed up in code somewhere.
|
// variables or we have messed up in code somewhere.
|
||||||
die("Error: No tag history with specified id was found.");
|
die("Error: No tag history with specified id was found.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// lets get the values out of the result
|
// lets get the values out of the result
|
||||||
$stored_result_id = $result->fields['id'];
|
$stored_result_id = $result->fields['id'];
|
||||||
$stored_image_id = $result->fields['image_id'];
|
$stored_image_id = $result->fields['image_id'];
|
||||||
$stored_tags = $result->fields['tags'];
|
$stored_tags = $result->fields['tags'];
|
||||||
|
|
||||||
// all should be ok so we can revert by firing the SetUserTags event.
|
// 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));
|
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
|
// all should be done now so redirect the user back to the image
|
||||||
$page->set_mode("redirect");
|
$page->set_mode("redirect");
|
||||||
$page->set_redirect(make_link("post/view/$stored_image_id"));
|
$page->set_redirect(make_link("post/view/$stored_image_id"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function get_tag_history_from_revert($revert_id)
|
public function get_tag_history_from_revert($revert_id)
|
||||||
{
|
{
|
||||||
global $database;
|
global $database;
|
||||||
$row = $database->execute("
|
$row = $database->execute("
|
||||||
SELECT tag_histories.*, users.name
|
SELECT tag_histories.*, users.name
|
||||||
FROM tag_histories
|
FROM tag_histories
|
||||||
JOIN users ON tag_histories.user_id = users.id
|
JOIN users ON tag_histories.user_id = users.id
|
||||||
WHERE tag_histories.id = ?", array($revert_id));
|
WHERE tag_histories.id = ?", array($revert_id));
|
||||||
return ($row ? $row : null);
|
return ($row ? $row : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function get_tag_history_from_id($image_id)
|
public function get_tag_history_from_id($image_id)
|
||||||
{
|
{
|
||||||
global $database;
|
global $database;
|
||||||
$row = $database->get_all("
|
$row = $database->get_all("
|
||||||
SELECT tag_histories.*, users.name
|
SELECT tag_histories.*, users.name
|
||||||
FROM tag_histories
|
FROM tag_histories
|
||||||
JOIN users ON tag_histories.user_id = users.id
|
JOIN users ON tag_histories.user_id = users.id
|
||||||
WHERE image_id = ?
|
WHERE image_id = ?
|
||||||
ORDER BY tag_histories.id DESC",
|
ORDER BY tag_histories.id DESC",
|
||||||
array($image_id));
|
array($image_id));
|
||||||
return ($row ? $row : array());
|
return ($row ? $row : array());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function get_global_tag_history()
|
public function get_global_tag_history()
|
||||||
{
|
{
|
||||||
global $database;
|
global $database;
|
||||||
$row = $database->get_all("
|
$row = $database->get_all("
|
||||||
SELECT tag_histories.*, users.name
|
SELECT tag_histories.*, users.name
|
||||||
FROM tag_histories
|
FROM tag_histories
|
||||||
JOIN users ON tag_histories.user_id = users.id
|
JOIN users ON tag_histories.user_id = users.id
|
||||||
ORDER BY tag_histories.id DESC
|
ORDER BY tag_histories.id DESC
|
||||||
LIMIT 100");
|
LIMIT 100");
|
||||||
return ($row ? $row : array());
|
return ($row ? $row : array());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* this function is called when an image has been deleted
|
* this function is called when an image has been deleted
|
||||||
*/
|
*/
|
||||||
private function delete_all_tag_history($image_id)
|
private function delete_all_tag_history($image_id)
|
||||||
{
|
{
|
||||||
global $database;
|
global $database;
|
||||||
$database->execute("DELETE FROM tag_histories WHERE image_id = ?", array($image_id));
|
$database->execute("DELETE FROM tag_histories WHERE image_id = ?", array($image_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* this function is called just before an images tag are changed
|
* this function is called just before an images tag are changed
|
||||||
*/
|
*/
|
||||||
private function add_tag_history($image, $tags)
|
private function add_tag_history($image, $tags)
|
||||||
{
|
{
|
||||||
global $database;
|
global $database;
|
||||||
global $config;
|
global $config;
|
||||||
global $user;
|
global $user;
|
||||||
|
|
||||||
$new_tags = Tag::implode($tags);
|
$new_tags = Tag::implode($tags);
|
||||||
$old_tags = Tag::implode($image->get_tag_array());
|
$old_tags = Tag::implode($image->get_tag_array());
|
||||||
if($new_tags == $old_tags) return;
|
if($new_tags == $old_tags) return;
|
||||||
|
|
||||||
// add a history entry
|
// add a history entry
|
||||||
$allowed = $config->get_int("history_limit");
|
$allowed = $config->get_int("history_limit");
|
||||||
if($allowed == 0) return;
|
if($allowed == 0) return;
|
||||||
|
|
||||||
$row = $database->execute("
|
$row = $database->execute("
|
||||||
INSERT INTO tag_histories(image_id, tags, user_id, user_ip, date_set)
|
INSERT INTO tag_histories(image_id, tags, user_id, user_ip, date_set)
|
||||||
VALUES (?, ?, ?, ?, now())",
|
VALUES (?, ?, ?, ?, now())",
|
||||||
array($image->id, $new_tags, $user->id, $_SERVER['REMOTE_ADDR']));
|
array($image->id, $new_tags, $user->id, $_SERVER['REMOTE_ADDR']));
|
||||||
|
|
||||||
// if needed remove oldest one
|
// if needed remove oldest one
|
||||||
if($allowed == -1) return;
|
if($allowed == -1) return;
|
||||||
$entries = $database->db->GetOne("SELECT COUNT(*) FROM tag_histories WHERE image_id = ?", array($image->id));
|
$entries = $database->db->GetOne("SELECT COUNT(*) FROM tag_histories WHERE image_id = ?", array($image->id));
|
||||||
if($entries > $allowed)
|
if($entries > $allowed)
|
||||||
{
|
{
|
||||||
// TODO: Make these queries better
|
// TODO: Make these queries better
|
||||||
$min_id = $database->db->GetOne("SELECT MIN(id) FROM tag_histories WHERE image_id = ?", array($image->id));
|
$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));
|
$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
|
add_event_listener(new Tag_History(), 40); // in before tags are actually set, so that "get current tags" works
|
||||||
?>
|
?>
|
||||||
|
@ -1,175 +1,175 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Name: Random Tip
|
* Name: Random Tip
|
||||||
* Author: Sein Kraft <mail@seinkraft.info>
|
* Author: Sein Kraft <mail@seinkraft.info>
|
||||||
* License: GPLv2
|
* License: GPLv2
|
||||||
* Description: Show a random line of text in the subheader space
|
* Description: Show a random line of text in the subheader space
|
||||||
* Documentation:
|
* Documentation:
|
||||||
* Formatting is done with HTML
|
* Formatting is done with HTML
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class Tips extends SimpleExtension {
|
class Tips extends SimpleExtension {
|
||||||
public function onInitExt($event) {
|
public function onInitExt($event) {
|
||||||
global $config, $database;
|
global $config, $database;
|
||||||
|
|
||||||
if ($config->get_int("ext_tips_version") < 1){
|
if ($config->get_int("ext_tips_version") < 1){
|
||||||
$database->create_table("tips", "
|
$database->create_table("tips", "
|
||||||
id SCORE_AIPK,
|
id SCORE_AIPK,
|
||||||
enable SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N,
|
enable SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N,
|
||||||
image TEXT NOT NULL,
|
image TEXT NOT NULL,
|
||||||
text TEXT NOT NULL,
|
text TEXT NOT NULL,
|
||||||
INDEX (id)
|
INDEX (id)
|
||||||
");
|
");
|
||||||
|
|
||||||
$database->execute("
|
$database->execute("
|
||||||
INSERT INTO tips (enable, image, text)
|
INSERT INTO tips (enable, image, text)
|
||||||
VALUES (?, ?, ?)",
|
VALUES (?, ?, ?)",
|
||||||
array("Y", "coins.png", "Do you like this extension? Please support us for developing new ones. <a href=\"https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=8235933\" target=\"_blank\">Donate through paypal</a>."));
|
array("Y", "coins.png", "Do you like this extension? Please support us for developing new ones. <a href=\"https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=8235933\" target=\"_blank\">Donate through paypal</a>."));
|
||||||
|
|
||||||
$config->set_int("ext_tips_version", 1);
|
$config->set_int("ext_tips_version", 1);
|
||||||
log_info("tips", "extension installed");
|
log_info("tips", "extension installed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onPageRequest($event) {
|
public function onPageRequest($event) {
|
||||||
global $page, $user;
|
global $page, $user;
|
||||||
|
|
||||||
$this->getTip();
|
$this->getTip();
|
||||||
|
|
||||||
if($event->page_matches("tips")) {
|
if($event->page_matches("tips")) {
|
||||||
switch($event->get_arg(0)) {
|
switch($event->get_arg(0)) {
|
||||||
case "list":
|
case "list":
|
||||||
{
|
{
|
||||||
if($user->is_admin()) {
|
if($user->is_admin()) {
|
||||||
$this->manageTips();
|
$this->manageTips();
|
||||||
$this->getAll();
|
$this->getAll();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "new":
|
case "new":
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "save":
|
case "save":
|
||||||
{
|
{
|
||||||
if($user->is_admin()) {
|
if($user->is_admin()) {
|
||||||
$this->saveTip();
|
$this->saveTip();
|
||||||
|
|
||||||
$page->set_mode("redirect");
|
$page->set_mode("redirect");
|
||||||
$page->set_redirect(make_link("tips/list"));
|
$page->set_redirect(make_link("tips/list"));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "status":
|
case "status":
|
||||||
{
|
{
|
||||||
if($user->is_admin()) {
|
if($user->is_admin()) {
|
||||||
$tipID = int_escape($event->get_arg(1));
|
$tipID = int_escape($event->get_arg(1));
|
||||||
$this->setStatus($tipID);
|
$this->setStatus($tipID);
|
||||||
|
|
||||||
$page->set_mode("redirect");
|
$page->set_mode("redirect");
|
||||||
$page->set_redirect(make_link("tips/list"));
|
$page->set_redirect(make_link("tips/list"));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "delete":
|
case "delete":
|
||||||
{
|
{
|
||||||
if($user->is_admin()) {
|
if($user->is_admin()) {
|
||||||
$tipID = int_escape($event->get_arg(1));
|
$tipID = int_escape($event->get_arg(1));
|
||||||
$this->deleteTip($tipID);
|
$this->deleteTip($tipID);
|
||||||
|
|
||||||
$page->set_mode("redirect");
|
$page->set_mode("redirect");
|
||||||
$page->set_redirect(make_link("tips/list"));
|
$page->set_redirect(make_link("tips/list"));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onUserBlockBuilding($event) {
|
public function onUserBlockBuilding($event) {
|
||||||
global $user;
|
global $user;
|
||||||
if($user->is_admin()) {
|
if($user->is_admin()) {
|
||||||
$event->add_link("Tips Editor", make_link("tips/list"));
|
$event->add_link("Tips Editor", make_link("tips/list"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function manageTips() {
|
private function manageTips() {
|
||||||
$data_href = get_base_href();
|
$data_href = get_base_href();
|
||||||
$url = $data_href."/ext/tips/images/";
|
$url = $data_href."/ext/tips/images/";
|
||||||
|
|
||||||
$dirPath = dir('./ext/tips/images');
|
$dirPath = dir('./ext/tips/images');
|
||||||
$images = array();
|
$images = array();
|
||||||
while(($file = $dirPath->read()) !== false) {
|
while(($file = $dirPath->read()) !== false) {
|
||||||
if($file[0] != ".") {
|
if($file[0] != ".") {
|
||||||
$images[] = trim($file);
|
$images[] = trim($file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$dirPath->close();
|
$dirPath->close();
|
||||||
sort($images);
|
sort($images);
|
||||||
|
|
||||||
$this->theme->manageTips($url, $images);
|
$this->theme->manageTips($url, $images);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function saveTip() {
|
private function saveTip() {
|
||||||
global $database;
|
global $database;
|
||||||
|
|
||||||
$enable = isset($_POST["enable"]) ? "Y" : "N";
|
$enable = isset($_POST["enable"]) ? "Y" : "N";
|
||||||
$image = html_escape($_POST["image"]);
|
$image = html_escape($_POST["image"]);
|
||||||
$text = $_POST["text"];
|
$text = $_POST["text"];
|
||||||
|
|
||||||
$database->execute("
|
$database->execute("
|
||||||
INSERT INTO tips (enable, image, text)
|
INSERT INTO tips (enable, image, text)
|
||||||
VALUES (?, ?, ?)",
|
VALUES (?, ?, ?)",
|
||||||
array($enable, $image, $text));
|
array($enable, $image, $text));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getTip() {
|
private function getTip() {
|
||||||
global $database;
|
global $database;
|
||||||
|
|
||||||
$data_href = get_base_href();
|
$data_href = get_base_href();
|
||||||
$url = $data_href."/ext/tips/images/";
|
$url = $data_href."/ext/tips/images/";
|
||||||
|
|
||||||
$tip = $database->get_row("SELECT * ".
|
$tip = $database->get_row("SELECT * ".
|
||||||
"FROM tips ".
|
"FROM tips ".
|
||||||
"WHERE enable = 'Y' ".
|
"WHERE enable = 'Y' ".
|
||||||
"ORDER BY RAND() ".
|
"ORDER BY RAND() ".
|
||||||
"LIMIT 1");
|
"LIMIT 1");
|
||||||
|
|
||||||
if($tip) {
|
if($tip) {
|
||||||
$this->theme->showTip($url, $tip);
|
$this->theme->showTip($url, $tip);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getAll() {
|
private function getAll() {
|
||||||
global $database;
|
global $database;
|
||||||
|
|
||||||
$data_href = get_base_href();
|
$data_href = get_base_href();
|
||||||
$url = $data_href."/ext/tips/images/";
|
$url = $data_href."/ext/tips/images/";
|
||||||
|
|
||||||
$tips = $database->get_all("SELECT * FROM tips ORDER BY id ASC");
|
$tips = $database->get_all("SELECT * FROM tips ORDER BY id ASC");
|
||||||
|
|
||||||
$this->theme->showAll($url, $tips);
|
$this->theme->showAll($url, $tips);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function setStatus($tipID) {
|
private function setStatus($tipID) {
|
||||||
global $database;
|
global $database;
|
||||||
|
|
||||||
$tip = $database->get_row("SELECT * FROM tips WHERE id = ? ", array($tipID));
|
$tip = $database->get_row("SELECT * FROM tips WHERE id = ? ", array($tipID));
|
||||||
|
|
||||||
if($tip['enable'] == "Y") {
|
if($tip['enable'] == "Y") {
|
||||||
$enable = "N";
|
$enable = "N";
|
||||||
} elseif($tip['enable'] == "N") {
|
} elseif($tip['enable'] == "N") {
|
||||||
$enable = "Y";
|
$enable = "Y";
|
||||||
}
|
}
|
||||||
|
|
||||||
$database->execute("UPDATE tips SET enable = ? WHERE id = ?", array ($enable, $tipID));
|
$database->execute("UPDATE tips SET enable = ? WHERE id = ?", array ($enable, $tipID));
|
||||||
}
|
}
|
||||||
|
|
||||||
private function deleteTip($tipID) {
|
private function deleteTip($tipID) {
|
||||||
global $database;
|
global $database;
|
||||||
$database->execute("DELETE FROM tips WHERE id = ?", array($tipID));
|
$database->execute("DELETE FROM tips WHERE id = ?", array($tipID));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
@ -1,99 +1,99 @@
|
|||||||
<?php
|
<?php
|
||||||
class TipsTheme extends Themelet {
|
class TipsTheme extends Themelet {
|
||||||
public function manageTips($url, $images) {
|
public function manageTips($url, $images) {
|
||||||
global $page;
|
global $page;
|
||||||
$select = "<select name='image'><option value=''>- Select Image -</option>";
|
$select = "<select name='image'><option value=''>- Select Image -</option>";
|
||||||
|
|
||||||
foreach($images as $image){
|
foreach($images as $image){
|
||||||
$select .= "<option style='background-image:url(".$url.$image."); background-repeat:no-repeat; padding-left:20px;' value=\"".$image."\">".$image."</option>\n";
|
$select .= "<option style='background-image:url(".$url.$image."); background-repeat:no-repeat; padding-left:20px;' value=\"".$image."\">".$image."</option>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
$select .= "</select>";
|
$select .= "</select>";
|
||||||
|
|
||||||
$html = "
|
$html = "
|
||||||
<form action='".make_link("tips/save")."' method='POST'>
|
<form action='".make_link("tips/save")."' method='POST'>
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Enable:</td>
|
<td>Enable:</td>
|
||||||
<td><input name='enable' type='checkbox' value='Y' checked/></td>
|
<td><input name='enable' type='checkbox' value='Y' checked/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Image:</td>
|
<td>Image:</td>
|
||||||
<td>{$select}</td>
|
<td>{$select}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Message:</td>
|
<td>Message:</td>
|
||||||
<td><textarea name='text'></textarea></td>
|
<td><textarea name='text'></textarea></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan='2'><input type='submit' value='Submit' /></td>
|
<td colspan='2'><input type='submit' value='Submit' /></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</form>
|
</form>
|
||||||
";
|
";
|
||||||
|
|
||||||
$page->set_title("Tips List");
|
$page->set_title("Tips List");
|
||||||
$page->set_heading("Tips List");
|
$page->set_heading("Tips List");
|
||||||
$page->add_block(new NavBlock());
|
$page->add_block(new NavBlock());
|
||||||
$page->add_block(new Block("Add Tip", $html, "main", 10));
|
$page->add_block(new Block("Add Tip", $html, "main", 10));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function showTip($url, $tip) {
|
public function showTip($url, $tip) {
|
||||||
global $page;
|
global $page;
|
||||||
|
|
||||||
$img = "";
|
$img = "";
|
||||||
if(!empty($tip['image'])) {
|
if(!empty($tip['image'])) {
|
||||||
$img = "<img src=".$url.$tip['image']." /> ";
|
$img = "<img src=".$url.$tip['image']." /> ";
|
||||||
}
|
}
|
||||||
$html = "<div id='tips'>".$img.$tip['text']."</div>";
|
$html = "<div id='tips'>".$img.$tip['text']."</div>";
|
||||||
$page->add_block(new Block(null, $html, "subheading", 10));
|
$page->add_block(new Block(null, $html, "subheading", 10));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function showAll($url, $tips){
|
public function showAll($url, $tips){
|
||||||
global $user, $page;
|
global $user, $page;
|
||||||
|
|
||||||
$html = "<table id='poolsList' class='zebra'>".
|
$html = "<table id='poolsList' class='zebra'>".
|
||||||
"<thead><tr>".
|
"<thead><tr>".
|
||||||
"<th>ID</th>".
|
"<th>ID</th>".
|
||||||
"<th>Enabled</th>".
|
"<th>Enabled</th>".
|
||||||
"<th>Image</th>".
|
"<th>Image</th>".
|
||||||
"<th>Text</th>";
|
"<th>Text</th>";
|
||||||
|
|
||||||
if($user->is_admin()){
|
if($user->is_admin()){
|
||||||
$html .= "<th>Action</th>";
|
$html .= "<th>Action</th>";
|
||||||
}
|
}
|
||||||
|
|
||||||
$html .= "</tr></thead>";
|
$html .= "</tr></thead>";
|
||||||
|
|
||||||
$n = 0;
|
$n = 0;
|
||||||
foreach ($tips as $tip)
|
foreach ($tips as $tip)
|
||||||
{
|
{
|
||||||
$oe = ($n++ % 2 == 0) ? "even" : "odd";
|
$oe = ($n++ % 2 == 0) ? "even" : "odd";
|
||||||
|
|
||||||
$tip_enable = ($tip['enable'] == "Y") ? "Yes" : "No";
|
$tip_enable = ($tip['enable'] == "Y") ? "Yes" : "No";
|
||||||
$set_link = "<a href='".make_link("tips/status/".$tip['id'])."'>".$tip_enable."</a>";
|
$set_link = "<a href='".make_link("tips/status/".$tip['id'])."'>".$tip_enable."</a>";
|
||||||
|
|
||||||
$html .= "<tr class='$oe'>".
|
$html .= "<tr class='$oe'>".
|
||||||
"<td>".$tip['id']."</td>".
|
"<td>".$tip['id']."</td>".
|
||||||
"<td>".$set_link."</td>".
|
"<td>".$set_link."</td>".
|
||||||
(
|
(
|
||||||
empty($tip['image']) ?
|
empty($tip['image']) ?
|
||||||
"<td></td>" :
|
"<td></td>" :
|
||||||
"<td><img src=".$url.$tip['image']." /></td>"
|
"<td><img src=".$url.$tip['image']." /></td>"
|
||||||
).
|
).
|
||||||
"<td class='left'>".$tip['text']."</td>";
|
"<td class='left'>".$tip['text']."</td>";
|
||||||
|
|
||||||
$del_link = "<a href='".make_link("tips/delete/".$tip['id'])."'>Delete</a>";
|
$del_link = "<a href='".make_link("tips/delete/".$tip['id'])."'>Delete</a>";
|
||||||
|
|
||||||
if($user->is_admin()){
|
if($user->is_admin()){
|
||||||
$html .= "<td>".$del_link."</td>";
|
$html .= "<td>".$del_link."</td>";
|
||||||
}
|
}
|
||||||
|
|
||||||
$html .= "</tr>";
|
$html .= "</tr>";
|
||||||
}
|
}
|
||||||
$html .= "</tbody></table>";
|
$html .= "</tbody></table>";
|
||||||
|
|
||||||
$page->add_block(new Block("All Tips", $html, "main", 20));
|
$page->add_block(new Block("All Tips", $html, "main", 20));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
@ -1,121 +1,121 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
V4.50 6 July 2004 (c) 2000-2007 John Lim (jlim#natsoft.com.my). All rights reserved.
|
V4.50 6 July 2004 (c) 2000-2007 John Lim (jlim#natsoft.com.my). All rights reserved.
|
||||||
Released under both BSD license and Lesser GPL library license.
|
Released under both BSD license and Lesser GPL library license.
|
||||||
Whenever there is any discrepancy between the two licenses,
|
Whenever there is any discrepancy between the two licenses,
|
||||||
the BSD license will take precedence.
|
the BSD license will take precedence.
|
||||||
|
|
||||||
Set tabs to 4 for best viewing.
|
Set tabs to 4 for best viewing.
|
||||||
|
|
||||||
Modified from datadict-generic.inc.php for sapdb by RalfBecker-AT-outdoor-training.de
|
Modified from datadict-generic.inc.php for sapdb by RalfBecker-AT-outdoor-training.de
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// security - hide paths
|
// security - hide paths
|
||||||
if (!defined('ADODB_DIR')) die();
|
if (!defined('ADODB_DIR')) die();
|
||||||
|
|
||||||
class ADODB2_sapdb extends ADODB_DataDict {
|
class ADODB2_sapdb extends ADODB_DataDict {
|
||||||
|
|
||||||
var $databaseType = 'sapdb';
|
var $databaseType = 'sapdb';
|
||||||
var $seqField = false;
|
var $seqField = false;
|
||||||
var $renameColumn = 'RENAME COLUMN %s.%s TO %s';
|
var $renameColumn = 'RENAME COLUMN %s.%s TO %s';
|
||||||
|
|
||||||
function ActualType($meta)
|
function ActualType($meta)
|
||||||
{
|
{
|
||||||
switch($meta) {
|
switch($meta) {
|
||||||
case 'C': return 'VARCHAR';
|
case 'C': return 'VARCHAR';
|
||||||
case 'XL':
|
case 'XL':
|
||||||
case 'X': return 'LONG';
|
case 'X': return 'LONG';
|
||||||
|
|
||||||
case 'C2': return 'VARCHAR UNICODE';
|
case 'C2': return 'VARCHAR UNICODE';
|
||||||
case 'X2': return 'LONG UNICODE';
|
case 'X2': return 'LONG UNICODE';
|
||||||
|
|
||||||
case 'B': return 'LONG';
|
case 'B': return 'LONG';
|
||||||
|
|
||||||
case 'D': return 'DATE';
|
case 'D': return 'DATE';
|
||||||
case 'T': return 'TIMESTAMP';
|
case 'T': return 'TIMESTAMP';
|
||||||
|
|
||||||
case 'L': return 'BOOLEAN';
|
case 'L': return 'BOOLEAN';
|
||||||
case 'I': return 'INTEGER';
|
case 'I': return 'INTEGER';
|
||||||
case 'I1': return 'FIXED(3)';
|
case 'I1': return 'FIXED(3)';
|
||||||
case 'I2': return 'SMALLINT';
|
case 'I2': return 'SMALLINT';
|
||||||
case 'I4': return 'INTEGER';
|
case 'I4': return 'INTEGER';
|
||||||
case 'I8': return 'FIXED(20)';
|
case 'I8': return 'FIXED(20)';
|
||||||
|
|
||||||
case 'F': return 'FLOAT(38)';
|
case 'F': return 'FLOAT(38)';
|
||||||
case 'N': return 'FIXED';
|
case 'N': return 'FIXED';
|
||||||
default:
|
default:
|
||||||
return $meta;
|
return $meta;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function MetaType($t,$len=-1,$fieldobj=false)
|
function MetaType($t,$len=-1,$fieldobj=false)
|
||||||
{
|
{
|
||||||
if (is_object($t)) {
|
if (is_object($t)) {
|
||||||
$fieldobj = $t;
|
$fieldobj = $t;
|
||||||
$t = $fieldobj->type;
|
$t = $fieldobj->type;
|
||||||
$len = $fieldobj->max_length;
|
$len = $fieldobj->max_length;
|
||||||
}
|
}
|
||||||
static $maxdb_type2adodb = array(
|
static $maxdb_type2adodb = array(
|
||||||
'VARCHAR' => 'C',
|
'VARCHAR' => 'C',
|
||||||
'CHARACTER' => 'C',
|
'CHARACTER' => 'C',
|
||||||
'LONG' => 'X', // no way to differ between 'X' and 'B' :-(
|
'LONG' => 'X', // no way to differ between 'X' and 'B' :-(
|
||||||
'DATE' => 'D',
|
'DATE' => 'D',
|
||||||
'TIMESTAMP' => 'T',
|
'TIMESTAMP' => 'T',
|
||||||
'BOOLEAN' => 'L',
|
'BOOLEAN' => 'L',
|
||||||
'INTEGER' => 'I4',
|
'INTEGER' => 'I4',
|
||||||
'SMALLINT' => 'I2',
|
'SMALLINT' => 'I2',
|
||||||
'FLOAT' => 'F',
|
'FLOAT' => 'F',
|
||||||
'FIXED' => 'N',
|
'FIXED' => 'N',
|
||||||
);
|
);
|
||||||
$type = isset($maxdb_type2adodb[$t]) ? $maxdb_type2adodb[$t] : 'C';
|
$type = isset($maxdb_type2adodb[$t]) ? $maxdb_type2adodb[$t] : 'C';
|
||||||
|
|
||||||
// convert integer-types simulated with fixed back to integer
|
// convert integer-types simulated with fixed back to integer
|
||||||
if ($t == 'FIXED' && !$fieldobj->scale && ($len == 20 || $len == 3)) {
|
if ($t == 'FIXED' && !$fieldobj->scale && ($len == 20 || $len == 3)) {
|
||||||
$type = $len == 20 ? 'I8' : 'I1';
|
$type = $len == 20 ? 'I8' : 'I1';
|
||||||
}
|
}
|
||||||
if ($fieldobj->auto_increment) $type = 'R';
|
if ($fieldobj->auto_increment) $type = 'R';
|
||||||
|
|
||||||
return $type;
|
return $type;
|
||||||
}
|
}
|
||||||
|
|
||||||
// return string must begin with space
|
// return string must begin with space
|
||||||
function _CreateSuffix($fname,$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned)
|
function _CreateSuffix($fname,$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned)
|
||||||
{
|
{
|
||||||
$suffix = '';
|
$suffix = '';
|
||||||
if ($funsigned) $suffix .= ' UNSIGNED';
|
if ($funsigned) $suffix .= ' UNSIGNED';
|
||||||
if ($fnotnull) $suffix .= ' NOT NULL';
|
if ($fnotnull) $suffix .= ' NOT NULL';
|
||||||
if ($fautoinc) $suffix .= ' DEFAULT SERIAL';
|
if ($fautoinc) $suffix .= ' DEFAULT SERIAL';
|
||||||
elseif (strlen($fdefault)) $suffix .= " DEFAULT $fdefault";
|
elseif (strlen($fdefault)) $suffix .= " DEFAULT $fdefault";
|
||||||
if ($fconstraint) $suffix .= ' '.$fconstraint;
|
if ($fconstraint) $suffix .= ' '.$fconstraint;
|
||||||
return $suffix;
|
return $suffix;
|
||||||
}
|
}
|
||||||
|
|
||||||
function AddColumnSQL($tabname, $flds)
|
function AddColumnSQL($tabname, $flds)
|
||||||
{
|
{
|
||||||
$tabname = $this->TableName ($tabname);
|
$tabname = $this->TableName ($tabname);
|
||||||
$sql = array();
|
$sql = array();
|
||||||
list($lines,$pkey) = $this->_GenFields($flds);
|
list($lines,$pkey) = $this->_GenFields($flds);
|
||||||
return array( 'ALTER TABLE ' . $tabname . ' ADD (' . implode(', ',$lines) . ')' );
|
return array( 'ALTER TABLE ' . $tabname . ' ADD (' . implode(', ',$lines) . ')' );
|
||||||
}
|
}
|
||||||
|
|
||||||
function AlterColumnSQL($tabname, $flds)
|
function AlterColumnSQL($tabname, $flds)
|
||||||
{
|
{
|
||||||
$tabname = $this->TableName ($tabname);
|
$tabname = $this->TableName ($tabname);
|
||||||
$sql = array();
|
$sql = array();
|
||||||
list($lines,$pkey) = $this->_GenFields($flds);
|
list($lines,$pkey) = $this->_GenFields($flds);
|
||||||
return array( 'ALTER TABLE ' . $tabname . ' MODIFY (' . implode(', ',$lines) . ')' );
|
return array( 'ALTER TABLE ' . $tabname . ' MODIFY (' . implode(', ',$lines) . ')' );
|
||||||
}
|
}
|
||||||
|
|
||||||
function DropColumnSQL($tabname, $flds)
|
function DropColumnSQL($tabname, $flds)
|
||||||
{
|
{
|
||||||
$tabname = $this->TableName ($tabname);
|
$tabname = $this->TableName ($tabname);
|
||||||
if (!is_array($flds)) $flds = explode(',',$flds);
|
if (!is_array($flds)) $flds = explode(',',$flds);
|
||||||
foreach($flds as $k => $v) {
|
foreach($flds as $k => $v) {
|
||||||
$flds[$k] = $this->NameQuote($v);
|
$flds[$k] = $this->NameQuote($v);
|
||||||
}
|
}
|
||||||
return array( 'ALTER TABLE ' . $tabname . ' DROP (' . implode(', ',$flds) . ')' );
|
return array( 'ALTER TABLE ' . $tabname . ' DROP (' . implode(', ',$flds) . ')' );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
@ -1,356 +1,356 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* 01.26.2006 12:29:28est
|
* 01.26.2006 12:29:28est
|
||||||
*
|
*
|
||||||
* Akismet PHP4 class
|
* Akismet PHP4 class
|
||||||
*
|
*
|
||||||
* <b>Usage</b>
|
* <b>Usage</b>
|
||||||
* <code>
|
* <code>
|
||||||
* $comment = array(
|
* $comment = array(
|
||||||
* 'author' => 'viagra-test-123',
|
* 'author' => 'viagra-test-123',
|
||||||
* 'email' => 'test@example.com',
|
* 'email' => 'test@example.com',
|
||||||
* 'website' => 'http://www.example.com/',
|
* 'website' => 'http://www.example.com/',
|
||||||
* 'body' => 'This is a test comment',
|
* 'body' => 'This is a test comment',
|
||||||
* 'permalink' => 'http://yourdomain.com/yourblogpost.url',
|
* 'permalink' => 'http://yourdomain.com/yourblogpost.url',
|
||||||
* );
|
* );
|
||||||
*
|
*
|
||||||
* $akismet = new Akismet('http://www.yourdomain.com/', 'YOUR_WORDPRESS_API_KEY', $comment);
|
* $akismet = new Akismet('http://www.yourdomain.com/', 'YOUR_WORDPRESS_API_KEY', $comment);
|
||||||
*
|
*
|
||||||
* if($akismet->isError()) {
|
* if($akismet->isError()) {
|
||||||
* echo"Couldn't connected to Akismet server!";
|
* echo"Couldn't connected to Akismet server!";
|
||||||
* } else {
|
* } else {
|
||||||
* if($akismet->isSpam()) {
|
* if($akismet->isSpam()) {
|
||||||
* echo"Spam detected";
|
* echo"Spam detected";
|
||||||
* } else {
|
* } else {
|
||||||
* echo"yay, no spam!";
|
* echo"yay, no spam!";
|
||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
* </code>
|
* </code>
|
||||||
*
|
*
|
||||||
* @author Bret Kuhns {@link www.miphp.net}
|
* @author Bret Kuhns {@link www.miphp.net}
|
||||||
* @link http://www.miphp.net/blog/view/php4_akismet_class/
|
* @link http://www.miphp.net/blog/view/php4_akismet_class/
|
||||||
* @version 0.3.3
|
* @version 0.3.3
|
||||||
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Error constants
|
// Error constants
|
||||||
define("AKISMET_SERVER_NOT_FOUND", 0);
|
define("AKISMET_SERVER_NOT_FOUND", 0);
|
||||||
define("AKISMET_RESPONSE_FAILED", 1);
|
define("AKISMET_RESPONSE_FAILED", 1);
|
||||||
define("AKISMET_INVALID_KEY", 2);
|
define("AKISMET_INVALID_KEY", 2);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Base class to assist in error handling between Akismet classes
|
// Base class to assist in error handling between Akismet classes
|
||||||
class AkismetObject {
|
class AkismetObject {
|
||||||
var $errors = array();
|
var $errors = array();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a new error to the errors array in the object
|
* Add a new error to the errors array in the object
|
||||||
*
|
*
|
||||||
* @param String $name A name (array key) for the error
|
* @param String $name A name (array key) for the error
|
||||||
* @param String $string The error message
|
* @param String $string The error message
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
// Set an error in the object
|
// Set an error in the object
|
||||||
function setError($name, $message) {
|
function setError($name, $message) {
|
||||||
$this->errors[$name] = $message;
|
$this->errors[$name] = $message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a specific error message from the errors array
|
* Return a specific error message from the errors array
|
||||||
*
|
*
|
||||||
* @param String $name The name of the error you want
|
* @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
|
* @return mixed Returns a String if the error exists, a false boolean if it does not exist
|
||||||
*/
|
*/
|
||||||
function getError($name) {
|
function getError($name) {
|
||||||
if($this->isError($name)) {
|
if($this->isError($name)) {
|
||||||
return $this->errors[$name];
|
return $this->errors[$name];
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return all errors in the object
|
* Return all errors in the object
|
||||||
*
|
*
|
||||||
* @return String[]
|
* @return String[]
|
||||||
*/
|
*/
|
||||||
function getErrors() {
|
function getErrors() {
|
||||||
return (array)$this->errors;
|
return (array)$this->errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if a certain error exists
|
* Check if a certain error exists
|
||||||
*
|
*
|
||||||
* @param String $name The name of the error you want
|
* @param String $name The name of the error you want
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
function isError($name) {
|
function isError($name) {
|
||||||
return isset($this->errors[$name]);
|
return isset($this->errors[$name]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if any errors exist
|
* Check if any errors exist
|
||||||
*
|
*
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
function errorsExist() {
|
function errorsExist() {
|
||||||
return (count($this->errors) > 0);
|
return (count($this->errors) > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Used by the Akismet class to communicate with the Akismet service
|
// Used by the Akismet class to communicate with the Akismet service
|
||||||
class AkismetHttpClient extends AkismetObject {
|
class AkismetHttpClient extends AkismetObject {
|
||||||
var $akismetVersion = '1.1';
|
var $akismetVersion = '1.1';
|
||||||
var $con;
|
var $con;
|
||||||
var $host;
|
var $host;
|
||||||
var $port;
|
var $port;
|
||||||
var $apiKey;
|
var $apiKey;
|
||||||
var $blogUrl;
|
var $blogUrl;
|
||||||
var $errors = array();
|
var $errors = array();
|
||||||
|
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
function AkismetHttpClient($host, $blogUrl, $apiKey, $port = 80) {
|
function AkismetHttpClient($host, $blogUrl, $apiKey, $port = 80) {
|
||||||
$this->host = $host;
|
$this->host = $host;
|
||||||
$this->port = $port;
|
$this->port = $port;
|
||||||
$this->blogUrl = $blogUrl;
|
$this->blogUrl = $blogUrl;
|
||||||
$this->apiKey = $apiKey;
|
$this->apiKey = $apiKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Use the connection active in $con to get a response from the server and return that response
|
// 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) {
|
function getResponse($request, $path, $type = "post", $responseLength = 1160) {
|
||||||
$this->_connect();
|
$this->_connect();
|
||||||
|
|
||||||
if($this->con && !$this->isError(AKISMET_SERVER_NOT_FOUND)) {
|
if($this->con && !$this->isError(AKISMET_SERVER_NOT_FOUND)) {
|
||||||
$request =
|
$request =
|
||||||
strToUpper($type)." /{$this->akismetVersion}/$path HTTP/1.1\r\n" .
|
strToUpper($type)." /{$this->akismetVersion}/$path HTTP/1.1\r\n" .
|
||||||
"Host: ".((!empty($this->apiKey)) ? $this->apiKey."." : null)."{$this->host}\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-Type: application/x-www-form-urlencoded; charset=utf-8\r\n" .
|
||||||
"Content-Length: ".strlen($request)."\r\n" .
|
"Content-Length: ".strlen($request)."\r\n" .
|
||||||
"User-Agent: Akismet PHP4 Class\r\n" .
|
"User-Agent: Akismet PHP4 Class\r\n" .
|
||||||
"\r\n" .
|
"\r\n" .
|
||||||
$request
|
$request
|
||||||
;
|
;
|
||||||
$response = "";
|
$response = "";
|
||||||
|
|
||||||
@fwrite($this->con, $request);
|
@fwrite($this->con, $request);
|
||||||
|
|
||||||
while(!feof($this->con)) {
|
while(!feof($this->con)) {
|
||||||
$response .= @fgets($this->con, $responseLength);
|
$response .= @fgets($this->con, $responseLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
$response = explode("\r\n\r\n", $response, 2);
|
$response = explode("\r\n\r\n", $response, 2);
|
||||||
return $response[1];
|
return $response[1];
|
||||||
} else {
|
} else {
|
||||||
$this->setError(AKISMET_RESPONSE_FAILED, "The response could not be retrieved.");
|
$this->setError(AKISMET_RESPONSE_FAILED, "The response could not be retrieved.");
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->_disconnect();
|
$this->_disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Connect to the Akismet server and store that connection in the instance variable $con
|
// Connect to the Akismet server and store that connection in the instance variable $con
|
||||||
function _connect() {
|
function _connect() {
|
||||||
if(!($this->con = @fsockopen($this->host, $this->port))) {
|
if(!($this->con = @fsockopen($this->host, $this->port))) {
|
||||||
$this->setError(AKISMET_SERVER_NOT_FOUND, "Could not connect to akismet server.");
|
$this->setError(AKISMET_SERVER_NOT_FOUND, "Could not connect to akismet server.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Close the connection to the Akismet server
|
// Close the connection to the Akismet server
|
||||||
function _disconnect() {
|
function _disconnect() {
|
||||||
@fclose($this->con);
|
@fclose($this->con);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// The controlling class. This is the ONLY class the user should instantiate in
|
// The controlling class. This is the ONLY class the user should instantiate in
|
||||||
// order to use the Akismet service!
|
// order to use the Akismet service!
|
||||||
class Akismet extends AkismetObject {
|
class Akismet extends AkismetObject {
|
||||||
var $apiPort = 80;
|
var $apiPort = 80;
|
||||||
var $akismetServer = 'rest.akismet.com';
|
var $akismetServer = 'rest.akismet.com';
|
||||||
var $akismetVersion = '1.1';
|
var $akismetVersion = '1.1';
|
||||||
var $http;
|
var $http;
|
||||||
|
|
||||||
var $ignore = array(
|
var $ignore = array(
|
||||||
'HTTP_COOKIE',
|
'HTTP_COOKIE',
|
||||||
'HTTP_X_FORWARDED_FOR',
|
'HTTP_X_FORWARDED_FOR',
|
||||||
'HTTP_X_FORWARDED_HOST',
|
'HTTP_X_FORWARDED_HOST',
|
||||||
'HTTP_MAX_FORWARDS',
|
'HTTP_MAX_FORWARDS',
|
||||||
'HTTP_X_FORWARDED_SERVER',
|
'HTTP_X_FORWARDED_SERVER',
|
||||||
'REDIRECT_STATUS',
|
'REDIRECT_STATUS',
|
||||||
'SERVER_PORT',
|
'SERVER_PORT',
|
||||||
'PATH',
|
'PATH',
|
||||||
'DOCUMENT_ROOT',
|
'DOCUMENT_ROOT',
|
||||||
'SERVER_ADMIN',
|
'SERVER_ADMIN',
|
||||||
'QUERY_STRING',
|
'QUERY_STRING',
|
||||||
'PHP_SELF'
|
'PHP_SELF'
|
||||||
);
|
);
|
||||||
|
|
||||||
var $blogUrl = "";
|
var $blogUrl = "";
|
||||||
var $apiKey = "";
|
var $apiKey = "";
|
||||||
var $comment = array();
|
var $comment = array();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*
|
*
|
||||||
* Set instance variables, connect to Akismet, and check API key
|
* Set instance variables, connect to Akismet, and check API key
|
||||||
*
|
*
|
||||||
* @param String $blogUrl The URL to your own blog
|
* @param String $blogUrl The URL to your own blog
|
||||||
* @param String $apiKey Your wordpress API key
|
* @param String $apiKey Your wordpress API key
|
||||||
* @param String[] $comment A formatted comment array to be examined by the Akismet service
|
* @param String[] $comment A formatted comment array to be examined by the Akismet service
|
||||||
*/
|
*/
|
||||||
function Akismet($blogUrl, $apiKey, $comment) {
|
function Akismet($blogUrl, $apiKey, $comment) {
|
||||||
$this->blogUrl = $blogUrl;
|
$this->blogUrl = $blogUrl;
|
||||||
$this->apiKey = $apiKey;
|
$this->apiKey = $apiKey;
|
||||||
|
|
||||||
// Populate the comment array with information needed by Akismet
|
// Populate the comment array with information needed by Akismet
|
||||||
$this->comment = $comment;
|
$this->comment = $comment;
|
||||||
$this->_formatCommentArray();
|
$this->_formatCommentArray();
|
||||||
|
|
||||||
if(!isset($this->comment['user_ip'])) {
|
if(!isset($this->comment['user_ip'])) {
|
||||||
$this->comment['user_ip'] = ($_SERVER['REMOTE_ADDR'] != getenv('SERVER_ADDR')) ? $_SERVER['REMOTE_ADDR'] : getenv('HTTP_X_FORWARDED_FOR');
|
$this->comment['user_ip'] = ($_SERVER['REMOTE_ADDR'] != getenv('SERVER_ADDR')) ? $_SERVER['REMOTE_ADDR'] : getenv('HTTP_X_FORWARDED_FOR');
|
||||||
}
|
}
|
||||||
if(!isset($this->comment['user_agent'])) {
|
if(!isset($this->comment['user_agent'])) {
|
||||||
$this->comment['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
|
$this->comment['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
|
||||||
}
|
}
|
||||||
if(!isset($this->comment['referrer'])) {
|
if(!isset($this->comment['referrer'])) {
|
||||||
$this->comment['referrer'] = $_SERVER['HTTP_REFERER'];
|
$this->comment['referrer'] = $_SERVER['HTTP_REFERER'];
|
||||||
}
|
}
|
||||||
$this->comment['blog'] = $blogUrl;
|
$this->comment['blog'] = $blogUrl;
|
||||||
|
|
||||||
// Connect to the Akismet server and populate errors if they exist
|
// Connect to the Akismet server and populate errors if they exist
|
||||||
$this->http = new AkismetHttpClient($this->akismetServer, $blogUrl, $apiKey);
|
$this->http = new AkismetHttpClient($this->akismetServer, $blogUrl, $apiKey);
|
||||||
if($this->http->errorsExist()) {
|
if($this->http->errorsExist()) {
|
||||||
$this->errors = array_merge($this->errors, $this->http->getErrors());
|
$this->errors = array_merge($this->errors, $this->http->getErrors());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the API key is valid
|
// Check if the API key is valid
|
||||||
if(!$this->_isValidApiKey($apiKey)) {
|
if(!$this->_isValidApiKey($apiKey)) {
|
||||||
$this->setError(AKISMET_INVALID_KEY, "Your Akismet API key is not valid.");
|
$this->setError(AKISMET_INVALID_KEY, "Your Akismet API key is not valid.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Query the Akismet and determine if the comment is spam or not
|
* Query the Akismet and determine if the comment is spam or not
|
||||||
*
|
*
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
function isSpam() {
|
function isSpam() {
|
||||||
$response = $this->http->getResponse($this->_getQueryString(), 'comment-check');
|
$response = $this->http->getResponse($this->_getQueryString(), 'comment-check');
|
||||||
|
|
||||||
return ($response == "true");
|
return ($response == "true");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Submit this comment as an unchecked spam to the Akismet server
|
* Submit this comment as an unchecked spam to the Akismet server
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
function submitSpam() {
|
function submitSpam() {
|
||||||
$this->http->getResponse($this->_getQueryString(), 'submit-spam');
|
$this->http->getResponse($this->_getQueryString(), 'submit-spam');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Submit a false-positive comment as "ham" to the Akismet server
|
* Submit a false-positive comment as "ham" to the Akismet server
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
function submitHam() {
|
function submitHam() {
|
||||||
$this->http->getResponse($this->_getQueryString(), 'submit-ham');
|
$this->http->getResponse($this->_getQueryString(), 'submit-ham');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check with the Akismet server to determine if the API key is valid
|
* Check with the Akismet server to determine if the API key is valid
|
||||||
*
|
*
|
||||||
* @access Protected
|
* @access Protected
|
||||||
* @param String $key The Wordpress API key passed from the constructor argument
|
* @param String $key The Wordpress API key passed from the constructor argument
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
function _isValidApiKey($key) {
|
function _isValidApiKey($key) {
|
||||||
$keyCheck = $this->http->getResponse("key=".$this->apiKey."&blog=".$this->blogUrl, 'verify-key');
|
$keyCheck = $this->http->getResponse("key=".$this->apiKey."&blog=".$this->blogUrl, 'verify-key');
|
||||||
|
|
||||||
return ($keyCheck == "valid");
|
return ($keyCheck == "valid");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Format the comment array in accordance to the Akismet API
|
* Format the comment array in accordance to the Akismet API
|
||||||
*
|
*
|
||||||
* @access Protected
|
* @access Protected
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
function _formatCommentArray() {
|
function _formatCommentArray() {
|
||||||
$format = array(
|
$format = array(
|
||||||
'type' => 'comment_type',
|
'type' => 'comment_type',
|
||||||
'author' => 'comment_author',
|
'author' => 'comment_author',
|
||||||
'email' => 'comment_author_email',
|
'email' => 'comment_author_email',
|
||||||
'website' => 'comment_author_url',
|
'website' => 'comment_author_url',
|
||||||
'body' => 'comment_content'
|
'body' => 'comment_content'
|
||||||
);
|
);
|
||||||
|
|
||||||
foreach($format as $short => $long) {
|
foreach($format as $short => $long) {
|
||||||
if(isset($this->comment[$short])) {
|
if(isset($this->comment[$short])) {
|
||||||
$this->comment[$long] = $this->comment[$short];
|
$this->comment[$long] = $this->comment[$short];
|
||||||
unset($this->comment[$short]);
|
unset($this->comment[$short]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Build a query string for use with HTTP requests
|
* Build a query string for use with HTTP requests
|
||||||
*
|
*
|
||||||
* @access Protected
|
* @access Protected
|
||||||
* @return String
|
* @return String
|
||||||
*/
|
*/
|
||||||
function _getQueryString() {
|
function _getQueryString() {
|
||||||
foreach($_SERVER as $key => $value) {
|
foreach($_SERVER as $key => $value) {
|
||||||
if(!in_array($key, $this->ignore)) {
|
if(!in_array($key, $this->ignore)) {
|
||||||
if($key == 'REMOTE_ADDR') {
|
if($key == 'REMOTE_ADDR') {
|
||||||
$this->comment[$key] = $this->comment['user_ip'];
|
$this->comment[$key] = $this->comment['user_ip'];
|
||||||
} else {
|
} else {
|
||||||
$this->comment[$key] = $value;
|
$this->comment[$key] = $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$query_string = '';
|
$query_string = '';
|
||||||
|
|
||||||
foreach($this->comment as $key => $data) {
|
foreach($this->comment as $key => $data) {
|
||||||
if(is_string($data)) {
|
if(is_string($data)) {
|
||||||
$query_string .= $key . '=' . urlencode(stripslashes($data)) . '&';
|
$query_string .= $key . '=' . urlencode(stripslashes($data)) . '&';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $query_string;
|
return $query_string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
@ -1,218 +1,218 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Name: Danbooru Theme
|
* Name: Danbooru Theme
|
||||||
* Author: Bzchan <bzchan@animemahou.com>
|
* Author: Bzchan <bzchan@animemahou.com>
|
||||||
* Link: http://trac.shishnet.org/shimmie2/
|
* Link: http://trac.shishnet.org/shimmie2/
|
||||||
* License: GPLv2
|
* License: GPLv2
|
||||||
* Description: This is a simple theme changing the css to make shimme
|
* Description: This is a simple theme changing the css to make shimme
|
||||||
* look more like danbooru as well as adding a custom links
|
* look more like danbooru as well as adding a custom links
|
||||||
* bar and title to the top of every page.
|
* bar and title to the top of every page.
|
||||||
*/
|
*/
|
||||||
//Small changes added by zshall <http://seemslegit.com>
|
//Small changes added by zshall <http://seemslegit.com>
|
||||||
//Changed CSS and layout to make shimmie look even more like danbooru
|
//Changed CSS and layout to make shimmie look even more like danbooru
|
||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
Danbooru Theme - Notes (Bzchan)
|
Danbooru Theme - Notes (Bzchan)
|
||||||
|
|
||||||
Files: default.php, sidebar.js, style.css
|
Files: default.php, sidebar.js, style.css
|
||||||
|
|
||||||
How to use a theme
|
How to use a theme
|
||||||
- Copy the danbooru folder with all its contained files into the "themes"
|
- Copy the danbooru folder with all its contained files into the "themes"
|
||||||
directory in your shimmie installation.
|
directory in your shimmie installation.
|
||||||
- Log into your shimmie and change the Theme in the Board Config to your
|
- Log into your shimmie and change the Theme in the Board Config to your
|
||||||
desired theme.
|
desired theme.
|
||||||
|
|
||||||
Changes in this theme include
|
Changes in this theme include
|
||||||
- Adding and editing various elements in the style.css file.
|
- Adding and editing various elements in the style.css file.
|
||||||
- $site_name and $front_name retreival from config added.
|
- $site_name and $front_name retreival from config added.
|
||||||
- $custom_link and $title_link preparation just before html is outputed.
|
- $custom_link and $title_link preparation just before html is outputed.
|
||||||
- Altered outputed html to include the custom links and removed heading
|
- Altered outputed html to include the custom links and removed heading
|
||||||
from being displayed (subheading is still displayed)
|
from being displayed (subheading is still displayed)
|
||||||
- Note that only the sidebar has been left aligned. Could not properly
|
- Note that only the sidebar has been left aligned. Could not properly
|
||||||
left align the main block because blocks without headers currently do
|
left align the main block because blocks without headers currently do
|
||||||
not have ids on there div elements. (this was a problem because
|
not have ids on there div elements. (this was a problem because
|
||||||
paginator block must be centered and everything else left aligned)
|
paginator block must be centered and everything else left aligned)
|
||||||
|
|
||||||
Tips
|
Tips
|
||||||
- You can change custom links to point to whatever pages you want as well as adding
|
- You can change custom links to point to whatever pages you want as well as adding
|
||||||
more custom links.
|
more custom links.
|
||||||
- The main title link points to the Front Page set in your Board Config options.
|
- 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.
|
- 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
|
- Themes make no changes to your database or main code files so you can switch
|
||||||
back and forward to other themes all you like.
|
back and forward to other themes all you like.
|
||||||
|
|
||||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
class Layout {
|
class Layout {
|
||||||
public function display_page($page) {
|
public function display_page($page) {
|
||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
$theme_name = $config->get_string('theme');
|
$theme_name = $config->get_string('theme');
|
||||||
$base_href = $config->get_string('base_href');
|
$base_href = $config->get_string('base_href');
|
||||||
$data_href = get_base_href();
|
$data_href = get_base_href();
|
||||||
$contact_link = $config->get_string('contact_link');
|
$contact_link = $config->get_string('contact_link');
|
||||||
$version = "Shimmie-".VERSION;
|
$version = "Shimmie-".VERSION;
|
||||||
|
|
||||||
|
|
||||||
$header_html = "";
|
$header_html = "";
|
||||||
foreach($page->headers as $line) {
|
foreach($page->headers as $line) {
|
||||||
$header_html .= "\t\t$line\n";
|
$header_html .= "\t\t$line\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
$left_block_html = "";
|
$left_block_html = "";
|
||||||
$user_block_html = "";
|
$user_block_html = "";
|
||||||
$main_block_html = "";
|
$main_block_html = "";
|
||||||
|
|
||||||
foreach($page->blocks as $block) {
|
foreach($page->blocks as $block) {
|
||||||
switch($block->section) {
|
switch($block->section) {
|
||||||
case "left":
|
case "left":
|
||||||
$left_block_html .= $this->block_to_html($block, true);
|
$left_block_html .= $this->block_to_html($block, true);
|
||||||
break;
|
break;
|
||||||
case "user":
|
case "user":
|
||||||
$user_block_html .= $block->body; // $this->block_to_html($block, true);
|
$user_block_html .= $block->body; // $this->block_to_html($block, true);
|
||||||
break;
|
break;
|
||||||
case "main":
|
case "main":
|
||||||
if($block->header == "Images") {
|
if($block->header == "Images") {
|
||||||
$block->header = " ";
|
$block->header = " ";
|
||||||
}
|
}
|
||||||
$main_block_html .= $this->block_to_html($block, false);
|
$main_block_html .= $this->block_to_html($block, false);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
print "<p>error: {$block->header} using an unknown section ({$block->section})";
|
print "<p>error: {$block->header} using an unknown section ({$block->section})";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$debug = get_debug_info();
|
$debug = get_debug_info();
|
||||||
|
|
||||||
$contact = empty($contact_link) ? "" : "<br><a href='$contact_link'>Contact</a>";
|
$contact = empty($contact_link) ? "" : "<br><a href='$contact_link'>Contact</a>";
|
||||||
|
|
||||||
if(empty($this->subheading)) {
|
if(empty($this->subheading)) {
|
||||||
$subheading = "";
|
$subheading = "";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$subheading = "<div id='subtitle'>{$this->subheading}</div>";
|
$subheading = "<div id='subtitle'>{$this->subheading}</div>";
|
||||||
}
|
}
|
||||||
|
|
||||||
$site_name = $config->get_string('title'); // bzchan: change from normal default to get title for top of page
|
$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
|
$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
|
// bzchan: CUSTOM LINKS are prepared here, change these to whatever you like
|
||||||
$custom_links = "";
|
$custom_links = "";
|
||||||
$custom_links .= "<li><a href='".make_link('user')."'>My Account</a></li>";
|
$custom_links .= "<li><a href='".make_link('user')."'>My Account</a></li>";
|
||||||
$custom_links .= "<li><a href='".make_link('post/list')."'>Posts</a></li>";
|
$custom_links .= "<li><a href='".make_link('post/list')."'>Posts</a></li>";
|
||||||
$custom_links .= "<li><a href='".make_link('comment/list')."'>Comments</a></li>";
|
$custom_links .= "<li><a href='".make_link('comment/list')."'>Comments</a></li>";
|
||||||
$custom_links .= "<li><a href='".make_link('tags')."'>Tags</a></li>";
|
$custom_links .= "<li><a href='".make_link('tags')."'>Tags</a></li>";
|
||||||
$custom_links .= "<li><a href='".make_link('upload')."'>Upload</a></li>";
|
$custom_links .= "<li><a href='".make_link('upload')."'>Upload</a></li>";
|
||||||
$custom_links .= "<li><a href='".make_link('wiki')."'>Wiki</a></li>";
|
$custom_links .= "<li><a href='".make_link('wiki')."'>Wiki</a></li>";
|
||||||
$custom_links .= "<li><a href='".make_link('wiki/more')."'>More »</a></li>";
|
$custom_links .= "<li><a href='".make_link('wiki/more')."'>More »</a></li>";
|
||||||
|
|
||||||
$custom_sublinks = "";
|
$custom_sublinks = "";
|
||||||
// hack
|
// hack
|
||||||
global $user;
|
global $user;
|
||||||
$username = url_escape($user->name);
|
$username = url_escape($user->name);
|
||||||
// hack
|
// hack
|
||||||
$qp = _get_query_parts();
|
$qp = _get_query_parts();
|
||||||
// php sucks
|
// php sucks
|
||||||
switch($qp[0]) {
|
switch($qp[0]) {
|
||||||
default:
|
default:
|
||||||
$custom_sublinks .= $user_block_html;
|
$custom_sublinks .= $user_block_html;
|
||||||
break;
|
break;
|
||||||
case "post":
|
case "post":
|
||||||
case "comment":
|
case "comment":
|
||||||
case "upload":
|
case "upload":
|
||||||
$custom_sublinks .= "<li><a href='".make_link('post/list')."'>All</a></li>";
|
$custom_sublinks .= "<li><a href='".make_link('post/list')."'>All</a></li>";
|
||||||
$custom_sublinks .= "<li><a href='".make_link("post/list/favorited_by=$username/1")."'>My Favorites</a></li>";
|
$custom_sublinks .= "<li><a href='".make_link("post/list/favorited_by=$username/1")."'>My Favorites</a></li>";
|
||||||
$custom_sublinks .= "<li><a href='".make_link("wiki/posts")."'>Help</a></li>";
|
$custom_sublinks .= "<li><a href='".make_link("wiki/posts")."'>Help</a></li>";
|
||||||
break;
|
break;
|
||||||
case "wiki":
|
case "wiki":
|
||||||
$custom_sublinks .= "<li><a href='".make_link('wiki')."'>Index</a></li>";
|
$custom_sublinks .= "<li><a href='".make_link('wiki')."'>Index</a></li>";
|
||||||
$custom_sublinks .= "<li><a href='".make_link("wiki/rules")."'>Rules</a></li>";
|
$custom_sublinks .= "<li><a href='".make_link("wiki/rules")."'>Rules</a></li>";
|
||||||
$custom_sublinks .= "<li><a href='".make_link("wiki/wiki")."'>Help</a></li>";
|
$custom_sublinks .= "<li><a href='".make_link("wiki/wiki")."'>Help</a></li>";
|
||||||
break;
|
break;
|
||||||
case "tags":
|
case "tags":
|
||||||
$custom_sublinks .= "<li><a href='".make_link('tags/map')."'>Map</a></li>";
|
$custom_sublinks .= "<li><a href='".make_link('tags/map')."'>Map</a></li>";
|
||||||
$custom_sublinks .= "<li><a href='".make_link('tags/alphabetic')."'>Alphabetic</a></li>";
|
$custom_sublinks .= "<li><a href='".make_link('tags/alphabetic')."'>Alphabetic</a></li>";
|
||||||
$custom_sublinks .= "<li><a href='".make_link('tags/popularity')."'>Popularity</a></li>";
|
$custom_sublinks .= "<li><a href='".make_link('tags/popularity')."'>Popularity</a></li>";
|
||||||
$custom_sublinks .= "<li><a href='".make_link('tags/categories')."'>Categories</a></li>";
|
$custom_sublinks .= "<li><a href='".make_link('tags/categories')."'>Categories</a></li>";
|
||||||
$custom_sublinks .= "<li><a href='".make_link('alias/list')."'>Aliases</a></li>";
|
$custom_sublinks .= "<li><a href='".make_link('alias/list')."'>Aliases</a></li>";
|
||||||
$custom_sublinks .= "<li><a href='".make_link("wiki/tags")."'>Help</a></li>";
|
$custom_sublinks .= "<li><a href='".make_link("wiki/tags")."'>Help</a></li>";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// bzchan: failed attempt to add heading after title_link (failure was it looked bad)
|
// bzchan: failed attempt to add heading after title_link (failure was it looked bad)
|
||||||
//if($this->heading==$site_name)$this->heading = '';
|
//if($this->heading==$site_name)$this->heading = '';
|
||||||
//$title_link = "<h1><a href='".make_link($main_page)."'>$site_name</a>/$this->heading</h1>";
|
//$title_link = "<h1><a href='".make_link($main_page)."'>$site_name</a>/$this->heading</h1>";
|
||||||
|
|
||||||
// bzchan: prepare main title link
|
// bzchan: prepare main title link
|
||||||
$title_link = "<h1 id='site-title'><a href='".make_link($main_page)."'>$site_name</a></h1>";
|
$title_link = "<h1 id='site-title'><a href='".make_link($main_page)."'>$site_name</a></h1>";
|
||||||
|
|
||||||
if($page->left_enabled) {
|
if($page->left_enabled) {
|
||||||
$left = "<div id='nav'>$left_block_html</div>";
|
$left = "<div id='nav'>$left_block_html</div>";
|
||||||
$withleft = "withleft";
|
$withleft = "withleft";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$left = "";
|
$left = "";
|
||||||
$withleft = "noleft";
|
$withleft = "noleft";
|
||||||
}
|
}
|
||||||
|
|
||||||
print <<<EOD
|
print <<<EOD
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>{$page->title}</title>
|
<title>{$page->title}</title>
|
||||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||||
<link rel="stylesheet" href="$data_href/themes/$theme_name/style.css" type="text/css">
|
<link rel="stylesheet" href="$data_href/themes/$theme_name/style.css" type="text/css">
|
||||||
$header_html
|
$header_html
|
||||||
<script src='$data_href/themes/$theme_name/sidebar.js' type='text/javascript'></script>
|
<script src='$data_href/themes/$theme_name/sidebar.js' type='text/javascript'></script>
|
||||||
<script src='$data_href/themes/$theme_name/script.js' type='text/javascript'></script>
|
<script src='$data_href/themes/$theme_name/script.js' type='text/javascript'></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div id="header">
|
<div id="header">
|
||||||
$title_link
|
$title_link
|
||||||
<ul id="navbar" class="flat-list">
|
<ul id="navbar" class="flat-list">
|
||||||
$custom_links
|
$custom_links
|
||||||
</ul>
|
</ul>
|
||||||
<ul id="subnavbar" class="flat-list">
|
<ul id="subnavbar" class="flat-list">
|
||||||
$custom_sublinks
|
$custom_sublinks
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
$subheading
|
$subheading
|
||||||
|
|
||||||
$left
|
$left
|
||||||
<div id="body" class="$withleft">$main_block_html</div>
|
<div id="body" class="$withleft">$main_block_html</div>
|
||||||
|
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<em>
|
<em>
|
||||||
Images © their respective owners,
|
Images © their respective owners,
|
||||||
<a href="http://code.shishnet.org/shimmie2/">$version</a> ©
|
<a href="http://code.shishnet.org/shimmie2/">$version</a> ©
|
||||||
<a href="http://www.shishnet.org/">Shish</a> 2007-2009,
|
<a href="http://www.shishnet.org/">Shish</a> 2007-2009,
|
||||||
based on the Danbooru concept.
|
based on the Danbooru concept.
|
||||||
$debug
|
$debug
|
||||||
$contact
|
$contact
|
||||||
</em>
|
</em>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
EOD;
|
EOD;
|
||||||
}
|
}
|
||||||
|
|
||||||
function block_to_html($block, $hidable=false) {
|
function block_to_html($block, $hidable=false) {
|
||||||
$h = $block->header;
|
$h = $block->header;
|
||||||
$s = $block->section;
|
$s = $block->section;
|
||||||
$b = $block->body;
|
$b = $block->body;
|
||||||
$html = "";
|
$html = "";
|
||||||
if($hidable) {
|
if($hidable) {
|
||||||
$i = str_replace(' ', '_', $h.$s);
|
$i = str_replace(' ', '_', $h.$s);
|
||||||
if(!is_null($h)) $html .= "\n<h3 id='$i-toggle' onclick=\"toggle('$i')\">$h</h3>\n";
|
if(!is_null($h)) $html .= "\n<h3 id='$i-toggle' onclick=\"toggle('$i')\">$h</h3>\n";
|
||||||
if(!is_null($b)) $html .= "<div id='$i'>$b</div>\n";
|
if(!is_null($b)) $html .= "<div id='$i'>$b</div>\n";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$i = str_replace(' ', '_', $h.$s);
|
$i = str_replace(' ', '_', $h.$s);
|
||||||
if(!is_null($h)) $html .= "\n<h3>$h</h3>\n";
|
if(!is_null($h)) $html .= "\n<h3>$h</h3>\n";
|
||||||
if(!is_null($b)) $html .= "<div id='$i'>$b</div>\n";
|
if(!is_null($b)) $html .= "<div id='$i'>$b</div>\n";
|
||||||
}
|
}
|
||||||
return $html;
|
return $html;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user