Subversion Repositories taios

Rev

Rev 148 | Rev 150 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
33 freddie 1
<?php
2
 
3
require '_config.php';
4
 
5
class Taios_Page
6
{
7
    function __construct($title, $url = "")
8
    {
9
        $this->title = $title;
10
        $this->url = $url;
11
 
12
        $this->drawnHeader = false;
13
        $this->drawnMiddle = false;
14
        $this->drawnFooter = false;
15
 
16
        $this->db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD);
17
        if (!$this->db)
18
        {
19
            $this->drawError('Failed to connect to database: ' . mysql_error());
20
        }
21
 
22
        if (!mysql_select_db('Tim32'))
23
        {
24
            $this->drawError('Failed to select database: ' . mysql_error());
25
        }
26
    }
27
 
28
    function drawHeader()
29
    {
30
        if (!$this->drawnHeader)
31
        {
32
            write('<!DOCTYPE html>');
33
            write('<html>');
34
            write('<head>');
35
            write('<meta http-equiv="Content-Type" content="text/html;charset=utf-8">');
36
            write('<title>Tim32 &middot; ' . $this->title . '</title>');
37
            write('<link href="' . $this->url . 'styles.css" rel="stylesheet" type="text/css" media="screen">');
38
            write('</head>');
39
            write('<body>');
40
            write('<div class="sidebar">');
41
            write('<div class="sidebar-header">');
42
            write('<h1>Tim32</h1>');
43
            write('</div>');
44
            write('<div class="sidebar-menu">');
45
            $this->drawMenuItem('Home', 'index.php');
46
            $this->drawMenuItem('Blog', 'blog/');
47
            $this->drawMenuItem('Projects', 'projects/');
48
            $this->drawMenuItem('Forums', 'forums/');
49
            $this->drawMenuItem('Wiki', 'wiki/');
50
            $this->drawMenuItem('Photos', 'photos/');
51
            write('<br />');
52
            if ($this->isLoggedIn())
53
            {
77 tom 54
                $this->drawMenuItem('Administration', 'admin/');
33 freddie 55
                $this->drawMenuItem('Logout', 'logout-do.php');
56
            }
57
            else
58
            {
59
                $this->drawMenuItem('Login', 'login.php');
60
                $this->drawMenuItem('Register', 'register.php');
61
            }
62
            write('<br />');
63
 
64
            $this->drawnHeader = true;
65
        }
66
    }
67
 
68
    function drawMenuItem($t, $u)
69
    {
49 tom 70
        write('<p><a href="' . $this->url . $u . '">' . $t . '</a></p>');
33 freddie 71
    }
72
 
73
    function drawMiddle()
74
    {
75
        if (!$this->drawnMiddle)
76
        {
77
            write('<br />');
78
            write('</div>');
79
            write('</div>');
80
            write('<div class="content">');
81
            write('<h2>' . $this->title . '</h2>');
82
 
83
            $this->drawnMiddle = true;
84
        }
85
    }
86
 
87
    function drawFooter()
88
    {
89
        if (!$this->drawnFooter)
90
        {
91
            write('</div>');
92
            write('</body>');
93
            write('</html>');
94
 
95
            $this->drawnFooter = true;
96
        }
97
 
52 tom 98
        die();
33 freddie 99
    }
100
 
101
    function drawError($text, $die = true)
102
    {
103
        $this->drawHeader();
104
        $this->drawMiddle();
105
 
106
        write('<h4 style="color: red;">Error: ' . $text . '</h4>');
107
 
108
        if ($die)
109
        {
110
            $this->drawFooter();
111
            die();
112
        }
113
    }
114
 
90 freddie 115
    function drawBlogPostTree($id, $first = false)
33 freddie 116
    {
117
        $post = $this->getBlogPost($id);
90 freddie 118
        if ($first)
95 freddie 119
            write('<h3><a href="post.php?id=' . $id . '">' . $post->title. '</a> <a href="post.php?id=' . $post->parent->ID . '">^</a></h3>');
90 freddie 120
        else
121
            write('<a href="post.php?id=' . $id . '"><h3>' . $post->title. '</h3></a>');
33 freddie 122
        write('<h5 style="color: #666666;">Posted On ' . date('l j F Y', $post->datePosted) . ' by ' . $post->user->name . ' (' . $post->user->username . ')</h5>');
123
        write('<p>' . $post->content . '</p>');
74 tom 124
        write('<br />');
73 tom 125
        if ($this->isUserNormal($this->getLoggedInUser()))
72 tom 126
        {
116 freddie 127
            echo '<p class="bold"><a href="add-post.php?id=' . $id . '">Add Comment</a>';
117 freddie 128
            if ($this->isUserAdmin($this->getLoggedInUser()) || $this->getLoggedInUser() == $post->author->ID)
129
                echo ' &middot <a href="del-post.php?id=' . $id . '">Delete Post</a>';
116 freddie 130
            write('</p><br />');
72 tom 131
        }
33 freddie 132
 
43 freddie 133
        $ids = $this->findIDs('BlogPosts', 'WHERE ParentID=' . $id);
33 freddie 134
        for ($i = 0; $i < count($ids); $i++)
135
        {
52 tom 136
            write('<div class="indent">');
43 freddie 137
            $this->drawBlogPostTree($ids[$i]);
52 tom 138
            write('</div>');
33 freddie 139
        }
140
    }
57 tom 141
 
58 tom 142
    function drawBlogCategoriesMenu()
57 tom 143
    {
144
        $cats = array();
145
 
62 tom 146
        $ids = $this->findIDs('BlogPosts', 'WHERE ParentID = -1');
57 tom 147
        for ($i = 0; $i < count($ids); $i++)
148
        {
149
            $cat = $this->getBlogPost($ids[$i])->category;
150
            if (!in_array($cat, $cats))
151
            {
152
                array_push($cats, $cat);
153
            }
154
        }
155
 
61 tom 156
        write('<h3>Categories</h3>');
57 tom 157
        for ($i = 0; $i < count($cats); $i++)
158
        {
65 tom 159
            $this->drawMenuItem($cats[$i], 'blog/index.php?cat=' . $cats[$i]);
57 tom 160
        }
161
    }
137 tom 162
 
163
    function replaceBBCode($str)
164
    {
165
        $newstr = str_replace("\n", '</p><p>', $str);
144 tom 166
        $newstr = str_replace('  ', '&nbsp;&nbsp;', $newstr);
148 tom 167
        $newstr = str_replace(':)', '<img src="' . $this->url . 'data/smilies/face-smile.png" style="vertical-align: middle;" />', $newstr);
149 tom 168
        $newstr = str_replace(':p', '<img src="' . $this->url . 'data/smilies/face-raspberry.png" style="vertical-align: middle;" />', $newstr);
169
        $newstr = str_replace(':P', '<img src="' . $this->url . 'data/smilies/face-raspberry.png" style="vertical-align: middle;" />',$newstr);
170
        $newstr = str_replace(':|', '<img src="' . $this->url . 'data/smilies/face-plain.png" style="vertical-align: middle;" />',$newstr);
171
        $newstr = str_replace(':D', '<img src="' . $this->url . 'data/smilies/face-laugh.png" style="vertical-align: middle;" />',$newstr);
172
        $newstr = str_replace('=D', '<img src="' . $this->url . 'data/smilies/face-laugh.png" style="vertical-align: middle;" />',$newstr);
173
        $newstr = str_replace(':(', '<img src="' . $this->url . 'data/smilies/face-sad.png" style="vertical-align: middle;" />',$newstr);
174
        $newstr = str_replace(':0', '<img src="' . $this->url . 'data/smilies/face-surprise.png" style="vertical-align: middle;" />',$newstr);
175
        $newstr = str_replace(':o', '<img src="' . $this->url . 'data/smilies/face-surprise.png" style="vertical-align: middle;" />',$newstr);
176
        $newstr = str_replace(':O', '<img src="' . $this->url . 'data/smilies/face-surprise.png" style="vertical-align: middle;" />',$newstr);
177
        $newstr = str_replace(':/', '<img src="' . $this->url . 'data/smilies/face-uncertain.png" style="vertical-align: middle;" />',$newstr);
178
        $newstr = str_replace(';)', '<img src="' . $this->url . 'data/smilies/face-wink.png" style="vertical-align: middle;" />',$newstr);
137 tom 179
 
139 tom 180
        $bbcode = array(
143 tom 181
        '/\[b\](.+?)\[\/b\]/is',
141 tom 182
        '/\[i\](.+?)\[\/i\]/is',
183
        '/\[u\](.+?)\[\/u\]/is',
184
        '/\[url\](.+?)\[\/url\]/is',
142 tom 185
        '/\[code\](.+?)\[\/code\]/is'
139 tom 186
        );
187
 
188
        $html = array(
189
        '<b>$1</b>',
141 tom 190
        '<i>$1</i>',
191
        '<u>$1</u>',
192
        '<a href="$1">$1</a>',
142 tom 193
        '<div class="code">$1</div>'
139 tom 194
        );
195
 
196
        $newstr = preg_replace($bbcode, $html, $newstr);
197
 
137 tom 198
        return $newstr;
199
    }
33 freddie 200
 
64 tom 201
    function redirect($u)
33 freddie 202
    {
64 tom 203
        header('Location: ' . $u);
33 freddie 204
        die();
205
    }
206
 
207
    function isLoggedIn()
208
    {
209
        $cookie = $_COOKIE['Tim32_Login'];
210
        if (!empty($cookie))
211
        {
212
            $clist = explode('|~|', $cookie);
213
            $user = $this->getUserByUsername($clist[0]);
214
            if ($user)
215
            {
216
                if ($user->password == $clist[1])
217
                {
218
                    return true;
219
                }
220
            }
221
        }
222
 
223
        return false;
224
    }
225
 
226
    function isUserAdmin()
227
    {
228
        if ($this->isLoggedIn())
229
        {
230
            if ($this->getLoggedInUser()->accessID <= 0)
231
            {
232
                return true;
233
            }
234
        }
235
 
236
        return false;
237
    }
238
 
239
    function isUserGM()
240
    {
241
        if ($this->isLoggedIn())
242
        {
243
            if ($this->getLoggedInUser()->accessID <= 1)
244
            {
245
                return true;
246
            }
247
        }
248
 
249
        return false;
250
    }
251
 
252
    function isUserNormal()
253
    {
254
        if ($this->isLoggedIn())
255
        {
256
            if ($this->getLoggedInUser()->accessID <= 2)
257
            {
258
                return true;
259
            }
260
        }
261
 
262
        return false;
263
    }
264
 
265
    function checkLoggedIn()
266
    {
267
        if (!$this->isLoggedIn())
268
        {
269
            $this->drawError('You need to be logged in.');
270
        }
271
    }
272
 
273
    function query($query)
274
    {
275
        $result = mysql_query($query);
276
        if (!$result)
277
        {
278
            $this->drawError('MySQL Error: ' . mysql_error());
279
        }
280
 
281
        return $result;
282
    }
283
 
284
    function findIDs($table, $query = '')
285
    {
286
        $array = array();
287
 
288
        $result = $this->query('SELECT ID FROM ' . $table . ' ' . $query);
289
        while ($row = mysql_fetch_array($result))
290
        {
291
            array_push($array, $row['ID']);
292
        }
293
 
294
        return $array;
295
    }
296
 
297
    function getUserByID($id)
298
    {
299
        $result = $this->query('SELECT * FROM Users WHERE ID = ' . $id);
300
        while ($row = mysql_fetch_array($result))
301
        {
302
            $user = new User;
303
            $user->ID = $row['ID'];
304
            $user->accessID = $row['AccessID'];
305
            $user->username = $row['Username'];
306
            $user->password = $row['Password'];
307
            $user->emailAddress = $row['EmailAddress'];
308
            $user->name = $row['Name'];
309
            $user->challengeID = $row['ChallengeID'];
310
 
311
            return $user;
312
        }
313
 
314
        return false;
315
    }
316
 
317
    function getUserByUsername($username)
318
    {
319
        $result = $this->query('SELECT * FROM Users WHERE Username = "' . $username . '"');
320
        while ($row = mysql_fetch_array($result))
321
        {
322
            return $this->getUserByID($row['ID']);
323
        }
324
 
325
        return false;
326
    }
327
 
328
    function getLoggedInUser()
329
    {
330
        if ($this->isLoggedIn())
331
        {
332
            $clist = explode('|~|', $_COOKIE['Tim32_Login']);
333
            return $this->getUserByUsername($clist[0]);
334
        }
335
 
336
        return false;
337
    }
338
 
339
    function getBlogPost($id)
340
    {
341
        $result = $this->query('SELECT * FROM BlogPosts WHERE ID = ' . $id);
342
        while ($row = mysql_fetch_array($result))
343
        {
344
            $post = new BlogPost;
345
            $post->ID = $row['ID'];
346
            if ($row['ParentID'] == -1)
347
            {
348
                $post->parent = -1;
349
            }
350
            else
351
            {
352
                $post->parent = $this->getBlogPost($row['ParentID']);
353
            }
104 tom 354
            $post->author = $this->getUserByID($row['AuthorID']);
105 tom 355
            $post->user = $this->getUserByID($row['AuthorID']); // For some older pages
33 freddie 356
            $post->title = $row['Title'];
137 tom 357
            $post->content = $this->replaceBBCode($row['Content']);
33 freddie 358
            $post->datePosted = strtotime($row['DatePosted']);
359
            $post->category = $row['Category'];
360
            $post->spam = $row['Spam'];
361
 
362
            return $post;
363
        }
364
 
365
        $this->drawError('Cannot find blog post, #' . $id);
366
    }
367
 
113 freddie 368
    function delBlogPost($id)
369
    {
370
        $ids = $this->findIDs('BlogPosts', 'WHERE ParentID=' . $id);
371
        for ($i = 0; $i < count($ids); $i++)
372
            $this->delBlogPost($ids[$i]);
373
 
374
        $this->query('delete from BlogPosts where ID=' . $id);
375
    }
376
 
33 freddie 377
    function getGetID()
378
    {
379
        $id = $_GET['id'];
380
        if (empty($id))
381
        {
382
            $id = 1;
383
        }
384
 
385
        return $id;
386
    }
387
 
388
    function getPostID()
389
    {
41 freddie 390
        $id = $_POST['id'];
33 freddie 391
        if (empty($id))
392
        {
393
            $id = 1;
394
        }
395
 
396
        return $id;
397
    }
398
 
399
}
400
 
401
class User
402
{
403
    public $ID;
404
    public $accessID;
405
    public $username;
406
    public $password;
407
    public $emailAddress;
408
    public $name;
409
    public $challengeID;
410
}
411
 
412
class BlogPost
413
{
414
    public $ID;
415
    public $parent;
416
    public $author;
417
    public $title;
418
    public $content;
419
    public $datePosted;
420
    public $category;
421
    public $spam;
422
}
423
 
424
function write($str)
425
{
426
    echo $str;
427
    echo "\n";
428
}
429
 
430
?>