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

Дополнение: Tickets

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

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

Comments (2)

  1. Дмитрий Крахмалев 11 january 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;
    }
    1. Дмитрий Крахмалев 11 january 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>
      	  ";
        }
      }
      You need to login to create comments.