AuditController.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <?php
  2. namespace AuditBundle\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  6. use AuditBundle\Form\Type\AuditFilterType;
  7. use AuditBundle\Services\AuditDataService;
  8. use SimpleThings\EntityAudit\Exception\NoRevisionFoundException;
  9. class AuditController extends Controller
  10. {
  11. /**
  12. *
  13. * @param Request $request
  14. *
  15. * @return string
  16. *
  17. * @Route("/admin/audit", name="entity_audit")
  18. */
  19. public function indexAction(Request $request)
  20. {
  21. /* @var $auditDataService AuditDataService */
  22. $auditDataService = $this->get('audit.audit_data.service');
  23. $entities = $auditDataService->getEntities();
  24. $columns = $auditDataService->getColumns();
  25. $entity = null;
  26. $count = null;
  27. $result = null;
  28. $page = null;
  29. $pages = 1;
  30. $is_post = false;
  31. /* @var $filterForm AuditFilterType */
  32. $filterForm = $this->createForm(AuditFilterType::class);
  33. $filterForm->handleRequest($request);
  34. $showRowFilter = array();
  35. $showRowFilter['types'] = array('display'=>'none','check'=>'fa fa-square-o');
  36. $showRowFilter['users'] = array('display'=>'none','check'=>'fa fa-square-o');
  37. $showRowFilter['idx'] = array('display'=>'none','check'=>'fa fa-square-o');
  38. $showRowFilter['dateTo'] = array('display'=>'none','check'=>'fa fa-square-o');
  39. $showRowFilter['dateFrom'] = array('display'=>'none','check'=>'fa fa-square-o');
  40. $showRowFilter['searchValue'] = array('display'=>'none','check'=>'fa fa-square-o');
  41. $showRowFilter['resxpage'] = array('display'=>'none','check'=>'fa fa-square-o');
  42. if ($filterForm->isSubmitted()) {
  43. $data = $filterForm->getData();
  44. $results = $auditDataService->getResults($data);
  45. foreach($data as $row => $value) {
  46. if(is_null($value) || empty($value)) {
  47. $showRowFilter[$row] = array('display'=>'none','check'=>'fa fa-square-o');
  48. } else {
  49. $showRowFilter[$row] = array('display'=>'block','check'=>'fa fa-check-square-o');
  50. }
  51. }
  52. $is_post = true;
  53. extract($data);
  54. extract($results);
  55. $entity = array_search($entity, $entities);
  56. }
  57. return $this->render('AuditBundle:Audit:index.html.twig', array(
  58. 'base_template' => $this->getBaseTemplate($request),
  59. 'admin_pool' => $this->get('sonata.admin.pool'),
  60. 'entities' => $entities,
  61. 'columns' => $columns,
  62. 'form' => $filterForm->createView(),
  63. 'is_post' => $is_post,
  64. 'data' => $result,
  65. 'entity' => $entity,
  66. 'total' => $count,
  67. 'params' => array(
  68. 'label' => $this->get('translator')->trans('Auditoría de Entidades', array(), 'AuditBundle'),
  69. 'regs' => $count,
  70. 'page' => $page,
  71. 'pages' => $pages
  72. ),
  73. 'showRowFilter' => $showRowFilter
  74. ));
  75. }
  76. /**
  77. * @param Request $request
  78. * @param string $classValue
  79. * @param id $id
  80. * @param Revision $rev
  81. *
  82. * @return string
  83. *
  84. * @Route("/admin/audit/view/{classValue}/{id}/{rev}", name="entity_audit_view_details")
  85. */
  86. public function viewAction(Request $request, $classValue, $id, $rev)
  87. {
  88. /* @var $auditDataService AuditDataService */
  89. $auditDataService = $this->get('audit.audit_data.service');
  90. $className = array_search($classValue, $auditDataService->getEntities());
  91. $result = $auditDataService->viewRevision($className, $id, $rev);
  92. $data = array(
  93. 'label' => $this->get('translator')->trans(
  94. 'Detalles de la revisión: %rev%', array(
  95. '%rev%' => $rev
  96. ), 'AuditBundle'),
  97. 'className' => $className,
  98. 'classValue' => $classValue,
  99. 'id' => $id,
  100. 'rev' => $rev,
  101. 'revdata' => $result['revdata'],
  102. 'details' => $result['rev_details'],
  103. 'revisions' => $result['rev_revisions'],
  104. );
  105. return $this->render('AuditBundle:Audit:view.html.twig', array(
  106. 'base_template' => $this->getBaseTemplate($request),
  107. 'data' => $data,
  108. 'admin_pool' => $this->get('sonata.admin.pool'),
  109. ));
  110. }
  111. /**
  112. * @param Request $request
  113. * @param string $classValue
  114. * @param int $id
  115. * @param Revision $oldRev
  116. * @param Revision $newRev
  117. *
  118. * @return string
  119. *
  120. * @Route("/admin/flowdat2/entity/audit/compare/{classValue}/{id}", name="entity_audit_compare_revs")
  121. */
  122. public function compareAction(Request $request, $classValue, $id, $oldRev = null, $newRev = null)
  123. {
  124. try {
  125. $oldRev = $request->query->get('oldRev');
  126. $newRev = $request->query->get('newRev');
  127. /* @var $auditDataService AuditDataService */
  128. $auditDataService = $this->get('audit.audit_data.service');
  129. $className = array_search($classValue, $auditDataService->getEntities());
  130. $diff = $auditDataService->diff($className, $id, $oldRev, $newRev);
  131. $data = array(
  132. 'label' => $this->get('translator')->trans(
  133. 'Comparativa entre las revisiones %oldRev% y %newRev%', array(
  134. '%oldRev%' => $oldRev,
  135. '%newRev%' => $newRev
  136. ), 'AuditBundle'),
  137. 'className' => $className,
  138. 'classValue' => $classValue,
  139. 'id' => $id,
  140. 'oldRev' => $oldRev,
  141. 'newRev' => $newRev,
  142. 'diff' => $diff,
  143. );
  144. return $this->render('AuditBundle:Audit:compare.html.twig', array(
  145. 'base_template' => $this->getBaseTemplate($request),
  146. 'data' => $data,
  147. 'admin_pool' => $this->get('sonata.admin.pool'),
  148. ));
  149. } catch (NoRevisionFoundException $ex) {
  150. $this->get('session')->getFlashBag()->add('sonata_error', $ex->getMessage());
  151. return $this->redirect($this->generateUrl('entity_audit'));
  152. }
  153. }
  154. /**
  155. * @return string
  156. */
  157. private function getBaseTemplate(Request $request)
  158. {
  159. $adminPool = $this->get('sonata.admin.pool');
  160. if ($request->isXmlHttpRequest()) {
  161. return $adminPool->getTemplate('ajax');
  162. }
  163. return $adminPool->getTemplate('layout');
  164. }
  165. }