source: trunk/modules/EditTopic.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: 9.3 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(!$forumData = Functions::getForumData($topicData['forumID'])) die('Cannot load data: forum');
20
21        $forumID = &$topicData['forumID'];
22
23        $authData = Functions::getAuthData($forumData,array('authEditPosts','authIsMod'));
24
25        $this->modules['Navbar']->addElements(
26            array(Functions::HTMLSpecialChars($forumData['forumName']),INDEXFILE."?action=ViewForum&amp;forumID=$forumID&amp;".MYSID),
27            array(Functions::HTMLSpecialChars($topicData['topicTitle']),INDEXFILE."?action=ViewTopic&amp;topicID=$topicID&amp;".MYSID)
28        );
29
30        if($mode == 'Edit') {
31            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');
32
33            $error = '';
34
35            $p = Functions::getSGValues($_POST['p'],array('topicTitle','smileyID'),'',Functions::addSlashes($topicData));
36
37            if(isset($_GET['doit'])) {
38                if(trim($p['topicTitle']) == '') $error = $this->modules['Language']->getString('error_no_title');
39                else {
40                    $this->modules['DB']->query("
41                        UPDATE
42                            ".TBLPFX."topics
43                        SET
44                            topicTitle='".$p['topicTitle']."',
45                            smileyID='".$p['smileyID']."'
46                        WHERE
47                            topicID='$topicID'
48                    ");
49
50                    $this->modules['DB']->query("
51                        UPDATE
52                            ".TBLPFX."posts
53                        SET
54                            postTitle='".$p['topicTitle']."',
55                            smileyID='".$p['smileyID']."'
56                        WHERE
57                            postID='".$topicData['topicFirstPostID']."'
58                    ");
59
60                    Functions::myHeader(INDEXFILE."?action=ViewTopic&topicID=$topicID&".MYSID);
61                }
62            }
63
64            $postPicsBox = Functions::getPostPicsBox($p['smileyID']);
65
66            $this->modules['Navbar']->addElement($this->modules['Language']->getString('Edit_topic'),'');
67
68            $this->modules['Template']->assign(array(
69                'p'=>Functions::HTMLSpecialChars(Functions::stripSlashes($p)),
70                'error'=>$error,
71                'postPicsBox'=>$postPicsBox,
72                'topicID'=>$topicID
73            ));
74            $this->modules['PageParts']->printPage('EditTopicEdit.tpl');
75        }
76        else {
77            if($USER_DATA['user_is_admin'] != 1 && $auth_data['auth_is_mod'] != 1 && $USER_DATA['user_is_supermod'] != 1) die('Kein Zugriff!');
78            switch(@$_GET['mode']) {
79                case 'Pinn':
80                    $this->modules['DB']->query("
81                        UPDATE
82                            ".TBLPFX."topics
83                        SET
84                            topicIsPinned='".(($topicData['topicIsPinned'] == 1) ? 0 : 1)."'
85                        WHERE
86                            topicID='$topicID'
87                    ");
88
89                    Functions::myHeader(INDEXFILE."?action=ViewTopic&topicID=$topicID&".MYSID);
90                break;
91
92                case 'OpenClose':
93                    $new_topic_status = ($topicData['topic_status'] == 1) ? 0 : 1;
94
95                    $DB->query("UPDATE ".TBLPFX."topics SET topic_status='$new_topic_status' WHERE topicID='$topicID'");
96
97                    header("Location: index.php?action=viewtopic&topicID=$topicID&$MYSID"); exit;
98                break;
99
100                case 'Delete':
101                    $topic_posts_ids = array();
102                    $DB->query("SELECT post_id FROM ".TBLPFX."posts WHERE topicID='$topicID'");
103                    while(list($akt_post_id) = $DB->fetch_array())
104                        $topic_posts_ids[] = $akt_post_id;
105
106                    $topic_posts_counter = count($topic_posts_ids);
107
108                    $DB->query("SELECT COUNT(*) AS poster_posts_counter, poster_id FROM ".TBLPFX."posts WHERE topicID='$topicID' GROUP BY poster_id");
109                    $DB_data = $DB->raw2array();
110                    while(list(,$akt_data) = each($DB_data)) {
111                        $DB->query("UPDATE ".TBLPFX."users SET user_posts=user_posts-".$akt_data['poster_posts_counter']." WHERE user_id='".$akt_data['poster_id']."'");
112                    }
113
114                    $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'");
115                    $DB->query("DELETE FROM ".TBLPFX."topics WHERE topicID='$topicID'");
116                    $DB->query("DELETE FROM ".TBLPFX."posts WHERE post_id IN ('".implode("','",$topic_posts_ids)."')");
117                    $DB->query("DELETE FROM ".TBLPFX."topics_subscriptions WHERE topicID='$topicID'");
118
119                    if($topicData['topic_poll'] == 1) {
120                        $DB->query("SELECT poll_id FROM ".TBLPFX."polls WHERE topicID='$topicID'");
121                        if($DB->affected_rows == 1) {
122                            list($topic_poll_id) = $DB->fetch_array();
123
124                            $DB->query("DELETE FROM ".TBLPFX."polls WHERE poll_id='$topic_poll_id'");
125                            $DB->query("DELETE FROM ".TBLPFX."polls_options WHERE poll_id='$topic_poll_id'");
126                            $DB->query("DELETE FROM ".TBLPFX."polls_votes WHERE poll_id='$topic_poll_id'");
127                        }
128                    }
129
130                    if($forumID != 0) {
131                        if(in_array($forumData['forum_last_post_id'],$topic_posts_ids) == TRUE) update_forum_last_post($forumID);
132                        header("Location: index.php?action=viewforum&forumID=$forumID&$MYSID"); exit;
133                    }
134                    header("Location: index.php?$MYSID"); exit;
135                break;
136
137                case 'Move':
138                    if($forumID == 0) die('Ankuendigungen verschieben? Wie soll das denn gehen...');
139                    $p_target_forumID = isset($_POST['p_target_forumID']) ? $_POST['p_target_forumID'] : 0;
140                    $p_create_reference = 1;
141
142                    add_navbar_items(array($LNG['Move_topic'],''));
143
144                    $error = '';
145
146                    if(isset($_GET['doit'])) {
147                        $p_create_reference = isset($_POST['p_create_reference']) ? 1 : 0;
148
149                        if(!$target_forumData = get_forumData($p_target_forumID)) $error = $LNG['error_invalid_forum'];
150                        else {
151                            $DB->query("UPDATE ".TBLPFX."topics SET forumID='$p_target_forumID' WHERE topicID='$topicID'");
152                            $DB->query("UPDATE ".TBLPFX."posts SET forumID='$p_target_forumID' WHERE topicID='$topicID'");
153
154                            if($topicData['topic_poll'] != 0)
155                                $DB->query("UPDATE ".TBLPFX."polls SET forumID='$p_target_forumID' WHERE topicID='$topicID'");
156
157                            $DB->query("SELECT COUNT(*) AS topic_posts_counter FROM ".TBLPFX."posts WHERE topicID='$topicID'");
158                            list($topic_posts_counter) = $DB->fetch_array();
159
160                            $DB->query("UPDATE ".TBLPFX."forums SET forum_topics_counter=forum_topics_counter-1, forum_posts_counter=forum_posts_counter-$topic_posts_counter WHERE forumID='$forumID'");
161                            $DB->query("UPDATE ".TBLPFX."forums SET forum_topics_counter=forum_topics_counter+1, forum_posts_counter=forum_posts_counter+$topic_posts_counter WHERE forumID='$p_target_forumID'");
162
163                            if($p_create_reference == 1)
164                                $DB->query("INSERT INTO ".TBLPFX."topics (forumID,poster_id,topic_status,topic_pic,topic_poll,topic_first_post_id,topic_last_post_id,topic_moved_id,topic_post_time,topic_title,topic_guest_nick) VALUES ('$forumID','".$topicData['poster_id']."','".$topicData['topic_status']."','".$topicData['topic_pic']."','".$topicData['topic_poll']."','".$topicData['topic_first_post_id']."','".$topicData['topic_first_post_id']."','$topicID','".$topicData['topic_post_time']."','".$topicData['topic_title']."','".$topicData['topic_guest_nick']."')");
165
166                            update_forum_last_post($forumID);
167                            update_forum_last_post($p_target_forumID);
168
169                            include_once('pheader.php');
170                                                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>'));
171                            include_once('ptail.php'); exit;
172                        }
173                    }
174
175
176                    $c = ' checked="checked"';
177                    $checked['reference'] = ($p_create_reference == 1) ? $c : '';
178
179
180                    //
181                    // Template laden
182                    //
183                    $edittopic_tpl = new Template($TEMPLATE_PATH.'/'.$TCONFIG['templates']['edittopic_move']);
184
185
186                    //
187                    // Kategorie- und Forendaten laden
188                    //
189                    $cats_data = cats_get_cats_data();
190                    $DB->query("SELECT forumID,forum_name,cat_id FROM ".TBLPFX."forums WHERE forumID<>'$forumID'");
191                    $forums_data = $DB->raw2array();
192
193
194                    //
195                    // Auswahlmenue fuer das Zielforum erstellen
196                    //
197                    while(list(,$akt_cat) = each($cats_data)) {
198                        $akt_prefix = '';
199                        for($i = 1; $i < $akt_cat['cat_depth']; $i++)
200                            $akt_prefix .= '--';
201
202                        $akt_option_value = '';
203                        $akt_option_text = $akt_prefix.' ('.$akt_cat['cat_name'].')';
204                        $edittopic_tpl->Blocks['optionrow']->parseCode(FALSE,TRUE);
205
206                        while(list($akt_key,$akt_forum) = each($forums_data)) {
207                            if($akt_forum['cat_id'] == $akt_cat['cat_id']) {
208                                $akt_option_value = $akt_forum['forumID'];
209                                $akt_option_text = $akt_prefix.'-- '.$akt_forum['forum_name'];
210                                $edittopic_tpl->Blocks['optionrow']->parseCode(FALSE,TRUE);
211
212                                unset($forums_data[$akt_key]);
213                            }
214                        }
215                        reset($forums_data);
216                    }
217
218                    if(count($forums_data) > 0) { // Falls noch mehr als ein Forum uebrig ist (es also noch Foren ohne Kategorie gibt)
219                        $akt_option_values = $akt_option_text = '';
220                        $edittopic_tpl->Blocks['optionrow']->parseCode(FALSE,TRUE); // Leerzeile einfuegen
221
222                        while(list(,$akt_forum) = each($forums_data)) {
223                            $akt_option_value = $akt_forum['forumID'];
224                            $akt_option_text = $akt_forum['forum_name'];
225                            $edittopic_tpl->Blocks['optionrow']->parseCode(FALSE,TRUE);
226                        }
227                    }
228
229
230                    //
231                    // Seite ausgeben
232                    //
233                    include_once('pheader.php');
234                    $edittopic_tpl->parseCode(TRUE);
235                    include_once('ptail.php');
236                break;
237            }
238        }
239    }
240}
241
242?>
Note: See TracBrowser for help on using the repository browser.