movies Опубликовано 31 Января 2004 Жалоба Поделиться Опубликовано 31 Января 2004 можно ли в разрешить использовать подпись в сообщениях только определенным группам? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Song Опубликовано 31 Января 2004 Жалоба Поделиться Опубликовано 31 Января 2004 Стандартными средствами нет. Нужен хак. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 theIggs Опубликовано 1 Февраля 2004 Жалоба Поделиться Опубликовано 1 Февраля 2004 movies, опиши подробнее - напишем. В принципе, я так понимаю, чекбокс "включить подпись" должен остаться, но независимо от его состояния - если мемберу запрещено использовать подпись, то подпись не покажется. Т.е. примерно как на ру-борде. Yes / No / Abort?.. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 movies Опубликовано 2 Февраля 2004 Автор Жалоба Поделиться Опубликовано 2 Февраля 2004 theIggs я так понимаю, чекбокс "включить подпись" должен остатьсяможет, логичнее было бы отображать чекбокс "Включить подпись?" только определенным группам, остальным не отображать? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 theIggs Опубликовано 2 Февраля 2004 Жалоба Поделиться Опубликовано 2 Февраля 2004 Итак, будем писать мод прямо тут.Для начала нам потребуется новое поле в таблице групп - где-то же надо хранить значение "Подпись: Вкл/Выкл". Хотя ру-борд это делает в куках, но у них немного другая система... Итак, лезем в Админцентр -> 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 в новой настройке. Работает? Поздравляю с успешно проделанной работой! Надеюсь, после этой темы многие поймут, как легко на самом деле писать модификации. passat19 отреагировал на это 1 Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 movies Опубликовано 4 Февраля 2004 Автор Жалоба Поделиться Опубликовано 4 Февраля 2004 урок не прошел даром можно в 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 movies Опубликовано 4 Февраля 2004 Автор Жалоба Поделиться Опубликовано 4 Февраля 2004 но вот еще какой момент...некоторые пользователи на данный момент уже использовали свою подпись в сообщенияхвидимо стоит сделать так, чтобы она не отображалась в сообщениях, во избежание ненужных вопросов я так понимаю в Topics.php следует править запрос и блокif ($poster['signature'] and $ibforums->member['view_sigs']) правильно лия понимаю? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 theIggs Опубликовано 5 Февраля 2004 Жалоба Поделиться Опубликовано 5 Февраля 2004 правильно лия понимаю? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Dekker Опубликовано 23 Апреля 2004 Жалоба Поделиться Опубликовано 23 Апреля 2004 я поступил немного проще, завелся у меня один кадр который сейчас сидит в модерируемом режиме постинга, так он нашел выход, у него подпись типа гласа вопиющего ... была.вот не знаю как оно в версии 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 kolorom Опубликовано 7 Мая 2005 Жалоба Поделиться Опубликовано 7 Мая 2005 Если в админке потом редактировать им подпись выходит такая бяка* Fatal error: Call to undefined function: on_signature_change() in /forum/sources/Admin/ad_member.php on line 3339 movies А как тогда в топиках закрыть отображение уже тех у кого подпись была но групу сменили на без подписи! + в ПМ-ках подписи отображаются! Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Вопрос
movies
Ссылка на комментарий
Поделиться на других сайтах
9 ответов на этот вопрос
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.