Subversion Repositories taios

Compare Revisions

Ignore whitespace Rev 130 → Rev 468

/challenge/index.php
0,0 → 1,16
<?php
 
require '../_taios.php';
 
$page = new Taios_Page('Tim32 Challenge', '../');
$page->drawHeader();
$page->drawMiddle();
 
write('<p class="bold">Take the Tim32 challenge here!</p>');
write('<p class="italic">There are checkpoints along the way so you can simply paste the URL you got to if you want to continue from that nearest checkpoint.</p>');
write('<br /><br /><a href="cakefolder/"><h2 style="text-align: center">Enter!</h2></a>');
 
$page->drawFooter();
 
?>
 
/challenge/cakefolder/444.php
0,0 → 1,24
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>moocow.php</title>
<link rel="stylesheet" type="text/css" href="styles.css" />
</head>
<body>
<!-- -I/old/include -->
<div id="page">
<div id="header">
<h1> 444 - File Found!</h1>
</div>
<div id="body">
<p>The file you requested does exist and is currently avaliable.</p>
<p>If you were given this link by a friend, you should tell them it does exist.</p>
<p>Here are some unuseful lin<span title="Title!">Q</span>s:</p>
<ul>
<li><a href="http://www.youfail.org/">YouFail.org</a></li>
<li><a href="index.php">Back to the Homepage</a></li>
</ul>
</div>
</div>
</body>
</html>
/challenge/cakefolder/images/bengalTigersRule.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/challenge/cakefolder/images/bengalTigersRule.png
Property changes:
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: challenge/cakefolder/images/blossom.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: challenge/cakefolder/images/blossom.png
===================================================================
--- challenge/cakefolder/images/blossom.png (nonexistent)
+++ challenge/cakefolder/images/blossom.png (revision 468)
/challenge/cakefolder/images/blossom.png
Property changes:
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: challenge/cakefolder/images/meega.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: challenge/cakefolder/images/meega.png
===================================================================
--- challenge/cakefolder/images/meega.png (nonexistent)
+++ challenge/cakefolder/images/meega.png (revision 468)
/challenge/cakefolder/images/meega.png
Property changes:
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: challenge/cakefolder/images/clownattack.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: challenge/cakefolder/images/clownattack.png
===================================================================
--- challenge/cakefolder/images/clownattack.png (nonexistent)
+++ challenge/cakefolder/images/clownattack.png (revision 468)
/challenge/cakefolder/images/clownattack.png
Property changes:
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: challenge/cakefolder/images/hellow.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: challenge/cakefolder/images/hellow.png
===================================================================
--- challenge/cakefolder/images/hellow.png (nonexistent)
+++ challenge/cakefolder/images/hellow.png (revision 468)
/challenge/cakefolder/images/hellow.png
Property changes:
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: challenge/cakefolder/images/greatscot.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: challenge/cakefolder/images/greatscot.png
===================================================================
--- challenge/cakefolder/images/greatscot.png (nonexistent)
+++ challenge/cakefolder/images/greatscot.png (revision 468)
/challenge/cakefolder/images/greatscot.png
Property changes:
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: challenge/cakefolder/haha.php
===================================================================
--- challenge/cakefolder/haha.php (nonexistent)
+++ challenge/cakefolder/haha.php (revision 468)
@@ -0,0 +1,23 @@
+
+
+
+Welcome to Tim32
+
+
+
+
+
+

444 - File Not Found

+
+
+

The file you requested does not exist or is currently unavaliable.

+

If you were given this link by a friend, you should tell them it doesn't exist.

+

Here are some useful links:

+
    +
  • YouFail.org
  • +
  • Back to the Homepage
  • +
    +
    +
    +
    +
    \ No newline at end of file
    Index: challenge/cakefolder/cowmoo.php
    ===================================================================
    --- challenge/cakefolder/cowmoo.php (nonexistent)
    +++ challenge/cakefolder/cowmoo.php (revision 468)
    @@ -0,0 +1,53 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +if ($_POST['pass'] != 3125)
    +{
    +?>
    +
    +
    + die();
    +}
    +
    +?>
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    Index: challenge/cakefolder/moocow.php
    ===================================================================
    --- challenge/cakefolder/moocow.php (nonexistent)
    +++ challenge/cakefolder/moocow.php (revision 468)
    @@ -0,0 +1,15 @@
    +
    +
    +
    +Fortran
    +
    +
    +
    +
    +
    +
    +5 ** 5:
    +
    +
    +
    +
    \ No newline at end of file
    Index: challenge/cakefolder/birdcoco.php
    ===================================================================
    --- challenge/cakefolder/birdcoco.php (nonexistent)
    +++ challenge/cakefolder/birdcoco.php (revision 468)
    @@ -0,0 +1,30 @@
    +
    +
    +
    +Chocolate
    +
    +
    +
    +
    +
    +
    +
    +if ($_POST['pass'] != 'Hello!')
    +{
    +?>
    +
    +
    + die();
    +}
    +
    +?>
    +
    +
    +Body.Color
    +
    +
    +
    +
    +
    \ No newline at end of file
    Index: challenge/cakefolder/cocobird.php
    ===================================================================
    --- challenge/cakefolder/cocobird.php (nonexistent)
    +++ challenge/cakefolder/cocobird.php (revision 468)
    @@ -0,0 +1,30 @@
    +
    +
    +
    +Greetings, OLD Friend
    +
    +
    +
    +
    +
    +
    +
    +if (intval($_POST['clicks']) < 50)
    +{
    +?>
    +
    +
    + die();
    +}
    +
    +?>
    +
    +
    +* Remember something?
    +
    +
    +
    +
    +
    \ No newline at end of file
    Index: challenge/cakefolder/sounds/annoyingNoise3.wav
    ===================================================================
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    Index: challenge/cakefolder/sounds/annoyingNoise3.wav
    ===================================================================
    --- challenge/cakefolder/sounds/annoyingNoise3.wav (nonexistent)
    +++ challenge/cakefolder/sounds/annoyingNoise3.wav (revision 468)
    /challenge/cakefolder/sounds/annoyingNoise3.wav
    Property changes:
    Added: svn:executable
    ## -0,0 +1 ##
    +*
    \ No newline at end of property
    Added: svn:mime-type
    ## -0,0 +1 ##
    +application/octet-stream
    \ No newline at end of property
    Index: challenge/cakefolder/sounds/annoyingNoise4.ogg
    ===================================================================
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    Index: challenge/cakefolder/sounds/annoyingNoise4.ogg
    ===================================================================
    --- challenge/cakefolder/sounds/annoyingNoise4.ogg (nonexistent)
    +++ challenge/cakefolder/sounds/annoyingNoise4.ogg (revision 468)
    /challenge/cakefolder/sounds/annoyingNoise4.ogg
    Property changes:
    Added: svn:mime-type
    ## -0,0 +1 ##
    +application/octet-stream
    \ No newline at end of property
    Index: challenge/cakefolder/sounds/real.wav
    ===================================================================
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    Index: challenge/cakefolder/sounds/real.wav
    ===================================================================
    --- challenge/cakefolder/sounds/real.wav (nonexistent)
    +++ challenge/cakefolder/sounds/real.wav (revision 468)
    /challenge/cakefolder/sounds/real.wav
    Property changes:
    Added: svn:executable
    ## -0,0 +1 ##
    +*
    \ No newline at end of property
    Added: svn:mime-type
    ## -0,0 +1 ##
    +application/octet-stream
    \ No newline at end of property
    Index: challenge/cakefolder/sounds/annoyingNoise4.wav
    ===================================================================
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    Index: challenge/cakefolder/sounds/annoyingNoise4.wav
    ===================================================================
    --- challenge/cakefolder/sounds/annoyingNoise4.wav (nonexistent)
    +++ challenge/cakefolder/sounds/annoyingNoise4.wav (revision 468)
    /challenge/cakefolder/sounds/annoyingNoise4.wav
    Property changes:
    Added: svn:executable
    ## -0,0 +1 ##
    +*
    \ No newline at end of property
    Added: svn:mime-type
    ## -0,0 +1 ##
    +application/octet-stream
    \ No newline at end of property
    Index: challenge/cakefolder/sounds/annoyingNoise5.ogg
    ===================================================================
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    Index: challenge/cakefolder/sounds/annoyingNoise5.ogg
    ===================================================================
    --- challenge/cakefolder/sounds/annoyingNoise5.ogg (nonexistent)
    +++ challenge/cakefolder/sounds/annoyingNoise5.ogg (revision 468)
    /challenge/cakefolder/sounds/annoyingNoise5.ogg
    Property changes:
    Added: svn:mime-type
    ## -0,0 +1 ##
    +application/octet-stream
    \ No newline at end of property
    Index: challenge/cakefolder/sounds/annoyingNoise5.wav
    ===================================================================
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    Index: challenge/cakefolder/sounds/annoyingNoise5.wav
    ===================================================================
    --- challenge/cakefolder/sounds/annoyingNoise5.wav (nonexistent)
    +++ challenge/cakefolder/sounds/annoyingNoise5.wav (revision 468)
    /challenge/cakefolder/sounds/annoyingNoise5.wav
    Property changes:
    Added: svn:mime-type
    ## -0,0 +1 ##
    +application/octet-stream
    \ No newline at end of property
    Index: challenge/cakefolder/sounds/annoyingNoise1.ogg
    ===================================================================
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    Index: challenge/cakefolder/sounds/annoyingNoise1.ogg
    ===================================================================
    --- challenge/cakefolder/sounds/annoyingNoise1.ogg (nonexistent)
    +++ challenge/cakefolder/sounds/annoyingNoise1.ogg (revision 468)
    /challenge/cakefolder/sounds/annoyingNoise1.ogg
    Property changes:
    Added: svn:mime-type
    ## -0,0 +1 ##
    +application/octet-stream
    \ No newline at end of property
    Index: challenge/cakefolder/sounds/annoyingNoise1.wav
    ===================================================================
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    Index: challenge/cakefolder/sounds/annoyingNoise1.wav
    ===================================================================
    --- challenge/cakefolder/sounds/annoyingNoise1.wav (nonexistent)
    +++ challenge/cakefolder/sounds/annoyingNoise1.wav (revision 468)
    /challenge/cakefolder/sounds/annoyingNoise1.wav
    Property changes:
    Added: svn:executable
    ## -0,0 +1 ##
    +*
    \ No newline at end of property
    Added: svn:mime-type
    ## -0,0 +1 ##
    +application/octet-stream
    \ No newline at end of property
    Index: challenge/cakefolder/sounds/annoyingNoise2.ogg
    ===================================================================
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    Index: challenge/cakefolder/sounds/annoyingNoise2.ogg
    ===================================================================
    --- challenge/cakefolder/sounds/annoyingNoise2.ogg (nonexistent)
    +++ challenge/cakefolder/sounds/annoyingNoise2.ogg (revision 468)
    /challenge/cakefolder/sounds/annoyingNoise2.ogg
    Property changes:
    Added: svn:mime-type
    ## -0,0 +1 ##
    +application/octet-stream
    \ No newline at end of property
    Index: challenge/cakefolder/sounds/annoyingNoise2.wav
    ===================================================================
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    Index: challenge/cakefolder/sounds/annoyingNoise2.wav
    ===================================================================
    --- challenge/cakefolder/sounds/annoyingNoise2.wav (nonexistent)
    +++ challenge/cakefolder/sounds/annoyingNoise2.wav (revision 468)
    /challenge/cakefolder/sounds/annoyingNoise2.wav
    Property changes:
    Added: svn:executable
    ## -0,0 +1 ##
    +*
    \ No newline at end of property
    Added: svn:mime-type
    ## -0,0 +1 ##
    +application/octet-stream
    \ No newline at end of property
    Index: challenge/cakefolder/sounds/annoyingNoise3.ogg
    ===================================================================
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    Index: challenge/cakefolder/sounds/annoyingNoise3.ogg
    ===================================================================
    --- challenge/cakefolder/sounds/annoyingNoise3.ogg (nonexistent)
    +++ challenge/cakefolder/sounds/annoyingNoise3.ogg (revision 468)
    /challenge/cakefolder/sounds/annoyingNoise3.ogg
    Property changes:
    Added: svn:mime-type
    ## -0,0 +1 ##
    +application/octet-stream
    \ No newline at end of property
    Index: challenge/cakefolder/sounds/real.ogg
    ===================================================================
    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    Index: challenge/cakefolder/sounds/real.ogg
    ===================================================================
    --- challenge/cakefolder/sounds/real.ogg (nonexistent)
    +++ challenge/cakefolder/sounds/real.ogg (revision 468)
    /challenge/cakefolder/sounds/real.ogg
    Property changes:
    Added: svn:mime-type
    ## -0,0 +1 ##
    +application/octet-stream
    \ No newline at end of property
    Index: challenge/cakefolder/index.php
    ===================================================================
    --- challenge/cakefolder/index.php (nonexistent)
    +++ challenge/cakefolder/index.php (revision 468)
    @@ -0,0 +1,26 @@
    +
    +
    +
    +fail.org
    +
    +
    +
    +?>
    +
    +
    +
    +$yes = false;
    +if ($_POST['thingy'] == 7)
    +{
    + $yes = true;
    + echo 'HahA?';
    +}
    +
    +?>
    +

    SOLVE x += x++; WHERE x = 3

    +
    +
    +
    +
    +
    +
    Index: challenge/cakefolder/sellotape.php
    ===================================================================
    --- challenge/cakefolder/sellotape.php (nonexistent)
    +++ challenge/cakefolder/sellotape.php (revision 468)
    @@ -0,0 +1,54 @@
    +
    +
    +
    +Foodz
    +
    +
    +
    +
    +
    +
    +
    +if ($_POST['pass'] != 'aqua')
    +{
    +?>
    +
    +
    + die();
    +}
    +
    +?>
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Well, the answer iz???
    +
    +
    +
    +
    +
    \ No newline at end of file
    Index: challenge/cakefolder/tapesello.php
    ===================================================================
    --- challenge/cakefolder/tapesello.php (nonexistent)
    +++ challenge/cakefolder/tapesello.php (revision 468)
    @@ -0,0 +1,30 @@
    +
    +
    +
    +sdrawcab
    +
    +
    +
    +
    +
    +
    +
    +if ($_POST['pass'] != 'cheezburger')
    +{
    +?>
    +
    +
    + die();
    +}
    +
    +?>
    +
    +
    +Umm, I do love:
    +
    +
    +
    +
    +
    \ No newline at end of file
    Index: challenge/hexxedfolder/444.php
    ===================================================================
    --- challenge/hexxedfolder/444.php (nonexistent)
    +++ challenge/hexxedfolder/444.php (revision 468)
    @@ -0,0 +1,24 @@
    +
    +
    +
    +444444
    +
    +
    +
    +
    +
    +
    +

    444 - WRONG DIR!

    +
    +
    +

    The file you requested does exist and is currently avaliable, but you're in the wrong directories.

    +

    If you were given this link by a friend, you should tell them to #include <brain>.

    +

    Here are some unuseful links:

    +
      +
    • YouFail.org
    • +
    • Back to the Homepage
    • +
      +
      +
      +
      +
      Index: challenge/hexxedfolder/check.php
      ===================================================================
      --- challenge/hexxedfolder/check.php (nonexistent)
      +++ challenge/hexxedfolder/check.php (revision 468)
      @@ -0,0 +1,40 @@
      +
      +
      +
      +?????????
      +
      +
      +
      +
      +if (!isset($_POST['sub']))
      +{
      +?>
      +
      +
      + die();
      +}
      +
      +?>
      +
      +
      +
      +
      +moocow
      +
      +
      +
      +birdcoco
      +
      +
      +
      +sellotape
      +
      +
      +
      +
      +
      +
      +
      +
      \ No newline at end of file
      Index: challenge/hexxedfolder/images/icecream.png
      ===================================================================
      Cannot display: file marked as a binary type.
      svn:mime-type = application/octet-stream
      Index: challenge/hexxedfolder/images/icecream.png
      ===================================================================
      --- challenge/hexxedfolder/images/icecream.png (nonexistent)
      +++ challenge/hexxedfolder/images/icecream.png (revision 468)
      /challenge/hexxedfolder/images/icecream.png
      Property changes:
      Added: svn:mime-type
      ## -0,0 +1 ##
      +application/octet-stream
      \ No newline at end of property
      Index: challenge/hexxedfolder/onewinged.php
      ===================================================================
      --- challenge/hexxedfolder/onewinged.php (nonexistent)
      +++ challenge/hexxedfolder/onewinged.php (revision 468)
      @@ -0,0 +1,32 @@
      +
      +
      +
      +We love it!
      +
      +
      +
      +
      +
      +if ($_POST['pass'] != 'chicken')
      +{
      +?>
      +
      +
      + die();
      +}
      +
      +?>
      +
      +
      +Universal Resource Lookup
      +
      +
      +
      \ No newline at end of file
      Index: challenge/hexxedfolder/haha.php
      ===================================================================
      --- challenge/hexxedfolder/haha.php (nonexistent)
      +++ challenge/hexxedfolder/haha.php (revision 468)
      @@ -0,0 +1,30 @@
      +
      +
      +
      +c/c++/c#/php/j#/java/js
      +
      +
      +
      +
      +if ($_POST['pass'] != 'cheese cake')
      +{
      +?>
      +
      +
      + die();
      +}
      +
      +?>
      +
      +val=silence
      +
      +
      +
      +++2;
      +
      +
      +
      +
      +
      \ No newline at end of file
      Index: challenge/hexxedfolder/moose.php
      ===================================================================
      --- challenge/hexxedfolder/moose.php (nonexistent)
      +++ challenge/hexxedfolder/moose.php (revision 468)
      @@ -0,0 +1,39 @@
      +
      +
      +
      +Click, Dammit!
      +
      +
      +
      +
      +
      +if ($_POST['pass'] != '-- --- --- ... .')
      +{
      +?>
      +
      +
      + die();
      +}
      +
      +?>
      +
      +
      +
      +
      +
      +
      +
      \ No newline at end of file
      Index: challenge/hexxedfolder/submit.php
      ===================================================================
      --- challenge/hexxedfolder/submit.php (nonexistent)
      +++ challenge/hexxedfolder/submit.php (revision 468)
      @@ -0,0 +1,29 @@
      +
      +
      +
      +NOT LolCats
      +
      +
      +
      +
      +if ($_POST['pass1'] != 'Fortran' || $_POST['pass2'] != 'Chocolate' || $_POST['pass3'] != 'Foodz')
      +{
      +?>
      +
      +
      + die();
      +}
      +
      +?>
      +
      +

      A page that does exist

      +
      +
      +What do we love?
      +
      +
      +
      +
      +
      Index: challenge/hexxedfolder/love.php
      ===================================================================
      --- challenge/hexxedfolder/love.php (nonexistent)
      +++ challenge/hexxedfolder/love.php (revision 468)
      @@ -0,0 +1,72 @@
      +
      +
      +
      +Clicky file
      +
      +
      +
      +
      +
      +if ($_POST['love'] != 'palki' && !isset($_POST['word']))
      +{
      +?>
      +
      +
      + die();
      +}
      +
      +if ($_POST['word'] == 'library')
      +{
      +?>
      +
      +
      + die();
      +}
      +
      +?>
      +
      +A DeLetion of Living people is SO hAPpy It is fun.
      +
      +
      +
      +' . "\n";' . "\n";' . "\n";' . "\n";
      +
      +$alphabet = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
      +$maxRows = 10;
      +$maxCols = 6;
      +for ($i = 0; $i <= $maxRows; $i++)
      +{
      + print '
      + for ($j = 0; $j <= $maxCols; $j++)
      + {
      + $letter = $alphabet[rand(0, 25)];
      + print '
      + }
      + if ($i == 0)
      + {
      + print '
      + }
      + print '
      +}
      +?>
      +
      +
      +
      +
      +
      Index: challenge/hexxedfolder/cd.php
      ===================================================================
      --- challenge/hexxedfolder/cd.php (nonexistent)
      +++ challenge/hexxedfolder/cd.php (revision 468)
      @@ -0,0 +1,32 @@
      +
      +
      +
      +clement-musique.c.la
      +
      +
      +
      +
      +if ($_GET['val'] != 'silence')
      +{
      + die('

      be more observant - and learn php

      ');
      +}
      +
      +if ($_POST['pass'] != '3' && !isset($_GET['val']))
      +{
      +?>
      +
      +
      + die();
      +}
      +
      +?>
      +
      +
      +The Almight One Winged:
      +
      +
      +
      +
      +
      \ No newline at end of file
      Index: challenge/hexxedfolder/grey.php
      ===================================================================
      --- challenge/hexxedfolder/grey.php (nonexistent)
      +++ challenge/hexxedfolder/grey.php (revision 468)
      @@ -0,0 +1,36 @@
      +
      +
      +
      +Moose
      +
      +
      +
      +
      +if ($_POST['pass'] != 'torus')
      +{
      +?>
      +
      +
      + die();
      +}
      +
      +?>
      +
      +
      +
      +
      +Morse
      +-- --- .-. ... .
      +
      +
      +Moose
      +
      +
      +
      +
      +
      +
      +
      +
      \ No newline at end of file
      Index: challenge/hexxedfolder/icecream.php
      ===================================================================
      --- challenge/hexxedfolder/icecream.php (nonexistent)
      +++ challenge/hexxedfolder/icecream.php (revision 468)
      @@ -0,0 +1,18 @@
      +
      +
      +
      +Grey
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      \ No newline at end of file
      Index: challenge/extendfolder/extend.php
      ===================================================================
      --- challenge/extendfolder/extend.php (nonexistent)
      +++ challenge/extendfolder/extend.php (revision 468)
      @@ -0,0 +1,3 @@
      +
      +
      +
      Index: challenge/include/cute.jpg
      ===================================================================
      Cannot display: file marked as a binary type.
      svn:mime-type = application/octet-stream
      Index: challenge/include/cute.jpg
      ===================================================================
      --- challenge/include/cute.jpg (nonexistent)
      +++ challenge/include/cute.jpg (revision 468)
      /challenge/include/cute.jpg
      Property changes:
      Added: svn:mime-type
      ## -0,0 +1 ##
      +application/octet-stream
      \ No newline at end of property
      Index: admin/all-blog-posts.php
      ===================================================================
      --- admin/all-blog-posts.php (revision 130)
      +++ admin/all-blog-posts.php (revision 468)
      @@ -1,60 +1,64 @@
      -
      -
      -require '../_taios.php';
      -
      -$page = new Taios_Page('Manage All Blog Posts', '../');
      -$page->drawHeader();
      -$page->drawMiddle();
      -
      -$page->checkLoggedIn();
      -
      -if ($page->isUserAdmin($page->getLoggedInUser()))
      -{
      - write('

      Use this to manage all the blog posts on the Tim32 Website.


      ');
      -
      - write('');');');');');');');');');');');');');');');');');');');');');');
      - write('
      - write('ID
      - write('Parent
      - write('Author
      - write('Title
      - write('Content
      - write('Date Posted
      - write('Category
      - write('Spam
      - write('
      -
      - $ids = $page->findIDs('BlogPosts');
      - for ($i = 0; $i < count($ids); $i++)
      - {
      - $post = $page->getBlogPost($ids[$i]);
      - write('
      - write('' . $post->ID . '
      - if ($post->parent == -1)
      - {
      - write('No Parent
      - }
      - else
      - {
      - write('' . $post->parent->title . '
      - }
      - write('' . $post->author->name . '
      - write('' . $post->title . '
      - write('' . $post->content . '
      - write('' . date('j/m/Y H:i', $post->datePosted) . '
      - write('' . $post->category . '
      - write('' . $post->spam . '
      - write('
      - }
      -
      - write('
      ');
      -}
      -else
      -{
      - drawError('You do not have permission to access this page.');
      -}
      -
      -$page->drawFooter();
      -
      -?>
      -
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Manage All Blog Posts', '../');
      +$page->drawHeader();
      +$page->drawMiddle();
      +
      +$page->checkLoggedIn();
      +
      +if ($page->isUserAdmin($page->getLoggedInUser()))
      +{
      + write('

      Use this to manage all the blog posts on the Tim32 Website.


      ');
      +
      + write('');');');');');');');');');');');');');');');');');');');');');');
      + write('
      + write('ID
      + write('Parent
      + write('Author
      + write('Title
      + write('Content
      + write('Date Posted
      + write('Category
      + write('Spam
      + write('
      +
      + $ids = $page->findIDs('BlogPosts', 'ORDER BY DatePosted DESC');
      + for ($i = 0; $i < count($ids); $i++)
      + {
      + $id_str = $ids[$i];
      + if (!empty($id_str))
      + {
      + $post = $page->getBlogPost($id_str);
      + write('
      + write('' . $post->ID . '
      + if ($post->parent == -1)
      + {
      + write('No Parent
      + }
      + else
      + {
      + write('' . $post->parent->title . '
      + }
      + write('' . $post->author->name . '
      + write('' . $post->title . '
      + write('' . str_replace("\n", '
      ', $post->content) . '
      + write('' . date('j/m/Y H:i', $post->datePosted) . '
      + write('' . $post->category . '
      + write('' . $post->spam . '
      + write('
      + }
      + }
      +
      + write('
      ');
      +}
      +else
      +{
      + $page->drawError('You do not have permission to access this page.');
      +}
      +
      +$page->drawFooter();
      +
      +?>
      +
      Index: admin/all-accounts.php
      ===================================================================
      --- admin/all-accounts.php (revision 130)
      +++ admin/all-accounts.php (revision 468)
      @@ -1,51 +1,51 @@
      -
      -
      -require '../_taios.php';
      -
      -$page = new Taios_Page('Manage All Accounts', '../');
      -$page->drawHeader();
      -$page->drawMiddle();
      -
      -$page->checkLoggedIn();
      -
      -if ($page->isUserAdmin($page->getLoggedInUser()))
      -{
      - write('

      Use this to manage all the accounts on the Tim32 Website.


      ');
      -
      - write('');');');');');');');');');');');');');');');');');');');
      - write('
      - write('ID
      - write('AccessID
      - write('Username
      - write('Password
      - write('Name
      - write('Email Address
      - write('Challenge ID
      - write('
      -
      - $ids = $page->findIDs('Users');
      - for ($i = 0; $i < count($ids); $i++)
      - {
      - $user = $page->getUserByID($ids[$i]);
      - write('
      - write('' . $user->ID . '
      - write('' . $user->accessID . '
      - write('' . $user->username . '
      - write('' . $user->password . '
      - write('' . $user->name . '
      - write('' . $user->emailAddress . '
      - write('' . $user->challengeID . '
      - write('
      - }
      -
      - write('
      ');
      -}
      -else
      -{
      - drawError('You do not have permission to access this page.');
      -}
      -
      -$page->drawFooter();
      -
      -?>
      -
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Manage All Accounts', '../');
      +$page->drawHeader();
      +$page->drawMiddle();
      +
      +$page->checkLoggedIn();
      +
      +if ($page->isUserAdmin($page->getLoggedInUser()))
      +{
      + write('

      Use this to manage all the accounts on the Tim32 Website.


      ');
      +
      + write('');');');');');');');');');');');');');');');');');');');
      + write('
      + write('ID
      + write('AccessID
      + write('Username
      + write('SHA1 Password
      + write('Name
      + write('Email Address
      + write('Challenge ID
      + write('
      +
      + $ids = $page->findIDs('Users');
      + for ($i = 0; $i < count($ids); $i++)
      + {
      + $user = $page->getUserByID($ids[$i]);
      + write('
      + write('' . $user->ID . '
      + write('' . $user->accessID . '
      + write('' . $user->username . '
      + write('' . $user->password . '
      + write('' . $user->name . '
      + write('' . $user->emailAddress . '
      + write('' . $user->challengeID . '
      + write('
      + }
      +
      + write('
      ');
      +}
      +else
      +{
      + $page->drawError('You do not have permission to access this page.');
      +}
      +
      +$page->drawFooter();
      +
      +?>
      +
      Index: admin/all-forum-posts.php
      ===================================================================
      --- admin/all-forum-posts.php (nonexistent)
      +++ admin/all-forum-posts.php (revision 468)
      @@ -0,0 +1,67 @@
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Manage All Forum Posts', '../');
      +$page->drawHeader();
      +$page->drawMiddle();
      +
      +$page->checkLoggedIn();
      +
      +if ($page->isUserAdmin($page->getLoggedInUser()))
      +{
      + write('

      Use this to manage all the forum categories on the Tim32 Website.


      ');
      +
      + write('');');');');');');');');');');');');');');');');');');');');');');');
      + write('
      + write('ID
      + write('Author
      + write('Category
      + write('Parent
      + write('Title
      + write('Content
      + write('Date Posted
      + write('Spam
      + write('
      +
      + $ids = $page->findIDs('ForumPosts');
      + for ($i = 0; $i < count($ids); $i++)
      + {
      + $post = $page->getForumPost($ids[$i]);
      + write('
      + write('' . $post->ID . '
      + write('' . $post->author->name . '
      + if (!$post->category)
      + {
      + write('No Category
      + }
      + else
      + {
      + write('' . $post->category->title . '
      + }
      + if (!$post->parent)
      + {
      + write('No Parent
      + }
      + else
      + {
      + write('' . $post->parent->title . '
      + }
      + write('' . $post->title . '
      + write('' . str_replace("\n", ' ', $post->content) . '
      + write('' . date('j/m/Y H:i', $post->datePosted) . '
      + write('' . $post->spam . '
      + write('
      + }
      +
      + write('
      ');
      +}
      +else
      +{
      + $page->drawError('You do not have permission to access this page.');
      +}
      +
      +$page->drawFooter();
      +
      +?>
      +
      Index: admin/all-forum-categories.php
      ===================================================================
      --- admin/all-forum-categories.php (nonexistent)
      +++ admin/all-forum-categories.php (revision 468)
      @@ -0,0 +1,52 @@
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Manage All Forum Categories', '../');
      +$page->drawHeader();
      +$page->drawMiddle();
      +
      +$page->checkLoggedIn();
      +
      +if ($page->isUserAdmin($page->getLoggedInUser()))
      +{
      + write('

      Use this to manage all the forum categories on the Tim32 Website.


      ');
      +
      + write('');');');');');');');');');');');');');');
      + write('
      + write('ID
      + write('Parent
      + write('Title
      + write('Description
      + write('
      +
      + $ids = $page->findIDs('ForumCategories');
      + for ($i = 0; $i < count($ids); $i++)
      + {
      + $cat = $page->getForumCategory($ids[$i]);
      + write('
      + write('' . $cat->ID . '
      + if (!$cat->parent)
      + {
      + write('No Parent
      + }
      + else
      + {
      + write('' . $cat->parent->title . '
      + }
      + write('' . $cat->title . '
      + write('' . $cat->description . '
      + write('
      + }
      +
      + write('
      ');
      +}
      +else
      +{
      + $page->drawError('You do not have permission to access this page.');
      +}
      +
      +$page->drawFooter();
      +
      +?>
      +
      Index: admin/index.php
      ===================================================================
      --- admin/index.php (revision 130)
      +++ admin/index.php (revision 468)
      @@ -1,27 +1,26 @@
      -
      -
      -require '../_taios.php';
      -
      -$page = new Taios_Page('Administration', '../');
      -$page->drawHeader();
      -$page->drawMiddle();
      -
      -$page->checkLoggedIn();
      -$user = $page->getLoggedInUser();
      -
      -write('

      Manage Account

      ');
      -
      -if ($page->isUserAdmin($user))
      -{
      - write('

      Manage All Accounts

      ');
      - write('

      Manage All Blog Posts

      ');
      - write('

      Manage All Projects

      ');
      - write('

      Manage All Forum Categories

      ');
      - write('

      Manage All Forum Topics

      ');
      - write('

      Manage All Forum Posts

      ');
      -}
      -
      -$page->drawFooter();
      -
      -?>
      -
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Administration', '../');
      +$page->drawHeader();
      +$page->drawMiddle();
      +
      +$page->checkLoggedIn();
      +$user = $page->getLoggedInUser();
      +
      +write('

      Manage Account

      ');
      +
      +if ($page->isUserAdmin($user))
      +{
      + write('

      Manage All Accounts

      ');
      + write('

      Manage All Blog Posts

      ');
      + write('

      Manage All Projects

      ');
      + write('

      Manage All Forum Categories

      ');
      + write('

      Manage All Forum Posts

      ');
      +}
      +
      +$page->drawFooter();
      +
      +?>
      +
      Index: admin/all-projects.php
      ===================================================================
      --- admin/all-projects.php (nonexistent)
      +++ admin/all-projects.php (revision 468)
      @@ -0,0 +1,55 @@
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Manage All Projects', '../');
      +$page->drawHeader();
      +$page->drawMiddle();
      +
      +$page->checkLoggedIn();
      +
      +if ($page->isUserAdmin($page->getLoggedInUser()))
      +{
      + write('

      Use this to manage all the projects on the Tim32 Website.


      ');
      +
      + write('');');');');');');');');');');');');');');');');');');');');');');');
      + write('
      + write('ID
      + write('Author
      + write('Title
      + write('Description
      + write('Logo
      + write('Download
      + write('Website
      + write('Latest Version
      + write('Last Update
      + write('
      +
      + $ids = $page->findIDs('Projects');
      + for ($i = 0; $i < count($ids); $i++)
      + {
      + $project = $page->getProject($ids[$i]);
      + write('
      + write('' . $project->ID . '
      + write('' . $project->author->name . '
      + write('' . $project->title . '
      + write('' . str_replace("\n", '
      ', $project->description) . '
      + write('
      + write('Link
      + write('Link
      + write('' . $project->latestVersion . '
      + write('' . date('j/m/Y H:i', $project->lastUpdate) . '
      + write('
      + }
      +
      + write('
      ');
      +}
      +else
      +{
      + $page->drawError('You do not have permission to access this page.');
      +}
      +
      +$page->drawFooter();
      +
      +?>
      +
      Index: admin/account.php
      ===================================================================
      --- admin/account.php (revision 130)
      +++ admin/account.php (revision 468)
      @@ -1,60 +1,60 @@
      -
      -
      -require '../_taios.php';
      -
      -$page = new Taios_Page('Manage Account', '../');
      -$page->drawHeader();
      -$page->drawMiddle();
      -
      -$page->checkLoggedIn();
      -
      -$userID = $page->getGetID();
      -$user = $page->getUserByID($userID);
      -
      -if (($page->getLoggedInUser()->ID == $userID || $page->isUserAdmin($page->getLoggedInUser())) && $user)
      -{
      -?>
      -
      -

      Here you can edit your account.

      -

      Only change the password value if you want to change your password.

      -
      -
      -
      -');');
      -
      ID: ID; ?>
      -
      -if ($page->isUserAdmin($page->getLoggedInUser()))
      -{
      - write('
      AccessID:
      -}
      -else
      -{
      - write('
      AccessID: ' . $user->accessID . '
      -}
      -?>
      -
      Username: username; ?>
      -
      Password:
      -
      Email Address:
      -
      Name:
      -
      -
      -
      -
      -
      -}
      -else
      -{
      - if (!$user)
      - {
      - drawError('No such user, #' . $userID);
      - }
      - else
      - {
      - drawError('You do not have permission to access this page.');
      - }
      -}
      -
      -$page->drawFooter();
      -
      -?>
      -
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Manage Account', '../');
      +$page->drawHeader();
      +$page->drawMiddle();
      +
      +$page->checkLoggedIn();
      +
      +$userID = $page->getGetID();
      +$user = $page->getUserByID($userID);
      +
      +if (($page->getLoggedInUser()->ID == $userID || $page->isUserAdmin($page->getLoggedInUser())) && $user)
      +{
      +?>
      +
      +

      Here you can edit your account.

      +

      Only change the password value if you want to change your password.

      +
      +
      +
      +');');
      +
      ID: ID; ?>
      +
      +if ($page->isUserAdmin($page->getLoggedInUser()))
      +{
      + write('
      AccessID:
      +}
      +else
      +{
      + write('
      AccessID: ' . $user->accessID . '
      +}
      +?>
      +
      Username: username; ?>
      +
      Password:
      +
      Email Address:
      +
      Name:
      +
      +
      +
      +
      +
      +}
      +else
      +{
      + if (!$user)
      + {
      + $page->drawError('No such user, #' . $userID);
      + }
      + else
      + {
      + $page->drawError('You do not have permission to access this page.');
      + }
      +}
      +
      +$page->drawFooter();
      +
      +?>
      +
      Index: admin/account-do.php
      ===================================================================
      --- admin/account-do.php (revision 130)
      +++ admin/account-do.php (revision 468)
      @@ -1,53 +1,53 @@
      -
      -
      -require '../_taios.php';
      -
      -$page = new Taios_Page('Update Account', '../');
      -$userID = $page->getPostID();
      -
      -$page->checkLoggedIn();
      -
      -$accessID = $_POST['accessID'];
      -$password = $_POST['password'];
      -$email = $_POST['email'];
      -$name = $_POST['name'];
      -
      -$user = $page->getUserByID($userID);
      -if (($page->getLoggedInUser()->ID == $userID || $page->isUserAdmin($page->getLoggedInUser())) && $user)
      -{
      - if (isset($accessID) && $page->isUserAdmin($page->getLoggedInUser()))
      - {
      - $page->query('UPDATE Users SET AccessID = "' . $accessID . '" WHERE ID = ' . $userID);
      - }
      -
      - if (!empty($password))
      - {
      - $page->query('UPDATE Users SET Password = "' . sha1($password) . '" WHERE ID = ' . $userID);
      - }
      -
      - if (!empty($email))
      - {
      - $page->query('UPDATE Users SET EmailAddress = "' . $email . '" WHERE ID = ' . $userID);
      - }
      -
      - if (!empty($name))
      - {
      - $page->query('UPDATE Users SET Name = "' . $name . '" WHERE ID = ' . $userID);
      - }
      -}
      -else
      -{
      - if (!$user)
      - {
      - drawError('No such user, #' . $userID);
      - }
      - else
      - {
      - drawError('You do not have permission to access this page.');
      - }
      -}
      -
      -$page->redirect('account.php?id=' . $userID);
      -
      -?>
      -
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Update Account', '../');
      +$userID = $page->getPostID();
      +
      +$page->checkLoggedIn();
      +
      +$accessID = $_POST['accessID'];
      +$password = $_POST['password'];
      +$email = $_POST['email'];
      +$name = $_POST['name'];
      +
      +$user = $page->getUserByID($userID);
      +if (($page->getLoggedInUser()->ID == $userID || $page->isUserAdmin($page->getLoggedInUser())) && $user)
      +{
      + if (isset($accessID) && $page->isUserAdmin($page->getLoggedInUser()))
      + {
      + $page->query('UPDATE Users SET AccessID = "' . $accessID . '" WHERE ID = ' . $userID);
      + }
      +
      + if (!empty($password))
      + {
      + $page->query('UPDATE Users SET Password = "' . sha1($password) . '" WHERE ID = ' . $userID);
      + }
      +
      + if (!empty($email))
      + {
      + $page->query('UPDATE Users SET EmailAddress = "' . $email . '" WHERE ID = ' . $userID);
      + }
      +
      + if (!empty($name))
      + {
      + $page->query('UPDATE Users SET Name = "' . $name . '" WHERE ID = ' . $userID);
      + }
      +}
      +else
      +{
      + if (!$user)
      + {
      + $page->drawError('No such user, #' . $userID);
      + }
      + else
      + {
      + $page->drawError('You do not have permission to access this page.');
      + }
      +}
      +
      +$page->redirect('account.php?id=' . $userID);
      +
      +?>
      +
      Index: _taios.php
      ===================================================================
      --- _taios.php (revision 130)
      +++ _taios.php (revision 468)
      @@ -34,7 +34,8 @@
      write('');
      write('');
      write('Tim32 · ' . $this->title . '');
      - write('');
      + write('');
      + write('');
      write('');
      write('');
      write('
      @@ -88,6 +89,7 @@
      {
      if (!$this->drawnFooter)
      {
      + write('
      ');
      write('');
      write('');
      write('');
      @@ -116,17 +118,24 @@
      {
      $post = $this->getBlogPost($id);
      if ($first)
      + {
      write('

      ' . $post->title. ' ^

      ');
      + }
      else
      + {
      write('

      ' . $post->title. '

      ');
      + }
      write('
      Posted On ' . date('l j F Y', $post->datePosted) . ' by ' . $post->user->name . ' (' . $post->user->username . ')
      ');
      - write('

      ' . $post->content . '

      ');
      - write('
      ');
      + write('

      ' . $this->replaceBBCode($post->content) . '

      ');
      +
      if ($this->isUserNormal($this->getLoggedInUser()))
      {
      echo '

      Add Comment';

      - if ($this->isUserAdmin($this->getLoggedInUser()) || $this->getLoggedInUser() == $post->author->ID)
      - echo ' · Delete Post';
      + if ($this->isUserAdmin($this->getLoggedInUser()) || $this->getLoggedInUser()->ID == $post->author->ID)
      + {
      + echo '   ·   Edit Post';
      + echo '   ·   Delete Post';
      + }
      write('


      ');
      }
      @@ -159,7 +168,74 @@
      $this->drawMenuItem($cats[$i], 'blog/index.php?cat=' . $cats[$i]);
      }
      }
      +
      + function replaceBBCode($str)
      + {
      + /*$newstrarray = explode("\n", $str);
      + $newstr = "";
      + foreach ($newstrarray as $line)
      + {
      + if ($line == "\n" || $line == " \n" || $line == "\n " || $line == "\n\r")
      + {
      + $line = "

      ";

      + }
      +
      + $newstr .= ($line . "\n");
      + }*/
      +
      + $newstr = $str;
      + $newstr = str_replace("<", "[", $newstr);
      + $newstr = str_replace(">", "]", $newstr);
      + $newstr = str_replace("\n", "

      ", $newstr);

      + $newstr = str_replace("\\'", "'", $newstr);
      + $newstr = str_replace("\\\"",'"', $newstr);
      + $newstr = str_replace(' ', '  ', $newstr);
      + $newstr = str_replace(' :)', ' ', $newstr);
      + $newstr = str_replace(' :p', ' ', $newstr);
      + $newstr = str_replace(' :P', ' ',$newstr);
      + $newstr = str_replace(' :|', ' ',$newstr);
      + $newstr = str_replace(' :D', ' ',$newstr);
      + $newstr = str_replace(' =D', ' ',$newstr);
      + $newstr = str_replace(' :(', ' ',$newstr);
      + $newstr = str_replace(' :0', ' ',$newstr);
      + $newstr = str_replace(' :o', ' ',$newstr);
      + $newstr = str_replace(' :O', ' ',$newstr);
      + $newstr = str_replace(' :/', ' ',$newstr);
      + $newstr = str_replace(' ;)', ' ',$newstr);
      +
      + $bbcode = array(
      + '/\[b\](.+?)\[\/b\]/is',
      + '/\[i\](.+?)\[\/i\]/is',
      + '/\[u\](.+?)\[\/u\]/is',
      + '/\[url\](.+?)\[\/url\]/is',
      + '/\[url=(.+?)\](.+?)\[\/url\]/is',
      + '/\[code\](.+?)\[\/code\]/is',
      + '/\[img\](.+?)\[\/img\]/is',
      + '/\[ul\](.+?)\[\/ul\]/is',
      + '/\[ol\](.+?)\[\/ol\]/is',
      + '/\[li\](.+?)\[\/li\]/is',
      + '/\[mono\](.+?)\[\/mono\]/is'
      + );
      + $html = array(
      + '$1',
      + '$1',
      + '$1',
      + '$1',
      + '$2',
      + '
      $1
      ',
      + '',
      + '
        $1
      ',
      + '
        $1
      ',
      + '
    • $1
    • ',
      + '$1',
      + );
      +
      + $newstr = preg_replace($bbcode, $html, $newstr);
      +
      + return $newstr;
      + }
      +
      function redirect($u)
      {
      header('Location: ' . $u);
      @@ -224,6 +300,24 @@
      return false;
      }
      + function checkChallengeStatus($challengeID, $previous, $next)
      + {
      + $currentChallengeID = $this->getLoggedInUser()->challengeID;
      +
      + if (!$this->isLoggedIn())
      + {
      + $this->redirect('index.php');
      + }
      + else if ($currentChallengeID > $challengeID)
      + {
      + $this->redirect($next . '.php');
      + }
      + else if ($currentChallengeID < $challengeID)
      + {
      + $this->redirect($previous . '.php');
      + }
      + }
      +
      function checkLoggedIn()
      {
      if (!$this->isLoggedIn())
      @@ -237,7 +331,7 @@
      $result = mysql_query($query);
      if (!$result)
      {
      - $this->drawError('MySQL Error: ' . mysql_error());
      + $this->drawError('Query Failed: ' . $query . "\n" . 'MySQL Error: ' . mysql_error());
      }
      return $result;
      @@ -327,13 +421,78 @@
      $this->drawError('Cannot find blog post, #' . $id);
      }
      + function getProject($id)
      + {
      + $result = $this->query('SELECT * FROM Projects WHERE ID = ' . $id);
      + while ($row = mysql_fetch_array($result))
      + {
      + $project = new Project;
      +
      + $project->ID = $row['ID'];
      + $project->author = $this->getUserByID($row['AuthorID']);
      + $project->title = $row['Title'];
      + $project->description = $row['Description'];
      + $project->logoURL = $row['LogoURL'];
      + $project->downloadURL = $row['DownloadURL'];
      + $project->websiteURL = $row['WebsiteURL'];
      + $project->latestVersion = $row['LatestVersion'];
      + $project->lastUpdate = strtotime($row['LastUpdate']);
      +
      + return $project;
      + }
      +
      + return false;
      + }
      +
      + function getForumCategory($id)
      + {
      + $result = $this->query('SELECT * FROM ForumCategories WHERE ID = ' . $id);
      + while ($row = mysql_fetch_array($result))
      + {
      + $f = new ForumCategory;
      +
      + $f->ID = $row['ID'];
      + $f->parent = $this->getForumCategory($row['ParentID']);
      + $f->title = $row['Title'];
      + $f->description = $row['Description'];
      +
      + return $f;
      + }
      +
      + return false;
      + }
      +
      + function getForumPost($id)
      + {
      + $result = $this->query('SELECT * FROM ForumPosts WHERE ID = ' . $id);
      + while ($row = mysql_fetch_array($result))
      + {
      + $f = new ForumPost;
      +
      + $f->ID = $row['ID'];
      + $f->author = $this->getUserByID($row['AuthorID']);
      + $f->category = $this->getForumCategory($row['CategoryID']);
      + $f->parent = $this->getForumPost($row['ParentID']);
      + $f->title = $row['Title'];
      + $f->content = $row['Content'];
      + $f->datePosted = strtotime($row['DatePosted']);
      + $f->spam = $row['Spam'];
      +
      + return $f;
      + }
      +
      + return false;
      + }
      +
      function delBlogPost($id)
      {
      $ids = $this->findIDs('BlogPosts', 'WHERE ParentID=' . $id);
      for ($i = 0; $i < count($ids); $i++)
      + {
      $this->delBlogPost($ids[$i]);
      + }
      - $this->query('delete from BlogPosts where ID=' . $id);
      + $this->query('DELETE FROM BlogPosts WHERE ID=' . $id);
      }
      function getGetID()
      @@ -368,6 +527,7 @@
      public $password;
      public $emailAddress;
      public $name;
      +
      public $challengeID;
      }
      @@ -383,6 +543,42 @@
      public $spam;
      }
      +class Project
      +{
      + public $ID;
      + public $author;
      + public $title;
      + public $description;
      +
      +
      + public $logoURL;
      + public $downloadURL;
      + public $websiteURL;
      + public $latestVersion;
      + public $lastUpdate;
      +}
      +
      +class ForumCategory
      +{
      + public $ID;
      + public $parent;
      + public $title;
      + public $description;
      +
      +}
      +
      +class ForumPost
      +{
      + public $id;
      + public $author;
      + public $category;
      + public $parent;
      + public $title;
      + public $content;
      + public $datePosted;
      + public $spam;
      +}
      +
      function write($str)
      {
      echo $str;
      /styles.css
      1,124 → 1,186
      body {
      background-color: #FFFFFF;
      color: #000000;
      font-family: Droid Sans, Tahoma, sans-serif;
      font-size: 11pt;
      }
       
      h1 {
      font-size: 28pt;
      margin: 6px;
      margin-top: 0px;
      color: #000089;
      border-bottom: 1px solid #000000;
      }
       
      h2 {
      font-size: 20pt;
      margin: 6px;
      margin-left: 8px;
      color: #00004B;
      }
       
      h3 {
      font-size: 16pt;
      margin: 6px;
      margin-left: 10px;
      color: #000055;
      }
       
      h4 {
      font-size: 12pt;
      margin: 6px;
      margin-left: 12px;
      color: #00005F;
      }
       
      h5 {
      font-size: 10pt;
      margin: 6px;
      margin-left: 14px;
      color: #000069;
      }
       
      p, table, span {
      font-size: 11pt;
      margin: 6px;
      margin-left: 16px;
      }
       
      a {
      text-decoration: none;
      color: #000050;
      }
       
      a:hover {
      text-decoration: underline;
      }
       
      input {
      border: 1px solid #000000;
      color: #000000;
      background-color: #B5D7FF;
      }
       
      table {
      border: 1px solid #222222;
      }
       
      td {
      padding: 3px;
      border: 1px solid #888888;
      }
       
      .sidebar {
      left: 0px;
      top: 0px;
      position: fixed;
      padding: 0px;
      padding-left: 32px;
      border-right: 1px solid #000089;
      background-color: #FFFF73;
      background-image: url('data/sidebar-gradient.png');
      background-repeat: repeat-x;
      background-position: center bottom;
      }
       
      .sidebar-header {
      left: 0px;
      width: 140px;
      padding: 6px;
      text-align: right;
      }
       
      .sidebar-menu {
      text-align: right;
      padding: 6px;
      }
       
      .sidebar-menu h3 {
      margin: 6px;
      }
       
      .sidebar-menu p {
      font-size: 12pt;
      margin: 4px;
      }
       
      .content {
      left: 200px;
      top: 0px;
      position: absolute;
      margin-right: 32px;
      }
       
      .bold {
      font-weight: bold;
      }
       
      .indent {
      margin-left: 14px;
      border-left: 1px solid #BBBBBB;
      }
      body {
      background-color: #FFFFFF;
      color: #000000;
      font-family: Droid Sans, Tahoma, sans-serif;
      font-size: 10pt;
      margin: 0px;
      padding: 0px;
      }
       
      h1 {
      font-size: 28pt;
      margin: 8px;
      margin-top: 0px;
      color: #FFFFFF;
      border-bottom: 1px solid #FFFFFF;
      }
       
      h2 {
      font-size: 20pt;
      margin: 8px;
      margin-left: 8px;
      color: #00004B;
      }
       
      h3 {
      font-size: 16pt;
      margin: 8px;
      margin-left: 10px;
      color: #000055;
      }
       
      h4 {
      font-size: 12pt;
      margin: 8px;
      margin-left: 12px;
      color: #00005F;
      }
       
      h5 {
      font-size: 10pt;
      margin: 8px;
      margin-left: 14px;
      color: #000069;
      }
       
      p, table, span {
      font-size: 10pt;
      margin: 8px;
      margin-left: 16px;
      }
       
      a {
      text-decoration: none;
      color: #000050;
      }
       
      a:hover {
      text-decoration: underline;
      }
       
      input {
      border: 1px solid #000000;
      color: #000000;
      background-color: #B5D7FF;
      width: 500px;
      }
       
      table {
      border: 1px solid #222222;
      }
       
      td {
      padding: 3px;
      border: 1px solid #888888;
      }
       
      img {
      border: 2px solid #333333;
      }
       
      textarea {
      width: 500px;
      height: 300px;
      }
       
      .smiley {
      border: 0px;
      vertical-align: middle;
      }
       
      .sidebar {
      top: 0px;
      left: 0px;
      position: fixed;
      float: left;
      width: 156px;
      padding: 0px;
      padding-left: 32px;
      border-right: 2px solid #000049;
      background-color: #032865;
      color: #FFFFFF;
      height: 100%;
      z-index: 50;
      }
       
      .sidebar-header {
      width: 140px;
      padding: 6px;
      text-align: right;
      }
       
      .sidebar-menu {
      text-align: right;
      padding: 6px;
      color: #FFFFFF;
      }
       
      .sidebar-menu h3 {
      margin: 6px;
      color: #FFFFFF;
      }
       
      .sidebar-menu p {
      font-size: 12pt;
      margin: 4px;
      }
       
      .sidebar-menu a {
      color: #FFFFFF;
      }
       
      .content {
      top: 0px;
      left: 190px;
      position: absolute;
      margin-right: 32px;
      }
       
      .bold {
      font-weight: bold;
      }
       
      .italic {
      font-style: italic;
      }
       
      .indent {
      margin-left: 14px;
      border-left: 1px solid #BBBBBB;
      }
       
      .code {
      border-top: 2px solid #999999;
      border-bottom: 2px solid #999999;
      margin: 14px;
      background-color: #DDDDDD;
      font-family: Droid Sans Mono, Monospace, Fixed;
      font-size: 9px;
      line-height: 80%;
      }
       
      .copyright {
      color: #BBBBBB;
      text-align: left;
      font-size: 9pt;
      }
       
      .copyright a {
      color: #BBBBBB;
      }
       
      .recaptchatable .recaptcha_image_cell, #recaptcha_table {
      background-color: #4B9DE0 !important; //reCaptcha widget background color
      }
      #recaptcha_table {
      border-color: #3874A4 !important; //reCaptcha widget border color
      }
      #recaptcha_response_field {
      border-color: #000000 !important; //Text input field border color
      background-color:#FFFFFF !important; //Text input field background color
      }
       
      /data/favicon.png
      Cannot display: file marked as a binary type.
      svn:mime-type = application/octet-stream
      /data/favicon.png
      Property changes:
      Added: svn:mime-type
      ## -0,0 +1 ##
      +application/octet-stream
      \ No newline at end of property
      Index: data/smilies/face-laugh.png
      ===================================================================
      Cannot display: file marked as a binary type.
      svn:mime-type = application/octet-stream
      Index: data/smilies/face-laugh.png
      ===================================================================
      --- data/smilies/face-laugh.png (nonexistent)
      +++ data/smilies/face-laugh.png (revision 468)
      /data/smilies/face-laugh.png
      Property changes:
      Added: svn:mime-type
      ## -0,0 +1 ##
      +application/octet-stream
      \ No newline at end of property
      Index: data/smilies/face-plain.png
      ===================================================================
      Cannot display: file marked as a binary type.
      svn:mime-type = application/octet-stream
      Index: data/smilies/face-plain.png
      ===================================================================
      --- data/smilies/face-plain.png (nonexistent)
      +++ data/smilies/face-plain.png (revision 468)
      /data/smilies/face-plain.png
      Property changes:
      Added: svn:mime-type
      ## -0,0 +1 ##
      +application/octet-stream
      \ No newline at end of property
      Index: data/smilies/face-sad.png
      ===================================================================
      Cannot display: file marked as a binary type.
      svn:mime-type = application/octet-stream
      Index: data/smilies/face-sad.png
      ===================================================================
      --- data/smilies/face-sad.png (nonexistent)
      +++ data/smilies/face-sad.png (revision 468)
      /data/smilies/face-sad.png
      Property changes:
      Added: svn:mime-type
      ## -0,0 +1 ##
      +application/octet-stream
      \ No newline at end of property
      Index: data/smilies/face-uncertain.png
      ===================================================================
      Cannot display: file marked as a binary type.
      svn:mime-type = application/octet-stream
      Index: data/smilies/face-uncertain.png
      ===================================================================
      --- data/smilies/face-uncertain.png (nonexistent)
      +++ data/smilies/face-uncertain.png (revision 468)
      /data/smilies/face-uncertain.png
      Property changes:
      Added: svn:mime-type
      ## -0,0 +1 ##
      +application/octet-stream
      \ No newline at end of property
      Index: data/smilies/face-wink.png
      ===================================================================
      Cannot display: file marked as a binary type.
      svn:mime-type = application/octet-stream
      Index: data/smilies/face-wink.png
      ===================================================================
      --- data/smilies/face-wink.png (nonexistent)
      +++ data/smilies/face-wink.png (revision 468)
      /data/smilies/face-wink.png
      Property changes:
      Added: svn:mime-type
      ## -0,0 +1 ##
      +application/octet-stream
      \ No newline at end of property
      Index: data/smilies/face-raspberry.png
      ===================================================================
      Cannot display: file marked as a binary type.
      svn:mime-type = application/octet-stream
      Index: data/smilies/face-raspberry.png
      ===================================================================
      --- data/smilies/face-raspberry.png (nonexistent)
      +++ data/smilies/face-raspberry.png (revision 468)
      /data/smilies/face-raspberry.png
      Property changes:
      Added: svn:mime-type
      ## -0,0 +1 ##
      +application/octet-stream
      \ No newline at end of property
      Index: data/smilies/face-surprise.png
      ===================================================================
      Cannot display: file marked as a binary type.
      svn:mime-type = application/octet-stream
      Index: data/smilies/face-surprise.png
      ===================================================================
      --- data/smilies/face-surprise.png (nonexistent)
      +++ data/smilies/face-surprise.png (revision 468)
      /data/smilies/face-surprise.png
      Property changes:
      Added: svn:mime-type
      ## -0,0 +1 ##
      +application/octet-stream
      \ No newline at end of property
      Index: data/smilies/face-smile.png
      ===================================================================
      Cannot display: file marked as a binary type.
      svn:mime-type = application/octet-stream
      Index: data/smilies/face-smile.png
      ===================================================================
      --- data/smilies/face-smile.png (nonexistent)
      +++ data/smilies/face-smile.png (revision 468)
      /data/smilies/face-smile.png
      Property changes:
      Added: svn:mime-type
      ## -0,0 +1 ##
      +application/octet-stream
      \ No newline at end of property
      Index: index.php
      ===================================================================
      --- index.php (revision 130)
      +++ index.php (revision 468)
      @@ -1,39 +1,39 @@
      -
      -
      -require '_taios.php';
      -
      -$page = new Taios_Page('Home');
      -$page->drawHeader();
      -write('

      Pages

      ');
      -$page->drawMenuItem('Biggles', '/~biggles/');
      -$page->drawMenuItem('Freddie', '/~freddie/');
      -$page->drawMenuItem('Muzer', '/~muzer/');
      -$page->drawMenuItem('Sh4rk', '/~szabot/');
      -$page->drawMenuItem('Tom', '/~tom/');
      -$page->drawMiddle();
      -
      -?>
      -
      -

      Welcome to Tim32!

      -

      Tim32 is a 10 year-old laptop running Ubuntu Server Edition 10.04.

      -
      -
      -

      Latest Blog Posts

      -
      -
      -
      -$ids = $page->findIDs('BlogPosts', 'WHERE ParentID = -1');
      -for ($i = 0; $i < 5 && $i < count($ids); $i++)
      -{
      - $id = $ids[$i];
      - $post = $page->getBlogPost($id);
      -
      - write('

      ' . $post->title. '

      ');
      - write('
      Posted On ' . date('l j F Y', $post->datePosted) . ' by ' . $post->user->name . ' (' . $post->user->username . ')
      ');
      - write('

      ' . $post->content . '

      ');
      - write('
      ');
      -}
      -
      -$page->drawFooter();
      -
      -?>
      +
      +
      +require '_taios.php';
      +
      +$page = new Taios_Page('Home');
      +$page->drawHeader();
      +write('

      Pages

      ');
      +$page->drawMenuItem('Biggles', '/~biggles/');
      +$page->drawMenuItem('FredFace', '/~freddie/');
      +$page->drawMenuItem('Muzer', '/~muzer/');
      +$page->drawMenuItem('TomMan', '/~tom/');
      +$page->drawMiddle();
      +
      +?>
      +
      +

      Welcome to Tim32!

      +

      Tim32 is a 10 year-old laptop running Ubuntu Server Edition 10.04.

      +
      +
      +

      Latest Blog Posts

      +

      Rss Feed

      +
      +
      +
      +$ids = $page->findIDs('BlogPosts', 'WHERE ParentID = -1 ORDER BY DatePosted DESC');
      +for ($i = 0; $i < 4 && $i < count($ids); $i++)
      +{
      + $id = $ids[$i];
      + $post = $page->getBlogPost($id);
      +
      + write('

      ' . $post->title. '

      ');
      + write('
      Posted On ' . date('l j F Y', $post->datePosted) . ' by ' . $post->user->name . ' (' . $post->user->username . ')
      ');
      + write('

      ' . $page->replaceBBCode($post->content) . '

      ');
      + write('
      ');
      +}
      +
      +$page->drawFooter();
      +
      +?>
      Index: register.php
      ===================================================================
      --- register.php (revision 130)
      +++ register.php (revision 468)
      @@ -1,56 +1,73 @@
      -
      -
      -require '_taios.php';
      -
      -$page = new Taios_Page('Register');
      -$page->drawHeader();
      -$page->drawMiddle();
      -
      -?>
      -
      -

      Here you can create an account with Tim32.

      -
      -
      -
      -
      -if (isset($_GET['error']))
      -{
      - $page->drawError($_GET['error'], false);
      -}
      -
      -?>
      -
      -
      -: :
      -
      -Username:
      -
      -
      -
      -Password:
      -
      -
      -
      -Repeat Password:
      -
      -
      -
      -Email Address
      -
      -
      -
      -Name
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -$page->drawFooter();
      -
      -?>
      +
      +
      +require '_taios.php';
      +require_once '_recaptchalib.php';
      +
      +$page = new Taios_Page('Register');
      +$page->drawHeader();
      +$page->drawMiddle();
      +
      +?>
      +
      +

      Here you can create an account with Tim32.

      +
      +
      +
      +
      +if (isset($_GET['error']))
      +{
      + $page->drawError($_GET['error'], false);
      +}
      +
      +?>
      +
      +
      +
      +
      +
      +
      +Username:
      +
      +
      +
      +Password:
      +
      +
      +
      +Repeat Password:
      +
      +
      +
      +Email Address:
      +
      +
      +
      +Name:
      +
      +
      +
      +
      +
      +
      +
      +3 + 9 * 8
      +
      +
      +
      +
      +
      +
      +
      +
      +

      By registering to Tim32, you agree to be reasonable in all your suggestion/accusations and advoid subjectivity. Suvbjective posts/comments are subject to removal by a Subject of the Tim32 Admins.

      +
      +
      +
      +
      +$page->drawFooter();
      +
      +?>
      Index: register-do.php
      ===================================================================
      --- register-do.php (revision 130)
      +++ register-do.php (revision 468)
      @@ -1,34 +1,49 @@
      -
      -
      -require '_taios.php';
      -
      -$page = new Taios_Page('Login');
      -
      -$username = $_POST['username'];
      -$password = $_POST['password'];
      -$password2 = $_POST['password2'];
      -$email = $_POST['email'];
      -$name = $_POST['name'];
      -
      -if (empty($username))
      -{
      - $page->redirect('register.php?error=No Username Specified');
      -}
      -if (empty($password))
      -{
      - $page->redirect('register.php?error=No Password Specified');
      -}
      -if (empty($password2))
      -{
      - $page->redirect('register.php?error=No Repeat Password Specified');
      -}
      -if ($password != $password2)
      -{
      - $page->redirect('register.php?error=Passwords do not match');
      -}
      -
      -$page->query('INSERT INTO Users (AccessID, Username, Password, EmailAddress, Name, ChallengeID) VALUES (2, "' . $username . '", "' . sha1($password) . '", "' . $email . '", "' . $name . '", 0)');
      -
      -$page->redirect('login.php');
      -
      -?>
      +
      +
      +require '_taios.php';
      +require_once '_recaptchalib.php';
      +
      +$page = new Taios_Page('Login');
      +
      +$username = $_POST['username'];
      +$password = $_POST['password'];
      +$password2 = $_POST['password2'];
      +$email = $_POST['email'];
      +$name = $_POST['name'];
      +$maths = $_POST['maths'];
      +
      +if (empty($username))
      +{
      + $page->redirect('register.php?error=No Username Specified');
      +}
      +if (empty($password))
      +{
      + $page->redirect('register.php?error=No Password Specified');
      +}
      +if (empty($password2))
      +{
      + $page->redirect('register.php?error=No Repeat Password Specified');
      +}
      +if ($password != $password2)
      +{
      + $page->redirect('register.php?error=Passwords do not match');
      +}
      +if ($maths != '75')
      +{
      + $page->redirect('register.php?error=Incorrect maths answer');
      +}
      +
      +$resp = recaptcha_check_answer(RECAPTCHA_PRIVATEKEY, $_SERVER["REMOTE_ADDR"],
      + $_POST["recaptcha_challenge_field"],
      + $_POST["recaptcha_response_field"]);
      +
      +if (!$resp->is_valid)
      +{
      + $page->redirect('register.php?error=Incorrect reCAPTCHA response');
      +}
      +
      +$page->query('INSERT INTO Users (AccessID, Username, Password, EmailAddress, Name, ChallengeID) VALUES (2, "' . $username . '", "' . sha1($password) . '", "' . $email . '", "' . $name . '", 0)');
      +
      +$page->redirect('login.php');
      +
      +?>
      Index: photos/album.php
      ===================================================================
      --- photos/album.php (nonexistent)
      +++ photos/album.php (revision 468)
      @@ -0,0 +1,115 @@
      +
      +
      +require '../_taios.php';
      +
      +function getImageSizes($sourceImageFilePath, $maxResizeWidth, $maxResizeHeight) {
      +
      + $size = getimagesize($sourceImageFilePath);
      + $origWidth = $size[0];
      + $origHeight = $size[1];
      +
      + $resizedWidth = $origWidth;
      + $resizedHeight = $origHeight;
      +
      + if ($resizedWidth > $maxResizeWidth)
      + {
      + $aspectRatio = $maxResizeWidth / $resizedWidth;
      + $resizedWidth = round($aspectRatio * $resizedWidth);
      + $resizedHeight = round($aspectRatio * $resizedHeight);
      + }
      + if ($resizedHeight > $maxResizeHeight)
      + {
      + $aspectRatio = $maxResizeHeight / $resizedHeight;
      + $resizedWidth = round($aspectRatio * $resizedWidth);
      + $resizedHeight = round($aspectRatio * $resizedHeight);
      + }
      +
      + return array($resizedWidth, $resizedHeight);
      +}
      +
      +$page = new Taios_Page('Photo Albums', '../');
      +
      +$dirName = $_GET['dir'];
      +if (empty($dirName))
      +{
      + $page->redirect('index.php');
      +}
      +
      +$page->drawHeader();
      +write('

      RSS

      ');
      +$page->drawMenuItem('RSS Feed', 'photos/rss.php?dir=' . $dirName);
      +$page->drawMiddle();
      +
      +write('

      Back to Photos


      ');
      +
      +if (file_exists("albums/" . $dirName . "/description.txt"))
      +{
      + write('

      ' . $page->replaceBBCode(file_get_contents("albums/" . $dirName . "/description.txt")) . '


      ');
      +}
      +
      +write('');');');');');
      +write('
      +
      +$directory = "albums/" . $dirName . "/";
      +$sortOrder = "newestFirst";
      +
      +$results = array();
      +$handler = opendir($directory);
      +
      +while ($file = readdir($handler))
      +{
      + if ($file != '.' && $file != '..' && $file != "robots.txt" && $file != ".htaccess" && getimagesize($directory . $file))
      + {
      + $currentModified = filectime($directory . $file);
      + $file_names[] = $file;
      + $file_dates[] = $currentModified;
      + }
      +}
      +
      +closedir($handler);
      +
      +if ($sortOrder == "newestFirst")
      +{
      + arsort($file_dates);
      +}
      +else
      +{
      + asort($file_dates);
      +}
      +
      +$file_names_Array = array_keys($file_dates);
      +foreach ($file_names_Array as $idx => $name) $name=$file_names[$name];
      +$file_dates = array_merge($file_dates);
      +
      +$i = 0;
      +
      +$indexInArray = 0;
      +$i = 0;
      +
      +foreach ($file_dates as $$file_dates)
      +{
      + $j = $file_names_Array[$indexInArray];
      + $file = $file_names[$j];
      +
      + if ($i >= 3)
      + {
      + write('
      + $i = 0;
      + }
      +
      + $filename = $directory . $file;
      + $size = getImageSizes($filename, 280, 260);
      +
      + write('
      +
      + $i++;
      + $indexInArray++;
      +}
      +
      +write('
      +write('
      ');
      +
      +$page->drawFooter();
      +
      +?>
      +
      Index: photos/rss.php
      ===================================================================
      --- photos/rss.php (nonexistent)
      +++ photos/rss.php (revision 468)
      @@ -0,0 +1,76 @@
      +
      +
      +require '../_taios.php';
      +
      +header("Content-type: application/rss+xml");
      +
      +$page = new Taios_Page('Photos RSS Feed', '../');
      +
      +$dirName = $_GET['dir'];
      +if (empty($dirName))
      +{
      + $dirName = "Lassitor";
      +}
      +
      +write('');
      +write('');
      +write('');
      +write('Tim32 Photo RSS - ' . $dirName . '');
      +write('This is the RSS feed for the Tim32 Photos.');
      +write('http://tim32.org/photos/album.php?dir=' . $dirName . '');
      +
      +$directory = "albums/" . $dirName . "/";
      +$sortOrder = "newestFirst";
      +
      +$results = array();
      +$handler = opendir($directory);
      +
      +while ($file = readdir($handler))
      +{
      + if ($file != '.' && $file != '..' && $file != "robots.txt" && $file != ".htaccess" && getimagesize($directory . $file))
      + {
      + $currentModified = filectime($directory . $file);
      + $file_names[] = $file;
      + $file_dates[] = $currentModified;
      + }
      +}
      +
      +closedir($handler);
      +
      +if ($sortOrder == "newestFirst")
      +{
      + arsort($file_dates);
      +}
      +else
      +{
      + asort($file_dates);
      +}
      +
      +$file_names_Array = array_keys($file_dates);
      +foreach ($file_names_Array as $idx => $name) $name=$file_names[$name];
      +$file_dates = array_merge($file_dates);
      +
      +$indexInArray = 0;
      +
      +foreach ($file_dates as $date)
      +{
      + $j = $file_names_Array[$indexInArray];
      + $file = $file_names[$j];
      +
      + $filename = $directory . $file;
      +
      + write('');
      + write('' . $file . '');
      + write('http://tim32.org/photos/' . str_replace(" ", "%20", $filename) . '');
      + write('id_' . $file . '');
      + write('' . date('D, d M Y H:i:s O', $date). '');
      + write(']]>');
      + write('');
      +
      + $indexInArray++;
      +}
      +
      +write('');
      +write('');
      +
      +?>
      Index: photos/index.php
      ===================================================================
      --- photos/index.php (revision 130)
      +++ photos/index.php (revision 468)
      @@ -1,14 +1,31 @@
      -
      -
      -require '../_taios.php';
      -
      -$page = new Taios_Page('Photos', '../');
      -$page->drawHeader();
      -$page->drawMiddle();
      -
      -write('

      This page is currently under construction.

      ');
      -
      -$page->drawFooter();
      -
      -?>
      -
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Photo Albums', '../');
      +$page->drawHeader();
      +$page->drawMiddle();
      +
      +write('

      Here we have all sorts of photos from Tim32.


      ');
      +
      +$dirs = array();
      +$dir = dir('albums/');
      +while (($file = $dir->read()) !== false)
      +{
      + array_push($dirs, $file);
      +}
      +
      +asort($dirs);
      +
      +foreach ($dirs as $file)
      +{
      + if ($file[0] != '.')
      + {
      + write('

      ' . $file . '

      ');
      + }
      +}
      +
      +$page->drawFooter();
      +
      +?>
      +
      Index: photos/albums/Lassitor/Lassitor.png
      ===================================================================
      Cannot display: file marked as a binary type.
      svn:mime-type = application/octet-stream
      Index: photos/albums/Lassitor/Lassitor.png
      ===================================================================
      --- photos/albums/Lassitor/Lassitor.png (nonexistent)
      +++ photos/albums/Lassitor/Lassitor.png (revision 468)
      /photos/albums/Lassitor/Lassitor.png
      Property changes:
      Added: svn:mime-type
      ## -0,0 +1 ##
      +application/octet-stream
      \ No newline at end of property
      Index: photos/albums/Lassitor/Lassitor-3d.png
      ===================================================================
      Cannot display: file marked as a binary type.
      svn:mime-type = application/octet-stream
      Index: photos/albums/Lassitor/Lassitor-3d.png
      ===================================================================
      --- photos/albums/Lassitor/Lassitor-3d.png (nonexistent)
      +++ photos/albums/Lassitor/Lassitor-3d.png (revision 468)
      /photos/albums/Lassitor/Lassitor-3d.png
      Property changes:
      Added: svn:mime-type
      ## -0,0 +1 ##
      +application/octet-stream
      \ No newline at end of property
      Index: 404.php
      ===================================================================
      --- 404.php (nonexistent)
      +++ 404.php (revision 468)
      @@ -0,0 +1,31 @@
      +
      +
      +header('Status: 404 Not Found');
      +
      +require '_taios.php';
      +
      +$page = new Taios_Page('404 - Page not found', '/');
      +$page->drawHeader();
      +write('

      Pages

      ');
      +$page->drawMenuItem('Biggles', '~biggles/');
      +$page->drawMenuItem('Freddie (FredFace)', '~freddie/');
      +$page->drawMenuItem('Muzer', '~muzer/');
      +$page->drawMenuItem('Tom (TomMan)', '~tom/');
      +$page->drawMiddle();
      +
      +?>
      +
      +

      404 - Page not found

      +

      The page you requested could not be found.

      +
      +
      +

      Useful Links

      +
      +
      +
      +$page->drawMenuItem('Tim32 Homepage', 'index.php');
      +$page->drawMenuItem('Youfail.org', 'http://youfail.org');
      +
      +$page->drawFooter();
      +
      +?>
      Index: blog/rss.php
      ===================================================================
      --- blog/rss.php (nonexistent)
      +++ blog/rss.php (revision 468)
      @@ -0,0 +1,34 @@
      +
      +
      +require '../_taios.php';
      +
      +header("Content-type: application/rss+xml");
      +
      +$page = new Taios_Page('Blog RSS Feed', '../');
      +
      +write('');
      +write('');
      +write('');
      +write('Tim32 Blog RSS');
      +write('This is the RSS feed for the Tim32 Blog.');
      +write('http://tim32.org/blog/');
      +
      +$ids = $page->findIDs('BlogPosts', 'WHERE ParentID = -1 ORDER BY DatePosted DESC');
      +for ($i = 0; $i < count($ids); $i++)
      +{
      + $id = $ids[$i];
      + $post = $page->getBlogPost($id);
      +
      + write('');
      + write('' . $post->title . '');
      + write('http://tim32.org/blog/post.php?id=' . $id . '');
      + write('' . $id . '');
      + write('' . date('D, d M Y H:i:s O', $post->datePosted). '');
      + write('replaceBBCode($post->content) . ']]>');
      + write('');
      +}
      +
      +write('');
      +write('');
      +
      +?>
      Index: blog/index.php
      ===================================================================
      --- blog/index.php (revision 130)
      +++ blog/index.php (revision 468)
      @@ -5,6 +5,8 @@
      $page = new Taios_Page('Blog Posts', '../');
      $page->drawHeader();
      $page->drawBlogCategoriesMenu();
      +write('

      RSS

      ');
      +$page->drawMenuItem('RSS Feed', 'blog/rss.php');
      $page->drawMiddle();
      if ($page->isUserGM($page->getLoggedInUser()))
      @@ -21,6 +23,8 @@
      write('

      Only showing blog posts from the ' . $_GET['cat'] . ' category. Reset Filtering


      ');
      }
      +$query = $query . " ORDER BY DatePosted DESC";
      +
      $ids = $page->findIDs('BlogPosts', $query);
      for ($i = 0; $i < count($ids); $i++)
      {
      @@ -29,7 +33,7 @@
      write('

      ' . $post->title. '

      ');
      write('
      Posted On ' . date('l j F Y', $post->datePosted) . ' by ' . $post->user->name . ' (' . $post->user->username . ')
      ');
      - write('

      ' . $post->content . '

      ');
      + write('

      ' . $page->replaceBBCode($post->content) . '

      ');
      write('
      ');
      }
      /blog/edit-post.php
      0,0 → 1,93
      <?php
       
      require '../_taios.php';
       
      $page = new Taios_Page('Edit Post', '../');
       
      if (isset($_GET['id']))
      {
      $id = $_GET['id'];
      }
      else if (isset($_POST['id']))
      {
      $id = $_POST['id'];
      }
      else
      {
      $page->drawError('No ID set.');
      }
       
      $page->checkLoggedIn();
       
      $post = $page->getBlogPost($id);
      if (!$page->isUserAdmin($page->getLoggedInUser()) && $page->getLoggedInUser()->ID != $post->author->ID)
      {
      $page->drawError('You do not have permission to access this page.');
      }
       
      $error = '';
       
      if (isset($_POST['id']))
      {
      $title = $_POST['title'];
      $content = $_POST['content'];
      $category = $_POST['category'];
       
      if (empty($title))
      {
      $error = "No Title Specified";
      }
      else if (empty($content))
      {
      $error = "No Content Specified";
      }
      else
      {
      $page->query('UPDATE BlogPosts SET Content = "' . $content . '", Title = "' . $title . '", Category = "' . $category . '" WHERE ID = ' . $id);
      $page->redirect('post.php?id=' . $id);
      }
      }
       
      $page->drawHeader();
      $page->drawBlogCategoriesMenu();
      $page->drawMiddle();
       
      if (!empty($error))
      {
      $page->drawError($error, false);
      }
       
      ?>
       
      <form action="edit-post.php" method="post">
      <table>
      <tr>
      <td class="bold">Title: </td>
      <td><input type="text" name="title" value="<?php echo $post->title; ?>"/></td>
      </tr>
      <tr>
      <td class="bold">Content: </td>
      <td><textarea name="content"><?php echo $post->content; ?></textarea></td>
      </tr>
      <tr>
      <td class="bold">Catagory: </td>
      <td><input type="text" name="category" value="<?php echo $post->category; ?>" /></td>
      </tr>
       
      <?php
      write('<input type="hidden" name="id" value="' . $id . '" />');
      ?>
       
      <tr>
      <td class="bold"></td>
      <td><input type="submit" value="Edit" /></td>
      </tr>
      </table>
      </form>
       
      <?php
       
      $page->drawFooter();
       
      ?>
       
      /blog/post.php
      4,7 → 4,7
       
      $page = new Taios_Page('Blog Posts', '../');
       
      if (empty($_GET['id']))
      if (empty($_GET['id']) || $_GET['id'] == -1)
      {
      $page->redirect('index.php');
      }
      /blog/add-post.php
      1,90 → 1,96
      <?php
       
      function getParentID()
      {
      if (isset($_GET['id']))
      {
      return $_GET['id'];
      }
      else
      {
      return -1;
      }
      }
       
      require '../_taios.php';
       
      $page = new Taios_Page('Blog Posts', '../');
       
      $error = '';
       
      if (isset($_POST['post']))
      {
      $title = $_POST['title'];
      $content = $_POST['content'];
      $parentID = $_POST['parentID'];
      $category = $_POST['category'];
       
      if (empty($title))
      {
      $error = "No Title Specified";
      }
      else if (empty($content))
      {
      $error = "No Content Specified";
      }
      else if (empty($parentID))
      {
      $error = "No Parent ID Specified";
      }
      else
      {
      $page->query('INSERT INTO BlogPosts VALUES(0, ' . $parentID . ', "' . $page->getLoggedInUser()->ID . '", "' . $title . '", "' . $content . '", NOW(), "' . $category . '", 0)');
      $page->redirect('index.php');
      }
      }
       
      $page->drawHeader();
      $page->drawBlogCategoriesMenu();
      $page->drawMiddle();
       
      if (!empty($error))
      {
      $page->drawError($error, false);
      }
       
      ?>
       
      <form action="add-post.php" method="post">
      <table>
      <tr>
      <td class="bold">Title: </td>
      <td><input type="text" name="title" /></td>
      </tr>
      <tr>
      <td class="bold">Content: </td>
      <td><textarea name="content" style="width: 500px; height: 300px;"></textarea></td>
      </tr>
      <tr>
      <td class="bold">Catagory: </td>
      <td><input type="text" name="category" /></td>
      </tr>
       
      <input type="hidden" name="post" value="yes" />
       
      <?php
      write('<input type="hidden" name="parentID" value="' . getParentID() . '" />');
      ?>
       
      <tr>
      <td class="bold"></td>
      <td><input type="submit" value="Post" /></td>
      </tr>
      </table>
      </form>
       
      <?php
       
      $page->drawFooter();
       
      ?>
      <?php
       
      function getParentID()
      {
      if (isset($_GET['id']))
      {
      return $_GET['id'];
      }
      else
      {
      return -1;
      }
      }
       
      require '../_taios.php';
       
      $page = new Taios_Page('Add Post', '../');
      $page->checkLoggedIn();
       
      $error = '';
       
      if (isset($_POST['post']))
      {
      $title = $_POST['title'];
      $content = $_POST['content'];
      $parentID = $_POST['parentID'];
      $category = $_POST['category'];
       
      if (empty($title))
      {
      $error = "No Title Specified";
      }
      else if (empty($content))
      {
      $error = "No Content Specified";
      }
      else if (empty($parentID))
      {
      $error = "No Parent ID Specified";
      }
      else
      {
      if ($page->getLoggedInUser()->accessID >= 2 && $parentID == -1)
      {
      $page->drawError('You do not have permission to access this page.');
      }
      $page->query('INSERT INTO BlogPosts VALUES(0, ' . $parentID . ', "' . $page->getLoggedInUser()->ID . '", "' . $title . '", "' . $content . '", NOW(), "' . $category . '", 0)');
      $page->redirect('post.php?id=' . $parentID);
      }
      }
       
      $page->drawHeader();
      $page->drawBlogCategoriesMenu();
      $page->drawMiddle();
       
      if (!empty($error))
      {
      $page->drawError($error, false);
      }
       
      ?>
       
      <form action="add-post.php?id=<?php echo getParentID(); ?>" method="post">
      <table>
      <tr>
      <td class="bold">Title: </td>
      <td><input type="text" name="title" /></td>
      </tr>
      <tr>
      <td class="bold">Content: </td>
      <td><textarea name="content" style="width: 500px; height: 300px;"></textarea></td>
      </tr>
      <tr>
      <td class="bold">Catagory: </td>
      <td><input type="text" name="category" /></td>
      </tr>
       
      <input type="hidden" name="post" value="yes" />
       
      <?php
      write('<input type="hidden" name="parentID" value="' . getParentID() . '" />');
      ?>
       
      <tr>
      <td class="bold"></td>
      <td><input type="submit" value="Post" /></td>
      </tr>
      </table>
      </form>
       
      <?php
       
      $page->drawFooter();
       
      ?>
      /wiki/index.php
      1,14 → 1,64
      <?php
       
      require '../_taios.php';
       
      $page = new Taios_Page('Wiki', '../');
      $page->drawHeader();
      $page->drawMiddle();
       
      write('<br /><p class="bold">This page is currently under construction.</p>');
       
      $page->drawFooter();
       
      ?>
       
      <?php
       
      function endswith($string, $test) {
      $strlen = strlen($string);
      $testlen = strlen($test);
      if ($testlen > $strlen) return false;
      return substr_compare($string, $test, -$testlen) === 0;
      }
       
      require '../_taios.php';
       
      $pageName = $_GET['page'];
      if (empty($pageName))
      {
      $pageName = 'Index';
      }
       
      $page = new Taios_Page('Wiki - ' . $pageName, '../');
       
      if (isset($_GET['random']))
      {
      $results = array();
      $handler = opendir('pages/');
      while ($file = readdir($handler))
      {
      if ($file != '.' && $file != '..' && endswith($file, ".txt"))
      {
      $results[] = substr($file, 0, count($file) - 5);
      }
      }
      $index = rand() % count($results);
      $result = $results[$index];
      $page->redirect('index.php?page=' . $result);
      }
       
      $page->drawHeader();
      write('<h3>Wiki</h3>');
      $page->drawMenuItem('Index', 'wiki/index.php');
      $page->drawMenuItem('Random Page', 'wiki/index.php?random');
      $page->drawMiddle();
       
      if ($page->isUserGM($page->getLoggedInUser()))
      {
      write('<p class="bold"><a href="edit.php?page=' . $pageName . '">Edit Page</a></p><br />');
      }
       
      $filename = 'pages/' . $pageName . '.txt';
       
      $fp = @fopen($filename, 'r');
      if ($fp)
      {
      write('<p>' . $page->replaceBBCode(fread($fp, filesize($filename))) . '</p>');
      fclose($fp);
      }
      else
      {
      write('<p>This page is empty.</p>');
      }
       
      $page->drawFooter();
       
      ?>
       
      /wiki/edit-do.php
      0,0 → 1,40
      <?php
       
      require '../_taios.php';
       
      $pageName = $_POST['page'];
      if (empty($pageName))
      {
      $pageName = 'Index';
      }
       
      $page = new Taios_Page('Edit Page - ' . $pageName, '../');
       
      $page->checkLoggedIn();
       
      if ($page->isUserGM($page->getLoggedInUser()))
      {
      $filename = 'pages/' . $pageName . '.txt';
      $fp = @fopen($filename, 'w');
      if ($fp)
      {
      fwrite($fp, $_POST['content']);
      fclose($fp);
      $page->redirect('index.php?page=' . $pageName);
      }
      else
      {
      $page->drawError('Failed to write file.');
      }
      }
      else
      {
      $page->drawError('You do not have permission to access this page.');
      }
       
      $page->drawFooter();
       
      ?>
       
      /wiki/edit.php
      0,0 → 1,54
      <?php
       
      require '../_taios.php';
       
      $pageName = $_GET['page'];
      if (empty($pageName))
      {
      $pageName = 'Index';
      }
       
      $page = new Taios_Page('Edit Page - ' . $pageName, '../');
      $page->drawHeader();
      $page->drawMiddle();
       
      $page->checkLoggedIn();
       
      if ($page->isUserGM($page->getLoggedInUser()))
      {
      $filename = 'pages/' . $pageName . '.txt';
      $content = "";
       
      $fp = @fopen($filename, 'r');
      if ($fp)
      {
      $content = fread($fp, filesize($filename));
      fclose($fp);
      }
      ?>
       
      <form action="edit-do.php" method="POST">
      <input type="hidden" name="page" value="<?php echo $pageName; ?>" />
      <table>
      <tr>
      <td><textarea name="content"><?php echo $content; ?></textarea></td>
      </tr>
      <tr>
      <td><input type="submit" value="Edit" /></td>
      </tr>
      </table>
      </form>
       
      <?php
      }
      else
      {
      $page->drawError('You do not have permission to access this page.');
      }
       
      $page->drawFooter();
       
      ?>
       
      /wiki/pages/Index.txt
      0,0 → 1,4
      [b]Welcome to the Tim32 Wiki![/b]
       
      Here you can talk about pretty much anything!
       
      Property changes:
      Added: svn:executable
      ## -0,0 +1 ##
      +*
      \ No newline at end of property
      Index: _recaptchalib.php
      ===================================================================
      --- _recaptchalib.php (nonexistent)
      +++ _recaptchalib.php (revision 468)
      @@ -0,0 +1,277 @@
      +
      +/*
      + * This is a PHP library that handles calling reCAPTCHA.
      + * - Documentation and latest version
      + * http://recaptcha.net/plugins/php/
      + * - Get a reCAPTCHA API Key
      + * https://www.google.com/recaptcha/admin/create
      + * - Discussion group
      + * http://groups.google.com/group/recaptcha
      + *
      + * Copyright (c) 2007 reCAPTCHA -- http://recaptcha.net
      + * AUTHORS:
      + * Mike Crawford
      + * Ben Maurer
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the "Software"), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in
      + * all copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
      + * THE SOFTWARE.
      + */
      +
      +/**
      + * The reCAPTCHA server URL's
      + */
      +define("RECAPTCHA_API_SERVER", "http://www.google.com/recaptcha/api");
      +define("RECAPTCHA_API_SECURE_SERVER", "https://www.google.com/recaptcha/api");
      +define("RECAPTCHA_VERIFY_SERVER", "www.google.com");
      +
      +/**
      + * Encodes the given data into a query string format
      + * @param $data - array of string elements to be encoded
      + * @return string - encoded request
      + */
      +function _recaptcha_qsencode ($data) {
      + $req = "";
      + foreach ( $data as $key => $value )
      + $req .= $key . '=' . urlencode( stripslashes($value) ) . '&';
      +
      + // Cut the last '&'
      + $req=substr($req,0,strlen($req)-1);
      + return $req;
      +}
      +
      +
      +
      +/**
      + * Submits an HTTP POST to a reCAPTCHA server
      + * @param string $host
      + * @param string $path
      + * @param array $data
      + * @param int port
      + * @return array response
      + */
      +function _recaptcha_http_post($host, $path, $data, $port = 80) {
      +
      + $req = _recaptcha_qsencode ($data);
      +
      + $http_request = "POST $path HTTP/1.0\r\n";
      + $http_request .= "Host: $host\r\n";
      + $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";
      + $http_request .= "Content-Length: " . strlen($req) . "\r\n";
      + $http_request .= "User-Agent: reCAPTCHA/PHP\r\n";
      + $http_request .= "\r\n";
      + $http_request .= $req;
      +
      + $response = '';
      + if( false == ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) {
      + die ('Could not open socket');
      + }
      +
      + fwrite($fs, $http_request);
      +
      + while ( !feof($fs) )
      + $response .= fgets($fs, 1160); // One TCP-IP packet
      + fclose($fs);
      + $response = explode("\r\n\r\n", $response, 2);
      +
      + return $response;
      +}
      +
      +
      +
      +/**
      + * Gets the challenge HTML (javascript and non-javascript version).
      + * This is called from the browser, and the resulting reCAPTCHA HTML widget
      + * is embedded within the HTML form it was called from.
      + * @param string $pubkey A public key for reCAPTCHA
      + * @param string $error The error given by reCAPTCHA (optional, default is null)
      + * @param boolean $use_ssl Should the request be made over ssl? (optional, default is false)
      +
      + * @return string - The HTML to be embedded in the user's form.
      + */
      +function recaptcha_get_html ($pubkey, $error = null, $use_ssl = false)
      +{
      + if ($pubkey == null || $pubkey == '') {
      + die ("To use reCAPTCHA you must get an API key from https://www.google.com/recaptcha/admin/create");
      + }
      +
      + if ($use_ssl) {
      + $server = RECAPTCHA_API_SECURE_SERVER;
      + } else {
      + $server = RECAPTCHA_API_SERVER;
      + }
      +
      + $errorpart = "";
      + if ($error) {
      + $errorpart = "&error=" . $error;
      + }
      + return '
      +
      +
      +
      +
      +
      + ';
      +}
      +
      +
      +
      +
      +/**
      + * A ReCaptchaResponse is returned from recaptcha_check_answer()
      + */
      +class ReCaptchaResponse {
      + var $is_valid;
      + var $error;
      +}
      +
      +
      +/**
      + * Calls an HTTP POST function to verify if the user's guess was correct
      + * @param string $privkey
      + * @param string $remoteip
      + * @param string $challenge
      + * @param string $response
      + * @param array $extra_params an array of extra variables to post to the server
      + * @return ReCaptchaResponse
      + */
      +function recaptcha_check_answer ($privkey, $remoteip, $challenge, $response, $extra_params = array())
      +{
      + if ($privkey == null || $privkey == '') {
      + die ("To use reCAPTCHA you must get an API key from https://www.google.com/recaptcha/admin/create");
      + }
      +
      + if ($remoteip == null || $remoteip == '') {
      + die ("For security reasons, you must pass the remote ip to reCAPTCHA");
      + }
      +
      +
      +
      + //discard spam submissions
      + if ($challenge == null || strlen($challenge) == 0 || $response == null || strlen($response) == 0) {
      + $recaptcha_response = new ReCaptchaResponse();
      + $recaptcha_response->is_valid = false;
      + $recaptcha_response->error = 'incorrect-captcha-sol';
      + return $recaptcha_response;
      + }
      +
      + $response = _recaptcha_http_post (RECAPTCHA_VERIFY_SERVER, "/recaptcha/api/verify",
      + array (
      + 'privatekey' => $privkey,
      + 'remoteip' => $remoteip,
      + 'challenge' => $challenge,
      + 'response' => $response
      + ) + $extra_params
      + );
      +
      + $answers = explode ("\n", $response [1]);
      + $recaptcha_response = new ReCaptchaResponse();
      +
      + if (trim ($answers [0]) == 'true') {
      + $recaptcha_response->is_valid = true;
      + }
      + else {
      + $recaptcha_response->is_valid = false;
      + $recaptcha_response->error = $answers [1];
      + }
      + return $recaptcha_response;
      +
      +}
      +
      +/**
      + * gets a URL where the user can sign up for reCAPTCHA. If your application
      + * has a configuration page where you enter a key, you should provide a link
      + * using this function.
      + * @param string $domain The domain where the page is hosted
      + * @param string $appname The name of your application
      + */
      +function recaptcha_get_signup_url ($domain = null, $appname = null) {
      + return "https://www.google.com/recaptcha/admin/create?" . _recaptcha_qsencode (array ('domains' => $domain, 'app' => $appname));
      +}
      +
      +function _recaptcha_aes_pad($val) {
      + $block_size = 16;
      + $numpad = $block_size - (strlen ($val) % $block_size);
      + return str_pad($val, strlen ($val) + $numpad, chr($numpad));
      +}
      +
      +/* Mailhide related code */
      +
      +function _recaptcha_aes_encrypt($val,$ky) {
      + if (! function_exists ("mcrypt_encrypt")) {
      + die ("To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed.");
      + }
      + $mode=MCRYPT_MODE_CBC;
      + $enc=MCRYPT_RIJNDAEL_128;
      + $val=_recaptcha_aes_pad($val);
      + return mcrypt_encrypt($enc, $ky, $val, $mode, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");
      +}
      +
      +
      +function _recaptcha_mailhide_urlbase64 ($x) {
      + return strtr(base64_encode ($x), '+/', '-_');
      +}
      +
      +/* gets the reCAPTCHA Mailhide url for a given email, public key and private key */
      +function recaptcha_mailhide_url($pubkey, $privkey, $email) {
      + if ($pubkey == '' || $pubkey == null || $privkey == "" || $privkey == null) {
      + die ("To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " .
      + "you can do so at http://www.google.com/recaptcha/mailhide/apikey");
      + }
      +
      +
      + $ky = pack('H*', $privkey);
      + $cryptmail = _recaptcha_aes_encrypt ($email, $ky);
      +
      + return "http://www.google.com/recaptcha/mailhide/d?k=" . $pubkey . "&c=" . _recaptcha_mailhide_urlbase64 ($cryptmail);
      +}
      +
      +/**
      + * gets the parts of the email to expose to the user.
      + * eg, given johndoe@example,com return ["john", "example.com"].
      + * the email is then displayed as john...@example.com
      + */
      +function _recaptcha_mailhide_email_parts ($email) {
      + $arr = preg_split("/@/", $email );
      +
      + if (strlen ($arr[0]) <= 4) {
      + $arr[0] = substr ($arr[0], 0, 1);
      + } else if (strlen ($arr[0]) <= 6) {
      + $arr[0] = substr ($arr[0], 0, 3);
      + } else {
      + $arr[0] = substr ($arr[0], 0, 4);
      + }
      + return $arr;
      +}
      +
      +/**
      + * Gets html to display an email address given a public an private key.
      + * to get a key, go to:
      + *
      + * http://www.google.com/recaptcha/mailhide/apikey
      + */
      +function recaptcha_mailhide_html($pubkey, $privkey, $email) {
      + $emailparts = _recaptcha_mailhide_email_parts ($email);
      + $url = recaptcha_mailhide_url ($pubkey, $privkey, $email);
      +
      + return htmlentities($emailparts[0]) . "...@" . htmlentities ($emailparts [1]);
      +
      +}
      +
      +
      +?>
      Index: forums/index.php
      ===================================================================
      --- forums/index.php (revision 130)
      +++ forums/index.php (revision 468)
      @@ -1,14 +1,81 @@
      -
      -
      -require '../_taios.php';
      -
      -$page = new Taios_Page('Forums', '../');
      -$page->drawHeader();
      -$page->drawMiddle();
      -
      -write('

      This page is currently under construction.

      ');
      -
      -$page->drawFooter();
      -
      -?>
      -
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Forums', '../');
      +
      +$parentID = $_GET['parentID'];
      +if (empty($parentID))
      +{
      + $parentID = -1;
      +}
      +else if ($parentID != -1)
      +{
      + $page->title = $page->getForumCategory($parentID)->title;
      +}
      +
      +$page->drawHeader();
      +$page->drawMiddle();
      +
      +write('

      The forums are still under construction.

      ');
      +
      +write('

      ');

      +if ($parentID != -1)
      +{
      + write('Back to root');
      +}
      +if ($page->isLoggedIn())
      +{
      + if ($parentID != -1)
      + {
      + write(' · ');
      + }
      + write('Add Post');
      +}
      +if ($page->isUserAdmin($page->getLoggedInUser()))
      +{
      + if ($page->isLoggedIn())
      + {
      + write(' · ');
      + }
      + write('Add Category');
      +}
      +write('


      ');
      +
      +$ids = $page->findIDs('ForumCategories', 'WHERE ParentID = ' . $parentID . ' ORDER BY Title ASC');
      +
      +if (count($ids) >= 1)
      +{
      + write('

      Categories

      ');
      +}
      +
      +for ($i = 0; $i < count($ids); $i++)
      +{
      + $forumCategory = $page->getForumCategory($ids[$i]);
      + write('

      ' . $forumCategory->title . '

      ');
      + write('

      ' . $forumCategory->description . '

      ');
      + if ($page->isUserAdmin($page->getLoggedInUser()))
      + {
      + write('

      Edit Category   ·   Delete Category

      ');
      + }
      + write('
      ');
      +}
      +
      +$ids = $page->findIDs('ForumPosts', 'WHERE CategoryID = ' . $parentID . ' AND ParentID = -1 ORDER BY Title ASC');
      +
      +if (count($ids) >= 1)
      +{
      + write('

      Topics

      ');
      +}
      +
      +for ($i = 0; $i < count($ids); $i++)
      +{
      + $forumPost = $page->getForumPost($ids[$i]);
      + write('

      ' . $forumPost->title . '

      ');
      + write('
      ');
      +}
      +
      +$page->drawFooter();
      +
      +?>
      +
      Index: forums/post.php
      ===================================================================
      --- forums/post.php (nonexistent)
      +++ forums/post.php (revision 468)
      @@ -0,0 +1,45 @@
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Forum Post', '../');
      +$page->drawHeader();
      +$page->drawMiddle();
      +
      +$id = $page->getGetID();
      +$forumPost = $page->getForumPost($id);
      +write('

      Back to Topics


      ');
      +write('

      ' . $forumPost->title . '

      ');
      +write('
      Posted On ' . date('l j F Y', $forumPost->datePosted) . ' by ' . $forumPost->author->name . ' (' . $forumPost->author->username . ')
      ');
      +write('

      ' . $page->replaceBBCode($forumPost->content) . '

      ');
      +if ($page->isLoggedIn())
      +{
      + write('

      Post Reply');

      + if ($page->isUserAdmin($page->getLoggedInUser()) || $forumPost->author->ID == $page->getLoggedInUser()->ID)
      + {
      + write('   ·   Edit Post');
      + write('   ·   Delete Post');
      + }
      + write('

      ');
      +}
      +write('
      ');
      +
      +$ids = $page->findIDs('ForumPosts', 'WHERE ParentID = ' . $id . ' ORDER BY DatePosted ASC');
      +for ($i = 0; $i < count($ids); $i++)
      +{
      + $forumPost = $page->getForumPost($ids[$i]);
      + write('

      ' . $forumPost->title . '

      ');
      + write('
      Posted On ' . date('l j F Y', $forumPost->datePosted) . ' by ' . $forumPost->author->name . ' (' . $forumPost->author->username . ')
      ');
      + write('

      ' . $page->replaceBBCode($forumPost->content) . '

      ');
      + if ($page->isUserAdmin($page->getLoggedInUser()) || $forumPost->author->ID == $page->getLoggedInUser()->ID)
      + {
      + write('

      Edit Post');

      + write('   ·   Delete Post

      ');
      + }
      + write('
      ');
      +}
      +
      +$page->drawFooter();
      +
      +?>
      +
      Index: forums/delete-post-do.php
      ===================================================================
      --- forums/delete-post-do.php (nonexistent)
      +++ forums/delete-post-do.php (revision 468)
      @@ -0,0 +1,30 @@
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Delete Post', '../');
      +
      +$page->checkLoggedIn();
      +
      +$id = $page->getGetID();
      +$post = $page->getForumPost($id);
      +
      +if (($page->isUserAdmin($page->getLoggedInUser()) || $post->author->ID == $page->getLoggedInUser()->ID) && $post)
      +{
      + $page->query('DELETE FROM ForumPosts WHERE ID = ' . $id);
      + $page->redirect('index.php');
      +}
      +else
      +{
      + if (!$post)
      + {
      + $page->drawError('No such forum post, #' . $id);
      + }
      + else
      + {
      + $page->drawError('You do not have permission to access this page.');
      + }
      +}
      +
      +?>
      +
      Index: forums/add-post-do.php
      ===================================================================
      --- forums/add-post-do.php (nonexistent)
      +++ forums/add-post-do.php (revision 468)
      @@ -0,0 +1,36 @@
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Add Category', '../');
      +
      +$page->checkLoggedIn();
      +
      +$parentID = $_POST['parentID'];
      +if (empty($parentID))
      +{
      + $parentID = -1;
      +}
      +$categoryID = $_POST['categoryID'];
      +if (empty($categoryID))
      +{
      + $parentID = -1;
      +}
      +
      +$title = $_POST['title'];
      +$content = $_POST['content'];
      +
      +if (empty($title))
      +{
      + $page->redirect('add-post.php?error=No Title Specified');
      +}
      +if (empty($title))
      +{
      + $page->redirect('add-post.php?error=No Content Specified');
      +}
      +
      +$page->query('INSERT INTO ForumPosts VALUES (0, ' .$page->getLoggedInUser()->ID . ', ' . $categoryID . ', ' . $parentID . ', "' . $title . '", "' . $content . '", NOW(), FALSE)');
      +$page->redirect('index.php?parentID=' . $categoryID);
      +
      +?>
      +
      Index: forums/add-post.php
      ===================================================================
      --- forums/add-post.php (nonexistent)
      +++ forums/add-post.php (revision 468)
      @@ -0,0 +1,62 @@
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Add Post', '../');
      +$page->drawHeader();
      +$page->drawMiddle();
      +
      +$page->checkLoggedIn();
      +
      +$parentID = $_GET['parentID'];
      +if (empty($parentID))
      +{
      + $parentID = -1;
      +}
      +
      +$categoryID = $_GET['categoryID'];
      +if (empty($categoryID))
      +{
      + $categoryID = -1;
      +}
      +
      +if ($page->isLoggedIn())
      +{
      +
      +if (isset($_GET['error']))
      +{
      + $page->drawError($_GET['error'], false);
      +}
      +
      +?>
      +
      +
      +
      +
      +
      +
      +Title:
      +
      +
      +
      +Content:
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +}
      +else
      +{
      + $page->drawError('You do not have permission to access this page.');
      +}
      +
      +$page->drawFooter();
      +
      +?>
      +
      Index: forums/edit-category.php
      ===================================================================
      --- forums/edit-category.php (nonexistent)
      +++ forums/edit-category.php (revision 468)
      @@ -0,0 +1,59 @@
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Edit Category', '../');
      +$page->drawHeader();
      +$page->drawMiddle();
      +
      +$page->checkLoggedIn();
      +
      +$id = $page->getGetID();
      +$cat = $page->getForumCategory($id);
      +
      +if ($page->isUserAdmin($page->getLoggedInUser()) && $cat)
      +{
      +
      +if (isset($_GET['error']))
      +{
      + $page->drawError($_GET['error'], false);
      +}
      +
      +?>
      +
      +
      +
      +
      +
      +Title:
      +
      +
      +
      +Description:
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +}
      +else
      +{
      + if (!$cat)
      + {
      + $page->drawError('No such Forum Category, #' . $id);
      + }
      + else
      + {
      + $page->drawError('You do not have permission to access this page.');
      + }
      +}
      +
      +$page->drawFooter();
      +
      +?>
      +
      Index: forums/edit-category-do.php
      ===================================================================
      --- forums/edit-category-do.php (nonexistent)
      +++ forums/edit-category-do.php (revision 468)
      @@ -0,0 +1,30 @@
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Edit Category', '../');
      +
      +$page->checkLoggedIn();
      +
      +$id = $page->getPostID();
      +
      +$title = $_POST['title'];
      +$description = $_POST['description'];
      +
      +if ($page->isUserAdmin($page->getLoggedInUser()))
      +{
      + if (empty($title))
      + {
      + $page->redirect('edit-category.php?error=No Title Specified');
      + }
      +
      + $page->query('UPDATE ForumCategories SET Title = "' . $title . '", Description = "' . $description . '" WHERE ID = ' . $id);
      + $page->redirect('index.php');
      +}
      +else
      +{
      + $page->drawError('You do not have permission to access this page.');
      +}
      +
      +?>
      +
      Index: forums/delete-category-do.php
      ===================================================================
      --- forums/delete-category-do.php (nonexistent)
      +++ forums/delete-category-do.php (revision 468)
      @@ -0,0 +1,22 @@
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Delete Category', '../');
      +
      +$page->checkLoggedIn();
      +
      +$id = $page->getGetID();
      +
      +if ($page->isUserAdmin($page->getLoggedInUser()))
      +{
      + $page->query('DELETE FROM ForumCategories WHERE ID = ' . $id);
      + $page->redirect('index.php');
      +}
      +else
      +{
      + $page->drawError('You do not have permission to access this page.');
      +}
      +
      +?>
      +
      Index: forums/add-category-do.php
      ===================================================================
      --- forums/add-category-do.php (nonexistent)
      +++ forums/add-category-do.php (revision 468)
      @@ -0,0 +1,34 @@
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Add Category', '../');
      +
      +$page->checkLoggedIn();
      +
      +$parentID = $_POST['parentID'];
      +if (empty($parentID))
      +{
      + $parentID = -1;
      +}
      +
      +$title = $_POST['title'];
      +$description = $_POST['description'];
      +
      +if ($page->isUserAdmin($page->getLoggedInUser()))
      +{
      + if (empty($title))
      + {
      + $page->redirect('add-category.php?error=No Title Specified');
      + }
      +
      + $page->query('INSERT INTO ForumCategories VALUES (0, ' . $parentID . ', "' . $title . '", "' . $description . '")');
      + $page->redirect('index.php?parentID=' . $parentID);
      +}
      +else
      +{
      + $page->drawError('You do not have permission to access this page.');
      +}
      +
      +?>
      +
      Index: forums/add-category.php
      ===================================================================
      --- forums/add-category.php (nonexistent)
      +++ forums/add-category.php (revision 468)
      @@ -0,0 +1,55 @@
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Add Category', '../');
      +$page->drawHeader();
      +$page->drawMiddle();
      +
      +$page->checkLoggedIn();
      +
      +$parentID = $_GET['parentID'];
      +if (empty($parentID))
      +{
      + $parentID = -1;
      +}
      +
      +if ($page->isUserAdmin($page->getLoggedInUser()))
      +{
      +
      +if (isset($_GET['error']))
      +{
      + $page->drawError($_GET['error'], false);
      +}
      +
      +?>
      +
      +
      +
      +
      +
      +Title:
      +
      +
      +
      +Description:
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +}
      +else
      +{
      + $page->drawError('You do not have permission to access this page.');
      +}
      +
      +$page->drawFooter();
      +
      +?>
      +
      Index: projects/edit-project.php
      ===================================================================
      --- projects/edit-project.php (nonexistent)
      +++ projects/edit-project.php (revision 468)
      @@ -0,0 +1,77 @@
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Edit Project', '../');
      +$page->drawHeader();
      +$page->drawMiddle();
      +
      +$page->checkLoggedIn();
      +
      +$project = $page->getProject($page->getGetID());
      +if (!$project)
      +{
      + $page->drawError('No such project, #' . $page->getGetID());
      +}
      +
      +?>
      +
      +

      Here you can edit a project from the Tim32 database.

      +

      Leave an input blank to keep it as it is.

      +
      +
      +
      +
      +if (isset($_GET['error']))
      +{
      + $page->drawError($_GET['error'], false);
      +}
      +
      +if ($page->isUserAdmin($page->getLoggedInUser()) || $page->getLoggedInUser()->ID == $project->author->ID)
      +{
      +?>
      +
      +
      +
      +
      +
      +Title:
      +
      +
      +
      +Description:
      +
      +
      +
      +Logo URL:
      +
      +
      +
      +Website URL:
      +
      +
      +
      +DownloadURL:
      +
      +
      +
      +Latest Version:
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +}
      +else
      +{
      + $page->drawError('You do not have permission to access this page.');
      +}
      +
      +$page->drawFooter();
      +
      +?>
      Index: projects/index.php
      ===================================================================
      --- projects/index.php (revision 130)
      +++ projects/index.php (revision 468)
      @@ -1,14 +1,60 @@
      -
      -
      -require '../_taios.php';
      -
      -$page = new Taios_Page('Projects', '../');
      -$page->drawHeader();
      -$page->drawMiddle();
      -
      -write('

      This page is currently under construction.

      ');
      -
      -$page->drawFooter();
      -
      -?>
      -
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Projects', '../');
      +$page->drawHeader();
      +$page->drawMiddle();
      +
      +write('

      Here you can find all the projects that are created by members of Tim32!


      ');
      +if ($page->isUserGM($page->getLoggedInUser()))
      +{
      + write('

      Add Project

      ');
      + write('
      ');
      +}
      +
      +$ids = $page->findIDs('Projects', 'ORDER BY LastUpdate DESC');
      +for ($i = 0; $i < count($ids); $i++)
      +{
      + $id = $ids[$i];
      + $project = $page->getProject($id);
      +
      + write('

      ' . $project->title . '

      ');
      + write('');');');');
      + write('
      + write('
      + write('');
      + if (empty($project->latestVersion))
      + {
      + write('

      No Releases

      ');
      + }
      + else
      + {
      + write('

      Latest Version: ' . $project->latestVersion . '

      ');
      + }
      + write('

      Project Author: ' . $project->author->name . '

      ');
      + write('

      ' . $page->replaceBBCode($project->description) . '

      ');
      + write('

      ');

      + if (!empty($project->websiteURL))
      + {
      + write('Website');
      + }
      + if (!empty($project->downloadURL))
      + {
      + write(' · Download');
      + }
      + write('

      ');
      + write('');
      + write('
      + write('
      ');
      + if ($page->isUserAdmin($page->getLoggedInUser()) || $user->ID == $project->author->ID)
      + {
      + write('

      Edit Project    ·    Delete Project

      ');
      + }
      + write('
      ');
      +}
      +
      +$page->drawFooter();
      +
      +?>
      +
      Index: projects/edit-project-do.php
      ===================================================================
      --- projects/edit-project-do.php (nonexistent)
      +++ projects/edit-project-do.php (revision 468)
      @@ -0,0 +1,59 @@
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Edit Project', '../');
      +
      +$project = $page->getProject($page->getPostID());
      +if (!$project)
      +{
      + $page->drawError('No such project, #' . $page->getPostID());
      +}
      +
      +$title = $_POST['title'];
      +$description = $_POST['description'];
      +$logoURL = $_POST['logourl'];
      +$websiteURL = $_POST['websiteurl'];
      +$downloadURL = $_POST['downloadurl'];
      +$latestVersion = $_POST['latestversion'];
      +
      +$page->checkLoggedIn();
      +$user = $page->getLoggedInUser();
      +
      +if ($page->isUserAdmin($page->getLoggedInUser()) || $page->getLoggedInUser()->ID == $project->author->ID)
      +{
      + if (!empty($title))
      + {
      + $page->query('UPDATE Projects SET Title = "' . $title . '" WHERE ID = ' . $project->ID);
      + }
      + if (!empty($description))
      + {
      + $page->query('UPDATE Projects SET Description = "' . $description . '" WHERE ID = ' . $project->ID);
      + }
      + if (!empty($logoURL))
      + {
      + $page->query('UPDATE Projects SET LogoURL = "' . $logoURL . '" WHERE ID = ' . $project->ID);
      + }
      + if (!empty($websiteURL))
      + {
      + $page->query('UPDATE Projects SET WebsiteURL = "' . $websiteURL . '" WHERE ID = ' . $project->ID);
      + }
      + if (!empty($downloadURL))
      + {
      + $page->query('UPDATE Projects SET DownloadURL = "' . $downloadURL . '" WHERE ID = ' . $project->ID);
      + }
      + if (!empty($latestVersion))
      + {
      + $page->query('UPDATE Projects SET LatestVersion = "' . $latestVersion . '" WHERE ID = ' . $project->ID);
      + }
      +
      + $page->query('UPDATE Projects SET LastUpdate = NOW() WHERE ID = ' . $project->ID);
      +
      + $page->redirect('index.php');
      +}
      +else
      +{
      + $page->drawError('You do not have permission to access this page.');
      +}
      +
      +?>
      Index: projects/delete-project-do.php
      ===================================================================
      --- projects/delete-project-do.php (nonexistent)
      +++ projects/delete-project-do.php (revision 468)
      @@ -0,0 +1,28 @@
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Delete Project', '../');
      +
      +$page->checkLoggedIn();
      +$id = $page->getGetID();
      +$project = $page->getProject($id);
      +
      +if (($page->isUserAdmin($page->getLoggedInUser()) || $page->getLoggedInUser()->ID == $project->author->ID) && $project)
      +{
      + $page->query('DELETE FROM Projects WHERE ID = ' . $id);
      + $page->redirect('index.php');
      +}
      +else
      +{
      + if (!$project)
      + {
      + $page->drawError('No such project, #' . $id);
      + }
      + else
      + {
      + $page->drawError('You do not have permission to access this page.');
      + }
      +}
      +
      +?>
      Index: projects/add-project-do.php
      ===================================================================
      --- projects/add-project-do.php (nonexistent)
      +++ projects/add-project-do.php (revision 468)
      @@ -0,0 +1,36 @@
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Add Project', '../');
      +
      +$title = $_POST['title'];
      +$description = $_POST['description'];
      +$logoURL = $_POST['logourl'];
      +$websiteURL = $_POST['websiteurl'];
      +$downloadURL = $_POST['downloadurl'];
      +$latestVersion = $_POST['latestversion'];
      +
      +$page->checkLoggedIn();
      +$user = $page->getLoggedInUser();
      +
      +if (empty($title))
      +{
      + $page->redirect('add-project.php?error=No Title Specified');
      +}
      +if (empty($description))
      +{
      + $page->redirect('add-project.php?error=No Title Specified');
      +}
      +
      +if ($page->isUserGM($user))
      +{
      + $page->query('INSERT INTO Projects VALUES (0, ' . $user->ID . ', "' . $title . '", "' . $description . '", "' . $logoURL . '", "' . $downloadURL . '", "' . $websiteURL . '", "' . $latestVersion . '", NOW())');
      + $page->redirect('index.php');
      +}
      +else
      +{
      + $page->drawError('You do not have permission to access this page.');
      +}
      +
      +?>
      Index: projects/add-project.php
      ===================================================================
      --- projects/add-project.php (nonexistent)
      +++ projects/add-project.php (revision 468)
      @@ -0,0 +1,69 @@
      +
      +
      +require '../_taios.php';
      +
      +$page = new Taios_Page('Add Project', '../');
      +$page->drawHeader();
      +$page->drawMiddle();
      +
      +?>
      +
      +

      Here you can add a project to the Tim32 database.

      +
      +
      +
      +
      +if (isset($_GET['error']))
      +{
      + $page->drawError($_GET['error'], false);
      +}
      +
      +$page->checkLoggedIn();
      +
      +if ($page->isUserGM($page->getLoggedInUser()))
      +{
      +?>
      +
      +
      +
      +
      +Title:
      +
      +
      +
      +Description:
      +
      +
      +
      +Logo URL:
      +
      +
      +
      +Website URL:
      +
      +
      +
      +DownloadURL:
      +
      +
      +
      +Latest Version:
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +}
      +else
      +{
      + $page->drawError('You do not have permission to access this page.');
      +}
      +
      +$page->drawFooter();
      +
      +?>
      Index: install.sql
      ===================================================================
      --- install.sql (revision 130)
      +++ install.sql (revision 468)
      @@ -1,75 +1,72 @@
      -DROP DATABASE Tim32;
      -CREATE DATABASE Tim32;
      -
      -USE Tim32;
      -
      -CREATE TABLE Users
      -(
      - ID INT NOT NULL AUTO_INCREMENT,
      - AccessID INT,
      - Username TEXT,
      - Password TEXT,
      - EmailAddress TEXT,
      - Name TEXT,
      - ChallengeID INT,
      - PRIMARY KEY(ID)
      -);
      -
      -CREATE TABLE BlogPosts
      -(
      - ID INT NOT NUll AUTO_INCREMENT,
      - ParentID INT,
      - AuthorID INT,
      - Title TEXT,
      - Content TEXT,
      - DatePosted DATETIME,
      - Category TEXT,
      - Spam BOOLEAN,
      - PRIMARY KEY(ID)
      -);
      -
      -CREATE TABLE Projects
      -(
      - ID INT NOT NUll AUTO_INCREMENT,
      - AuthorID INT,
      - Title TEXT,
      - Description TEXT,
      - LogoURL TEXT,
      - WebsiteURL TEXT,
      - LatestVersion TEXT,
      - PRIMARY KEY(ID)
      -);
      -
      -CREATE TABLE ForumCategories
      -(
      - ID INT NOT NUll AUTO_INCREMENT,
      - ParentID INT,
      - Title TEXT,
      - Description TEXT,
      - PRIMARY KEY(ID)
      -);
      -
      -CREATE TABLE ForumTopics
      -(
      - ID INT NOT NUll AUTO_INCREMENT,
      - AuthorID INT,
      - CategoryID INT,
      - Title TEXT,
      - DatePosted DATETIME,
      - PRIMARY KEY(ID)
      -);
      -
      -CREATE TABLE ForumPosts
      -(
      - ID INT NOT NUll AUTO_INCREMENT,
      - AuthorID INT,
      - TopicID INT,
      - Title TEXT,
      - Content TEXT,
      - DatePosted DATETIME,
      - Spam BOOLEAN,
      - PRIMARY KEY(ID)
      -);
      -
      -INSERT INTO Users VALUES (1, 0, "admin", SHA1("password"), "admins@tim32.org", "Tim32 Admin", 0);
      -INSERT INTO BlogPosts VALUES(1, -1, 1, "Welcome to Tim32!", "Welcome to the new Tim32 website! It has had a complete design re-think to make it simpler and easier to use!", NOW(), "Tim32", FALSE);
      +DROP DATABASE Tim32;
      +CREATE DATABASE Tim32;
      +
      +USE Tim32;
      +
      +CREATE TABLE Users
      +(
      + ID INT NOT NULL AUTO_INCREMENT,
      + AccessID INT,
      + Username TEXT,
      + Password TEXT,
      + EmailAddress TEXT,
      + Name TEXT,
      + ChallengeID INT,
      + PRIMARY KEY(ID)
      +);
      +
      +CREATE TABLE BlogPosts
      +(
      + ID INT NOT NUll AUTO_INCREMENT,
      + ParentID INT,
      + AuthorID INT,
      + Title TEXT,
      + Content TEXT,
      + DatePosted DATETIME,
      + Category TEXT,
      + Spam BOOLEAN,
      + PRIMARY KEY(ID)
      +);
      +
      +CREATE TABLE Projects
      +(
      + ID INT NOT NUll AUTO_INCREMENT,
      + AuthorID INT,
      + Title TEXT,
      + Description TEXT,
      + LogoURL TEXT,
      + DownloadURL TEXT,
      + WebsiteURL TEXT,
      + LatestVersion TEXT,
      + LastUpdate DATETIME,
      + PRIMARY KEY(ID)
      +);
      +
      +CREATE TABLE ForumCategories
      +(
      + ID INT NOT NUll AUTO_INCREMENT,
      + ParentID INT,
      + Title TEXT,
      + Description TEXT,
      + PRIMARY KEY(ID)
      +);
      +
      +CREATE TABLE ForumPosts
      +(
      + ID INT NOT NUll AUTO_INCREMENT,
      + AuthorID INT,
      + CategoryID INT,
      + ParentID INT,
      + Title TEXT,
      + Content TEXT,
      + DatePosted DATETIME,
      + Spam BOOLEAN,
      + PRIMARY KEY(ID)
      +);
      +
      +INSERT INTO Users VALUES (1, 0, "admin", SHA1("password"), "admins@tim32.org", "Tim32 Admin", 0);
      +INSERT INTO BlogPosts VALUES(1, -1, 1, "Welcome to Tim32!", "Welcome to the new Tim32 website! It has had a complete design re-think to make it simpler and easier to use!", NOW(), "Tim32", FALSE);
      +INSERT INTO Projects VALUES (1, 1, "TAIOS", "TAIOS (The All In One System) is a PHP based system to make the Tim32 website very self contained and altogether.", "http://websvn.kde.org/*checkout*/trunk/kdesupport/oxygen-icons/64x64/categories/applications-internet.png", "", "http://tim32.org/~tom/taios/", "SVN", NOW());
      +INSERT INTO ForumCategories VALUES (1, -1, "Tim32", "Talk about Tim32 in here");
      +INSERT INTO ForumCategories VALUES (2, 1, "TAIOS", "Talk about TAIOS in here");
      +INSERT INTO ForumPosts VALUES (1, 1, 2, -1, "TAIOS Almost Finished", "As I speak we are currently in the process of finilising TAIOS so it works perfectly! I'm pleased to accounce that TAIOS should be ready within the next week or so! :D", NOW(), FALSE);
      Index: login-do.php
      ===================================================================
      --- login-do.php (revision 130)
      +++ login-do.php (revision 468)
      @@ -1,37 +1,37 @@
      -
      -
      -require '_taios.php';
      -
      -$page = new Taios_Page('Login');
      -
      -$username = $_POST['username'];
      -$password = $_POST['password'];
      -$remember = $_POST['remember'] == 'yes';
      -
      -if (empty($username))
      -{
      - $page->redirect('login.php?error=No Username Specified');
      -}
      -if (empty($password))
      -{
      - $page->redirect('login.php?error=No Password Specified');
      -}
      -
      -$user = $page->getUserByUsername($username);
      -if (!$user || $user->password != sha1($password))
      -{
      - $page->redirect('login.php?error=Incorrect Username or Password');
      -}
      -
      -$expires = -1;
      -
      -if ($remember)
      -{
      - $expires = time() + 60 * 60 * 24 * 30;
      -}
      -
      -setcookie('Tim32_Login', $user->username . '|~|' . $user->password, $expires, '/');
      -
      -$page->redirect('index.php');
      -
      -?>
      +
      +
      +require '_taios.php';
      +
      +$page = new Taios_Page('Login');
      +
      +$username = $_POST['username'];
      +$password = $_POST['password'];
      +$remember = $_POST['remember'] == 'yes';
      +
      +if (empty($username))
      +{
      + $page->redirect('login.php?error=No Username Specified');
      +}
      +if (empty($password))
      +{
      + $page->redirect('login.php?error=No Password Specified');
      +}
      +
      +$user = $page->getUserByUsername($username);
      +if (!$user || $user->password != sha1($password))
      +{
      + $page->redirect('login.php?error=Incorrect Username or Password');
      +}
      +
      +$expires = -1;
      +
      +if ($remember)
      +{
      + $expires = time() + 60 * 60 * 24 * 30;
      +}
      +
      +setcookie('Tim32_Login', $user->username . '|~|' . $user->password, $expires, '/');
      +
      +$page->redirect('index.php');
      +
      +?>
      Index: login.php
      ===================================================================
      --- login.php (revision 130)
      +++ login.php (revision 468)
      @@ -1,48 +1,48 @@
      -
      -
      -require '_taios.php';
      -
      -$page = new Taios_Page('Login');
      -$page->drawHeader();
      -$page->drawMiddle();
      -
      -?>
      -
      -

      Here you can login to Tim32 using your Tim32 account.

      -
      -
      -
      -
      -if (isset($_GET['error']))
      -{
      - $page->drawError($_GET['error'], false);
      -}
      -
      -?>
      -
      -
      -
      -
      -Username:
      -
      -
      -
      -Password:
      -
      -
      -
      -Remember Me:
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -$page->drawFooter();
      -
      -?>
      +
      +
      +require '_taios.php';
      +
      +$page = new Taios_Page('Login');
      +$page->drawHeader();
      +$page->drawMiddle();
      +
      +?>
      +
      +

      Here you can login to Tim32 using your Tim32 account.

      +
      +
      +
      +
      +if (isset($_GET['error']))
      +{
      + $page->drawError($_GET['error'], false);
      +}
      +
      +?>
      +
      +
      +
      +
      +Username:
      +
      +
      +
      +Password:
      +
      +
      +
      +Remember Me:
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +$page->drawFooter();
      +
      +?>
      Index: logout-do.php
      ===================================================================
      --- logout-do.php (revision 130)
      +++ logout-do.php (revision 468)
      @@ -1,6 +1,6 @@
      -
      -
      -setcookie('Tim32_Login', '', -1, '/');
      -header('Location: index.php');
      -
      -?>
      +
      +
      +setcookie('Tim32_Login', '', -1, '/');
      +header('Location: index.php');
      +
      +?>