From 4a18dfd902c7ceda8ba5a0f87d3fb8329632494c Mon Sep 17 00:00:00 2001 From: Anthony Parsons Date: Fri, 7 Nov 2008 18:46:59 +0000 Subject: [PATCH] Special Ops 2.50 Not verified for correctness, obviously. Not worth reading the 6k line diff either really. --- README.xml | 63 - con.php | 253 +- css/.htaccess | 2 +- css/b-type.css | 21 +- css/bw3-inv.css | 41 + css/bw3.css | 40 + css/bw3/header-inv.png | Bin 0 -> 5077 bytes css/bw3/header.png | Bin 0 -> 9612 bytes css/bw3/toptiles-inv.png | Bin 0 -> 2387 bytes css/bw3/toptiles.png | Bin 0 -> 2314 bytes css/core-layout.css | 28 +- css/css.php | 6 +- css/default.css | 1 + css/fm.css | 31 +- css/gamefaqs.css | 9 +- css/gfcss10.css | 24 +- css/gfh2.css | 32 +- css/img/blackvg_50.png | Bin 91 -> 87 bytes css/img/img-encode.pl | 28 + css/img/o-bluevg.png | Bin 103 -> 0 bytes css/img/scanlinevg.png | Bin 81 -> 77 bytes css/img/wb_back_corner.png | Bin 0 -> 581 bytes css/img/wb_back_horz.png | Bin 109 -> 104 bytes css/img/whitehg.png | Bin 0 -> 2993 bytes css/img/whitevg.png | Bin 91 -> 2673 bytes css/scaly.css | 41 +- css/{gamefaqs.css => u10.css} | 9 +- css/u3.css | 41 + data/.htaccess | 1 + detail.php | 277 +- docs/changelog.xhtml | 55 + COPYING => docs/copying.txt | 6 +- docs/readme.xhtml | 120 + docs/so2.sql | 219 ++ docs/svn.log | 4703 +++++++++++++++++++++++++++++++++ docs/themes.sql | 34 + docs/triggers.sql | 15 + index.php | 112 +- invites.php | 47 + js/global.js | 48 +- js/index.js | 28 - js/index.js.txt | 25 + js/theme.js | 12 + lib/Board.php | 21 + lib/Boardlist_Default.php | 82 + lib/Boardlist_Lite.php | 64 + lib/HTML_Checkbox.php | 43 + lib/HTML_Input.php | 45 + lib/HTML_Radiobutton.php | 45 + lib/HTML_Select.php | 81 + lib/Memcache.php | 15 + lib/Message.phps | 0 lib/Message_DTD.phps | 20 + lib/Message_XMLSchema.phps | 20 + lib/Messagelist_Flat.php | 76 + lib/Messagelist_Threaded.php | 54 + lib/Messagestyle_Default.php | 65 + lib/Messagestyle_FO3.php | 44 + lib/Messagestyle_IRC.php | 31 + lib/Page.php | 266 ++ lib/Post_Default.php | 95 + lib/Post_Plaintext.php | 30 + lib/Post_XML.php | 40 + lib/SO2_PDO.php | 55 + lib/Topic.phps | 0 lib/Topiclist_Default.php | 57 + lib/Topiclist_Lite.php | 110 + lib/User_Anonymous.php | 61 + lib/User_Authenticated.php | 53 + lib/User_Registered.php | 153 ++ lib/class.Boardlist_IRC.php | 107 - lib/class.Boardlist_SO1.php | 92 - lib/class.Boardlist_SO2.php | 67 - lib/class.HTML_Select.php | 78 - lib/class.Message_DTD.php | 20 - lib/class.Message_PCRE.php | 87 - lib/class.Message_Plaintext.php | 30 - lib/class.Message_XML.php | 40 - lib/class.Message_XMLSchema.php | 20 - lib/class.Messagelist_Flat.php | 73 - lib/class.Messagelist_Threaded.php | 59 - lib/class.Messagestyle_Frozenoven.php | 74 - lib/class.Messagestyle_IRC.php | 48 - lib/class.Messagestyle_Plain.php | 59 - lib/class.Page.php | 212 -- lib/class.Topiclist_Default.php | 113 - lib/class.Topiclist_TL.php | 70 - lib/class.User_Anonymous.php | 154 -- lib/class.User_Authenticated.php | 231 -- lib/class.User_Registered.php | 121 - lib/class.debugmysqli.php | 70 - lib/class.so2mysqli.php | 19 - lib/iface.Boardlist.php | 16 +- lib/iface.HTMLParser.php | 24 + lib/iface.Message3.php | 72 +- lib/iface.Messagelist.php | 70 +- lib/iface.Messagestyle.php | 17 +- lib/iface.Topiclist.php | 65 +- lib/iface.User.php | 92 +- messagelist.php | 197 +- options.php | 461 ++-- passwd.php | 120 +- points.php | 78 - post.php | 491 ++-- register.php | 474 ++-- res/.htaccess | 3 + res/announcement.xml | 2 + res/config.ini | 11 + res/faq.xml | 65 + res/msgconv.phps | 22 + res/mysql.example | 8 - res/{factorial.png => omg.png} | Bin res/structure.sql | 224 -- res/themes.sql | 23 - res/tos.xml | 24 +- res/userhtml.dtd | 76 +- stuff.php | 196 +- theme.php | 292 +- topiclist.php | 159 +- user.php | 204 +- userlist.php | 172 +- 121 files changed, 9159 insertions(+), 4341 deletions(-) delete mode 100644 README.xml rewrite con.php (84%) create mode 100644 css/bw3-inv.css create mode 100644 css/bw3.css create mode 100644 css/bw3/header-inv.png create mode 100644 css/bw3/header.png create mode 100644 css/bw3/toptiles-inv.png create mode 100644 css/bw3/toptiles.png create mode 120000 css/default.css create mode 100755 css/img/img-encode.pl delete mode 100644 css/img/o-bluevg.png create mode 100644 css/img/wb_back_corner.png create mode 100644 css/img/whitehg.png rewrite css/img/whitevg.png (91%) copy css/{gamefaqs.css => u10.css} (78%) create mode 100644 css/u3.css create mode 100644 data/.htaccess rewrite detail.php (90%) create mode 100644 docs/changelog.xhtml rename COPYING => docs/copying.txt (88%) create mode 100644 docs/readme.xhtml create mode 100644 docs/so2.sql create mode 100644 docs/svn.log create mode 100644 docs/themes.sql create mode 100644 docs/triggers.sql rewrite index.php (91%) create mode 100644 invites.php rewrite js/global.js (97%) delete mode 100644 js/index.js create mode 100644 js/index.js.txt create mode 100644 js/theme.js create mode 100644 lib/Board.php create mode 100644 lib/Boardlist_Default.php create mode 100644 lib/Boardlist_Lite.php create mode 100644 lib/HTML_Checkbox.php create mode 100644 lib/HTML_Input.php create mode 100644 lib/HTML_Radiobutton.php create mode 100644 lib/HTML_Select.php create mode 100644 lib/Memcache.php create mode 100644 lib/Message.phps create mode 100644 lib/Message_DTD.phps create mode 100644 lib/Message_XMLSchema.phps create mode 100644 lib/Messagelist_Flat.php create mode 100644 lib/Messagelist_Threaded.php create mode 100644 lib/Messagestyle_Default.php create mode 100644 lib/Messagestyle_FO3.php create mode 100644 lib/Messagestyle_IRC.php create mode 100644 lib/Page.php create mode 100644 lib/Post_Default.php create mode 100644 lib/Post_Plaintext.php create mode 100644 lib/Post_XML.php create mode 100644 lib/SO2_PDO.php create mode 100644 lib/Topic.phps create mode 100644 lib/Topiclist_Default.php create mode 100644 lib/Topiclist_Lite.php create mode 100644 lib/User_Anonymous.php create mode 100644 lib/User_Authenticated.php create mode 100644 lib/User_Registered.php delete mode 100644 lib/class.Boardlist_IRC.php delete mode 100644 lib/class.Boardlist_SO1.php delete mode 100644 lib/class.Boardlist_SO2.php delete mode 100644 lib/class.HTML_Select.php delete mode 100644 lib/class.Message_DTD.php delete mode 100644 lib/class.Message_PCRE.php delete mode 100644 lib/class.Message_Plaintext.php delete mode 100644 lib/class.Message_XML.php delete mode 100644 lib/class.Message_XMLSchema.php delete mode 100644 lib/class.Messagelist_Flat.php delete mode 100644 lib/class.Messagelist_Threaded.php delete mode 100644 lib/class.Messagestyle_Frozenoven.php delete mode 100644 lib/class.Messagestyle_IRC.php delete mode 100644 lib/class.Messagestyle_Plain.php delete mode 100644 lib/class.Page.php delete mode 100644 lib/class.Topiclist_Default.php delete mode 100644 lib/class.Topiclist_TL.php delete mode 100644 lib/class.User_Anonymous.php delete mode 100644 lib/class.User_Authenticated.php delete mode 100644 lib/class.User_Registered.php delete mode 100644 lib/class.debugmysqli.php delete mode 100644 lib/class.so2mysqli.php create mode 100644 lib/iface.HTMLParser.php rewrite lib/iface.Message3.php (82%) rewrite lib/iface.Messagelist.php (94%) rewrite lib/iface.Topiclist.php (90%) rewrite lib/iface.User.php (91%) rewrite messagelist.php (86%) rewrite options.php (93%) rewrite passwd.php (86%) delete mode 100644 points.php rewrite post.php (92%) rewrite register.php (91%) create mode 100644 res/.htaccess create mode 100644 res/announcement.xml create mode 100644 res/config.ini create mode 100644 res/faq.xml create mode 100644 res/msgconv.phps delete mode 100644 res/mysql.example rename res/{factorial.png => omg.png} (100%) delete mode 100644 res/structure.sql delete mode 100644 res/themes.sql rewrite res/tos.xml (100%) rewrite res/userhtml.dtd (99%) rewrite stuff.php (95%) rewrite theme.php (94%) rewrite topiclist.php (81%) rewrite user.php (94%) rewrite userlist.php (91%) diff --git a/README.xml b/README.xml deleted file mode 100644 index 19c692e..0000000 --- a/README.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - -SO2 Readme - - - - - - -

Intro

-

SO2 is yet another message board based on the GameFAQs boards. It also borrows a few ideas from Slashdot.

-

The design goal was to make something easy to work with and customise, instead of just another clone of GameFAQs. This never was, and never will be intended as a one-size-fits-all solution like Mediarchive or whiteFyre. Look at all the dead/bloated/exploit-filled/slow/buggy sites based on or modelled after those to see why. And yes I'm singling out OB there.

-

SO2's earned a good reuptation on the GF boards for having clean, readable code, so it's useful to look at if you're learning PHP. In any case it's a better choice than the competition.

- -

Installation

-

System Requirements

-

You need PHP 5.1 and MySQL 5 installed. If something doesn't work, you probably need a PHP extension. Having a decent OS also helps.

- -

Setup

-

The DB files are in res/. Setup is the same as GFH except for a few things:

-
    -
  1. No board editor. Use phpMyAdmin, the table columns are self-descriptive anyway.
  2. -
  3. The admin userlevel doesn't actually give you anything except HTML in posts.
  4. -
  5. The DB password is set in mysql.php. An example file is in res/mysql.example.
  6. -
  7. You need to create css/default.css manually, either by symlink or by making a new file.
  8. -
  9. If you want to make your account admin anyway or give it invites to start the board with, add stuff to the `things` table. Invites need some value in the `data` column for authentication; read register.php for more info.
  10. -
- - -

More Help

-

If you can't figure out how to get something working, ask WDP first. Being mostly spinoff users themselves, they'll be more than happy to answer any SO2-related questions you may have.

- - -

Developers

-

todo list

- - -

Source

-

SVN is at specialops.ath.cx/repos/so2/ and is usually the most up-to-date code. If you don't know what this is, don't use it.

-

Release tarballs are at http://specialops.ath.cx/.

-

The code is formatted for tab indents, width 4.

- - -

Contributors

- - - - - diff --git a/con.php b/con.php dissimilarity index 84% index a11ccd5..a71f6b3 100644 --- a/con.php +++ b/con.php @@ -1,121 +1,132 @@ - oh dear god -// [23:39:26] <&Flash> OH FUCK NO -require 'lib/class.Page.php'; -require 'lib/class.so2mysqli.php'; -require 'lib/class.User_Anonymous.php'; -class InvalidInputException extends Exception {} -class DatabaseException extends Exception {} -class RateLimitException extends Exception {} -function __autoload($classname) -{ - require 'lib/class.'.$classname.'.php'; -} - - -// cordially welcomely in the Tutorial. Here you find the most important texts for Ogame on a view. -if ( $_SERVER['REMOTE_ADDR'] === $_SERVER['SERVER_ADDR'] ) { - define('DEVELOPER', 1); -} - - -// Unfortunately some texts already became outdated. -$page = new Page; - - -// If you have desire and and you are well in speaking englisch and german just mail to me -if ( defined('DEVELOPER') ) { - ob_start(); - // (...waaaaaaaaaaay tmi.) - function e_handler($exception) - { - header('HTTP/1.1 500 Internal Server Error'); - header('Content-Type: text/html; charset=UTF-8'); - echo "

OMFG!!1

\n", - '
',$exception,'
'; - exit; - } -} else { - function e_handler($exception) - { - if ( !headers_sent() ) { - header('HTTP/1.1 500 Internal Server Error'); - header('Content-Type: text/html; charset=UTF-8'); - } - - $GLOBALS['page']->errorfooter('runtime'); - } -} - -set_exception_handler('e_handler'); -require 'mysql.php'; - -if ( mysqli_connect_errno() ) { - include 'res/server-error.inc'; - throw new Exception('No database connection.'); -} - - -// dogshit brownies -if ( isset($_POST['login'], $_POST['u'], $_POST['p']) ) { - list($_COOKIE['u'], $_COOKIE['p']) = array($_POST['u'], $_POST['p']); -} - -// Destroy user cookie details on logout -if ( isset($_POST['logout']) ) { - setcookie('u', null, 1, '/'); - setcookie('p', null, 1, '/'); - unset($_COOKIE); -} - - -// overspong -if ( isset($_COOKIE['u'], $_COOKIE['p']) ) { - // WHERE IS SARAH CONNOR - $q = $DB->query('SELECT @userid := `userid` FROM `users` - WHERE `alias` = '.$DB->string($_COOKIE['u']).' - AND (`password` = AES_ENCRYPT('.$DB->string($_COOKIE['p']).', `reg_ip`) - OR `password` IS NULL)'); - - // I'M RICK JAMES BITCH - if ( 1 === $q->num_rows ) { - // Keep login cookie valid for 2 days - setcookie('u', $_COOKIE['u'], time()+172800, '/'); - setcookie('p', $_COOKIE['p'], time()+172800, '/'); - - $user = new User_Authenticated(isset($prefetch) ? $prefetch : null); - } else { - // NO WAI - setcookie('u', null, 1, '/'); - setcookie('p', null, 1, '/'); - unset($_COOKIE); - - $user = new User_Anonymous; - } -} else - $user = new User_Anonymous; -?> + + * @licence file://COPYING + * @version 2.50 + */ + +define('MT_NOW', microtime(1)); // Used for page load time stats +define('T_NOW', time()); // Used to save calling time() everywhere +set_time_limit(4); // Prevent infinite loop stuff + +// PHP version check +if ( version_compare(PHP_VERSION, '5.1', '<') ) { + include 'res/server-error.inc'; + throw new Exception('PHP 5.1 or higher is required to run SO2.'); +} + +// Preload required classes - autoload seems slow for some reason +require 'lib/Page.php'; +require 'lib/SO2_PDO.php'; +require 'lib/User_Anonymous.php'; +function __autoload($classname) +{ + require 'lib/'.$classname.'.php'; +} +// Utility classes for form-handling stuff +class InvalidInputException extends Exception {} +class RateLimitException extends Exception {} + + +// Namespace container for important bits +class SO2 { + static $DB; + static $Page; + static $User; + static $Cfg; + static $Cache; +} + +// Page header/footer/error handling/utility functions (date display/user links) +SO2::$Page = new Page; + +// Config +SO2::$Cfg = parse_ini_file('res/config.ini', true); +if ( isset(SO2::$Cfg['site']['closed']) ) { + define('INVITE_ONLY', true); +} + +// Memcache +SO2::$Cache = new Memcache; +SO2::$Cache->pconnect('localhost'); + +// MySQL +try { + SO2::$DB = new SO2_PDO('mysql:dbname='.SO2::$Cfg['db']['name'], SO2::$Cfg['db']['uname'], SO2::$Cfg['db']['passwd'], + array(PDO::ATTR_PERSISTENT => true, PDO::ATTR_EMULATE_PREPARES => false) ); + SO2::$DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + SO2::$Cfg['db']['passwd'] = null; +} catch ( PDOException $e ) { + include 'res/server-error.inc'; + throw new Exception('Database connection died'); +} + + +// Error handling +if ( defined('DEVELOPER') ) { + ob_start(); + function e_handler($exception) + { + header('HTTP/1.1 500 Internal Server Error'); + header('Content-Type: text/html; charset=UTF-8'); + echo "

OMFG!!1

\n", + '
',$exception,'
'; + error_log($exception); + exit; + } +} else { + function e_handler($exception) + { + if ( ! headers_sent() ) { + header('HTTP/1.1 500 Internal Server Error'); + header('Content-Type: text/html; charset=UTF-8'); + } + error_log($exception); + SO2::$Page->message(Page::ERR_RUNTIME); + } +} +set_exception_handler('e_handler'); + +// Destroy cookies on logout +if ( isset($_POST['logout']) ) { + setcookie('u', '', 100); + setcookie('p', '', 100); + unset($_COOKIE); +} +// Set cookies on login +elseif ( isset($_POST['login'], $_POST['u'], $_POST['p']) ) { + list($_COOKIE['u'], $_COOKIE['p']) = array($_POST['u'], $_POST['p']); +} + +// User authentication +if ( isset($_COOKIE['u'], $_COOKIE['p']) ) { + $userid = SO2::$DB->q('SELECT @userid := userid FROM users WHERE alias = ? '. + ' AND (passwd = AES_ENCRYPT(?, reg_ip) OR passwd IS NULL)', + array($_COOKIE['u'], $_COOKIE['p']), SO2_PDO::QVALUE); + // Logged in + if ( $userid ) { + setcookie('u', $_COOKIE['u'], T_NOW+172800); + setcookie('p', $_COOKIE['p'], T_NOW+172800); + + require 'lib/User_Registered.php'; + require 'lib/User_Authenticated.php'; + SO2::$User = SO2::$Cache->get('user'.$userid) + or SO2::$User = new User_Authenticated($userid); + } + // Failed login attempt + else { + setcookie('u', '', 1); + setcookie('p', '', 1); + unset($_COOKIE); + + SO2::$User = new User_Anonymous; + } +} +// Not logged in +else SO2::$User = new User_Anonymous; +?> diff --git a/css/.htaccess b/css/.htaccess index cb605c5..a82aaf3 100644 --- a/css/.htaccess +++ b/css/.htaccess @@ -1,3 +1,3 @@ - Header always append Cache-Control "must-revalidate,max-age=1" + Header always append Cache-Control must-revalidate diff --git a/css/b-type.css b/css/b-type.css index 9554444..64e1130 100644 --- a/css/b-type.css +++ b/css/b-type.css @@ -1,15 +1,16 @@ @charset "UTF-8"; @import 'core-layout.css'; -/* $Id$ */ +/* $Id: b-type.css 844 2006-03-24 16:58:08Z ant $ */ html { background: #f3fcff; color: #000; font-family: "Nimbus Sans L", "Trebuchet MS", sans-serif; } +body { margin: 0 1em } -#navbar { float: left; } +#navbar { float: left; border-right: none } #userheader { text-align: right; } -.nl, th { background: #06b; color: #fff; } -th[scope="col"] { -moz-border-radius: 1em 1em 0 0; border: 1px #f3fcff; border-style: none solid; } +.nl, th { background: #26c; color: #fff; border: 1px inset #eee; border-bottom: 0; -moz-border-radius:20px 20px 0 0; margin: 6px 0 0 0; padding: 0 3px 2px 3px; height: 1em } +th[scope="col"] { -moz-border-radius: 1em 1em 0 0; } th[scope="row"] { -moz-border-radius: 1em 0 0 1em; text-align: right; } th[scope="row"]::after { content: " >"; } @@ -24,7 +25,7 @@ tr.content { background: transparent; } .notice, .error { background: #fc0; text-align: center; } .thread { margin-left: 0.5em; } -.info, .content, .nl, dl, .formlist, .notice, h1, .error { margin: 2px 2px 0 0; padding: 1px; } +.info, .content, dl, .notice, h1, .error { margin: 2px 2px 0 0; padding: 1px; } fieldset { border: 1px dotted #fff; } h1 { font-size: 200%; text-align: right; } @@ -40,8 +41,12 @@ dd { border: solid #dfdfdf; border-width: 0 0 2px 2em; margin: 0 0 2px; padding: #pagelist-head dd, #pagelist-foot dd { border: none; } a { color: #00004a; } -a:visited { color: #00004f; } -.nl a, #footer a { color: #ff8; } +a:hover { color: #00007f; } +.nl a { background: #26c; color:#fff; border:1px outset; border-bottom:1px dotted #00c; padding:6px 3px 2px 3px; -moz-border-radius:25px 25px 0 0; vertical-align: bottom } .info a { color: #fe8; } +#footer a { color: #fff } + +input[type="submit"], button { font-family: "Nimbus Sans L", "Trebuchet MS", sans-serif; font-weight: bold; border: 3px groove #06c; -moz-border-radius: 20px; color: #ddf; background: #06c; } +input[type="submit"]:active, input[type="reset"]:active, button:active { border-color: #fc0 } +input[type="text"], select, textarea {font:80% 'verdana'; border:0; border-bottom:3px groove; border-right:3px groove} -input[type="submit"], button { font-family: "Nimbus Sans L", "Trebuchet MS", sans-serif; font-weight: bold; border-color: #06c; color: #ddf; background: #06c; } diff --git a/css/bw3-inv.css b/css/bw3-inv.css new file mode 100644 index 0000000..c62a11b --- /dev/null +++ b/css/bw3-inv.css @@ -0,0 +1,41 @@ +@charset "UTF-8"; +@import "core-layout.css"; + +html { color: #ddd; background: #333; font-family: 'DejaVu Sans Condensed', 'Arial', sans-serif } +body { margin: 0 10px; background: url(data:image/png) } + +a { color: #c44 } +a:hover { color: #aaf } + +body > h1 { margin: 0 -10px; height: 80px; position: relative; + background: url(bw3/toptiles-inv.png) repeat-x; + text-align: left; font-size: 1.2em; font-weight: normal } +body > h1 span { position: absolute; top: 0; right: 0 } +body > h1::before { content: url(bw3/header-inv.png) } + +h2 { font-size: 1.3em; text-align: right; margin: 0.5em 1em } + +fieldset, legend, .nl, .error, .notice, .info { border: 2px #a00 solid; padding: 5px; margin: 3px } +fieldset, legend { background: #000 } +.nl, .error, .notice, .info { color: #fc8; background: #222 } +.info { border-color: #0f0 } +.notice { border-color: #7f0 } +.error { border-color: #f00 } + +button, input, textarea, select { background: #006; color: #fff } + +table { width: 100% } +th, .message > .info { background: url(bw3/toptiles-inv.png) bottom; padding: 3px; border: 1px #333 solid } +td, .message > .content { padding: 4px; border: 1px #c00 dotted; background: #111 } + +#navbar::before { content: 'Board Nav: ' } +#userheader::before { content: 'User Nav: ' } +.nl { padding: 5px 1em; list-style: none; -moz-border-radius: 1em } +.nl li { display: inline } +.nl li + li::before { content: ' | '; color: #acc } + +#footer, #footer fieldset { background: #222; border: 2px #000 solid } +#footer { padding: 0; margin: 1em 0; font-size: small } +#footer p { padding: 2px; margin: 0 } +#footer fieldset { margin: 0; padding: 0; float: right; border-style: none none none solid } +#footer legend { display: none } diff --git a/css/bw3.css b/css/bw3.css new file mode 100644 index 0000000..1c34446 --- /dev/null +++ b/css/bw3.css @@ -0,0 +1,40 @@ +@charset "UTF-8"; +@import "core-layout.css"; + +html { color: #2C6B7A; background: #eee } +body { margin: 0 } + +a { color: #4aa } +a:hover { color: #a44 } + +body > h1 { margin: 0 0 -5px 0; height: 85px; overflow: visible; position: relative; + background: url(bw3/toptiles.png) repeat-x; + text-align: left; font-size: 1.2em; font-weight: normal } +body > h1 span { position: absolute; top: 0; right: 0 } +body > h1::before { content: url(bw3/header.png) } + +h2 { font-size: 1.3em; text-align: right; margin: 0.5em 1em } + +table { width: 100% } +th, .message > .info { background: url(bw3/toptiles.png) left center repeat-x; padding: 3px; border: 1px #ccc solid; border-bottom: none } +td, .message > .content { padding: 4px; border: 1px #acc dotted; background: #fff } + +hr { border: 2px #acc dotted; margin: 0.5em 2em } + +fieldset, .nl, .error, .notice, .info { border: 2px #acc solid } +.notice { border-color: #cca } +.error { border-color: #c55 } +.nl, .notice { color: #055; background: #f6f6f6 } + +#navbar { margin: 0 1em } +#navbar::before { content: 'Board Nav: ' } +#userheader { margin: 0 2em } +#userheader::before { content: 'User Nav: ' } +.nl { margin: -5px 0 0 0; padding: 5px 1em; list-style: none; -moz-border-radius: 0 0 1em 1em; border-top: none } +.nl li { display: inline } +.nl li + li::before { content: ' | '; color: #acc } + +#footer { padding: 0 1em; margin: 1em 0; background: #f6f6f6; font-size: small; text-align: center } +#footer p, #footer fieldset { margin: 0; padding: 0 1em; border: none; display: inline; vertical-align: middle } +#footer legend { display: none } +#footer label, #footer label ~ button { display: block } diff --git a/css/bw3/header-inv.png b/css/bw3/header-inv.png new file mode 100644 index 0000000000000000000000000000000000000000..ad64201c69696fea91a273b4c110663e3386ad06 GIT binary patch literal 5077 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 literal 0 HcwPel00001 diff --git a/css/bw3/toptiles-inv.png b/css/bw3/toptiles-inv.png new file mode 100644 index 0000000000000000000000000000000000000000..dedd5ab54766f974333000cbf4bdaa2d30b7c482 GIT binary patch literal 2387 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 FV1iQ^dI$gj literal 0 HcwPel00001 diff --git a/css/bw3/toptiles.png b/css/bw3/toptiles.png new file mode 100644 index 0000000000000000000000000000000000000000..a496b55e39d3c99c8563f63a60aa9e7e633218b6 GIT binary patch literal 2314 zcwPYt3HA1gP)+qug3)PersfN(+s!Q2ijen2Di6`+xrb3zwcmid^)#i`O@0g z!}aeBp1+r!9lXv}_w|gv*yc zlpnA-wgXCQ;_}!!i5fPC)cu46<4K4ipXlM(8PW!$NAHPxT`?lfwN6)uSvGt&Z z>mNOS%hX49m+=`gvNZ-@0Y~=u(cd?x3nW~=^!%k`cIorC(eh~7`T{q%T!rtL=@whM zMMU?P)|YB&-}X1lBTSFzRMS7tkVHfzg5`?NS{ZPuA9xEcmu1)KEIU|Viph6`%NLIj z!QZ#Rv+T07g7NhwJWEy&Nkl|4Jf!q2JI|1^`fKT+b@w+ttIN_s>()O#BoPtG@Q|+H z7;kUcG2V_JTEG?p{@e!JUs_-2G~O}7D>dN5$I7?SXTUSt;VnFX9k%g1{rm*3fAILh z?dc(jh)9NqlzxU(?Tmr`zVu2Bo*`w)*E6K7{-&=ld#Ka^H#vu^^hj5kDZ9V4zJ!MW z_YgCwrO)Y=LaN1x!u4-Szj>eDUb+RHUa4VHzN@x)(>)~Dm#p^M#pNa1X1c+)ow5(% z7W(-F*uuZqvO%I3@N*>>TXso(+OmtmY+!wU4EOh(9zVFf&tJ1a=ugg~P4ghi4Ub+~lCMoM8FVwNPmbntxC#dVT5PS(zPHn5CM_ zTJ6xA_b{{jyDg?K)k1dZ^DSK->GLE1`H5;Pemd!g^7x^5`tuIXkKOv)!{^6TYJTV; z?HWSRL()UiL()S!5sxe0L-HQTx)%gDBsU}-F6D75^LL4VaT4E=XqOuHk>aZ}j#};Y zVkTCn^*LOj)9=-#-@}AMo{Kk?ccVFewx>J}*4`XG--hyCwLLB(B1KpRes3e(qJ&-6 z^vW_cTR6lq;E+!G_u=xO@4d{lKEu`A>G?+AtHZ02kLdZ);fwr>SvBi!4_^So`)g8z z^TYN|cm5i(6A_UJmJwd+g10E?kX@|@=K2`6w`zGzrN)mh9h7|p(tV&$L`38W9?~dQ zT$O(QDcz#PlLiL;#5G+!GCQ#!w|L=0>S{?1=@F;&`LR^Hw~>BNpxQkoD`%`*9@X0G ze&22ezD}Zuh$LXhZb$fgNZ}znTwmyW7WBQGY@2)=en_1jvYXQHA<-c_dVaLIPJDI|S8NbhgGqz2hh!s&<9^omL!DuQ(2?9zQ;*A-li$ zf*-EWxP0O7Gh`LPe?7c3RC=kJbahIvmcH%T)x+@+R=S5Yva6df z=^+l!7_uguS$1IyAlzQHEW2v+EkDanqBbuNSv5FZP@NxD^TZYFEk7Fof>#G=vrytBV4}x#n|w)?-726bnGX`PyHOpwC{Dx!?bVPTa$dtl@3}% zqJoIX8Zl&dKzH;`|4G-f>)~g5;oq08Q|S-F_4E*Qx_o=B5P5va?$`===;h6ee_7u* z9jL#)lqoVz%kNt@s`&hjom%uY$3I~YpjCU6C7ND%`nt0Ud& \ No newline at end of file +?> diff --git a/css/default.css b/css/default.css new file mode 120000 index 0000000..a34b1e9 --- /dev/null +++ b/css/default.css @@ -0,0 +1 @@ +bw3.css \ No newline at end of file diff --git a/css/fm.css b/css/fm.css index b057550..4ac4379 100644 --- a/css/fm.css +++ b/css/fm.css @@ -1,10 +1,12 @@ @charset "UTF-8"; @import "core-layout.css"; -/* $Id$ */ +/* $Id: fm.css 846 2006-03-24 17:01:46Z ant $ */ html { font: 1em "Nimbus Sans L", "Trebuchet MS", sans-serif; color: #dff; background: #247 url(fm/background.png) } -h1 { font-size: 164%; padding: 0 0 0 150px } +h1 { font-size: 164%; padding: 0 0 0 100px } +h2 { font-size: 132%; padding: 0 0 0 50px; margin: 0.1em } +h3, caption { font-size: 116%; padding: 0 0 0 25px; text-align: left } table { font-size: 97%; width: 100%; border-spacing: 1px } td { padding: 2px } @@ -15,7 +17,7 @@ p { padding: 0.2em } blockquote { padding: 0.5em; border: 1px dashed #fff } blockquote[cite]::before { content: attr(cite) ":"; padding: inherit 0; border-bottom: 1px solid #fff } -#footer fieldset { float: right } +#footer fieldset, #footer label { float: right; clear: right } #footer p, #footer address { font-size: small; line-height: 1.2em; text-align: center } fieldset, legend { border: 1px dotted #7ab; margin: 0.2em } @@ -25,9 +27,9 @@ input[type="submit"], button { background: #fa0; color: #000; border: 1px dotted input[type="submit"]:active, button:active { border-style: inset } a { color: #acf; background: transparent; border-bottom: 1px dashed; text-decoration: none } -a:hover { color: #aff; background: transparent } +a:hover { color: #aff } -.nl a { color: #fff; background: url(img/blackvg_50) bottom repeat-x; border: 1px solid #fff; padding: 0 1em } +.nl a { color: #fff; border: 1px solid #fff; padding: 0 1em; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAuCAQAAABD5rvhAAAAHklEQVQIW2NgYGRiYAYjJhiDGZsIEzZBPFwiTUOwAToXANnERDF4AAAAAElFTkSuQmCC) /*blackvg_50*/ bottom repeat-x } .nl a:hover { background-color: #66f } .nl dd { color: #000; background: transparent; margin: 0; padding: 0 } @@ -36,16 +38,15 @@ a:hover { color: #aff; background: transparent } .error a, .notice a { background: inherit; color: #00f } th, .nl { padding: 4px; margin: 1px 0 } -th:first-child { -moz-border-radius-topleft: 1em } -th:last-child { -moz-border-radius-topright: 1em } -th[scope="row"] { -moz-border-radius: 1em 0em 0em 1em } +.info, dt, th, .nl, caption { color: #000; background: #bce url(img/whitevg.png) bottom repeat-x } +th[scope="row"] { background: #bce url(img/whitehg.png) right repeat-y; } +.info a, dt a, th a { color: #00f } +.info a:hover, dt a:hover, th a:hover { color: #55f } +.content { color: #dff; background: #556; padding: 3px } +.section { border: 5px #556 solid; margin: 1em } -.info, dt, th, .nl { color: #000; background: #fff url(img/o-bluevg) repeat-x } -.info a, dt a, th a { color: #00f; background: transparent } -.content { color: #dff; background: #556 } +.c1 { color: #dff; background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAEUlEQVQokWNgWEUAjioYSQoAB1GqAWphdRUAAAAASUVORK5CYII=) /*black_66*/ } +dd, .c0, legend { color: #dff; background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAEUlEQVQokWNgqCcARxWMJAUAwi5/AZM40YEAAAAASUVORK5CYII=) /*black_50*/ } -.c1 { color: #dff; background: transparent url(img/black_66) } -dd, .c0, legend { color: #dff; background: transparent url(img/black_50) } - -#boardlist tr { background: url(img/blackvg) bottom repeat-x; min-height: 23px } +#boardlist tr { background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAuCAQAAABD5rvhAAAAIUlEQVQYlWNiYGZiYGViYEMl2TBEWHEoYMWrmA23AnQbAVy/AVoKW4VeAAAAAElFTkSuQmCC) /*blackvg*/ bottom repeat-x; min-height: 23px } #messagebox { float: left } diff --git a/css/gamefaqs.css b/css/gamefaqs.css index 6e8a147..d232cbe 100644 --- a/css/gamefaqs.css +++ b/css/gamefaqs.css @@ -1,12 +1,12 @@ @charset "UTF-8"; @import 'core-layout.css'; -/* $Id$ +/* $Id: gamefaqs.css 844 2006-03-24 16:58:08Z ant $ SO2 GameFAQs Classic theme - by Aquatakat */ -html { background: #fff; color: #000; font: 83% "Arial", "Nimbus Sans L", sans-serif; } +html { background: #fff; color: #000; font: 83% "DejaVu Sans Condensed", "Arial", sans-serif; } -.nl, #footer p, #index-stats { background: #33c; color: #fff; font-size: 110%; font-weight: bold; text-align: center; } +.nl, #footer p { background: #33c; color: #fff; font-size: 110%; font-weight: bold; text-align: center; } .nl li { display: inline; } .nl li:after { content: " | "; } .nl li:last-child:after { content: ""; } @@ -38,4 +38,5 @@ a:visited { color: #00004f; } #navbar { float: right; border-left: 3px solid; padding: 1px .5em; } -#index-stats ~ p { margin: 0.3em } +#boardlist-stuff p { margin: 0.3em; float: left } +#boardlist-stuff + * { clear: left } diff --git a/css/gfcss10.css b/css/gfcss10.css index 963b3d9..d86a5c3 100644 --- a/css/gfcss10.css +++ b/css/gfcss10.css @@ -1,7 +1,7 @@ @charset "UTF-8"; @import "core-layout.css"; -/* $Id$ */ +/* $Id: gfcss10.css 910 2006-05-06 16:47:20Z ant $ */ a { color: #00f } a:hover { background: #fff; outline: 1px solid #ccc } @@ -9,7 +9,8 @@ a:hover { background: #fff; outline: 1px solid #ccc } html { background: #c5caff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAADCAIAAAGquMJDAAAAFUlEQVQI12N48uIbw9v3PxnuPPgMADHHCEd3YLtLAAAAAElFTkSuQmCC) } body { padding: 0 32px } -h1 { text-align: right; color: #fff; min-height: 38px; margin: 0 -32px; font-size: 1.2em; background: +h1 { text-align: right; color: #fff; min-height: 38px; margin: 0 -32px; font-size: 1.4em; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAmCAYAAAF2ThGsAAAAxElEQVQY07XRMUqDQRAF4G+HPwjewM6DWApCBLFOoeBikUV7a8HGWtJISOkJ3NoT2FlbeQSRWGQt1PwkoNg4xWPeG2Z4M+NkfN8ipSTQw5Zcauu1z8il7q0VVuEt8BzY77tSLrWtTPo5Wcilzr+Vl1zqRuAJVx2O8Pqrhb/CPHAauAjMAreB46Xfte3/l7TWepJSguXVFki46zDG7nQyHKVc6jsGuOlwjZ3pZHiecqmBQzwGLnGG7fT1xwM8yKVu5lIH8AGM/DbP1OvwbgAAAABJRU5ErkJggg==) repeat-x } .nl { margin: 0.5em } @@ -18,14 +19,12 @@ url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAmCAYAAAF2ThGsAAAAxElEQV .nl a { padding: 0 0.2em } #navbar { float: right } -#navbar li:last-child::after { content: ' :Nav' } #userheader li:first-child::before { content: 'User: ' } table { border-spacing: 0; width: 100%; margin: 0 auto } caption { background: #bbc; font-size: 1.2em; margin-top: 0.5em; -moz-border-radius: 50% 50% 0 0 } th { background: #636AB6; color: #fff } th[scope="row"] { text-align: left } -th[title] { text-decoration: underline } td { background: #eee } .c1 td { background: #ddf } @@ -43,8 +42,10 @@ thead tr:first-child th:last-child { -moz-border-radius-topright: 50% } #boardlist col:first-child { width: 50% } #boardlist td:first-child a { display: block; padding: 0.2em 0 } #boardlist td:first-child a + br { display: none } -#boardlist td:first-child + td, #boardlist td:first-child + td + td + td { background: #ddd } -#boardlist td:first-child + td, #boardlist td:first-child + td + td { text-align: right } +#boardlist td:first-child + td, +#boardlist td:first-child + td + td + td { background: #ddd } +#boardlist td:first-child + td, +#boardlist td:first-child + td + td { text-align: right } #topiclist td:first-child a:visited::before { content: '× '; color: #000 } #topiclist td:first-child a { display: block; padding: 0.3em 0 } @@ -55,8 +56,9 @@ thead tr:first-child th:last-child { -moz-border-radius-topright: 50% } #quickpost fieldset { border: 2px solid #636ab6 } #pagelist-head dd { display: none } -#pagelist-head dt + dd, #pagelist-head dd:last-child, #pagelist-head dd.curpage, - #pagelist-head dd.prev, #pagelist-head dd.next { display: inline } +#pagelist-head dt + dd, +#pagelist-head dd:last-child, +#pagelist-head dd.curpage, #pagelist-head dd.prev, #pagelist-head dd.next { display: inline } #pagelist-head dd.prev a::after { content: ' (Previous)' } #pagelist-head dd.next a::after { content: ' (Next)' } #pagelist-head dt + dd a::after { content: ' (First)' } @@ -67,9 +69,7 @@ thead tr:first-child th:last-child { -moz-border-radius-topright: 50% } #footer fieldset { position: absolute; top: 0; left: 0; border: 0; padding: 0; margin: 0; color: #fff } #footer legend { display: none } -#footer label { font-size: x-small } -#footer input { font-size: small } +#footer label { font-size: small } input[type="password"] { background: #ff8 } -#footer button { vertical-align: top; padding: 0 } +#footer button { vertical-align: top } #footer p { text-align: right } -#footer p strong { font-weight: normal } diff --git a/css/gfh2.css b/css/gfh2.css index f3e0518..2d66f24 100644 --- a/css/gfh2.css +++ b/css/gfh2.css @@ -1,40 +1,42 @@ @charset "UTF-8"; @import "core-layout.css"; -/* $Id$ */ +/* $Id: gfh2.css 844 2006-03-24 16:58:08Z ant $ */ -html { color: #000; background: #eff url(img/scanlinevg); font: 90% sans-serif; margin: 0.5em } -h1 { font-size: xx-large; font-style: italic } -h2 { font-size: x-large; margin: 5px } -h3 { font-size: large; margin: 4px } +html { color: #000; font: 90% sans-serif; margin: 0.5em; background: #eff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAADCAIAAADdv/LVAAAAFElEQVQIHWN++/Y/c15eAXNCQhIAJsQFUSbzSvQAAAAASUVORK5CYII=) /*scanlinevg*/ } +h1 { font-size: 2em; font-style: italic } +h2 { font-size: 1.7em; margin: 5px } +h3 { font-size: 1.5em; margin: 4px } -#index-stats { display: none } -#index-stats ~ p { border-left: 1em solid #667; padding: 0.1em 1em } +#boardlist-stuff { border-left: 1em solid #334; background: #ddd; padding: 0.1em 1em } #pagelist-head { display: none } #messagebox { float: left } -table { width: 100%; border-spacing: 1.05px 1px; padding: 0.3em; background: #aac } +table { width: 100%; border-spacing: 1.05px 1px; padding: 0.3em; background: #aab } th, caption { font: 110% sans-serif; font-weight: bold; font-style: italic } dl, form { margin: 2px 0 } dt { max-width: 30em; margin-top: 1px } -dd { border-left: 1em solid #667; margin: -1px 0 0 1em; padding: 0.2em 0 0.2em 1em } +dd { border-left: 1em solid #334; margin: -1px 0 0 1em; padding: 0.2em 0 0.2em 1em } p { line-height: 1.4em } textarea { vertical-align: middle } -a { color: #00a; text-decoration: none; font-weight: bold; border-bottom: 1px solid } +fieldset, legend { border: 4px double #aab } +legend { border-width: 3px 6px; border-style: double; margin: 3px; background: #eee } + +a { color: #00a; text-decoration: none; border-bottom: 1px solid } a:visited { color: #448; border-bottom-style: dotted } -a:hover, a:active { color: #990 } +a:hover, a:active { color: #840 } th a, .nl a, #footer a, dt a { color: #fff !important } -th, dt, .nl, #footer { color: #fff; background: #667; font-weight: bold } +th, dt, .nl, #footer { color: #fff; background: #334; font-weight: bold } -.nl { padding: 0.5em; margin: 1px 0 } +.nl { padding: 0.3em; margin: 1px 0 } .nl dd { padding: 0; margin: 0; border: none } .nl dd a { padding: 0 0.2em } .nl li + li::before { content: ' | ' } @@ -42,7 +44,7 @@ th, dt, .nl, #footer { color: #fff; background: #667; font-weight: bold } #footer { padding: 0; margin: 0 } #footer p { padding: 0.5em; margin: 0 } -#footer fieldset { margin: 0; padding: 0; border: none; float: right; background: #667 } +#footer fieldset { margin: 0; padding: 0; border: none; float: right; background: #334 } #footer legend { display: none } #footer label, #footer label ~ button { display: block } #footer:target fieldset { color: #000; background: #ff0 } @@ -50,7 +52,7 @@ th, dt, .nl, #footer { color: #fff; background: #667; font-weight: bold } th, td, dt, .c0, .c1, .info, .content { padding: 0.3em } .notice, .error { background: #ff0 } -.content, .c1 { background: #ccd } +.content, .c1 { background: #cfcfd7 } .info, .c0, caption { background: #cfcfcf url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAICAQAAACSE13KAAAAGklEQVQI12 P438fE8I6J4T0TwzsY4z0TwzsAZQwIIYbp4d8AAAAASUVORK5CYII=") repeat-x } .thread { margin-left: 1em } diff --git a/css/img/blackvg_50.png b/css/img/blackvg_50.png index 2722af1be03b323337ff4977da9876c2b5c8ba0b..93d325a6749ba3a984d5adfffbd98c5379117b37 100644 GIT binary patch delta 56 zcwUPRpP*ta=jq}Y!V#UEkdTs;z^1Gw(JVQeL)gsGCPvBEc>|-BIK#~&E`}8hK;Y@> K=d#Wzp$P!ATn~N# delta 60 zcwP&So}gl`5d#$eB3_#%N L>gTe~DWM4fl-(6! diff --git a/css/img/img-encode.pl b/css/img/img-encode.pl new file mode 100755 index 0000000..b77b92d --- /dev/null +++ b/css/img/img-encode.pl @@ -0,0 +1,28 @@ +#!/usr/bin/perl +# Takes image filename, outputs file contents in format for css background +# (Public Domain) / Ant P. / 2007-02-01 +use strict; +use warnings; +use URI::data; + +foreach (@ARGV) { + print &file_to_data($_)."\n\n" if ( -r ); +} + +sub file_to_data { + my $file = shift; + (my $type = `file -bi $file`) =~ s/\s//g; + my $dat = URI->new('data:'); + + print "========== $file\n"; + if ( $type eq 'image/png' ) { + print `optipng -i0 $file`; + } else { + print "Not preprocessing filetype $type\n"; + } + + $dat->media_type($type); + $dat->data(scalar(`cat $file`)); + + return $dat; +} diff --git a/css/img/o-bluevg.png b/css/img/o-bluevg.png deleted file mode 100644 index f8d3f1d974a18b4b6783b9ea04cee74a226caea8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcwPel00001 literal 103 zcwXxa@N?(olHy`uVBq!ia0vp^j6f{Q!2~3qBu}&hQhJ^)jv*Y^lW*+$ZzpVQtSl@n ztSoFSJS8p7X~V;$BP$)nl7Y;r=}9R+zQ31ea42U}QQct{57f!v>FVdQ&MBb@0O&y+ AoB#j- diff --git a/css/img/scanlinevg.png b/css/img/scanlinevg.png index 685528ffc512a800676cbc3008b90b8a1b465a73..15980a305e254079a11a80f1f2e9d80acb504543 100644 GIT binary patch delta 57 zcwP(iogit##K6FCcmJoWKuW~Z#W93KHo5NiH~ZqaIL2ZpCm{y4BdmdHpS`{SbP0l+XkKf~gep diff --git a/css/img/wb_back_corner.png b/css/img/wb_back_corner.png new file mode 100644 index 0000000000000000000000000000000000000000..ee3f738e02f93c6908f333d26d0ac20a339619dc GIT binary patch literal 581 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 literal 91 zcwXxa@N?(olHy`uVBq!ia0vp^j6kf%!2%?mpY47Kq?9~e9780gCjUBr=E#9lM-H@k pZA$Fe@F?IwSGb{c9_tG;CWfbGOp%@$2~j}R44$rjF6*2UngD8j96100 diff --git a/css/scaly.css b/css/scaly.css index bd2a6f2..dcbefae 100644 --- a/css/scaly.css +++ b/css/scaly.css @@ -1,10 +1,10 @@ @charset "UTF-8"; @import "core-layout.css"; -/* $Id$ */ +/* $Id: scaly.css 844 2006-03-24 16:58:08Z ant $ */ -html { color: #000; background: #e9eeec; font-family: serif } -body { margin: 5px; border: 3px double #ccc } +html { color: #000; background: #d9dddc; font-family: serif } +body { margin: 5px; background: #e9eeec; border: 3px double #ccc } a, a:visited { color: #44b } a[href^="user?"] { color: #383 } @@ -12,14 +12,15 @@ a:hover { color: #00f } a:focus { color: #800 } #footer a { color: #fff } -h1 { background: url(img/wb_back) bottom repeat-x; font-size: 1.45em; - letter-spacing: -1px; border: 1px solid #ccc; border-bottom-width: 2px } +h1 { background: url(img/scaly.png) repeat-x; font-size: 1.4em; padding-top: 8px; text-align: center } h2 { font-size: 1.2em } table { border-spacing: 1px; width: 100%; margin: 0; padding: 0 } -th, td { background: #d5dfda } -th { background: #cacccb url(img/wb_back) center repeat-x; font-style: italic } -th[scope="row"] { background: #cacccb url(img/wb_back_horz) right repeat-y } +th, td { background: #d5dfda; padding: 2px } +th { background: #cacccb url(img/wb_back.png) bottom repeat-x; font-style: italic } +th[scope="row"] { background: #cacccb url(img/wb_back_horz.png) right repeat-y } +#board_stats td:first-child { background: #cacccb url(img/wb_back_corner.png) bottom right no-repeat; empty-cells: show } +#board_stats { border-spacing: 0 } dt { border-left: 3px #887 double; border-bottom: 3px #887 double; font-weight: bold; margin-top: 0.5em; padding: 0 0.5em } dd { margin-left: 1em; padding: 0 0.5em } @@ -28,23 +29,21 @@ fieldset, legend { border: 1px #777 solid } legend { color: #000; background: #ddd } input[type="text"], input[type="password"] { padding: 0.1em 0.5em; vertical-align: middle } -input[type="submit"], button - { padding: 0.2em; border: 1px #080 dotted; background: #cfe6cf; color: #484; font: 1.05em serif } -input[type="submit"]:hover, button:hover - { border-style: outset; cursor: pointer } -input[type="submit"]:active, button:active - { border-style: inset } - -.nl { text-align: center; list-style: none; margin: 0.5em 0; padding: 0.1em 0 } +input[type="submit"], button { padding: 0.2em; border: 1px #080 dotted; background: #cfe6cf; color: #484; font: 1.05em serif } +input[type="submit"]:hover, button:hover { border-style: outset; cursor: pointer } +input[type="submit"]:active, button:active { border-style: inset } + +.nl { text-align: center; list-style: none; margin: 0.5em 0; padding: 0 } .nl dt, .nl dd { border: none; margin: 0; padding: 0 } .nl a { white-space: nowrap } -.nl a, .error { padding: 0.1em 0.5em; background: #565 url(img/wb_back) repeat-x; color: #fff; - border-color: #565; border-width: 2px 3px; border-style: solid double } -.nl a:hover { background-color: #767; border-color: #767 } +.nl a, .nl .curpage, .error { padding: 0.1em 0.5em; background: #464 url(img/wb_back.png) repeat-x; color: #fff; + border-color: #464; border-width: 2px 3px; border-style: solid double; line-height: 1.5 } +.nl a:hover { background-color: #867; border-color: #867 } .nl a:focus { background-color: #500; border-color: #500 } .error { background-color: #840; border-color: #840 } +.nl .curpage { background-color: #888; border-color: #888 } -.nl, #footer { background: #666 url(img/scaly) repeat-x; color: #fff } +.nl, #footer { background: #666 url(img/scaly.png) repeat-x; color: #fff } #footer { text-align: right } #footer fieldset { display: inline; padding: 0.1em; vertical-align: bottom } @@ -53,6 +52,6 @@ input[type="submit"]:active, button:active .info, .notice { background: #cdc; padding: 0.3em } .content { background: #d8dfda; padding: 0.2em } -.thread { padding-left: 1em } +#messagelist .thread { margin-left: 1ex; border-left: 0.2em dotted #ddd; padding-left: 1ex } #messagebox { float: left; margin: 0 1em } diff --git a/css/gamefaqs.css b/css/u10.css similarity index 78% copy from css/gamefaqs.css copy to css/u10.css index 6e8a147..55b9f44 100644 --- a/css/gamefaqs.css +++ b/css/u10.css @@ -1,12 +1,12 @@ @charset "UTF-8"; @import 'core-layout.css'; -/* $Id$ +/* $Id: gamefaqs.css 844 2006-03-24 16:58:08Z ant $ SO2 GameFAQs Classic theme - by Aquatakat */ -html { background: #fff; color: #000; font: 83% "Arial", "Nimbus Sans L", sans-serif; } +html { background: #fff; color: #000; font: 83% "DejaVu Sans Condensed", "Arial", sans-serif; } -.nl, #footer p, #index-stats { background: #33c; color: #fff; font-size: 110%; font-weight: bold; text-align: center; } +.nl, #footer p { background: #33c; color: #fff; font-size: 110%; font-weight: bold; text-align: center; } .nl li { display: inline; } .nl li:after { content: " | "; } .nl li:last-child:after { content: ""; } @@ -38,4 +38,5 @@ a:visited { color: #00004f; } #navbar { float: right; border-left: 3px solid; padding: 1px .5em; } -#index-stats ~ p { margin: 0.3em } +#boardlist-stats p { margin: 0.3em; float: left } +#boardlist-stats + * { clear: left } diff --git a/css/u3.css b/css/u3.css new file mode 100644 index 0000000..c62a11b --- /dev/null +++ b/css/u3.css @@ -0,0 +1,41 @@ +@charset "UTF-8"; +@import "core-layout.css"; + +html { color: #ddd; background: #333; font-family: 'DejaVu Sans Condensed', 'Arial', sans-serif } +body { margin: 0 10px; background: url(data:image/png) } + +a { color: #c44 } +a:hover { color: #aaf } + +body > h1 { margin: 0 -10px; height: 80px; position: relative; + background: url(bw3/toptiles-inv.png) repeat-x; + text-align: left; font-size: 1.2em; font-weight: normal } +body > h1 span { position: absolute; top: 0; right: 0 } +body > h1::before { content: url(bw3/header-inv.png) } + +h2 { font-size: 1.3em; text-align: right; margin: 0.5em 1em } + +fieldset, legend, .nl, .error, .notice, .info { border: 2px #a00 solid; padding: 5px; margin: 3px } +fieldset, legend { background: #000 } +.nl, .error, .notice, .info { color: #fc8; background: #222 } +.info { border-color: #0f0 } +.notice { border-color: #7f0 } +.error { border-color: #f00 } + +button, input, textarea, select { background: #006; color: #fff } + +table { width: 100% } +th, .message > .info { background: url(bw3/toptiles-inv.png) bottom; padding: 3px; border: 1px #333 solid } +td, .message > .content { padding: 4px; border: 1px #c00 dotted; background: #111 } + +#navbar::before { content: 'Board Nav: ' } +#userheader::before { content: 'User Nav: ' } +.nl { padding: 5px 1em; list-style: none; -moz-border-radius: 1em } +.nl li { display: inline } +.nl li + li::before { content: ' | '; color: #acc } + +#footer, #footer fieldset { background: #222; border: 2px #000 solid } +#footer { padding: 0; margin: 1em 0; font-size: small } +#footer p { padding: 2px; margin: 0 } +#footer fieldset { margin: 0; padding: 0; float: right; border-style: none none none solid } +#footer legend { display: none } diff --git a/data/.htaccess b/data/.htaccess new file mode 100644 index 0000000..3a42882 --- /dev/null +++ b/data/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/detail.php b/detail.php dissimilarity index 90% index 2198a5c..2208051 100644 --- a/detail.php +++ b/detail.php @@ -1,146 +1,131 @@ -title = 'Message Detail'; - -/* Error checks */ -if ( ! ($user instanceof User_Authenticated) ) { - $page->errorfooter('login'); -} -if ( ! $user->has_priv('moderate') ) { - $page->errorfooter('level'); -} -if ( empty($_SERVER['QUERY_STRING']) || !is_numeric($_SERVER['QUERY_STRING']) ) { - $page->errorfooter('messageid'); -} -if ( isset($_POST['action']) && !in_array($_POST['action'], array('add', 'sub')) ) { - $page->errorfooter('request'); -} - - -/* Get topic metadata */ -$topic = $DB->query('SELECT `board_name`, `boards`.`boardid`, `topic_title`, `view_restrict`, `topicid` - FROM `boards` NATURAL LEFT JOIN `topics` - WHERE `topicid` = - (SELECT `topicid` FROM `messages` WHERE `messageid` = '.intval($_SERVER['QUERY_STRING']).')'); - - -/* more error checks plz */ -if ( 0 === $topic->num_rows ) { - $page->errorfooter('messageid'); -} else { - $topic = $topic->fetch_assoc(); -} - -if ( ! $user->has_priv('viewboard', $topic['view_restrict']) ) { - $page->errorfooter('level'); -} - - -/* Set header stuff */ -$page->title .= ': '.$topic['topic_title'].' (msg#'.$_SERVER['QUERY_STRING'].')'; -$page->nav['Topic List: '.$topic['board_name']] = 'topiclist?'.$topic['boardid']; -$page->nav['Message List: '.$topic['topic_title']] = 'messagelist?'.$topic['topicid']; - - -$query = 'SELECT `messages`.`userid`, `alias`, `mtime`, `mtext`, `replyto`, - `score`, `marks`, `messages`.`messageid`, INET_NTOA(`origin_ip`) AS `ip` - FROM `message-data` - NATURAL LEFT JOIN `messages` - NATURAL LEFT JOIN `users` - WHERE `messageid` = '.intval($_SERVER['QUERY_STRING']); - -define('HERE', $_SERVER['REQUEST_URI']); - -if ( isset($_POST['action']) ) { - - // Update message with new score - try { - $meta = $DB->query($query)->fetch_assoc(); - - $DB->autocommit(false); - - // Score depends on how many points the user has (i.e. the number of digits in it) - $score = ( 'add' === $_POST['action'] ? - floor(log($user->points, 10)) - :-( - floor(log($user->points, 10))) - ); - - if ( !isset($_SERVER['HTTP_REFERER']) || !preg_match('/messagelist|detail/', $_SERVER['HTTP_REFERER']) || - strpos($_SERVER['HTTP_REFERER'], 'http://'.$_SERVER['HTTP_HOST']) !== 0 ) { - throw new InvalidInputException('Invalid HTTP referrer sent: make sure you\'re using the right links.'); - } - if ( $DB->query('SELECT `messageid` FROM `marks` - WHERE `userid` = @userid AND `messageid` = '.intval($_SERVER['QUERY_STRING']))->num_rows ) { - throw new RateLimitException('You\'ve already marked/suggested this message.'); - } - if ( $user->userid === $meta['userid'] ) { - $user->points -= 5; - throw new RateLimitException('No.'); - } - - // Update message score - $DB->query('UPDATE `messages` SET `score` = `score` + '.$score.', `marks` = `marks` + 1 WHERE `messageid` = '.$meta['messageid']); - - // Update user score - $user2 = new User_Registered($meta['userid'], array('`points`')); - $user2->points += $score; - - // Add to marked messages list - $DB->query('INSERT INTO `marks` VALUES ('.intval($_SERVER['QUERY_STRING']).', @userid, '.$score.', UNIX_TIMESTAMP())'); - - $DB->commit(); - - header('Refresh: 5; url='.$_SERVER['HTTP_REFERER']); - $user->userheader(); - echo '

Message successfully rated! You will be dumped back wherever you came from in 5 seconds.

',"\n"; - - } catch ( Exception $e ) { - $DB->rollback(); - $user->userheader(); - echo '

',$e->getMessage(),"

\n"; - } -} else { - $user->userheader(); -} - -switch ( $user->msglist_style ) { - case Messagestyle_Frozenoven::ID: - $mo = new Messagestyle_Frozenoven; break; - case Messagestyle_IRC::ID: - $mo = new Messagestyle_IRC; break; - case Messagestyle_Plain::ID: - default: - $mo = new Messagestyle_Plain; -} - -$message = $DB->query($query)->fetch_assoc(); - -echo '
\n"; - $mo->display($message); -echo "
\n"; - -if ( !isset($_POST) && $user->userid != $message['userid'] ) { - echo '

Click the +/- links on the message to give or take points from it.

'; -} - -$m_usrs = $DB->query('SELECT `marks`.`userid`, `alias` - FROM `marks` NATURAL LEFT JOIN `users` - WHERE `messageid` = '.intval($_SERVER['QUERY_STRING'])); - -if ( $m_usrs->num_rows ) { - echo '

People who rated this post: ',implode(', ', $user->fillnamecache($m_usrs)),"

\n"; -} - -$page->pagefooter(); -?> + + * @licence file://COPYING + * @version 2.15 + */ + +require 'con.php'; + +SO2::$Page->title = 'Message Detail'; + +// Error checks +if ( ! (SO2::$User instanceof User_Authenticated) ) { + SO2::$Page->message(Page::ERR_LOGIN); +} +if ( ! SO2::$User->has_access('moderate') ) { + SO2::$Page->message(Page::ERR_ULEVEL); +} +if ( empty($_SERVER['QUERY_STRING']) || !is_numeric($_SERVER['QUERY_STRING']) ) { + SO2::$Page->message(Page::ERR_NOMSG); +} +if ( isset($_POST['action']) && !in_array($_POST['action'], array('add', 'sub')) ) { + SO2::$Page->message(Page::ERR_BADREQ); +} + + +// Get topic metadata +$topic = SO2::$DB->q('SELECT board_name, boards.boardid, topic_title, view_lvl, points, topicid '. + 'FROM boards LEFT JOIN topics USING(boardid) '. + 'WHERE topicid = (SELECT topicid FROM messages WHERE messageid = ?)', + $_SERVER['QUERY_STRING']); + +// more error checks plz +if ( ! $topic ) { + SO2::$Page->message(Page::ERR_NOMSG); +} + +if ( ! SO2::$User->has_access('viewboard', $topic) ) { + SO2::$Page->message(Page::ERR_ULEVEL); +} + + +// Set header stuff +SO2::$Page->title .= sprintf(': %s (msg#%d)', $topic['topic_title'], $_SERVER['QUERY_STRING']); +SO2::$Page->nav['Topic List: '.$topic['board_name']] = 'topiclist?'.$topic['boardid']; +SO2::$Page->nav['Message List: '.$topic['topic_title']] = 'messagelist?'.$topic['topicid']; + + +// Get metadata from the actual message being modified +$meta = SO2::$DB->q('SELECT userid, mtime, topicid, replyto, score, marks, messageid, INET_NTOA(origin_ip) AS ip '. + 'FROM messages WHERE messageid = ?', $_SERVER['QUERY_STRING']); + +define('HERE', $_SERVER['REQUEST_URI']); + +if ( isset($_POST['action']) ) { + + // Update message with new score + try { + SO2::$DB->beginTransaction(); + + // Score is proportional to the user's number of points + $score = ( 'add' === $_POST['action'] + ? SO2::$User->has_access('moderate') + :-( SO2::$User->has_access('moderate') ) + ); + + // Security check + if ( !isset($_SERVER['HTTP_REFERER']) + || !preg_match('/messagelist|detail/', $_SERVER['HTTP_REFERER']) + || strpos($_SERVER['HTTP_REFERER'], 'http://'.$_SERVER['HTTP_HOST']) !== 0 ) { + throw new InvalidInputException('Invalid HTTP referrer sent: make sure you\'re using the right links.'); + } + + if ( SO2::$DB->q('SELECT COUNT(*) FROM marks WHERE userid = @userid AND messageid = ?', + $_SERVER['QUERY_STRING'], SO2_PDO::QVALUE) ) { + throw new RateLimitException('You\'ve already marked/suggested this message.'); + } + + if ( SO2::$User->userid === $meta['userid'] ) { + SO2::$User->points -= 5; + throw new RateLimitException('No.'); + } + + // Update message score + SO2::$DB->q('UPDATE messages SET score = score + ?, marks = marks + 1 WHERE messageid = ?', + array($score, $meta['messageid'])); + + // Update user score + $user2 = new User_Registered($meta['userid']); + $user2->points += $score; + + // Add to marked messages list + SO2::$DB->q('INSERT INTO marks VALUES (?, @userid, ?, UNIX_TIMESTAMP())', array($_SERVER['QUERY_STRING'], $score)); + + SO2::$DB->commit(); + + header('Refresh: 5; url='.$_SERVER['HTTP_REFERER']); + SO2::$Page->message('Message rated! You will be sent back to the previous page in 5 seconds.', E_USER_NOTICE); + exit; + } catch ( RateLimitException $e ) { + SO2::$Page->message($e->getMessage(), E_USER_WARNING); + } catch ( InvalidInputException $e ) { + SO2::$Page->message($e->getMessage(), E_USER_WARNING); + } +} else { + SO2::$Page->pageheader(); +} + +if ( file_exists('lib/Messagestyle_'.SO2::$User->msglist_style.'.php') ) { + $style = 'Messagestyle_'.SO2::$User->msglist_style; +} else { + $style = 'Messagestyle_Default'; +} +$mo = new $style; + +echo '
\n"; + $mo->display($meta); +echo "
\n"; + +if ( ! isset($_POST) && SO2::$User->userid != $message['userid'] ) { + echo '

Click the +/- links to give or take points. Everyone can see who voted for a message.

'; +} + +$marks = SO2::$DB->q('SELECT userid FROM marks WHERE messageid = ?', $_SERVER['QUERY_STRING'], SO2_PDO::QOBJ)->fetchAll(PDO::FETCH_COLUMN); + +if ( count($marks) ) { + echo '

Post modded by: ',implode(', ', array_map(array(SO2::$Page, 'namelink'), $marks)),"

\n"; +} +?> diff --git a/docs/changelog.xhtml b/docs/changelog.xhtml new file mode 100644 index 0000000..3232b94 --- /dev/null +++ b/docs/changelog.xhtml @@ -0,0 +1,55 @@ + + + + SO2 Changelog + + + + +

Special Ops 2 Changelog

+ + +

This is sort of in reverse chronological order.

+ +
+

SO 2.50 - This is SPARTAAAAAAAAAAAAAAAAAAAAAA!!!1

+

Everything has been completely redone in this version. The main highlights are speed improvements, security + improvements, UI improvements... everything really.

+

Most of the speed optimisation in this version was made possible thanks to XDebug [http://xdebug.org].

+
    +
  • Added docs/ dir, changelog
  • +
  • Got rid of the ugly User::has_priv() function and replaced it with a much better + designed User::has_access(), which also enabled finer-grained board access control.
  • +
  • Implemented SO1-style userlevels and board access controls
  • +
  • Rewrote themeing system to allow more fine-grained control of custom CSS, and cleaned up the theme page
  • +
  • Added a few more HTML form utility classes
  • +
  • Added a full, correct timezone setting instead of an hour offset - DST works automatically
  • +
  • Fixed up the HTTP caching slightly
  • +
  • Moved namelink() and fdate() functions out of + User and into Page class, which also required making user.php + partially viewable for anonymous users.
  • +
  • Replaced per-page username cache with memcache-based one. This has had major side-effects, in particular a bunch of + SQL query joins used to speed up the old namelink code are now completely unnecessary (and gone!)
  • +
  • Rewrote the FO3 messagelist display to display quotes only when it makes sense to do so (in the threaded view, this + is almost never; HTML output is much smaller now).
  • +
  • Rewrote (message|topic)list paging code, previously it was an appaling mess of nested ternary operators.
  • +
  • Rewrote options.php with cleaner code and slightly better UI.
  • +
  • Rewrote stuff.php - stats code many times smaller, text moved into separate XML files in + res/.
  • +
  • Moved sensitive data out of con.php into res/config.ini
  • +
  • Removed all mysqli code, now using SO2_PDO class.
  • +
  • Made a SO2::* container class for stuff that used to use $GLOBALS
  • +
+
+ +
+

SO 2.14 - This is madness!

+

Beginning of rewriting everything for PDO.

+

This one works, but it's half finished and a mess (two DB objects for nothing).

+
+ + diff --git a/COPYING b/docs/copying.txt similarity index 88% rename from COPYING rename to docs/copying.txt index 0a21aa8..ddd4a5b 100644 --- a/COPYING +++ b/docs/copying.txt @@ -1,6 +1,6 @@ -$Id$ +$Id: COPYING 920 2006-05-10 00:18:27Z ant $ -Copyright © 2004-2006 Anthony Parsons +Copyright © 2004-2007 "Ant P." (Anthony Parsons) All rights reserved. Redistribution and use in source and binary forms, with or without modification, @@ -21,4 +21,4 @@ any direct, indirect, incidental, special, exemplary, or consequential damages loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this -software, even if advised of the possibility of such damage. \ No newline at end of file +software, even if advised of the possibility of such damage. diff --git a/docs/readme.xhtml b/docs/readme.xhtml new file mode 100644 index 0000000..5dabb09 --- /dev/null +++ b/docs/readme.xhtml @@ -0,0 +1,120 @@ + + + + SO2 Readme + + + + +

Special Ops 2 Documentation

+ + +
+

Intro

+

SO2 is yet another message board inspired by the GameFAQs boards, a "spinoff board".

+

The vast majority of spinoff boards are derived from GameFAQs Hell, the first open source attempt at cloning GameFAQs. + SO1 was one of these. The problem with basing anything on GFH is that the Hell in the title refers to the code more + than anything else. This is probably the best example on the net of how not to write code. Just about every + major message board to use it has fallen: SO1, whiteFyre, Outboards, Twisted Legacy. The only sensible choice is + therefore to abandon GFH entirely. SO2 is designed to be its replacement.

+
+ +
+

Installation

+

System Requirements

+
    +
  • PHP 5.1 with PDO-MySQL, PECL-Memcache, SPL
  • +
  • MySQL 5
  • +
  • memcached
  • +
  • Any OS with a POSIX-compliant filesystem
  • +
+

The Memcache parts are optional, but without them SO2 will be unable to cope with loads in excess of 100 online users + and guarantee sub-1 second page loads.

+

One more thing: running a spinoff board isn't the same as running a proboards site. The barriers to entry are there + to protect you and others from yourself. Don't attempt to circumvent them.

+ +

Setup

+

The DB SQL structure is in res/. Setup is almost the same as GFH except for some things:

+
    +
  1. No board editor. Use phpMyAdmin for now.
  2. +
  3. The admin userlevel is more or less useless. See above.
  4. +
  5. The DB password is set in res/config.ini. Make sure this file is unreadable over HTTP.
  6. +
  7. You need to create css/default.css manually, either by symlink or by making a new file.
  8. +
  9. If you want to make your account admin anyway or give it invites to start the board with, add stuff to the + things table. Invites need an arbitrary value in the data column for + authentication; read the source code of register.php.
  10. +
+
+ +
+

More Help

+

If you can't figure out how to get something working, ask on the SO2 help board. You could also try the WD+P board on + GameFAQs, but you're much less likely to get a useful answer from them.

+
+ +
+

Developers

+

todo list (important first)

+
    +
  • SO3
  • +
  • Rewrite the HTML parser classes
  • +
  • Admin tools
  • +
+ +

Source

+

Releases are at http://specialops.ath.cx/

+

Old SVN is available at /repos/so2/ though it's not been updated in over a year. Don't bother.

+

The code is formatted for space indents, width 4. 2 spaces in some places.

+ +

Technical Details

+

The first thing you'll notice if you look through the code is that everything is object-oriented. There are four main + classes in use everywhere:

+ +

The Page class

+

This contains functions for headers, themes, footers, caching, and some error handling/access control.

+

The User class

+

This represents a user. There are three types: Anonymous, for users who aren't logged in, Registered, which represents + a user in the database (mostly for looking at whois pages), and Authenticated, which is what you get if you log in. + They use PHP's magic methods to hide implementation details, and do tricks like caching SQL results or bypassing them + entirely.

+

The SO2_PDO class

+

This is the main database class. It does a bunch of magic behind the scenes to make the SQL code smaller, faster, and + immune to SQL injection. Yes, all at once. SO2 is the first spinoff to use prepared statements throughout.

+

The SO2 class

+

This ties the three above classes together in a namespace sort of thing.

+ +
+

Outside the core most of the other stuff is also OOP:

+ +

Memcache

+

The code uses memcache to store logged in user objects and do fast username lookups. This will still work without + memcache but it'll be much slower.

+ +

Plugin modules

+

Most of the classes in lib/ are actually loadable modules. If you want to make your own, just stick to the filename + conventions and the same interfaces and it'll Just Work™, right down to appearing in the user options automatically. + Some of the message HTML modules haven't been written yet. Nobody's working on these, go ahead and take one.

+
+ +
+

Contributors

+
    +
  • Old GameFAQs theme by Aquatakat
  • +
  • Various ideas from the IRC/board regulars
  • +
  • Want your name here? Code something.
  • +
+
+ + + + diff --git a/docs/so2.sql b/docs/so2.sql new file mode 100644 index 0000000..dfe5a58 --- /dev/null +++ b/docs/so2.sql @@ -0,0 +1,219 @@ +-- phpMyAdmin SQL Dump +-- version 2.10.0.2 +-- http://www.phpmyadmin.net +-- +-- Host: localhost +-- Generation Time: Mar 26, 2007 at 11:43 PM +-- Server version: 5.0.34 +-- PHP Version: 5.2.1-pl3-gentoo + +SET FOREIGN_KEY_CHECKS=0; + +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; + +SET AUTOCOMMIT=0; +START TRANSACTION; + +-- +-- Database: 'so2dev' +-- + +-- -------------------------------------------------------- + +-- +-- Table structure for table 'boards' +-- + +CREATE TABLE boards ( + boardid smallint(6) NOT NULL auto_increment, + groupid tinyint(3) unsigned NOT NULL default '0', + board_name varchar(255) NOT NULL, + caption varchar(255) NOT NULL, + post_lvl enum('none','points','vip','admin') NOT NULL default 'none', + topic_lvl enum('none','points','vip','admin') NOT NULL default 'none', + view_lvl enum('none','login','points','vip','admin') NOT NULL default 'none', + points int(11) NOT NULL default '0', + posts int(10) unsigned NOT NULL default '0', + topics int(10) unsigned NOT NULL default '0', + PRIMARY KEY (boardid), + KEY groupid (groupid) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table 'board_groups' +-- + +CREATE TABLE board_groups ( + groupid tinyint(3) unsigned NOT NULL auto_increment, + group_name varchar(50) character set latin1 NOT NULL, + hidden tinyint(1) NOT NULL default '0', + PRIMARY KEY (groupid) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table 'marks' +-- + +CREATE TABLE marks ( + messageid mediumint(8) unsigned NOT NULL default '0', + userid smallint(5) unsigned NOT NULL, + `change` tinyint(4) NOT NULL, + `time` int(10) unsigned NOT NULL, + PRIMARY KEY (messageid,userid) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table 'messages' +-- + +CREATE TABLE messages ( + messageid int(10) unsigned NOT NULL auto_increment, + topicid int(10) unsigned NOT NULL default '0', + userid smallint(5) unsigned NOT NULL default '0', + mtime int(10) unsigned NOT NULL, + score smallint(6) NOT NULL default '0', + marks smallint(5) unsigned NOT NULL default '0', + replyto int(10) unsigned default NULL, + origin_ip int(10) unsigned NOT NULL, + PRIMARY KEY (messageid), + KEY topicid (topicid), + KEY userid (userid), + KEY replyto (replyto) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table 'themes' +-- + +CREATE TABLE themes ( + themeid tinyint(3) unsigned NOT NULL auto_increment, + theme_name char(20) NOT NULL, + css_file char(20) NOT NULL, + PRIMARY KEY (themeid) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0 ROW_FORMAT=FIXED; + +-- -------------------------------------------------------- + +-- +-- Table structure for table 'things' +-- + +CREATE TABLE things ( + id smallint(5) unsigned NOT NULL auto_increment, + userid smallint(5) unsigned NOT NULL, + what enum('invite','admin') NOT NULL, + `data` varchar(36) default NULL, + PRIMARY KEY (id), + KEY userid (userid), + KEY item (what) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table 'topics' +-- + +CREATE TABLE topics ( + topicid int(10) unsigned NOT NULL auto_increment, + topic_title varchar(255) NOT NULL, + userid smallint(5) unsigned NOT NULL default '0', + boardid smallint(6) NOT NULL default '0', + visibility enum('normal','sticky','deleted') NOT NULL default 'normal', + closed tinyint(1) NOT NULL default '0', + lastpost int(10) unsigned default NULL, + posts int(10) unsigned NOT NULL default '0', + PRIMARY KEY (topicid), + KEY lastpost (lastpost), + KEY boardid (boardid), + KEY userid (userid) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table 'users' +-- + +CREATE TABLE users ( + userid smallint(5) unsigned NOT NULL auto_increment, + alias varchar(25) NOT NULL, + passwd tinyblob, + `level` enum('none','normal','vip','admin') NOT NULL default 'normal', + points int(10) NOT NULL default '0', + cutoff int(11) NOT NULL default '0', + invites tinyint(3) unsigned NOT NULL default '0', + referrer smallint(5) unsigned default NULL, + options set('alwaysonline','javascript','cache','quickpost') NOT NULL default 'alwaysonline', + boardlist_layout varchar(16) NOT NULL, + topiclist_layout varchar(16) NOT NULL, + msglist_layout varchar(16) NOT NULL, + msglist_style varchar(16) NOT NULL, + topics_page tinyint(3) unsigned NOT NULL default '35', + msgs_page tinyint(3) unsigned NOT NULL default '35', + post_html varchar(16) NOT NULL default 'Default', + tz varchar(24) NOT NULL default 'UTC', + theme_type enum('system','user') NOT NULL default 'system', + theme_id smallint(5) unsigned NOT NULL default '1', + custom_css tinyint(1) NOT NULL default '0', + last_passive_date int(10) unsigned NOT NULL, + last_active_date int(10) unsigned NOT NULL, + register_date int(10) unsigned NOT NULL, + sig varchar(255) default NULL, + quote varchar(255) default NULL, + useragent varchar(160) default NULL, + public_contact varchar(100) default NULL, + private_contact varchar(100) default NULL, + reg_contact varchar(100) NOT NULL, + last_ip int(10) unsigned default '0', + last_login_ip int(10) unsigned default '0', + reg_ip int(10) unsigned default '0', + date_format varchar(20) NOT NULL default 'Y-m-d H:i:s', + PRIMARY KEY (userid), + KEY u_referrer (referrer), + KEY alias (alias), + KEY last_active_date (last_active_date) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- +-- Constraints for dumped tables +-- + +-- +-- Constraints for table `messages` +-- +ALTER TABLE `messages` + ADD CONSTRAINT messages_ibfk_12 FOREIGN KEY (topicid) REFERENCES topics (topicid) ON DELETE CASCADE, + ADD CONSTRAINT messages_ibfk_13 FOREIGN KEY (userid) REFERENCES users (userid) ON DELETE CASCADE, + ADD CONSTRAINT messages_ibfk_14 FOREIGN KEY (replyto) REFERENCES messages (messageid) ON DELETE CASCADE; + +-- +-- Constraints for table `things` +-- +ALTER TABLE `things` + ADD CONSTRAINT things_ibfk_1 FOREIGN KEY (userid) REFERENCES users (userid) ON DELETE CASCADE; + +-- +-- Constraints for table `topics` +-- +ALTER TABLE `topics` + ADD CONSTRAINT topics_ibfk_3 FOREIGN KEY (userid) REFERENCES users (userid) ON DELETE CASCADE, + ADD CONSTRAINT topics_ibfk_4 FOREIGN KEY (lastpost) REFERENCES messages (messageid) ON DELETE NO ACTION; + +-- +-- Constraints for table `users` +-- +ALTER TABLE `users` + ADD CONSTRAINT users_ibfk_1 FOREIGN KEY (referrer) REFERENCES users (userid) ON DELETE CASCADE; + +SET FOREIGN_KEY_CHECKS=1; + +COMMIT; diff --git a/docs/svn.log b/docs/svn.log new file mode 100644 index 0000000..344423a --- /dev/null +++ b/docs/svn.log @@ -0,0 +1,4703 @@ +------------------------------------------------------------------------ +r933 | ant | 2006-05-30 17:01:42 +0100 (Tue, 30 May 2006) | 5 lines + +* Minor TOS change +* worked on the message parser DTD a bit +* DB structure updated +* Rewrote stuff so people who couldn't access a board before can see it now, but not the messagelists + +------------------------------------------------------------------------ +r932 | ant | 2006-05-15 17:46:25 +0100 (Mon, 15 May 2006) | 2 lines + +Changed the theme a bit + +------------------------------------------------------------------------ +r931 | ant | 2006-05-12 00:58:39 +0100 (Fri, 12 May 2006) | 2 lines + +Do that thing better + +------------------------------------------------------------------------ +r930 | ant | 2006-05-11 23:39:39 +0100 (Thu, 11 May 2006) | 2 lines + +Did something with the DTD thing + +------------------------------------------------------------------------ +r929 | ant | 2006-05-11 22:10:22 +0100 (Thu, 11 May 2006) | 2 lines + +Fixed the points counter stuff this time (really) and added an accesskey to the quickpost thing + +------------------------------------------------------------------------ +r928 | ant | 2006-05-11 20:47:36 +0100 (Thu, 11 May 2006) | 2 lines + +Small changes to index.php, moved the page time to the footer (all pages), and hopefully fixed the caching stuff by requiring all pages to be an hour old before returning 304s + +------------------------------------------------------------------------ +r927 | ant | 2006-05-11 01:41:33 +0100 (Thu, 11 May 2006) | 2 lines + +Make the caching restrictions more aggressive; hopefully it'll work now. + +------------------------------------------------------------------------ +r926 | ant | 2006-05-11 01:37:28 +0100 (Thu, 11 May 2006) | 2 lines + +Fixed some obscure bugs that were probably making bad things happen in detail.php + +------------------------------------------------------------------------ +r925 | ant | 2006-05-11 00:57:04 +0100 (Thu, 11 May 2006) | 2 lines + +Made the option for GF-style active time updating a lot better written + +------------------------------------------------------------------------ +r924 | ant | 2006-05-11 00:42:56 +0100 (Thu, 11 May 2006) | 2 lines + +Make the stats page slightly less confusing + +------------------------------------------------------------------------ +r923 | ant | 2006-05-10 15:18:49 +0100 (Wed, 10 May 2006) | 2 lines + +Made theme.php easier to read and added a caching thing to stop things screwing up. + +------------------------------------------------------------------------ +r922 | ant | 2006-05-10 14:42:53 +0100 (Wed, 10 May 2006) | 2 lines + +Fixed a bug where the import premade thing wasn't working + +------------------------------------------------------------------------ +r921 | ant | 2006-05-10 02:08:20 +0100 (Wed, 10 May 2006) | 2 lines + +Actually I think I'll delete this before .13 since it's 80% of the filesize... + +------------------------------------------------------------------------ +r920 | ant | 2006-05-10 01:18:27 +0100 (Wed, 10 May 2006) | 2 lines + +(making it readable would be a good idea...) + +------------------------------------------------------------------------ +r919 | ant | 2006-05-10 01:17:09 +0100 (Wed, 10 May 2006) | 10 lines + +Three things: +* Changed the symbol for points from that P thing to a dot thing. +* Updated the readme quite a lot + +And... *drumroll* + +* Changed from ZLib to BSD 2-clause. + +That's about it. This change marks the 2.13 release. + +------------------------------------------------------------------------ +r918 | ant | 2006-05-08 18:47:08 +0100 (Mon, 08 May 2006) | 2 lines + +Removed a bit of MySQL crap + +------------------------------------------------------------------------ +r917 | ant | 2006-05-08 18:39:46 +0100 (Mon, 08 May 2006) | 2 lines + +DB update for .13 release + +------------------------------------------------------------------------ +r916 | ant | 2006-05-07 19:01:48 +0100 (Sun, 07 May 2006) | 2 lines + +Fix quickpost for people with no sig + +------------------------------------------------------------------------ +r915 | ant | 2006-05-07 18:29:46 +0100 (Sun, 07 May 2006) | 2 lines + +Fixed the AJAX thing screwing up online timers + +------------------------------------------------------------------------ +r914 | ant | 2006-05-07 16:49:48 +0100 (Sun, 07 May 2006) | 2 lines + +Make it refresh better or something (this is really gay now) + +------------------------------------------------------------------------ +r913 | ant | 2006-05-06 23:40:36 +0100 (Sat, 06 May 2006) | 2 lines + +Made the register page slightly better + +------------------------------------------------------------------------ +r912 | ant | 2006-05-06 22:36:46 +0100 (Sat, 06 May 2006) | 2 lines + +Workaround for Mozilla bug 314170 + +------------------------------------------------------------------------ +r911 | ant | 2006-05-06 19:06:35 +0100 (Sat, 06 May 2006) | 2 lines + +Made a thing to allow hidden board categories + +------------------------------------------------------------------------ +r910 | ant | 2006-05-06 17:47:20 +0100 (Sat, 06 May 2006) | 2 lines + +Improved gfcss theme, edited TOS slightly, quickpost on topic list, moved the topic/messagelist page links to be more consistent + +------------------------------------------------------------------------ +r909 | ant | 2006-05-04 16:20:12 +0100 (Thu, 04 May 2006) | 2 lines + +Rename invites file to something more appropriate + +------------------------------------------------------------------------ +r908 | ant | 2006-05-04 16:19:04 +0100 (Thu, 04 May 2006) | 2 lines + +Added a real anti-lurker mechanism. + +------------------------------------------------------------------------ +r907 | ant | 2006-05-03 20:18:22 +0100 (Wed, 03 May 2006) | 2 lines + +Got it right this time + +------------------------------------------------------------------------ +r906 | ant | 2006-05-03 20:08:14 +0100 (Wed, 03 May 2006) | 2 lines + +Having all those "reply to #" things is a bit redundant + +------------------------------------------------------------------------ +r905 | ant | 2006-05-03 15:58:27 +0100 (Wed, 03 May 2006) | 2 lines + +Thinger + +------------------------------------------------------------------------ +r904 | ant | 2006-05-02 21:58:01 +0100 (Tue, 02 May 2006) | 2 lines + +Made the GFCSS theme work a bit better + +------------------------------------------------------------------------ +r903 | ant | 2006-05-02 19:18:20 +0100 (Tue, 02 May 2006) | 2 lines + +Shitload of stuff and quickpost + +------------------------------------------------------------------------ +r902 | ant | 2006-05-02 14:20:01 +0100 (Tue, 02 May 2006) | 2 lines + +This is pure genius. + +------------------------------------------------------------------------ +r901 | ant | 2006-05-01 20:04:01 +0100 (Mon, 01 May 2006) | 2 lines + +Or not. + +------------------------------------------------------------------------ +r900 | ant | 2006-04-30 16:38:13 +0100 (Sun, 30 Apr 2006) | 2 lines + +Make boardlist update only fire once every 5 minutes + +------------------------------------------------------------------------ +r899 | ant | 2006-04-28 18:24:17 +0100 (Fri, 28 Apr 2006) | 2 lines + +Remove the xml page thing till I can be bothered to do it + +------------------------------------------------------------------------ +r898 | ant | 2006-04-26 19:59:47 +0100 (Wed, 26 Apr 2006) | 2 lines + +Reduce the JS loop speed to 60 seconds, since it's not likely to be needed anyway + +------------------------------------------------------------------------ +r897 | ant | 2006-04-26 16:35:23 +0100 (Wed, 26 Apr 2006) | 2 lines + +Added fragments to URIs + +------------------------------------------------------------------------ +r896 | ant | 2006-04-26 00:31:17 +0100 (Wed, 26 Apr 2006) | 2 lines + +Added that page timer thing back + +------------------------------------------------------------------------ +r895 | ant | 2006-04-23 18:05:35 +0100 (Sun, 23 Apr 2006) | 2 lines + +Put header in the right place so it doesn't override the other one + +------------------------------------------------------------------------ +r894 | ant | 2006-04-22 20:53:49 +0100 (Sat, 22 Apr 2006) | 2 lines + +Make the top bar a bit better in 800x600 + +------------------------------------------------------------------------ +r893 | ant | 2006-04-21 22:42:04 +0100 (Fri, 21 Apr 2006) | 2 lines + +Fixed + +------------------------------------------------------------------------ +r892 | ant | 2006-04-20 20:18:54 +0100 (Thu, 20 Apr 2006) | 2 lines + +Make the login form look a bit better + +------------------------------------------------------------------------ +r891 | ant | 2006-04-19 04:30:05 +0100 (Wed, 19 Apr 2006) | 2 lines + +Added a thinger and another thinger + +------------------------------------------------------------------------ +r890 | ant | 2006-04-18 02:50:58 +0100 (Tue, 18 Apr 2006) | 2 lines + +Fixed gfcss10 theme for konqueror + +------------------------------------------------------------------------ +r889 | ant | 2006-04-18 02:37:35 +0100 (Tue, 18 Apr 2006) | 2 lines + +Add missing $Id + +------------------------------------------------------------------------ +r888 | ant | 2006-04-18 01:44:28 +0100 (Tue, 18 Apr 2006) | 2 lines + +Added the fucking 1337 gfcss theme + +------------------------------------------------------------------------ +r887 | ant | 2006-04-18 00:53:58 +0100 (Tue, 18 Apr 2006) | 2 lines + +Added some class="" to pagelist code + +------------------------------------------------------------------------ +r886 | ant | 2006-04-17 21:22:10 +0100 (Mon, 17 Apr 2006) | 2 lines + +PRESS BUTTON + +------------------------------------------------------------------------ +r885 | ant | 2006-04-17 21:18:00 +0100 (Mon, 17 Apr 2006) | 3 lines + +Added userids to userlist.php, +Added theme preview button + +------------------------------------------------------------------------ +r884 | ant | 2006-04-14 03:03:07 +0100 (Fri, 14 Apr 2006) | 2 lines + +Make the default boardlist IRC for now + +------------------------------------------------------------------------ +r883 | ant | 2006-04-14 03:02:15 +0100 (Fri, 14 Apr 2006) | 2 lines + +Test + +------------------------------------------------------------------------ +r882 | ant | 2006-04-12 15:55:32 +0100 (Wed, 12 Apr 2006) | 2 lines + +Added header() in reg.php + +------------------------------------------------------------------------ +r881 | ant | 2006-04-12 13:57:40 +0100 (Wed, 12 Apr 2006) | 2 lines + +Added some basic idiot protection + +------------------------------------------------------------------------ +r880 | ant | 2006-04-12 13:24:49 +0100 (Wed, 12 Apr 2006) | 2 lines + +Added IRI check to register.php to slow down retarded spammers + +------------------------------------------------------------------------ +r879 | ant | 2006-04-12 03:46:01 +0100 (Wed, 12 Apr 2006) | 2 lines + +Update readme for no reason + +------------------------------------------------------------------------ +r878 | ant | 2006-04-11 22:33:19 +0100 (Tue, 11 Apr 2006) | 2 lines + +AJAX stuff is screwed up with caching + +------------------------------------------------------------------------ +r877 | ant | 2006-04-10 22:37:12 +0100 (Mon, 10 Apr 2006) | 2 lines + +Corn + +------------------------------------------------------------------------ +r876 | ant | 2006-04-09 14:39:06 +0100 (Sun, 09 Apr 2006) | 2 lines + +pre-wrap on
+
+------------------------------------------------------------------------
+r875 | ant | 2006-04-09 04:10:06 +0100 (Sun, 09 Apr 2006) | 5 lines
+
+Made the caching stuff in Page class better
+made it optional in options.php
+added caching to messagelist, topiclist and fixed the index one
+DB structure changed
+
+------------------------------------------------------------------------
+r874 | ant | 2006-04-08 15:41:33 +0100 (Sat, 08 Apr 2006) | 3 lines
+
+Added a message reply preview thinger in post.php
+Fixed stuff
+
+------------------------------------------------------------------------
+r873 | ant | 2006-04-08 02:14:25 +0100 (Sat, 08 Apr 2006) | 2 lines
+
+Changed stuff a bit
+
+------------------------------------------------------------------------
+r872 | ant | 2006-04-08 00:54:41 +0100 (Sat, 08 Apr 2006) | 2 lines
+
+Made the js work again
+
+------------------------------------------------------------------------
+r871 | ant | 2006-04-08 00:13:10 +0100 (Sat, 08 Apr 2006) | 4 lines
+
+Added page caching to index.php!!!!!!!!111
+Rewrote the AJAX yet again!!!!!!!!!!!!11
+Broke the boardlist JS in Fx!!!!!!!!!!!!!!!!!1/?????/////
+
+------------------------------------------------------------------------
+r870 | ant | 2006-04-07 19:32:29 +0100 (Fri, 07 Apr 2006) | 2 lines
+
+Add mtime caching to Page class
+
+------------------------------------------------------------------------
+r869 | ant | 2006-04-06 23:12:22 +0100 (Thu, 06 Apr 2006) | 2 lines
+
+overflow: auto on 
+
+------------------------------------------------------------------------
+r868 | ant | 2006-04-06 15:22:44 +0100 (Thu, 06 Apr 2006) | 2 lines
+
+Missing closing "
+
+------------------------------------------------------------------------
+r867 | ant | 2006-04-05 19:45:26 +0100 (Wed, 05 Apr 2006) | 2 lines
+
+Doesn't work
+
+------------------------------------------------------------------------
+r866 | ant | 2006-04-05 19:44:23 +0100 (Wed, 05 Apr 2006) | 2 lines
+
+Testing
+
+------------------------------------------------------------------------
+r865 | ant | 2006-04-05 19:42:39 +0100 (Wed, 05 Apr 2006) | 2 lines
+
+er no
+
+------------------------------------------------------------------------
+r864 | ant | 2006-04-05 19:41:21 +0100 (Wed, 05 Apr 2006) | 2 lines
+
+MIME type change
+
+------------------------------------------------------------------------
+r863 | ant | 2006-04-03 22:45:45 +0100 (Mon, 03 Apr 2006) | 2 lines
+
+Running would be a good idea.
+
+------------------------------------------------------------------------
+r862 | ant | 2006-04-03 20:07:53 +0100 (Mon, 03 Apr 2006) | 2 lines
+
+Changed more CSS, and added stuff to User_Auth that stops AJAX requests from updating the online timer
+
+------------------------------------------------------------------------
+r861 | ant | 2006-04-02 15:06:16 +0100 (Sun, 02 Apr 2006) | 2 lines
+
+Fixed the invite system completely (including the next level counter)
+
+------------------------------------------------------------------------
+r860 | ant | 2006-04-02 14:40:24 +0100 (Sun, 02 Apr 2006) | 2 lines
+
+Rewrote the javascript bit 10000x better
+
+------------------------------------------------------------------------
+r859 | ant | 2006-04-01 22:40:01 +0100 (Sat, 01 Apr 2006) | 2 lines
+
+This is pure genius.
+
+------------------------------------------------------------------------
+r858 | ant | 2006-04-01 18:21:41 +0100 (Sat, 01 Apr 2006) | 2 lines
+
+new css omgomgomg ^_^_^_^^ *jizz*
+
+------------------------------------------------------------------------
+r857 | ant | 2006-04-01 17:53:29 +0100 (Sat, 01 Apr 2006) | 2 lines
+
+Change stuff a bit, and make the contact things in the user table bigger
+
+------------------------------------------------------------------------
+r856 | ant | 2006-03-31 19:49:43 +0100 (Fri, 31 Mar 2006) | 2 lines
+
+shouldn't be using "0" as the ID number
+
+------------------------------------------------------------------------
+r855 | ant | 2006-03-31 19:48:42 +0100 (Fri, 31 Mar 2006) | 2 lines
+
+move Boardlist_Default to Boardlist_SO2
+
+------------------------------------------------------------------------
+r854 | ant | 2006-03-31 00:01:06 +0100 (Fri, 31 Mar 2006) | 2 lines
+
+The Apple I had a RRP of $666.66
+
+------------------------------------------------------------------------
+r853 | ant | 2006-03-30 23:40:09 +0100 (Thu, 30 Mar 2006) | 2 lines
+
+[You need a transparent chocolate key to open this door]
+
+------------------------------------------------------------------------
+r852 | ant | 2006-03-30 02:11:41 +0100 (Thu, 30 Mar 2006) | 2 lines
+
+Made the registration process and TOS more appropriate.
+
+------------------------------------------------------------------------
+r851 | ant | 2006-03-29 22:57:41 +0100 (Wed, 29 Mar 2006) | 2 lines
+
+changed readme again
+
+------------------------------------------------------------------------
+r850 | ant | 2006-03-29 19:14:54 +0100 (Wed, 29 Mar 2006) | 2 lines
+
+rtfm
+
+------------------------------------------------------------------------
+r849 | ant | 2006-03-28 21:42:58 +0100 (Tue, 28 Mar 2006) | 2 lines
+
+BLUE BALLS LOL
+
+------------------------------------------------------------------------
+r848 | ant | 2006-03-28 18:59:18 +0100 (Tue, 28 Mar 2006) | 2 lines
+
+TEMPORAL DISPLACEMENT SENSOR
+
+------------------------------------------------------------------------
+r847 | ant | 2006-03-24 22:04:07 +0000 (Fri, 24 Mar 2006) | 2 lines
+
+Changed the boardlist page layout
+
+------------------------------------------------------------------------
+r846 | ant | 2006-03-24 17:01:46 +0000 (Fri, 24 Mar 2006) | 2 lines
+
+Make the readme (finally) show up right in the repos viewer
+
+------------------------------------------------------------------------
+r845 | ant | 2006-03-24 17:00:16 +0000 (Fri, 24 Mar 2006) | 3 lines
+
+Added mime types on everything
+Got rid of that shitty gif that was there for no apparent reason
+
+------------------------------------------------------------------------
+r844 | ant | 2006-03-24 16:58:08 +0000 (Fri, 24 Mar 2006) | 2 lines
+
+Mime-types for repos viewer fun
+
+------------------------------------------------------------------------
+r843 | ant | 2006-03-24 16:57:13 +0000 (Fri, 24 Mar 2006) | 2 lines
+
+oh wow, another readme update
+
+------------------------------------------------------------------------
+r842 | ant | 2006-03-24 01:33:04 +0000 (Fri, 24 Mar 2006) | 2 lines
+
+Increased default login cookie time to 2 days, updated readme (again)
+
+------------------------------------------------------------------------
+r841 | ant | 2006-03-24 00:40:05 +0000 (Fri, 24 Mar 2006) | 2 lines
+
+Forgot to uncomment this from testing stuff
+
+------------------------------------------------------------------------
+r840 | ant | 2006-03-23 20:55:23 +0000 (Thu, 23 Mar 2006) | 2 lines
+
+Readme update
+
+------------------------------------------------------------------------
+r839 | ant | 2006-03-23 07:51:40 +0000 (Thu, 23 Mar 2006) | 2 lines
+
+this line was broken
+
+------------------------------------------------------------------------
+r838 | ant | 2006-03-22 23:02:45 +0000 (Wed, 22 Mar 2006) | 2 lines
+
+(22:57:32) Timrod: OMG SECRET NAZI TETRIS
+
+------------------------------------------------------------------------
+r837 | ant | 2006-03-22 22:34:30 +0000 (Wed, 22 Mar 2006) | 2 lines
+
+Get rid of unnecessary crap
+
+------------------------------------------------------------------------
+r836 | ant | 2006-03-22 21:45:30 +0000 (Wed, 22 Mar 2006) | 4 lines
+
+* Delete `users`.`admin`, use `things` for it instead
+* Get rid of retarded code in User_*::__get()
+* Some other stuff
+
+------------------------------------------------------------------------
+r835 | ant | 2006-03-22 20:09:05 +0000 (Wed, 22 Mar 2006) | 2 lines
+
+Forgot about this bit
+
+------------------------------------------------------------------------
+r834 | ant | 2006-03-22 20:07:29 +0000 (Wed, 22 Mar 2006) | 2 lines
+
+Add User::toString, get rid of unnecessary crap in User_Anon
+
+------------------------------------------------------------------------
+r833 | ant | 2006-03-22 17:36:58 +0000 (Wed, 22 Mar 2006) | 2 lines
+
+Remove userjs thing since nothing uses it yet
+
+------------------------------------------------------------------------
+r832 | ant | 2006-03-22 17:34:01 +0000 (Wed, 22 Mar 2006) | 2 lines
+
+Make the log out button go back to the board index, so people don't get an "Access denied" error or something.
+
+------------------------------------------------------------------------
+r831 | ant | 2006-03-21 15:35:52 +0000 (Tue, 21 Mar 2006) | 2 lines
+
+Return of the All-HTML post
+
+------------------------------------------------------------------------
+r830 | ant | 2006-03-20 21:42:44 +0000 (Mon, 20 Mar 2006) | 2 lines
+
+dsafkjuytjhgdrfse
+
+------------------------------------------------------------------------
+r829 | ant | 2006-03-20 21:37:57 +0000 (Mon, 20 Mar 2006) | 2 lines
+
+update sql files
+
+------------------------------------------------------------------------
+r828 | ant | 2006-03-19 21:47:06 +0000 (Sun, 19 Mar 2006) | 2 lines
+
+fixed another broke thing
+
+------------------------------------------------------------------------
+r827 | ant | 2006-03-19 21:45:51 +0000 (Sun, 19 Mar 2006) | 2 lines
+
+er.
+
+------------------------------------------------------------------------
+r826 | ant | 2006-03-19 21:44:31 +0000 (Sun, 19 Mar 2006) | 3 lines
+
+Added rel=next/prev to messagelist/topiclist
+Shortened footer links
+
+------------------------------------------------------------------------
+r825 | ant | 2006-03-19 15:26:47 +0000 (Sun, 19 Mar 2006) | 2 lines
+
+Fixed all the broken stuff, cleaned up reg.php
+
+------------------------------------------------------------------------
+r824 | ant | 2006-03-18 19:35:44 +0000 (Sat, 18 Mar 2006) | 2 lines
+
+Fixed more breakage, and got rid of some shitty code in options.php
+
+------------------------------------------------------------------------
+r823 | ant | 2006-03-18 17:03:07 +0000 (Sat, 18 Mar 2006) | 2 lines
+
+Fixed some stuff
+
+------------------------------------------------------------------------
+r822 | ant | 2006-03-18 17:02:48 +0000 (Sat, 18 Mar 2006) | 2 lines
+
+wrong number
+
+------------------------------------------------------------------------
+r821 | ant | 2006-03-18 16:49:56 +0000 (Sat, 18 Mar 2006) | 2 lines
+
+renamed stuff, nothing will work
+
+------------------------------------------------------------------------
+r820 | ant | 2006-03-16 21:04:40 +0000 (Thu, 16 Mar 2006) | 2 lines
+
+Found a potential html injection exploit which was causing other problems.
+
+------------------------------------------------------------------------
+r819 | ant | 2006-03-16 21:01:56 +0000 (Thu, 16 Mar 2006) | 2 lines
+
+And another one
+
+------------------------------------------------------------------------
+r818 | ant | 2006-03-16 21:01:26 +0000 (Thu, 16 Mar 2006) | 2 lines
+
+Fix a Message_PCRE::makeurl() bug
+
+------------------------------------------------------------------------
+r817 | ant | 2006-03-15 21:16:59 +0000 (Wed, 15 Mar 2006) | 2 lines
+
+http://www.fefe.de/nowindows/
+
+------------------------------------------------------------------------
+r816 | ant | 2006-03-12 23:29:28 +0000 (Sun, 12 Mar 2006) | 2 lines
+
+wtf pissa
+
+------------------------------------------------------------------------
+r815 | ant | 2006-03-12 23:28:44 +0000 (Sun, 12 Mar 2006) | 2 lines
+
+Goatse pizza
+
+------------------------------------------------------------------------
+r814 | ant | 2006-03-12 23:28:03 +0000 (Sun, 12 Mar 2006) | 2 lines
+
+Cheese pizza
+
+------------------------------------------------------------------------
+r813 | ant | 2006-03-12 18:47:38 +0000 (Sun, 12 Mar 2006) | 2 lines
+
+...and then I worded it wrong anyway
+
+------------------------------------------------------------------------
+r812 | ant | 2006-03-12 18:46:21 +0000 (Sun, 12 Mar 2006) | 2 lines
+
+Meant to add this a few days ago but I forgot
+
+------------------------------------------------------------------------
+r811 | ant | 2006-03-12 16:20:01 +0000 (Sun, 12 Mar 2006) | 2 lines
+
+conf.php rev bump
+
+------------------------------------------------------------------------
+r810 | ant | 2006-03-12 16:17:10 +0000 (Sun, 12 Mar 2006) | 2 lines
+
+CLEANUP ON AISLE 5
+
+------------------------------------------------------------------------
+r809 | ant | 2006-03-12 16:03:52 +0000 (Sun, 12 Mar 2006) | 2 lines
+
+Newer, safer HTML filter stuff
+
+------------------------------------------------------------------------
+r808 | ant | 2006-03-10 22:54:11 +0000 (Fri, 10 Mar 2006) | 2 lines
+
+Propedit: ignore default.css since it's site-specific
+
+------------------------------------------------------------------------
+r807 | ant | 2006-03-10 22:52:47 +0000 (Fri, 10 Mar 2006) | 2 lines
+
+Aesthetics
+
+------------------------------------------------------------------------
+r806 | ant | 2006-03-10 22:51:55 +0000 (Fri, 10 Mar 2006) | 2 lines
+
+Remove default CSS link
+
+------------------------------------------------------------------------
+r805 | ant | 2006-03-09 14:13:42 +0000 (Thu, 09 Mar 2006) | 2 lines
+
+Change anonuser so people can post topics/messages without needing a login cookie
+
+------------------------------------------------------------------------
+r804 | ant | 2006-03-09 14:12:26 +0000 (Thu, 09 Mar 2006) | 2 lines
+
+Stuff for later
+
+------------------------------------------------------------------------
+r803 | ant | 2006-03-07 15:58:57 +0000 (Tue, 07 Mar 2006) | 2 lines
+
+Added back the post message link in topic lists
+
+------------------------------------------------------------------------
+r802 | ant | 2006-03-06 18:09:00 +0000 (Mon, 06 Mar 2006) | 3 lines
+
+©
+
+
+------------------------------------------------------------------------
+r801 | ant | 2006-03-04 23:28:26 +0000 (Sat, 04 Mar 2006) | 2 lines
+
+[23:27:27]  I sux at php now
+
+------------------------------------------------------------------------
+r800 | ant | 2006-03-04 23:25:57 +0000 (Sat, 04 Mar 2006) | 2 lines
+
+AJAX stuff goes live now.
+
+------------------------------------------------------------------------
+r799 | ant | 2006-03-04 23:21:56 +0000 (Sat, 04 Mar 2006) | 2 lines
+
+Fixed retarded error
+
+------------------------------------------------------------------------
+r798 | ant | 2006-03-04 23:03:44 +0000 (Sat, 04 Mar 2006) | 2 lines
+
+Broken SQL fix; should've caught this earlier
+
+------------------------------------------------------------------------
+r797 | ant | 2006-03-02 22:51:27 +0000 (Thu, 02 Mar 2006) | 2 lines
+
+Added provisions for per-page javascripts
+
+------------------------------------------------------------------------
+r796 | ant | 2006-03-02 22:51:02 +0000 (Thu, 02 Mar 2006) | 2 lines
+
+Not sure wtf happened there
+
+------------------------------------------------------------------------
+r795 | ant | 2006-02-18 16:24:11 +0000 (Sat, 18 Feb 2006) | 2 lines
+
+fux
+
+------------------------------------------------------------------------
+r794 | ant | 2006-02-18 16:22:04 +0000 (Sat, 18 Feb 2006) | 2 lines
+
+Post.php tabindexes (http://specialops.ath.cx/so2/messagelist?154)
+
+------------------------------------------------------------------------
+r793 | ant | 2006-02-15 00:32:19 +0000 (Wed, 15 Feb 2006) | 2 lines
+
+Updated list
+
+------------------------------------------------------------------------
+r792 | ant | 2006-02-12 19:55:23 +0000 (Sun, 12 Feb 2006) | 2 lines
+
+Stuff.
+
+------------------------------------------------------------------------
+r791 | ant | 2006-02-12 14:23:28 +0000 (Sun, 12 Feb 2006) | 2 lines
+
+Disable old post.php code
+
+------------------------------------------------------------------------
+r790 | ant | 2006-02-11 19:23:37 +0000 (Sat, 11 Feb 2006) | 2 lines
+
+Making cache stuff up to date
+
+------------------------------------------------------------------------
+r789 | ant | 2006-02-11 17:37:33 +0000 (Sat, 11 Feb 2006) | 2 lines
+
+Removed top-level reply link on messagelist page to make people use replies properly instead
+
+------------------------------------------------------------------------
+r788 | ant | 2006-02-10 20:27:59 +0000 (Fri, 10 Feb 2006) | 2 lines
+
+Fix messagelist errors for anonuser [Onion]
+
+------------------------------------------------------------------------
+r787 | ant | 2006-02-08 23:02:12 +0000 (Wed, 08 Feb 2006) | 2 lines
+
+Made current default theme less shitty by several orders of magnitude
+
+------------------------------------------------------------------------
+r786 | ant | 2006-02-08 21:37:38 +0000 (Wed, 08 Feb 2006) | 2 lines
+
+*REGISTER*.
+
+------------------------------------------------------------------------
+r785 | ant | 2006-02-08 18:36:38 +0000 (Wed, 08 Feb 2006) | 2 lines
+
+Moved content-type header line to make things a bit clearer (the HTTP one is supposed to come first anyway)
+
+------------------------------------------------------------------------
+r784 | ant | 2006-02-07 19:48:42 +0000 (Tue, 07 Feb 2006) | 2 lines
+
+STICK IT TO THE MAN
+
+------------------------------------------------------------------------
+r783 | ant | 2006-02-07 15:09:38 +0000 (Tue, 07 Feb 2006) | 2 lines
+
+Reworded stuff.
+
+------------------------------------------------------------------------
+r782 | ant | 2006-02-07 14:13:13 +0000 (Tue, 07 Feb 2006) | 2 lines
+
+Make it more obvious what the reg email is for
+
+------------------------------------------------------------------------
+r781 | ant | 2006-02-07 00:52:07 +0000 (Tue, 07 Feb 2006) | 2 lines
+
+Better implementation of fatal error page
+
+------------------------------------------------------------------------
+r780 | ant | 2006-02-07 00:43:45 +0000 (Tue, 07 Feb 2006) | 2 lines
+
+Added a less hostile MySQL error message (right now I need it)
+
+------------------------------------------------------------------------
+r779 | ant | 2006-02-06 00:15:49 +0000 (Mon, 06 Feb 2006) | 2 lines
+
+Made scaly theme less crap, set it as default
+
+------------------------------------------------------------------------
+r778 | ant | 2006-02-06 00:15:09 +0000 (Mon, 06 Feb 2006) | 2 lines
+
+Changed topiclist stuff to be more consistent with messagelist stuff
+
+------------------------------------------------------------------------
+r777 | ant | 2006-02-05 22:57:34 +0000 (Sun, 05 Feb 2006) | 2 lines
+
+interfaces - Add boardlist stuff and a warning in messagedisplay
+
+------------------------------------------------------------------------
+r776 | ant | 2006-02-05 22:48:28 +0000 (Sun, 05 Feb 2006) | 2 lines
+
+Adding more interfaces just to be consistent.
+
+------------------------------------------------------------------------
+r775 | ant | 2006-02-05 22:11:35 +0000 (Sun, 05 Feb 2006) | 2 lines
+
+Improved pagelist function in msglist_flat
+
+------------------------------------------------------------------------
+r774 | ant | 2006-02-05 22:11:15 +0000 (Sun, 05 Feb 2006) | 2 lines
+
+Suck. It.
+
+------------------------------------------------------------------------
+r773 | ant | 2006-02-03 23:00:24 +0000 (Fri, 03 Feb 2006) | 3 lines
+
+Updated sql structure,
+Fixed detail.php and got rid of some ugly hacks at the same time (!!)
+
+------------------------------------------------------------------------
+r772 | ant | 2006-02-03 22:53:41 +0000 (Fri, 03 Feb 2006) | 2 lines
+
+New, improved, sexier messagelist stuff. Rawr.
+
+------------------------------------------------------------------------
+r771 | ant | 2006-02-03 20:37:25 +0000 (Fri, 03 Feb 2006) | 2 lines
+
+Committing this stuff now so I don't forget it, messagedisplay is going to get deleted soon
+
+------------------------------------------------------------------------
+r770 | ant | 2006-01-27 22:15:01 +0000 (Fri, 27 Jan 2006) | 2 lines
+
+Er.
+
+------------------------------------------------------------------------
+r769 | ant | 2006-01-27 22:14:24 +0000 (Fri, 27 Jan 2006) | 2 lines
+
+Make 

more readable + +------------------------------------------------------------------------ +r768 | ant | 2006-01-25 20:49:51 +0000 (Wed, 25 Jan 2006) | 6 lines + +Er. Stuff; +Dumped PHP 5.0 support for 5.1[.1], +Fixed small sql error in detail.php, +Made Points Cool™: they have a thinger now (¶) like MA did, +Fixed stupid error that meant admins couldn't post on admin-post-only stuff + +------------------------------------------------------------------------ +r767 | ant | 2006-01-25 18:00:12 +0000 (Wed, 25 Jan 2006) | 2 lines + +This is for all those fags that like to leech from the SVN without giving anything in return. + +------------------------------------------------------------------------ +r766 | ant | 2006-01-24 17:06:11 +0000 (Tue, 24 Jan 2006) | 2 lines + +More workarounds for Konqueror + +------------------------------------------------------------------------ +r765 | ant | 2006-01-24 16:37:18 +0000 (Tue, 24 Jan 2006) | 2 lines + +Do the | things in the usermenu in a non-retarded way that works properly in konqueror + +------------------------------------------------------------------------ +r764 | ant | 2006-01-23 23:22:19 +0000 (Mon, 23 Jan 2006) | 2 lines + +Did stuff to stuff + +------------------------------------------------------------------------ +r763 | ant | 2006-01-22 21:31:50 +0000 (Sun, 22 Jan 2006) | 2 lines + +Apparently not. + +------------------------------------------------------------------------ +r762 | ant | 2006-01-22 21:29:50 +0000 (Sun, 22 Jan 2006) | 2 lines + +Might get this release right this time. + +------------------------------------------------------------------------ +r761 | ant | 2006-01-22 20:55:46 +0000 (Sun, 22 Jan 2006) | 2 lines + +It had to happen some day. + +------------------------------------------------------------------------ +r760 | ant | 2006-01-22 19:08:02 +0000 (Sun, 22 Jan 2006) | 2 lines + +Make last change visible + +------------------------------------------------------------------------ +r759 | ant | 2006-01-22 18:59:47 +0000 (Sun, 22 Jan 2006) | 2 lines + +Changed database a bit to store more useful message marks info + +------------------------------------------------------------------------ +r758 | ant | 2006-01-22 18:47:55 +0000 (Sun, 22 Jan 2006) | 2 lines + +Let anyone with at least 1 point mod messages, but only > 10 actually have an effect. Shows which ones are more likely to cause trouble in the future. + +------------------------------------------------------------------------ +r757 | ant | 2006-01-22 04:43:04 +0000 (Sun, 22 Jan 2006) | 2 lines + +This is gay. + +------------------------------------------------------------------------ +r756 | ant | 2006-01-22 04:42:39 +0000 (Sun, 22 Jan 2006) | 2 lines + +Need units for it to validate + +------------------------------------------------------------------------ +r755 | ant | 2006-01-22 04:41:57 +0000 (Sun, 22 Jan 2006) | 2 lines + +Kill proprietary CSS in default theme + +------------------------------------------------------------------------ +r754 | ant | 2006-01-21 18:42:57 +0000 (Sat, 21 Jan 2006) | 2 lines + +Linky + +------------------------------------------------------------------------ +r753 | ant | 2006-01-20 20:43:16 +0000 (Fri, 20 Jan 2006) | 2 lines + +See last commit + +------------------------------------------------------------------------ +r752 | ant | 2006-01-20 20:26:04 +0000 (Fri, 20 Jan 2006) | 2 lines + +Replaced $Id$ headers with proper page-level phpdoc blocks + +------------------------------------------------------------------------ +r751 | ant | 2006-01-19 01:55:22 +0000 (Thu, 19 Jan 2006) | 2 lines + +*rolls eyes* + +------------------------------------------------------------------------ +r750 | ant | 2006-01-18 01:08:57 +0000 (Wed, 18 Jan 2006) | 2 lines + +Improved the CSS id/class stuff. + +------------------------------------------------------------------------ +r749 | ant | 2006-01-16 07:48:42 +0000 (Mon, 16 Jan 2006) | 3 lines + +formatting + + +------------------------------------------------------------------------ +r748 | ant | 2006-01-16 02:20:56 +0000 (Mon, 16 Jan 2006) | 2 lines + +Deleted starlight theme cause it's shitty and the filesizes are huge. + +------------------------------------------------------------------------ +r747 | ant | 2006-01-14 23:21:45 +0000 (Sat, 14 Jan 2006) | 2 lines + +Make sure the DB files are up to date + +------------------------------------------------------------------------ +r746 | ant | 2006-01-14 23:15:10 +0000 (Sat, 14 Jan 2006) | 2 lines + +sihfdihkgfhfga!!!!!!!!!11111111111111 + +------------------------------------------------------------------------ +r745 | ant | 2006-01-14 20:31:18 +0000 (Sat, 14 Jan 2006) | 2 lines + +Formatting + +------------------------------------------------------------------------ +r744 | ant | 2006-01-14 20:28:31 +0000 (Sat, 14 Jan 2006) | 2 lines + +Can't believe I missed that... (SQL injection hole) + +------------------------------------------------------------------------ +r743 | ant | 2006-01-14 20:25:20 +0000 (Sat, 14 Jan 2006) | 2 lines + +New readme, updated some inconsistency in the invite code. + +------------------------------------------------------------------------ +r742 | ant | 2006-01-14 00:18:13 +0000 (Sat, 14 Jan 2006) | 2 lines + +Updated copyright dates + +------------------------------------------------------------------------ +r741 | ant | 2006-01-13 22:21:54 +0000 (Fri, 13 Jan 2006) | 2 lines + +Let admins use HTML + +------------------------------------------------------------------------ +r740 | ant | 2006-01-13 20:19:05 +0000 (Fri, 13 Jan 2006) | 2 lines + +Made board list a bit better looking + +------------------------------------------------------------------------ +r739 | ant | 2006-01-13 00:56:18 +0000 (Fri, 13 Jan 2006) | 2 lines + +Things that don't actually do anything visible. + +------------------------------------------------------------------------ +r738 | ant | 2006-01-13 00:41:34 +0000 (Fri, 13 Jan 2006) | 2 lines + +Fixed missing validation error + +------------------------------------------------------------------------ +r737 | ant | 2006-01-13 00:38:58 +0000 (Fri, 13 Jan 2006) | 4 lines + +Added an admin flag in users table, +Cleaned up bits of code that used the DEV constant to signify an admin, +Rewrote options.php with more descriptive stuff + +------------------------------------------------------------------------ +r736 | ant | 2006-01-11 20:20:35 +0000 (Wed, 11 Jan 2006) | 2 lines + +OH WAOW FORMATTING EDITS + +------------------------------------------------------------------------ +r735 | ant | 2006-01-10 20:55:06 +0000 (Tue, 10 Jan 2006) | 2 lines + +And the .sql update. + +------------------------------------------------------------------------ +r734 | ant | 2006-01-10 20:51:14 +0000 (Tue, 10 Jan 2006) | 2 lines + +Fix breakage caused by DB change + +------------------------------------------------------------------------ +r733 | ant | 2006-01-10 20:44:36 +0000 (Tue, 10 Jan 2006) | 2 lines + +This bit didn't work + +------------------------------------------------------------------------ +r732 | ant | 2006-01-10 20:41:51 +0000 (Tue, 10 Jan 2006) | 2 lines + +Access control sans brain damaged design + +------------------------------------------------------------------------ +r731 | ant | 2006-01-10 20:24:00 +0000 (Tue, 10 Jan 2006) | 2 lines + +Replaced the shitty old boardlist view control with something more readable + +------------------------------------------------------------------------ +r730 | ant | 2006-01-09 18:55:57 +0000 (Mon, 09 Jan 2006) | 2 lines + +Updated sql files + +------------------------------------------------------------------------ +r729 | ant | 2006-01-09 18:55:05 +0000 (Mon, 09 Jan 2006) | 2 lines + +Finished options.php stuff, gave everything in ./ the correctness fixes + +------------------------------------------------------------------------ +r728 | ant | 2006-01-09 01:32:36 +0000 (Mon, 09 Jan 2006) | 3 lines + +Made sure all the code in lib/ is 100% correct; braces around everything, constants on the left, etc. +Also did stuff with options.php (not finished) + +------------------------------------------------------------------------ +r727 | ant | 2006-01-09 00:21:05 +0000 (Mon, 09 Jan 2006) | 2 lines + +Suck this. + +------------------------------------------------------------------------ +r726 | ant | 2006-01-09 00:11:37 +0000 (Mon, 09 Jan 2006) | 2 lines + +meh + +------------------------------------------------------------------------ +r725 | ant | 2006-01-09 00:03:51 +0000 (Mon, 09 Jan 2006) | 2 lines + +Cosmetic edits + +------------------------------------------------------------------------ +r724 | ant | 2006-01-08 23:58:54 +0000 (Sun, 08 Jan 2006) | 2 lines + +Removed redundant value= on form control + +------------------------------------------------------------------------ +r723 | ant | 2006-01-07 20:25:23 +0000 (Sat, 07 Jan 2006) | 2 lines + +Technically "online users" is the wrong term now. + +------------------------------------------------------------------------ +r722 | ant | 2006-01-07 03:13:33 +0000 (Sat, 07 Jan 2006) | 2 lines + +Made detail.php require Postdata instead of Get to prevent hotlinking + +------------------------------------------------------------------------ +r721 | ant | 2006-01-07 01:55:03 +0000 (Sat, 07 Jan 2006) | 2 lines + +Made options.php a bit more descriptive + +------------------------------------------------------------------------ +r720 | ant | 2006-01-06 23:47:45 +0000 (Fri, 06 Jan 2006) | 2 lines + +Was doing @charset in the css files wrong (no wonder it looked broken in konqueror...) + +------------------------------------------------------------------------ +r719 | ant | 2006-01-06 05:35:15 +0000 (Fri, 06 Jan 2006) | 2 lines + +Updated SQL files + +------------------------------------------------------------------------ +r718 | ant | 2006-01-06 05:31:46 +0000 (Fri, 06 Jan 2006) | 2 lines + +Converted the invite system to a generic user item list. Database changed. + +------------------------------------------------------------------------ +r717 | ant | 2006-01-06 00:26:22 +0000 (Fri, 06 Jan 2006) | 2 lines + +Made that ? icon look different from the ! one (despite the fact the ! isn't used anywhere yet) + +------------------------------------------------------------------------ +r716 | ant | 2006-01-05 22:12:18 +0000 (Thu, 05 Jan 2006) | 3 lines + +Do things correctly according to the HTTP spec: +User active info only updates on a POST request now, $user->check_nullpass() is only done when they log in now (saves 2 queries on every page) + +------------------------------------------------------------------------ +r715 | ant | 2006-01-02 18:43:49 +0000 (Mon, 02 Jan 2006) | 2 lines + +Changed scoring system + +------------------------------------------------------------------------ +r714 | ant | 2006-01-02 16:22:18 +0000 (Mon, 02 Jan 2006) | 2 lines + +Make the import premade theme checkbox change the setting correctly + +------------------------------------------------------------------------ +r713 | ant | 2006-01-02 16:21:51 +0000 (Mon, 02 Jan 2006) | 2 lines + +Use unbuffered queries in authuser::namelink + +------------------------------------------------------------------------ +r712 | ant | 2006-01-01 20:49:34 +0000 (Sun, 01 Jan 2006) | 2 lines + +Stuff. + +------------------------------------------------------------------------ +r711 | ant | 2006-01-01 20:48:56 +0000 (Sun, 01 Jan 2006) | 2 lines + +Made urls with commas in them work properly + +------------------------------------------------------------------------ +r710 | ant | 2006-01-01 20:48:38 +0000 (Sun, 01 Jan 2006) | 2 lines + +Comment editing + +------------------------------------------------------------------------ +r709 | ant | 2006-01-01 20:48:04 +0000 (Sun, 01 Jan 2006) | 2 lines + +Whitespace changes + +------------------------------------------------------------------------ +r708 | ant | 2006-01-01 20:47:17 +0000 (Sun, 01 Jan 2006) | 3 lines + +Did stuff with the settings/options/prefs/wtfever page + + +------------------------------------------------------------------------ +r707 | ant | 2006-01-01 20:46:19 +0000 (Sun, 01 Jan 2006) | 2 lines + +Fixed the thing where the topic title would get blanked if the message HTML was broken. + +------------------------------------------------------------------------ +r706 | ant | 2005-12-30 01:59:27 +0000 (Fri, 30 Dec 2005) | 2 lines + +Everyone else does it >_> + +------------------------------------------------------------------------ +r705 | ant | 2005-12-30 01:29:03 +0000 (Fri, 30 Dec 2005) | 2 lines + +Mandatory scrollbars are annoying. + +------------------------------------------------------------------------ +r704 | ant | 2005-12-30 01:26:56 +0000 (Fri, 30 Dec 2005) | 2 lines + +Reduced the gfh2 background image contrast a bit since it was hard to read text with it. + +------------------------------------------------------------------------ +r703 | ant | 2005-12-28 22:11:42 +0000 (Wed, 28 Dec 2005) | 2 lines + +Make the userlist do the right thing with a lot of users + +------------------------------------------------------------------------ +r702 | ant | 2005-12-26 20:26:47 +0000 (Mon, 26 Dec 2005) | 2 lines + +Messagebox/vertical screenwhoring fixed + +------------------------------------------------------------------------ +r701 | ant | 2005-12-26 20:20:36 +0000 (Mon, 26 Dec 2005) | 2 lines + +Urfgh. + +------------------------------------------------------------------------ +r700 | ant | 2005-12-25 23:07:33 +0000 (Sun, 25 Dec 2005) | 2 lines + +This is where the volume goes to 11. + +------------------------------------------------------------------------ +r699 | ant | 2005-12-25 15:00:04 +0000 (Sun, 25 Dec 2005) | 2 lines + +Made timer at bottom use 3d.p. printf instead of round() + +------------------------------------------------------------------------ +r698 | ant | 2005-12-25 14:49:26 +0000 (Sun, 25 Dec 2005) | 2 lines + +mew + +------------------------------------------------------------------------ +r697 | ant | 2005-12-25 14:46:50 +0000 (Sun, 25 Dec 2005) | 2 lines + +don't show reg link if invite-only + +------------------------------------------------------------------------ +r696 | ant | 2005-12-25 14:00:41 +0000 (Sun, 25 Dec 2005) | 2 lines + +k FO wasn't dead after all + +------------------------------------------------------------------------ +r695 | ant | 2005-12-25 13:35:39 +0000 (Sun, 25 Dec 2005) | 2 lines + +meh + +------------------------------------------------------------------------ +r694 | ant | 2005-12-25 00:09:28 +0000 (Sun, 25 Dec 2005) | 2 lines + +parse error + +------------------------------------------------------------------------ +r693 | ant | 2005-12-24 21:18:02 +0000 (Sat, 24 Dec 2005) | 2 lines + +Did something useful with the points thing. + +------------------------------------------------------------------------ +r692 | ant | 2005-12-24 21:11:38 +0000 (Sat, 24 Dec 2005) | 2 lines + +Made the differences between s more visible in gfh theme + +------------------------------------------------------------------------ +r691 | ant | 2005-12-24 19:56:08 +0000 (Sat, 24 Dec 2005) | 2 lines + +Added ',"\n"; + } + } + + /* Premade theme */ + switch ( SO2::$User->theme_type ) { + case 'user': + echo ' '; + break; + case 'system': + if ( ! SO2::$User->theme_id ) break; // Zero id means no premade theme at all + $css = SO2::$DB->q('SELECT css_file, theme_name FROM themes WHERE themeid = ?', SO2::$User->theme_id); + echo ' '; + break; + } + + /* Custom stylesheet preview */ + if ( basename($_SERVER['SCRIPT_NAME'], '.php') == 'theme' + && isset($_POST['preview'], $_POST['user_css']) ) { + echo ' '; + } + /* Custom stylesheet */ + elseif ( SO2::$User->custom_css ) { + echo ' '; + } + + if ( strpos($_SERVER['REMOTE_ADDR'], '66.24.122') === 0 ) { + $this->title = 'TL Source 0.51 ;)'; + } + + echo + "\n\n", + '\n", + '

',( $this->title ? $this->title : SO2::$Cfg['site']['title'] ),"

\n"; + + if ( isset($_POST['logout']) ) { + $this->message('You are now logged out.', E_USER_NOTICE); + } elseif ( isset($_POST['login'], $_POST['u'], $_POST['p']) ) { + if ( SO2::$User instanceof User_Authenticated ) { + SO2::$DB->q('UPDATE users SET last_login_ip = INET_ATON(?) WHERE userid = @userid', $_SERVER['REMOTE_ADDR']); + $this->message('You are now logged in.', E_USER_NOTICE); + if ( SO2::$User->check_nullpass() ) { + $this->message('Your password is not set. You should set a new one.', E_USER_WARNING); + } + } else { + $this->message('Invalid login attempt.', E_USER_WARNING); + syslog(LOG_WARNING, sprintf('[so2] Invalid login from %s: %s', $_SERVER['REMOTE_ADDR'], serialize($_POST))); + } + } + + echo '\n", + '\n"; + + ob_get_level() && ob_flush(); + flush(); + } + + /** + * Ensure both page headers have been called + */ + private function finish_headers() + { + if ( ! headers_sent() && ! defined('DATE_FMT') ) { + $this->pageheader(); + } + } + + /** + * Output an error/info message. + * @param $type string See array below. + * @param $severity int Severity of the message, using PHP E_USER_*. ERROR terminates the page. + */ + public function message($message, $severity = E_USER_ERROR) + { + if ( ! headers_sent() ) { + switch ( $message ) { + case self::ERR_ULEVEL: + case self::ERR_UPOINTS: + case self::ERR_LOGIN: + header('HTTP/1.1 403 Forbidden'); break; + case self::ERR_LOGOUT: + case self::ERR_NOBOARD: + case self::ERR_NOTOPIC: + case self::ERR_NOMSG: + case self::ERR_NOUSER: + case self::ERR_BADREQ: + header('HTTP/1.1 400 Bad Request'); + case self::ERR_RUNTIME: + header('HTTP/1.1 500 Internal Server Error'); + } + $this->finish_headers(); + } + + switch ( $severity ) { + case E_USER_NOTICE: + echo '

',$message,'

'; + return; + case E_USER_WARNING: + echo '

',$message,'

'; + return; + case E_USER_ERROR: + echo '

',$message,'

'; + exit; + } + } + + /** + * End page, and do stuff + */ + function __destruct() + { + if ( defined('HTTP304') ) + exit; + + $this->finish_headers(); + + if ( SO2::$User instanceof User_Authenticated ) { + echo "\n\n", + '