[COMMENT] /* +-------------------------------------------------------------------------- | Invision Board v1.3 | ======================================== | > Mod_Installer | > Module written by Peter(Pit) | > Peter member at ibforen.de, Pit member at invisionize.com | > email: Peter@ibforen.de | | > Mod_Installer Version Number: 1.2e (2005-09-04) | > 2003 by Peter | | > This is the CodeChange.php for Mod Enhanced Topics by Peter +-------------------------------------------------------------------------- */ [COMMENT_END] [INTERFACE] 'title' => 'Enhanced Topics', 'sub_title' => 'Start und Ende von Themen und private Themen und anderes', 'category' => 'Major Mod', 'compatible' => 'Invision Power Board 1.3', 'version' => '1.1.0', 'author' => 'Peter', 'email' => 'Peter@ibforen.de', 'mod_token' => 'mod_enhanced_topics', [INTERFACE_END] [HISTORY] [b]Version 1.1.0[/b] [List][*]Kompatibel mit Mod Admin Lang Tool und Mod Security&Updates [*]Bugfix für private Umfragen (Schritt 16, A) Neuinstallation mit dem ModInstaller notwendig [/list] [b]Version 1.0.9[/b] [List][*]Fix für Datumsbug (eine Stunde oder mehr zu früh etc.) [*]Daten der Veröffentlichung bzw. Schließung in der Themenhistorie (nur für Themen, die nach dieser Installation bearbeitet werden) [b]Achtung[/b] Datenbanktabelle ibf_topics wird ergänzt und einige Dateien verändert. Neuinstallation mit dem ModInstaller notwendig [/list] [b]Beschreibung[/b] [List][*]Definiert Start- und Endezeit von Themen und steuert damit das Erscheinen und Enden von Themen bzw. Umfragen. [*]Ermöglicht den Mitgliedern private Themen [*]Stellt Foren auf nur private Themen ein [*]Markiert neue Beiträge seit letztem Besuch, einstellbar im ACP [*]Daten der Veröffentlichung bzw. Schließung in der Themenhistorie [*]Kompatibel mit PHP5, mySQL5 [*]Kompatibel mit Mod Antispam [/list] [HISTORY_END] [SQL] [QUERY] ALTER TABLE ibf_topics ADD private tinyint(1) DEFAULT 0 AFTER start_date [QUERY] ALTER TABLE ibf_topics ADD move_forum smallint(5) DEFAULT NULL AFTER start_date [QUERY] ALTER TABLE ibf_topics ADD end_date int(10) DEFAULT 0 AFTER start_date [QUERY] ALTER TABLE ibf_topics ADD release_date int(10) DEFAULT 0 AFTER start_date [QUERY] ALTER TABLE ibf_topics ADD not_released tinyint(1) DEFAULT 0 AFTER end_date [QUERY] ALTER TABLE ibf_topics ADD not_ended tinyint(1) DEFAULT 0 AFTER not_released [QUERY] ALTER TABLE ibf_forums ADD f_private tinyint(1) DEFAULT 0 [QUERY] ALTER TABLE ibf_forums ADD f_all_private tinyint(1) DEFAULT 0 [QUERY] ALTER TABLE ibf_groups ADD g_private tinyint(1) DEFAULT 0 [QUERY] ALTER TABLE ibf_topics CHANGE private private tinyint(1) DEFAULT 0 [QUERY] ALTER TABLE ibf_topics CHANGE end_date end_date int(10) DEFAULT 0 [QUERY] ALTER TABLE ibf_topics CHANGE release_date release_date int(10) DEFAULT 0 [QUERY] ALTER TABLE ibf_forums CHANGE f_private f_private tinyint(1) DEFAULT 0 [QUERY] ALTER TABLE ibf_forums CHANGE f_all_private f_all_private tinyint(1) DEFAULT 0 [QUERY] ALTER TABLE ibf_groups CHANGE g_private g_private tinyint(1) DEFAULT 0 [SQL_END] [CODE] [MOD_TOKEN] mod_enhanced_topics [FNAME] index.php [STEP] [SEARCH] if ( $ibforums->input['act'] == 'home' ) [INSERT] //-- mod_enhanced_topics begin $mod_enhanced_topics_act = $choice[ $ibforums->input['act']]; if ($mod_enhanced_topics_act == "Boards" || $mod_enhanced_topics_act == "Forums" || $mod_enhanced_topics_act == "Topics" || $mod_enhanced_topics_act == "Post" || ($mod_enhanced_topics_act == "home" && !$ibforums->vars['csite_on']) ) { $act_time = time(); $DB->query("SELECT * FROM ibf_topics WHERE ((release_date<>'0' OR release_date IS NOT NULL) AND release_date<='$act_time') OR ((end_date<>'0' OR end_date IS NOT NULL) AND end_date<='$act_time') "); if ($DB->get_num_rows()) { if (!class_exists("enhanced_topics")) { require ROOT_PATH."sources/mods/enhanced_topics/mod_enhanced_topics_func.php"; $mod_enhanced_topics = new enhanced_topics; } while ($topic = $DB->fetch_row()) { $mod_enhanced_topics->update_topic($topic); } } if ($mod_enhanced_topics_act == "Post") { if (!class_exists("enhanced_topics")) { require ROOT_PATH."sources/mods/enhanced_topics/mod_enhanced_topics_func.php"; $mod_enhanced_topics = new enhanced_topics; } } } //-- mod_enhanced_topics end [MODE] insert_above [FNAME_END] [MOD_TOKEN] mod_enhanced_topics [FNAME] sources/browsebuddy.php [STEP] [SEARCH] $DB->query("SELECT COUNT(pid) as posts FROM ibf_posts WHERE post_date > '".$ibforums->member['last_visit']."' AND queued <> 1 AND forum_id IN($forum_string)"); [INSERT] //-- mod_enhanced_topics begin $this->act_time = time(); $this->can_enhanced_topics = ($ibforums->member['mgroup'] == $ibforums->vars['admin_group']) || ($ibforums->member['id'] && $ibforums->member['g_is_supmod']); if (!$this->can_enhanced_topics) $DB->query("SELECT COUNT(p.pid) as posts FROM ibf_posts p LEFT JOIN ibf_topics t ON (p.topic_id=t.tid) WHERE p.post_date > '{$ibforums->member['last_visit']}' AND (t.release_date='0' OR (t.release_date IS NULL) OR (t.release_date<='{$this->act_time}')) AND (t.private IS NULL OR (t.private='0') OR (t.private<>'0' AND t.starter_id='{$ibforums->member['id']}')) AND p.queued <> 1 AND p.forum_id IN($forum_string)"); else //-- mod_enhanced_topics end [MODE] insert_above [FNAME_END] [MOD_TOKEN] mod_enhanced_topics [FNAME] sources/functions.php [STEP] [SEARCH] $DB->query("SELECT moderator.mid as is_mod, [INSERT] //-- mod_enhanced_topics begin if (TRUE) $DB->query("SELECT m.*,g.*, moderator.mid as is_mod, moderator.forum_id as mod_fid, moderator.allow_warn FROM ibf_members m LEFT JOIN ibf_groups g ON (g.g_id=m.mgroup) LEFT JOIN ibf_moderators moderator ON (moderator.member_id=m.id OR moderator.group_id=m.mgroup ) WHERE m.id=$member_id"); else //-- mod_enhanced_topics end [MODE] insert_above [STEP] [SEARCH] $this->member = $DB->fetch_row(); [INSERT] //-- mod_enhanced_topics begin if ($this->member['is_mod']) { $this->member['mod_forums'][$this->member['mod_fid']] = 1; while ($r = $DB->fetch_row()) { $this->member['mod_forums'][$r['mod_fid']] = 1; } } //-- mod_enhanced_topics end [MODE] insert_below [FNAME_END] [MOD_TOKEN] mod_enhanced_topics [FNAME] sources/Forums.php [STEP] [SEARCH] // Query the database to see how many topics there are in the forum //+---------------------------------------------------------------- [INSERT] //-- mod_enhanced_topics begin $this->act_time = time(); $this->can_enhanced_topics = ($ibforums->member['mgroup'] == $ibforums->vars['admin_group']) || (is_array($ibforums->member['mod_forums']) && isset($ibforums->member['mod_forums'][$this->forum['id']]) ) || ($ibforums->member['id'] && $ibforums->member['g_is_supmod']); if (!$this->can_enhanced_topics) $DB->query("SELECT COUNT(tid) as max FROM ibf_topics WHERE forum_id=".$this->forum['id']." AND ((release_date='0') OR (release_date IS NULL) OR (release_date<='{$this->act_time}')) AND (private IS NULL OR (private='0') OR (private<>'0' AND starter_id='{$ibforums->member['id']}')) AND approved=1 AND (pinned=1 OR last_post > $Prune)"); else //-- mod_enhanced_topics end [MODE] insert_below [STEP] [SEARCH] $this->output .= $this->render_entry( $topic ); [INSERT] //-- mod_enhanced_topics begin if (!$this->can_enhanced_topics) { if ($topic['release_date'] && $topic['release_date'] > $this->act_time) continue; if ($topic['private'] && $topic['starter_id'] != $ibforums->member['id']) continue; if ($topic['private'] && $topic['starter_id'] == $ibforums->member['id']) $topic['title'] = "<{B_HOT}> ".$topic['title']; } else { $title = ""; if ($topic['release_date'] && $topic['release_date'] > $this->act_time) $title = "<{WARN_ADD}> "; if ($topic['end_date'] && $topic['end_date'] > $this->act_time) $title .= "<{WARN_MINUS}> "; $topic['title'] = $title.$topic['title']; if ($topic['private']) $topic['title'] = "<{B_HOT}>  ".$topic['title']; } //-- mod_enhanced_topics end [MODE] insert_above [FNAME_END] [MOD_TOKEN] mod_enhanced_topics [FNAME] sources/Moderate.php [STEP] [SEARCH] $this->output .= $this->html->topic_history($data); [INSERT] //-- mod_enhanced_topics begin $lang = $std->load_words($lang, "mod_enhanced_topics_lang", $ibforums->lang_id); $time = time(); if ($topic['release_date']) { $started = $std->get_date($topic['release_date'], "LONG", false, true); $desc = $topic['release_date'] < $time?$lang['topic_was_started']:$lang['topic_started']; $match = "`^(.*)(.*?pformleftw.*?".preg_quote($ibforums->lang['th_last_date']).")`is"; $insert = " $desc $started "; $this->output = preg_replace($match, "\\1".$insert."\\2", $this->output); } if ($topic['end_date']) { $closed = $std->get_date($topic['end_date'], "LONG", false, true); $desc = $topic['end_date'] < $time?$lang['topic_was_closed']:$lang['topic_closed']; $match = "`^(.*)(.*?pformleftw.*?".preg_quote($ibforums->lang['th_last_date']).")`is"; $insert = " $desc ".$closed." "; $this->output = preg_replace($match, "\\1".$insert."\\2", $this->output); } //-- mod_enhanced_topics end [MODE] insert_below [FNAME_END] [MOD_TOKEN] mod_enhanced_topics [FNAME] sources/Online.php [STEP] [SEARCH] $tid_string = implode( ",", $tid_array ); [INSERT] //-- mod_enhanced_topics begin $time = time(); if ($ibforums->member['mgroup'] != $ibforums->vars['admin_group']) $DB->query("SELECT tid, title FROM ibf_topics WHERE tid IN ($tid_string) AND ((release_date IS NULL) OR release_date<='$time') AND (private IS NULL OR (private='0') OR (private<>'0' AND (starter_id='{$ibforums->member['id']}'))) "); else //-- mod_enhanced_topics end [MODE] insert_below [FNAME_END] [MOD_TOKEN] mod_enhanced_topics [FNAME] sources/Post.php [STEP] [SEARCH] // Require and run our associated library file for this action. [INSERT] //-- mod_enhanced_topics begin $this->can_enhanced_topics = ($ibforums->member['mgroup'] == $ibforums->vars['admin_group']) || (is_array($ibforums->member['mod_forums']) && isset($ibforums->member['mod_forums'][$this->forum['id']]) ) || ($ibforums->member['id'] && $ibforums->member['g_is_supmod']); $this->can_post_private = ($ibforums->member['mgroup'] == $ibforums->vars['admin_group'] || $ibforums->member['g_private']) && $this->forum['f_private'] && !$this->forum['f_all_private']; //-- mod_enhanced_topics end [MODE] insert_above [STEP] [SEARCH] // Redirect to the newest topic in the forum [INSERT] //-- mod_enhanced_topics begin $time = time(); if (!$this->can_enhanced_topics) $DB->query("SELECT tid from ibf_topics WHERE forum_id='".$this->forum['id']."' AND approved=1 AND ((release_date IS NULL ) OR release_date<='$time') AND (private IS NULL OR (private='0') OR (private<>'0' AND starter_id='{$ibforums->member['id']}')) ORDER BY last_post DESC LIMIT 0,1"); else //-- mod_enhanced_topics end [MODE] insert_below [FNAME_END] [MOD_TOKEN] mod_enhanced_topics [FNAME] sources/Search.php [STEP] [SEARCH] if (! $ibforums->vars['allow_search']) [INSERT] //-- mod_enhanced_topics begin $this->is_admin = $ibforums->member['mgroup'] == $ibforums->vars['admin_group']; $this->act_time = time(); //-- mod_enhanced_topics end [MODE] insert_above [STEP] [SEARCH] $DB->query("SELECT pid FROM ibf_posts WHERE queued <> 1 AND forum_id IN($forums) AND author_id=$mid"); [INSERT] //-- mod_enhanced_topics begin if ($ibforums->member['mgroup'] != $ibforums->vars['admin_group']) $DB->query("SELECT p.pid FROM ibf_posts p LEFT JOIN ibf_topics t ON (p.topic_id=t.tid) WHERE ((t.release_date IS NULL) OR (t.release_date<='{$this->act_time}')) AND (t.private IS NULL OR (t.private='0') OR (t.private<>'0' AND t.starter_id='{$ibforums->member['id']}')) AND (p.queued <> 1) AND p.forum_id IN($forums) AND p.author_id='$mid'"); else //-- mod_enhanced_topics end [MODE] insert_above [STEP] [SEARCH] $DB->query("SELECT t.tid FROM ibf_topics t WHERE t.approved=1 AND t.forum_id IN($forums) AND t.last_post > '".$ibforums->member['last_visit']."'"); [INSERT] //-- mod_enhanced_topics begin if (!$this->is_admin) $DB->query("SELECT t.tid FROM ibf_topics t WHERE (t.approved=1) AND t.forum_id IN($forums) AND ((t.release_date IS NULL ) OR t.release_date<='{$this->act_time}') AND (t.private IS NULL OR (t.private='0') OR (t.private<>'0' AND t.starter_id='{$ibforums->member['id']}')) AND t.last_post > '".$ibforums->member['last_visit']."'"); else //-- mod_enhanced_topics end [MODE] insert_above [STEP] [SEARCH] $DB->query("SELECT p.*, t.*, f.id as forum_id, f.name as forum_name FROM ibf_forums f, ibf_posts p, ibf_topics t WHERE p.queued <> 1 AND p.forum_id IN($forums) AND p.author_id='".$ibforums->member['id']."' AND t.tid=p.topic_id AND f.id=p.forum_id ORDER BY p.post_date DESC LIMIT 0,10"); [INSERT] //-- mod_enhanced_topics begin if (!$this->is_admin) $DB->query("SELECT p.*, t.*, f.id as forum_id, f.name as forum_name FROM ibf_forums f, ibf_posts p, ibf_topics t WHERE p.queued <> 1 AND p.forum_id IN($forums) AND p.author_id='".$ibforums->member['id']."' AND ((t.release_date IS NULL) OR (t.release_date<='{$this->act_time}')) AND (t.private IS NULL OR (t.private='0') OR (t.private<>'0' AND t.starter_id='{$ibforums->member['id']}')) AND t.tid=p.topic_id AND f.id=p.forum_id ORDER BY p.post_date DESC LIMIT 0,10"); else //-- mod_enhanced_topics end [MODE] insert_above [STEP] [SEARCH] ORDER BY t.last_post DESC LIMIT 0,200"; [INSERT] //-- mod_enhanced_topics begin $query = str_replace("WHERE", "WHERE ((t.release_date IS NULL) OR t.release_date<='{$this->act_time}') AND ((t.private IS NULL) OR (t.private='0') OR (t.private<>'0' AND t.starter_id='{$ibforums->member['id']}')) AND ", $query); $query = str_replace("DISTINCT(t.tid)", "DISTINCT(t.tid), t.release_date,t.private,t.starter_id ", $query); //-- mod_enhanced_topics end [MODE] insert_below [STEP] [SEARCH] $topics = ""; while ($row = $DB->fetch_row() ) { [INSERT] //-- mod_enhanced_topics begin if (!$this->is_admin) { if ($row['release_date'] && $row['release_date'] >$this->act_time) { $max_hits -= 1; continue; } if ($row['private'] && $row['starter_id'] != $ibforums->member['id']) { $max_hits -= 1; continue; } } //-- mod_enhanced_topics end [MODE] insert_below [STEP] [SEARCH] $row['keywords'] = $url_words; $this->output .= $this->html->RenderRow( $this->parse_entry($row) ); } [INSERT] //-- mod_enhanced_topics begin if (!$this->is_admin) { if ($row['release_date'] && $row['release_date'] >$this->act_time) { continue; } if ($row['private'] && $row['starter_id'] != $ibforums->member['id']) { continue; } } //-- mod_enhanced_topics end [MODE] insert_above [FNAME_END] [MOD_TOKEN] mod_enhanced_topics [FNAME] sources/Topics.php [STEP] [SEARCH] $this->forum = array( 'id' => $this->topic['forum_id'] , [INSERT] //-- mod_enhanced_topics begin $title = $this->topic['title']; $this->can_enhanced_topics = ($ibforums->member['mgroup'] == $ibforums->vars['admin_group']) || (is_array($ibforums->member['mod_forums']) && isset($ibforums->member['mod_forums'][$this->topic['forum_id']]) ) || ($ibforums->member['id'] && $ibforums->member['g_is_supmod']); if ($this->can_enhanced_topics) { global $mod_enhanced_topics; if (!class_exists("enhanced_topics")) { require_once ROOT_PATH."sources/mods/enhanced_topics/mod_enhanced_topics_func.php"; $mod_enhanced_topics = new enhanced_topics; } $this->topic['title'] = $mod_enhanced_topics->update_topic_title($this->topic); if ($this->topic['private']) { $this->topic['title'] = "<{B_HOT}>  ".$this->topic['title']; } } else { if ($this->topic['release_date'] > time()) { $std->boink_it($ibforums->base_url); } if ($this->topic['private']) { if ($this->topic['starter_id'] == $ibforums->member['id']) { global $mod_enhanced_topics; if (!class_exists("enhanced_topics")) { require_once ROOT_PATH."sources/mods/enhanced_topics/mod_enhanced_topics_func.php"; $mod_enhanced_topics = new enhanced_topics; } $this->topic['title'] = "<{B_HOT}>  ".$this->topic['title']; } else { $std->boink_it($ibforums->base_url); } } } //-- mod_enhanced_topics end [MODE] insert_above [STEP] [SEARCH] $row['post_date'] = $std->get_date( $row['post_date'], 'LONG' ); [INSERT] //-- mod_enhanced_topics begin if ($ibforums->vars['enhanced_topics_newpost']) { $ibforums->lang = $std->load_words($ibforums->lang, 'mod_enhanced_topics_lang', $ibforums->lang_id); if ($ibforums->member['id']) { if ($row['post_date'] >= $ibforums->member['last_visit']) { $read_status = "{$ibforums->lang[  "; } else { $read_status = "{$ibforums->lang[  "; } } else { $read_status = ""; } } //-- mod_enhanced_topics end [MODE] insert_above [STEP] [SEARCH] $row['ip_address'] = $this->view_ip($row, $poster); [INSERT] //-- mod_enhanced_topics begin $row['post_icon'] = $read_status.$row['post_icon']; //-- mod_enhanced_topics end [MODE] insert_above [STEP] [SEARCH] $print->do_output( array( 'TITLE' => $ibforums->vars['board_name']." -> {$this->topic['title']}", [INSERT] /*-- mod_enhanced_topics exclude begin [MODE] insert_above [STEP] [SEARCH] $print->do_output( array( 'TITLE' => $ibforums->vars['board_name']." -> {$this->topic['title']}", [INSERT] -- mod_enhanced_topics exclude end */ //-- mod_enhanced_topics begin $print->do_output( array( 'TITLE' => $ibforums->vars['board_name']." -> $title", //-- mod_enhanced_topics end [MODE] insert_below [FNAME_END] [MOD_TOKEN] mod_enhanced_topics [FNAME] sources/Admin/ad_forums.php [STEP] [SEARCH] $DB->query("SELECT COUNT(tid) as count FROM ibf_topics WHERE approved=1 and forum_id='".$IN['f']."'"); [INSERT] /*-- mod_enhanced_topics exclude begin [MODE] insert_above [STEP] [SEARCH] $last_post = $DB->fetch_row(); [INSERT] -- mod_enhanced_topics exclude end */ //-- mod_enhanced_topics begin $time = time(); $hide = "((t.release_date IS NULL) OR (t.release_date<='$time')) AND ((t.private IS NULL) OR (t.private='0'))"; $DB->query("SELECT COUNT(t.tid) as count FROM ibf_topics t WHERE t.approved=1 AND $hide AND t.forum_id='".$IN['f']."'"); $topics = $DB->fetch_row(); $DB->query("SELECT COUNT(p.pid) as count FROM ibf_posts p LEFT JOIN ibf_topics t ON (t.tid=p.topic_id) WHERE $hide AND p.queued <> 1 and p.forum_id='".$IN['f']."'"); $posts = $DB->fetch_row(); $DB->query("SELECT t.tid, t.title, t.last_poster_id, t.last_poster_name, t.last_post FROM ibf_topics t WHERE $hide AND t.approved=1 and t.forum_id='".$IN['f']."' ORDER BY t.last_post DESC LIMIT 0,1"); $last_post = $DB->fetch_row(); //-- mod_enhanced_topics end [MODE] insert_below [STEP] [SEARCH] $ADMIN->html.*?SKIN->form_yes_no("FORUM_HTML" [INSERT] //-- mod_enhanced_topics begin $this->lang = $std->load_words($this->lang, 'mod_enhanced_topics_lang', $ADMIN->lang_id); $ADMIN->html .= $SKIN->add_td_basic( $this->lang['enhanced_topics_title'], 'left', 'catrow2' ); $ADMIN->html .= $SKIN->add_td_row( array( $this->lang['ad_private_forum'] , $SKIN->form_yes_no("f_private", $forum['f_private'] ) ) ); $ADMIN->html .= $SKIN->add_td_row( array( $this->lang['ad_all_private_forum'] , $SKIN->form_yes_no("f_all_private", $forum['f_all_private'] ) ) ); $ADMIN->html .= $SKIN->add_td_spacer(); //-- mod_enhanced_topics end [MODE] reg_insert_above [STEP] [SEARCH] 'notify_modq_emails'=> $IN['notify_modq_emails'], [INSERT] //-- mod_enhanced_topics begin 'f_private' => $IN['f_private'], 'f_all_private' => $IN['f_all_private'], //-- mod_enhanced_topics end [MODE] insert_below [FNAME_END] [MOD_TOKEN] mod_enhanced_topics [FNAME] sources/Admin/ad_groups.php [STEP] [SEARCH] 'g_email_limit' => intval($IN['join_limit']).':'.intval($IN['join_flood']), [INSERT] //-- mod_enhanced_topics begin 'g_private' => $IN['g_private'], //-- mod_enhanced_topics end [MODE] insert_below [STEP] [SEARCH] $ADMIN->html.*?SKIN->form_yes_no("g_post_new_topics" [INSERT] //-- mod_enhanced_topics begin $this->lang = $std->load_words($this->lang, 'mod_enhanced_topics_lang', $ADMIN->lang_id); $ADMIN->html .= $SKIN->add_td_row( array( $this->lang['ad_private_group'] , $SKIN->form_yes_no("g_private", $group['g_private'] ) ) ); //-- mod_enhanced_topics end [MODE] reg_insert_above [FNAME_END] [MOD_TOKEN] mod_enhanced_topics [FNAME] sources/Admin/ad_settings.php [STEP] [SEARCH] $DB->query("SELECT COUNT(pid) as posts FROM ibf_posts WHERE queued <> 1"); [INSERT] /*-- mod_enhanced_topics exclude begin [MODE] insert_above [STEP] [SEARCH] $DB->query("SELECT COUNT(tid) as topics FROM ibf_topics WHERE approved = 1"); [INSERT] -- mod_enhanced_topics exclude end */ //-- mod_enhanced_topics begin $time = time(); $hide = "((t.release_date IS NULL) OR (t.release_date<='$time')) AND ((t.private IS NULL) OR t.private='0')"; $DB->query("SELECT COUNT(p.pid) as posts FROM ibf_posts p LEFT JOIN ibf_topics t ON (t.tid=p.topic_id) WHERE $hide AND p.queued <> 1"); $r = $DB->fetch_row(); $stats['TOTAL_REPLIES'] = $r['posts']; $stats['TOTAL_REPLIES'] < 1 ? 0 : $stats['TOTAL_REPLIES']; $DB->query("SELECT COUNT(t.tid) as topics FROM ibf_topics t WHERE t.approved=1 AND $hide"); //-- mod_enhanced_topics end [MODE] insert_below [STEP] [SEARCH] $INFO['post_order_sort'] ? $INFO['post_order_sort'] : 'asc' ) ) ); [INSERT] //-- mod_enhanced_topics begin $ibforums->lang = $std->load_words($ibforums->lang, 'mod_enhanced_topics_lang', $ADMIN->lang_id); $ADMIN->html .= $SKIN->add_td_row( array( $ibforums->lang['ad_posts_show_new'] , $SKIN->form_yes_no( "enhanced_topics_newpost", $INFO['enhanced_topics_newpost'] ) ) ); //-- mod_enhanced_topics end [MODE] insert_below [STEP] [SEARCH] 'strip_quotes', [INSERT] //-- mod_enhanced_topics begin 'enhanced_topics_newpost', //-- mod_enhanced_topics end [MODE] insert_below [FNAME_END] [MOD_TOKEN] mod_enhanced_topics [FNAME] sources/lib/modfunctions.php [STEP] [SEARCH] // Get the forum last poster.. //---------------------------------------------- [INSERT] //-- mod_enhanced_topics begin $act_time = time(); if (TRUE) $DB->query("SELECT tid, title, last_poster_id, last_poster_name, last_post FROM ibf_topics WHERE approved=1 AND forum_id=$fid AND (release_date='0' OR (release_date IS NULL) OR (release_date<='$act_time')) AND ((private IS NULL) OR (private='0')) ORDER BY last_post DESC LIMIT 0,1"); else //-- mod_enhanced_topics end [MODE] insert_below [FNAME_END] [MOD_TOKEN] mod_enhanced_topics [FNAME] sources/lib/post_edit_post.php [STEP] [SEARCH] // Update topic title? //------------------------------------------------- [INSERT] //-- mod_enhanced_topics begin if ( $this->edit_title != 1 && $class->can_post_private) { $private = $ibforums->input['private']; if ($private != $this->topic['private']) { global $mod_enhanced_topics; $dbs = $DB->compile_db_update_string( array( 'private' => $private, ) ); $DB->query("UPDATE ibf_topics SET $dbs WHERE tid=".$this->topic['tid']); $mod_enhanced_topics->update_forum($this->topic['forum_id']); } } else //-- mod_enhanced_topics end [MODE] insert_below [STEP] [SEARCH] if ( ($ibforums->input['TopicTitle'] != $this->topic['title']) or ($ibforums->input['TopicDesc'] != $this->topic['description']) ) [INSERT] //-- mod_enhanced_topics begin if ($class->can_enhanced_topics) { global $mod_enhanced_topics; $release_date = $mod_enhanced_topics->check("start"); if ($release_date == "-1") { $std->Error( array( LEVEL => 1, MSG => 'error_date') ); } $end_date = $mod_enhanced_topics->check("end"); if ($end_date == "-1") { $std->Error( array( LEVEL => 1, MSG => 'error_date') ); } if ($end_date && $release_date >= $end_date) { $std->Error( array( LEVEL => 1, MSG => 'error_date_range') ); } $move_forum = $ibforums->input['move_forum']; if ($mod_enhanced_topics->changed($this->topic, $release_date, $end_date, $move_forum)) { $dbs = $DB->compile_db_update_string( array( 'release_date' => $release_date, 'end_date' => $end_date, 'not_released' => $release_date <> '', 'not_ended' => $end_date <> '', 'move_forum' => $move_forum, ) ); $DB->query("UPDATE ibf_topics SET $dbs WHERE tid=".$this->topic['tid']); $mod_enhanced_topics->update_forum($this->topic['forum_id']); } } if ($class->can_post_private) { $private = $ibforums->input['private']; if ($private != $this->topic['private']) { global $mod_enhanced_topics; $dbs = $DB->compile_db_update_string( array( 'private' => $private, ) ); $DB->query("UPDATE ibf_topics SET $dbs WHERE tid=".$this->topic['tid']); $mod_enhanced_topics->update_forum($this->topic['forum_id']); } } //-- mod_enhanced_topics end [MODE] insert_above [STEP] [SEARCH] // Is this the first post in the topic? //------------------------------------------------- [INSERT] //-- mod_enhanced_topics begin if ( $this->edit_title != 1 && $class->can_post_private) { global $mod_enhanced_topics; $topic_title = $mod_enhanced_topics->show_form_private($this->topic['private']); } else //-- mod_enhanced_topics end [MODE] insert_below [STEP] [SEARCH] $topic_title = $class->html->topictitle_fields( array( 'TITLE' => $topic_title, 'DESC' => $topic_desc ) ); [INSERT] //-- mod_enhanced_topics begin if ($class->can_post_private) { global $mod_enhanced_topics; $topic_title .= $mod_enhanced_topics->show_form_private($this->topic['private']); } if ($class->can_enhanced_topics) { global $mod_enhanced_topics; $topic_title .= $mod_enhanced_topics->show_form($this->topic); } //-- mod_enhanced_topics end [MODE] insert_below [FNAME_END] [MOD_TOKEN] mod_enhanced_topics [FNAME] sources/lib/post_new_post.php [STEP] [SEARCH] // Build the master array //------------------------------------------------- [INSERT] //-- mod_enhanced_topics begin if ($class->can_enhanced_topics) { global $mod_enhanced_topics; $release_date = $mod_enhanced_topics->check("start"); if ($release_date == "-1") { $std->Error( array( LEVEL => 1, MSG => 'error_date') ); } $end_date = $mod_enhanced_topics->check("end"); if ($end_date == "-1") { $std->Error( array( LEVEL => 1, MSG => 'error_date') ); } if ($end_date && $release_date >= $end_date) { $std->Error( array( LEVEL => 1, MSG => 'error_date_range') ); } if ($release_date && $release_date > time()) $class->obj['moderate'] = 0; } if ($class->forum['f_all_private']) { $private = 1; } else { $private = $ibforums->input['private']; if (!$class->can_post_private) { $private = '0'; } } //-- mod_enhanced_topics end [MODE] insert_below [STEP] [SEARCH] 'start_date' => time(), [INSERT] //-- mod_enhanced_topics begin 'release_date' => $release_date, 'end_date' => $end_date, 'not_released' => $release_date <> '', 'not_ended' => $end_date <> '', 'move_forum' => $ibforums->input['move_forum'], 'private' => $private, //-- mod_enhanced_topics end [MODE] insert_below [STEP] [SEARCH] $this->post['pid'] = $DB->get_insert_id(); [INSERT] //-- mod_enhanced_topics begin if ($private) { global $mod_enhanced_topics; $mod_enhanced_topics->update_members_post($class); $std->boink_it($class->base_url."act=ST&f={$class->forum['id']}&t={$this->topic['tid']}"); } if ($class->can_enhanced_topics && $release_date && $release_date > time()) { $std->boink_it($class->base_url."act=ST&f={$class->forum['id']}&t={$this->topic['tid']}"); } //-- mod_enhanced_topics end [MODE] insert_below [STEP] [SEARCH] $class->output = preg_replace( "//" , "$start_table" , $class->output ); [INSERT] //-- mod_enhanced_topics begin if ($class->can_post_private) { global $mod_enhanced_topics; $topic_title .= $mod_enhanced_topics->show_form_private(); } if ($class->can_enhanced_topics) { global $mod_enhanced_topics; $topic_title .= $mod_enhanced_topics->show_form($topic_title); } //-- mod_enhanced_topics end [MODE] insert_above [FNAME_END] [MOD_TOKEN] mod_enhanced_topics [FNAME] sources/lib/post_poll.php [STEP] [SEARCH] // Build the master array //------------------------------------------------- [INSERT] //-- mod_enhanced_topics begin if ( $ibforums->input['TopicTitle'] != "" ) { if ($class->can_enhanced_topics) { global $mod_enhanced_topics; $release_date = $mod_enhanced_topics->check("start"); if ($release_date == "-1") { $std->Error( array( LEVEL => 1, MSG => 'error_date') ); } $end_date = $mod_enhanced_topics->check("end"); if ($end_date == "-1") { $std->Error( array( LEVEL => 1, MSG => 'error_date') ); } if ($end_date && $release_date >= $end_date) { $std->Error( array( LEVEL => 1, MSG => 'error_date_range') ); } if ($release_date && $release_date > time()) $class->obj['moderate'] = 0; } if ($class->forum['f_all_private']) { $private = 1; } else { $private = $ibforums->input['private']; if (!$class->can_post_private) { $private = '0'; } } } //-- mod_enhanced_topics end [MODE] insert_below [STEP] [SEARCH] 'start_date' => time(), [INSERT] //-- mod_enhanced_topics begin 'release_date' => $release_date, 'end_date' => $end_date, 'not_released' => $release_date <> '', 'not_ended' => $end_date <> '', 'move_forum' => $ibforums->input['move_forum'], 'private' => $private, //-- mod_enhanced_topics end [MODE] insert_below [STEP] [SEARCH] $DB->query("INSERT INTO ibf_polls (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")"); [INSERT] //-- mod_enhanced_topics begin if ($private) { global $mod_enhanced_topics; $mod_enhanced_topics->update_members_post($class); $std->boink_it($class->base_url."act=ST&f={$class->forum['id']}&t={$this->topic['tid']}"); } if ($class->can_enhanced_topics && $release_date && $release_date > time()) { $std->boink_it($class->base_url."act=ST&f={$class->forum['id']}&t={$this->topic['tid']}"); } //-- mod_enhanced_topics end [MODE] insert_below [STEP] [SEARCH] $class->output = preg_replace( "//" , "$start_table" , $class->output ); [INSERT] //-- mod_enhanced_topics begin if ($class->can_post_private) { global $mod_enhanced_topics; $topic_title .= $mod_enhanced_topics->show_form_private(); } if ($class->can_enhanced_topics) { global $mod_enhanced_topics; $topic_title .= $mod_enhanced_topics->show_form($topic_title); } //-- mod_enhanced_topics end [MODE] insert_above [FNAME_END] [MOD_TOKEN] mod_enhanced_topics [FNAME] sources/lib/post_q_reply_post.php [STEP] [SEARCH] if ( $class->obj['moderate'] == 1 or $class->obj['moderate'] == 3 ) [INSERT] //-- mod_enhanced_topics begin if ($class->can_enhanced_topics) { $release_date = $this->topic['release_date']; if ($release_date && $release_date > time()) $class->obj['moderate'] = 0; } //-- mod_enhanced_topics end [MODE] insert_above [STEP] [SEARCH] //------------------------------------------------- // If we are still here, lets update the [INSERT] //-- mod_enhanced_topics begin if ($class->forum['f_all_private']) { $private = 1; } else { $private = $this->topic['private']; if (!$class->can_post_private) { $private = '0'; } } if ($private) { global $mod_enhanced_topics; $mod_enhanced_topics->update_private_topic($class, $this); $std->boink_it($class->base_url."act=ST&f={$class->forum['id']}&t={$this->topic['tid']}"); } if ($class->can_enhanced_topics && $release_date && $release_date > time()) { $std->boink_it($class->base_url."act=ST&f={$class->forum['id']}&t={$this->topic['tid']}"); } //-- mod_enhanced_topics end [MODE] insert_above [FNAME_END] [MOD_TOKEN] mod_enhanced_topics [FNAME] sources/lib/post_reply_post.php [STEP] [SEARCH] if ( $class->obj['moderate'] == 1 or $class->obj['moderate'] == 3 ) [INSERT] //-- mod_enhanced_topics begin if ($class->can_enhanced_topics) { $release_date = $this->topic['release_date']; if ($release_date && $release_date > time()) $class->obj['moderate'] = 0; } //-- mod_enhanced_topics end [MODE] insert_above [STEP] [SEARCH] //------------------------------------------------- // If we are still here, lets update the [INSERT] //-- mod_enhanced_topics begin if ($class->forum['f_all_private']) { $private = 1; } else { $private = $this->topic['private']; if (!$class->can_post_private) { $private = '0'; } } if ($private) { global $mod_enhanced_topics; $mod_enhanced_topics->update_private_topic($class, $this); $std->boink_it($class->base_url."act=ST&f={$class->forum['id']}&t={$this->topic['tid']}"); } if ($class->can_enhanced_topics && $release_date && $release_date > time()) { $std->boink_it($class->base_url."act=ST&f={$class->forum['id']}&t={$this->topic['tid']}"); } //-- mod_enhanced_topics end [MODE] insert_above [FNAME_END] [MOD_TOKEN] mod_enhanced_topics [FNAME] sources/lib/search_mysql_ftext.php [STEP] [SEARCH] if ( $ibforums->input['sortby'] != "relevant" ) [INSERT] //-- mod_enhanced_topics begin if ($ibforums->member['mgroup'] != $ibforums->vars['admin_group']) { $time = time(); $hide = "WHERE ((t.release_date IS NULL) OR t.release_date<='$time') AND "; $hide .= "((t.private IS NULL) OR (t.private='0') OR (t.private='{$ibforums->member['id']}')) AND "; $cache = str_replace("WHERE", $hide , $cache); } //-- mod_enhanced_topics end [MODE] insert_above [STEP] [SEARCH] //------------------------------------------------ // Get the topic ID's to serialize and store into [INSERT] //-- mod_enhanced_topics begin if ($ibforums->member['mgroup'] != $ibforums->vars['admin_group']) { $time = time(); $hide = " AND ((t.release_date IS NULL) OR (t.release_date<='$time')) AND "; $hide .= "((t.private IS NULL) OR t.private='0' OR (t.private='{$ibforums->member['id']}')) "; $topics_query .= $hide; $posts_query = preg_replace("` LEFT JOIN ibf_topics t ON \(.*?\)`is", "", $posts_query); $posts_query = str_replace("ibf_posts p", "ibf_posts p LEFT JOIN ibf_topics t ON (p.topic_id=t.tid)", $posts_query); $posts_query .= $hide; } //-- mod_enhanced_topics end [MODE] insert_above [FNAME_END] [MOD_TOKEN] mod_enhanced_topics [FNAME] sources/lib/search_mysql_man.php [STEP] [SEARCH] //------------------------------------------------ // Get the topic ID's to serialize and store into [INSERT] //-- mod_enhanced_topics begin if ($ibforums->member['mgroup'] != $ibforums->vars['admin_group']) { $time = time(); $hide = " AND ((t.release_date IS NULL ) OR (t.release_date<='$time')) AND "; $hide .= "((t.private IS NULL) OR (t.private='0') OR (t.private='{$ibforums->member['id']}')) "; $topics_query .= $hide; $posts_query = preg_replace("` LEFT JOIN ibf_topics t ON \(.*?\)`is", "", $posts_query); $posts_query = str_replace("ibf_posts p", "ibf_posts p LEFT JOIN ibf_topics t ON (p.topic_id=t.tid)", $posts_query); $posts_query .= $hide; } //-- mod_enhanced_topics end [MODE] insert_above [FNAME_END] [CODE_END] [COPY] Kopiere alle Dateien des Archivs in das Root-Verzeichnis deines Boards und behalte dabei die Struktur bei. [List] [*]sources [arrow] sources [*]lang/en [arrow] lang/en [*]lang/de [arrow] lang/xx (xx = Das Verzeichnis mit den deutschen Sprachdateien) [/list] [COPY_END] [CUSTOMIZE] [CUSTOMIZE_END] [COMMENT_MOD] [size=3][b]Datieren von Themen[/b][/size] Für Administratoren und Moderatoren steht beim Erstellen und Bearbeiten von Themen und Umfragen ein neuer Optionenbereich zur Verfügung [color=blue][b]Optionen für die Veröffentlichung[/b][/color] [list][*]Dieser Bereich ist zunächst verdeckt, da er vermutlich nicht so häufig verwendet wird. [*]Nach dem Öffnen können das Erscheinungsdatum und das Endedatum eines Themas oder einer Umfrage eingestellt werden. Zusätzlich kann für ein festgelegtes Endedatum noch bestimmt werden, ob das Thema in ein anderes Forum (Trash, Archiv) verschoben werden soll. [*]Noch nicht erschienene Themen tauchen in der Suche nicht auf. Ebenso werden sie noch nicht in der Statistik (Boardstatistik, Forumstatistik) mitgezählt. Erst wenn das Thema erscheint, werden die Daten aktualisiert. [*]Administratoren und Moderatoren sehen die Themen, die zur Veröffentlichung anstehen. Ein rotes [color=red][b]+[/b][/color] kennzeichnet Themen, die erst noch in der Zukunft erscheinen. Ein [color=blue][b]-[/b][/color] symbolisiert ein eingestelltes Endedatum. [*]Nach dem Erscheinen bzw. nach dem Ende eines Themas erhält dies einen normalen Status. [*]In der Suche können nur Administratoren diese besonderen Themen sehen, Moderatoren jedoch nicht. [*]Wegen dieser neuen Möglichkeiten sind umfangreiche Änderungen an den Scriptdateien notwendig. Am besten wird der Mod mit dem ModInstaller installiert, der auch gleich die 3 zusätzlichen Felder inder Tabelle ibf_topics anlegt. [*]Die Modifikationen verursacht in den Ansichten Board, Forum, Topic und Post jeweils eine zusätzliche Datenbankabfrage (query), damit die betroffenen Topics aktualisiert werden können. Ist eine Aktualisierung notwendig, dann entstehen natürlich weitere Abfragen. [/list] [size=3][b]Private Themen[/b][/size] Private Themen sind nicht öffentliche Themen in Foren, die nur Administratoren, Moderatoren und der Autor selbst sehen können. Administratoren können Gruppen die Berechtigung für private Themen geben. Die Mitglieder dieser Gruppen können aber nur in denjenigen Foren private Themen erstellen, für die der Administrator das Erstellen privater Themen erlauibt hat. Es sind also zwei Schritte notwendig, bevor private Themen erstellt werden können: [list][*]Der Gruppe muss die Berechtigung erteilt werden [*]Das Forum muss private Themen erlauben [/list] [COMMENT_MOD_END] [HISTORY_OLD] [b]Version 1.0.9[/b] [List][*]Fix für Datumsbug (eine Stunde oder mehr zu früh etc.) [*]Daten der Veröffentlichung bzw. Schließung in der Themenhistorie (nur für Themen, die nach dieser Installation bearbeitet werden) [b]Achtung[/b] Datenbanktabelle ibf_topics wird ergänzt und einige Dateien verändert. Neuinstallation mit dem ModInstaller notwendig [/list] [b]Version 1.0.8[/b] [List][*]Anpassung an Mod Antispam [/list] [b]Version 1.0.7[/b] [List][*]Anpassung älterer Versionen (<1.0.5) an mySQL5 [/list] [b]Version 1.0.6[/b] [List][*]Bugfixes unter mySQL5 [/list] [b]Version 1.0[/b] [List][*]Definiert Start- und Endezeit von Themen und steuert damit das Erscheinen und Enden von Themen bzw. Umfragen. [*]Ermöglicht den Mitgliedern private Themen [*]Stellt Foren auf nur private Themen ein [*]Markiert neue Beiträge seit letztem Besuch, einstellbar im ACP [/list] [HISTORY_OLD_END]