/ORM/GeneratorController.php

https://github.com/rafaelgou/CoregenAdminGeneratorBundle · PHP · 352 lines · 201 code · 68 blank · 83 comment · 17 complexity · 880e89140935f04f4a252c83f7f420c9 MD5 · raw file

  1. <?php
  2. namespace Coregen\AdminGeneratorBundle\ORM;
  3. use Coregen\AdminGeneratorBundle\Controller;
  4. use Coregen\AdminGeneratorBundle\Generator\Generator;
  5. use Symfony\Component\Form\Extension\Csrf\CsrfProvider\DefaultCsrfProvider;
  6. /**
  7. * ORM Generator Controller
  8. *
  9. * @package CoregenAdminGenerator
  10. * @subpackage ORM
  11. * @author Rafael Goulart <rafaelgou@gmail.com>
  12. */
  13. abstract class GeneratorController extends Controller\GeneratorController
  14. {
  15. /**
  16. * Load Generator
  17. *
  18. * @param Coregen\AdminGeneratorBundle\Generator\Generator $generator A generator
  19. *
  20. * @return void
  21. */
  22. public function loadGenerator($generator)
  23. {
  24. $this->generator = $generator;
  25. $this->pager = $this->get('coregen.orm.pager')
  26. ->setGenerator($generator);
  27. }
  28. /**
  29. * Index action
  30. *
  31. * @return View
  32. */
  33. public function indexAction()
  34. {
  35. // Configuring the Generator Controller
  36. $this->configure();
  37. // Defining filters
  38. $this->configureFilter();
  39. // Defining sort
  40. $this->configureSort();
  41. // Defining actual page
  42. $this->setPage($this->getRequest()->get('page', $this->getPage()));
  43. $pager = $this->getPager();
  44. $filterForm = $this->createFilterForm();
  45. if ($filterForm) {
  46. $filterForm = $filterForm->createView();
  47. }
  48. return $this->renderView('list' . ucfirst($this->generator->list->layout), array(
  49. 'pager' => $pager,
  50. 'delete_form' => $this->createDeleteForm('fake')->createView(),
  51. 'filter_form' => $filterForm,
  52. ));
  53. }
  54. /**
  55. * Show action
  56. *
  57. * @param mixed $id Entity/Document Id
  58. *
  59. * @return View
  60. */
  61. public function showAction($id)
  62. {
  63. // Configuring the Generator Controller
  64. $this->configure();
  65. $manager = $this->getDoctrine()->getEntityManager();
  66. $entity = $manager->getRepository($this->generator->model)->find($id);
  67. if (!$entity) {
  68. throw $this->createNotFoundException('Unable to find Entity.');
  69. }
  70. $deleteForm = $this->createDeleteForm($id);
  71. return $this->renderView('show', array(
  72. 'record' => $entity,
  73. 'delete_form' => $deleteForm->createView(),
  74. ));
  75. }
  76. /**
  77. * New action
  78. *
  79. * @return View
  80. */
  81. public function newAction()
  82. {
  83. // Configuring the Generator Controller
  84. $this->configure();
  85. $entityClass = $this->generator->class;
  86. $formType = $this->generator->form->type;
  87. $entity = new $entityClass();
  88. $form = $this->createForm(new $formType(), $entity);
  89. return $this->renderView('new', array(
  90. 'record' => $entity,
  91. 'form' => $form->createView()
  92. ));
  93. }
  94. /**
  95. * Create Action
  96. *
  97. * @return View
  98. */
  99. public function createAction()
  100. {
  101. // Configuring the Generator Controller
  102. $this->configure();
  103. $entityClass = $this->generator->class;
  104. $formType = $this->generator->form->type;
  105. $entity = new $entityClass();
  106. $form = $this->createForm(new $formType(), $entity);
  107. $request = $this->getRequest();
  108. $form->bindRequest($request);
  109. if ($form->isValid()) {
  110. $manager = $this->getDoctrine()->getEntityManager();
  111. $manager->persist($entity);
  112. $manager->flush();
  113. if ($request->get('form_save_and_add') == 'true') {
  114. $this->get('session')->setFlash('success', 'The item was created successfully. Add a new one bellow.');
  115. return $this->redirect($this->generateUrl($this->generator->route . '_new'));
  116. } else {
  117. $this->get('session')->setFlash('success', 'The item was created successfully.');
  118. return $this->redirect($this->generateUrl($this->generator->route));
  119. //return $this->redirect($this->generateUrl($this->generator->route . '_show', array('id' => $entity->getId())));
  120. }
  121. }
  122. $this->get('session')->setFlash('error', 'An error ocurred while saving the item. Check the informed data.');
  123. return $this->renderView('new', array(
  124. 'record' => $entity,
  125. 'form' => $form->createView()
  126. ));
  127. }
  128. /**
  129. * Edit Action
  130. *
  131. * @param mixed $id Entity/Document Id
  132. *
  133. * @return View
  134. */
  135. public function editAction($id)
  136. {
  137. // Configuring the Generator Controller
  138. $this->configure();
  139. $manager = $this->getDoctrine()->getEntityManager();
  140. $entity = $manager->getRepository($this->generator->model)->find($id);
  141. if (!$entity) {
  142. throw $this->createNotFoundException('Unable to find Entity.');
  143. }
  144. $formType = $this->generator->form->type;
  145. $editForm = $this->createForm(new $formType(), $entity);
  146. $deleteForm = $this->createDeleteForm($id);
  147. foreach ($this->generator->getHiddenFields('edit') as $fieldName) {
  148. $editForm->remove($fieldName);
  149. }
  150. return $this->renderView('edit', array(
  151. 'record' => $entity,
  152. 'form' => $editForm->createView(),
  153. 'delete_form' => $deleteForm->createView(),
  154. ));
  155. }
  156. /**
  157. * Update Action
  158. *
  159. * @param mixed $id Entity/Document Id
  160. *
  161. * @return View
  162. */
  163. public function updateAction($id)
  164. {
  165. // Configuring the Generator Controller
  166. $this->configure();
  167. $manager = $this->getDoctrine()->getEntityManager();
  168. $entity = $manager->getRepository($this->generator->model)->find($id);
  169. if (!$entity) {
  170. throw $this->createNotFoundException('Unable to find entity.');
  171. }
  172. $formType = $this->generator->form->type;
  173. $editForm = $this->createForm(new $formType(), $entity);
  174. $deleteForm = $this->createDeleteForm($id);
  175. foreach ($this->generator->getHiddenFields('edit') as $fieldName) {
  176. $editForm->remove($fieldName);
  177. }
  178. $request = $this->getRequest();
  179. $editForm->bindRequest($request);
  180. if ($editForm->isValid()) {
  181. $manager->persist($entity);
  182. $manager->flush();
  183. $this->get('session')->setFlash('success', 'The item was updated successfully.');
  184. return $this->redirect($this->generateUrl($this->generator->route));
  185. //return $this->redirect($this->generateUrl($this->generator->route . '_show', array('id' => $id)));
  186. } else {
  187. $this->get('session')->setFlash('error', 'An error ocurred while saving the item. Check the informed data.');
  188. return $this->renderView('edit', array(
  189. 'record' => $entity,
  190. 'form' => $editForm->createView(),
  191. 'delete_form' => $deleteForm->createView(),
  192. ));
  193. }
  194. }
  195. /**
  196. * Delete Action
  197. *
  198. * @param mixed $id Entity/Document Id
  199. *
  200. * @return View
  201. */
  202. public function deleteAction($id)
  203. {
  204. // Configuring the Generator Controller
  205. $this->configure();
  206. $form = $this->createDeleteForm($id);
  207. $request = $this->getRequest();
  208. $form->bindRequest($request);
  209. if ($form->isValid()) {
  210. $manager = $this->getDoctrine()->getEntityManager();
  211. $entity = $manager->getRepository($this->generator->class)->find($id);
  212. if (!$entity) {
  213. throw $this->createNotFoundException('Unable to find entity.');
  214. }
  215. $manager->remove($entity);
  216. $manager->flush();
  217. $this->get('session')->setFlash('success', 'The item was deleted successfully.');
  218. return $this->redirect($this->generateUrl($this->generator->route));
  219. } else {
  220. $this->get('session')->setFlash(
  221. 'error',
  222. 'An error ocurred while deleting the item.'
  223. );
  224. return $this->redirect($this->generateUrl($this->generator->route));
  225. }
  226. }
  227. /**
  228. * Batch Delete
  229. *
  230. * @return View
  231. */
  232. public function batchActionsAction()
  233. {
  234. // Configuring the Generator Controller
  235. $this->configure();
  236. $method = 'batch' . ucfirst($this->getRequest()->get('batchSelect', 'none'));
  237. if (method_exists($this, $method)) {
  238. $ids = array_keys($this->getRequest()->get('selected_objects', array()));
  239. return $this->$method($ids);
  240. } else {
  241. $message = $this->get('translator')->trans('Method "%s" not found in class "%s".');
  242. $message = sprintf($message, $method, get_class($this));
  243. $this->get('session')->setFlash('error',$message);
  244. return $this->redirect($this->generateUrl($this->generator->route));
  245. }
  246. }
  247. /**
  248. * Batch Delete
  249. *
  250. * @param array $ids An array of ids to batch process
  251. * @return View
  252. */
  253. protected function batchDelete($ids)
  254. {
  255. // Configuring the Generator Controller
  256. $this->configure();
  257. if (count($ids)) {
  258. try {
  259. $manager = $this->getDoctrine()->getEntityManager();
  260. $qb = $manager->createQueryBuilder($this->generator->class, 'e');
  261. $qb->delete($this->generator->class, 'e')
  262. ->andWhere($qb->expr()->in('e.id', $ids))
  263. ->getQuery()->execute();
  264. } catch (Exception $exc) {
  265. //echo $exc->getTraceAsString();
  266. $this->get('session')->setFlash(
  267. 'error',
  268. 'An error ocurred while executing the batch action.'
  269. . '<br/>' . $exc->getTraceAsString()
  270. );
  271. return $this->redirect($this->generateUrl($this->generator->route));
  272. }
  273. $batch_actions = $this->generator->list->batch_actions;
  274. $action = $batch_actions['delete'];
  275. $message = $this->get('translator')->trans($action['success_message']);
  276. $message = sprintf($message, count($ids));
  277. $this->get('session')->setFlash('success', $message);
  278. return $this->redirect($this->generateUrl($this->generator->route));
  279. } else {
  280. $this->get('session')->setFlash('error','No itens selected to execute the batch action.');
  281. return $this->redirect($this->generateUrl($this->generator->route));
  282. }
  283. }
  284. }