Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление поста + действие 
:(
    Опции темы
2man
Дата 16.10.2005, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

Репутация: нет
Всего: 71



Мне интересно можно ли при удалении поста, чтобы участнику, чей пост я удалил, отправлялась в ПМ сообщение о том, что его сообщение удалено и ссылка на тему?
Удаление поста происходит с помощью JS:
Код

function delete_post(theURL)
{
        if (confirm( ipb_lang_js_del_1 ))
        {
                window.location.href=theURL;
        }
        else
        {
                alert ( ipb_lang_js_del_2 );
        }
}

Вот и сама кнопка:
Код

function button_delete($fid="",$tid="",$pid="",$key="") {
$IPBHTML = "";
//--starthtml--//


$IPBHTML .= <<<EOF
<a href="javascript:delete_post('{$this->ipsclass->base_url}act=Mod&amp;CODE=04&amp;f={$fid}&amp;t={$tid}&amp;p={$pid}&amp;st={$this->ipsclass->input['st']}&amp;auth_key=$key')"><{P_DELETE}></a>
EOF;

//--endhtml--//
return $IPBHTML;
}

Я так понимаю, надо дописать функцию в саму кнопку, а потом ее сгенерировать в яваскрипте smile


--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
Bastet
Дата 16.10.2005, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 26.9.2005
Где: Тильзит

Репутация: 3
Всего: 6



2man, удаление поста происходит в js? Кусок, который ты привел, никак не может что-то удалять: он только спрашивает и куда-то перенаправляет....
Посты удаляются РНР... Вот в этом самом РНР-скрипте и нужно отправлять письмо участнику. Это просто, только покажи здесь этот скрипт.
--------------------
"I'm not bad. I'm just drawn that way" © Jessica RabbitСм.также: BB | ЖЖ | DA
PM MAIL WWW ICQ   Вверх
2man
Дата 16.10.2005, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

Репутация: нет
Всего: 71



Я так понял функция удаления поста вот эта:
Код

function delete_button($post_id, $poster)
        {
                if ($this->ipsclass->member['id'] == "" or $this->ipsclass->member['id'] == 0)
                {
                        return "";
                }

                $button = $this->ipsclass->compiled_templates['skin_topic']->button_delete($this->forum['id'],$this->topic['tid'],$post_id,$this->md5_check );

                if ($this->ipsclass->member['g_is_supmod']) return $button;
                if ($this->moderator['delete_post']) return $button;
                if ($poster['id'] == $this->ipsclass->member['id'] and ($this->ipsclass->member['g_delete_own_posts'])) return $button;
                return "";
        }

И вот эта функция как раз ссылается на:
Код

function button_delete($fid="",$tid="",$pid="",$key="") {
$IPBHTML = "";
//--starthtml--//


$IPBHTML .= <<<EOF
<a href="javascript:delete_post('{$this->ipsclass->base_url}act=Mod&amp;CODE=04&amp;f={$fid}&amp;t={$tid}&amp;p={$pid}&amp;st={$this->ipsclass->input['st']}&amp;auth_key=$key')"><{P_DELETE}></a>
EOF;

//--endhtml--//
return $IPBHTML;
}

в другом файле...


--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
Bastet
Дата 16.10.2005, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 26.9.2005
Где: Тильзит

Репутация: 3
Всего: 6



Хм... кажется, эта функция только рисует кнопку...
Посмотри, куда ведет theURL из самого-самого первого приведенного тобой кода.
Код

window.location.href=theURL;


Я совсем не знакома с этим форумом... даже помочь не могу, пока не найдется код удаления поста...
--------------------
"I'm not bad. I'm just drawn that way" © Jessica RabbitСм.также: BB | ЖЖ | DA
PM MAIL WWW ICQ   Вверх
2man
Дата 17.10.2005, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

Репутация: нет
Всего: 71



Все, что было выложил вроде


--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
2man
Дата 19.10.2005, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

Репутация: нет
Всего: 71



Bastet, нашел smile
Вот функция удаления поста:
Код

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'] );
        }

Что дальше делаем?


--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
Bastet
Дата 20.10.2005, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 26.9.2005
Где: Тильзит

Репутация: 3
Всего: 6



Как плохо я оказывается знаю РНР… Страшно торможу, потому что слабо понимаю, что в данной функции из себя представляет $this, и вообще впервые на практике сталкиваюсь с такими конструкциями. Но попробую:
Код

$this->topic['tid'] 

– если следовать логике имен, здесь хранится идентификатор темы, из которой удаляется пост. Значит, ссылка для автора удаляемого поста почти готова.

Код

$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']}" ) );

- здесь запрос к БД, в котором, похоже, извлекается идентификатор пользователя - author_id.
И если я правильно думаю, то ID пользователя после успешного выполнения запроса хранится в
Код

$post['author_id']


А сам пост, кажется, удаляется здесь:
Код

else
                {
                        $this->modfunc->post_delete( $this->ipsclass->input['p'] );
                        $this->modfunc->forum_recount( $this->forum['id'] );
                }

Значит, в этом блоке и нужно посылать пользователю ПМ.

По логике вещей, чтобы послать ПМ, достаточно знать только ID пользователя. Его мы знает. ID топика для формирования ссылки у нас тоже есть.

Цитата
Что дальше делаем?

Дальше нужно найти функцию, отправляющую ПМ и способ передать ей нужные параметры.

З.Ы: это только моя версия. Если я ошибаюсь, заранее прошу прощения.
--------------------
"I'm not bad. I'm just drawn that way" © Jessica RabbitСм.также: BB | ЖЖ | DA
PM MAIL WWW ICQ   Вверх
2man
Дата 20.10.2005, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

Репутация: нет
Всего: 71



Цитата(Bastet @ 19.10.2005, 23:00)
И если я правильно думаю, то ID пользователя после успешного выполнения запроса хранится в

код PHP
1:

$post['author_id']

Все-таки наверное в member['id'].

Цитата(Bastet @ 19.10.2005, 23:00)
Дальше нужно найти функцию, отправляющую ПМ и способ передать ей нужные параметры

Буду искать пока эту функциюsmile


--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
Bastet
Дата 20.10.2005, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 26.9.2005
Где: Тильзит

Репутация: 3
Всего: 6



А мне кажется, что member['id'] - это идентификатор пользователя, который запросил страницу. Он находится в объекте $this, который есть изначально. А в $post заносится результат выполнения запроса.
Код

$post = $this->ipsclass->DB->fetch_row() 


Но это тоже полезная переменная. Если не проверять наравенство member['id'] с $post['author_id'], может оказаться, что ПМ отправляется даже когда пользователь удаляет свой собственный пост.

Не могу понять, что такое trash_forum и что здесь происходит:
Код

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;
                }

И происходит ли там удаление поста...
--------------------
"I'm not bad. I'm just drawn that way" © Jessica RabbitСм.также: BB | ЖЖ | DA
PM MAIL WWW ICQ   Вверх
2man
Дата 2.11.2005, 03:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

Репутация: нет
Всего: 71



Bastet, полная функция постинга ОЧЕНЬ огромная, я выложил ее полностью на всякий случай, но вряд ли она полностью понадобиться
Код

function auto_run()
    {
        //-----------------------------------------
            // Get the sync module
                //-----------------------------------------

                if ( USE_MODULES == 1 )
                {
                        require ROOT_PATH."modules/ipb_member_sync.php";

                        $this->modules = new ipb_member_sync();
                        $this->modules->ipsclass =& $this->ipsclass;
                }

                //-----------------------------------------
        // Check the input
        //-----------------------------------------

        $this->ipsclass->input['t']  = intval($this->ipsclass->input['t']);
        $this->ipsclass->input['p']  = intval($this->ipsclass->input['p']);
        $this->ipsclass->input['f']  = intval($this->ipsclass->input['f']);
        $this->ipsclass->input['st'] = intval($this->ipsclass->input['st']);

        //-----------------------------------------
        // At some point in the future, I want to
        // remove the CODE rubbish and move to a
        // more human-esque 'do' command.
        //-----------------------------------------

        $this->do_into_code = array( 'new_post'      => '00',
                                                                 'new_post_do'   => '01',
                                                                 'reply_post'    => '02',
                                                                 'reply_post_do' => '03',
                                                                 'edit_post'     => '08',
                                                                 'edit_post_do'  => '09',
                                                                 'poll_add'      => '14',
                                                                 'poll_add_do'   => '15' );

        if ( $this->ipsclass->input['do'] )
        {
                $this->ipsclass->input['CODE'] = $this->do_into_code[ $this->ipsclass->input['do'] ];
        }

                //-----------------------------------------
                // Load post handler
                //-----------------------------------------

                require_once( ROOT_PATH.'sources/handlers/han_post.php' );
        $this->han_post            =  new han_post();
        $this->han_post->ipsclass  =& $this->ipsclass;
                 $this->han_post->forum     =  $this->ipsclass->forums->forum_by_id[ $this->ipsclass->input['f'] ];
        $this->han_post->md5_check =  $this->ipsclass->return_md5_check();
        $this->han_post->modules   =  $this->modules;

        //-----------------------------------------
        // Set up object array
        //-----------------------------------------

        $this->han_post->obj['preview_post'] = $this->ipsclass->input['preview'];
        $this->han_post->obj['moderate']     = $this->ipsclass->member['g_avoid_q'] ? 0 : intval($this->han_post->forum['preview_posts']);

        //-----------------------------------------
        // Make sure member isn't moderated
        //-----------------------------------------

        $this->_check_post_mod();

        //-----------------------------------------
        // Is this forum switched off?
        //-----------------------------------------

        if ( ! $this->han_post->forum['status'] )
        {
                $this->ipsclass->Error( array( LEVEL => 1, MSG => 'forum_read_only') );
        }

        //-----------------------------------------
        // Check access
        //-----------------------------------------

        $this->ipsclass->forums->forums_check_access( $this->han_post->forum['id'], 1 );

        //-----------------------------------------
        // Error out if we can not find the forum
        //-----------------------------------------

        if ( ! $this->han_post->forum['id'] )
        {
                $this->ipsclass->Error( array( LEVEL => 1, MSG => 'missing_files') );
        }

        //-----------------------------------------
        // Are we allowed to post at all?
        //-----------------------------------------

        if ( $this->ipsclass->member['id'] )
        {
                if ( $this->ipsclass->member['restrict_post'] )
                {
                        if ( $this->ipsclass->member['restrict_post'] == 1 )
                        {
                                $this->ipsclass->Error( array( LEVEL => 1, MSG => 'posting_off') );
                        }

                        $post_arr = $this->ipsclass->hdl_ban_line( $this->ipsclass->member['restrict_post'] );

                        if ( time() >= $post_arr['date_end'] )
                        {
                                //-----------------------------------------
                                // Update this member's profile
                                //-----------------------------------------

                                        $this->ipsclass->DB->simple_construct( array( 'update' => 'members',
                                                                                                                                  'set'    => 'restrict_post=0',
                                                                                                                                  'where'  => "id=".intval($this->ipsclass->member['id'])
                                                                                                                )       );

                                        $this->ipsclass->DB->simple_exec();
                        }
                        else
                        {
                                $this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'posting_off_susp', 'EXTRA' => $this->ipsclass->get_date($post_arr['date_end'], 'LONG') ) );
                        }
                }

                //-----------------------------------------
                // Flood check..
                //-----------------------------------------

                if (     $this->ipsclass->input['CODE'] != "08"
                         and $this->ipsclass->input['CODE'] != "09"
                         and $this->ipsclass->input['CODE'] != "14"
                         and $this->ipsclass->input['CODE'] != "15" )
                {
                                if ( $this->ipsclass->vars['flood_control'] > 0 )
                                {
                                        if ($this->ipsclass->member['g_avoid_flood'] != 1)
                                        {
                                                if ( time() - $this->ipsclass->member['last_post'] < $this->ipsclass->vars['flood_control'] )
                                                {
                                                        $this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'flood_control' , 'EXTRA' => $this->ipsclass->vars['flood_control'] ) );
                                                }
                                        }
                                }
                        }
        }
        else if ( $this->ipsclass->is_bot == 1 )
        {
                $this->ipsclass->Error( array( LEVEL => 1, MSG => 'posting_off') );
        }

        //-----------------------------------------
        // Convert the code ID's into something
        // use mere mortals can understand....
        //-----------------------------------------

        $this->han_post->obj['action_codes'] = array ( '00'  => array( '0'  , 'new'     ),
                                                                                                           '01'  => array( '1'  , 'new'     ),
                                                                                                           '02'  => array( '0'  , 'reply'   ),
                                                                                                           '03'  => array( '1'  , 'reply'   ),
                                                                                                           '08'  => array( '0'  , 'edit'    ),
                                                                                                           '09'  => array( '1'  , 'edit'    ),
                                                                                                           '10'  => array( '0'  , 'poll'         ),
                                                                                                           '11'  => array( '1'  , 'poll'         ),
                                                                                                           '14'  => array( '0'  , 'poll_after'   ),
                                                                                                           '15'  => array( '1'  , 'poll_after'   ),
                                                                                                         );

        //-----------------------------------------
        // Make sure our input CODE element is legal.
        //-----------------------------------------

        if ( ! isset($this->han_post->obj['action_codes'][ $this->ipsclass->input['CODE'] ]) )
        {
                $this->ipsclass->Error( array( LEVEL => 1, MSG => 'missing_files') );
        }

              //-----------------------------------------
        // Init classes
        //-----------------------------------------

              $this->han_post->method = $this->han_post->obj['action_codes'][ $this->ipsclass->input['CODE'] ][1];
              $this->han_post->init();

        //-----------------------------------------
        // Show form or process?
        //-----------------------------------------

        if ( $this->han_post->obj['action_codes'][ $this->ipsclass->input['CODE'] ][0] )
        {
                //-----------------------------------------
                // Make sure we have a valid auth key
                //-----------------------------------------

                if ( $this->ipsclass->input['auth_key'] != $this->han_post->md5_check )
                        {
                                $this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'del_post') );
                        }

                //-----------------------------------------
                // Make sure we have a "Guest" Name..
                //-----------------------------------------

                $this->_check_guest_name();
                $this->_check_double_post();

                $this->han_post->process_post();
        }
        else
        {
                $this->han_post->show_form();
        }
        }


Это сообщение отредактировал(а) 2man - 2.11.2005, 03:25


--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
Bastet
Дата 5.11.2005, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 26.9.2005
Где: Тильзит

Репутация: 3
Всего: 6



Название auto_run() убило... А это функция постит именно ПМ или простое сообщение?

Два варианта у меня есть:
1) Отправлять ПМ вручную (совсем вручную) - прямым SQL-запросом из функции удаления поста, которую мы уже нашли и разобрали. Только запросы тут отправлются как-то по-левому, так что нужно найти, как выглядит запрос на вставку. Тогда придется и письмо отправлять вручную... геморный вариант =(
2) Добивать автоматическую отправку. Посмотрела, где обрабатывается отправка ПМ на этом форуме (ты этот же скрипт используешь?): файл index.php и служебные параметры, видимо:
Код

<input type='hidden' name='act' value='Msg' />
<input type='hidden' name='CODE' value='04' />
<input type='hidden' name='MODE' value='01' />
<input type='hidden' name='OID'  value='' />

Посмотри, что там происходит...

Или дай мне прямую ссылку откуда можно скачать этот скрипт. Я сама полазаю, как будет свободное время.
--------------------
"I'm not bad. I'm just drawn that way" © Jessica RabbitСм.также: BB | ЖЖ | DA
PM MAIL WWW ICQ   Вверх
2man
Дата 5.11.2005, 02:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

Репутация: нет
Всего: 71



А может взять функцию ПМ при отправке 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

Это сообщение отредактировал(а) sergej.z - 5.11.2005, 03:32


--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
Bastet
Дата 5.11.2005, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 26.9.2005
Где: Тильзит

Репутация: 3
Всего: 6



Цитата
Но тогда загрузка сервера будет немногим больше;)

Немного - это не считается smile
Удаление поста с отправкой сообщения, наверное, будет происходить не часто.

Код

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'] );
        }


Примерно так будет выглядеть. Только я не проверяла...
--------------------
"I'm not bad. I'm just drawn that way" © Jessica RabbitСм.также: BB | ЖЖ | DA
PM MAIL WWW ICQ   Вверх
2man
Дата 5.11.2005, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

Репутация: нет
Всего: 71



Последнню часть кода, там где отправляется ПМ нужно сделать наверное чтобы мыло не проверяло. Зачем оно мне? Сразу отправляем в ПМ:
Код

$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'] );
        }

Я тоже пока не проверял, но вроде правильно. Разве что если правильно расставил все скобки


--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
2man
Дата 5.11.2005, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

Репутация: нет
Всего: 71



Не в коде были ошибки, вот так будет правильнее, хотя еще раз говорю, что не проверял:
Код

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']. Переменная правильно расставлена?


--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
Bastet
Дата 6.11.2005, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 26.9.2005
Где: Тильзит

Репутация: 3
Всего: 6



Отправлять на мыло или нет - тебе решать, конечно)
Код

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'].

Когда проверишь, расскажи smile
--------------------
"I'm not bad. I'm just drawn that way" © Jessica RabbitСм.также: BB | ЖЖ | DA
PM MAIL WWW ICQ   Вверх
2man
Дата 9.11.2005, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

Репутация: нет
Всего: 71



Неа, что-то не работает. Ошибку сказать не могу, потому как pHP 5 не выводит ошибки smile
Хотя может я что-то не туда вставил. Вот модифицированная функция удаления поста:
Код

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


Это сообщение отредактировал(а) 2man - 9.11.2005, 17:14


--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
Bastet
Дата 10.11.2005, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 26.9.2005
Где: Тильзит

Репутация: 3
Всего: 6



Если не работает именно этот фрагмент, то ты забыл закомментировать одну закрывающуюся скобку:
Код

//    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 не выводит ошибки вообще или там так по умолчанию установлено (я просто по-ламерски юзаю Деневер, жизни не знаю)? Для отладки, имхо, это не дело...
--------------------
"I'm not bad. I'm just drawn that way" © Jessica RabbitСм.также: BB | ЖЖ | DA
PM MAIL WWW ICQ   Вверх
2man
Дата 10.11.2005, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

Репутация: нет
Всего: 71



Bastet, а ведь правда забыл smile Да я просто хочу тестировать на PHP 5, как на сервере, а то сделаю под PHP 4, а потом все равно надо будет править. Попробую поставить на Денвере, посмотреть, что получится. Какую ошибку выдаст, если таковая есть


--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
2man
Дата 11.11.2005, 03:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

Репутация: нет
Всего: 71



В общем проверил я на локалхосте. Кое-что пришлось подправить, а мод поставить до оригинального редиректа, иначе пост удалялся, происходил редиркт, а до мода дело не успевало доходить smile
Вот так я решил свои проблемы:
Код

//      $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 есть таковая smile



--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
Bastet
Дата 12.11.2005, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 26.9.2005
Где: Тильзит

Репутация: 3
Всего: 6



Наверное, редирект стоит включить, но после отправки сообщения.

Хм... странно, странно... А библиотека с этой функцией не должна специально подключаться?
Если ничего не придумаем, можно будет вставить кусочек кода прямо из самой функции send_pm().
--------------------
"I'm not bad. I'm just drawn that way" © Jessica RabbitСм.также: BB | ЖЖ | DA
PM MAIL WWW ICQ   Вверх
2man
Дата 12.11.2005, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

Репутация: нет
Всего: 71



Не, редирект у нас есть:
Код

$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();

Да. Точно. Я так и знал smile Осталось только подправить само сообщение, а именно:
1. Ссылку на правила форума
2. Ссылку на тему, откуда удален пост
Итак, первое:
Код

<a href='{$ibforums->base_url}index.php?act=boardrules'>здесь</a>

Со вторым пришлось немного повозиться, но я выиграл компьютер smile
Код

$this->topic['tid']

Вот она моя переменная топика smile
Спасибо огромное за помощь, сам бы вряд ли справился.
Да, еще хотел сказать: мы неплохо сработались. Может еще что-нибудь попробуем сделать, у меня голова полна идей smile


--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
Bastet
Дата 12.11.2005, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 26.9.2005
Где: Тильзит

Репутация: 3
Всего: 6



2man, ну, можно попробовать smile
--------------------
"I'm not bad. I'm just drawn that way" © Jessica RabbitСм.также: BB | ЖЖ | DA
PM MAIL WWW ICQ   Вверх
2man
Дата 23.11.2005, 03:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

Репутация: нет
Всего: 71



Bastet, вот и первый глюк. Что-то мы тут с тобой накосячили, что ПМ в одном скине не работает вообще. И это при том, что файлы скинов я не трогал вообще. Странности какие-то творятся, я разобрался с чем была проблема, в файле скина, в котором не работал ПМ, стоял кривой редирект на ПМ, НО я поставил тот, который стоит в работающем скине и что-то не вышло. Может есть какие-нибудь сообращения? Ссылка в профиле


--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
Bastet
Дата 24.11.2005, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 26.9.2005
Где: Тильзит

Репутация: 3
Всего: 6



2man, а давай ты мне дашь ссылку на сам скрипт форума (мне просто искать лениво). Так очень тяжело судить, что именно там может не работать...
--------------------
"I'm not bad. I'm just drawn that way" © Jessica RabbitСм.также: BB | ЖЖ | DA
PM MAIL WWW ICQ   Вверх
2man
Дата 24.11.2005, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

Репутация: нет
Всего: 71



Давай рассуждать логически. Если работает в одном скине, а в другом нет, то надо смотреть файлы скина. Дальше, когда отправляем ПМ ссылка выглядит вот так 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&amp;act=Msg&amp;MSID={$post['mt_id']}&amp;MID={$author['id']}&amp;fwd=1">{$this->ipsclass->lang['vm_forward_pm']}</a> | <a href="{$this->ipsclass->base_url}CODE=04&amp;act=Msg&amp;MID={$author['id']}&amp;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
Значит проблема с рендером самой страницы получается


--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
Bastet
Дата 25.11.2005, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 26.9.2005
Где: Тильзит

Репутация: 3
Всего: 6



Радикальное решение - выкинуть глюченный скин.
Не могу помочь даже логически - не вижу скинов, не могу тестировать.

Кстати, еще одна проблемка на будущее: когда удаляется топик, удаляются и все посты к нему? Значит, будут рассылаться и ПМ авторам всех постов, кому-то даже по многу штук. Нужно ввести какой-нить флаг в функции удаления топика, чтобы отличать.
--------------------
"I'm not bad. I'm just drawn that way" © Jessica RabbitСм.также: BB | ЖЖ | DA
PM MAIL WWW ICQ   Вверх
2man
Дата 25.11.2005, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

Репутация: нет
Всего: 71



Ага, точно будут. Но тема удаляется в том случае в том случае, если грубое нарушение правил, там никто нескольких постов не допустит, хотя можно сделать на всякий случай, чтоб при удалении топика уведомление шло только первому участнику, создавшего тему
Добавлено @ 01:51
Но мне кажется, что delete_topic и delete_post это разные вещи, а мод установлен только для delete_post.


--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1023 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.