Skip to content

Многострочные отзывы в Trader feedback system

Есть такое приложение Trader feedback system, которое позволяет оставлять отзывы на юзеров, но есть у него один существенный косяк - для текста отзыва отведен input с ограничением на количество символов. Мне же нужна возможность оставлять большие длинные отзывы. Как минимум многострочные. Первым делом заменил input на textarea в шаблоне, но это лишь полдела. Например, если не заполнить обязательное поле, то textarea заполняется текстом, где все переносы заменены на <br>.

 

Глянул в БД. Способ хранения отличается от того, в каком виде хранятся сообщения форума в IPB.

Таблица posts:

post-56753-0-53751900-1421484296_thumb.png

Таблица feedback:

post-56753-0-70662800-1421484297_thumb.png

 

Т.е. как видим, в этом приложении любые символы, даже безопасные !, ? превращаются в html-сущности.

 

Ладно, лезем в код. Файл /admin/applications_addon/other/feedback/modules_public/view/view.php. Функция вставки в БД:

$this->DB->insert( 'feedback',
								array(	'date'		=> time(),
										'sender'	=> $this->memberData['member_id'],
										'receiver'	=> $userid,
										'note'      => $this->request['comment'],
										'ip'		=> $_SERVER['REMOTE_ADDR'],
										'score'     => $this->request['leaving'],
										'link_type' => $this->link['type'],
										'link'      => $this->link['id'],
										'type'      => $this->request['role']
									)
							);

Честно говоря, в коде IPB еще разбираться не доводилось, потому и прошу совета гуру. Как видим, тут текст коммента берется из $this->request. Видимо, IPB это свойство уже каким-то образом очищает от возможных опасных конструкций, а именно превращает все символы в html-сущности без разбору. Нам это не нужно. Посмотрел, как обрабатываются обычные посты и темы. Там используется чистый массив $_POST, который прогоняется через:

IPSText::parseCleanValue( $this->_topicTitle )

 

Итого, безопасно ли заменить в вышеприведенном коде:

'note'      => $this->request['comment'],

на

'note'      => IPSText::parseCleanValue($_POST['comment']),

?

 

И, соответственно, в шаблоне:

<textarea id="comment" class="input_text" style="font-size: 16px;" rows="8" cols="65" name="comment" /><if test="isset($this->request['comment'])">{$this->request[['comment']}</if></textarea>

на

<textarea id="comment" class="input_text" style="font-size: 16px;" rows="8" cols="65" name="comment" /><if test="isset($_POST['comment'])">{$_POST['comment']}</if></textarea>

?

 

Заранее спасибо за ответы.

Featured Replies

$this->request это и есть массив GET|POST параметров обработанные через IPSText::parseCleanValue. Т.е. единственное что вам нужно сделать, это заменить в textarea

на new line.

 

<textarea id="comment" class="input_text" style="font-size: 16px;" rows="8" cols="65" name="comment" /><if test="isset($this->request['comment'])">{parse expression="str_replace('<br />', "\n", $this->request['comment'])"}</if></textarea>

  • Author

А! Действительно, перемудрил. Большое спасибо!

 

Единственно непонятным для меня остается вопрос, почему в таблице постов восклицательные знаки хранятся без изменений, а через $this->request в этом приложении в виде html-сущностей. Вроде как смысла нет конвертировать их.

Потому что посты обрабатываются через парсер ббкодов непосредственно из $_POST.

При желании можно добавить замену и для восклицательного знака.

 

str_replace(array('<br />', '&#33;'), array("\n", "!"), $this->request['comment'])

  • 4 years later...

2,2,10 уже есть у кого? для ИПС 4.4.3

В магазине =)

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.