Subversion Repositories taios

Rev

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

Rev Author Line No. Line
297 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>');
462 tom 37
            write('<link href="' . $this->url . 'styles.css" rel="stylesheet" type="text/css" media="screen" />');
463 tom 38
            write('<link rel="shortcut icon" href="' . $this->url . 'data/favicon.png" />');
485 muzer 39
            write('<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.0.min.js"></script>');
40
            write('<script type="text/javascript" src="' . $this->url . 'tcp.js"></script>');
297 freddie 41
            write('</head>');
42
            write('<body>');
43
            write('<div class="sidebar">');
44
            write('<div class="sidebar-header">');
483 muzer 45
            write('<a href="' . $this->url . '"><h1>Tim32</h1></a>');
297 freddie 46
            write('</div>');
47
            write('<div class="sidebar-menu">');
48
            $this->drawMenuItem('Home', 'index.php');
49
            $this->drawMenuItem('Blog', 'blog/');
50
            $this->drawMenuItem('Projects', 'projects/');
51
            $this->drawMenuItem('Forums', 'forums/');
52
            $this->drawMenuItem('Wiki', 'wiki/');
53
            $this->drawMenuItem('Photos', 'photos/');
54
            write('<br />');
485 muzer 55
 
56
            if ($this->isLoggedIn() && $this->isUserNormal($this->getLoggedInUser())) {
297 freddie 57
                $this->drawMenuItem('Administration', 'admin/');
58
                $this->drawMenuItem('Logout', 'logout-do.php');
485 muzer 59
            } else if ($this->isLoggedIn()) {
471 muzer 60
                $this->drawMenuItem('Logout', 'logout-do.php');
485 muzer 61
 
62
                if ($this->getLoggedInUser()->username != "cake") {
471 muzer 63
                    $this->drawMenuItem('You are banned', NULL);
485 muzer 64
                } else {
472 tom 65
                    $this->drawMenuItem('<span style="color:#032865">#undefined</span>', '/challenge/cakefolder');
485 muzer 66
                }
67
            } else {
297 freddie 68
                $this->drawMenuItem('Login', 'login.php');
69
                $this->drawMenuItem('Register', 'register.php');
70
            }
485 muzer 71
 
297 freddie 72
            write('<br />');
73
            $this->drawnHeader = true;
74
        }
75
    }
76
 
485 muzer 77
    function drawMenuItem($t, $u) {
78
        if ($u == NULL) {
471 muzer 79
            write('<p style="color:red">' . $t . '</p>');
485 muzer 80
        } else {
471 muzer 81
            write('<p><a href="' . $this->url . $u . '">' . $t . '</a></p>');
82
        }
297 freddie 83
    }
84
 
85
    function drawMiddle()
86
    {
485 muzer 87
        if (!$this->drawnMiddle) {
297 freddie 88
            write('</div>');
89
            write('</div>');
90
            write('<div class="content">');
483 muzer 91
            write('<a href="./"><h2>' . $this->title . '</h2></a>');
297 freddie 92
 
93
            $this->drawnMiddle = true;
94
        }
95
    }
96
 
97
    function drawFooter()
98
    {
99
        if (!$this->drawnFooter)
100
        {
101
            write('</div>');
102
            write('</body>');
103
            write('</html>');
104
 
105
            $this->drawnFooter = true;
106
        }
107
 
108
        die();
109
    }
110
 
111
    function drawError($text, $die = true)
112
    {
113
        $this->drawHeader();
114
        $this->drawMiddle();
115
 
116
        write('<h4 style="color: red;">Error: ' . $text . '</h4>');
117
 
118
        if ($die)
119
        {
120
            $this->drawFooter();
121
            die();
122
        }
123
    }
124
 
125
    function drawBlogPostTree($id, $first = false)
126
    {
127
        $post = $this->getBlogPost($id);
128
        if ($first)
129
        {
130
            write('<h3><a href="post.php?id=' . $id . '">' . $post->title. '</a> <a href="post.php?id=' . $post->parent->ID . '">^</a></h3>');
131
        }
132
        else
133
        {
134
            write('<a href="post.php?id=' . $id . '"><h3>' . $post->title. '</h3></a>');
135
        }
136
        write('<h5 style="color: #666666;">Posted On ' . date('l j F Y', $post->datePosted) . ' by ' . $post->user->name . ' (' . $post->user->username . ')</h5>');
137
        write('<p>' . $this->replaceBBCode($post->content) . '</p>');
138
 
139
        if ($this->isUserNormal($this->getLoggedInUser()))
140
        {
141
            echo '<p class="bold"><a href="add-post.php?id=' . $id . '">Add Comment</a>';
142
            if ($this->isUserAdmin($this->getLoggedInUser()) || $this->getLoggedInUser()->ID == $post->author->ID)
143
            {
144
                echo ' &nbsp; &middot &nbsp; <a href="edit-post.php?id=' . $id . '">Edit Post</a>';
145
                echo ' &nbsp; &middot &nbsp; <a href="del-post.php?id=' . $id . '">Delete Post</a>';
146
            }
147
            write('</p><br />');
148
        }
149
 
484 muzer 150
        $ids = $this->findIDs('BlogPosts', 'WHERE ParentID="' . $id . '"');
297 freddie 151
        for ($i = 0; $i < count($ids); $i++)
152
        {
153
            write('<div class="indent">');
154
            $this->drawBlogPostTree($ids[$i]);
155
            write('</div>');
156
        }
157
    }
158
 
159
    function drawBlogCategoriesMenu()
160
    {
161
        $cats = array();
162
 
163
        $ids = $this->findIDs('BlogPosts', 'WHERE ParentID = -1');
164
        for ($i = 0; $i < count($ids); $i++)
165
        {
166
            $cat = $this->getBlogPost($ids[$i])->category;
483 muzer 167
            if (!in_array($cat, $cats) && ($cat != "Drafts" || $this->isUserGM($this->getLoggedInUser())))
297 freddie 168
            {
169
                array_push($cats, $cat);
170
            }
171
        }
172
 
173
        write('<h3>Categories</h3>');
174
        for ($i = 0; $i < count($cats); $i++)
175
        {
176
            $this->drawMenuItem($cats[$i], 'blog/index.php?cat=' . $cats[$i]);
177
        }
178
    }
179
 
180
    function replaceBBCode($str)
181
    {
437 tom 182
        $newstr = $str;    
484 muzer 183
        $newstr = str_replace("<", "&lt;", $newstr);
184
        $newstr = str_replace(">", "&gt;", $newstr);
481 muzer 185
        $newstr = str_replace("\n", "<br />", $newstr);
362 tom 186
        $newstr = str_replace("\\'", "'", $newstr);
187
        $newstr = str_replace("\\\"",'"', $newstr);
297 freddie 188
        $newstr = str_replace('  ', '&nbsp;&nbsp;', $newstr);
189
 
190
        $bbcode = array(
485 muzer 191
            '/\[b\](.+?)\[\/b\]/is',
192
            '/\[i\](.+?)\[\/i\]/is',
193
            '/\[u\](.+?)\[\/u\]/is',
194
            '/\[url\](.+?)\[\/url\]/is',
486 muzer 195
            '/\[w\](.+?)\[\/w\]/is',
485 muzer 196
            '/\[url=(?:&quot;)?(.+?)(?:&quot;)?\](.+?)\[\/url\]/is',
486 muzer 197
            '/\[w=(?:&quot;)?(.+?)(?:&quot;)?\](.+?)\[\/w\]/is',
485 muzer 198
            '/\[code\](.+?)\[\/code\]/is',
199
            '/\[img\](.+?)\[\/img\]/is',
200
            '/\[ul\](.+?)\[\/ul\]/is',
201
            '/\[ol\](.+?)\[\/ol\]/is',
202
            '/\[li\](.+?)\[\/li\]/is',
203
            '/\[mono\](.+?)\[\/mono\]/is',
204
            '/\[tcp\](.+?)\[\/tcp\]/is'
297 freddie 205
        );
206
 
207
        $html = array(
485 muzer 208
            '<b>$1</b>',
209
            '<i>$1</i>',
210
            '<u>$1</u>',
211
            '<a href="$1">$1</a>',
486 muzer 212
            '<a href="/wiki/index.php?page=$1">$1</a>',
485 muzer 213
            '<a href="$1">$2</a>',
486 muzer 214
            '<a href="/wiki/index.php?page=$1">$2</a>',
485 muzer 215
            '</p><div class="code">$1</div><p>',
216
            '<img src="$1" alt="BBCode-included image" />',
217
            '<ul>$1</ul>',
218
            '<ol>$1</ol>',
219
            '<li>$1</li>',
220
            '<span style="font-family: Droid Sans Mono, monospace, fixed; margin-left: 1em; margin-right: 1em;">$1</span>',
221
            '<span class="tcp" data-status="closed" data-text="$1">$1<img title="Open TCP Editor" class="tcp_button" src="http://tim32.org/~freddie/timlan/goTCP.png" alt="Open TCP Editor" /></span>'
297 freddie 222
        );
223
 
224
        $newstr = preg_replace($bbcode, $html, $newstr);
225
 
226
        return $newstr;
227
    }
228
 
229
    function redirect($u)
230
    {
231
        header('Location: ' . $u);
232
        die();
233
    }
234
 
235
    function isLoggedIn()
236
    {
237
        $cookie = $_COOKIE['Tim32_Login'];
238
        if (!empty($cookie))
239
        {
240
            $clist = explode('|~|', $cookie);
241
            $user = $this->getUserByUsername($clist[0]);
242
            if ($user)
243
            {
244
                if ($user->password == $clist[1])
245
                {
246
                    return true;
247
                }
248
            }
249
        }
250
 
251
        return false;
252
    }
253
 
254
    function isUserAdmin()
255
    {
256
        if ($this->isLoggedIn())
257
        {
258
            if ($this->getLoggedInUser()->accessID <= 0)
259
            {
260
                return true;
261
            }
262
        }
263
 
264
        return false;
265
    }
266
 
267
    function isUserGM()
268
    {
269
        if ($this->isLoggedIn())
270
        {
271
            if ($this->getLoggedInUser()->accessID <= 1)
272
            {
273
                return true;
274
            }
275
        }
276
 
277
        return false;
278
    }
279
 
280
    function isUserNormal()
281
    {
282
        if ($this->isLoggedIn())
283
        {
284
            if ($this->getLoggedInUser()->accessID <= 2)
285
            {
286
                return true;
287
            }
288
        }
289
 
290
        return false;
291
    }
292
 
471 muzer 293
    function isUserBanned()
294
    {
295
        if ($this->isLoggedIn())
296
        {
297
            if ($this->getLoggedInUser()->accessID >= 3)
298
            {
299
                return true;
300
            }
301
        }
302
 
303
        return false;
304
    }
305
 
384 tom 306
    function checkChallengeStatus($challengeID, $previous, $next)
307
    {
308
        $currentChallengeID = $this->getLoggedInUser()->challengeID;
309
 
310
        if (!$this->isLoggedIn())
311
        {
312
            $this->redirect('index.php');
313
        }
314
        else if ($currentChallengeID > $challengeID)
315
        {
316
            $this->redirect($next . '.php');
317
        }
318
        else if ($currentChallengeID < $challengeID)
319
        {
320
            $this->redirect($previous . '.php');
321
        }
322
    }
323
 
297 freddie 324
    function checkLoggedIn()
325
    {
326
        if (!$this->isLoggedIn())
327
        {
328
            $this->drawError('You need to be logged in.');
329
        }
330
    }
331
 
332
    function query($query)
333
    {
334
        $result = mysql_query($query);
335
        if (!$result)
336
        {
337
            $this->drawError('Query Failed: ' . $query . "\n" . 'MySQL Error: ' . mysql_error());
338
        }
339
 
340
        return $result;
341
    }
342
 
343
    function findIDs($table, $query = '')
344
    {
345
        $array = array();
346
 
347
        $result = $this->query('SELECT ID FROM ' . $table . ' ' . $query);
348
        while ($row = mysql_fetch_array($result))
349
        {
350
            array_push($array, $row['ID']);
351
        }
352
 
353
        return $array;
354
    }
355
 
356
    function getUserByID($id)
357
    {
484 muzer 358
        $result = $this->query('SELECT * FROM Users WHERE ID = "' . $id . '"');
297 freddie 359
        while ($row = mysql_fetch_array($result))
360
        {
361
            $user = new User;
362
            $user->ID = $row['ID'];
363
            $user->accessID = $row['AccessID'];
364
            $user->username = $row['Username'];
365
            $user->password = $row['Password'];
366
            $user->emailAddress = $row['EmailAddress'];
367
            $user->name = $row['Name'];
368
            $user->challengeID = $row['ChallengeID'];
369
 
370
            return $user;
371
        }
372
 
373
        return false;
374
    }
375
 
376
    function getUserByUsername($username)
377
    {
378
        $result = $this->query('SELECT * FROM Users WHERE Username = "' . $username . '"');
379
        while ($row = mysql_fetch_array($result))
380
        {
381
            return $this->getUserByID($row['ID']);
382
        }
383
 
384
        return false;
385
    }
386
 
387
    function getLoggedInUser()
388
    {
389
        if ($this->isLoggedIn())
390
        {
391
            $clist = explode('|~|', $_COOKIE['Tim32_Login']);
392
            return $this->getUserByUsername($clist[0]);
393
        }
394
 
395
        return false;
396
    }
397
 
398
    function getBlogPost($id)
399
    {
484 muzer 400
        $result = $this->query('SELECT * FROM BlogPosts WHERE ID = "' . $id . '"');
297 freddie 401
        while ($row = mysql_fetch_array($result))
402
        {
403
            $post = new BlogPost;
404
            $post->ID = $row['ID'];
405
            if ($row['ParentID'] == -1)
406
            {
407
                $post->parent = -1;
408
            }
409
            else
410
            {
411
                $post->parent = $this->getBlogPost($row['ParentID']);
412
            }
413
            $post->author = $this->getUserByID($row['AuthorID']);
414
            $post->user = $this->getUserByID($row['AuthorID']); // For some older pages
485 muzer 415
            $post->title = htmlspecialchars($row['Title']);
416
            $post->content = htmlspecialchars($row['Content']);
297 freddie 417
            $post->datePosted = strtotime($row['DatePosted']);
418
            $post->category = $row['Category'];
419
            $post->spam = $row['Spam'];
420
 
421
            return $post;
422
        }
423
 
424
        $this->drawError('Cannot find blog post, #' . $id);
425
    }
426
 
427
    function getProject($id)
428
    {
484 muzer 429
        $result = $this->query('SELECT * FROM Projects WHERE ID = "' . $id . '"');
297 freddie 430
        while ($row = mysql_fetch_array($result))
431
        {
432
            $project = new Project;
433
 
434
            $project->ID = $row['ID'];  
435
            $project->author = $this->getUserByID($row['AuthorID']);
436
            $project->title = $row['Title'];
437
            $project->description = $row['Description'];
438
            $project->logoURL = $row['LogoURL'];
439
            $project->downloadURL = $row['DownloadURL'];
440
            $project->websiteURL = $row['WebsiteURL'];
441
            $project->latestVersion = $row['LatestVersion'];
442
            $project->lastUpdate = strtotime($row['LastUpdate']);          
443
 
444
            return $project;
445
        }
446
 
447
        return false;
448
    }
449
 
450
    function getForumCategory($id)
451
    {
484 muzer 452
        $result = $this->query('SELECT * FROM ForumCategories WHERE ID = "' . $id . '"');
297 freddie 453
        while ($row = mysql_fetch_array($result))
454
        {
455
            $f = new ForumCategory;
456
 
457
            $f->ID = $row['ID'];
458
            $f->parent = $this->getForumCategory($row['ParentID']);
459
            $f->title = $row['Title'];
460
            $f->description = $row['Description'];
461
 
462
            return $f;
463
        }
464
 
465
        return false;
466
    }
467
 
468
    function getForumPost($id)
469
    {
484 muzer 470
        $result = $this->query('SELECT * FROM ForumPosts WHERE ID = "' . $id . '"');
297 freddie 471
        while ($row = mysql_fetch_array($result))
472
        {
473
            $f = new ForumPost;
474
 
475
            $f->ID = $row['ID'];
476
            $f->author = $this->getUserByID($row['AuthorID']);
477
            $f->category = $this->getForumCategory($row['CategoryID']);
478
            $f->parent = $this->getForumPost($row['ParentID']);
479
            $f->title = $row['Title'];
480
            $f->content = $row['Content'];
481
            $f->datePosted = strtotime($row['DatePosted']);
482
            $f->spam = $row['Spam'];
483
 
484
            return $f;
485
        }
486
 
487
        return false;
488
    }
489
 
490
    function delBlogPost($id)
491
    {
484 muzer 492
        $ids = $this->findIDs('BlogPosts', 'WHERE ParentID="' . $id . '"');
297 freddie 493
        for ($i = 0; $i < count($ids); $i++)
494
        {
495
            $this->delBlogPost($ids[$i]);
496
        }
497
 
484 muzer 498
        $this->query('DELETE FROM BlogPosts WHERE ID="' . $id . '"');
297 freddie 499
    }
500
 
501
    function getGetID()
502
    {
503
        $id = $_GET['id'];
504
        if (empty($id))
505
        {
506
            $id = 1;
507
        }
508
 
509
        return $id;
510
    }
511
 
512
    function getPostID()
513
    {
514
        $id = $_POST['id'];
515
        if (empty($id))
516
        {
517
            $id = 1;
518
        }
519
 
520
        return $id;
521
    }
522
 
523
}
524
 
525
class User
526
{
527
    public $ID;
528
    public $accessID;
529
    public $username;
530
    public $password;
531
    public $emailAddress;
532
    public $name;
443 tom 533
 
297 freddie 534
    public $challengeID;
535
}
536
 
537
class BlogPost
538
{
539
    public $ID;
540
    public $parent;
541
    public $author;
542
    public $title;
543
    public $content;
544
    public $datePosted;
545
    public $category;
546
    public $spam;
547
}
548
 
549
class Project
550
{
551
    public $ID;
552
    public $author;
553
    public $title;
554
    public $description;
426 tom 555
 
434 tom 556
 
297 freddie 557
    public $logoURL;
558
    public $downloadURL;
559
    public $websiteURL;
560
    public $latestVersion;
561
    public $lastUpdate;
562
}
563
 
564
class ForumCategory
565
{
566
    public $ID;
567
    public $parent;
568
    public $title;
569
    public $description;
401 tom 570
 
297 freddie 571
}
572
 
573
class ForumPost
574
{
575
    public $id;
576
    public $author;
577
    public $category;
578
    public $parent;
579
    public $title;
580
    public $content;
581
    public $datePosted;
582
    public $spam;
583
}
584
 
585
function write($str)
586
{
587
    echo $str;
588
    echo "\n";
589
}
590
 
591
?>