Merge branch 'master' of github.com:shish/shimmie2

This commit is contained in:
Shish 2012-03-11 04:33:23 +00:00
commit e4c95d5b56
17 changed files with 122 additions and 108 deletions

View File

@ -26,7 +26,7 @@ because the feature doesn't work yet :P
Requirements Requirements
~~~~~~~~~~~~ ~~~~~~~~~~~~
MySQL 5.1+ (with experimental support for PostgreSQL 8+ and SQLite 3) MySQL 5.1+ (with experimental support for PostgreSQL 8+ and SQLite 3)
PHP 5.2+ PHP 5.2.6+
GD or ImageMagick GD or ImageMagick

View File

@ -23,12 +23,10 @@ class AdminPageTest extends ShimmieWebTestCase {
$this->get_page('admin'); $this->get_page('admin');
$this->assert_title("Admin Tools"); $this->assert_title("Admin Tools");
$this->set_field("action", "lowercase all tags"); $this->click("All tags to lowercase");
$this->click("Go");
$this->get_page("post/view/$image_id_1"); $this->get_page("post/view/$image_id_1");
// FIXME: doesn't work? $this->assert_title("Image $image_id_1: testcase$ts");
//$this->assert_title("Image $image_id_1: testcase$ts");
$this->delete_image($image_id_1); $this->delete_image($image_id_1);
$this->log_out(); $this->log_out();
@ -39,8 +37,7 @@ class AdminPageTest extends ShimmieWebTestCase {
$this->log_in_as_admin(); $this->log_in_as_admin();
$this->get_page('admin'); $this->get_page('admin');
$this->assert_title("Admin Tools"); $this->assert_title("Admin Tools");
$this->set_field("action", "recount tag use"); $this->click("Recount tag use");
$this->click("Go");
$this->log_out(); $this->log_out();
} }
@ -48,8 +45,7 @@ class AdminPageTest extends ShimmieWebTestCase {
$this->log_in_as_admin(); $this->log_in_as_admin();
$this->get_page('admin'); $this->get_page('admin');
$this->assert_title("Admin Tools"); $this->assert_title("Admin Tools");
$this->set_field("action", "purge unused tags"); $this->click("Purge unused tags");
$this->click("Go");
$this->log_out(); $this->log_out();
} }
@ -57,8 +53,7 @@ class AdminPageTest extends ShimmieWebTestCase {
$this->log_in_as_admin(); $this->log_in_as_admin();
$this->get_page('admin'); $this->get_page('admin');
$this->assert_title("Admin Tools"); $this->assert_title("Admin Tools");
$this->set_field("action", "database dump"); $this->click("Download database contents");
$this->click("Go");
$this->log_out(); $this->log_out();
} }
} }

View File

@ -54,47 +54,50 @@ class Artists extends Extension {
public function try_install() { public function try_install() {
global $config, $database; global $config, $database;
if ($config->get_int("ext_artists_version") < 1) if ($config->get_int("ext_artists_version") < 1) {
{ $database->create_table("artists", "
$database->create_table("artists", id SCORE_AIPK,
"id SCORE_AIPK user_id INTEGER NOT NULL,
, user_id INTEGER NOT NULL name VARCHAR(255) NOT NULL,
, name VARCHAR(255) NOT NULL created DATETIME NOT NULL,
, created DATETIME NOT NULL updated DATETIME NOT NULL,
, updated DATETIME NOT NULL notes TEXT,
, notes TEXT INDEX(id),
, INDEX(id) FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE
"); ");
$database->create_table("artist_members", $database->create_table("artist_members", "
"id SCORE_AIPK id SCORE_AIPK,
, artist_id INTEGER NOT NULL artist_id INTEGER NOT NULL,
, user_id INTEGER NOT NULL user_id INTEGER NOT NULL,
, name VARCHAR(255) NOT NULL name VARCHAR(255) NOT NULL,
, created DATETIME NOT NULL created DATETIME NOT NULL,
, updated DATETIME NOT NULL updated DATETIME NOT NULL,
, INDEX (id) INDEX (id),
, FOREIGN KEY (artist_id) REFERENCES artists (id) ON UPDATE CASCADE ON DELETE CASCADE FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
"); FOREIGN KEY (artist_id) REFERENCES artists (id) ON UPDATE CASCADE ON DELETE CASCADE
$database->create_table("artist_alias", ");
"id SCORE_AIPK $database->create_table("artist_alias", "
, artist_id INTEGER NOT NULL id SCORE_AIPK,
, user_id INTEGER NOT NULL artist_id INTEGER NOT NULL,
, created DATETIME user_id INTEGER NOT NULL,
, updated DATETIME created DATETIME,
, alias VARCHAR(255) updated DATETIME,
, INDEX (id) alias VARCHAR(255),
, FOREIGN KEY (artist_id) REFERENCES artists (id) ON UPDATE CASCADE ON DELETE CASCADE INDEX (id),
"); FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
$database->create_table("artist_urls", FOREIGN KEY (artist_id) REFERENCES artists (id) ON UPDATE CASCADE ON DELETE CASCADE
"id SCORE_AIPK ");
, artist_id INTEGER NOT NULL $database->create_table("artist_urls", "
, user_id INTEGER NOT NULL id SCORE_AIPK,
, created DATETIME NOT NULL artist_id INTEGER NOT NULL,
, updated DATETIME NOT NULL user_id INTEGER NOT NULL,
, url VARCHAR(1000) NOT NULL created DATETIME NOT NULL,
, INDEX (id) updated DATETIME NOT NULL,
, FOREIGN KEY (artist_id) REFERENCES artists (id) ON UPDATE CASCADE ON DELETE CASCADE url VARCHAR(1000) NOT NULL,
"); INDEX (id),
FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (artist_id) REFERENCES artists (id) ON UPDATE CASCADE ON DELETE CASCADE
");
$database->execute("ALTER TABLE images ADD COLUMN author VARCHAR(255) NULL", array()); $database->execute("ALTER TABLE images ADD COLUMN author VARCHAR(255) NULL", array());
$config->set_int("artistsPerPage", 20); $config->set_int("artistsPerPage", 20);

2
contrib/browser_search/main.php Executable file → Normal file
View File

@ -34,7 +34,7 @@ class BrowserSearch extends Extension {
$search_title = $config->get_string('title'); $search_title = $config->get_string('title');
$search_form_url = make_link('post/list/{searchTerms}'); $search_form_url = make_link('post/list/{searchTerms}');
$suggenton_url = make_link('browser_search/')."{searchTerms}"; $suggenton_url = make_link('browser_search/')."{searchTerms}";
$icon_b64 = base64_encode(file_get_contents("favicon.ico")); $icon_b64 = base64_encode(file_get_contents("lib/static/favicon.ico"));
// Now for the XML // Now for the XML
$xml = " $xml = "

View File

@ -161,8 +161,8 @@ class Favorites extends Extension {
$database->Execute("DELETE FROM user_favorites WHERE image_id NOT IN (SELECT id FROM images)"); $database->Execute("DELETE FROM user_favorites WHERE image_id NOT IN (SELECT id FROM images)");
log_info("favorites", "Adding foreign keys to user favourites"); log_info("favorites", "Adding foreign keys to user favourites");
$database->Execute("ALTER TABLE user_favorites ADD CONSTRAINT foreign_user_favorites_user_id FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;"); $database->Execute("ALTER TABLE user_favorites ADD FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;");
$database->Execute("ALTER TABLE user_favorites ADD CONSTRAINT user_favorites_image_id FOREIGN KEY (image_id) REFERENCES images(id) ON DELETE CASCADE;"); $database->Execute("ALTER TABLE user_favorites ADD FOREIGN KEY (image_id) REFERENCES images(id) ON DELETE CASCADE;");
$config->set_int("ext_favorites_version", 2); $config->set_int("ext_favorites_version", 2);
} }
} }

View File

@ -9,42 +9,48 @@
*/ */
class Forum extends Extension { class Forum extends Extension {
public function onInitExt(InitExtEvent $event) { public function onInitExt(InitExtEvent $event) {
global $config, $database; global $config, $database;
// shortcut to latest // shortcut to latest
if ($config->get_int("forum_version") < 1)
{
$database->create_table("forum_threads", "
id SCORE_AIPK,
sticky SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N,
title VARCHAR(255) NOT NULL,
user_id INTEGER NOT NULL,
date DATETIME NOT NULL,
uptodate DATETIME NOT NULL,
INDEX (date)
");
$database->create_table("forum_posts", if ($config->get_int("forum_version") < 1) {
" id SCORE_AIPK, $database->create_table("forum_threads", "
thread_id INTEGER NOT NULL, id SCORE_AIPK,
user_id INTEGER NOT NULL, sticky SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N,
date DATETIME NOT NULL, title VARCHAR(255) NOT NULL,
message TEXT, user_id INTEGER NOT NULL,
INDEX (date), date DATETIME NOT NULL,
FOREIGN KEY (thread_id) REFERENCES forum_threads (id) ON UPDATE CASCADE ON DELETE CASCADE uptodate DATETIME NOT NULL,
"); INDEX (date),
FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE RESTRICT
");
$config->set_int("forum_version", 1); $database->create_table("forum_posts", "
$config->set_int("forumTitleSubString", 25); id SCORE_AIPK,
$config->set_int("forumThreadsPerPage", 15); thread_id INTEGER NOT NULL,
$config->set_int("forumPostsPerPage", 15); user_id INTEGER NOT NULL,
date DATETIME NOT NULL,
$config->set_int("forumMaxCharsPerPost", 512); message TEXT,
INDEX (date),
log_info("forum", "extension installed"); FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE RESTRICT,
} FOREIGN KEY (thread_id) REFERENCES forum_threads (id) ON UPDATE CASCADE ON DELETE CASCADE
");
$config->set_int("forum_version", 2);
$config->set_int("forumTitleSubString", 25);
$config->set_int("forumThreadsPerPage", 15);
$config->set_int("forumPostsPerPage", 15);
$config->set_int("forumMaxCharsPerPost", 512);
log_info("forum", "extension installed");
}
if ($config->get_int("forum_version") < 2) {
$database->execute("ALTER TABLE forum_threads ADD FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE RESTRICT");
$database->execute("ALTER TABLE forum_posts ADD FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE RESTRICT");
$config->set_int("forum_version", 2);
}
} }
public function onSetupBuilding(SetupBuildingEvent $event) { public function onSetupBuilding(SetupBuildingEvent $event) {

View File

@ -159,6 +159,11 @@ class IPBan extends Extension {
$database->execute("ALTER TABLE bans CHANGE ip ip VARCHAR(15)"); $database->execute("ALTER TABLE bans CHANGE ip ip VARCHAR(15)");
$config->set_int("ext_ipban_version", 6); $config->set_int("ext_ipban_version", 6);
} }
if($config->get_int("ext_ipban_version") == 6) {
$database->Execute("ALTER TABLE bans ADD FOREIGN KEY (banner_id) REFERENCES users(id) ON DELETE CASCADE");
$config->set_int("ext_ipban_version", 7);
}
} }
// }}} // }}}
// deal with banned person {{{ // deal with banned person {{{

View File

@ -27,6 +27,7 @@ class Notes extends Extension {
width INTEGER NOT NULL, width INTEGER NOT NULL,
note TEXT NOT NULL, note TEXT NOT NULL,
INDEX (image_id), INDEX (image_id),
FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (image_id) REFERENCES images(id) ON DELETE CASCADE FOREIGN KEY (image_id) REFERENCES images(id) ON DELETE CASCADE
"); ");
@ -36,6 +37,7 @@ class Notes extends Extension {
user_id INTEGER NOT NULL, user_id INTEGER NOT NULL,
date DATETIME NOT NULL, date DATETIME NOT NULL,
INDEX (image_id), INDEX (image_id),
FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (image_id) REFERENCES images(id) ON DELETE CASCADE FOREIGN KEY (image_id) REFERENCES images(id) ON DELETE CASCADE
"); ");
@ -54,6 +56,7 @@ class Notes extends Extension {
width INTEGER NOT NULL, width INTEGER NOT NULL,
note TEXT NOT NULL, note TEXT NOT NULL,
INDEX (image_id), INDEX (image_id),
FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (note_id) REFERENCES notes(id) ON DELETE CASCADE FOREIGN KEY (note_id) REFERENCES notes(id) ON DELETE CASCADE
"); ");

View File

@ -61,7 +61,7 @@ class PrivMsg extends Extension {
FOREIGN KEY (from_id) REFERENCES users(id) ON DELETE CASCADE, FOREIGN KEY (from_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (to_id) REFERENCES users(id) ON DELETE CASCADE FOREIGN KEY (to_id) REFERENCES users(id) ON DELETE CASCADE
"); ");
$config->set_int("pm_version", 1); $config->set_int("pm_version", 2);
log_info("pm", "extension installed"); log_info("pm", "extension installed");
} }
@ -70,8 +70,8 @@ class PrivMsg extends Extension {
$database->Execute("delete from private_message where to_id not in (select id from users);"); $database->Execute("delete from private_message where to_id not in (select id from users);");
$database->Execute("delete from private_message where from_id not in (select id from users);"); $database->Execute("delete from private_message where from_id not in (select id from users);");
$database->Execute("ALTER TABLE private_message $database->Execute("ALTER TABLE private_message
ADD CONSTRAINT foreign_private_message_from_id FOREIGN KEY (from_id) REFERENCES users(id) ON DELETE CASCADE, ADD FOREIGN KEY (from_id) REFERENCES users(id) ON DELETE CASCADE,
ADD CONSTRAINT foreign_private_message_to_id FOREIGN KEY (to_id) REFERENCES users(id) ON DELETE CASCADE;"); ADD FOREIGN KEY (to_id) REFERENCES users(id) ON DELETE CASCADE;");
$config->set_int("pm_version", 2); $config->set_int("pm_version", 2);
log_info("pm", "extension installed"); log_info("pm", "extension installed");
} }

View File

@ -35,12 +35,15 @@ class Pools extends Extension {
description TEXT, description TEXT,
date DATETIME NOT NULL, date DATETIME NOT NULL,
posts INTEGER NOT NULL DEFAULT 0, posts INTEGER NOT NULL DEFAULT 0,
INDEX (id) INDEX (id),
FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE
"); ");
$database->create_table("pool_images", " $database->create_table("pool_images", "
pool_id INTEGER NOT NULL, pool_id INTEGER NOT NULL,
image_id INTEGER NOT NULL, image_id INTEGER NOT NULL,
image_order INTEGER NOT NULL DEFAULT 0 image_order INTEGER NOT NULL DEFAULT 0,
FOREIGN KEY (pool_id) REFERENCES pools(id) ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (image_id) REFERENCES images(id) ON UPDATE CASCADE ON DELETE CASCADE
"); ");
$database->create_table("pool_history", " $database->create_table("pool_history", "
id SCORE_AIPK, id SCORE_AIPK,
@ -50,7 +53,9 @@ class Pools extends Extension {
images TEXT, images TEXT,
count INTEGER NOT NULL DEFAULT 0, count INTEGER NOT NULL DEFAULT 0,
date DATETIME NOT NULL, date DATETIME NOT NULL,
INDEX (id) INDEX (id),
FOREIGN KEY (pool_id) REFERENCES pools(id) ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE
"); ");
// Set the defaults for the pools extension // Set the defaults for the pools extension

View File

@ -4,8 +4,8 @@
* Author: Shish <webmaster@shishnet.org> * Author: Shish <webmaster@shishnet.org>
* Description: A JSON interface to shimmie data [WARNING] * Description: A JSON interface to shimmie data [WARNING]
* Documentation: * Documentation:
* <b>Admin Warning:</b> this exposes private data, eg IP addresses * <b>Admin Warning -</b> this exposes private data, eg IP addresses
* <p><b>Developer Warning:</b> the API is unstable; notably, private data may get hidden * <p><b>Developer Warning -</b> the API is unstable; notably, private data may get hidden
* <p><b><u>Usage:</b></u> * <p><b><u>Usage:</b></u>
* <p><b>get_tags</b> - List of all tags. (May contain unused tags) * <p><b>get_tags</b> - List of all tags. (May contain unused tags)
* <br><ul>tags - <i>Optional</i> - Search for more specific tags (Searchs TAG*)</ul> * <br><ul>tags - <i>Optional</i> - Search for more specific tags (Searchs TAG*)</ul>

View File

@ -69,7 +69,7 @@ class Wiki extends Extension {
locked SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N, locked SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N,
body TEXT NOT NULL, body TEXT NOT NULL,
UNIQUE (title, revision), UNIQUE (title, revision),
FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE CASCADE FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE RESTRICT
"); ");
$config->set_int("ext_wiki_version", 2); $config->set_int("ext_wiki_version", 2);
} }

View File

@ -907,12 +907,7 @@ $_load_start = microtime(true);
function get_debug_info() { function get_debug_info() {
global $config, $_event_count, $database, $_execs, $_load_start; global $config, $_event_count, $database, $_execs, $_load_start;
if(function_exists('memory_get_usage')) { $i_mem = sprintf("%5.2f", ((memory_get_peak_usage(true)+512)/1024)/1024);
$i_mem = sprintf("%5.2f", ((memory_get_usage()+512)/1024)/1024);
}
else {
$i_mem = "???";
}
if($config->get_string("commit_hash", "unknown") == "unknown"){ if($config->get_string("commit_hash", "unknown") == "unknown"){
$commit = ""; $commit = "";
@ -1276,7 +1271,7 @@ function _end_coverage() {
$n = 0; $n = 0;
$t = time(); $t = time();
while(file_exists("$absolute_path/$t.$n.log")) $n++; while(file_exists("$absolute_path/$t.$n.log")) $n++;
file_put_contents("$absolute_path/$t.$n.log", serialize(xdebug_get_code_coverage())); file_put_contents("$absolute_path/$t.$n.log", gzdeflate(serialize(xdebug_get_code_coverage())));
} }
} }
?> ?>

View File

@ -111,8 +111,8 @@ class CommentList extends Extension {
if($config->get_int("ext_comments_version") == 2) { if($config->get_int("ext_comments_version") == 2) {
$config->set_int("ext_comments_version", 3); $config->set_int("ext_comments_version", 3);
$database->Execute("ALTER TABLE comments ADD CONSTRAINT foreign_comments_image_id FOREIGN KEY (image_id) REFERENCES images(id) ON DELETE CASCADE"); $database->Execute("ALTER TABLE comments ADD FOREIGN KEY (image_id) REFERENCES images(id) ON DELETE CASCADE");
$database->Execute("ALTER TABLE comments ADD CONSTRAINT foreign_comments_owner_id FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE RESTRICT"); $database->Execute("ALTER TABLE comments ADD FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE RESTRICT");
} }
// FIXME: add foreign keys, bump to v3 // FIXME: add foreign keys, bump to v3

View File

@ -57,7 +57,7 @@ class Upgrade extends Extension {
$config->set_int("db_version", 10); $config->set_int("db_version", 10);
log_info("upgrade", "Adding foreign keys to images"); log_info("upgrade", "Adding foreign keys to images");
$database->Execute("ALTER TABLE images ADD CONSTRAINT foreign_images_owner_id FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE RESTRICT"); $database->Execute("ALTER TABLE images ADD FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE RESTRICT");
log_info("upgrade", "Database at version 10"); log_info("upgrade", "Database at version 10");
$config->set_bool("in_upgrade", false); $config->set_bool("in_upgrade", false);

View File

@ -100,6 +100,8 @@ try {
$page->display(); $page->display();
$database->db->commit(); $database->db->commit();
// saving cache data and profiling data to disk can happen later
if(function_exists("fastcgi_finish_request")) fastcgi_finish_request();
_end_cache(); _end_cache();
ctx_log_endok(); ctx_log_endok();
} }

View File

@ -332,7 +332,7 @@ function create_tables() { // {{{
INDEX(owner_id), INDEX(owner_id),
INDEX(width), INDEX(width),
INDEX(height), INDEX(height),
CONSTRAINT foreign_images_owner_id FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE RESTRICT FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE RESTRICT
"); ");
$db->create_table("tags", " $db->create_table("tags", "
id SCORE_AIPK, id SCORE_AIPK,
@ -345,8 +345,8 @@ function create_tables() { // {{{
INDEX(image_id), INDEX(image_id),
INDEX(tag_id), INDEX(tag_id),
UNIQUE(image_id, tag_id), UNIQUE(image_id, tag_id),
CONSTRAINT foreign_image_tags_image_id FOREIGN KEY (image_id) REFERENCES images(id) ON DELETE CASCADE, FOREIGN KEY (image_id) REFERENCES images(id) ON DELETE CASCADE,
CONSTRAINT foreign_image_tags_tag_id FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
"); ");
$db->execute("INSERT INTO config(name, value) VALUES('db_version', 11)"); $db->execute("INSERT INTO config(name, value) VALUES('db_version', 11)");
} }