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

использование подписи


movies

Вопрос

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

  • 0
movies, опиши подробнее - напишем. :D В принципе, я так понимаю, чекбокс "включить подпись" должен остаться, но независимо от его состояния - если мемберу запрещено использовать подпись, то подпись не покажется. Т.е. примерно как на ру-борде. Yes / No / Abort?..
Ссылка на комментарий
Поделиться на других сайтах

  • 0

theIggs

я так понимаю, чекбокс "включить подпись" должен остаться

может, логичнее было бы отображать чекбокс "Включить подпись?" только определенным группам, остальным не отображать?

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

  • 0

Итак, будем писать мод прямо тут.

Для начала нам потребуется новое поле в таблице групп - где-то же надо хранить значение "Подпись: Вкл/Выкл". Хотя ру-борд это делает в куках, но у них немного другая система...

 

Итак, лезем в Админцентр -> SQL Management -> mySQL Toolbox и выполняем команду:

ALTER TABLE ibf_groups ADD `allow_sig` TINYINT(1) DEFAULT 1;

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

 

Далее. Если мы хотим отображать сабжевый чекбокс не всем пользователям, придётся вырезАть его из скина и обсчитывать в модуле из sources. Чекбокс этот показывается только при ответах. В календаре (calendar.php) он всегда вырезается, а в ПМках (Messenger.php) - его нет, подпись добавляется сама собой.

Итак, лезем в skin_post.php. Опытным путём (поиск по строчке sig) быстро находим вот такой кусочек:

<!--IBF.SIG-->

Вырезаем. Ух ты, чекбокс исчезает! Значит, оно. (PS Вернуть на место! И вообще, делайте бэкапы! ;))

 

Вырезать нам его нужно не всегда, а только определённым группам. Быстренько пробегаемся поиском по папке sources, ищем вызовы функции postbox_buttons, которая лежит в skin_post.php (ведь именно в ней мы нашли нужный кусок). Да, в Post.php вызов имеется. Лезем в Post.php.

Вот нужная нам строчка:

return $this->html->postbox_buttons($raw_post);

Меняем её на такой блок:

	 if ($ibforums->member['allow_sig'])
 {
	 return $this->html->postbox_buttons($raw_post);
 }
 else
 {
	 return str_replace('<!--IBF.SIG-->', '', $this->html->postbox_buttons($raw_post));
 }

По-русски: если у пользователя стоит разрешение на использование подписи, вернуть нормальную форму ответа, иначе вырезать из формы ответа ссылочку на подпись и вернуть урезанный вариант.

 

В принципе, так мы защитились от ненужных подписей в топиках. Нет чекбокса - нет и галочки в нём, логично? :) Впрочем, некоторые крутые хакеры могут добавить чекбокс вручную - на такой случай лезем в Post.php, находим строчку:

$ibforums->input['enablesig']   = $ibforums->input['enablesig']   == 'yes' ? 1 : 0;

и после неё железно убиваем подпись нежелательным пользователям, добавляем:

if (! $ibforums->member['allow_sig']) $ibforums->input['enablesig'] = 0;

 

Теперь разберёмся с ПМками. Кто-нить предполагает, зачем нужна подпись в ПМках? :) По мне так нафиг не нужна.

Итак, Messenger.php. Там своя система, но мы, как обычно, поиском находим 'sig'. Вот нужная нам строчка:

if ($this->member['view_sigs'])

Итак, подпись не выводится, если у адресата стоит в настройках форума Отображать подписи пользователей в темах? = Нет. Сюда же надо добавить проверку на разрешение подписи у отправителя. Отправитель у нас здесь $member, получатель - $this->member. Смотрим чуть выше на кусок кода:

   $DB->query("SELECT g.*, m.* ".
        "FROM ibf_members m, ibf_groups g WHERE id='".$msg['from_id']."' and g.g_id=m.mgroup");
        
   $member = $DB->fetch_row();

Итак, вся информация об отправителе (его свойства + свойства группы) выбирается одним запросом. Значит, тут ничего дописывать не надо. Осталось лишь исправить проверку: возвращаемся к строчке

if ($this->member['view_sigs'])

и меняем её на

if ($this->member['view_sigs'] AND $member['allow_sig'])

Вот подпись в ПМках и пропала.

 

Напоследок не мешало бы добавить какой-нибудь интерфейсик, чтоб менять разрешения группам из Админцентра. За настройки групп у нас отвечает файл ad_groups.php, его и будем править.

В админке, слава богу, ланг-паков нет, поэтому то, что видишь на страничке IE, найдёшь и в исходном коде. Поэтому лезем в свойства какой-нибудь группы и определяем в какое место хотим добавить новую настройку. Я хочу после "Can edit own profile info?". Копирую эту строчку из окошка браузера, открываю ad_groups.php, Ctrl+F, Shift+Ins, Enter :) Вот, нашли такое место:

	 $ADMIN->html .= $SKIN->add_td_row( array( "<b>Can edit own profile info?$guest_legend" ,
             $SKIN->form_yes_no("g_edit_profile", $group['g_edit_profile'] )
             )      );

Допишем по образу и подобию ниже:

	 $ADMIN->html .= $SKIN->add_td_row( array( "<b>Может использовать подпись?$guest_legend" ,
             $SKIN->form_yes_no("allow_sig", $group['allow_sig'] )
             )      );

Где-то наши настройки должны и сохраняться, поэтому ищем строчку g_edit_profile. Находим:

'g_edit_profile'       => $IN['g_edit_profile'],

Опять же по образу и подобию ниже добавляем:

'allow_sig'            => $IN['allow_sig'],

Заходим в редактирование группы ещё раз и пробуем поменять Yes на No в новой настройке. Работает? Поздравляю с успешно проделанной работой! ;)

 

Надеюсь, после этой темы многие поймут, как легко на самом деле писать модификации. :D

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

  • 0

урок не прошел даром

 

можно в post.php

$this->output = str_replace( '<!--IBF.SIG-->'  , $this->html->get_box_enablesig( $default_checked['sig'] )  , $this->output );

заменить на

$this->output = str_replace( '<!--IBF.SIG-->'  , $ibforums->member['allow_sig'] ? $this->html->get_box_enablesig( $default_checked['sig'] ) : "", $this->output );

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

  • 0

но вот еще какой момент...

некоторые пользователи на данный момент уже использовали свою подпись в сообщениях

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

 

я так понимаю в Topics.php следует править запрос и блок

if ($poster['signature'] and $ibforums->member['view_sigs'])

 

правильно лия понимаю? :D

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

  • 0

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

вот не знаю как оно в версии 1.2 у меня 1.1

файл Usercp.php

function signature() {
                 global $ibforums, $DB, $std, $print;

 

находим, ниже тулим

if (empty($ibforums->member['allow_sig']))
                {
                        $std->Error( array( 'LEVEL' => 1, 'MSG' => 'cant_use_feature' ) );
                }

 

вот теперь точно хана, не отредактирует.

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

  • 0

Если в админке потом редактировать им подпись выходит такая бяка*

 

Fatal error: Call to undefined function: on_signature_change() in /forum/sources/Admin/ad_member.php on line 3339

 

movies А как тогда в топиках закрыть отображение уже тех у кого подпись была но групу сменили на без подписи!

 

 

+ в ПМ-ках подписи отображаются!

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

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

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

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

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

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

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

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

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

Зарузка...
×
×
  • Создать...

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

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