Автоматическое создание tickets

Всем привет есть вопрос как можно создать автоматически tickets при регистрации пользователя через login
eflit
03 октября 2017, 10:59
modx.pro
1
1 739
0
Поблагодарить автора Отправить деньги

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

Константин Ильин
03 октября 2017, 21:07
0
На вскидку:
есть событие OnUserSave, т.е. в плагине можно на это событие создавать тикет.

if ($modx->event->name == 'OnUserSave') {
    if ($user && $mode == 'new') {

    	//тут создаем тикет
    }
}
    eflit
    04 октября 2017, 02:03
    0
    с этим разобрался вот как присвоить этому создаваемому tickets этого же автора
    Максим Кузнецов
    04 октября 2017, 03:31
    +2
    Примерно так:

    <?php
    	if ($modx->event->name == 'OnUserActivate') {
    		if ($user) {
    			if ($profile = $user->getOne('Profile')) {
    				$user_id = $user->get('id');
    				$fullname = $profile->get('fullname');
    
    				$parent = 'айди_раздела_с_тикетами';
    				$template = 'шаблон';
    				
    				if (isset($parent)) {
    					/* Формируем uri по айди автора */
    					$parent_alias = $modx->getObject('modDocument', $parent)->get('alias');
    					$parent_alias .= '/' . $user_id;
    					
    					$ticket = $modx->newObject('modDocument');
    					
    					$ticket->set('parent', $parent);
    					$ticket->set('template', $template);
    					$ticket->set('class_key', 'Ticket');
    					$ticket->set('show_in_tree', 0);
    					$ticket->set('published', 1);
    					$ticket->set('author', $user_id);
    					$ticket->set('createdby', $user_id);
    					$ticket->set('pagetitle', $fullname);
    					$ticket->set('uri_override', 1);
    					$ticket->set('uri', $parent_alias);
    					$ticket->set('alias', $user_id);
    
    					$ticket->save();
    				}
    			}
    		}
    	}
      eflit
      09 октября 2017, 18:52
      0
      Спасибо большое за ответ все четко работает. Скажите а можно еще сделать проверку на группу если пользователь в группе users то $parent равен 4 а если в member то 7
        Максим Кузнецов
        09 октября 2017, 18:54
        +1
        if ($user->isMember('Managers')) {
        	$parent = 1;
        }
        elseif ($user->isMember('Users')) {
        	$parent = 2;
        }
          Максим Кузнецов
          09 октября 2017, 18:56
          +1
          Да, к слову по вышестоящему коду — на случай, если у вас на сайте подразумевается возможность повторной активации (активация-деактивация-активация), нужно сделать дополнительную проверку на существование ресурса.
            eflit
            09 октября 2017, 19:24
            0
            Огромное спасибо очень помогли.
              eflit
              12 октября 2017, 12:44
              0
              скажите пытаюсь еще записывать значения в tv поля делаю это так
              $ticket->setTVValue('country_tv', $fullname);
              но не чего не записывается может я что то не так делаю?
                Максим Кузнецов
                12 октября 2017, 12:57
                0
                Для того, чтобы создать ресурс + тв необходимо или сделать это через процессор, или после создания способом выше, отдельно получить свежесозданный ресурс и записать в него tv.
                  eflit
                  12 октября 2017, 13:55
                  0
                  Спасибо за ответ пытаюсь сделать вторым способам
                  $resource = $modx->resource;
                      $tv_ticket = $modx->getObject('modTemplateVarResource',array(
                        'tmplvarid' => $country_tv,
                        'contentid' => $id
                      ));
                      $tv_ticket->set('country_tv', $fullname);
                      $tv_ticket->save();

                  тут я так понимаю получаю текущий ресурс а как мне получить созданный ресурс
                    Максим Кузнецов
                    12 октября 2017, 15:10
                    0
                    После ticket->save():
                    $ticket->get('id');

                    Далее getObject по полученному id.

                    Ну или сделать отдельный запрос getObject с where по uri или любому другому уникальному идентификатору.
                      eflit
                      12 октября 2017, 16:39
                      0
                      Спасибо разобрался сделал так
                      $id_ticket = $ticket->get('id');
                      $res = $modx->getObject('modResource',$id_ticket);
                      $res->setTVValue('country_tv', $country);
                      $res->setTVValue('city_tv', $city);
                      $res->save();
                      только вот думаю в чем проблема выдает ошибку в журнале
                      Instantiated a derived class TicketsSection that is not a subclass of the requested class modDocument
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        13