Перейти к содержимому


Фотография

[1.x.x]Перемещение и удаление отдельных сообщений

Форумы IBResource

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 143
theIggs
theIggs

    Покемон

  • Участники
  • Cообщений: 4 225
  • http://www.ibresource.ru/
  • Город:Новокузнецк
  • Интересы:музыка, спорт, девки и пиво
    ps с девками временно завязал %)

Отправлено

Название: Перемещение и удаление отдельных сообщений
Добавил: theIggs
Добавлен: 21 Июл 2004
Обновлен: 03 Мар 2005
Категория: IP.Board 1.x.x

В темах возле постов добавляются галочки, а в выпадающем списке модератора - новые пункты меню: "Удалить выбранные сообщения" и "Переместить выбранные сообщения" в другую тему.

Внимательно читайте тему поддержки, там важные сведения!

Нажмите здесь, чтобы скачать файл

GiV
GiV
  • Участники
  • Cообщений: 5 513
  • http://www.wtf.sh/
  • Город:да

Отправлено

Или лыжи не едут, или есть глюк с javascript, возникающий при перенесении <form method='POST' style='display:inline' выше. А именно если используется форма быстрого ответа, форма, которой оказывается вложенной в форму для модераторских опций, то вылазит ошибка

Event thread: onchange
Error:
name: TypeError
message: Statement on line 1: Expression evaluated to null or undefined and is not convertible to Object: this.form
Backtrace:
  In unknown script
    this.form.where2move.style.visibility = "hidden";
  At unknown location
    {event handler trampoline}


форму он эту не видит, как обратится к форме с именем modform я не знаю, каюсь js я не разбирал.

Если убрать быстрый ответ все ок.

theIggs
theIggs

    Покемон

  • Участники
  • Cообщений: 4 225
  • http://www.ibresource.ru/
  • Город:Новокузнецк
  • Интересы:музыка, спорт, девки и пиво
    ps с девками временно завязал %)

Отправлено

Vanish
Точно! Спасибо за сообщение, всё поправлю на досуге.

GiV
GiV
  • Участники
  • Cообщений: 5 513
  • http://www.wtf.sh/
  • Город:да

Отправлено

поискал решение, вроде нашел если заменить this.form на document.modform то все пучком (по части js)
Сами действия еще не проверял =)

Angus2
Angus2
  • Участники
  • Cообщений: 97

Отправлено

Кстати, если установлек хак уменьшения количества постов пользователя при удалении его сообщений, то удаление через эту панельку корректно работает ?

Я нашел раздел
# Пересчитать статистику темы и форума

А для пользователя ?


P.S. Модератор, я так понимаю, может перемещать только в пределах одного форума сообщения ? А если у него несколько форумов ? Может перекидывать из одного в другой ?
 //------------------------------------------
  // Не даём нашему модеру зацепить 
  // чужие форумы
  //------------------------------------------
  
   $DB->query("SELECT pid FROM ibf_posts WHERE pid IN ($idz) AND forum_id != {$this->forum['id']}");
 


theIggs
theIggs

    Покемон

  • Участники
  • Cообщений: 4 225
  • http://www.ibresource.ru/
  • Город:Новокузнецк
  • Интересы:музыка, спорт, девки и пиво
    ps с девками временно завязал %)

Отправлено

Кстати, если установлек хак уменьшения количества постов пользователя при удалении его сообщений, то удаление через эту панельку корректно работает ?

Нет, наверно. ;)
Ой, не хочется аддоны к аддонам писать... :)

P.S. Модератор, я так понимаю, может перемещать только в пределах одного форума сообщения ? А если у него несколько форумов ? Может перекидывать из одного в другой ?

Фиг знает. Логически - должен иметь возможность перемещать из своего в любой. Щас даже проверю. :)
Добавлено в [mergetime]1090614939[/mergetime]
Всё нормально. Модер может переместить сообщения из своего форума в любой другой.
Или это логически неправильно? :D

Angus2
Angus2
  • Участники
  • Cообщений: 97

Отправлено

Да в принципе нормально :D Пусть пуляют, так даже хорошо. Он все равно перенесет туда, где этой теме самое подходящее место.

А по-поводу удалений, жаааалко ;) theIggs, скажи, могу я убрать опции удаления из твоего мода и оставть только жутко полезное перемещение постов в выделенные темы ?

Либо... либо может выдрать тот кусок кода где стоит уменьшение постов пользователя в Хаке постов, и вставить вместо твоего ? (задумчиво)...
Я, конечно, только с пару неделек тут, ну попроблвать надо наверное, найти где чего вырезать и вместо чего вставлять ... :)
Я сюда напишу что вместо чего.

theIggs
theIggs

    Покемон

  • Участники
  • Cообщений: 4 225
  • http://www.ibresource.ru/
  • Город:Новокузнецк
  • Интересы:музыка, спорт, девки и пиво
    ps с девками временно завязал %)

Отправлено

могу я убрать опции удаления из твоего мода и оставть только жутко полезное перемещение постов в выделенные темы ?

Конечно, флаг в руки. ;)

ну попроблвать надо наверное

Вот-вот! Прежде всего - попробуй сам, сделаешь доброе дело. А там уж если чего не получится - поможем. :D

Song
Song
  • Участники
  • Cообщений: 9 552
  • http://www.sysman.ru
  • Город:Кострома
  • Интересы:Программирование, плаванье

Отправлено

Для тех у кого установлен мод закрытия тем с причиной, привожу правильную функцию (если сделаете как в моде, то он работать не будет):
function Mod_Panel($data, $fid, $tid, $key="") {
global $ibforums;
return <<<EOF

<div align='left' style='float:left;width:auto'>
	<form method='POST' style='display:inline' name='modform' action='{$ibforums->base_url}'>
	<input type='hidden' name='t' value='$tid'>
	<input type='hidden' name='f' value='$fid'>
	<input type='hidden' name='st' value='{$ibforums->input['st']}'>
	<input type='hidden' name='auth_key' value='$key'>
	<input type='hidden' name='act' value='Mod'>
	<select name='CODE' class='forminput' style="font-weight:bold;color:red" onchange=
	"if (this.value=='00') 
	{
  this.form.why_close.style.visibility='visible';
         this.form.where2move.style.visibility='hidden';
	} else
	if (this.value=='67') 
	{
  this.form.where2move.style.visibility='visible';
         this.form.why_close.style.visibility='hidden';
	} else 
        {
  this.form.where2move.style.visibility='hidden';
         this.form.why_close.style.visibility='hidden';
        }">
	<option value='-1' style='color:black'>{$ibforums->lang['moderation_ops']}</option>
	$data
	</select>&nbsp;<input type='submit' value='{$ibforums->lang['jmp_go']}' class='forminput'>
	<br><input type='text' class='textinput' style='width:243px; visibility:hidden' name='why_close' value="Причина закрытия темы" onclick="this.select();"/>
	<br><input type='text' class='textinput' style='width:250px; visibility:hidden' name='where2move' value="{$ibforums->lang['where2move']}" onclick="this.select();"/></form>
  </div>


EOF;
}

Добавлено в [mergetime]1090654410[/mergetime]
theIggs
у меня вопросик.
В этом моде, а также в моде закрытия темы с причиной у тебя применён единый принцип - при выборе нужного пункта меню модпанели, появляется текстовое поле, которое и принимает инфу. Но когда этот пункт не выбран, то этого поля нет, но место для него резервируется пустым. Это очень некрасиво.
Нельзя ли сделать также как в IPB в "Опции темы", там когда выбираешь просто в середину вставляется кусок кода (там вставляется таблица). Нельзя ли сделать, чтобы у тебя вставлялось соответствующее текстовое поле, раздвигая при этом комбобокс модпанели и форму быстрого ответа?

Song
Song
  • Участники
  • Cообщений: 9 552
  • http://www.sysman.ru
  • Город:Кострома
  • Интересы:Программирование, плаванье

Отправлено

Кстати, если установлек хак уменьшения количества постов пользователя при удалении его сообщений, то удаление через эту панельку корректно работает ?

показываю как это сделать.
После установки мода найти:
 //---------------------------------------
  // Вперёд и с песней
  //---------------------------------------
(Кстати с моим ником этот отрывок кода Игса приобретает вполне осмысленное действие :D )
далее вырезаем кусок
 # Открепить аттачи
  $DB->query("SELECT * FROM ibf_posts WHERE pid IN ({$ibforums->input['pidz']})");
  
  while ($post = $DB->fetch_row())
  {
 	 if ($post['attach_id'] != "")
 	 {
    if (is_file($this->upload_dir."/".$post['attach_id']))
    {
   	 unlink ($this->upload_dir."/".$post['attach_id']);
    }
 	 }
  }
и заменяем его на
 # Открепить аттачи
  $DB->query("SELECT author_id,attach_id FROM ibf_posts WHERE pid IN ({$ibforums->input['pidz']})");

                $ids = array();
  while ($post = $DB->fetch_row())
  {
          $ids[ $post['author_id'] ] ++;
 	 if ($post['attach_id'] != "")
 	 {
    if (is_file($this->upload_dir."/".$post['attach_id']))
    {
   	 unlink ($this->upload_dir."/".$post['attach_id']);
    }
 	 }
  }

  # Уменьшить счётчик сообщений у соответствующих пользователей
                if ( intval($this->forum['inc_postcount']) == 1 ) foreach ($ids as $mid => $count) 
    $DB->query("UPDATE ibf_members SET posts=posts-$count WHERE id='".$mid."'");


theIggs
theIggs

    Покемон

  • Участники
  • Cообщений: 4 225
  • http://www.ibresource.ru/
  • Город:Новокузнецк
  • Интересы:музыка, спорт, девки и пиво
    ps с девками временно завязал %)

Отправлено

Song

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

Вот какой вид функции Mod_Panel() у меня при этом получился:
function Mod_Panel($data, $fid, $tid, $key="") {
global $ibforums;
return <<<EOF
<div align='left' style='float:left;width:auto'>
<form method='POST' style='display:inline' name='modform' action='{$ibforums->base_url}'>
<input type='hidden' name='t' value='$tid'>
<input type='hidden' name='f' value='$fid'>
<input type='hidden' name='st' value='{$ibforums->input['st']}'>
<input type='hidden' name='auth_key' value='$key'>
<input type='hidden' name='act' value='Mod'>
<select name='CODE' class='forminput' style="font-weight:bold;color:red" onchange=
"var w2m, wc;
if (document.getElementById){w2m=document.getElementById('w2m');wc=document.getElementById('wc');
} else if (document.all){w2m=document.all['w2m'];wc=document.all['wc'];
} else if (document.layers){w2m=document.layers['w2m'];wc=document.layers['wc'];
}
if (this.value=='00'){
w2m.style.display = 'none';
wc.style.display = '';
} else if (this.value=='67'){
wc.style.display = 'none';
w2m.style.display = '';
} else {
wc.style.display = 'none';
w2m.style.display = 'none';
}">
<option value='-1' style='color:black'>{$ibforums->lang['moderation_ops']}</option>
$data
</select>&nbsp;<input type='submit' value='{$ibforums->lang['jmp_go']}' class='forminput'>
<div style='display:none;' id='wc'><input type='text' class='textinput' style='width:250px;' name='why_close' value="Причина закрытия темы" onclick="this.select();" /></div>
<div style='display:none;' id='w2m'><input type='text' class='textinput' style='width:250px;' name='where2move' value="{$ibforums->lang['where2move']}" onclick="this.select();"/></div></form>
</div>
EOF;
}
Напоминаю для всех, что функция Mod_Panel() находится в файле skin_topic.php.

Song, спасибо тебе большое за дополнения! :D

И ещё, маленькая рекомендация для всех - для большего удобства модерирования ставьте мод Просмотр всех страниц темы по ссылке All (вариант его можно найти тут или .поиском по нашему форуму.

theIggs
theIggs

    Покемон

  • Участники
  • Cообщений: 4 225
  • http://www.ibresource.ru/
  • Город:Новокузнецк
  • Интересы:музыка, спорт, девки и пиво
    ps с девками временно завязал %)

Отправлено

В общем, постарался я учесть замечания Vanishа (логично, что формы, вложенные друг в друга, не хотят работать), но получается какая-то галиматья. Пришлось переменные на уровне JavaScript разбирать.
Если кто знает более простой метод, поделитесь. :D

Прикрепленные файлы

  • Прикрепленный файл  pius.zip   4,15К   185 скачиваний


theIggs
theIggs

    Покемон

  • Участники
  • Cообщений: 4 225
  • http://www.ibresource.ru/
  • Город:Новокузнецк
  • Интересы:музыка, спорт, девки и пиво
    ps с девками временно завязал %)

Отправлено

Для совмещения с хаком why close topic (причина закрытия темы) функция Mod_Panel() примет вид:
function Mod_Panel($data, $fid, $tid, $key="") {
global $ibforums;
return <<<EOF
<div align='left' style='float:left;width:auto'>
<form method='POST' style='display:inline' name='modform' action='{$ibforums->base_url}'>
<input type='hidden' name='t' value='$tid' />
<input type='hidden' name='f' value='$fid' />
<input type='hidden' name='st' value='{$ibforums->input['st']}' />
<input type='hidden' name='auth_key' value='$key' />
<input type='hidden' name='act' value='Mod' />
<select name='CODE' class='forminput' style="font-weight:bold;color:red" onchange=
"var w2m, wc;
if (document.getElementById){w2m=document.getElementById('w2m');wc=document.getElementById('wc');
} else if (document.all){w2m=document.all['w2m'];wc=document.all['wc'];
} else if (document.layers){w2m=document.layers['w2m'];wc=document.layers['wc'];
}
if (this.value=='00'){
w2m.style.display = 'none';
wc.style.display = '';
} else if (this.value=='67'){
wc.style.display = 'none';
w2m.style.display = '';
} else {
wc.style.display = 'none';
w2m.style.display = 'none';
}">
<option value='-1' style='color:black'>{$ibforums->lang['moderation_ops']}</option>
$data
</select>&nbsp;<input type='submit' value='{$ibforums->lang['jmp_go']}' class='forminput' onClick='collect_pidz();' />
<script type="text/javascript">
<!--
function collect_pidz()
{
for (var i in document.collect.elements){
 if (i.indexOf('pozt')!=-1){
  var ne=document.createElement("input");
  ne.name=document.collect[i].name;
  ne.type='hidden';
  if (document.collect[i].checked.toString()=='true') ne.value=1; else ne.value=0;
  document.modform.appendChild(ne);
}}}
//-->
</script>
<div style='display:none;' id='wc'><input type='text' class='textinput' style='width:250px;' name='why_close' value="Причина закрытия темы" onclick="this.select();" /></div>
<div style='display:none;' id='w2m'><input type='text' class='textinput' style='width:250px;' name='where2move' value="{$ibforums->lang['where2move']}" onclick="this.select();"/></div></form>
</div>
EOF;
}
Плюс надо не забыть добавить это:
Найти:

	<div align='right' class='postlinksbar'>
   <strong><!--{IBF.START_NEW_POLL}--><a href='{$ibforums->base_url}act=Track&amp;f={$data['FORUM']['id']}&amp;t={$data['TOPIC']['tid']}'>{$ibforums->lang['track_topic']}</a> |
   <a href='{$ibforums->base_url}act=Forward&amp;f={$data['FORUM']['id']}&amp;t={$data['TOPIC']['tid']}'>{$ibforums->lang['forward']}</a> |
   <a href='{$ibforums->base_url}act=Print&amp;client=printer&amp;f={$data['FORUM']['id']}&amp;t={$data['TOPIC']['tid']}'>{$ibforums->lang['print']}</a></strong>
	</div>

Ниже добавить:

<form method='POST' style='display:inline' name='collect' action='{$ibforums->base_url}'>

Найти:

function TableFooter($data) {
global $ibforums;
return <<<EOF

Заменить на:

function TableFooter($data) {
global $ibforums;
return <<<EOF
</form>


Song
Song
  • Участники
  • Cообщений: 9 552
  • http://www.sysman.ru
  • Город:Кострома
  • Интересы:Программирование, плаванье

Отправлено

Перестал работать перенос сообщений, пишет "Не выбрано ни одного сообщения". По крайней мере в Опере не пашет.
Я так понимаю дело в той функции на ява скрипте, которая собирает отмеченные чекбоксы, явилась узким местом.
theIggs, идеи есть? :D

theIggs
theIggs

    Покемон

  • Участники
  • Cообщений: 4 225
  • http://www.ibresource.ru/
  • Город:Новокузнецк
  • Интересы:музыка, спорт, девки и пиво
    ps с девками временно завязал %)

Отправлено

Я так понимаю дело в той функции на ява скрипте, которая собирает отмеченные чекбоксы, явилась узким местом.

Так и есть. Работаю над проблемой, но решения пока не видать.
Вернее, замечено, что если делать
ne.type='text';
вместо 'hidden', то всё работает (но тогда перед отправкой ответа успевают промелькнуть <input>'ы. :D Я решительно не понимаю принципов яваскрипта... ;)
Добавлено в [mergetime]1090682130[/mergetime]
Вот так кажися тоже работает, но не могу нормально оттестировать. :)
<script type="text/javascript">
<!--
function collect_pidz()
{
for (var i in document.collect.elements){
 if (i.indexOf('pozt')!=-1){
  var ne=document.createElement("input");
  ne.name=document.collect[i].name;
  ne.type='text';
  if (document.collect[i].checked.toString()=='true') ne.value=1; else ne.value=0;
  document.modform.appendChild(ne);
  ne.style.display='none';
}}}
//-->
</script>


Song
Song
  • Участники
  • Cообщений: 9 552
  • http://www.sysman.ru
  • Город:Кострома
  • Интересы:Программирование, плаванье

Отправлено

theIggs
я понял в чём проблема нерабочести первого варианта (с формой). Вовсе не из-за того что не хочет браться вложенность форм.
Просто дело в том, что форма (та которая перед чекбоксами) начинается у всех юзеров, а заканчивается - </form> только у модераторов и админов. Поэтому у простых юзеров, она заканчивается формой быстрого ответа, который от этого и не работает. Т.е. на лицо не кратность количества тегов.

P.S. А я-то думаю, чего у меня пользователи все кричат, что ничего не работает, а у меня всё ок :D

theIggs
theIggs

    Покемон

  • Участники
  • Cообщений: 4 225
  • http://www.ibresource.ru/
  • Город:Новокузнецк
  • Интересы:музыка, спорт, девки и пиво
    ps с девками временно завязал %)

Отправлено

P.S. А я-то думаю, чего у меня пользователи все кричат, что ничего не работает, а у меня всё ок

Странно, а я на локалке проверял из-под админа. :\ Надо ещё раз проверить.

theIggs
theIggs

    Покемон

  • Участники
  • Cообщений: 4 225
  • http://www.ibresource.ru/
  • Город:Новокузнецк
  • Интересы:музыка, спорт, девки и пиво
    ps с девками временно завязал %)

Отправлено

Нет, не получается.

document.modform.where2move.style - есть null или не является объектом

:D

Song
Song
  • Участники
  • Cообщений: 9 552
  • http://www.sysman.ru
  • Город:Кострома
  • Интересы:Программирование, плаванье

Отправлено

У меня не было такого из-под себя ни в ослике ни в опере.
Ну ладно, если через яву решится, лучше через яву.

Song
Song
  • Участники
  • Cообщений: 9 552
  • http://www.sysman.ru
  • Город:Кострома
  • Интересы:Программирование, плаванье

Отправлено

Ну вообщем, как получилось у меня:
1) skin_topic.php
Я вернулся к первоначальному варианту, в котором
а) в модпанели у меня ява скрипта нет
б) в PageTop я ввёл переменную:
  <div align='right' class='postlinksbar'>
  <b><!--{IBF.START_NEW_POLL}--><a href='{$ibforums->base_url}act=Track&amp;f={$data['FORUM']['id']}&amp;t={$data['TOPIC']['tid']}'>{$ibforums->lang['track_topic']}</a> |
  <a href='{$ibforums->base_url}act=Forward&amp;f={$data['FORUM']['id']}&amp;t={$data['TOPIC']['tid']}'>{$ibforums->lang['forward']}</a> |
  <a href='{$ibforums->base_url}act=Print&amp;client=printer&amp;f={$data['FORUM']['id']}&amp;t={$data['TOPIC']['tid']}'>{$ibforums->lang['print']}</a>{$data['TOPIC']['fav_text']}</b>
  </div>
{$data['TOPIC']['modform']}  // <-- ТА САМАЯ переменная :)

в) в ф-ии TableFooter я убрал </form>.

2) Topics.php
найти
$this->output .= $this->html->PageTop( array( 'TOPIC' => $this->topic, 'FORUM' => $this->forum,  ) );
вставить перед ним
                $this->topic['modform'] = "";
  if ( $this->moderator['mid'] or $ibforums->member['g_is_supmod'] ) $this->topic['modform'] = "<form method='POST' style='display:inline' name='modform' action='{$ibforums->base_url}'>";


Всё работает для пользователей, гостей, модераторов, админов. Проверял в IE 6.0 и Опере.
Т.е. имеем вложенную, но рабочую форму.

Сообщение отредактировал Song: 24 Июль 2004 - 21:09





Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных