Перейти к контенту
  • 0

Хак предупреждений


Вопрос

Репутация это совсем нето, это неинетресно. Вот на PhpBB есть такой хак пердупреждений, тама даются квадратики. Если пользователь получил уже два квадратика то третий это автономный бан. Или может можно репутацию под этот хак подделать?

Пример на PhpBB можно увидеть тут realworld.ru/forum

Ссылка на комментарий
Поделиться на других сайтах

  • Ответы 110
  • Создана
  • Последний ответ

Лучшие авторы в этом вопросе

Лучшие авторы в этом вопросе

Рекомендуемые сообщения

  • 0
P.S. Но насколько я понял Остапа, $this->moderator выдает глобально, поэтому он говорит - не поможет

Не знаю, может он и прав. Но вот я смотрю исходник и вижу что в этой переменной появляется ссылка на результат запроса, ТОЛЬКО если текущий пользователь - модератор в этом разделе либо он принадлжит той группе пользователей, которые являются модераторами в этом форуме.

Именно так и не иначе. Ни о какой глобальности речь не шла. Вот где заполняется переменная :

if ( ($ibforums->member['id']) and ($ibforums->member['g_is_supmod'] != 1) )
 {
	 $DB->query("SELECT * FROM ibf_moderators WHERE forum_id=".$this->forum['id']." AND (member_id=".$ibforums->member['id']." OR (is_group=1 AND group_id='".$ibforums->member['mgroup']."'))");
	 $this->moderator = $DB->fetch_row();
 }

 

Добавлено в [mergetime]1090579105[/mergetime]

гранды
не матюкайся :D
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Внесу ясность: $this->moderator - это массив, поэтому написать if ($this->moderator) и ждать эффекта нельзя.

Надо проверять if ($this->moderator['allow_warn']). (Это как раз настройка "Может предупреждать пользователей?")

Работает только локально в темах. Если хотим иметь $this->moderator'a в других модулях, переносим указанный Остапом код в эти самые модули.

Если в теме шарится пользователь, то $this->moderator['allow_warn'] будет равно 0, так что всё логически правильно.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Я так понимаю корни растут отсюда

warn.php

 

QUOTE

        else if ( $ibforums->vars['warn_show_own'] and $ibforums->member['id'] == $ibforums->input['mid'] )

      {

          $pass            = 1;

          $this->can_ban      = 0;

    $this->can_mod_q    = 0;

    $this->can_rem_post = 0;

    $this->times_a_day  = 0;

    $this->type      = 'member';

      }

      else

      {

          $pass = 0;

      }

 

 

 

В этой проверке мы должны дать доступ простым пользователям так, чтобы они могли прочитать сообщения, но не могли влиять на ремарки и прочее.

 

Я бы предположил, что следует убрать в if'е этот самый == $ibforums->input['mid'], и тогда будет все ОК

 

Но пусть гранды поправят меня.

 

Остап

theIggs

То что написал Angus2 все верно?

Ссылка на комментарий
Поделиться на других сайтах

  • 0

theIggs

Мой вопрос был в том, чтобы любой пользователь несмотря на группу мог посматреть чье то окно наказанией (т.к за что был наказан). Тоесть окно замечания было доступно для просмотра все.

Добавлено в [mergetime]1090624840[/mergetime]

з.ы Если нетрудно удали посты на первой страницы этой темы, а то тама целая страница спама - пока я уламывал чтобы мне помогли :D

Ссылка на комментарий
Поделиться на других сайтах

  • 0

merciful

Мой вопрос был в том, чтобы любой пользователь несмотря на группу мог посматреть чье то окно наказанией (т.к за что был наказан). Тоесть окно замечания было доступно для просмотра все.

Тебе дали код. Сделай изменения и посмотри сам. Вот ты и проверил, и не надо ждать ответов. Работает - хорошо, не работает - убрал изменения и всё.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

theIggs

Сейчяс протестим :D

 

 

2all:

А можно ли сделать еще так, чтобы после того как добавляешь замечание оно автоматически показывается в этом самом посте где ты нарушил правило. Т.е чтобы показывалось так:

 

----------------------------------

Замечание от *name*

----------------------------------

Самое замечание

 

 

----------------------------------

 

вот как

Ссылка на комментарий
Поделиться на других сайтах

  • 0
А можно ли сделать еще так, чтобы после того как добавляешь замечание оно автоматически показывается в этом самом посте где ты нарушил правило.

Идея хорошая, но только с помощью модификации. В таблице ibf_warn_logs номера постов не хранятся. В таблице ibf_posts - нет поля, чтоб туда записывать предупреждения.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Значит так :D

Удивительно, но у меня работала верно штуковина, когда $this->moderator['allow_warn'] стояла без ['allow_warn'].

Однако я теперь поправлю ;)

 

Теперь относительно моего предложениня - у меня работает. Плюсики прорисовываются только там, где модеру положено. А где нет - там нет. Но это касается только строчки под аватаркой пользователя. Если мы ткнемся в Профиль пользователя, то увидим, что плюсики стоят как и обычно - модеры могут варнить в любом месте. Это не есть хорошо :)

Таким образом приходим к файлу Profiles.php

В нем в самом конце есть код, после строчки

     //---------------------------------------------------
     // Warning stuff!!
     //---------------------------------------------------

Там ищем

     $DB->query("SELECT * FROM ibf_moderators WHERE (member_id=".$ibforums->member['id']." OR (is_group=1 AND group_id=".$ibforums->member['mgroup']."))");

     $this->moderator = $DB->fetch_row();

    

     if ( $this->moderator['mid'] AND $this->moderator['allow_warn'] == 1 )

     {

      $pass = 1;

      $mod  = 1;

     }

Вот здесь как раз осуществляется проверка. Мне, в принцепе, понятно, что можно было бы оставить в этой проверке один moderator['allow_warn'] == 1, но хотелось бы узнать - зачем проверка на поле mid ? Я посмотрел по БД - вроде как mid - это коды, что даются каждому модеру напротив своего форума. Не понятно, немного, есть же индекс форумов.

 

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

 

 

P.S. Обещаю по окончании систематизировать работу :) И выдать в виде одного текста.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Так, проверил - не срабатывает.

Если заменить $mod = 1; на $mod = 0;, то, конечно, можно избавиться от этой проблемы, но тогда модераторы теряют возможность делать изменения через профиль (а админы и супермодеры могут).

Это самое простое.

 

А вот если красиво, то что то не то в этой проверке. И так уже писал, и так... и оставлял просто

 

$this->moderator['allow_warn'] == 1, и как еще только не... что то не то.

Наверное, из запроса выше в DB надо подправить что то (косится на OR (is_group=1 AND group_id=".$ibforums->member['mgroup'].") )

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Удивительно, но у меня работала верно штуковина, когда $this->moderator['allow_warn'] стояла без ['allow_warn'].

Логично. Ты проверял if ($this->moderator). Массивы в таких условиях заменяются строчкой

Array( )
PHP проверяет, пустая ли строчка - а она не пустая - значит, условие выполняется.

Глюки бы начались, если бы ты в настройках модераторов запретил им выдавать предупреждения - они всё равно могли бы их выдавать:

$this->moderator['allow_warn'] был бы равен 0,

а $this->moderator - нет... :D

 

Если мы ткнемся в Профиль пользователя, то увидим, что плюсики стоят как и обычно - модеры могут варнить в любом месте. Это не есть хорошо

Гык, так профиль - это и есть профиль, это не тема. Там свои плюсики. Я так понимаю, что ты хочешь разрешить плюсики в профиле только в том случае, если человек пришёл из определённого форума (который он модерирует) - так вот, это невозможно.

Тебе придётся передавать в Profile.php ID форума, во-первых, - для этого в ссылках на профиль, которые формируются в Topics.php, нужно будет дописывать что-то типа &f={$this->forum['id']}. Но ты не сможешь помешать модератору вручную написать в адресной строке: ?showuser=349&f=2, например.

 

хотелось бы узнать - зачем проверка на поле mid ?

Затем, что этот запрос может не вернуть ни одной строчки, если текущий пользователь не модератор! Поэтому проверяется: если в $this->moderator'e оказалось поле mid, значит, это модератор, а если не оказалось - значит, простой мембер.

Хотя, в принципе, в данном случае достаточно и проверки $this->moderator['allow_warn'], ведь allow_warn всё равно может быть только у модератора. Но автор кода решил всё сделать по уму. :)

 

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

Читай второй абзац моего ответа. Ты всё ещё этого хочешь? ;)

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Я из профиля эти плюсики вообще убрал.

Ну даже если их оставить и вставить как ранее предполагалось защиту в warn.php, то пользоватся не смогут.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Гык, так профиль - это и есть профиль, это не тема. Там свои плюсики. Я так понимаю, что ты хочешь разрешить плюсики в профиле только в том случае, если человек пришёл из определённого форума (который он модерирует) - так вот, это невозможно.
А вот тут, раз вы хотите всё по уму - логичнее сделать, как Song. Убрать возможность банить ( оплюсивать ) из профиля, а просмотр оставить ( для разрешённых ) ... Например, если модер не может оплюсивать в во всех разделах форума, ему таки можно разрешить просмотр с профиля. То есть ориентироваться на 'allow_warn' ... Ну а оплюсивать с профиля разрешить ТОЛЬКО админам и Глоб модерам ( если у Глоб модеров тоже аллоу_варн = 1 )
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Понятно ;) увы :) Не порадовали вы меня :D

Придется оставить $mod=0; в секции модеров, таким образом убрав плюсики у всех модераторов.

Однако, убей бог, не понимаю, почему в профиле не срабатывает проверка на allow_warn, в то время как в топике она срабатывает корректно :)

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Angus2

Почему не срабатывает? Всё должно срабатывать!

Единственно что оно должно срабатывать вообще для всех модераторов независимо от раздела...

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Angus2

Если не срабатывает, скорее всего руки виноваты ... Как проверяем ???

иф( аллоу_варн == 1 ) ?

иф( аллоу_варн ) ?

иф( !аллоу_варн ) ?

 

 

 

Добавлено в [mergetime]1090705597[/mergetime]

В профайле чуть по другому ...

найди

if ( $this->moderator['mid'] AND $this->moderator['allow_warn'] == 1 )
  	 {
     $pass = 1;
     $mod  = 1;
  	 }

И замени на

if ( $this->moderator['mid'] AND $this->moderator['allow_warn'] == 1 )
  	 {
     $pass = 1;
     //$mod  = 1;
  	 }

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Остап, именно так я и делал, точнее, я в этом же месте прописал $mod = 0; что есть суть твоего комментария. В этом случае Модераторы не могут плюсовать через Профиль и всего то.

 

Но вот почему в этом if ( $this->moderator['mid'] AND $this->moderator['allow_warn'] == 1 )

не дает такой же результат, как и в Topics - непонятно.

 

Тут получается что действие глобальное, а не относительно того форума, в котором находится модератор. Хм... (рассуждает) верно. если ты смотришь профиль, то ведь неизвестно, из какого форума ты его смотришь ? Иначе должно быть - что ты загружаешь профиль из модерируемого формуа - тогда должны быть плюсики, а загружаешь из немодерируемого - тогда в этом же профиле плюсиков быть не должно... Верно, Профиль не пнимает этого, и выдается всегда глобальное... соответственно, решение $mod = 0; в профиле - единственно верное ?

Ссылка на комментарий
Поделиться на других сайтах

  • 0
если ты смотришь профиль, то ведь неизвестно, из какого форума ты его смотришь ? Иначе должно быть - что ты загружаешь профиль из модерируемого формуа - тогда должны быть плюсики, а загружаешь из немодерируемого - тогда в этом же профиле плюсиков быть не должно... Верно, Профиль не пнимает этого, и выдается всегда глобальное... соответственно, решение $mod = 0; в профиле - единственно верное ?

Именно так. Единственное приемлемое решение - проверять в профиле HTTP_REFERER, и по нему уже определять. Но тоже - 100% гарантии не даёт.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Дык мод-то оформили?
Ссылка на комментарий
Поделиться на других сайтах

  • 0

merciful

Ну как бы рассказывай давай "как подрезал, как обгонял"

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.