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
~~~~~~~~~~~~
MySQL 5.1+ (with experimental support for PostgreSQL 8+ and SQLite 3)
PHP 5.2+
PHP 5.2.6+
GD or ImageMagick

View File

@ -23,12 +23,10 @@ class AdminPageTest extends ShimmieWebTestCase {
$this->get_page('admin');
$this->assert_title("Admin Tools");
$this->set_field("action", "lowercase all tags");
$this->click("Go");
$this->click("All tags to lowercase");
$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->log_out();
@ -39,8 +37,7 @@ class AdminPageTest extends ShimmieWebTestCase {
$this->log_in_as_admin();
$this->get_page('admin');
$this->assert_title("Admin Tools");
$this->set_field("action", "recount tag use");
$this->click("Go");
$this->click("Recount tag use");
$this->log_out();
}
@ -48,8 +45,7 @@ class AdminPageTest extends ShimmieWebTestCase {
$this->log_in_as_admin();
$this->get_page('admin');
$this->assert_title("Admin Tools");
$this->set_field("action", "purge unused tags");
$this->click("Go");
$this->click("Purge unused tags");
$this->log_out();
}
@ -57,8 +53,7 @@ class AdminPageTest extends ShimmieWebTestCase {
$this->log_in_as_admin();
$this->get_page('admin');
$this->assert_title("Admin Tools");
$this->set_field("action", "database dump");
$this->click("Go");
$this->click("Download database contents");
$this->log_out();
}
}

View File

@ -54,47 +54,50 @@ class Artists extends Extension {
public function try_install() {
global $config, $database;
if ($config->get_int("ext_artists_version") < 1)
{
$database->create_table("artists",
"id SCORE_AIPK
, user_id INTEGER NOT NULL
, name VARCHAR(255) NOT NULL
, created DATETIME NOT NULL
, updated DATETIME NOT NULL
, notes TEXT
, INDEX(id)
");
$database->create_table("artist_members",
"id SCORE_AIPK
, artist_id INTEGER NOT NULL
, user_id INTEGER NOT NULL
, name VARCHAR(255) NOT NULL
, created DATETIME NOT NULL
, updated DATETIME NOT NULL
, INDEX (id)
, FOREIGN KEY (artist_id) REFERENCES artists (id) ON UPDATE CASCADE ON DELETE CASCADE
");
$database->create_table("artist_alias",
"id SCORE_AIPK
, artist_id INTEGER NOT NULL
, user_id INTEGER NOT NULL
, created DATETIME
, updated DATETIME
, alias VARCHAR(255)
, INDEX (id)
, FOREIGN KEY (artist_id) REFERENCES artists (id) ON UPDATE CASCADE ON DELETE CASCADE
");
$database->create_table("artist_urls",
"id SCORE_AIPK
, artist_id INTEGER NOT NULL
, user_id INTEGER NOT NULL
, created DATETIME NOT NULL
, updated DATETIME NOT NULL
, url VARCHAR(1000) NOT NULL
, INDEX (id)
, FOREIGN KEY (artist_id) REFERENCES artists (id) ON UPDATE CASCADE ON DELETE CASCADE
");
if ($config->get_int("ext_artists_version") < 1) {
$database->create_table("artists", "
id SCORE_AIPK,
user_id INTEGER NOT NULL,
name VARCHAR(255) NOT NULL,
created DATETIME NOT NULL,
updated DATETIME NOT NULL,
notes TEXT,
INDEX(id),
FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE
");
$database->create_table("artist_members", "
id SCORE_AIPK,
artist_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
name VARCHAR(255) NOT NULL,
created DATETIME NOT NULL,
updated DATETIME 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->create_table("artist_alias", "
id SCORE_AIPK,
artist_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
created DATETIME,
updated DATETIME,
alias VARCHAR(255),
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->create_table("artist_urls", "
id SCORE_AIPK,
artist_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
created DATETIME NOT NULL,
updated DATETIME NOT NULL,
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());
$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_form_url = make_link('post/list/{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
$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)");
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 CONSTRAINT user_favorites_image_id FOREIGN KEY (image_id) REFERENCES images(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 FOREIGN KEY (image_id) REFERENCES images(id) ON DELETE CASCADE;");
$config->set_int("ext_favorites_version", 2);
}
}

View File

@ -9,42 +9,48 @@
*/
class Forum extends Extension {
public function onInitExt(InitExtEvent $event) {
public function onInitExt(InitExtEvent $event) {
global $config, $database;
// 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",
" id SCORE_AIPK,
thread_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
date DATETIME NOT NULL,
message TEXT,
INDEX (date),
FOREIGN KEY (thread_id) REFERENCES forum_threads (id) ON UPDATE CASCADE ON DELETE CASCADE
");
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),
FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE RESTRICT
");
$config->set_int("forum_version", 1);
$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");
}
$database->create_table("forum_posts", "
id SCORE_AIPK,
thread_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
date DATETIME NOT NULL,
message TEXT,
INDEX (date),
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) {

View File

@ -159,6 +159,11 @@ class IPBan extends Extension {
$database->execute("ALTER TABLE bans CHANGE ip ip VARCHAR(15)");
$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 {{{

View File

@ -27,6 +27,7 @@ class Notes extends Extension {
width INTEGER NOT NULL,
note TEXT NOT NULL,
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
");
@ -36,6 +37,7 @@ class Notes extends Extension {
user_id INTEGER NOT NULL,
date DATETIME NOT NULL,
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
");
@ -54,6 +56,7 @@ class Notes extends Extension {
width INTEGER NOT NULL,
note TEXT NOT NULL,
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
");

View File

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

View File

@ -35,12 +35,15 @@ class Pools extends Extension {
description TEXT,
date DATETIME NOT NULL,
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", "
pool_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", "
id SCORE_AIPK,
@ -50,7 +53,9 @@ class Pools extends Extension {
images TEXT,
count INTEGER NOT NULL DEFAULT 0,
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

View File

@ -4,8 +4,8 @@
* Author: Shish <webmaster@shishnet.org>
* Description: A JSON interface to shimmie data [WARNING]
* Documentation:
* <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
* <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><u>Usage:</b></u>
* <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>

View File

@ -69,7 +69,7 @@ class Wiki extends Extension {
locked SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N,
body TEXT NOT NULL,
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);
}

View File

@ -907,12 +907,7 @@ $_load_start = microtime(true);
function get_debug_info() {
global $config, $_event_count, $database, $_execs, $_load_start;
if(function_exists('memory_get_usage')) {
$i_mem = sprintf("%5.2f", ((memory_get_usage()+512)/1024)/1024);
}
else {
$i_mem = "???";
}
$i_mem = sprintf("%5.2f", ((memory_get_peak_usage(true)+512)/1024)/1024);
if($config->get_string("commit_hash", "unknown") == "unknown"){
$commit = "";
@ -1276,7 +1271,7 @@ function _end_coverage() {
$n = 0;
$t = time();
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) {
$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 CONSTRAINT foreign_comments_owner_id FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE RESTRICT");
$database->Execute("ALTER TABLE comments ADD FOREIGN KEY (image_id) REFERENCES images(id) ON DELETE CASCADE");
$database->Execute("ALTER TABLE comments ADD FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE RESTRICT");
}
// FIXME: add foreign keys, bump to v3

View File

@ -57,7 +57,7 @@ class Upgrade extends Extension {
$config->set_int("db_version", 10);
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");
$config->set_bool("in_upgrade", false);

View File

@ -100,6 +100,8 @@ try {
$page->display();
$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();
ctx_log_endok();
}

View File

@ -332,7 +332,7 @@ function create_tables() { // {{{
INDEX(owner_id),
INDEX(width),
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", "
id SCORE_AIPK,
@ -345,8 +345,8 @@ function create_tables() { // {{{
INDEX(image_id),
INDEX(tag_id),
UNIQUE(image_id, tag_id),
CONSTRAINT foreign_image_tags_image_id 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 (image_id) REFERENCES images(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)");
}