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

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