示例#1
0
 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();
 }
示例#2
0
 /**
  * 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)));
 }