[BETA] Democracy MOD 0.2.1 (reputation + warnings + reports)

Здесь авторы могут постить бета-версии своих модификаций для phpBB 2.0.x. Внимание! Не устанавливайте бета-версии модов на работающие форумы!

Сообщение Xpert 07.01.2006 7:48

IncominG
Аккуратнее на поворотах... Информация ETZel действительно очень интересна и важна. О его компетентности судить не тебе.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Xpert
phpBB Guru
 
Сообщения: 5636
Зарегистрирован: 13.03.2004 21:27
Откуда: msk.ru


Сообщение ETZel 07.01.2006 10:48

IncominG писал(а):У меня тож стоит и все замечателдьно работает. Переменная объявлена - не стоит спорить...
Carbofos нас рассудит :mrgreen:

IncominG писал(а):фу как невежливо А местами я что, безграмотный?
Есть чуток
Можно поподробней? оч любопытно...

Немножко фиксов НЕ в usercp_reputation.php:
Код: Выделить всё
#OPEN post_report.php
#FIND
      $confirm = false;
      $confirm = isset($HTTP_POST_VARS['confirm']);
#REPLACE
      $confirm = isset($HTTP_POST_VARS['confirm']);


#OPEN page_header.php
#FIND
            $set = REPUTATION_BAN_EXPIRED;
#AFTER ADD
# Снимает expired баны когда включена опция "помечать как прошлые"
            $sql = 'DELETE FROM ' . BANLIST_TABLE . "
               WHERE ban_userid = '" . $row['user_id'] . "'";
            if ( !$db->sql_query($sql) )
            {
               message_die(GENERAL_ERROR, "Couldn't obtain banlist information", "", __LINE__, __FILE__, $sql);
            }


:!: Полностью фиксенный usercp_reputation.php и profile_view_reputation.tpl (в конце поста).
Это файл из democracy012 + все вышеописанный фиксы с свмого начала темы + несколько изменений:
1) добавил в function display_details($type, $forums_auth) параметр $forums_auth и соотв. код в блок REPUTATION_VIEW, чтобы модеры видели кнопки IP, Delete и Edit только если отзыв сделан в их форуме.
2) изменил код вычисления значения $approve в блоках REPUTATION_EDIT и REPUTATION_DELETE. Наконец-то полностью разобрался с $user_id и $voter_id. Это также и багфикс.
Код: Выделить всё
#FIND
   if ( !$post_deleted )
   {
      $is_auth = array();
      $is_auth = auth(AUTH_ALL, $forum_id, $userdata);

      if ( $is_auth['auth_mod'] )
      {
         $approve = true;
      }
      else if ( !$board_config['reputation_users_can_delete'] ) // зачем тут отрицание ???
      {
         if ( $user_id == $userdata['user_id'] )
         {
            $approve = true;
         }
      }
   }
   else
   {
      if ( $userdata['user_level'] == ADMIN || $userdata['user_level'] == MOD )
      {
         message_die(GENERAL_MESSAGE, $lang['reputation_deleted_no_edit']);
      }
   }
#REPLACE
# это косметика + $approved всегда будет определен
   if ( !$post_deleted )
   {
      $is_auth = auth(AUTH_ALL, $forum_id, $userdata);
      $approve = $is_auth['auth_mod'] || ($board_config['reputation_users_can_delete'] && $user_id == $userdata['user_id']);
   }
   else
   {
      if ( $userdata['user_level'] == ADMIN || $userdata['user_level'] == MOD )
      {
         message_die(GENERAL_MESSAGE, $lang['reputation_deleted_no_edit']);
      }
      $approve = false;
   }
#FIND только первое вхождение
   $user_id = intval($forum_topic_data['user_id']);
#AFTER ADD
   $voter_id = intval($forum_topic_data['voter_id']);
#FIND
   if ( !$post_deleted )
   {
      $is_auth = array();
      $is_auth = auth(AUTH_ALL, $forum_id, $userdata);

      if ( $is_auth['auth_mod'] )
      {
         $approve = true;
      }
      else if ( !$board_config['reputation_users_can_delete'] ) // зачем тут отрицание ???
      {
         if ( $user_id == $userdata['user_id'] )
         {
            $approve = true;
         }
      }
   }
   else
   {
      if ( $userdata['user_level'] == MOD )
      {
         if ( $user_id == $userdata['user_id'] )
         {
            $approve = true;
         }
      }
      else if ( $userdata['user_level'] == ADMIN )
      {
         $approve = true;
      }
   }
#REPLACE
# модератор может удалять отзывы на удаленные посты из его форума, почему нет?
   $is_auth = auth(AUTH_ALL, $forum_id, $userdata);
   $approve = $is_auth['auth_mod'] || ($board_config['reputation_users_can_delete'] && $voter_id == $userdata['user_id']);

3) использую текстовые кнопки, поэтому облагородил (укоротил надпись и добавил title) код, обявляющий $ip/$edit/$delpost/$pm/$profile/$email/$icq и т.д.
На тех, кто использует графические кнопки (в т.ч. subSilver), это не влияет.
4) объединил блоки 'warn' и 'rep' в profile_view_reputation.tpl. Для этого пришлось малость переделать переменную $expire (постить код уже не буду, "Total Commander -> Files -> Compare by content" и все видно)
Вложения
democracy_fixes.zip
(15.08 Кб) Скачиваний: 309
Последний раз редактировалось ETZel 07.01.2006 11:42, всего редактировалось 2 раз(а).
Аватара пользователя
ETZel
phpBB 1.4.4
 
Сообщения: 97
Зарегистрирован: 03.01.2006 10:47
Откуда: Челябинск

Сообщение IncominG 07.01.2006 10:49

Xpert
Есть моменты где он не прав...
Если человек еще не потрудился посмотреть объявлена переменная или нет а и уже говорит что она не объявлена - о чем тут говорить...
IncominG

 

Сообщение ETZel 07.01.2006 11:07

IncominG
Про неправ: ГДЕ? А могу ошибиться - поправьте и не парьтесь :?
Про дружбу: с тов. Xpert не знаком ни в реале ни виртуально.
Про $poster_id: я же привел код, где она используется ДО объявления. Не в profile.php же она объявлена? Я вставлял там error_reporting(E_ALL) - выводился Notice: undefined var, я вставлял там var_dump($poster_id) - выводился NULL. Мне что, приснилось все это? Покажите пожалуйста, где она объявлена ДО строки
Код: Выделить всё
if ( $poster_id == ANONYMOUS )


PS. перекачайте democracy_fixes.zip, я первый раз закачал с ошибкой (не убрал совместимость с модом "Always show edited by")
Аватара пользователя
ETZel
phpBB 1.4.4
 
Сообщения: 97
Зарегистрирован: 03.01.2006 10:47
Откуда: Челябинск

Сообщение IncominG 07.01.2006 11:48

ETZel писал(а):Можно поподробней? оч любопытно...

Я же вам писал уже...
Млин я мало того твоего поста не заметил да еще пошел твои фиксы ставить ;) блин во дурак ;) Спасибо за перепаковочку только в конце редирект все равно ;)

Добавлено спустя 1 минуту 45 секунд:

ETZel писал(а):Про $poster_id: я же привел код, где она используется ДО объявления. Не в profile.php же она объявлена? Я вставлял там error_reporting(E_ALL) - выводился Notice: undefined var, я вставлял там var_dump($poster_id) - выводился NULL. Мне что, приснилось все это? Покажите пожалуйста, где она объявлена ДО строки

Ой действительно... Убедили... ;)
Как фиксить будем? ;)

Добавлено спустя 15 минут 45 секунд:

Код: Выделить всё
         else
         {
            $set = REPUTATION_BAN_EXPIRED;
            $sql = 'DELETE FROM ' . BANLIST_TABLE . "
               WHERE ban_userid = '" . $row['user_id'] . "'";
            if ( !$db->sql_query($sql) )
            {
               message_die(GENERAL_ERROR, "Couldn't obtain banlist information", "", __LINE__, __FILE__, $sql);
            }
         }

г-н ETZel
вы хотите чтоб было так?
глядя на этот код:
Код: Выделить всё
         if ( $row['modification'] == REPUTATION_WARNING )
         {
            $set = REPUTATION_WARNING_EXPIRED;
         }
         else
         {
            $set = REPUTATION_BAN_EXPIRED;
            $sql = 'DELETE FROM ' . BANLIST_TABLE . "
               WHERE ban_userid = '" . $row['user_id'] . "'";
            if ( !$db->sql_query($sql) )
            {
               message_die(GENERAL_ERROR, "Couldn't obtain banlist information", "", __LINE__, __FILE__, $sql);
            }
         }
         $sql = 'UPDATE ' . REPUTATION_TABLE . '
            SET modification = ' . $set . '
            WHERE id = ' . $row['id'];
         if ( !($result = $db->sql_query($sql)) )
         {
            message_die(GENERAL_ERROR, 'Couldn\'t cancel expired warnings', '', __LINE__, __FILE__, $sql);
         }

Это как минимум не логично
IncominG

 

Сообщение Поручик 07.01.2006 12:02

IncominG писал(а):Че твой дружбан чтоль? Ну дык и вешай объяву типа не обижайте ETZel'я!

kosjak писал(а):IncominG, ты че, дурак

Скажи спасибо, что нашелся человек, досконально изучивший полезный мод.
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB2 | FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции

наш форум http://forum.aeroion.ru/
Аватара пользователя
Поручик
Его Благородие
Его Благородие
 
Сообщения: 3632
Зарегистрирован: 12.05.2005 16:25
Откуда: Оренбург (Южный Урал)

Сообщение IncominG 07.01.2006 12:05

А при чем тут
Поручик писал(а):kosjak писал(а):
??
Поручик писал(а):Скажи спасибо, что нашелся человек, досконально изучивший полезный мод.

Он тоже ошибается... Вот лучше почитай и сделай замечания...
IncominG

 

Сообщение lusever 07.01.2006 12:21

ETZel, СПАСИБО.
:idea: Но лучше конечно патч файлы. Но пока так изучим.
lusever
phpBB 1.4.3
 
Сообщения: 67
Зарегистрирован: 10.03.2005 20:46

Сообщение ETZel 07.01.2006 13:13

IncominG писал(а):г-н ETZel
вы хотите чтоб было так?
глядя на этот код:
Я не совсем понял вопрос. Код может и не очень изячно, но баг исправляет. Главное тут идея (бан надо снять независимо от опций). Предложите, пожалуйста, свой вариант.

Баги с редиректом в usercp_democracy.php
Код: Выделить всё
#FIND в 2-х местах
      redirect(append_sid("login.$phpEx?redirect=profile.$phpEx&mode=reputation&m=$rep_mode&" . POST_POST_URL . "$post_id", true));
#REPLACE
# не хватает '=' перед $post_id
      redirect(append_sid("login.$phpEx?redirect=profile.$phpEx&mode=reputation&m=$rep_mode&" . POST_POST_URL . "=$post_id", true));

#FIND
      $post_append = "#$review_id";
      redirect(append_sid($redirect, true) . $post_append);
#REPLACE
# косметика
      redirect(append_sid($redirect, true) . "#$review_id");

# решение вопроса о необъявленном $poster_id
#FIND
      if ( $poster_id == ANONYMOUS )
#BEFORE ADD
      $poster_id = $postrow['user_id'];
#FIND
      $poster_id = $postrow['user_id'];
      $poster = ( $poster_id == ANONYMOUS ) ? $lang['Guest'] : $postrow['username'];
#REPLACE
      $poster = ( $poster_id == ANONYMOUS ) ? $lang['Guest'] : $postrow['username'];


Кому нужен patch - пожалуйста (фиксы из этого поста включены):
Вложения
usercp_reputation_fixes.zip
patch по просьбе lusever
(4.39 Кб) Скачиваний: 279
Аватара пользователя
ETZel
phpBB 1.4.4
 
Сообщения: 97
Зарегистрирован: 03.01.2006 10:47
Откуда: Челябинск

Сообщение IncominG 07.01.2006 15:33

ETZel
Просто как-то нелогично получается :(
варны мы оставляем без изменений, а бан мы снимаем в любом случае... То-ли с мозгами у меня что-то стало то ли еще что... Но я не понимаю зачем?
IncominG

 

Сообщение Xpert 07.01.2006 15:58

IncominG
Я вам еще раз могу повторить - мое терпение небезгранично. Если вы досконально не изучали код мода, то не надо пытаться что-либо утверждать. Пока вы будете вести себя подобно этому:
Участник - Утверждение 1
Вы - Да ты че ты не прав
Участник - Это доказано следущим: ...
Вы: Не прав сто пудов, не гони волну...
Участник: Смотрите внимательно сюда: ...
Вы: Ой, да, ошибся, ой-ой-ой...

... к вам и отношение будет соотвествующее. Хотя к вам многие пытаются относиться нормально, но вы не можете отрицать что подобную репутацию вы создали себе сами. Вообще, можете с такоми заскоками скоро влететь в бессрочный бан...
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Xpert
phpBB Guru
 
Сообщения: 5636
Зарегистрирован: 13.03.2004 21:27
Откуда: msk.ru

Сообщение ETZel 07.01.2006 17:57

IncominG, кусок кода, который вы приводили, с комментариями.
Код: Выделить всё
else
{
   // стоит опция сохранять истекшие баны/предупреждения

   if ( $row['modification'] == REPUTATION_WARNING )
   {
      // истекло предупреждение - надо сменить его состояние (поле phpbb_reputation.modification)
      // с REPUTATION_WARNING на REPUTATION_WARNING_EXPIRED
      $set = REPUTATION_WARNING_EXPIRED;
   }
   else // $row['modification'] == REPUTATION_BAN
   {
      // если бан - надо сменить REPUTATION_BAN на REPUTATION_BAN_EXPIRED
      $set = REPUTATION_BAN_EXPIRED;
   }
   // собсно, меняем состояние
   $sql = 'UPDATE ' . REPUTATION_TABLE . '
      SET modification = ' . $set . '
      WHERE id = ' . $row['id'];
   if ( !($result = $db->sql_query($sql)) )
   {
      message_die(GENERAL_ERROR, 'Couldn\'t cancel expired warnings', '', __LINE__, __FILE__, $sql);
   }
      
   // ВОПРОС!!! почему не удаляем пользователя из BANLIST_TABLE, хотя бан истек???
   // ОТВЕТ: это баг, если $row['modification'] == REPUTATION_BAN, то надо добавить код удаления юзера из банлиста, что я и сделал выше, в блоке else
}
Больше пояснять ничего не буду. Ваше отношение - это кошмар.
Аватара пользователя
ETZel
phpBB 1.4.4
 
Сообщения: 97
Зарегистрирован: 03.01.2006 10:47
Откуда: Челябинск

Сообщение Mr. Anderson 07.01.2006 21:57

IncominG
И после этого ты ждешь к себе хотя бы нормального отношения? Как ты к людям, так и они к тебе, знаешь ли...
Правила конференции (20.12.2007) | Общие ошибки новичков (07.11.2005) | Шаблон запроса | Руководство пользователя | FAQ
Последние и единственно актуальные на сегодня версии - 2.0.23 и 3.0.3!
Поддержка по ICQ, e-mail и ЛС оказывается только за WM!


Da Blog
Аватара пользователя
Mr. Anderson
phpBB Guru
 
Сообщения: 2869
Зарегистрирован: 13.03.2004 21:32
Откуда: СССР

Сообщение ETZel 07.01.2006 22:53

Уж полночь близится, а Carbofos'а все нет :?

К размышлению: блоки 'warn' и 'rep' в profile_view_reputation.tpl, наверное, не стоило объединять. Они по-разному должны выглядеть! (в 'warn' - адский огонь, черти, котлы с кипящей смолой и горящая надпись: позор на 30 суток; а 'rep' можно раскрасить в 2 цвета, в зависимости от направления изменения репутации, как это делает мод для IPB). Может их даже по разным страницам разнести? Мало ли что они на одном движке. С точки зрения юзера - это две разных системы. Мнения?
Аватара пользователя
ETZel
phpBB 1.4.4
 
Сообщения: 97
Зарегистрирован: 03.01.2006 10:47
Откуда: Челябинск

Сообщение MadCat_S 08.01.2006 3:31

ETZel писал(а):К размышлению: блоки 'warn' и 'rep' в profile_view_reputation.tpl, наверное, не стоило объединять
Я тоже так думаю, что их лучше оставить раздельно
Аватара пользователя
MadCat_S
phpBB 1.4.3
 
Сообщения: 60
Зарегистрирован: 25.09.2005 16:16

Пред.След.

Вернуться в Бета-версии модов для phpBB 2.0.x

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0