Subversion Repositories taios

Rev

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

Rev Author Line No. Line
169 tom 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
            {
54
                $this->drawMenuItem('Administration', 'admin/');
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
    {
70
        write('<p><a href="' . $this->url . $u . '">' . $t . '</a></p>');
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
 
98
        die();
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
 
115
    function drawBlogPostTree($id, $first = false)
116
    {
117
        $post = $this->getBlogPost($id);
118
        if ($first)
119
            write('<h3><a href="post.php?id=' . $id . '">' . $post->title. '</a> <a href="post.php?id=' . $post->parent->ID . '">^</a></h3>');
120
        else
121
            write('<a href="post.php?id=' . $id . '"><h3>' . $post->title. '</h3></a>');
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>');
124
        write('<br />');
125
        if ($this->isUserNormal($this->getLoggedInUser()))
126
        {
127
            echo '<p class="bold"><a href="add-post.php?id=' . $id . '">Add Comment</a>';
128
            if ($this->isUserAdmin($this->getLoggedInUser()) || $this->getLoggedInUser() == $post->author->ID)
174 tom 129
            {
169 tom 130
                echo ' &middot <a href="del-post.php?id=' . $id . '">Delete Post</a>';
174 tom 131
                echo ' &middot <a href="edit-post.php?id=' . $id . '">Edit Post</a>';
132
            }
169 tom 133
            write('</p><br />');
134
        }
135
 
136
        $ids = $this->findIDs('BlogPosts', 'WHERE ParentID=' . $id);
137
        for ($i = 0; $i < count($ids); $i++)
138
        {
139
            write('<div class="indent">');
140
            $this->drawBlogPostTree($ids[$i]);
141
            write('</div>');
142
        }
143
    }
144
 
145
    function drawBlogCategoriesMenu()
146
    {
147
        $cats = array();
148
 
149
        $ids = $this->findIDs('BlogPosts', 'WHERE ParentID = -1');
150
        for ($i = 0; $i < count($ids); $i++)
151
        {
152
            $cat = $this->getBlogPost($ids[$i])->category;
153
            if (!in_array($cat, $cats))
154
            {
155
                array_push($cats, $cat);
156
            }
157
        }
158
 
159
        write('<h3>Categories</h3>');
160
        for ($i = 0; $i < count($cats); $i++)
161
        {
162
            $this->drawMenuItem($cats[$i], 'blog/index.php?cat=' . $cats[$i]);
163
        }
164
    }
165
 
166
    function replaceBBCode($str)
167
    {
168
        $newstr = str_replace("\n", '</p><p>', $str);
169
        $newstr = str_replace('  ', '&nbsp;&nbsp;', $newstr);
170
        $newstr = str_replace(' :)', ' <img src="' . $this->url . 'data/smilies/face-smile.png" class="smiley" />', $newstr);
171
        $newstr = str_replace(' :p', ' <img src="' . $this->url . 'data/smilies/face-raspberry.png" class="smiley" />', $newstr);
172
        $newstr = str_replace(' :P', ' <img src="' . $this->url . 'data/smilies/face-raspberry.png" class="smiley" />',$newstr);
173
        $newstr = str_replace(' :|', ' <img src="' . $this->url . 'data/smilies/face-plain.png" class="smiley" />',$newstr);
174
        $newstr = str_replace(' :D', ' <img src="' . $this->url . 'data/smilies/face-laugh.png" class="smiley" />',$newstr);
175
        $newstr = str_replace(' =D', ' <img src="' . $this->url . 'data/smilies/face-laugh.png" class="smiley" />',$newstr);
176
        $newstr = str_replace(' :(', ' <img src="' . $this->url . 'data/smilies/face-sad.png" class="smiley" />',$newstr);
177
        $newstr = str_replace(' :0', ' <img src="' . $this->url . 'data/smilies/face-surprise.png" class="smiley" />',$newstr);
178
        $newstr = str_replace(' :o', ' <img src="' . $this->url . 'data/smilies/face-surprise.png" class="smiley" />',$newstr);
179
        $newstr = str_replace(' :O', ' <img src="' . $this->url . 'data/smilies/face-surprise.png" class="smiley" />',$newstr);
180
        $newstr = str_replace(' :/', ' <img src="' . $this->url . 'data/smilies/face-uncertain.png" class="smiley" />',$newstr);
181
        $newstr = str_replace(' ;)', ' <img src="' . $this->url . 'data/smilies/face-wink.png" class="smiley" />',$newstr);
182
 
183
        $bbcode = array(
184
        '/\[b\](.+?)\[\/b\]/is',
185
        '/\[i\](.+?)\[\/i\]/is',
186
        '/\[u\](.+?)\[\/u\]/is',
187
        '/\[url\](.+?)\[\/url\]/is',
188
        '/\[code\](.+?)\[\/code\]/is',
189
        '/\[img\](.+?)\[\/img\]/is'
190
        );
191
 
192
        $html = array(
193
        '<b>$1</b>',
194
        '<i>$1</i>',
195
        '<u>$1</u>',
196
        '<a href="$1">$1</a>',
197
        '<div class="code">$1</div>',
198
        '<img src="$1" />'
199
        );
200
 
201
        $newstr = preg_replace($bbcode, $html, $newstr);
202
 
203
        return $newstr;
204
    }
205
 
206
    function redirect($u)
207
    {
208
        header('Location: ' . $u);
209
        die();
210
    }
211
 
212
    function isLoggedIn()
213
    {
214
        $cookie = $_COOKIE['Tim32_Login'];
215
        if (!empty($cookie))
216
        {
217
            $clist = explode('|~|', $cookie);
218
            $user = $this->getUserByUsername($clist[0]);
219
            if ($user)
220
            {
221
                if ($user->password == $clist[1])
222
                {
223
                    return true;
224
                }
225
            }
226
        }
227
 
228
        return false;
229
    }
230
 
231
    function isUserAdmin()
232
    {
233
        if ($this->isLoggedIn())
234
        {
235
            if ($this->getLoggedInUser()->accessID <= 0)
236
            {
237
                return true;
238
            }
239
        }
240
 
241
        return false;
242
    }
243
 
244
    function isUserGM()
245
    {
246
        if ($this->isLoggedIn())
247
        {
248
            if ($this->getLoggedInUser()->accessID <= 1)
249
            {
250
                return true;
251
            }
252
        }
253
 
254
        return false;
255
    }
256
 
257
    function isUserNormal()
258
    {
259
        if ($this->isLoggedIn())
260
        {
261
            if ($this->getLoggedInUser()->accessID <= 2)
262
            {
263
                return true;
264
            }
265
        }
266
 
267
        return false;
268
    }
269
 
270
    function checkLoggedIn()
271
    {
272
        if (!$this->isLoggedIn())
273
        {
274
            $this->drawError('You need to be logged in.');
275
        }
276
    }
277
 
278
    function query($query)
279
    {
280
        $result = mysql_query($query);
281
        if (!$result)
282
        {
283
            $this->drawError('MySQL Error: ' . mysql_error());
284
        }
285
 
286
        return $result;
287
    }
288
 
289
    function findIDs($table, $query = '')
290
    {
291
        $array = array();
292
 
293
        $result = $this->query('SELECT ID FROM ' . $table . ' ' . $query);
294
        while ($row = mysql_fetch_array($result))
295
        {
296
            array_push($array, $row['ID']);
297
        }
298
 
299
        return $array;
300
    }
301
 
302
    function getUserByID($id)
303
    {
304
        $result = $this->query('SELECT * FROM Users WHERE ID = ' . $id);
305
        while ($row = mysql_fetch_array($result))
306
        {
307
            $user = new User;
308
            $user->ID = $row['ID'];
309
            $user->accessID = $row['AccessID'];
310
            $user->username = $row['Username'];
311
            $user->password = $row['Password'];
312
            $user->emailAddress = $row['EmailAddress'];
313
            $user->name = $row['Name'];
314
            $user->challengeID = $row['ChallengeID'];
315
 
316
            return $user;
317
        }
318
 
319
        return false;
320
    }
321
 
322
    function getUserByUsername($username)
323
    {
324
        $result = $this->query('SELECT * FROM Users WHERE Username = "' . $username . '"');
325
        while ($row = mysql_fetch_array($result))
326
        {
327
            return $this->getUserByID($row['ID']);
328
        }
329
 
330
        return false;
331
    }
332
 
333
    function getLoggedInUser()
334
    {
335
        if ($this->isLoggedIn())
336
        {
337
            $clist = explode('|~|', $_COOKIE['Tim32_Login']);
338
            return $this->getUserByUsername($clist[0]);
339
        }
340
 
341
        return false;
342
    }
343
 
344
    function getBlogPost($id)
345
    {
346
        $result = $this->query('SELECT * FROM BlogPosts WHERE ID = ' . $id);
347
        while ($row = mysql_fetch_array($result))
348
        {
349
            $post = new BlogPost;
350
            $post->ID = $row['ID'];
351
            if ($row['ParentID'] == -1)
352
            {
353
                $post->parent = -1;
354
            }
355
            else
356
            {
357
                $post->parent = $this->getBlogPost($row['ParentID']);
358
            }
359
            $post->author = $this->getUserByID($row['AuthorID']);
360
            $post->user = $this->getUserByID($row['AuthorID']); // For some older pages
361
            $post->title = $row['Title'];
362
            $post->content = $this->replaceBBCode($row['Content']);
363
            $post->datePosted = strtotime($row['DatePosted']);
364
            $post->category = $row['Category'];
365
            $post->spam = $row['Spam'];
366
 
367
            return $post;
368
        }
369
 
370
        $this->drawError('Cannot find blog post, #' . $id);
371
    }
372
 
373
    function delBlogPost($id)
374
    {
375
        $ids = $this->findIDs('BlogPosts', 'WHERE ParentID=' . $id);
376
        for ($i = 0; $i < count($ids); $i++)
377
            $this->delBlogPost($ids[$i]);
378
 
379
        $this->query('delete from BlogPosts where ID=' . $id);
380
    }
381
 
382
    function getGetID()
383
    {
384
        $id = $_GET['id'];
385
        if (empty($id))
386
        {
387
            $id = 1;
388
        }
389
 
390
        return $id;
391
    }
392
 
393
    function getPostID()
394
    {
395
        $id = $_POST['id'];
396
        if (empty($id))
397
        {
398
            $id = 1;
399
        }
400
 
401
        return $id;
402
    }
403
 
404
}
405
 
406
class User
407
{
408
    public $ID;
409
    public $accessID;
410
    public $username;
411
    public $password;
412
    public $emailAddress;
413
    public $name;
414
    public $challengeID;
415
}
416
 
417
class BlogPost
418
{
419
    public $ID;
420
    public $parent;
421
    public $author;
422
    public $title;
423
    public $content;
424
    public $datePosted;
425
    public $category;
426
    public $spam;
427
}
428
 
429
function write($str)
430
{
431
    echo $str;
432
    echo "\n";
433
}
434
 
435
?>