Гость комментирует от имени пользователя
Может кто сталкивался с тем, что гости при комментировании указывают имя пользователя, можно ли как нибудь проверять вводимое имя на несоответствие с username и fullname?
Update.
Решение
Update.
Решение
Комментарии: 17
у гостя createdby — 0, так вполне можно по этому условию стилизовать вывод как угодно, выделить что это не пользоваетель или еще что…
да он цветом выделен, без ссылки, но некоторые пользователи путаются =( Потихоньку уходим от анонимов, но
Хотелось ограничить вообще создание комментариев от имени равным username и fullname. Т.е. Написал например admin в поле и получил сообщение (например как при валидации), что нельзя использовать чужое имя
Хотелось ограничить вообще создание комментариев от имени равным username и fullname. Т.е. Написал например admin в поле и получил сообщение (например как при валидации), что нельзя использовать чужое имя
попробовал использовать плагин:
<?php
switch ($modx->event->name) {
case 'OnCommentPublish':
if ($id == 1) return ""; //hack for create new user
/**@var user modUser */
if ($modx->getCount('modUserProfile', array('username' => $user->get('username'), 'internalKey:!=' => $id))) {
$modx->error->addField('username', 'Указанное имя пользователя уже занято.');
$modx->event->output('Указанное имя пользователя уже занято. Попробуйте указать другое имя.');
}
if ($modx->getCount('modUserProfile', array('fullname' => $user->get('fullname'), 'internalKey:!=' => $id))) {
$modx->error->addField('fullname', 'Указанное имя пользователя уже занято.');
$modx->event->output('Указанное имя пользователя уже занято. Попробуйте указать другое имя.');
}
break;
}
, неудачно
Событие публикации как-то немного поздновато для проверки имени юзера, нет?
Попробуй OnBeforeCommentSave.
Попробуй OnBeforeCommentSave.
попробовал, комментарий не отправляется, после отправки кнопка «Написать» становится неактивной и в консоли браузера выводится следующее:
POST http://s2112.h4.modhost.pro/assets/components/tickets/action.php 500 (Internal Server Error)
m.ajaxTransport.send @ jquery.min.js:4
m.extend.ajax @ jquery.min.js:4
e.fn.ajaxSubmit @ jquery.form.min.js:7
Tickets.comment.save @ default.js:288
(anonymous function) @ default.js:53
m.event.dispatch @ jquery.min.js:3
m.event.add.r.handle @ jquery.min.js:3
Вот бы посмотреть в лог сервера и узнать, откуда ошибка в плагине.
Он так отважно обращается к переменным $user и $id — а вдруг их не передают в него?
Он так отважно обращается к переменным $user и $id — а вдруг их не передают в него?
С сервера:
2015/07/06 17:14:59 [error] 31718#0: *2345302 FastCGI sent in stderr: "PHP message: PHP Fatal error: Call to a member function get() on a non-object in /hom
e/s2112/www/core/cache/includes/elements/modplugin/30.include.cache.php on line 8" while reading response header from upstream, client: 31.134.195.210, serve
r: s2112.h4.modhost.pro, request: "POST /assets/components/tickets/action.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:12112", host: "s2112.h4.modhost.pro",
referrer: "http://s2112.h4.modhost.pro/our-city/172-gmp-will-be-responsible-for-everything!.html"
С компонента &showlog0.0001001: pdoTools loaded
0.0011718: Conditions prepared
0.0001292: Query parameters prepared.
0.0000300: xPDO query object created
0.0001810: innerJoined TicketThread as Thread
0.0001490: leftJoined modUser as User
0.0001209: leftJoined modUserProfile as Profile
0.0000031: Grouped by TicketComment.id
0.0000460: Added selection of TicketComment: SQL_CALC_FOUND_ROWS `id`, `thread`, `parent`, `text`, `name`, `email`, `ip`, `rating`, `rating_plus`, `rating_minus`, `createdon`, `createdby`, `editedon`, `editedby`, `published`, `deleted`, `deletedon`, `deletedby`, `properties`, `parent` as `new_parent`, `rating` as `rating_total`
0.0000129: Added selection of TicketThread: `resource`
0.0000100: Added selection of modUser: `username`
0.0000250: Added selection of modUserProfile: `internalKey`, `fullname`, `phone`, `mobilephone`, `blocked`, `blockeduntil`, `blockedafter`, `logincount`, `lastlogin`, `thislogin`, `failedlogincount`, `sessionid`, `dob`, `gender`, `address`, `country`, `city`, `state`, `zip`, `fax`, `photo`, `comment`, `website`, `extended`,`email` as `user_email`
0.0001419: Added where condition: published=1
0.0000300: Sorted by TicketComment.id, ASC
0.0003221: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `TicketComment`.`id`, `TicketComment`.`thread`, `TicketComment`.`parent`, `TicketComment`.`text`, `TicketComment`.`name`, `TicketComment`.`email`, `TicketComment`.`ip`, `TicketComment`.`rating`, `TicketComment`.`rating_plus`, `TicketComment`.`rating_minus`, `TicketComment`.`createdon`, `TicketComment`.`createdby`, `TicketComment`.`editedon`, `TicketComment`.`editedby`, `TicketComment`.`published`, `TicketComment`.`deleted`, `TicketComment`.`deletedon`, `TicketComment`.`deletedby`, `TicketComment`.`properties`, `parent` as `new_parent`, `rating` as `rating_total`, `Thread`.`resource`, `User`.`username`, `Profile`.`internalKey`, `Profile`.`fullname`, `Profile`.`phone`, `Profile`.`mobilephone`, `Profile`.`blocked`, `Profile`.`blockeduntil`, `Profile`.`blockedafter`, `Profile`.`logincount`, `Profile`.`lastlogin`, `Profile`.`thislogin`, `Profile`.`failedlogincount`, `Profile`.`sessionid`, `Profile`.`dob`, `Profile`.`gender`, `Profile`.`address`, `Profile`.`country`, `Profile`.`city`, `Profile`.`state`, `Profile`.`zip`, `Profile`.`fax`, `Profile`.`photo`, `Profile`.`comment`, `Profile`.`website`, `Profile`.`extended`, `Profile`.`email` as `user_email` FROM `modx_tickets_comments` AS `TicketComment` JOIN `modx_tickets_threads` `Thread` ON `Thread`.`id` = `TicketComment`.`thread` AND `Thread`.`name` = "resource-172" LEFT JOIN `modx_users` `User` ON `User`.`id` = `TicketComment`.`createdby` LEFT JOIN `modx_user_attributes` `Profile` ON `Profile`.`internalKey` = `TicketComment`.`createdby` WHERE `TicketComment`.`published` = 1 GROUP BY TicketComment.id ORDER BY TicketComment.id ASC "
0.0001121: SQL executed
0.0001020: Total rows: 7
0.0000620: Rows fetched
0.0001981: Returning raw data
0.0065100: Returning processed chunks
0.0009398: Loaded chunk "tpl.Tickets.comment.wrapper"
0.0015490: Loaded chunk "tpl.Tickets.comment.form.guest"
0.0124190: Total time
17 301 504: Memory usage
Ты мне это всё показываешь, чтобы я разобрался и всё тебе сделал?
Неа, давай-ка сам дальше.
Неа, давай-ка сам дальше.
я понимаю, что не понимаю как дальше
А почему ты используешь $user->get? о_0 вроде ж ты гостей проверяешь…
ну, я проверяю совпадения введенного имени с уже существующими у пользователей имени и логином.
Тебе надо глянуть какие данные идут вместе с событием и их и использовать, а переменная $user->get — это данные текущего авторизованного пользователя
По идее формой передаются поля: name и email
Измени имя гостям на гость_name и никто путаться не будет. Можно огород из плагинов не городить, тем более, что уходите от анонимов.
Спасибо, пока так и буду реализовывать, параллельно изучая как написать плагин)
Написал плагин, код кривой, но работает, вроде ошибок нет.
Проверяется на username и fullname
Вот сам плагин, может кому пригодится:
Проверяется на username и fullname
Вот сам плагин, может кому пригодится:
<?php
switch ($modx->event->name) {
case 'OnBeforeCommentSave':
$name = filter_input(INPUT_POST, 'name' );
$count = $modx->getCount('modUser', array('username' => $name));
if ($id != 0) return "";
if ($count > 0) {
$modx->event->output('Нельзя использовать занятое имя. <b>Хулюган!</b>');
}
break;
$count = $modx->getCount('modUserProfile', array('fullname' => $name));
if ($id != 0) return "";
if ($count > 0) {
$modx->event->output('Нельзя использовать занятое имя. <b>Хулюган!</b>');
}
break;
}
Чуть подредактировал, код остался кривым.
Сейчас корректно проверяется на fullname и username. Убирает введенные пробелы в начале и конце имени.
Сейчас корректно проверяется на fullname и username. Убирает введенные пробелы в начале и конце имени.
<?php
switch ($modx->event->name) {
case 'OnBeforeCommentSave':
$name = filter_input(INPUT_POST, 'name' );
$count = $modx->getCount('modUser', array('username' => trim($name)));
if ($id != 0) return "";
if ($count > 0) {
$modx->event->output('<b>Нельзя комментировать под чужим именем.</b>');
}
$count = $modx->getCount('modUserProfile', array('fullname' => trim($name)));
if ($id != 0) return "";
if ($count > 0) {
$modx->event->output('<b>Нельзя комментировать под чужим именем.</b>');
}
break;
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.