[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.2d (2005-09-11) | > 2003 -2005 by Peter | | > This is the CodeChange.php for Mod Enhanced Topics by Peter +-------------------------------------------------------------------------- */ [COMMENT_END] [INTERFACE] 'title' => 'Enhanced Topics', 'sub_title' => 'Définit la date de publication des sujets ou les rends privés, ou autre options pratiques', '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][*]Compatible avec la mod Admin Lang Tool et avec la mod Security&Updates [*]Bugfix for private polls (Step 16, A) Nouveau installation est necessaire. [/list] [b]Version 1.0.9[/b] [List][*]Fix for date bug (one or more hours too late etc.) [*]Dates of releasing or closing in topic history (only for topics modified after this update) [b]Attention[/b] Two fields must be added in database table ibf_topics. Some files have to be changed. Complete new installation is necessary. Use The ModInstaller. [/list] [b]Description[/b] [list] [*]Définit la date d'ouverture et de fermeture des sujets et sondages ainsi que la date de publication ; [*]Permet aux membres de créer des sujets privés ; [*]Permet de configurer des forums pour rendre tous les sujets privés uniquement ; [*]Marque les nouveaux sujets depuis la dernière visite si activé depuis le PCA ; [*]Dates d'ouverture ou de fermeture notées dans l'historique du sujet ; [*]Compatible avec MySQL 5 et PHP 5 ; [*]Compatible avec la 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] Copy all files of archive into the root dir of your board. Take care of the structure of this archive. [List] [*]sources [arrow] sources [*]lang/en [arrow] lang/en [*]lang/de [arrow] lang/xx (xx = dir of your German lang files) [/list] [COPY_END] [CUSTOMIZE] [CUSTOMIZE_END] [COMMENT_MOD] [size=3][b]Dating of topics[/b][/size] Administrators and moderators have a new option section in the postbox [color=blue][b]Options for Publishing[/b][/color] [list][*]Because of the rare use of this feature, this section is hidden at the first time. [*]After opening the section you can edit open end end time of your topic. In addition you can determine, where to move the topic after beeing close (e.g. archive, trash). [*]Topics appearing in the future are not shown in the search. They are not counted in statistics, too (board statistics, forum statistics). Those datas were updated, when topic is published. [*]Administrators and moderators can see topics, which are waiting for publishing. A red [color=red][b]+[/b][/color] indicates topics appearing in the future. A blue [color=blue][b]-[/b][/color] indicates topics with an end date set. [*]After having published or having closed topics get a normal state [*]Only administrators can see such topics in the search views, moderators do not see them. [*]Because of these new enhanced feature you have to modify a couple of PHP files. Best if you can use The ModInstaller, which executes the nessecary sql query to add the needed fields to table ibf_topics. [*]This modifikationen causes an additional sql query in boards view, topics view and post view in order to update concerning topics. More queries are needed, if we have any topics for update. [/list] [size=3][b]Private topics[/b][/size] Private topics are non public topics in forums, which are visible only for admins, moderators and the author himself. Admins can give permission to groups to create private topics. But the members of those groups can only create private topics in such forums, where the admin has set the permission for private topics. In summary you have to make two steps in order to enable private topics: [list][*]The group must get permission [*]The forum must allow private topics [/list] [COMMENT_MOD_END] [HISTORY_OLD] [b]Version 1.0.8[/b] [List][*]Compatible with Mod Antispam [/list] [b]Version 1.0.7[/b] [List][*]Customizing older versions (<1.0.5) to fit mySQL5 [/list] [b]Version 1.0.6[/b] [List][*]Bugfixes concerning mySQL5 [/list] [b]Version 1.0[/b] [List][*]Define start and end time of topics and polls and so control the release date. [*]Let members have private topics [*]Set forums for only private topics [*]Mark new posts since last visit if enabled in ACP [/list] [HISTORY_OLD_END]