Subversion Repositories taios

Rev

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