QUOTE(Ghost @ Oct 22 2005, 07:59 PM)
Trong đó tiếng Anh không hà, bạn hướng dẫn bằng tiếng việt giúp mình với, mình là Newbie chẳng biết gì cả
Ok, bắt đầu nhé.
Mở file index.php
Tìm:
CODE
'findpost' => array( 'findpost' , 'findpost' ),
Thêm bên dưới:
CODE
//thanks
'thanks' => array( 'misc/thx_machine' , 'thanks' ),
//thanks
Mở file /sources/topics.php
Tìm:
CODE
if ($this->topic['poll_state'] == 'closed')
{
return "<{A_POLLONLY_B}>";
}
return $this->html->button_posting(
"{$ibforums->base_url}act=Post&CODE=02&f=".$this->forum['id']."&t=".$this->topic['tid'],
"<{A_REPLY}>" );
}
Thêm dưới:
CODE
//--------------------------------------------------------------
// Render the thanks button
//--------------------------------------------------------------
function thanks_button()
{
global $ibforums;
if ($this->topic['state'] == 'moved')
{
return;
}
if ($this->topic['poll_state'] == 'closed')
{
return;
}
if ($this->forum['allow_thanks'])
{
return $this->html->button_posting(
"{$ibforums->base_url}act=thanks&f=".$this->forum['id']."&t=".$this->topic['tid'], "<{A_THANKS}>" );
}
return;
}
Tìm:
CODE
$this->topic['REPLY_BUTTON'] = $this->reply_button();
Thêm dưới:
CODE
//thanks
$this->topic['THANKS_BUTTON'] = $this->thanks_button();
//thanks
Mở: /sources/moderate.php
TÌm:
CODE
if ( $linked_topic = $DB->fetch_row() )
{
$DB->simple_exec_query( array( 'delete' => 'topics', 'where' => "tid=".$linked_topic['tid'] ) );
Thêm dưới:
CODE
//thanks
$DB->simple_exec_query( array( 'delete' => 'thanks', 'where' => "topic_id=".$linked_topic['tid'] ) );
//thanks
Mở file /sources/lib/modfunctions.php
Tìm:
CODE
//------------------------------------
// Remove polls assigned to this topic
//------------------------------------
$DB->simple_exec_query( array( 'delete' => 'topics', 'where' => "tid".$tid ) );
Thêm dưới:
CODE
//------------------------------------
// Remove thanks assigned to this topic
//------------------------------------
$DB->simple_exec_query( array( 'delete' => 'thanks', 'where' => "topic_id".$tid ) );
Tìm:
CODE
//---------------------------------------
// delete the post
//---------------------------------------
$DB->simple_exec_query( array( 'delete' => 'posts', 'where' => "pid".$pid ) );
Thêm dưới:
CODE
//---------------------------------------
// delete thanks
//---------------------------------------
$DB->simple_exec_query( array( 'delete' => 'thanks', 'where' => "post_id".$pid ) );
Mở file /sources/admin/ad_forums.php
TÌm:
CODE
$ibforums->html .= $ibforums->adskin->add_td_row( array( "<b>Allow Polls in this forum (when
allowed)?</b>" ,
$ibforums->adskin->form_yes_no("allow_poll",
$forum['allow_poll'] )
) );
Thêm dưới:
CODE
//thanks
$ibforums->html .= $ibforums->adskin->add_td_row( array( "<b>Activate the 'Thank You' function
for this Forum?</b>" ,
$ibforums->adskin->form_yes_no("allow_thanks",
$forum['allow_thanks'] )
) );
//thanks
Tìm (2 lần):
CODE
'allow_poll' => $ibforums->input['allow_poll'],
Thêm dưới:
CODE
//thanks
'allow_thanks' => $ibforums->input['allow_thanks'],
//thanks
Mở: /sources/admin/ad_member.php
Tìm:
CODE
//-------------------------------
// Delete member messages...
//-------------------------------
$DB->simple_exec_query( array( 'delete' => 'message_topics', 'where' => "mt_owner_id".$mids ) );
$DB->simple_exec_query( array( 'delete' => 'contacts' , 'where' => "member_id".$mids." or contact_id".$mids )
);
Thêm dưới:
CODE
//-------------------------------
// Delete member thanks.
//-------------------------------
$DB->simple_exec_query( array( 'delete' => 'thanks', 'where' => "member_id".$mids ) );
Mở file: /sources/admin/ad_rebuild.php
Tìm:
CODE
//-------------------------------
// Bye....
//-------------------------------
$ibforums->admin->redirect( $url, $text, 0, $time );
}
Thêm dưới:
CODE
/*-------------------------------------------------------------------------*/
// REBUILD 'THANKS' POSTS
/*-------------------------------------------------------------------------*/
function rebuild_thanks()
{
global $ibforums, $DB, $std, $forums;
require_once( ROOT_PATH.'sources/lib/post_parser.php' );
$parser = new post_parser();
//-------------------------------
// Set up
//-------------------------------
$done = 0;
$sep_char = ",";
$start = intval( $ibforums->input['st'] );
$end = intval( $ibforums->input['pergo'] ) ? intval( $ibforums->input['pergo'] ) : 100;
$end += $start;
$output = array();
//-------------------------------
// Got any more?
//-------------------------------
$tmp = $DB->simple_exec_query( array( 'select' => 'thank_id', 'from' => 'thanks', 'where' =>
"thank_id > $end GROUP BY topic_id", 'order' => 'thank_id ASC' ) );
$max = intval( $tmp['thank_id'] );
//-------------------------------
// Avoid limit...
//-------------------------------
$DB->simple_construct( array( 'select' => 'post_id, topic_id', 'from' => 'thanks', 'where' => "thank_id
>= $start and thank_id < $end GROUP BY topic_id", 'order' => 'topic_id ASC' ) );
$outer = $DB->simple_exec();
//-------------------------------
// Process...
//-------------------------------
while( $r = $DB->fetch_row( $outer ) )
{
$parser->quote_open = 0;
$parser->quote_closed = 0;
$parser->quote_error = 0;
$parser->error = '';
$parser->image_count = 0;
$post_id = $r['post_id'];
$user_list = "";
$num = 0;
$g = "";
$DB->query("SELECT m.id, m.name, m.mgroup
FROM ".SQL_PREFIX."thanks t LEFT JOIN ".SQL_PREFIX."members m ON
(t.member_id=m.id)
WHERE t.topic_id=".$r['topic_id']."
ORDER BY thank_date");
$num = intval($DB->get_num_rows());
while($row = $DB->fetch_row())
{
$g = $ibforums->cache['group_cache'][$row['mgroup']];
$user_list .= "<a
href='{$ibforums->board_url}/index.{$ibforums->vars['php_ext']}?showuser=".$row['id']."'>".$g['prefix'].$row['name'].$g['suf
fix']."</a>{$sep_char} ";
}
$user_list = preg_replace( "/".preg_quote($sep_char)."$/", "", trim($user_list) );
$rawpost = preg_replace (array("/<#NUM#>/", "/<#LIST#>/"), array($num, $user_list),
$ibforums->vars['thank_text']);
$newpost = $parser->convert( array( 'TEXT' => $rawpost,
'SMILIES' => 1,
'CODE' => 1,
'HTML' => 0
) );
if ( $newpost )
{
$DB->do_update( 'posts', array( 'post' => $newpost ), 'pid='.$post_id );
}
$done++;
}
//-------------------------------
// Finish - or more?...
//-------------------------------
if ( ! $done and ! $max )
{
//-------------------------------
// Done..
//-------------------------------
$text = "<b>Rebuild completed</b><br />".implode( "<br />", $output );
$url = "act=rebuild";
$time = 2;
}
else
{
//-------------------------------
// More..
//-------------------------------
$text = "<b>Up to $end processed so far, continuing...</b><br />".implode( "<br />",
$output );
$url =
"act=rebuild&code=".$ibforums->input['code'].'&pergo='.$ibforums->input['pergo'].'&st='.$end;
$time = 0;
}
//-------------------------------
// Bye....
//-------------------------------
$ibforums->admin->redirect( $url, $text, 0, $time );
}
/*-------------------------------------------------------------------------*/
// CLEAN THANKS
/*-------------------------------------------------------------------------*/
function clean_thanks()
{
global $ibforums, $DB, $std, $forums;
//-------------------------------
// Set up
//-------------------------------
$done = 0;
$to_del = array();
$cache = array();
$pass = 0;
$start = intval( $ibforums->input['st'] );
$end = intval( $ibforums->input['pergo'] ) ? intval( $ibforums->input['pergo'] ) : 100;
$end += $start;
$output = array();
//-------------------------------
// Got any more?
//-------------------------------
$tmp = $DB->simple_exec_query( array( 'select' => 'thank_id', 'from' => 'thanks', 'where' =>
"thank_id > $end", 'order' => 'thank_id ASC' ) );
$max = intval( $tmp['thank_id'] );
//-------------------------------
// Avoid limit...
//-------------------------------
$DB->simple_construct( array( 'select' => '*', 'from' => 'thanks', 'where' => "thank_id >= $start and
thank_id < $end", 'order' => 'thank_id ASC' ) );
$outer = $DB->simple_exec();
//-------------------------------
// Process...
//-------------------------------
while( $r = $DB->fetch_row( $outer ) )
{
//-------------------------------
// Does topic still exists?
//-------------------------------
$DB->simple_construct( array( 'select' => 'tid', 'from' => 'topics', 'where' => "tid = ".$r['topic_id'],
'limit' => array("0", "1") ) );
$DB->simple_exec();
$pass = $DB->get_num_rows();
//-------------------------------
// Does post still exists?
//-------------------------------
$DB->simple_construct( array( 'select' => 'pid', 'from' => 'posts', 'where' => "pid = ".$r['post_id'], 'limit' =>
array("0", "1") ) );
$DB->simple_exec();
$pass = (($pass) and ($DB->get_num_rows()));
//-------------------------------
// Does member still exists?
//-------------------------------
$DB->simple_construct( array( 'select' => 'id', 'from' => 'members', 'where' => "id = ".$r['member_id'], 'limit'
=> array("0", "1") ) );
$DB->simple_exec();
$pass = (($pass) and ($DB->get_num_rows()));
//-------------------------------
// Check for dups?
//-------------------------------
$pass = (($pass) and (!$cache[$r['topic_id']][$r['member_id']]));
$cache[$r['topic_id']][$r['member_id']]++;
//-------------------------------
// Do we passed the test?
//-------------------------------
if (!$pass)
{
$to_del[] = $r['thank_id'];
}
$done++;
}
if ( count($to_del) > 0 )
{
$ids_to_del = " IN(".implode(",",$to_del).")";
$DB->simple_exec_query( array( 'delete' => 'thanks', 'where' => "thank_id".$ids_to_del ) );
}
//-------------------------------
// Finish - or more?...
//-------------------------------
if ( ! $done and ! $max )
{
//-------------------------------
// Done..
//-------------------------------
$text = "<b>Cleanup completed</b><br />".implode( "<br />", $output );
$url = "act=rebuild";
$time = 2;
}
else
{
//-------------------------------
// More..
//-------------------------------
$text = "<b>Up to $end processed so far, continuing...</b><br />".implode( "<br />",
$output );
$url =
"act=rebuild&code=".$ibforums->input['code'].'&pergo='.$ibforums->input['pergo'].'&st='.$end;
$time = 0;
}
//-------------------------------
// Bye....
//-------------------------------
$ibforums->admin->redirect( $url, $text, 0, $time );
}
TÌm:
CODE
$ibforums->html .= $ibforums->adskin->end_form('Remove orphaned photos');
$ibforums->html .= $ibforums->adskin->end_table();
//-------------------------------//
Thêm dưới:
CODE
//-------------------------------
// Clean up orphaned 'thanks' entries
//-------------------------------
$ibforums->html .= $ibforums->adskin->start_form( array( 1 => array( 'code' , 'cleanthanks' ),
2 => array( 'act' , 'rebuild' ),
) );
$ibforums->adskin->td_header[] = array( " " , "60%" );
$ibforums->adskin->td_header[] = array( " " , "40%" );
$ibforums->html .= $ibforums->adskin->start_table( "Clean 'thanks' entries" );
$ibforums->html .= $ibforums->adskin->add_td_row( array( "<b>Remove orphaned and duplicate
'thanks' entries</b><div style='color:gray'>This will check and remove all orphaned 'thanks' entries not assigned to a member or
a topic.</div>This is moderately resource intensive.",
$ibforums->adskin->form_simple_input( 'pergo', '500', 5 ). " Per Cycle"
) );
$ibforums->html .= $ibforums->adskin->end_form('Clean table');
$ibforums->html .= $ibforums->adskin->end_table();
//-------------------------------
// Rebuild 'thanks' posts
//-------------------------------
$ibforums->html .= $ibforums->adskin->start_form( array( 1 => array( 'code' , 'rebuildthanks' ),
2 => array( 'act' , 'rebuild' ),
) );
$ibforums->adskin->td_header[] = array( " " , "60%" );
$ibforums->adskin->td_header[] = array( " " , "40%" );
$ibforums->html .= $ibforums->adskin->start_table( "Rebuild 'thanks' posts" );
$ibforums->html .= $ibforums->adskin->add_td_row( array( "<b>Rebuild 'thanks' posts</b><div
style='color:gray'>This will rebuild the 'thanks' post content. Useful if you've changed or removed a lot of members or just
changed 'thanks' text.</div>This is moderately resource intensive.",
$ibforums->adskin->form_simple_input( 'pergo', '500', 5 ). " Per Cycle"
) );
$ibforums->html .= $ibforums->adskin->end_form('Rebuild posts');
$ibforums->html .= $ibforums->adskin->end_table();
//-------------------------------//
##############################
Vào ACP -> Skins & Templates -> Skin Manager -> *skin* -> Edit Root Skin Replacement Macros -> Add Macro
Điền như sau:
Variable: A_THANKS
Replacement: <img src='style_images/<#IMG_DIR#>/t_thanks.gif' border='0' alt='Thank you!' />
Vào ACP -> Skins & Templates -> Skin Manager -> *skin* -> Edit Root Skin Template HTML -> Topic View -> TableFooter
Tìm:
CODE
<!--IBF.QUICK_REPLY_CLOSED-->{$data[TOPIC][REPLY_BUTTON]}
Thêm đằng trước:
CODE
{$data[TOPIC][THANKS_BUTTON]}
Mở /lang/*/lang_error.php
Tìm:
$lang = array (
Thêm dưới:
CODE
//thanks
'no_self_thank' => "You can not thank yourself",
'double_thank' => "You already said 'Thank You', once is enough",
//thanks
############################
Upload các file vào đúng các folder
############################
Upload file thx_db.php vào thư mục gốc forum và chạy bằng trình duyệt
Xong!!!
$$$$$$$$$$$$$$$$$$$$$
Điều chỉnh trong ACP:
Vào ACP -> System settings -> View All General Settings -> Thx Machine điều chỉnh các thông số cần thiết
Register một nick mới để dùng như nick để cảm ơn.
Vào Manage forums để điều chỉnh những forum nào muốn bật tính năng Thank you.
Have fun!!!