AuditController.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  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. if ($filterForm->isSubmitted()) {
  35. $data = $filterForm->getData();
  36. $results = $auditDataService->getResults($data);
  37. $is_post = true;
  38. extract($data);
  39. extract($results);
  40. $entity = array_search($entity, $entities);
  41. }
  42. return $this->render('AuditBundle:Audit:index.html.twig', array(
  43. 'base_template' => $this->getBaseTemplate($request),
  44. 'admin_pool' => $this->get('sonata.admin.pool'),
  45. 'entities' => $entities,
  46. 'columns' => $columns,
  47. 'form' => $filterForm->createView(),
  48. 'is_post' => $is_post,
  49. 'data' => $result,
  50. 'entity' => $entity,
  51. 'total' => $count,
  52. 'params' => array(
  53. 'label' => $this->get('translator')->trans('Auditoría de Entidades', array(), 'AuditBundle'),
  54. 'regs' => $count,
  55. 'page' => $page,
  56. 'pages' => $pages
  57. ),
  58. ));
  59. }
  60. /**
  61. * @param Request $request
  62. * @param string $classValue
  63. * @param id $id
  64. * @param Revision $rev
  65. *
  66. * @return string
  67. *
  68. * @Route("/admin/audit/view/{classValue}/{id}/{rev}", name="entity_audit_view_details")
  69. */
  70. public function viewAction(Request $request, $classValue, $id, $rev)
  71. {
  72. /* @var $auditDataService AuditDataService */
  73. $auditDataService = $this->get('audit.audit_data.service');
  74. $className = array_search($classValue, $auditDataService->getEntities());
  75. $result = $auditDataService->viewRevision($className, $id, $rev);
  76. $data = array(
  77. 'label' => $this->get('translator')->trans('Detalles de la revisión: %rev%', array('%rev%' => $rev), 'AuditBundle'),
  78. 'className' => $className,
  79. 'classValue' => $classValue,
  80. 'id' => $id,
  81. 'rev' => $rev,
  82. 'revdata' => $result['revdata'],
  83. 'details' => $result['rev_details'],
  84. 'revisions' => $result['rev_revisions'],
  85. );
  86. return $this->render('AuditBundle:Audit:view.html.twig', array(
  87. 'base_template' => $this->getBaseTemplate($request),
  88. 'data' => $data,
  89. 'admin_pool' => $this->get('sonata.admin.pool'),
  90. ));
  91. }
  92. /**
  93. * @param Request $request
  94. * @param string $classValue
  95. * @param int $id
  96. * @param Revision $oldRev
  97. * @param Revision $newRev
  98. *
  99. * @return string
  100. *
  101. * @Route("/admin/flowdat2/entity/audit/compare/{classValue}/{id}", name="entity_audit_compare_revs")
  102. */
  103. public function compareAction(Request $request, $classValue, $id, $oldRev = null, $newRev = null)
  104. {
  105. try {
  106. $oldRev = $request->query->get('oldRev');
  107. $newRev = $request->query->get('newRev');
  108. /* @var $auditDataService AuditDataService */
  109. $auditDataService = $this->get('audit.audit_data.service');
  110. $className = array_search($classValue, $auditDataService->getEntities());
  111. $diff = $auditDataService->diff($className, $id, $oldRev, $newRev);
  112. $data = array(
  113. 'label' => $this->get('translator')->trans('Comparativa entre las revisiones %oldRev% y %newRev%', array('%oldRev%' => $oldRev, '%newRev%' => $newRev), 'AuditBundle'),
  114. 'className' => $className,
  115. 'classValue' => $classValue,
  116. 'id' => $id,
  117. 'oldRev' => $oldRev,
  118. 'newRev' => $newRev,
  119. 'diff' => $diff,
  120. );
  121. return $this->render('AuditBundle:Audit:compare.html.twig', array(
  122. 'base_template' => $this->getBaseTemplate($request),
  123. 'data' => $data,
  124. 'admin_pool' => $this->get('sonata.admin.pool'),
  125. ));
  126. } catch (NoRevisionFoundException $ex) {
  127. $this->get('session')->getFlashBag()->add('sonata_error', $ex->getMessage());
  128. return $this->redirect($this->generateUrl('entity_audit'));
  129. }
  130. }
  131. /**
  132. * @return string
  133. */
  134. private function getBaseTemplate(Request $request)
  135. {
  136. $adminPool = $this->get('sonata.admin.pool');
  137. if ($request->isXmlHttpRequest()) {
  138. return $adminPool->getTemplate('ajax');
  139. }
  140. return $adminPool->getTemplate('layout');
  141. }
  142. }