Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
| 1 | <?php |
||
| 39 | class UsuarioController extends Controller |
||
| 40 | { |
||
| 41 | /** |
||
| 42 | * @Route("/modificar", name="usuario_modificar",methods={"GET", "POST"}) |
||
| 43 | */ |
||
| 44 | public function modificarPropioAction() |
||
| 49 | |||
| 50 | /** |
||
| 51 | * @Route("/modificar/{usuario}", name="usuario_modificar_otro",methods={"GET", "POST"}) |
||
| 52 | */ |
||
| 53 | public function modificarAction(Usuario $usuario, Request $peticion) |
||
| 54 | { |
||
| 55 | $usuarioActivo = $this->getUser(); |
||
| 56 | if ($usuario->getId() !== $usuarioActivo->getId() && !$this->isGranted('ROLE_ADMIN') && !$this->isGranted('ROLE_DIRECTIVO')) { |
||
| 57 | return $this->createAccessDeniedException(); |
||
| 58 | } |
||
| 59 | $formulario = $this->createForm(new UsuarioType(), $usuario, array( |
||
| 60 | 'admin' => $this->isGranted('ROLE_ADMIN'), |
||
| 61 | 'directivo' => $this->isGranted('ROLE_DIRECTIVO'), |
||
| 62 | 'propio' => ($usuarioActivo->getId() === $usuario->getId()) |
||
| 63 | )); |
||
| 64 | |||
| 65 | $formulario->handleRequest($peticion); |
||
| 66 | |||
| 67 | if ($formulario->isSubmitted() && $formulario->isValid()) { |
||
| 68 | |||
| 69 | // Guardar el usuario en la base de datos |
||
| 70 | |||
| 71 | // Si es solicitado, cambiar la contraseña |
||
| 72 | $passwordSubmit = $formulario->get('cambiarPassword'); |
||
| 73 | if (($passwordSubmit instanceof SubmitButton) && $passwordSubmit->isClicked()) { |
||
| 74 | $password = $this->container->get('security.password_encoder') |
||
| 75 | ->encodePassword($usuario, $formulario->get('newPassword')->get('first')->getData()); |
||
| 76 | $usuario->setPassword($password); |
||
| 77 | $this->addFlash('success', 'Datos guardados correctamente y contraseña cambiada'); |
||
| 78 | } |
||
| 79 | else { |
||
| 80 | $this->addFlash('success', 'Datos guardados correctamente'); |
||
| 81 | } |
||
| 82 | $this->getDoctrine()->getManager()->flush(); |
||
| 83 | |||
| 84 | return new RedirectResponse( |
||
| 85 | $this->generateUrl($this->isGranted('ROLE_ADMIN') ? 'usuario_listar' : 'portada') |
||
| 86 | ); |
||
| 87 | } |
||
| 88 | |||
| 89 | return $this->render('AppBundle:Usuario:modificar.html.twig', |
||
| 90 | array( |
||
| 91 | 'usuario' => $usuario, |
||
| 92 | 'formulario' => $formulario->createView() |
||
| 93 | )); |
||
| 94 | } |
||
| 95 | |||
| 96 | /** |
||
| 97 | * @Route("/nuevo", name="usuario_nuevo",methods={"GET", "POST"}) |
||
| 98 | * @Security("has_role('ROLE_ADMIN')") |
||
| 99 | */ |
||
| 100 | public function nuevoAction(Request $peticion) |
||
| 101 | { |
||
| 102 | $usuario = new Usuario(); |
||
| 103 | $usuario |
||
| 104 | ->setEstaActivo(true) |
||
| 105 | ->setEstaBloqueado(false); |
||
| 106 | |||
| 107 | $formulario = $this->createForm(new UsuarioType(), $usuario, array( |
||
| 108 | 'admin' => true, |
||
| 109 | 'propio' => false, |
||
| 110 | 'nuevo' => true |
||
| 111 | )); |
||
| 112 | |||
| 113 | $formulario->handleRequest($peticion); |
||
| 114 | |||
| 115 | if ($formulario->isSubmitted() && $formulario->isValid()) { |
||
| 116 | |||
| 117 | // Guardar el usuario en la base de datos |
||
| 118 | $em = $this->getDoctrine()->getManager(); |
||
| 119 | |||
| 120 | $encoder = $this->container->get('security.password_encoder'); |
||
| 121 | $password = $encoder->encodePassword($usuario, $formulario->get('newPassword')->get('first')->getData()); |
||
| 122 | $usuario->setPassword($password); |
||
| 123 | |||
| 124 | $em->persist($usuario); |
||
| 125 | $em->flush(); |
||
| 126 | |||
| 127 | $this->addFlash('success', 'Usuario creado correctamente'); |
||
| 128 | |||
| 129 | // redireccionar a la portada |
||
| 130 | return new RedirectResponse( |
||
| 131 | $this->generateUrl('usuario_listar') |
||
| 132 | ); |
||
| 133 | } |
||
| 134 | |||
| 135 | return $this->render('AppBundle:Usuario:modificar.html.twig', |
||
| 136 | array( |
||
| 137 | 'usuario' => $usuario, |
||
| 138 | 'formulario' => $formulario->createView() |
||
| 139 | )); |
||
| 140 | } |
||
| 141 | |||
| 142 | /** |
||
| 143 | * @Route("/listar", name="usuario_listar",methods={"GET"}) |
||
| 144 | * @Security("has_role('ROLE_REVISOR')") |
||
| 145 | */ |
||
| 146 | public function listarAction(Request $request) |
||
| 165 | |||
| 166 | protected function importarUsuariosDesdeCsv($fichero) |
||
| 167 | { |
||
| 168 | $em = $this->getDoctrine()->getManager(); |
||
| 169 | |||
| 170 | $importer = new CsvImporter($fichero, true); |
||
| 171 | $encoder = $this->container->get('security.password_encoder'); |
||
| 172 | |||
| 173 | while($data = $importer->get(100)) { |
||
| 174 | foreach($data as $usuarioData) { |
||
| 175 | $ahora = new \Datetime(); |
||
| 176 | if ((\DateTime::createFromFormat('d/m/Y', $usuarioData['Fecha de toma de posesión']) <= $ahora) |
||
| 177 | && (!$usuarioData['Fecha de cese']) |
||
| 178 | || ($usuarioData['Fecha de cese'] && (\DateTime::createFromFormat('d/m/Y', |
||
| 179 | $usuarioData['Fecha de cese']) > $ahora)) |
||
| 180 | ) { |
||
| 181 | |||
| 182 | $usuario = $em->getRepository('AppBundle:Usuario') |
||
| 183 | ->findOneByNombreUsuario($usuarioData['Usuario IdEA']); |
||
| 184 | if (!$usuario) { |
||
| 185 | |||
| 186 | $usuario = new Usuario(); |
||
| 187 | |||
| 188 | $completo = explode(', ', $usuarioData['Empleado/a']); |
||
| 189 | |||
| 190 | $usuario->setNombreUsuario($usuarioData['Usuario IdEA']) |
||
| 191 | ->setApellidos($completo[0]) |
||
| 192 | ->setNombre($completo[1]) |
||
| 193 | ->setPassword($encoder->encodePassword($usuario, $usuarioData['Usuario IdEA'])) |
||
| 194 | ->setNotificaciones(false) |
||
| 195 | ->setEsAdministrador(false) |
||
| 196 | ->setEsRevisor(false) |
||
| 197 | ->setEsDirectivo(false) |
||
| 198 | ->setEsOrientador(false) |
||
| 199 | ->setEstaBloqueado(false) |
||
| 200 | ->setEstaActivo(true) |
||
| 201 | ->setEsExterno(true); |
||
| 202 | |||
| 203 | $em->persist($usuario); |
||
| 204 | } |
||
| 205 | } |
||
| 206 | } |
||
| 207 | } |
||
| 208 | $em->flush(); |
||
| 209 | return true; |
||
| 210 | } |
||
| 211 | |||
| 212 | /** |
||
| 213 | * @Route("/importar", name="usuario_importar",methods={"GET", "POST"}) |
||
| 214 | * @Security("has_role('ROLE_DIRECTIVO')") |
||
| 215 | */ |
||
| 216 | View Code Duplication | public function importarAction(Request $request) |
|
| 241 | } |
||
| 242 |