А может взять функцию ПМ при отправке Report'а?
| Цитата(Bastet @ 4.11.2005, 23:40) | | Посмотрела, где обрабатывается отправка ПМ на этом форуме (ты этот же скрипт используешь?): |
В принципе да, но различия конечно есть.
| Код | if ( $this->ipsclass->vars['reportpost_method'] == 'email' OR $data['members_disable_pm'] ) { $this->email->subject = $this->ipsclass->lang['report_subject'].' '.$this->ipsclass->vars['board_name']; $this->email->to = $data['email'];
$this->email->send_mail(); } else { $this->lib->to_by_id = $data['id']; $this->lib->from_member = $this->ipsclass->member; $this->lib->msg_title = $this->ipsclass->lang['report_subject'].' '.$topic['title']; $this->lib->msg_post = $this->email->message; $this->lib->force_pm = 1;
$this->lib->send_pm();
if ( $this->lib->error ) { print $this->error; exit(); } } }
$this->ipsclass->print->redirect_screen( $this->ipsclass->lang['report_redirect'], "act=ST&f=$fid&t=$tid&st=$st&#entry$pid"); }
|
Тут видишь есть даже два варианта: писать в ПМ или на мыло. Функцию проверки доступа в тему я думаю тут некуда лепить, да и незачем. Тут видишь как, даже не надо саму функцию ПМ описывать, просто реализовать как тут:
| Код | $this->lib->send_pm();
|
Но тогда загрузка сервера будет немногим больше;) Если идти по ветке, то наткнемся на саму эт функцию:
| Код |
function send_pm( $opts=array() ) { //----------------------------------------- // INIT some vars //-----------------------------------------
if ( ! $this->to and $this->to_by_id ) { //----------------------------------------- // Just an id... //-----------------------------------------
$tmp = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'name, members_display_name', 'from' => 'members', 'where' => 'id='.$this->to_by_id ) );
$this->to = $tmp['members_display_name']; }
$this->to = strtolower(str_replace( '|', '|', $this->to) );
$this->ipsclass->DB->cache_add_query( 'msg_get_cc_users', array( 'name_array' => array( 0 => "'".$this->to."'" ) ) ); $this->ipsclass->DB->simple_exec();
if ( ! $this->send_to_member = $this->ipsclass->DB->fetch_row() ) { $this->error = $this->ipsclass->lang['err_no_such_member']; return; }
$this->error = ""; $this->save_only = $opts['save_only']; $this->orig_id = $opts['orig_id']; $this->preview = $opts['preview']; $this->add_tracking = $opts['track']; $this->add_sent = $opts['add_sent']; $this->hide_cc = $opts['hide_cc'];
//----------------------------------------- // Are we simply saving this for later? //-----------------------------------------
$this->_process_save_only();
if ( $this->redirect_url ) { return; }
if ( $this->force_pm != 1 ) { //----------------------------------------- // Can the reciepient use the PM system? //-----------------------------------------
$this->ipsclass->DB->cache_add_query( 'msg_get_msg_poster', array( 'mid' => $this->send_to_member['id'] ) ); $this->ipsclass->DB->simple_exec();
$to_msg_stats = $this->ipsclass->DB->fetch_row();
if ( $to_msg_stats['g_use_pm'] != 1 OR $to_msg_stats['members_disable_pm'] ) { $this->ipsclass->input['MID'] = $this->send_to_member['id']; $this->error = $this->ipsclass->lang['no_usepm_member']; return; }
//----------------------------------------- // Does the target member have enough room // in their inbox for a new message? //-----------------------------------------
$to_msg_stats = $this->_get_real_allowance( $to_msg_stats );
if ( (($to_msg_stats['msg_total']) >= $to_msg_stats['g_max_messages']) and ($to_msg_stats['g_max_messages'] > 0) ) { $this->error = $this->ipsclass->lang['no_usepm_member']; return; }
//----------------------------------------- // Has the reciepient blocked us? //-----------------------------------------
$this->ipsclass->DB->simple_construct( array( 'select' => 'contact_id, allow_msg', 'from' => 'contacts', 'where' => "contact_id=".$this->from_member['id']." AND member_id=".$this->send_to_member['id'] ) ); $this->ipsclass->DB->simple_exec();
$can_msg = $this->ipsclass->DB->fetch_row();
if ( (isset($can_msg['contact_id'])) and ($can_msg['allow_msg'] != 1) ) { $this->ipsclass->input['MID'] = $this->send_to_member['id']; $this->error = $this->ipsclass->lang['msg_blocked']; return; }
//----------------------------------------- // Do we have enough room to store a // saved copy? //-----------------------------------------
if ($this->ipsclass->input['add_sent'] and ($this->ipsclass->member['g_max_messages'] > 0) ) { if ( ($this->msg_stats['msg_total'] + 1) >= $this->ipsclass->member['g_max_messages'] ) { $this->error = $this->ipsclass->lang['max_message_from']; return; } } }
//----------------------------------------- // CC PM stuff //-----------------------------------------
$this->can_mass_pm = 0;
if ( $this->ipsclass->member['g_max_mass_pm'] > 0 or $this->force_pm ) { $cc_array = $this->_process_cc(); }
if ( $this->error != "" ) { return; }
//----------------------------------------- // Add our original ID //-----------------------------------------
$cc_array[ $this->send_to_member['id'] ] = $this->send_to_member;
unset($to_member);
//----------------------------------------- // Insert the message body //-----------------------------------------
$count = count( $cc_array );
if ( $this->add_sent ) { // we're storing a copy locally, so // add 1 to the "sent_to_count"
$count++; }
$this->ipsclass->DB->do_insert( 'message_text', array( 'msg_date' => time(), 'msg_post' => $this->ipsclass->remove_tags($this->msg_post), 'msg_cc_users' => $this->cc_users, 'msg_sent_to_count' => $count, 'msg_post_key' => $this->class->post_key, 'msg_author_id' => $this->from_member['id'], 'msg_ip_address' => $this->ipsclass->ip_address ) );
$msg_id = $this->ipsclass->DB->get_insert_id();
//----------------------------------------- // Make attachments permanent //-----------------------------------------
$no_attachments = $this->postlib->pf_make_attachments_permanent( $this->class->post_key, "", "", $msg_id );
//----------------------------------------- // If we have an original ID - delete it and 'move' // attachments //-----------------------------------------
if ( $this->orig_id ) { $this->ipsclass->DB->cache_add_query( 'msg_get_saved_msg', array( 'mid' => $this->from_member['id'], 'msgid' => $this->orig_id ) ); $this->ipsclass->DB->simple_exec();
if( $old = $this->ipsclass->DB->fetch_row() ) { //----------------------------------------- // Update attachments //-----------------------------------------
$this->ipsclass->DB->simple_construct( array( 'update' => 'attachments', 'set' => "attach_post_key='{$this->class->post_key}', attach_msg=$msg_id", 'where' => "attach_msg={$old['msg_id']}" ) ); $this->ipsclass->DB->simple_exec();
$this->ipsclass->DB->simple_construct( array( 'delete' => 'message_topics', 'where' => "mt_id={$old['mt_id']}" ) ); $this->ipsclass->DB->simple_exec();
$this->ipsclass->DB->simple_construct( array ( 'update' => 'message_text', 'set' => 'msg_deleted_count=msg_deleted_count-1', 'where' => "msg_id={$old['msg_id']}" ) ); $this->ipsclass->DB->simple_exec();
$no_attachments = $old['mt_hasattach']; } }
//----------------------------------------- // loop.... //-----------------------------------------
foreach ($cc_array as $user_id => $to_member) { //----------------------------------------- // Sort out tracking and pop us status //-----------------------------------------
$show_popup = $to_member['view_pop'];
//----------------------------------------- // Enter the info into the DB // Target user side. //-----------------------------------------
$this->ipsclass->DB->force_data_type = array( 'mt_title' => 'string' );
$this->ipsclass->DB->do_insert( 'message_topics', array( 'mt_msg_id' => $msg_id, 'mt_date' => time(), 'mt_title' => $this->msg_title, 'mt_from_id' => $this->from_member['id'], 'mt_to_id' => $to_member['id'], 'mt_vid_folder' => 'in', 'mt_hide_cc' => 0, 'mt_tracking' => $this->add_tracking, 'mt_hasattach' => intval($no_attachments), 'mt_owner_id' => $to_member['id'], 'mt_hide_cc' => $this->hide_cc, ) );
$mt_id = $this->ipsclass->DB->get_insert_id();
//----------------------------------------- // Update profile //-----------------------------------------
$inbox_count = $this->_get_dir_count( $to_member['vdirs'], 'in' );
$new_vdir = $this->rebuild_dir_count( $to_member['id'], "", 'in', $inbox_count + 1, 'save', "msg_total=msg_total+1,new_msg=new_msg+1,show_popup={$show_popup}" );
//----------------------------------------- // Has this member requested a PM email nofity? //-----------------------------------------
if ($to_member['email_pm'] == 1) { $to_member['language'] = $to_member['language'] == "" ? 'en' : $to_member['language'];
$this->postlib->email->get_template("pm_notify", $to_member['language']);
$this->postlib->email->build_message( array( 'NAME' => $to_member['members_display_name'], 'POSTER' => $this->from_member['members_display_name'], 'TITLE' => $this->msg_title, 'LINK' => "?act=Msg&CODE=03&VID=in&MSID=$mt_id", ) );
$this->postlib->email->subject = $this->ipsclass->lang['pm_email_subject']; $this->postlib->email->to &n |
| Автор: Bastet 5.11.2005, 14:34 |
| Цитата | | Но тогда загрузка сервера будет немногим больше;) |
Немного - это не считается Удаление поста с отправкой сообщения, наверное, будет происходить не часто.
| Код | function delete_post() { // Get this post id.
$this->ipsclass->input['p'] = intval($this->ipsclass->input['p']);
$this->ipsclass->DB->simple_construct( array( 'select' => 'pid, author_id, post_date, new_topic', 'from' => 'posts', 'where' => "topic_id={$this->topic['tid']} and pid={$this->ipsclass->input['p']}" ) ); $this->ipsclass->DB->simple_exec();
if ( ! $post = $this->ipsclass->DB->fetch_row() ) { $this->moderate_error(); }
$passed = 0;
if ($this->ipsclass->member['g_is_supmod'] == 1) { $passed = 1; } else if ($this->moderator['delete_post'] == 1) { $passed = 1; } else if ( ($this->ipsclass->member['g_delete_own_posts'] == 1) and ( $this->ipsclass->member['id'] == $post['author_id'] ) ) { $passed = 1; } else { $passed = 0; }
if ($passed != 1) $this->moderate_error();
//----------------------------------------- // Check to make sure that this isn't the first post in the topic.. //-----------------------------------------
if ($post['new_topic'] == 1) { $this->moderate_error('no_delete_post'); }
if ( $this->trash_forum and $this->trash_forum != $this->forum['id'] ) { //----------------------------------------- // Set up and pass to split topic handler //-----------------------------------------
$this->ipsclass->input['checked'] = 1; $this->ipsclass->input['fid'] = $this->trash_forum; $this->ipsclass->input['title'] = $this->ipsclass->lang['mod_from']." ".$this->topic['title']; $this->ipsclass->input['desc'] = $this->ipsclass->lang['mod_from_id']." ".$this->topic['tid']; $this->ipsclass->input[ 'post_'.$this->ipsclass->input['p'] ] = 1;
$this->trash_inuse = 1;
$this->multi_split_topic();
$this->trash_inuse = 0; } else { $this->modfunc->post_delete( $this->ipsclass->input['p'] ); $this->modfunc->forum_recount( $this->forum['id'] ); //Если юзер не сам удаляет свой пост, то... if ($this->ipsclass->member['id'] != $post['author_id'] ){ //Сюда вставляем отправку ПМ (или письма) //$this->ipsclass->vars['reportpost_method'] должно быть уже установлено... //получаем мыло и нужные настройки пользователя, которому отправляем сообщение $this->ipsclass->DB->simple_construct( array( 'select' => 'id, email, members_disable_pm', 'from' => 'members', 'where' => "id={$post['author_id']}" ) ); $this->ipsclass->DB->simple_exec(); $data = $this->ipsclass->DB->fetch_row(); if ( $this->ipsclass->vars['reportpost_method'] == 'email' OR $data['members_disable_pm'] ) { $this->email->subject = 'Заголовок '.$this->ipsclass->vars['board_name']; $this->email->to = $data['email']; $this->email->message = "Ваше сообщение в такой-то теме удалено модератором и вставляем ссылку на тему..."; $this->email->send_mail(); } else { $this->lib->to_by_id = $data['id']; $this->lib->from_member = $this->ipsclass->member; $this->lib->msg_title = 'Заголовок'; $this->lib->msg_post = "Ваше сообщение в такой-то теме удалено модератором и вставляем ссылку на тему..."; $this->lib->force_pm = 1; //этот флаг что значит?
$this->lib->send_pm(); } } //--------------------------------------- }
$this->ipsclass->print->redirect_screen( $this->ipsclass->lang['post_deleted'], "act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$this->ipsclass->input['st'] ); }
|
Примерно так будет выглядеть. Только я не проверяла... |
| Автор: 2man 5.11.2005, 15:47 |
Последнню часть кода, там где отправляется ПМ нужно сделать наверное чтобы мыло не проверяло. Зачем оно мне? Сразу отправляем в ПМ:
| Код | $this->ipsclass->DB->simple_construct( array( 'select' => 'id, members_disable_pm', 'from' => 'members', 'where' => "id={$post['author_id']}" ) ); // тут убираем e-mail $this->ipsclass->DB->simple_exec(); $data = $this->ipsclass->DB->fetch_row(); if ( $this->ipsclass->vars['reportpost_method'] == $data['members_disable_pm'] ) // вот тут я поставил ПМ { $this->email->message = "Ваше сообщение удалено модератором, так как не соответствуе правилам форума. Ознакомиться с правилами форума вы можете <a href='{$ibforums->base_url}act=boardrules'>здесь</a><br />А полностью прочитать тему < a href='{$ibforums->base_url}showtopic={$ibforums->input['t']}'>здесь</a> ///тут я немного подправил $this->lib->to_by_id = $data['id']; $this->lib->from_member = $this->ipsclass->member; $this->lib->msg_title = 'Внимание! Ваше сообщение удалено'; $this->lib->msg_post = "Ваше сообщение удалено модератором, так как не соответствуе правилам форума. Ознакомиться с правилами форума вы можете <a href='{$ibforums->base_url}act=boardrules'>здесь</a><br />А полностью прочитать тему < a href='{$ibforums->base_url}showtopic={$ibforums->input['t']}'>здесь</a> ///тут я немного подправил"; $this->lib->force_pm = 1; //этот флаг что значит? / думаю это проверка, включена ли ситема ПМ у пользователя
$this->lib->send_pm(); } } //--------------------------------------- }
$this->ipsclass->print->redirect_screen( $this->ipsclass->lang['post_deleted'], "act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$this->ipsclass->input['st'] ); }
|
Я тоже пока не проверял, но вроде правильно. Разве что если правильно расставил все скобки |
| Автор: 2man 5.11.2005, 16:09 |
Не в коде были ошибки, вот так будет правильнее, хотя еще раз говорю, что не проверял:
| Код | function delete_post() // сама функция удаления поста { // Get this post id.
$this->ipsclass->input['p'] = intval($this->ipsclass->input['p']);
$this->ipsclass->DB->simple_construct( array( 'select' => 'pid, author_id, post_date, new_topic', 'from' => 'posts', 'where' => "topic_id={$this->topic['tid']} and pid={$this->ipsclass->input['p']}" ) ); $this->ipsclass->DB->simple_exec();
if ( ! $post = $this->ipsclass->DB->fetch_row() ) { $this->moderate_error(); }
$passed = 0;
if ($this->ipsclass->member['g_is_supmod'] == 1) { $passed = 1; } else if ($this->moderator['delete_post'] == 1) { $passed = 1; } else if ( ($this->ipsclass->member['g_delete_own_posts'] == 1) and ( $this->ipsclass->member['id'] == $post['author_id'] ) ) { $passed = 1; } else { $passed = 0; }
if ($passed != 1) $this->moderate_error();
//----------------------------------------- // Check to make sure that this isn't the first post in the topic.. //-----------------------------------------
if ($post['new_topic'] == 1) { $this->moderate_error('no_delete_post'); }
if ( $this->trash_forum and $this->trash_forum != $this->forum['id'] ) { //----------------------------------------- // Set up and pass to split topic handler //-----------------------------------------
$this->ipsclass->input['checked'] = 1; $this->ipsclass->input['fid'] = $this->trash_forum; $this->ipsclass->input['title'] = $this->ipsclass->lang['mod_from']." ".$this->topic['title']; $this->ipsclass->input['desc'] = $this->ipsclass->lang['mod_from_id']." ".$this->topic['tid']; $this->ipsclass->input[ 'post_'.$this->ipsclass->input['p'] ] = 1;
$this->trash_inuse = 1;
$this->multi_split_topic();
$this->trash_inuse = 0; } else { $this->modfunc->post_delete( $this->ipsclass->input['p'] ); $this->modfunc->forum_recount( $this->forum['id'] );
//Если юзер не сам удаляет свой пост, то... if ($this->ipsclass->member['id'] != $post['author_id'] ) { $this->ipsclass->DB->simple_construct( array( 'select' => 'id, members_disable_pm', 'from' => 'members', 'where' => "id={$post['author_id']}" ) ); // идет запрос к базе, e-mail убираю с целью уменбшить число запросов $this->ipsclass->DB->simple_exec();
$data = $this->ipsclass->DB->fetch_row();
if ( $this->ipsclass->vars['reportpost_method'] == $data['members_disable_pm'] ) // вот тут я прировнял метод к ПМ {
$this->lib->to_by_id = $data['id']; $this->lib->from_member = $this->ipsclass->member; $this->lib->msg_title = 'Внимание! Ваше сообщение удалено'; $this->lib->msg_post = "Ваше сообщение удалено модератором, так как не соответствуе правилам форума. Ознакомиться с правилами форума вы можете <a href='{$ibforums->base_url}act=boardrules'>здесь</a> <br /> А полностью прочитать тему <a href='{$ibforums->base_url}showtopic={$ibforums->input['t']}'>здесь</a>"; ///тут я немного подправил"; $this->lib->force_pm = 1; // думаю это проверка, включена ли ситема ПМ у пользователя $this->lib->send_pm(); } } }
$this->ipsclass->print->redirect_screen( $this->ipsclass->lang['post_deleted'], "act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$this->ipsclass->input['st'] ); }
|
Единственное что меня пожалуй смущает это vars['reportpost_method']. Переменная правильно расставлена? |
| Автор: Bastet 6.11.2005, 19:33 |
Отправлять на мыло или нет - тебе решать, конечно)
| Код | if ( $this->ipsclass->vars['reportpost_method'] == 'email' OR $data['members_disable_pm']
|
Это условие нужно убрать: в большинстве случаев оно не будет выполняться. Оно только для оптравки на мыло нужно. И если не собираешься отправлять на мыло, то можно вообще выкинуть этот кусок:
| Код | $this->ipsclass->DB->simple_construct( array( 'select' => 'id, members_disable_pm', 'from' => 'members', 'where' => "id={$post['author_id']}" ) ); // идет запрос к базе, e-mail убираю с целью уменбшить число запросов $this->ipsclass->DB->simple_exec(); $data = $this->ipsclass->DB->fetch_row();
|
И вместо $data['id'] использовать $post['author_id'].
Когда проверишь, расскажи |
| Автор: 2man 9.11.2005, 17:13 |
Неа, что-то не работает. Ошибку сказать не могу, потому как pHP 5 не выводит ошибки  Хотя может я что-то не туда вставил. Вот модифицированная функция удаления поста:
| Код | function delete_post() { // Get this post id.
$this->ipsclass->input['p'] = intval($this->ipsclass->input['p']);
$this->ipsclass->DB->simple_construct( array( 'select' => 'pid, author_id, post_date, new_topic', 'from' => 'posts', 'where' => "topic_id={$this->topic['tid']} and pid={$this->ipsclass->input['p']}" ) ); $this->ipsclass->DB->simple_exec();
if ( ! $post = $this->ipsclass->DB->fetch_row() ) { $this->moderate_error(); }
$passed = 0;
if ($this->ipsclass->member['g_is_supmod'] == 1) { $passed = 1; } else if ($this->moderator['delete_post'] == 1) { $passed = 1; } else if ( ($this->ipsclass->member['g_delete_own_posts'] == 1) and ( $this->ipsclass->member['id'] == $post['author_id'] ) ) { $passed = 1; } else { $passed = 0; }
if ($passed != 1) $this->moderate_error();
//----------------------------------------- // Check to make sure that this isn't the first post in the topic.. //-----------------------------------------
if ($post['new_topic'] == 1) { $this->moderate_error('no_delete_post'); }
if ( $this->trash_forum and $this->trash_forum != $this->forum['id'] ) { //----------------------------------------- // Set up and pass to split topic handler //-----------------------------------------
$this->ipsclass->input['checked'] = 1; $this->ipsclass->input['fid'] = $this->trash_forum; $this->ipsclass->input['title'] = $this->ipsclass->lang['mod_from']." ".$this->topic['title']; $this->ipsclass->input['desc'] = $this->ipsclass->lang['mod_from_id']." ".$this->topic['tid']; $this->ipsclass->input[ 'post_'.$this->ipsclass->input['p'] ] = 1;
$this->trash_inuse = 1;
$this->multi_split_topic();
$this->trash_inuse = 0; } else { $this->modfunc->post_delete( $this->ipsclass->input['p'] ); $this->modfunc->forum_recount( $this->forum['id'] ); }
$this->ipsclass->print->redirect_screen( $this->ipsclass->lang['post_deleted'], "act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$this->ipsclass->input['st'] ); } // mod
//Если юзер не сам удаляет свой пост, то... if ($this->ipsclass->member['id'] != $post['author_id'] ) { // $this->ipsclass->DB->simple_construct( array( 'select' => 'id, members_disable_pm', 'from' => 'members', 'where' => "id={$post['author_id']}" ) ); // идет запрос к базе, e-mail убираю с целью уменбшить число запросов // $this->ipsclass->DB->simple_exec();
// $data = $this->ipsclass->DB->fetch_row();
// if ( $this->ipsclass->vars['reportpost_method'] == $data['members_disable_pm'] ) // вот тут я прировнял метод к ПМ // {
$this->lib->to_by_id = $post['author_id']; $this->lib->from_member = $this->ipsclass->member; $this->lib->msg_title = 'Внимание! Ваше сообщение удалено'; $this->lib->msg_post = "Ваше сообщение удалено модератором, так как не соответствуе правилам форума. Ознакомиться с правилами форума вы можете <a href='{$ibforums->base_url}act=boardrules'>здесь</a> <br /> А полностью прочитать тему <a href='{$ibforums->base_url}showtopic={$ibforums->input['t']}'>здесь</a>"; ///тут я немного подправил"; $this->lib->force_pm = 1; // думаю это проверка, включена ли ситема ПМ у пользователя $this->lib->send_pm(); } } }
$this->ipsclass->print->redirect_screen( $this->ipsclass->lang['post_deleted'], "act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$this->ipsclass->input['st'] ); }
// end
| |
| Автор: Bastet 10.11.2005, 01:28 |
Если не работает именно этот фрагмент, то ты забыл закомментировать одну закрывающуюся скобку:
| Код | // if ( $this->ipsclass->vars['reportpost_method'] == $data['members_disable_pm'] ) // вот тут я прировнял метод к ПМ // {
$this->lib->to_by_id = $post['author_id']; $this->lib->from_member = $this->ipsclass->member; $this->lib->msg_title = 'Внимание! Ваше сообщение удалено'; $this->lib->msg_post = "Ваше сообщение удалено модератором, так как не соответствуе правилам форума. Ознакомиться с правилами форума вы можете <a href='{$ibforums->base_url}act=boardrules'>здесь</a> <br /> А полностью прочитать тему <a href='{$ibforums->base_url}showtopic={$ibforums->input['t']}'>здесь</a>"; ///тут я немного подправил"; $this->lib->force_pm = 1; // думаю это проверка, включена ли ситема ПМ у пользователя $this->lib->send_pm(); } //!!! Вот эту.
|
А РНР5 не выводит ошибки вообще или там так по умолчанию установлено (я просто по-ламерски юзаю Деневер, жизни не знаю)? Для отладки, имхо, это не дело... |
| Автор: 2man 10.11.2005, 02:00 |
Bastet, а ведь правда забыл Да я просто хочу тестировать на PHP 5, как на сервере, а то сделаю под PHP 4, а потом все равно надо будет править. Попробую поставить на Денвере, посмотреть, что получится. Какую ошибку выдаст, если таковая есть |
| Автор: 2man 11.11.2005, 03:54 |
В общем проверил я на локалхосте. Кое-что пришлось подправить, а мод поставить до оригинального редиректа, иначе пост удалялся, происходил редиркт, а до мода дело не успевало доходить  Вот так я решил свои проблемы:
| Код | // $this->ipsclass->print->redirect_screen( $this->ipsclass->lang['post_deleted'], "act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$this->ipsclass->input['st'] );
|
;) Не могу понять почему мне выдает ошибку: Call to undefined function: send_pm() Перепроверил, по указанному пути в файле func_msg есть таковая |
| Автор: Bastet 12.11.2005, 00:15 |
Наверное, редирект стоит включить, но после отправки сообщения.
Хм... странно, странно... А библиотека с этой функцией не должна специально подключаться? Если ничего не придумаем, можно будет вставить кусочек кода прямо из самой функции send_pm(). |
| Автор: 2man 12.11.2005, 01:36 |
Не, редирект у нас есть:
| Код | $this->ipsclass->print->redirect_screen( $this->ipsclass->lang['post_deleted'], "act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$this->ipsclass->input['st'] );
|
Кажется мы забыли вот этот кусок кода из PM
| Код | if ( $this->lib->error ) { print $this->error; exit(); }
|
Хотя это не важно. Наверное дело в том, что мы забыли указать модуль отправки PM
| Код | require_once( ROOT_PATH.'sources/lib/func_msg.php' );
$this->lib = new func_msg(); $this->lib->ipsclass =& $this->ipsclass;
$this->lib->init();
|
Да. Точно. Я так и знал Осталось только подправить само сообщение, а именно: 1. Ссылку на правила форума 2. Ссылку на тему, откуда удален пост Итак, первое:
| Код | <a href='{$ibforums->base_url}index.php?act=boardrules'>здесь</a>
|
Со вторым пришлось немного повозиться, но я выиграл компьютер 
Вот она моя переменная топика  Спасибо огромное за помощь, сам бы вряд ли справился. Да, еще хотел сказать: мы неплохо сработались. Может еще что-нибудь попробуем сделать, у меня голова полна идей |
| Автор: Bastet 12.11.2005, 14:20 |
2man, ну, можно попробовать |
| Автор: 2man 23.11.2005, 03:15 |
| Bastet, вот и первый глюк. Что-то мы тут с тобой накосячили, что ПМ в одном скине не работает вообще. И это при том, что файлы скинов я не трогал вообще. Странности какие-то творятся, я разобрался с чем была проблема, в файле скина, в котором не работал ПМ, стоял кривой редирект на ПМ, НО я поставил тот, который стоит в работающем скине и что-то не вышло. Может есть какие-нибудь сообращения? Ссылка в профиле |
| Автор: Bastet 24.11.2005, 00:11 |
| 2man, а давай ты мне дашь ссылку на сам скрипт форума (мне просто искать лениво). Так очень тяжело судить, что именно там может не работать... |
| Автор: 2man 24.11.2005, 00:35 |
Давай рассуждать логически. Если работает в одном скине, а в другом нет, то надо смотреть файлы скина. Дальше, когда отправляем ПМ ссылка выглядит вот так http://forum.vingrad.ru/index.php?act=Msg&CODE=...&MID=.... значит смотрю в папке скина ключевое сочетание Msg&CODE. Выдает два файла: skin_topic.php и skin_msg.php. В первом ничего особого про ПМ нет, просто кнопка, а вот во втором как я обнаружил была проблема с редиректом странице при щелчке на кнопку. Во втором файле нашлась ссылка:
| Код | [ <a href="{$this->ipsclass->base_url}CODE=04&act=Msg&MSID={$post['mt_id']}&MID={$author['id']}&fwd=1">{$this->ipsclass->lang['vm_forward_pm']}</a> | <a href="{$this->ipsclass->base_url}CODE=04&act=Msg&MID={$author['id']}&MSID={$post['mt_id']}">{$this->ipsclass->lang['pm_reply_link']}</a> ]
|
ЧТо не так я не знаю. Я беру даже заменяю эти файлы теми, которые работают - не помогает Добавлено @ 00:42 При том что ссылка рендерится правильная http://www.mega-forum.net.ru/index.php?act=Msg&CODE=4&MID=52 Значит проблема с рендером самой страницы получается |
| Автор: Bastet 25.11.2005, 00:50 |
Радикальное решение - выкинуть глюченный скин. Не могу помочь даже логически - не вижу скинов, не могу тестировать.
Кстати, еще одна проблемка на будущее: когда удаляется топик, удаляются и все посты к нему? Значит, будут рассылаться и ПМ авторам всех постов, кому-то даже по многу штук. Нужно ввести какой-нить флаг в функции удаления топика, чтобы отличать. |
| Автор: 2man 25.11.2005, 01:50 |
Ага, точно будут. Но тема удаляется в том случае в том случае, если грубое нарушение правил, там никто нескольких постов не допустит, хотя можно сделать на всякий случай, чтоб при удалении топика уведомление шло только первому участнику, создавшего тему Добавлено @ 01:51 Но мне кажется, что delete_topic и delete_post это разные вещи, а мод установлен только для delete_post. |
Powered by Invision Power Board (http://www.invisionboard.com) © Invision Power Services (http://www.invisionpower.com) |