AuditController.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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 $className
  63. * @param id $id
  64. * @param Revision $rev
  65. *
  66. * @return string
  67. *
  68. * @Route("/admin/audit/view/{className}/{id}/{rev}", name="entity_audit_view_details")
  69. */
  70. public function viewAction(Request $request, $className, $id, $rev)
  71. {
  72. /* @var $auditDataService AuditDataService */
  73. $auditDataService = $this->get('audit.audit_data.service');
  74. $result = $auditDataService->viewRevision($className, $id, $rev);
  75. $data = array(
  76. 'label' => $this->get('translator')->trans('Detalles de la revisión: %rev%', array('%rev%' => $rev), 'AuditBundle'),
  77. 'className' => $className,
  78. 'id' => $id,
  79. 'rev' => $rev,
  80. 'revdata' => $result['revdata'],
  81. 'details' => $result['rev_details'],
  82. 'revisions' => $result['rev_revisions']
  83. );
  84. return $this->render('AuditBundle:Audit:view.html.twig', array(
  85. 'base_template' => $this->getBaseTemplate($request),
  86. 'data' => $data,
  87. 'admin_pool' => $this->get('sonata.admin.pool'),
  88. ));
  89. }
  90. /**
  91. * @param Request $request
  92. * @param string $className
  93. * @param int $id
  94. * @param Revision $oldRev
  95. * @param Revision $newRev
  96. *
  97. * @return string
  98. *
  99. * @Route("/admin/flowdat2/entity/audit/compare/{className}/{id}", name="entity_audit_compare_revs")
  100. */
  101. public function compareAction(Request $request, $className, $id, $oldRev = null, $newRev = null)
  102. {
  103. try {
  104. $oldRev = $request->query->get('oldRev');
  105. $newRev = $request->query->get('newRev');
  106. /* @var $auditDataService AuditDataService */
  107. $auditDataService = $this->get('audit.audit_data.service');
  108. $diff = $auditDataService->diff($className, $id, $oldRev, $newRev);
  109. $data = array(
  110. 'label' => $this->get('translator')->trans('Comparativa entre las revisiones %oldRev% y %newRev%', array('%oldRev%' => $oldRev, '%newRev%' => $newRev), 'AuditBundle'),
  111. 'className' => $className,
  112. 'id' => $id,
  113. 'oldRev' => $oldRev,
  114. 'newRev' => $newRev,
  115. 'diff' => $diff,
  116. );
  117. return $this->render('AuditBundle:Audit:compare.html.twig', array(
  118. 'base_template' => $this->getBaseTemplate($request),
  119. 'data' => $data,
  120. 'admin_pool' => $this->get('sonata.admin.pool'),
  121. ));
  122. } catch (NoRevisionFoundException $ex) {
  123. $this->get('session')->getFlashBag()->add('sonata_error', $ex->getMessage());
  124. return $this->redirect($this->generateUrl('entity_audit'));
  125. }
  126. }
  127. /**
  128. * @return string
  129. */
  130. private function getBaseTemplate(Request $request)
  131. {
  132. $adminPool = $this->get('sonata.admin.pool');
  133. if ($request->isXmlHttpRequest()) {
  134. return $adminPool->getTemplate('ajax');
  135. }
  136. return $adminPool->getTemplate('layout');
  137. }
  138. }