public function load(ObjectManager $manager) { $userSkill = array(array('user' => 2, 'skill' => 4), array('user' => 10, 'skill' => 6), array('user' => 6, 'skill' => 8), array('user' => 10, 'skill' => 3), array('user' => 5, 'skill' => 12), array('user' => 4, 'skill' => 15), array('user' => 8, 'skill' => 17), array('user' => 6, 'skill' => 5), array('user' => 9, 'skill' => 7), array('user' => 11, 'skill' => 1), array('user' => 13, 'skill' => 2), array('user' => 12, 'skill' => 20), array('user' => 17, 'skill' => 8)); foreach ($userSkill as $us) { $repository = $manager->getRepository('AppBundle:User'); $userEntity = $repository->find($us['user']); $repository = $manager->getRepository('AppBundle:Skill'); $skillEntity = $repository->find($us['skill']); $userSkillEntity = new UserSkill(); $userSkillEntity->setUser($userEntity); $userSkillEntity->setSkill($skillEntity); $userSkillEntity->setIsActive(1); $manager->persist($userSkillEntity); } $manager->flush(); }
/** * Edits an existing User entity. * * @Route("/{id}/update", name="user_update", options={"expose"=true}) * @Method("POST") * @Template("AppBundle:User:edit.html.twig") */ public function updateAction(Request $request, $id) { $em = $this->getDoctrine()->getManager(); $user = $em->getRepository('AppBundle:User')->find($id); $skillsRequest = $request->get('skills'); $accounts = $request->get('account'); $dateAdmission = $request->get('admissionDate'); $password = $request->get('password'); $image = $request->files->get('image'); $position = $em->getRepository('AppBundle:Position')->find($request->get('position')); /**************** INICIO PROCESOS CON SKILLS ************************************/ $userSkillArray = $user->getSkills(); //Arreglo de skills actuales del usuario seleccionado $skillsArray = []; foreach ($userSkillArray as $us) { $userSkillName = $us->getSkill()->getName(); //El arreglo funciona sólo con nombres de skill array_push($skillsArray, $userSkillName); } if (!empty($skillsRequest)) { //Si existe una lista de skills en el Request $skillsRequestId = []; //Arreglo de skills en el Request foreach ($skillsRequest as $skill) { $name = $skill['name']; //El arreglo funciona sólo con nombres de skills array_push($skillsRequestId, $name); } $addSkill = array_diff($skillsRequestId, $skillsArray); //Lista de nombres de skills para agregar $removeSkills = array_diff($skillsArray, $skillsRequestId); //Lista de nombres de skills para eliminar foreach ($skillsRequestId as $skill) { //Por cada skill del Request verifica si una skill previamente agregada se quiere insertar nuevamente $skillEntityToManage = $em->getRepository('AppBundle:Skill')->findOneByName($skill); if (!is_null($skillEntityToManage)) { $skillId = $skillEntityToManage->getSkillId(); $foundHiddenSkill = $em->getRepository('AppBundle:UserSkill')->findIdToManage($id, $skillId); if (!empty($foundHiddenSkill)) { $userSkill = $foundHiddenSkill[0]; if ($userSkill->getIsActive() == 0) { $userSkill->setIsActive(1); $em->persist($userSkill); $em->flush(); } } } } if (!empty($addSkill)) { //Si hay skills para agregar se establece una nueva relación de usuarios con skills foreach ($addSkill as $add) { $skillEntityByName = $em->getRepository('AppBundle:Skill')->findOneByName($add); if (is_null($skillEntityByName)) { //Si la skill es nueva se agrega a la base de datos y posteriormente se crea la relación $s = new Skill(); $s->setName($add); $em->persist($s); $em->flush(); $s->getSkillId(); $userSkill = new UserSkill(); $userSkill->setSkill($s); $userSkill->setUser($user); $userSkill->setIsActive(1); $em->persist($userSkill); $em->flush(); } else { //Si la skill existe, sólo se establece la nueva relación $userSkill = new UserSkill(); $userSkill->setSkill($skillEntityByName); $userSkill->setUser($user); $userSkill->setIsActive(1); $em->persist($userSkill); $em->flush(); } } } if (!empty($removeSkills)) { //Si existen skills para eliminar se actualiza la relación foreach ($removeSkills as $remove) { $skillEntityToRemove = $em->getRepository('AppBundle:Skill')->findOneByName($remove)->getSkillId(); $foundUserSkill = $em->getRepository('AppBundle:UserSkill')->findIdToManage($id, $skillEntityToRemove); $userSkill = $foundUserSkill[0]; $userSkill->setIsActive(0); //Realmente no se elimina la skill, sólo se oculta $em->persist($userSkill); $em->flush(); } } } else { //Si no existe una lista de skills en el Request se ocultan todas las relaciones foreach ($skillsArray as $skill) { $skillEntityToRemove = $em->getRepository('AppBundle:Skill')->findOneByName($skill)->getSkillId(); $foundUserSkill = $em->getRepository('AppBundle:UserSkill')->findIdToManage($id, $skillEntityToRemove); $userSkill = $foundUserSkill[0]; $userSkill->setIsActive(0); $em->persist($userSkill); $em->flush(); } } /****************FIN PROCESOS CON SKILLS ************************************/ /*************** INICIO PROCESOS DE CUENTAS ******************************/ if (!empty($accounts)) { $userAccounts = $user->getAccounts(); foreach ($userAccounts as $userAccount) { $user->removeAccount($userAccount); $em->persist($user); $em->flush(); } foreach ($accounts as $requestAccount) { $account_AccountId = $em->getRepository('AppBundle:Account')->find($requestAccount); $user->addAccount($account_AccountId); } } else { $userAccounts = $user->getAccounts(); foreach ($userAccounts as $userAccount) { $user->removeAccount($userAccount); $em->persist($user); $em->flush(); } } /*************** FIN PROCESOS CON CUENTAS ********************************/ if ($this->get('security.authorization_checker')->isGranted('ROLE_ADMIN')) { $user->setRoles($request->get('role')); } $user->setName($request->get('name')); $user->setLastName($request->get('lastname')); $user->setSurName($request->get('surname')); $user->setUserName($request->get('email')); if ($image != "") { $user->setFile($request->files->get('image')); } if ($password != "") { $user->setPassword($password); } if (!empty($dateAdmission)) { $dateAdmission = date_create_from_format('Y-m-d', $dateAdmission); $user->setAdmissionDate($dateAdmission); } if ($position != "") { $user->setPosition($position); } $em->persist($user); $em->flush(); return $this->redirect($this->generateUrl('user_edit', array('id' => $id))); }