You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

236 lines
9.0KB

  1. <?php
  2. /**
  3. * Copyright distrib (2018)
  4. *
  5. * contact@opendistrib.net
  6. *
  7. * Ce logiciel est un programme informatique servant à aider les producteurs
  8. * à distribuer leur production en circuits courts.
  9. *
  10. * Ce logiciel est régi par la licence CeCILL soumise au droit français et
  11. * respectant les principes de diffusion des logiciels libres. Vous pouvez
  12. * utiliser, modifier et/ou redistribuer ce programme sous les conditions
  13. * de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
  14. * sur le site "http://www.cecill.info".
  15. *
  16. * En contrepartie de l'accessibilité au code source et des droits de copie,
  17. * de modification et de redistribution accordés par cette licence, il n'est
  18. * offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
  19. * seule une responsabilité restreinte pèse sur l'auteur du programme, le
  20. * titulaire des droits patrimoniaux et les concédants successifs.
  21. *
  22. * A cet égard l'attention de l'utilisateur est attirée sur les risques
  23. * associés au chargement, à l'utilisation, à la modification et/ou au
  24. * développement et à la reproduction du logiciel par l'utilisateur étant
  25. * donné sa spécificité de logiciel libre, qui peut le rendre complexe à
  26. * manipuler et qui le réserve donc à des développeurs et des professionnels
  27. * avertis possédant des connaissances informatiques approfondies. Les
  28. * utilisateurs sont donc invités à charger et tester l'adéquation du
  29. * logiciel à leurs besoins dans des conditions permettant d'assurer la
  30. * sécurité de leurs systèmes et ou de leurs données et, plus généralement,
  31. * à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
  32. *
  33. * Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
  34. * pris connaissance de la licence CeCILL, et que vous en avez accepté les
  35. * termes.
  36. */
  37. use common\logic\Ticket\Ticket\Model\Ticket;
  38. use common\logic\Ticket\Ticket\Wrapper\TicketManager;
  39. use yii\helpers\Html;
  40. use yii\grid\GridView;
  41. $ticketManager = TicketManager::getInstance();
  42. $userCurrent = $this->getUserCurrent();
  43. $this->setTitle('Support');
  44. $this->addBreadcrumb($this->getTitle());
  45. ?>
  46. <div class="support-index">
  47. <?php if($context == 'producer'): ?>
  48. <div>
  49. <div class="col-md-4">
  50. <div class="info-box">
  51. <span class="info-box-icon bg-yellow"><i class="fa fa-phone"></i></span>
  52. <div class="info-box-content">
  53. <span class="info-box-text">Me contacter directement</span>
  54. <span class="info-box-text">
  55. <br/>
  56. <strong><?= Yii::$app->parameterBag->get('adminPhoneNumber'); ?></strong>
  57. </span>
  58. </div>
  59. </div>
  60. </div>
  61. <div class="col-md-4">
  62. <div class="info-box">
  63. <span class="info-box-icon bg-yellow"><i class="fa fa-calendar"></i></span>
  64. <div class="info-box-content">
  65. <span class="info-box-text"><br/>
  66. <?= Html::a('Prendre rendez-vous', Yii::$app->parameterBag->get('appointmentUrl'), ['class' => 'btn btn-sm btn-default', 'target' => '_blank']); ?>
  67. </span>
  68. </div>
  69. </div>
  70. </div>
  71. <div class="col-md-4">
  72. <div class="info-box">
  73. <span class="info-box-icon bg-yellow"><i class="fa fa-comments"></i></span>
  74. <div class="info-box-content">
  75. <span class="info-box-text"><br/><?= Html::a('Ouvrir un ticket', ['support/create'], ['class' => 'btn btn-sm btn-default']); ?></span>
  76. </div>
  77. </div>
  78. </div>
  79. </div>
  80. <div class="clr"></div>
  81. <?php endif; ?>
  82. <div class="nav-tabs-custom ticket-list">
  83. <ul class="nav nav-tabs pull-right">
  84. <li><a href="#tab_2-2" data-toggle="tab">Fermés <span
  85. class="label label-default"><?= $dataProviderTicketClosed->totalCount ?></span></a></li>
  86. <li class="active"><a href="#tab_1-1" data-toggle="tab">Ouverts <span
  87. class="label label-default"><?= $dataProviderTicketOpen->totalCount ?></span></a></li>
  88. <li class="pull-left header"><i class="fa fa-comments"></i> Tickets</li>
  89. </ul>
  90. <div class="tab-content">
  91. <div class="tab-pane active" id="tab_1-1">
  92. <?= ticketList($context, $searchTicket, $dataProviderTicketOpen, $userCurrent); ?>
  93. </div>
  94. <div class="tab-pane" id="tab_2-2">
  95. <?= ticketList($context, $searchTicket, $dataProviderTicketClosed, $userCurrent); ?>
  96. </div>
  97. </div>
  98. </div>
  99. </div>
  100. <?php
  101. function ticketList($context, $searchTicket, $dataProviderTicket, $userCurrent)
  102. {
  103. $ticketManager = TicketManager::getInstance();
  104. $columnCreatedAt = [
  105. 'attribute' => 'created_at',
  106. 'headerOptions' => ['class' => 'td-created-at column-hide-on-mobile'],
  107. 'value' => function ($ticket) {
  108. return date('d/m/Y', strtotime($ticket->created_at));
  109. }
  110. ];
  111. $columnSubject = [
  112. 'attribute' => 'subject',
  113. 'headerOptions' => ['class' => 'td-subject'],
  114. 'format' => 'raw',
  115. 'value' => function ($ticket) use ($ticketManager, $userCurrent) {
  116. if($ticketManager->isTicketUnread($ticket, $userCurrent)) {
  117. $firstTicketMessageUnread = $ticketManager->getFirstTicketMessageUnread($ticket, $userCurrent);
  118. $link = '<strong>'.Html::a($ticket->subject, ['view', 'id' => $ticket->id, '#' => $firstTicketMessageUnread->id]).'</strong>';
  119. }
  120. else {
  121. $link = Html::a($ticket->subject, ['view', 'id' => $ticket->id]);
  122. }
  123. return $link;
  124. }
  125. ];
  126. $columnLastMessage = [
  127. 'label' => 'Dernier message',
  128. 'headerOptions' => ['class' => 'td-last-message column-hide-on-mobile'],
  129. 'value' => function ($ticket) {
  130. $ticketMessages = $ticket->ticketMessages;
  131. if ($ticketMessages && is_array($ticketMessages)) {
  132. $lastTicketMessage = end($ticketMessages);
  133. $origin = date_create(date('Y-m-d', strtotime($lastTicketMessage->created_at)));
  134. $target = date_create();
  135. $interval = date_diff($origin, $target);
  136. $days = (int)$interval->format('%R%a');
  137. if ($days == 0) {
  138. return "Aujourd'hui";
  139. } elseif ($days == 1) {
  140. return "Hier";
  141. } else {
  142. return $days . ' jours';
  143. }
  144. }
  145. return '';
  146. }
  147. ];
  148. $columnMessages = [
  149. 'label' => 'Messages',
  150. 'headerOptions' => ['class' => 'td-messages column-hide-on-mobile'],
  151. 'value' => function ($ticket) {
  152. return count($ticket->ticketMessages);
  153. }
  154. ];
  155. $columnButtonActions = [
  156. 'class' => 'yii\grid\ActionColumn',
  157. 'template' => '{view} {close-open}',
  158. 'headerOptions' => ['class' => 'column-actions'],
  159. 'contentOptions' => ['class' => 'column-actions'],
  160. 'buttons' => [
  161. 'view' => function ($url, $ticket) {
  162. $url = ['view', 'id' => $ticket->id];
  163. return Html::a('<span class="glyphicon glyphicon-eye-open"></span>', $url, [
  164. 'title' => 'Voir le ticket', 'class' => 'btn btn-default'
  165. ]);
  166. },
  167. 'close-open' => function ($url, $ticket) use ($ticketManager) {
  168. if ($ticketManager->isTicketOpen($ticket)) {
  169. $title = 'Fermer';
  170. $url = ['close', 'id' => $ticket->id];
  171. $glyphicon = 'glyphicon-folder-close';
  172. } else {
  173. $title = 'Ré-ouvrir';
  174. $url = ['open', 'id' => $ticket->id];
  175. $glyphicon = 'glyphicon-folder-open';
  176. }
  177. return Html::a('<span class="glyphicon ' . $glyphicon . '"></span>', $url, [
  178. 'title' => $title, 'class' => 'btn btn-default'
  179. ]);
  180. }
  181. ],
  182. ];
  183. $columnProducer = [
  184. 'attribute' => 'id_producer',
  185. 'headerOptions' => ['class' => 'td-producer'],
  186. 'value' => function ($ticket) {
  187. return $ticket->producer->name;
  188. }
  189. ];
  190. if($context == 'producer') {
  191. $columns = [
  192. $columnCreatedAt,
  193. $columnSubject,
  194. $columnLastMessage,
  195. $columnMessages,
  196. $columnButtonActions
  197. ];
  198. }
  199. elseif($context == 'admin') {
  200. $columns = [
  201. $columnCreatedAt,
  202. $columnProducer,
  203. $columnSubject,
  204. $columnLastMessage,
  205. $columnMessages,
  206. $columnButtonActions
  207. ];
  208. }
  209. $optionsGridView = [
  210. 'summary' => '',
  211. 'filterModel' => $searchTicket,
  212. 'dataProvider' => $dataProviderTicket,
  213. 'columns' => $columns,
  214. ];
  215. return GridView::widget($optionsGridView);
  216. }
  217. ?>