Everything posted by soka
-
(CSI/IPS/MODULE) Контактная информация
Хук может быть и хороший, но реализация унылая. Нет алгоритмизации, в простонародье просто г-код. Весь этот код 'info' => array( 0 => array( 'include' => $this->settings['csiIPS_contactInfo_row01_include'], 'member_group' => $this->settings['csiIPS_contactInfo_row01_userGroups'], 'username' => $this->settings['csiIPS_contactInfo_row01_username'], 'skype' => $this->settings['csiIPS_contactInfo_row01_skype'], 'note' => $this->settings['csiIPS_contactInfo_row01_note'], 'vk' => $this->settings['csiIPS_contactInfo_row01_vk'], 'fb' => $this->settings['csiIPS_contactInfo_row01_fb'], ), 1 => array( 'include' => $this->settings['csiIPS_contactInfo_row02_include'], 'member_group' => $this->settings['csiIPS_contactInfo_row02_userGroups'], 'username' => $this->settings['csiIPS_contactInfo_row02_username'], 'note' => $this->settings['csiIPS_contactInfo_row02_note'], 'skype' => $this->settings['csiIPS_contactInfo_row02_skype'], 'vk' => $this->settings['csiIPS_contactInfo_row02_vk'], 'fb' => $this->settings['csiIPS_contactInfo_row02_fb'], ), 2 => array( 'include' => $this->settings['csiIPS_contactInfo_row03_include'], 'member_group' => $this->settings['csiIPS_contactInfo_row03_userGroups'], 'username' => $this->settings['csiIPS_contactInfo_row03_username'], 'note' => $this->settings['csiIPS_contactInfo_row03_note'], 'skype' => $this->settings['csiIPS_contactInfo_row03_skype'], 'vk' => $this->settings['csiIPS_contactInfo_row03_vk'], 'fb' => $this->settings['csiIPS_contactInfo_row03_fb'], ), 3 => array( 'include' => $this->settings['csiIPS_contactInfo_row04_include'], 'member_group' => $this->settings['csiIPS_contactInfo_row04_userGroups'], 'username' => $this->settings['csiIPS_contactInfo_row04_username'], 'note' => $this->settings['csiIPS_contactInfo_row04_note'], 'skype' => $this->settings['csiIPS_contactInfo_row04_skype'], 'vk' => $this->settings['csiIPS_contactInfo_row04_vk'], 'fb' => $this->settings['csiIPS_contactInfo_row04_fb'], ), 4 => array( 'include' => $this->settings['csiIPS_contactInfo_row05_include'], 'member_group' => $this->settings['csiIPS_contactInfo_row05_userGroups'], 'username' => $this->settings['csiIPS_contactInfo_row05_username'], 'note' => $this->settings['csiIPS_contactInfo_row05_note'], 'skype' => $this->settings['csiIPS_contactInfo_row05_skype'], 'vk' => $this->settings['csiIPS_contactInfo_row05_vk'], 'fb' => $this->settings['csiIPS_contactInfo_row05_fb'], ), ), ); if ($settings['member_group']) {$settings['member_group'] = IPSMember::isInGroup($this->memberData, explode(',', $settings['member_group']));} if ($settings['info'][0]['member_group']) {$settings['info'][0]['member_group'] = IPSMember::isInGroup($this->memberData, explode(',', $settings['info'][0]['member_group']));} if ($settings['info'][1]['member_group']) {$settings['info'][1]['member_group'] = IPSMember::isInGroup($this->memberData, explode(',', $settings['info'][1]['member_group']));} if ($settings['info'][2]['member_group']) {$settings['info'][2]['member_group'] = IPSMember::isInGroup($this->memberData, explode(',', $settings['info'][2]['member_group']));} if ($settings['info'][3]['member_group']) {$settings['info'][3]['member_group'] = IPSMember::isInGroup($this->memberData, explode(',', $settings['info'][3]['member_group']));} if ($settings['info'][4]['member_group']) {$settings['info'][4]['member_group'] = IPSMember::isInGroup($this->memberData, explode(',', $settings['info'][4]['member_group']));} if ($settings['info'][0]['username']) {$settings['info'][0]['username'] = IPSText::getTextClass('bbcode')->preDisplayParse(IPSText::getTextClass('bbcode')->preDbParse("[0]['username'] . "']"));} if ($settings['info'][1]['username']) {$settings['info'][1]['username'] = IPSText::getTextClass('bbcode')->preDisplayParse(IPSText::getTextClass('bbcode')->preDbParse("[1]['username'] . "']"));} if ($settings['info'][2]['username']) {$settings['info'][2]['username'] = IPSText::getTextClass('bbcode')->preDisplayParse(IPSText::getTextClass('bbcode')->preDbParse("[2]['username'] . "']"));} if ($settings['info'][3]['username']) {$settings['info'][3]['username'] = IPSText::getTextClass('bbcode')->preDisplayParse(IPSText::getTextClass('bbcode')->preDbParse("[3]['username'] . "']"));} if ($settings['info'][4]['username']) {$settings['info'][4]['username'] = IPSText::getTextClass('bbcode')->preDisplayParse(IPSText::getTextClass('bbcode')->preDbParse("[4]['username'] . "']"));} можно заменить одним этим for( $i=0; $i<=4; $i++ ) { $info = array( 'include' => $this->settings['csiIPS_contactInfo_row'.$i.'_include'], 'member_group' => $this->settings['csiIPS_contactInfo_row'.$i.'_userGroups'], 'username' => $this->settings['csiIPS_contactInfo_row'.$i.'_username'], 'note' => $this->settings['csiIPS_contactInfo_row'.$i.'_note'], 'skype' => $this->settings['csiIPS_contactInfo_row'.$i.'_skype'], 'vk' => $this->settings['csiIPS_contactInfo_row'.$i.'_vk'], 'fb' => $this->settings['csiIPS_contactInfo_row'.$i.'_fb'], ); if( $info['member_group'] ) { $info['member_group'] = IPSMember::isInGroup( $this->memberData, explode( ',', $info['member_group'] ) ); } if( $info['username'] ) { $info['username'] = IPSText::getTextClass('bbcode')->preDisplayParse( IPSText::getTextClass('bbcode')->preDbParse( "}']" ) ); } $settings['info'][$i] = $info; } И опять эти повторяющиеся настройки для каждой отдельной сущности. По 7 настроек на 5 сущности это 35 лишних настроек в бд. Может быть не очень удобно, но можно создать одно поле textarea, и вписывать каждую сущность с новой строки в формате key=value&key-n=value-n. Поле с описанием настроек имеет тип text, можно туда всунуть js скрипт, который бы отформатировал этот формат в удобный для управления пользователем.
-
Отображение BL в профиле пользователя
Перепрочитал. Каким образом пользователь "сам создаст доп.поле"? На сколько мне известно, пользователь может только заполнять существующие поля, ну ни как не создавать новые по своему желанию. И чем же тогда хук будет лучше стандартной функции отображения поле в сообщение, вы пожалуй так и не ответили. Я вижу только одно преимущество, хотелось бы услышать ваши аргументы на этот счет. Ну вот зачем здесь хук. Ну ок, напишите, посмотрим в чем преимущество хука.
-
3.4.7. При удалении сообщения ошибка.
Смотря как искать.
-
Унификация id записей. Как или что использовать для page_id?
Для этого есть имя приложения - app, либо если сущностей больше, просто пишется название каждой сущности - post, topic и тд. id | entry_id | type | timestamp | member_id id - PRIMARY KEY entry_id - ид сущности type - тип сущности - post, topic
-
Отображение BL в профиле пользователя
Для хука нужно писать функцию редактирования, сохранения, отображения. Где пользователь введет через это поле вмид? В каком поле будете хранить значение? В таблице members? Отдельное поле? Чем это лучше дополнительного поле?
-
Дополнительные поля и их вывод
А чего ты ожидал если чекбокс это мултивыбор и его значения разделяются через прямой слэш? Каким образом собираешься использовать разные варианты мултивыбора в качестве ключа? Не выйдет. Юзай селект.
-
Унификация id записей. Как или что использовать для page_id?
digitalfarseer, в ипб нет виджетов. Название идентификатора в свой таблице можно задать любое. Для пересекающих имен в джинах с разной сущность есть псевдонимы. Что вы там сделали по timestamp+entry_id+member_id не понятно. Первичный ключ? Тогда зачем такой сложный составной ключ когда достаточно обойтись одинм entry_id или просто id?
-
3.4.7. При удалении сообщения ошибка.
В коде есть баг. В чем заключается решение не помню, но видел на ipbskins.ru с аналогичной проблемы.
-
Отображение BL в профиле пользователя
Silmiko, какой хук?! Вы каким образом собираетесь реализовать функционал - сохранения, редактирования, отображения этого значения? Все это делает одним дополнительным полем.
-
Обвязка между форумами
По умолчанию через ипс коннект можно связать только форумы на ипб. Для других движков его нужно допиливать в зависимости кто мастер и кто слэйв. Другой способ это авторизация из внешний базы. Но пользователи ипб должны быть синхронизированы с пользователями ксена и базы должны быть на одном сервере. _ipbskins.ru/forum/topic12642.html
-
Сайт (ipb) не оптимизирован для мобильных устройств
Те же яйца, только вид сбоку. Чтобы правильно определялась мобильная и основная версия нужно менять регулярное выражение.
-
ipb, создание куков до проверки авторизации
У вас искаженное представление о работе сессий в целом. Ни в ИПБ, ни в битриксе, ни где либо еще сессии не хранятся в куках. Сессии хранятся на сервере. У клиента в кукисах находится только уникальный идентификатор по которому сервер определяет какая сессия ему принадлежит. Как правило это уникальный 32 символьный хэш md5. Разница ипб лишь в том, что сессии он хранит в базе данных, и не использует встроенный механизм php ($_SESSION). Имея идентификатор сессии, на основе него получаете сессионные данные текущего пользователя. Только по этим данным можно определить кто является текущем пользователем - Vasya Pukin или Guest который только представляется Васей Пукиным. Всем остальным данным поступающем от пользователя доверять не следует, ни логин, ни чему либо еще. В битриксе, на сколько я понял, используются стандартные сессии PHP, которые работают через глобальный массив $_SESSION. Если поддомены разные, кука которая содержит ид сессии сайта (по умолчанию это PHPSESSID) должна быть глобальной, чтобы на домене где установлен ипб php смог получить соответствующую сессию. Нужно либо капать настройки битрикса относительно кукисов, либо установить в нем session_set_cookie_params глобальный домен. __dev.1c-bitrix.ru/community/webdev/user/16002/blog/2112/
-
ipb, создание куков до проверки авторизации
Для начала вам нужно уяснить одну элементарную вещь - авторизация пользователя нужно проводить на основе достоверных и валидированых данных, и никогда не доверять данным поступающим от пользователя. В куках можно представиться кем угодно, ваша задача состоит в том, чтобы проверить действительно ли данный пользователь является Vasya а не только прикидывается им. Если сессионные данные пользователя в битриксе например хранятся в сессиях PHP, авторизацию (идентификацию) нужно проводить через массив $_SESSION, который пользователь подделать не может. Если сессия хранится в базе данных, как в IPB, на основе идентификатора сессии клиента запросить данные из БД. Все это, по хорошему, нужно делать хуками, например расширив класс сессий, а не в шаблоне. В IPB есть специальный класс ssoSessionExtension, который вызывается когда создается или обновляется новая сессия. Не использовать нативные запросы типа mysql_query, и тем более левые подключения через mysql_connect. Для этого есть специальный класс DB доступный через $this->DB. Не использовать нативные функции и переменные для работы с кукисами. В IPB кукисы могут иметь префиксы. Чтения и запись куков проводится через специальные методы IPSCookie::set, IPSCookie::get.
-
ipb, создание куков до проверки авторизации
Этот код полный п*здец. Кража ключей авторизации, sql инъекция, это только малая часть всех проблем. Автор, если не разбираетесь в безопасности не лезьте в таких вещах как авторизация пользователей. Учите для начала безопасность построения sql запросов.