source: trunk/modules/EditTopic.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: 10.1 KB
Line 
1<?php
2
3class EditTopic extends ModuleTemplate {
4    protected $requiredModules = array(
5        'Auth',
6        'DB',
7        'Language',
8        'Navbar',
9        'PageParts',
10        'Template'
11    );
12
13    public function executeMe() {
14        $topicID = isset($_GET['topicID']) ? $_GET['topicID'] : 0;
15        $mode = isset($_GET['mode']) ? $_GET['mode'] : 'edit';
16
17        if($this->modules['Auth']->isLoggedIn() != 1) die('Access denied: not logged in');
18        elseif(!$topicData = Functions::getTopicData($topicID)) die('Cannot load data: topic');
19        elseif($topicData['topicMovedID'] != 0) die('Cannot edit topic: moved topic');
20        elseif(!$forumData = Functions::getForumData($topicData['forumID'])) die('Cannot load data: forum');
21
22        $forumID = &$topicData['forumID'];
23
24        $authData = Functions::getAuthData($forumData,array('authEditPosts','authIsMod'));
25
26        $this->modules['Navbar']->addElements(
27            array(Functions::HTMLSpecialChars($forumData['forumName']),INDEXFILE."?action=ViewForum&amp;forumID=$forumID&amp;".MYSID),
28            array(Functions::HTMLSpecialChars($topicData['topicTitle']),INDEXFILE."?action=ViewTopic&amp;topicID=$topicID&amp;".MYSID)
29        );
30
31        if($mode == 'Edit') {
32            if((USERID != $topicData['posterID'] || $authData['authEditPosts'] != 1) && $this->modules['Auth']->getValue('userIsAdmin') != 1 && $this->modules['Auth']->getValue('userIsSupermod') != 1 && $authData['authIsMod'] != 1) die('Access denied: unsufficient rights');
33
34            $error = '';
35
36            $p = Functions::getSGValues($_POST['p'],array('topicTitle','smileyID'),'',Functions::addSlashes($topicData));
37
38            if(isset($_GET['doit'])) {
39                if(trim($p['topicTitle']) == '') $error = $this->modules['Language']->getString('error_no_title');
40                else {
41                    $this->modules['DB']->query("
42                        UPDATE
43                            ".TBLPFX."topics
44                        SET
45                            topicTitle='".$p['topicTitle']."',
46                            smileyID='".$p['smileyID']."'
47                        WHERE
48                            topicID='$topicID'
49                    ");
50
51                    $this->modules['DB']->query("
52                        UPDATE
53                            ".TBLPFX."posts
54                        SET
55                            postTitle='".$p['topicTitle']."',
56                            smileyID='".$p['smileyID']."'
57                        WHERE
58                            postID='".$topicData['topicFirstPostID']."'
59                    ");
60
61                    Functions::myHeader(INDEXFILE."?action=ViewTopic&topicID=$topicID&".MYSID);
62                }
63            }
64
65            $postPicsBox = Functions::getPostPicsBox($p['smileyID']);
66
67            $this->modules['Navbar']->addElement($this->modules['Language']->getString('Edit_topic'),'');
68
69            $this->modules['Template']->assign(array(
70                'p'=>Functions::HTMLSpecialChars(Functions::stripSlashes($p)),
71                'error'=>$error,
72                'postPicsBox'=>$postPicsBox,
73                'topicID'=>$topicID
74            ));
75            $this->modules['PageParts']->printPage('EditTopicEdit.tpl');
76        }
77        else {
78            if($this->modules['Auth']->getValue('userIsAdmin') != 1 && $authData['authIsMod'] != 1 && $this->modules['Auth']->getValue('userIsSupermod') != 1) die('Access denied: insufficient rights');
79            switch(@$_GET['mode']) {
80                case 'Pinn':
81                    $this->modules['DB']->query("
82                        UPDATE
83                            ".TBLPFX."topics
84                        SET
85                            topicIsPinned='".(($topicData['topicIsPinned'] == 1) ? 0 : 1)."'
86                        WHERE
87                            topicID='$topicID'
88                    ");
89
90                    Functions::myHeader(INDEXFILE."?action=ViewTopic&topicID=$topicID&".MYSID);
91                break;
92
93                case 'OpenClose':
94                    $topicIsClosed = ($topicData['topicIsClosed'] == 1) ? 0 : 1;
95
96                    $this->modules['DB']->query("
97                        UPDATE
98                            ".TBLPFX."topics
99                        SET
100                            topicIsClosed='$topicIsClosed'
101                        WHERE
102                            topicID='$topicID'
103                    ");
104
105                    Functions::myHeader(INDEXFILE."?action=ViewTopic&topicID=$topicID&".MYSID);
106                break;
107
108                case 'Delete':
109                    $topic_posts_ids = array();
110                    $this->modules['DB']->query("SELECT post_id FROM ".TBLPFX."posts WHERE topicID='$topicID'");
111                    while(list($akt_post_id) = $this->modules['DB']->fetch_array())
112                        $topic_posts_ids[] = $akt_post_id;
113
114                    $topic_posts_counter = count($topic_posts_ids);
115
116                    $this->modules['DB']->query("SELECT COUNT(*) AS poster_posts_counter, poster_id FROM ".TBLPFX."posts WHERE topicID='$topicID' GROUP BY poster_id");
117                    $DB_data = $this->modules['DB']->raw2array();
118                    while(list(,$akt_data) = each($DB_data)) {
119                        $this->modules['DB']->query("UPDATE ".TBLPFX."users SET user_posts=user_posts-".$akt_data['poster_posts_counter']." WHERE user_id='".$akt_data['poster_id']."'");
120                    }
121
122                    $this->modules['DB']->query("UPDATE ".TBLPFX."forums SET forum_posts_counter=forum_posts_counter-$topic_posts_counter, forum_topics_counter=forum_topics_counter-1 WHERE forumID='$forumID'");
123                    $this->modules['DB']->query("DELETE FROM ".TBLPFX."topics WHERE topicID='$topicID'");
124                    $this->modules['DB']->query("DELETE FROM ".TBLPFX."posts WHERE post_id IN ('".implode("','",$topic_posts_ids)."')");
125                    $this->modules['DB']->query("DELETE FROM ".TBLPFX."topics_subscriptions WHERE topicID='$topicID'");
126
127                    if($topicData['topic_poll'] == 1) {
128                        $this->modules['DB']->query("SELECT poll_id FROM ".TBLPFX."polls WHERE topicID='$topicID'");
129                        if($this->modules['DB']->affected_rows == 1) {
130                            list($topic_poll_id) = $this->modules['DB']->fetch_array();
131
132                            $this->modules['DB']->query("DELETE FROM ".TBLPFX."polls WHERE poll_id='$topic_poll_id'");
133                            $this->modules['DB']->query("DELETE FROM ".TBLPFX."polls_options WHERE poll_id='$topic_poll_id'");
134                            $this->modules['DB']->query("DELETE FROM ".TBLPFX."polls_votes WHERE poll_id='$topic_poll_id'");
135                        }
136                    }
137
138                    if($forumID != 0) {
139                        if(in_array($forumData['forum_last_post_id'],$topic_posts_ids) == TRUE) update_forum_last_post($forumID);
140                        header("Location: index.php?action=viewforum&forumID=$forumID&$MYSID"); exit;
141                    }
142                    header("Location: index.php?$MYSID"); exit;
143                break;
144
145                case 'Move':
146                    $p = Functions::getSGValues($_POST['p'],array('targetForumID'),0);
147                    $c = Functions::getSGValues($_POST['c'],array('createReference'),1);
148
149                    $error = '';
150
151                    if(isset($_GET['doit'])) {
152                        if(!$targetForumData = getForumData($p['targetForumID'])) $error = $this->modules['Language']->getString('error_invalid_forum');
153                        else {
154                            $this->modules['DB']->query("UPDATE ".TBLPFX."topics SET forumID='".$p['targetForumID']."' WHERE topicID='$topicID'");
155                            $this->modules['DB']->query("UPDATE ".TBLPFX."posts SET forumID='".$p['targetForumID']."' WHERE topicID='$topicID'");
156
157                            if($topicData['topicHasPoll'] == 1)
158                                $this->modules['DB']->query("UPDATE ".TBLPFX."polls SET forumID='".$p['targetForumID']."' WHERE topicID='$topicID'");
159
160                            $this->modules['DB']->query("SELECT COUNT(*) AS topicPostsCounter FROM ".TBLPFX."posts WHERE topicID='$topicID'");
161                            list($topicPostsCounter) = $this->modules['DB']->fetchArray();
162
163                            $this->modules['DB']->query("UPDATE ".TBLPFX."forums SET forumTopicsCounter=forumTopicsCounter-1, forumPostsCounter=forumPostsCounter-$topicPostsCounter WHERE forumID='$forumID'");
164                            $this->modules['DB']->query("UPDATE ".TBLPFX."forums SET forumTopicsCounter=forumTopicsCounter+1, forumPostsCounter=forumPostsCounter+$topicPostsCounter WHERE forumID='".$p['targetForumID']."'");
165
166                            if($c['createReference'] == 1) {
167                                $slashedTopicData = Functions::addSlashes($topicData);
168                                $this->modules['DB']->query("
169                                    INSERT INTO
170                                        ".TBLPFX."topics
171                                    SET
172                                        forumID='$forumID',
173                                        posterID='".$slashedTopicData['posterID']."',
174                                        topicIsClosed='".$slashedTopicData['topicIsClosed']."',
175                                        topicIsPinned='".$slashedTopicData['topicIsPinned']."',
176                                        smileyID='".$slashedTopicData['smileyID']."',
177                                        topicRepliesCounter='".$slashedTopicData['topicRepliesCounter']."',
178                                        topicViewsCounter='".$slashedTopicData['topicViewsCounter']."',
179                                        topicHasPoll='".$slashedTopicData['topicHasPoll']."',
180                                        topicFirstPostID='".$slashedTopicData['topicFirstPostID']."',
181                                        topicLastPostID='".$slashedTopicData['topicLastPostID']."',
182                                        topicMovedID='".$slashedTopicData['topicMovedID']."',
183                                        topicMovedTimestamp='".$slashedTopicData['topicMovedTimestamp']."',
184                                        topicPostTimestamp='".$slashedTopicData['topicPostTimestamp']."',
185                                        topicTitle='".$slashedTopicData['topicTitle']."',
186                                        topicGuestNick='".$slashedTopicData['topicGuestNick']."'
187                                ");
188                            }
189
190
191                            // TODO: Letzten Beitrag updaten
192                            //update_forum_last_post($forumID);
193                            //update_forum_last_post($p_target_forumID);
194
195                            include_once('pheader.php');
196                            show_message($LNG['Topic_moved'],$LNG['message_topic_moved'].'<br />'.sprintf($LNG['click_here_moved_topic'],"<a href=\"index.php?action=viewtopic&amp;topicID=$topicID&amp;$MYSID\">",'</a>'));
197                            include_once('ptail.php'); exit;
198                        }
199                    }
200
201
202                    //
203                    // Kategorie- und Forendaten laden
204                    //
205                    $cats_data = cats_get_cats_data();
206                    $this->modules['DB']->query("SELECT forumID,forum_name,cat_id FROM ".TBLPFX."forums WHERE forumID<>'$forumID'");
207                    $forums_data = $this->modules['DB']->raw2array();
208
209
210                    //
211                    // Auswahlmenue fuer das Zielforum erstellen
212                    //
213                    while(list(,$akt_cat) = each($cats_data)) {
214                        $akt_prefix = '';
215                        for($i = 1; $i < $akt_cat['cat_depth']; $i++)
216                            $akt_prefix .= '--';
217
218                        $akt_option_value = '';
219                        $akt_option_text = $akt_prefix.' ('.$akt_cat['cat_name'].')';
220                        $edittopic_tpl->Blocks['optionrow']->parseCode(FALSE,TRUE);
221
222                        while(list($akt_key,$akt_forum) = each($forums_data)) {
223                            if($akt_forum['cat_id'] == $akt_cat['cat_id']) {
224                                $akt_option_value = $akt_forum['forumID'];
225                                $akt_option_text = $akt_prefix.'-- '.$akt_forum['forum_name'];
226                                $edittopic_tpl->Blocks['optionrow']->parseCode(FALSE,TRUE);
227
228                                unset($forums_data[$akt_key]);
229                            }
230                        }
231                        reset($forums_data);
232                    }
233
234                    if(count($forums_data) > 0) { // Falls noch mehr als ein Forum uebrig ist (es also noch Foren ohne Kategorie gibt)
235                        $akt_option_values = $akt_option_text = '';
236                        $edittopic_tpl->Blocks['optionrow']->parseCode(FALSE,TRUE); // Leerzeile einfuegen
237
238                        while(list(,$akt_forum) = each($forums_data)) {
239                            $akt_option_value = $akt_forum['forumID'];
240                            $akt_option_text = $akt_forum['forum_name'];
241                            $edittopic_tpl->Blocks['optionrow']->parseCode(FALSE,TRUE);
242                        }
243                    }
244
245
246                    //
247                    // Seite ausgeben
248                    //
249                    include_once('pheader.php');
250                    $edittopic_tpl->parseCode(TRUE);
251                    include_once('ptail.php');
252                break;
253            }
254        }
255    }
256}
257
258?>
Note: See TracBrowser for help on using the repository browser.