Перейти к контенту
  • 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 А как тогда в топиках закрыть отображение уже тех у кого подпись была но групу сменили на без подписи!

 

 

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

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

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

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

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

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

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

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

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

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