Гость комментирует от имени пользователя

Может кто сталкивался с тем, что гости при комментировании указывают имя пользователя, можно ли как нибудь проверять вводимое имя на несоответствие с username и fullname?

Update.
Решение
Илья
02 июля 2015, 19:12
modx.pro
1
1 757
0

Комментарии: 17

Володя
06 июля 2015, 11:00
0
у гостя createdby — 0, так вполне можно по этому условию стилизовать вывод как угодно, выделить что это не пользоваетель или еще что…
    Илья
    06 июля 2015, 11:06
    0
    да он цветом выделен, без ссылки, но некоторые пользователи путаются =( Потихоньку уходим от анонимов, но
    Хотелось ограничить вообще создание комментариев от имени равным username и fullname. Т.е. Написал например admin в поле и получил сообщение (например как при валидации), что нельзя использовать чужое имя
    Илья
    06 июля 2015, 16:02
    1
    0
    попробовал использовать плагин:
    <?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;
    }
    , неудачно
      Василий Наумкин
      06 июля 2015, 18:06
      +1
      Событие публикации как-то немного поздновато для проверки имени юзера, нет?

      Попробуй OnBeforeCommentSave.
        Илья
        06 июля 2015, 18:19
        0
        попробовал, комментарий не отправляется, после отправки кнопка «Написать» становится неактивной и в консоли браузера выводится следующее:
        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
          Василий Наумкин
          06 июля 2015, 18:26
          +1
          Вот бы посмотреть в лог сервера и узнать, откуда ошибка в плагине.

          Он так отважно обращается к переменным $user и $id — а вдруг их не передают в него?
            Илья
            06 июля 2015, 18:38
            0
            С сервера:
            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"
            С компонента &showlog
            0.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
              Василий Наумкин
              06 июля 2015, 18:42
              +2
              Ты мне это всё показываешь, чтобы я разобрался и всё тебе сделал?

              Неа, давай-ка сам дальше.
                Илья
                06 июля 2015, 19:20
                0
                я понимаю, что не понимаю как дальше
        Пётр Молчанов
        06 июля 2015, 18:43
        +2
        А почему ты используешь $user->get? о_0 вроде ж ты гостей проверяешь…
          Илья
          06 июля 2015, 18:48
          0
          ну, я проверяю совпадения введенного имени с уже существующими у пользователей имени и логином.
            Пётр Молчанов
            06 июля 2015, 18:51
            +1
            Тебе надо глянуть какие данные идут вместе с событием и их и использовать, а переменная $user->get — это данные текущего авторизованного пользователя
              Илья
              06 июля 2015, 19:11
              0
              По идее формой передаются поля: name и email
                Николай
                07 июля 2015, 12:56
                +2
                Измени имя гостям на гость_name и никто путаться не будет. Можно огород из плагинов не городить, тем более, что уходите от анонимов.
                  Илья
                  07 июля 2015, 13:04
                  0
                  Спасибо, пока так и буду реализовывать, параллельно изучая как написать плагин)
        Илья
        08 июля 2015, 15:20
        +1
        Написал плагин, код кривой, но работает, вроде ошибок нет.
        Проверяется на 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;
        }
          Илья
          17 июля 2015, 21:40
          1
          0
          Чуть подредактировал, код остался кривым.
          Сейчас корректно проверяется на 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;
          }
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          17