Tickets и дополнительные поля site_content

Добрый день. Расширил структуру таблицы site_content добавив 2 дополнительных поля: status и prior.
Их я использую для отображения состояния обращения (0-Закрыт, 1-Открыт, 2-В исполнении) и указания приоритета (0- Низкий, 1- Нормальный, 2- Высокий)
Написал плагин который подключает дополнительные поля в момент инициализации.
Вопрос: Как в момент создания Ticket`а отловить данное событие и прописать значение status=1; prior=tv.Prior?

Надеюсь я смог объяснить проблему. Как это реализовано тут?
Дмитрий Крахмалев
11 января 2017, 08:57
modx.pro
1
1 461
0

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

Дмитрий Крахмалев
11 января 2017, 11:58
0
Код плагина:
<?php
switch ($modx->event->name) {
    case 'OnMODXInit':
        // Загружаем наше поле в модель ресурса
        $modx->loadClass('modResource');
        $modx->map['modResource']['fields']['status'] = '0';
        $modx->map['modResource']['fieldMeta']['status'] = array(
            'dbtype' => 'tinyint',
            'precision' => 1,
            'phptype' => 'integer',
            'null' => false,
            'default' => '0',
        );
        $modx->map['modResource']['fields']['prior'] = '1';
        $modx->map['modResource']['fieldMeta']['prior'] = array(
            'dbtype' => 'tinyint',
            'precision' => 1,
            'phptype' => 'integer',
            'null' => false,
            'default' => '1',
        );
        break;
    case 'OnDocFormSave':
        // Сохраняем ТВ в поле таблицы ресурса
		$status=$resource->getTVValue('Status');
		$prior=$resource->getTVValue('prior');
		if (isset($status))  {$resource->set('status',$status);}
        if (isset($prior))  {$resource->set('prior', $prior);}
        $resource->save();
		
        break;
}
    Дмитрий Крахмалев
    11 января 2017, 12:01
    0
    Когда активен плагин — все отлично прописывается. Но как только я пытаюсь программно сменить статус на Закрыт, он все равно прописывает как было до этого.
    Для автора обращения вывожу кнопку «Закрыть обращение» при нажатии на которую происходит закрытие обращения, так вот статус меняется на 0-Закрыт но когда страница загружается стоит уже 1 — открыт, как было до этого.
    Код кнопки:
    //=================================================
    	$ticket = $modx->resource;
    	$ticketID = $ticket->get("id");
    	$status = $ticket->getTVValue('Status');
    	
    	$user=$modx->getUser();
    	//Смотрим а обладает ли пользователь правами закрывать обращения (админы или сам создатель)
    	if ($ticket->get("createdby")==$user->get("id")){$isRules=1;}else{$isRules=0;}
    
    if (isset($_POST["closeTicket"])){
    	if ($status==0){
    		echo "Обращение уже было закрыто!";
    	}else
    	{
    		//Смотрим а обладает ли пользователь правами закрывать обращения (админы или сам создатель)
    		if ($isRules=1){
    
    			//Оставляем комментарий (для этого получаем ссылку на ветку)
    			$thread = $modx->getObject('TicketThread', array('resource' => $ticketID));
    			$threadID = $thread->get('id');
    
    		    $comment = $modx->newObject('TicketComment');
    			$comment->set('thread', $threadID);
    			$comment->set('text', 'Пользователь '.$user->get('username').' закрыл данное обращение.');
    			$comment->set('raw', 'Пользователь '.$user->get('username').' закрыл данное обращение.');
    			$comment->set('name', 'Оповещение системы');
    			$comment->save();
    
    
    			$modx->resource->setTVValue('Status',0);
            	$modx->resource->set('status', 0);
    			echo $modx->resource->get('status');
    			$modx->resource->save();
    			$modx->resource->clearCache();
    			echo "<div class='alert alert-success' role='alert'>Данное обращение было закрыто пользователем ".$user->get('username')."!</div>";
    		}
    	}
    }
    else{	
    //Если не нажимали на кнопку показываем форму (если пользователь - автор Обращения)
      if (($isRules=1) and ($status!=0)){
    	  echo "
    
    			<div class=\"panel panel-default\" id=\"closeTicketPanel\">
    			  <div class=\"panel-body\">
    				  <form method=\"post\" action=\"[[~[[*id]]]]\" name=\"closeTicketForm\">
    					  <input type=\"hidden\" name=\"ticketId\" value=\"[[*id]]\" />
    					  <input type=\"submit\" name=\"closeTicket\" id=\"closeTicket\" value=\"Закрыть обращение\" />
    				  </form>
    			  </div>
    			</div>
    	  ";
      }
    }
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      2