Вход
Главное меню

Subject:*
Name/Email:*
Message Icon:*
       
Select*
Message:*


    


Click the Preview to see the content in action.
Options:*
 
 
 
 
Attach file*
   

Maximum file size: 100Kb;  Allowed extensions: zip jpg gif png  
Images at the max. Size 640 X 800 pixels. 
Confirmation Code*
6 - 0 = ?  
Input the result from the expression
Maximum attempts you can try: 10
*
     
*
* = Required
db->prefix("bb_posts"), $this->post_id); //выбираем конкретную мессагу и смотрим ее родительский пид if ($result = $this->db->query($sql)){ //если запрос удачный $array = $this->db->fetchArray($result); if ($array['pid']!=0){ //если это не первая мессаге в треде $mypid=$array['pid']; $sql= sprintf("UPDATE %s SET pid = %u WHERE pid = %u", $this->db->prefix("bb_posts"),$mypid,$this->post_id);//запрос: обновить все сообщения, в которых пид=пост-ид удаляемого, заменить на пид удаляемого if ( !$result = $this->db->query($sql) ) { return false; //Если не получаетя - значит вообще ничего не удаляем! }; }; } else { return false; }; }; //Конец хака на предмет удаления без ответов[/quote] 2. Файл \modules\newbb\delete.php, строка 71, сразу после if ( $post->istopic() ) { [quote] //Начало хака на предмет удаления без ответов if ($ok==2){ redirect_header("viewforum.php?forum=$forum", 2, 'Данное сообщение было удалено без ответов на него'); } else { redirect_header("viewforum.php?forum=$forum", 2, _MD_POSTSDELETED); }; //Конец хака на предмет удаления без ответов[/quote] Строка 80, сразу после } else { [quote]//Начало хака на предмет удаления без ответов if ($ok==2){ redirect_header("viewforum.php?forum=$forum", 2, 'Данное сообщение было удалено без ответов на него'); } else { redirect_header("viewtopic.php?topic_id=$topic_id&order=$order&viewmode=$viewmode&pid=$pid&forum=$forum", 2, _MD_POSTSDELETED); }; //Конец хака на предмет удаления без ответов[/quote] Строка 92, сразу после xoops_confirm(array('post_id' => $post_id, 'viewmode' => $viewmode, 'order' => $order, 'forum' => $forum, 'topic_id' => $topic_id, 'ok' => 1), 'delete.php', _MD_AREUSUREDEL); [quote] //Начало хака на предмет удаления без ответов xoops_confirm(array('post_id' => $post_id, 'viewmode' => $viewmode, 'order' => $order, 'forum' => $forum, 'topic_id' => $topic_id, 'ok' => 2), 'delete.php', 'Или вы хотите удалить конкретно это сообщение, без ответов на него?'); //Конец хака на предмет удаления без ответов[/quote] Все. Недостатки: Не работает на начальных мессагах, а также не выдает об этом сообщения (там вообще-то должно быть сообщение: "Вы хотите удалить всю тему целиком?"). При удалении мессаг без потомков - как правило вылетает из топика. Впринципе лечится, но не хочу слишком коренные изменения производить, тем более что они относятся не к этому хаку, а уже к следующему, и не хаку, а багфиксу. Остальные недостатки - жду от вас, сильно не тестировал, некогда. ЗЫ. Возможна доработка до многоязыкового стандарта, путем прописывания любой по вкусу лексемы вместо русского текста. Но надо ли это нам?-) Если будете прописывать - не забудьте прописать в папке english прежде всего.[/quote]" />

NewBB: Удаление сообщения без ответов на него
by Andrey_Ra on 2003/6/17 23:33:51

Этот и другие хаки доступны для скачивания тут: Несколько полезных хаков

Итак, продолжаем сериал по заявкам телезрителей ;):
Все тот же Xoops 2.0.2, 2.0.3
Модуль NewBB
Предмет хака: Создать форму удаления сообщения с возможностью отказа от удаления всех ответов на данное сообщение.

поехали:
Файл: \modules\newbb\class\class.forumposts.php, строка :251, начало функции delete():
Quote:
//Начало хака на предмет удаления без ответов
function delete($ok = 1) { //затычка для передачи параметра
if ($ok==2) { // если выбрано удаление без ответов на эту мессагу
$sql = sprintf("SELECT pid FROM %s WHERE post_id = %u", $this->db->prefix("bb_posts"), $this->post_id); //выбираем конкретную мессагу и смотрим ее родительский пид
if ($result = $this->db->query($sql)){ //если запрос удачный
$array = $this->db->fetchArray($result);
if ($array['pid']!=0){ //если это не первая мессаге в треде
$mypid=$array['pid'];
$sql= sprintf("UPDATE %s SET pid = %u WHERE pid = %u", $this->db->prefix("bb_posts"),$mypid,$this->post_id);//запрос: обновить все сообщения, в которых пид=пост-ид удаляемого, заменить на пид удаляемого
if ( !$result = $this->db->query($sql) ) {
return false; //Если не получаетя - значит вообще ничего не удаляем!
};
};
} else {
return false;
};
};
//Конец хака на предмет удаления без ответов


2. Файл \modules\newbb\delete.php, строка 71, сразу после if ( $post->istopic() ) {
Quote:

//Начало хака на предмет удаления без ответов
if ($ok==2){
redirect_header("viewforum.php?forum=$forum", 2, 'Данное сообщение было удалено без ответов на него');
} else {
redirect_header("viewforum.php?forum=$forum", 2, _MD_POSTSDELETED);
};
//Конец хака на предмет удаления без ответов


Строка 80, сразу после } else {
Quote:
//Начало хака на предмет удаления без ответов
if ($ok==2){
redirect_header("viewforum.php?forum=$forum", 2, 'Данное сообщение было удалено без ответов на него');
} else {
redirect_header("viewtopic.php?topic_id=$topic_id&order=$order&viewmode=$viewmode&pid=$pid&forum=$forum", 2, _MD_POSTSDELETED);
};
//Конец хака на предмет удаления без ответов


Строка 92, сразу после xoops_confirm(array('post_id' => $post_id, 'viewmode' => $viewmode, 'order' => $order, 'forum' => $forum, 'topic_id' => $topic_id, 'ok' => 1), 'delete.php', _MD_AREUSUREDEL);
Quote:

//Начало хака на предмет удаления без ответов
xoops_confirm(array('post_id' => $post_id, 'viewmode' => $viewmode, 'order' => $order, 'forum' => $forum, 'topic_id' => $topic_id, 'ok' => 2), 'delete.php', 'Или вы хотите удалить конкретно это сообщение, без ответов на него?');
//Конец хака на предмет удаления без ответов


Все.

Недостатки: Не работает на начальных мессагах, а также не выдает об этом сообщения (там вообще-то должно быть сообщение: "Вы хотите удалить всю тему целиком?"). При удалении мессаг без потомков - как правило вылетает из топика. Впринципе лечится, но не хочу слишком коренные изменения производить, тем более что они относятся не к этому хаку, а уже к следующему, и не хаку, а багфиксу.

Остальные недостатки - жду от вас, сильно не тестировал, некогда.

ЗЫ. Возможна доработка до многоязыкового стандарта, путем прописывания любой по вкусу лексемы вместо русского текста. Но надо ли это нам?-) Если будете прописывать - не забудьте прописать в папке english прежде всего.
Powered by XOOPS © 2001-2023 The XOOPS Project