source: trunk/modules/Posting.class.php @ 22

Last change on this file since 22 was 22, checked in by julian, 12 years ago
  • topics.topicStatus => topics.topicIsClosed (also removed useless constants)
  • Creating pms works again
  • Continued refactoring (EditTopic?)
File size: 15.0 KB
Line 
1<?php
2
3class Posting extends ModuleTemplate {
4    protected $requiredModules = array(
5        'Auth',
6        'DB',
7        'Cache',
8        'Config',
9        'Constants',
10        'Language',
11        'Navbar',
12        'PageParts',
13        'Template'
14    );
15
16    public function executeMe() {
17        $mode = isset($_GET['mode']) ? $_GET['mode'] : '';
18        if(in_array($mode,array('Topic','Reply','Edit')) == FALSE) $mode = 'Topic';
19
20        // Alle angegebenen IDs bestimmen (normalerweise ist immer nur eine ID wichtig
21        $forumID = isset($_GET['forumID']) ? intval($_GET['forumID']) : 0;
22        $topicID = isset($_GET['topicID']) ? intval($_GET['topicID']) : 0;
23        $postID = isset($_GET['postID']) ? intval($_GET['postID']) : 0;
24
25        switch($mode) {
26            case 'Edit':
27                if(!$postData = Functions::getPostData($postID)) die('Kann Daten nicht laden: Beitrag');
28                $topicID = &$postData['topicID'];
29            case 'Reply':
30                if(!$topicData = Functions::getTopicData($topicID)) die('Kann Daten nicht laden: Thema');
31                $forumID = &$topicData['forumID'];
32            case 'Topic':
33                if(!$forumData = Functions::getForumData($forumID)) die('Kann Daten nicht laden: Forum');
34                break;
35        }
36
37        $this->modules['Language']->addFile('Posting');
38
39        $authData = $this->_authenticateUser($mode,$forumData);
40        if($mode == 'Reply' && $topicData['topicIsClosed'] == 1 && $authData['authIsMod'] != 1 && $this->modules['Auth']->getValue('userIsSuperadmin') && $this->modules['Auth']->getValue('userIsSupermod')) {
41            // TODO: Richtige Meldung
42            die('Kein Zugriff/Thema geschlossen');
43        }
44
45        $error = '';
46
47        //
48        // Alle uebergebenen Daten laden
49        //
50        $p = array();
51
52        $p['messageText'] = isset($_POST['p']['messageText']) ? $_POST['p']['messageText'] : (($mode == 'Edit') ? addslashes($postData['postText']) : '');
53        $p['messageTitle'] = isset($_POST['p']['messageTitle']) ? $_POST['p']['messageTitle'] : (($mode == 'Edit') ? addslashes($postData['postTitle']) : (($mode == 'Reply') ? 'Re: '.addslashes($topicData['topicTitle']) : ''));
54        $p['guestNick'] = isset($_POST['p']['guestNick']) ? $_POST['p']['guestNick'] : '';
55        $p['smileyID'] = isset($_POST['p']['smileyID']) ? intval($_POST['p']['smileyID']) : (($mode == 'Edit') ? addslashes($postData['smileyID']) : '');
56        $p['pollTitle'] = isset($_POST['p']['pollTitle']) ? $_POST['p']['pollTitle'] : '';
57        $p['pollOptions'] = (isset($_POST['p']['pollOptions']) == TRUE && is_array($_POST['p']['pollOptions']) == TRUE) ? $_POST['p']['pollOptions'] : array();
58
59        $subscriptionStatus = ($mode == 'Reply' && Functions::getSubscriptionStatus(SUBSCRIPTION_TYPE_TOPIC,USERID,$topicID) == TRUE) ? 1 : 0;
60
61        $c['showEditings'] = ($mode == 'Edit') ? $postData['postShowEditings'] : 1;
62        $c['enableURITransformation'] = ($mode == 'Edit') ? $postData['postEnableURITransformation'] : 1;
63        $c['enableSmilies'] = ($mode == 'Edit') ? $postData['postEnableSmilies'] : 1;
64        $c['showSignature'] = ($mode == 'Edit') ? $postData['postShowSignature'] : 1;
65        $c['enableBBCode'] = ($mode == 'Edit') ? $postData['postEnableBBCode'] : 1;
66        $c['enableHtmlCode'] = ($mode == 'Edit') ? $postData['postEnableHtmlCode'] : 0;
67
68        $c['pinTopic'] = ($mode == 'Reply') ? $topicData['topicIsPinned'] : 0;
69        $c['closeTopic'] = ($mode == 'Reply') ? $topicData['topicIsClosed'] : 0;
70        $c['subscribeTopic'] = $subscriptionStatus;
71
72        if(isset($_GET['doit'])) {
73            $c['enableBBCode'] = (isset($_POST['c']['enableBBCode']) && $forumData['forumEnableBBCode'] == 1) ? 1 : 0;
74            $c['enableSmilies'] = (isset($_POST['c']['enableSmilies']) && $forumData['forumEnableSmilies'] == 1) ? 1 : 0;
75            $c['enableHtmlCode'] = (isset($_POST['c']['enableHtmlCode']) && $forumData['forumEnableHtmlCode'] == 1) ? 1 : 0;
76            $c['showSignature'] = (isset($_POST['c']['showSignature']) && $this->modules['Config']->getValue('enable_sig') == 1 && $this->modules['Auth']->isLoggedIn() == 1) ? 1 : 0;
77            $c['subscribeTopic'] = isset($_POST['c']['subscribeTopic']) ? 1 : 0;
78            $c['enableURITransformation'] = (isset($_POST['c']['enableURITransformation']) && $forumData['forumEnableURITransformation'] == 1) ? 1 : 0;
79
80            if($this->modules['Auth']->isLoggedIn() == 1 && ($this->modules['Auth']->getValue('userIsAdmin') == 1 || $this->modules['Auth']->getValue('userIsSupermod') == 1 || $authData['authIsMod'] == 1)) {
81                $c['showEditings'] = isset($_POST['c']['showEditings']) ? 1 : 0;
82                $c['pinTopic'] = isset($_POST['c']['pinTopic']) ? 1 : 0;
83                $c['closeTopic'] = isset($_POST['c']['closeTopic']) ? 1 : 0;
84            }
85
86            if(!isset($_POST['showPreview'])) {
87                if(trim($p['messageTitle']) == '') $error = $this->modules['Language']->getString('error_no_title');
88                elseif(strlen($p['messageTitle']) > 255) $error = $this->modules['Language']->getString('error_title_too_long');
89                elseif(trim($p['messageText']) == '') $error = $this->modules['Language']->getString('error_no_post');
90                elseif($mode != 'Edit' && $this->modules['Auth']->isLoggedIn() != 1 && Functions::verifyEmail($p['guestNick']) == FALSE) $error = $this->modules['Language']->getString('error_invalid_name');
91                elseif($mode != 'Edit' && $this->modules['Auth']->isLoggedIn() != 1 && Functions::unifyNick($p['guestNick']) == FALSE) $error = $this->modules['Language']->getString('error_existing_user_name');
92                elseif($mode == 'Edit') {
93                    $this->modules['DB']->query("
94                        UPDATE
95                            ".TBLPFX."posts
96                        SET
97                            smileyID='".$p['smileyID']."',
98                            postEnableBBCode='".$c['enableBBCode']."',
99                            postEnableSmilies='".$c['enableSmilies']."',
100                            postEnableHtmlCode='".$c['enableHtmlCode']."',
101                            postShowSignature='".$c['showSignature']."',
102                            postEnableURITransformation='".$c['enableURITransformation']."',
103                            postShowEditings='".$c['showEditings']."',
104                            postEditedCounter=postEditedCounter+1,
105                            postLastEditorNick='".$this->modules['Auth']->getValue('userNick')."',
106                            postTitle='".$p['messageTitle']."',
107                            postText='".$p['messageText']."'
108                        WHERE
109                            postID='$postID'
110                    ");
111
112                    if($postID == $topicData['topicFirstPostID']) {
113                        $this->modules['DB']->query("
114                            UPDATE
115                                ".TBLPFX."topics
116                            SET
117                                topicTitle='".$p['messageTitle']."',
118                                smileyID='".$p['smileyID']."'
119                            WHERE
120                                topicID='$topicID'
121                        ");
122                    }
123
124                    Functions::myHeader(INDEXFILE."?action=ViewTopic&postID=$postID&".MYSID."#post$postID"); exit;
125                }
126                else {
127                    if(USERID != 0)
128                        $p['guestNick'] = '';
129
130                    if($mode == 'Topic') {
131                        $this->modules['DB']->query("
132                            INSERT INTO
133                                ".TBLPFX."topics
134                            SET
135                                topicTitle='".$p['messageTitle']."',
136                                forumID='$forumID',
137                                topicIsClosed='".$c['closeTopic']."',
138                                topicIsPinned='".$c['pinTopic']."',
139                                posterID='".USERID."',
140                                smileyID='$smileyID',
141                                topicTimestamp='".time()."',
142                                topicGuestNick='".$p['guestNick']."'
143                        ");
144                        $topicID = $this->modules['DB']->getInsertID();
145
146                        // Eventuell die Umfrage zum Thema hinzufuegen
147                        if(($this->modules['Auth']->getValue('userIsAdmin') == 1 || $this->modules['Auth']->getValue('userIsSupermod') == 1 || $authData['authIsMod'] == 1 || $authData['authPostPoll'] == 1) && trim($p['pollTitle']) != '') {
148                            while(list($curKey) = each($p['pollOptions'])) {
149                                if(trim($p['pollOptions'][$curKey]) == '')
150                                    unset($p['pollOptions'][$curKey]);
151                            }
152                            reset($p['pollOptions']);
153
154                            if(count($p['pollOptions']) > 1) {
155                                $this->modules['DB']->query("
156                                    INSERT INTO
157                                        ".TBLPFX."polls
158                                    SET
159                                        topicID='$topicID',
160                                        posterID='".USERID.",
161                                        pollTitle='".$p['pollTitle']."',
162                                        pollGuestNick='".$p['guestNick']."'
163                                ");
164
165                                $i = 1;
166                                foreach($p['pollOptions'] AS $curOption) {
167                                    $this->modules['DB']->query("
168                                        INSERT INTO
169                                            ".TBLPFX."polls_options
170                                        SET
171                                            topicID='$topicID',
172                                            optionID='$i',
173                                            optionTitle='$curOption'
174                                    ");
175                                    $i++;
176                                }
177
178                                $this->modules['DB']->query("UPDATE ".TBLPFX."topics SET topicHasPoll='1' WHERE topicID='$topicID'");
179                            }
180                        }
181                    }
182
183                    // Den Beitrag in die Datenbank eintragen
184                    $this->modules['DB']->query("
185                        INSERT INTO
186                            ".TBLPFX."posts
187                        SET
188                            topicID='$topicID',
189                            forumID='$forumID',
190                            posterID='".USERID."',
191                            smileyID='".$p['smileyID']."',
192                            postIP='".$_SERVER['REMOTE_ADDR']."',
193                            postEnableBBCode='".$c['enableBBCode']."',
194                            postEnableSmilies='".$c['enableSmilies']."',
195                            postEnableHtmlCode='".$c['enableHtmlCode']."',
196                            postShowSignature='".$c['showSignature']."',
197                            postEnableURITransformation='".$c['enableURITransformation']."',
198                            postShowEditings='".$c['showEditings']."',
199                            postTimestamp='".time()."',
200                            postTitle='".$p['messageTitle']."',
201                            postText='".$p['messageText']."',
202                            postGuestNick='".$p['guestNick']."'
203                    ");
204                    $postID = $this->modules['DB']->getInsertID();
205
206                    // Verschiedene Dinge updaten (Beitragszahl, erster/letzter Beitrag usw.)
207                    if($mode == 'Topic') $this->modules['DB']->query("UPDATE ".TBLPFX."topics SET topicFirstPostID='$postID', topicLastPostID='$postID' WHERE topicID='$topicID'");
208                    else $this->modules['DB']->query("UPDATE ".TBLPFX."topics SET topicLastPostID='$postID', topicRepliesCounter=topicRepliesCounter+1, topicIsClosed='".$c['closeTopic']."', topicIsPinned='".$c['pinTopic']."' WHERE topicID='$topicID'");
209
210                    $this->modules['DB']->query("UPDATE ".TBLPFX."forums SET forumLastPostID='$postID', forumPostsCounter=forumPostsCounter+1, forumTopicsCounter=forumTopicsCounter+1 WHERE forumID='$forumID'");
211                    $this->modules['DB']->query("UPDATE ".TBLPFX."users SET userPostsCounter=userPostsCounter+1 WHERE userID='".USERID."'");
212
213                    // Eventuell Themenabo entfernen oder hinzufuegen
214                    if($mode != 'Edit' && $this->modules['Auth']->isLoggedIn() == 1 && $this->modules['Config']->getValue('enable_email_functions') == 1 && $this->modules['Config']->getValue('enable_topic_subscription') == 1 && $c['subscribeTopic'] != $subscriptionStatus) {
215                        if($c['subscribeTopic'] == 0) $this->modules['DB']->query("DELETE FROM ".TBLPFX."topics_subscriptions WHERE topicID='$topicID' AND userID='".USERID."'");
216                        else $this->modules['DB']->query("INSERT INTO ".TBLPFX."topics_subscriptions SET topicID='$topicID', UserID='".USERID."'");
217                    }
218                    //Functions::myHeader("index.php?t=$topicID&".MYSID); exit;
219                    exit;
220                }
221            }
222        }
223
224        $show = array();
225
226        $show['enableSmilies'] = $forumData['forumEnableSmilies'] == 1;
227        $show['showSignature'] = $this->modules['Config']->getValue('enable_sig') == 1 && $this->modules['Auth']->isLoggedIn() == 1;
228        $show['enableBBCode'] = $forumData['forumEnableBBCode'] == 1;
229        $show['enableURITransformation'] = $forumData['forumEnableURITransformation'];
230        $show['enableHtmlCode'] = $forumData['forumEnableHtmlCode'] == 1;
231        $show['subscribeTopic'] = $mode != 'Edit' && $this->modules['Auth']->isLoggedIn() == 1 && $this->modules['Config']->getValue('enable_email_functions') == 1 && $this->modules['Config']->getValue('enable_topic_subscription') == 1;
232        $show['closeTopic'] = $mode != 'Edit' && $this->modules['Auth']->isLoggedIn() == 1 && ($this->modules['Auth']->getValue('userIsAdmin') == 1 || $this->modules['Auth']->getValue('userIsSupermod') == 1 || $authData['authIsMod'] == 1);
233        $show['pinTopic'] = $mode != 'Edit' && $this->modules['Auth']->isLoggedIn() == 1 && ($this->modules['Auth']->getValue('userIsAdmin') == 1 || $this->modules['Auth']->getValue('userIsSupermod') == 1 || $authData['authIsMod'] == 1);
234        $show['showEditings'] = $this->modules['Auth']->isLoggedIn() == 1 && ($this->modules['Auth']->getValue('userIsAdmin') == 1 || $this->modules['Auth']->getValue('userIsSupermod') == 1 || $authData['authIsMod'] == 1);
235        $show['pollBox'] = $mode == 'Topic' && ($this->modules['Auth']->getValue('userIsAdmin') == 1 || $this->modules['Auth']->getValue('userIsSupermod') == 1 || $authData['authIsMod'] == 1 || $authData['authPostPoll'] == 1);
236        $show['previewBox'] = isset($_POST['showPreview']);
237
238        // Smilies und Beitragsbilder laden
239        $smilies = array(); $smiliesBox = '';
240        if($show['enableSmilies'] == TRUE) {
241            $smilies = $this->modules['Cache']->getSmiliesData('write');
242            $smiliesBox = Functions::getSmiliesBox();
243        }
244        $postPicsBox = Functions::getPostPicsBox($p['smileyID']);
245
246        // Die Vorschau
247        $previewData = array();
248        if($show['previewBox'] == TRUE) {
249            if($c['enableHtmlCode'] != 1 || $show['enableHtmlCode'] == FALSE) $previewData['messageText'] = Functions::HTMLSpecialChars($p['messageText']);
250            if($c['enableSmilies'] == 1 && $show['enableSmilies'] == TRUE) $previewData['messageText'] = strtr($previewData['messageText'],$smilies);
251            $previewData['messageText'] = nl2br($previewData['messageText']);
252            if($c['enableBBCode'] == 1 && $show['enableBBCode'] == TRUE) $previewData['messageText'] = Functions::BBCode($previewData['messageText']);
253            $previewData['messageTitle'] = Functions::HTMLSpecialChars($p['messageTitle']);
254        }
255
256        // Fuer die richtige Anzeige des Navileiste usw.
257        $this->modules['Navbar']->addCategories($forumData['catID']);
258        $this->modules['Navbar']->addElement(Functions::HTMLSpecialChars($forumData['forumName']),INDEXFILE.'?action=ViewForum&amp;forumID='.$forumID.'&amp;'.MYSID);
259
260        if($mode == 'Topic') {
261            $actionText = $this->modules['Language']->getString('Post_topic');
262            $this->modules['Navbar']->addElement($this->modules['Language']->getString('Post_topic'),INDEXFILE.'?action=Posting&amp;mode=Topic&amp;forumID='.$forumID.'&amp;'.MYSID);
263        }
264        elseif($mode == 'Reply') {
265            $actionText = $this->modules['Language']->getString('Post_reply');
266            $this->modules['Navbar']->addElements(
267                array(Functions::HTMLSpecialChars($topicData['topicTitle']),INDEXFILE.'?action=ViewTopic&amp;topicID='.$topicID.'&amp;'.MYSID),
268                array($this->modules['Language']->getString('Post_reply'),INDEXFILE.'?action=Posting&amp;mode=Reply&amp;topicID='.$topicID.'&amp;'.MYSID)
269            );
270        }
271        elseif($mode == 'Edit') {
272            $actionText = $this->modules['Language']->getString('Edit_post');
273            $this->modules['Navbar']->addElements(
274                array(Functions::HTMLSpecialChars($topicData['topicTitle']),INDEXFILE.'?action=ViewTopic&amp;topicID='.$topicID.'&amp;'.MYSID),
275                array($this->modules['Language']->getString('Edit_post'),INDEXFILE.'?action=Posting&amp;mode=Edit&amp;PostID='.$postID.'&amp;'.MYSID)
276            );
277        }
278
279        //
280        // Der Rest...
281        //
282        $title_max_chars = sprintf($this->modules['Language']->getString('Maximum_x_chars'),100);
283
284        $this->modules['Template']->assign(array(
285            'p'=>Functions::HTMLSpecialChars(Functions::StripSlashes($p)),
286            'c'=>$c,
287            'actionText'=>$actionText,
288            'show'=>$show,
289            'pollOptionsCounter'=>count($p['pollOptions']),
290            'forumID'=>$forumID,
291            'topicID'=>$topicID,
292            'postID'=>$postID,
293            'mode'=>$mode,
294            'error'=>$error,
295            'postPicsBox'=>$postPicsBox,
296            'smiliesBox'=>$smiliesBox
297        ));
298        $this->modules['PageParts']->printPage('Posting.tpl');
299    }
300
301    protected function _authenticateUser(&$mode,&$forumData) {
302        $authData = Functions::getAuthData($forumData,array('authPostTopic','authPostReply','authPostPoll','authEditPosts','authIsMod'));
303        if($mode == 'Reply' && $authData['authPostReply'] == 0 || $mode == 'Edit' && $authData['authEditPosts'] == 0 || $mode == 'Topic' && $authData['authPostTopic'] == 0) {
304            // TODO
305            die('Leider kein Zugriff');
306        }
307
308        return $authData;
309    }
310}
311
312?>
Note: See TracBrowser for help on using the repository browser.