diff --git a/app/config/security.yml b/app/config/security.yml index 653c1d1660f6848a991034d003768bd0df65efaa..d010e837512e8a43714b271f532eb7a518f74274 100644 --- a/app/config/security.yml +++ b/app/config/security.yml @@ -3,16 +3,21 @@ security: encoders: PixeesBundle\Entity\People: - algorithm: plaintext + algorithm: plaintext + Symfony\Component\Security\Core\User\User: plaintext # https://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded providers: - pixees_provider: - entity: - class: PixeesBundle:People - property: username + in_memory: + memory: + users: + pixees: { password: 'Cl455c0d3U53r', roles: 'ROLE_ADMIN' } + pixees_provider: + entity: + class: PixeesBundle:People + property: username # if you're using multiple entity managers - manager_name: pixees + manager_name: pixees firewalls: # disables authentication for assets and the profiler, adapt it according to your needs @@ -23,8 +28,10 @@ security: main: anonymous: ~ pattern: ^/ - http_basic: ~ - provider: pixees_provider + provider: pixees_provider + http_basic: + realm: 'API' + provider: in_memory stateless: true guard: authenticators: @@ -36,3 +43,5 @@ security: # https://symfony.com/doc/current/security/form_login_setup.html #form_login: ~ + role_hierarchy: + ROLE_ADMIN: [ROLE_USER] \ No newline at end of file diff --git a/src/ClassCodeBundle/Command/ImportPeopleCommand.php b/src/ClassCodeBundle/Command/ImportPeopleCommand.php index c9b566e99790e41f9477c73449c1e7b62db4c185..b1236b49bebb585fae31a05b998996b6c7adda45 100644 --- a/src/ClassCodeBundle/Command/ImportPeopleCommand.php +++ b/src/ClassCodeBundle/Command/ImportPeopleCommand.php @@ -53,7 +53,7 @@ class ImportPeopleCommand extends ContainerAwareCommand $log_msg .= "Import People ... \n"; $old_time = time(); - $rawSql = "SELECT p.id,p.user_login,p.user_nicename,p.user_email,g.street,g.city, g.state, g.zipcode,g.country_long, g.formatted_address, g.lat, g.long FROM wp_users p left join wppl_friends_locator g on g.member_id = p.id ;"; + $rawSql = "SELECT p.id,p.user_login,p.display_name,p.user_email,g.street,g.city, g.state, g.zipcode,g.country_long, g.formatted_address, g.lat, g.long FROM wp_users p left join wppl_friends_locator g on g.member_id = p.id ;"; $stmt = $emp->getConnection()->prepare($rawSql); $stmt->execute(); $people_in_wp = $stmt->fetchAll(); @@ -72,7 +72,7 @@ class ImportPeopleCommand extends ContainerAwareCommand } $people->setUserId($p['id']); $people->setUsername($p['user_login']); - $people->setDisplayname($p['user_nicename']); + $people->setDisplayname($p['display_name']); $people->setEmail($p['user_email']); //recuperation des donnnées de profil budypress diff --git a/src/ClassCodeBundle/Controller/MeetingController.php b/src/ClassCodeBundle/Controller/MeetingController.php index 8e89455dbb11703ba94eb488e75f60c81a3bf7f0..7a5fa06f3e5dd48d160d8aacfebd70df28bac3a9 100644 --- a/src/ClassCodeBundle/Controller/MeetingController.php +++ b/src/ClassCodeBundle/Controller/MeetingController.php @@ -8,6 +8,8 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\HttpFoundation\Response; use ClassCodeBundle\Entity\Meeting; +use ClassCodeBundle\Entity\People; + class MeetingController extends Controller @@ -18,8 +20,7 @@ class MeetingController extends Controller public function indexAction(Request $request) { if($this->get('security.authorization_checker')->isGranted('ROLE_USER')){ - $em = $this->getDoctrine()->getManager(); - + $em = $this->getDoctrine()->getManager(); $meetings = $em->getRepository('ClassCodeBundle:Meeting')->findAll(); $meetingsWithGeoloc = $em->getRepository('ClassCodeBundle:Meeting')->findAllWithGeoLoc(); return $this->render('@ClassCode/Meeting/list.html.twig', array( @@ -56,6 +57,7 @@ class MeetingController extends Controller $tmp_array['id'] = $m->getId(); $tmp_array['ownerId'] = $tmp_owner->getUserId(); + $tmp_array['ownerDisplayName'] = $tmp_owner->getCommonDisplayname(); $date = \DateTime::createFromFormat('d/m/Y', $m->getDate()); $tmp_array['date'] = $m->getDate(); $tmp_array["past"] = !($date != '' && $date > $today); @@ -105,14 +107,18 @@ class MeetingController extends Controller $tmp_owner = $m->getOwner(); $tmp_facilitator = $tmp_owner->getFacilitator(); $tmp_subsribers_array = array(); + $tmp_subsribersmails_string = $tmp_owner->getEmail(); foreach ($m->getSubscribers() as $subscriber) { if($subscriber->getFacilitator()){ $tmp_facilitator = true; } $tmp_subsribers_array[]=$subscriber->getUserId(); + $tmp_subsribersmails_string .= ";".$subscriber->getEmail(); } $tmp_array['id'] = $m->getId(); $tmp_array['ownerId'] = $tmp_owner->getUserId(); + $tmp_array['ownerDisplayName'] = $tmp_owner->getCommonDisplayname(); + $tmp_array['ownerEmail'] = $tmp_owner->getEmail(); $date = \DateTime::createFromFormat('d/m/Y', $m->getDate()); $tmp_array['date'] = $m->getDate(); $tmp_array["past"] = !($date != '' && $date > $today); @@ -136,6 +142,7 @@ class MeetingController extends Controller $tmp_array['location'] = $tmp_location_array; $tmp_array['facilitateur'] = $tmp_facilitator; $tmp_array['subscribers'] = $tmp_subsribers_array; + $tmp_array['subscribersMails'] = $tmp_subsribersmails_string; $meeting=$tmp_array; } @@ -144,4 +151,322 @@ class MeetingController extends Controller 'meeting' => $meeting, )); } + + /** + * @Route("/registermeeting", name="meeting_register") + */ + public function registermeetingAction(Request $request) + { + if($this->get('security.authorization_checker')->isGranted('ROLE_USER')&&($request->getMethod() == 'POST')){ + $em = $this->getDoctrine()->getManager(); + $token = $this->get('security.token_storage')->getToken() ; + $user = $token->getUser(); + $meetingId = ltrim(rtrim($request->request->get("meetingId"))); + $unregister = false; + $unregister = ltrim(rtrim($request->request->get("unregister"))); + $redirectUrl = ltrim(rtrim($request->request->get("redirect"))); + $errorMessage = ""; + $successMessage = ""; + if(isset($meetingId)&&($meetingId != '')){ + $m = $em->getRepository('ClassCodeBundle:Meeting')->findOneBy(array('id' =>$meetingId)); + if($m){ + $p = $em->getRepository('ClassCodeBundle:People')->findOneBy(array('userId' =>$user->getId())); + if($p){ + if($unregister){ + $m->removeSubscriber($p); + $em->persist($m); + $em->flush(); + $successMessage = $this->get('translator')->trans('success.subscriberRemoved'); + }else{ + $m->addSubscriber($p); + $em->persist($m); + $em->flush(); + $successMessage = $this->get('translator')->trans('success.subscriberAdded'); + } + }else{ + $errorMessage = $this->get('translator')->trans('error.peoplenotfound'); + } + }else{ + $errorMessage = $this->get('translator')->trans('error.meetingnotfound'); + } + }else{ + $errorMessage = $this->get('translator')->trans('error.missingparameter'); + } + if(isset($redirectUrl)&&($redirectUrl != '')){ + return $this->redirect($redirectUrl); + }else{ + if($errorMessage != ''){ + $this ->get('session')->getFlashBag()->add('error', $errorMessage); + }else{ + if($successMessage != ''){ + $this ->get('session')->getFlashBag()->add('success', $successMessage); + } + } + $meetings = $em->getRepository('ClassCodeBundle:Meeting')->findAll(); + $meetingsWithGeoloc = $em->getRepository('ClassCodeBundle:Meeting')->findAllWithGeoLoc(); + return $this->render('@ClassCode/Meeting/list.html.twig', array( + 'meetings' => $meetings, + 'meetingsWithGeoloc' => $meetingsWithGeoloc, + )); + } + }else{ + return $this->render('@ClassCode/error_auth.html.twig'); + } + } + + /** + * @Route("/editmeeting", name="meeting_edit") + */ + public function editmeetingAction(Request $request) + { + if($this->get('security.authorization_checker')->isGranted('ROLE_USER')&&($request->getMethod() == 'POST')){ + $em = $this->getDoctrine()->getManager(); + $token = $this->get('security.token_storage')->getToken() ; + $user = $token->getUser(); + $userName = $user->getUserName(); + $redirectUrl = ltrim(rtrim($request->request->get("redirect"))); + $meetingId = ltrim(rtrim($request->request->get("meetingId"))); + $meetingDate = ltrim(rtrim($request->request->get("meeting_date"))); + $meetingTime = ltrim(rtrim($request->request->get("meeting_time"))); + $meetingStructure = ltrim(rtrim($request->request->get("structure"))); + $meetingStreet = ltrim(rtrim($request->request->get("meeting_street"))); + $meetingCity = ltrim(rtrim($request->request->get("meeting_city"))); + $meetingCountry = ltrim(rtrim($request->request->get("meeting_country"))); + $meetingCapacity = ltrim(rtrim($request->request->get("capacity"))); + $meetingHangout = ltrim(rtrim($request->request->get("meeting_hangout"))); + $meetingMore = ltrim(rtrim($request->request->get("meeting_more"))); + $meetingLat = ltrim(rtrim($request->request->get("meeting_lat"))); + $meetingLng = ltrim(rtrim($request->request->get("meeting_lng"))); + $meetingFormattedAddress = ltrim(rtrim($request->request->get("meeting_formatted_address"))); + $meetingState = ltrim(rtrim($request->request->get("meeting_state"))); + $meetingZipCode = ltrim(rtrim($request->request->get("meeting_zipcode"))); + $meetingSubject = ltrim(rtrim($request->request->get("meeting_module"))); + $meetingPrecisions = ltrim(rtrim($request->request->get("meeting_precisions"))); + $actionDuplicate = ltrim(rtrim($request->request->get("duplicate"))); + if($actionDuplicate == 'true'){ + return $this->redirectToRoute('meeting_duplicate', array('request' => $request), 307); + } + $actionDelete = ltrim(rtrim($request->request->get("delete"))); + if($actionDelete == 'true'){ + return $this->redirectToRoute('meeting_delete', array('request' => $request), 307); + } + $action = ''; + $p = $em->getRepository('ClassCodeBundle:People')->findOneBy(array('userId' =>$user->getId())); + if($p){ + if(isset($meetingId)&&($meetingId != '')){ // edit + $entity_meeting = $em->getRepository('ClassCodeBundle:Meeting')->findOneBy(array('id' =>$meetingId)); + if(!$entity_meeting){ + $errorMessage = $this->get('translator')->trans('error.meetingnotfound'); + }else{ + if(($entity_meeting->getOwner()->getUserId() != $user->getId())&&(!$this->get('security.authorization_checker')->isGranted('ROLE_ADMIN'))){ + return $this->render('@ClassCode/error_auth.html.twig'); + } + $action = 'update' ; + } + }else{ // create + $action = 'create' ; + $entity_meeting = new Meeting(); + $entity_meeting->setOwner($p); + } + $entity_meeting->setDate($meetingDate); + $entity_meeting->setTime($meetingTime); + $entity_meeting->setStructure($meetingStructure); + $entity_meeting->setStreet($meetingStreet); + $entity_meeting->setCity($meetingCity); + $entity_meeting->setState($meetingState); + $entity_meeting->setZipcode($meetingZipCode); + $entity_meeting->setCountry($meetingCountry); + $entity_meeting->setFormattedAddress($meetingFormattedAddress); + $entity_meeting->setLatitude($meetingLat); + $entity_meeting->setLongitude($meetingLng); + $entity_meeting->setCapacity($meetingCapacity); + $entity_meeting->setHangoutLink($meetingHangout); + $entity_meeting->setMore($meetingMore); + $entity_meeting->setSubject($meetingSubject); + $entity_meeting->setPrecisions($meetingPrecisions); + $entity_meeting->setUpdatedAt(new \DateTime()); + $entity_meeting->setUpdatedBy($userName); + $em->persist($entity_meeting); + $em->flush(); + if($action == 'create'){ + $successMessage = $this->get('translator')->trans('success.meetingCreated'); + }elseif($action == 'update'){ + $successMessage = $this->get('translator')->trans('success.meetingEdited'); + } + + }else{ + $errorMessage = $this->get('translator')->trans('error.peoplenotfound'); + } + + if(isset($redirectUrl)&&($redirectUrl != '')){ + if(strstr($redirectUrl,"?")){ + $redirectUrl = $redirectUrl."&"; + }else{ + $redirectUrl = $redirectUrl."?"; + } + $redirectUrl = $redirectUrl."meetingId=".$entity_meeting->getId()."&action=".$action; + return $this->redirect($redirectUrl); + }else{ + if($errorMessage != ''){ + $this ->get('session')->getFlashBag()->add('error', $errorMessage); + }else{ + if($successMessage != ''){ + $this ->get('session')->getFlashBag()->add('success', $successMessage); + } + } + $meetings = $em->getRepository('ClassCodeBundle:Meeting')->findAll(); + $meetingsWithGeoloc = $em->getRepository('ClassCodeBundle:Meeting')->findAllWithGeoLoc(); + return $this->render('@ClassCode/Meeting/list.html.twig', array( + 'meetings' => $meetings, + 'meetingsWithGeoloc' => $meetingsWithGeoloc, + )); + } + }else{ + return $this->render('@ClassCode/error_auth.html.twig'); + } + } + + /** + * @Route("/duplicatemeeting", name="meeting_duplicate") + */ + public function duplicatemeetingAction(Request $request) + { + if($this->get('security.authorization_checker')->isGranted('ROLE_USER')&&($request->getMethod() == 'POST')){ + $em = $this->getDoctrine()->getManager(); + $token = $this->get('security.token_storage')->getToken() ; + $user = $token->getUser(); + $userName = $user->getUserName(); + $redirectUrl = ltrim(rtrim($request->request->get("redirect"))); + $meetingId = ltrim(rtrim($request->request->get("meetingId"))); + + $action = 'duplicate'; + $p = $em->getRepository('ClassCodeBundle:People')->findOneBy(array('userId' =>$user->getId())); + if($p){ + if(isset($meetingId)&&($meetingId != '')){ // edit + $entity_meeting = $em->getRepository('ClassCodeBundle:Meeting')->findOneBy(array('id' =>$meetingId)); + if(!$entity_meeting){ + $errorMessage = $this->get('translator')->trans('error.meetingnotfound'); + }else{ + $duplicate_meeting = new Meeting(); + $duplicate_meeting->setOwner($p); + $duplicate_meeting->setDate($entity_meeting->getDate()); + $duplicate_meeting->setTime($entity_meeting->getTime()); + $duplicate_meeting->setStructure($entity_meeting->getStructure()); + $duplicate_meeting->setStreet($entity_meeting->getStreet()); + $duplicate_meeting->setCity($entity_meeting->getCity()); + $duplicate_meeting->setState($entity_meeting->getState()); + $duplicate_meeting->setZipcode($entity_meeting->getZipcode()); + $duplicate_meeting->setCountry($entity_meeting->getCountry()); + $duplicate_meeting->setFormattedAddress($entity_meeting->getFormattedAddress()); + $duplicate_meeting->setLatitude($entity_meeting->getLatitude()); + $duplicate_meeting->setLongitude($entity_meeting->getLongitude()); + $duplicate_meeting->setCapacity($entity_meeting->getCapacity()); + $duplicate_meeting->setHangoutLink($entity_meeting->getHangoutLink()); + $duplicate_meeting->setMore($entity_meeting->getMore()); + $duplicate_meeting->setSubject($entity_meeting->getSubject()); + $duplicate_meeting->setPrecisions($entity_meeting->getPrecisions()); + $duplicate_meeting->setUpdatedAt(new \DateTime()); + $duplicate_meeting->setUpdatedBy($userName); + $em->persist($duplicate_meeting); + $em->flush(); + $successMessage = $this->get('translator')->trans('success.meetingDuplicated'); + } + }else{ // meeting doesn't exist + $errorMessage = $this->get('translator')->trans('error.meetingnotfound'); + } + }else{ + $errorMessage = $this->get('translator')->trans('error.peoplenotfound'); + } + + if(isset($redirectUrl)&&($redirectUrl != '')){ + if(strstr($redirectUrl,"?")){ + $redirectUrl = $redirectUrl."&"; + }else{ + $redirectUrl = $redirectUrl."?"; + } + $redirectUrl = $redirectUrl."meetingId=".$duplicate_meeting->getId()."&action=".$action; + return $this->redirect($redirectUrl); + }else{ + if($errorMessage != ''){ + $this ->get('session')->getFlashBag()->add('error', $errorMessage); + }else{ + if($successMessage != ''){ + $this ->get('session')->getFlashBag()->add('success', $successMessage); + } + } + $meetings = $em->getRepository('ClassCodeBundle:Meeting')->findAll(); + $meetingsWithGeoloc = $em->getRepository('ClassCodeBundle:Meeting')->findAllWithGeoLoc(); + return $this->render('@ClassCode/Meeting/list.html.twig', array( + 'meetings' => $meetings, + 'meetingsWithGeoloc' => $meetingsWithGeoloc, + )); + } + }else{ + return $this->render('@ClassCode/error_auth.html.twig'); + } + } + + /** + * @Route("/deletemeeting", name="meeting_delete") + */ + public function deletemeetingAction(Request $request) + { + if($this->get('security.authorization_checker')->isGranted('ROLE_USER')&&($request->getMethod() == 'POST')){ + $em = $this->getDoctrine()->getManager(); + $token = $this->get('security.token_storage')->getToken() ; + $user = $token->getUser(); + $userName = $user->getUserName(); + $redirectUrl = ltrim(rtrim($request->request->get("redirect"))); + $meetingId = ltrim(rtrim($request->request->get("meetingId"))); + $action = 'delete'; + + $p = $em->getRepository('ClassCodeBundle:People')->findOneBy(array('userId' =>$user->getId())); + if($p){ + if(isset($meetingId)&&($meetingId != '')){ // delete + $entity_meeting = $em->getRepository('ClassCodeBundle:Meeting')->findOneBy(array('id' =>$meetingId)); + if(!$entity_meeting){ + $errorMessage = $this->get('translator')->trans('error.meetingnotfound'); + }else{ + if(($entity_meeting->getOwner()->getUserId() != $user->getId())&&(!$this->get('security.authorization_checker')->isGranted('ROLE_ADMIN'))){ + return $this->render('@ClassCode/error_auth.html.twig'); + }else{ + $em->remove($entity_meeting); + $em->flush(); + $successMessage = $this->get('translator')->trans('success.meetingDeleted'); + } + } + }else{ + $errorMessage = $this->get('translator')->trans('error.meetingnotfound'); + } + }else{ + $errorMessage = $this->get('translator')->trans('error.peoplenotfound'); + } + + if(isset($redirectUrl)&&($redirectUrl != '')){ + if(strstr($redirectUrl,"?")){ + $redirectUrl = $redirectUrl."&"; + }else{ + $redirectUrl = $redirectUrl."?"; + } + $redirectUrl = $redirectUrl."action=".$action; + return $this->redirect($redirectUrl); + }else{ + if($errorMessage != ''){ + $this ->get('session')->getFlashBag()->add('error', $errorMessage); + }else{ + if($successMessage != ''){ + $this ->get('session')->getFlashBag()->add('success', $successMessage); + } + } + $meetings = $em->getRepository('ClassCodeBundle:Meeting')->findAll(); + $meetingsWithGeoloc = $em->getRepository('ClassCodeBundle:Meeting')->findAllWithGeoLoc(); + return $this->render('@ClassCode/Meeting/list.html.twig', array( + 'meetings' => $meetings, + 'meetingsWithGeoloc' => $meetingsWithGeoloc, + )); + } + }else{ + return $this->render('@ClassCode/error_auth.html.twig'); + } + } } diff --git a/src/ClassCodeBundle/Controller/PeopleController.php b/src/ClassCodeBundle/Controller/PeopleController.php index e929588025b34ea734cd596209bc73da2914ee91..35cdec243471b8701d6c2142842176dc2cf44e48 100644 --- a/src/ClassCodeBundle/Controller/PeopleController.php +++ b/src/ClassCodeBundle/Controller/PeopleController.php @@ -30,35 +30,37 @@ class PeopleController extends Controller return $this->render('@ClassCode/error_auth.html.twig'); } } + /** * @Route("/queryuserloc.{_format}", name="queryuserloc",defaults={"_format"="json"},requirements={"_format"="json"})) */ public function queryUserLocAction(Request $request) { - $userLat = 0; - $userLng = 0; - $userStreet = ""; - $userZipCode = ""; - $userCity = ""; - $userState = ""; - $userCountry = ""; - $userFormattedAddress = ""; - $userId = ltrim(rtrim($request->query->get("userId"))); - if(isset($userId)&&($userId != '')){ - $em = $this->getDoctrine()->getManager(); - $user = $em->getRepository('ClassCodeBundle:People')->findOneBy(array('userId' =>$userId)); - if($user){ - $userLat = $user->getLatitude(); - $userLng = $user->getLongitude(); - $userStreet = $user->getStreet(); - $userZipCode = $user->getZipcode(); - $userCity = $user->getCity(); - $userState = $user->getState(); - $userCountry = $user->getCountry(); - $userFormattedAddress = $user->getFormattedAddress(); - } - } - return $this->render('@ClassCode/People/queryUserLoc.json.twig', array( + if($this->get('security.authorization_checker')->isGranted('ROLE_USER')){ + $userLat = 0; + $userLng = 0; + $userStreet = ""; + $userZipCode = ""; + $userCity = ""; + $userState = ""; + $userCountry = ""; + $userFormattedAddress = ""; + $userId = ltrim(rtrim($request->query->get("userId"))); + if(isset($userId)&&($userId != '')){ + $em = $this->getDoctrine()->getManager(); + $user = $em->getRepository('ClassCodeBundle:People')->findOneBy(array('userId' =>$userId)); + if($user){ + $userLat = $user->getLatitude(); + $userLng = $user->getLongitude(); + $userStreet = $user->getStreet(); + $userZipCode = $user->getZipcode(); + $userCity = $user->getCity(); + $userState = $user->getState(); + $userCountry = $user->getCountry(); + $userFormattedAddress = $user->getFormattedAddress(); + } + } + return $this->render('@ClassCode/People/queryUserLoc.json.twig', array( 'userlat' => $userLat, 'userlng' => $userLng, 'userStreet' => $userStreet, @@ -68,6 +70,259 @@ class PeopleController extends Controller 'userState' => $userState, 'userFormattedAddress' => $userFormattedAddress )); - + }else{ + return $this->render('@ClassCode/error_auth.html.twig'); + } + } + + /** + * @Route("/queryuserswithloc.{_format}", name="queryuserswithloc",defaults={"_format"="json"},requirements={"_format"="json"})) + */ + public function queryUsersWithLocAction(Request $request) + { + if($this->get('security.authorization_checker')->isGranted('ROLE_USER')){ + $em = $this->getDoctrine()->getManager(); + $peopleWithGeoloc = $em->getRepository('ClassCodeBundle:People')->findAllWithGeoLoc(); + $people_array = array(); + foreach ($peopleWithGeoloc as $people) { + $tmp_array = array(); + $tmp_array['userId'] = $people->getUserId(); + $tmp_array['username'] = $people->getUsername(); + $tmp_array['displayname'] = $people->getCommonDisplayname(); + $tmp_array['email'] = $people->getEmail(); + $tmp_array['avatar'] = $people->getAvatar(); + $tmp_array['avatarImg'] = $people->getAvatarImg(); + $tmp_array['firstname'] = $people->getFirstname(); + $tmp_array['lastname'] = $people->getLastname(); + $tmp_array['nickname'] = $people->getNickname(); + $tmp_array['structure'] = $people->getStructure(); + $tmp_array['context'] = $people->getContext(); + $tmp_array['profile'] = $people->getProfile(); + $tmp_array['teaching'] = $people->getTeaching(); + $tmp_array['facilitator'] = $people->getFacilitator(); + $tmp_array['computerJob'] = $people->getComputerJob(); + $tmp_array['learning'] = $people->getLearning(); + $tmp_array['skills'] = $people->getSkills(); + $tmp_location_array['street'] = $people->getStreet(); + $tmp_location_array['city'] = $people->getCity(); + $tmp_location_array['zipcode'] = $people->getZipcode(); + $tmp_location_array['state'] = $people->getState(); + $tmp_location_array['country'] = $people->getCountry(); + $tmp_location_array['formattedAddress'] = $people->getFormattedAddress(); + $tmp_location_array['lat'] = $people->getLatitude(); + $tmp_location_array['lng'] = $people->getLongitude(); + $tmp_array['location'] = $tmp_location_array; + $people_array[]=$tmp_array; + } + return $this->render('@ClassCode/People/queryUsers.json.twig', array( + 'people' => $people_array, + )); + }else{ + return $this->render('@ClassCode/error_auth.html.twig'); + } + } + + /** + * @Route("/queryuserprofile.{_format}", name="queryuserprofile",defaults={"_format"="json"},requirements={"_format"="json"})) + */ + public function queryUserProfileAction(Request $request) + { + if($this->get('security.authorization_checker')->isGranted('ROLE_USER')){ + $people_array = array(); + $userId = ltrim(rtrim($request->query->get("userId"))); + if(isset($userId)&&($userId != '')){ + $em = $this->getDoctrine()->getManager(); + $people = $em->getRepository('ClassCodeBundle:People')->findOneBy(array('userId' =>$userId)); + if($people){ + $people_array['userId'] = $people->getUserId(); + $people_array['username'] = $people->getUsername(); + $people_array['displayname'] = $people->getCommonDisplayname(); + $people_array['email'] = $people->getEmail(); + $people_array['avatar'] = $people->getAvatar(); + $people_array['avatarImg'] = $people->getAvatarImg(); + $people_array['firstname'] = $people->getFirstname(); + $people_array['lastname'] = $people->getLastname(); + $people_array['nickname'] = $people->getNickname(); + $people_array['structure'] = $people->getStructure(); + $people_array['context'] = $people->getContext(); + $people_array['profile'] = $people->getProfile(); + $people_array['teaching'] = $people->getTeaching(); + $people_array['facilitator'] = $people->getFacilitator(); + $people_array['computerJob'] = $people->getComputerJob(); + $people_array['learning'] = $people->getLearning(); + $people_array['skills'] = $people->getSkills(); + $tmp_location_array['street'] = $people->getStreet(); + $tmp_location_array['city'] = $people->getCity(); + $tmp_location_array['zipcode'] = $people->getZipcode(); + $tmp_location_array['state'] = $people->getState(); + $tmp_location_array['country'] = $people->getCountry(); + $tmp_location_array['formattedAddress'] = $people->getFormattedAddress(); + $tmp_location_array['lat'] = $people->getLatitude(); + $tmp_location_array['lng'] = $people->getLongitude(); + if(($tmp_location_array['lat']!='0') || ($tmp_location_array['lng']!='0')){ + $people_array['location'] = $tmp_location_array; + } + } + } + + return $this->render('@ClassCode/People/queryUsers.json.twig', array( + 'people' => $people_array, + )); + }else{ + return $this->render('@ClassCode/error_auth.html.twig'); + } + } + + /** + * @Route("/editpeople", name="people_edit") + */ + public function editpeopleAction(Request $request) + { + if($this->get('security.authorization_checker')->isGranted('ROLE_USER')&&($request->getMethod() == 'POST')){ + $em = $this->getDoctrine()->getManager(); + $token = $this->get('security.token_storage')->getToken() ; + $user = $token->getUser(); + $userName = $user->getUserName(); + $modifiedUserId = ltrim(rtrim($request->request->get("userId"))); + $modifiedUserLogin = ltrim(rtrim($request->request->get("username"))); + $errorMessage =""; + $action = ""; + $origin = ltrim(rtrim($request->request->get("origin"))); + if(($userName == $modifiedUserLogin) || $this->get('security.authorization_checker')->isGranted('ROLE_ADMIN')){ + if(isset($modifiedUserId)&&($modifiedUserId != '')){ + $people = $em->getRepository('ClassCodeBundle:People')->findOneBy(array('userId' =>$modifiedUserId)); + if(!$people){ + $action = 'create' ; + $people = new People(); + $people->setUserId($currentUserId); + }else{ + $action = "update"; + } + + if(null !== $request->request->get("username")){ + $people->setUsername(ltrim(rtrim($request->request->get("username")))); + } + if(null !== $request->request->get("avatar")){ + $people->setAvatar(ltrim(rtrim($request->request->get("avatar")))); + } + if(null !== $request->request->get("avatarImg")){ + $people->setAvatarImg(ltrim(rtrim($request->request->get("avatarImg")))); + } + if(null !== $request->request->get("firstname")){ + $people->setFirstname(ltrim(rtrim($request->request->get("firstname")))); + } + if(null !== $request->request->get("lastname")){ + $people->setLastname(ltrim(rtrim($request->request->get("lastname")))); + } + if(null !== $request->request->get("email")){ + $people->setEmail(ltrim(rtrim($request->request->get("email")))); + } + if(null !== $request->request->get("nickname")){ + $people->setNickname(ltrim(rtrim($request->request->get("nickname")))); + } + if(null !== $request->request->get("structure")){ + $people->setStructure(ltrim(rtrim($request->request->get("structure")))); + } + if(null !== $request->request->get("context")){ + $people->setContext(ltrim(rtrim($request->request->get("context")))); + } + if(null !== $request->request->get("street")){ + $people->setStreet(ltrim(rtrim($request->request->get("street")))); + } + if(null !== $request->request->get("city")){ + $people->setCity(ltrim(rtrim($request->request->get("city")))); + } + if(null !== $request->request->get("country")){ + $people->setCountry(ltrim(rtrim($request->request->get("country")))); + } + if(null !== $request->request->get("lat")){ + $people->setLatitude(ltrim(rtrim($request->request->get("lat")))); + } + if(null !== $request->request->get("lng")){ + $people->setLongitude(ltrim(rtrim($request->request->get("lng")))); + } + if(null !== $request->request->get("formattedAddress")){ + $people->setFormattedAddress(ltrim(rtrim($request->request->get("formattedAddress")))); + } + if(null !== $request->request->get("state")){ + $people->setState(ltrim(rtrim($request->request->get("state")))); + } + if(null !== $request->request->get("zipcode")){ + $people->setZipcode(ltrim(rtrim($request->request->get("zipcode")))); + } + if(null !== $request->request->get("profile")){ + $people->setProfile(ltrim(rtrim($request->request->get("profile")))); + } + if(null !== $request->request->get("computerJob")){ + $people->setComputerJob(ltrim(rtrim($request->request->get("computerJob")))); + } + if(null !== $request->request->get("teaching")){ + $people->setTeaching(ltrim(rtrim($request->request->get("teaching")))); + } + if(null !== $request->request->get("facilitator")){ + $people->setFacilitator( ltrim(rtrim($request->request->get("facilitator")))); + } + if(null !== $request->request->get("learning")){ + $people->setLearning(ltrim(rtrim($request->request->get("learning")))); + } + if(null !== $request->request->get("skills")){ + $people->setSkills(ltrim(rtrim($request->request->get("skills")))); + } + + $people->setUpdatedAt(new \DateTime()); + $people->setUpdatedBy($userName); + $em->persist($people); + $em->flush(); + if($action == 'create'){ + $successMessage = $this->get('translator')->trans('success.peopleCreated'); + }elseif($action == 'update'){ + $successMessage = $this->get('translator')->trans('success.peopleEdited'); + } + + }else{ + $errorMessage = $this->get('translator')->trans('error.peoplenotfound'); + } + + if(isset($origin)&&($origin != "")){ + if($errorMessage != ''){ + $result = array('status'=>'error', 'message'=> $errorMessage); + }else{ + $result = array('status'=>'success', 'message'=> $action); + } + return $this->render('@ClassCode/simpleResult.json.twig', array( + 'result' => $result , + )); + } + if($errorMessage != ''){ + $this ->get('session')->getFlashBag()->add('error', $errorMessage); + }else{ + if($successMessage != ''){ + $this ->get('session')->getFlashBag()->add('success', $successMessage); + } + $people = $em->getRepository('ClassCodeBundle:People')->findAll(); + $peopleWithGeoloc = $em->getRepository('ClassCodeBundle:People')->findAllWithGeoLoc(); + return $this->render('@ClassCode/People/list.html.twig', array( + 'people' => $people, + 'peopleWithGeoloc' => $peopleWithGeoloc, + )); + } + }else{ + if(isset($origin)&&($origin != "")){ + return $this->render('@ClassCode/simpleResult.json.twig', array( + 'result' => array('status'=>'error','message'=> $this->get('translator')->trans('Action non autorisée')), + )); + }else{ + return $this->render('@ClassCode/error_auth.html.twig'); + } + } + }else{ + if(isset($origin)&&($origin != "")){ + return $this->render('@ClassCode/simpleResult.json.twig', array( + 'result' => array('status'=>'error','message'=> $this->get('translator')->trans('Action non autorisée')), + )); + }else{ + return $this->render('@ClassCode/error_auth.html.twig'); + } + } } } diff --git a/src/ClassCodeBundle/Entity/Meeting.php b/src/ClassCodeBundle/Entity/Meeting.php index 65d1befae80fed89892978547eb59d80482569db..589dac78b692a676282448ab2b6092dc50c09998 100644 --- a/src/ClassCodeBundle/Entity/Meeting.php +++ b/src/ClassCodeBundle/Entity/Meeting.php @@ -204,6 +204,15 @@ class Meeting return $this->id; } + /** + * Get people + * + * @return \ClassCodeBundle\Entity\People + */ + public function getOwner() + { + return $this->ownerId; + } /** * Set people @@ -216,17 +225,7 @@ class Meeting $this->ownerId = $people; return $this; } - - /** - * Get people - * - * @return \ClassCodeBundle\Entity\People - */ - public function getOwner() - { - return $this->ownerId; - } - + /** * Get date * @@ -271,6 +270,16 @@ class Meeting return $this; } + /** + * Get structure + * + * @return string + */ + public function getStructure() + { + return $this->structure; + } + /** * Set structure * @@ -282,15 +291,15 @@ class Meeting $this->structure = $structure; return $this; } - + /** - * Get structure + * Get street * * @return string */ - public function getStructure() + public function getStreet() { - return $this->structure; + return $this->street; } /** @@ -305,16 +314,6 @@ class Meeting return $this; } - /** - * Get street - * - * @return string - */ - public function getStreet() - { - return $this->street; - } - /** * Get city * @@ -337,6 +336,16 @@ class Meeting return $this; } + /** + * Get state + * + * @return state + */ + public function getState() + { + return $this->state; + } + /** * Set state * @@ -349,14 +358,14 @@ class Meeting return $this; } - /** - * Get state + /** + * Get zipcode * - * @return state + * @return string */ - public function getState() + public function getZipcode() { - return $this->state; + return $this->zipcode; } /** @@ -372,13 +381,13 @@ class Meeting } /** - * Get zipcode + * Get country * * @return string */ - public function getZipcode() + public function getCountry() { - return $this->zipcode; + return $this->country; } /** @@ -393,16 +402,16 @@ class Meeting return $this; } - /** - * Get country + /** + * Get formattedAddress * * @return string */ - public function getCountry() + public function getFormattedAddress() { - return $this->country; + return $this->formattedAddress; } - + /** * Set formattedAddress * @@ -416,14 +425,14 @@ class Meeting } /** - * Get formattedAddress + * Get latitude * - * @return string + * @return float */ - public function getFormattedAddress() + public function getLatitude() { - return $this->formattedAddress; - } + return $this->latitude; + } /** * Set latitude @@ -438,15 +447,15 @@ class Meeting } /** - * Get latitude + * Get longitude * * @return float */ - public function getLatitude() + public function getLongitude() { - return $this->latitude; - } - + return $this->longitude; + } + /** * Set longitude * @@ -459,16 +468,7 @@ class Meeting return $this; } - /** - * Get longitude - * - * @return float - */ - public function getLongitude() - { - return $this->longitude; - } - + /** * Get capacity * diff --git a/src/ClassCodeBundle/Entity/People.php b/src/ClassCodeBundle/Entity/People.php index 4c1c72dc739ca02ec65b20468fbf9fd71b917a1f..8c55a6e0633aa04c12d887cfbcd8bb3d7b1038c8 100644 --- a/src/ClassCodeBundle/Entity/People.php +++ b/src/ClassCodeBundle/Entity/People.php @@ -326,12 +326,33 @@ class People */ public function getDisplayname() { - if($this->displayname){ + return $this->displayname; + } + + /** + * Get commondisplayname + * + * @return string + */ + public function getCommonDisplayname() + { + if($this->nickname){ + return $this->nickname; + }else if($this->lastname || $this->firstname){ + if($this->firstname){ + $displayname = $this->firstname; + }else{ + $displayname = ""; + } + if($this->lastname){ + $displayname .= " ".$this->lastname; + } + return $displayname; + }else if($this->displayname){ return $this->displayname; }else{ return $this->username; } - } /** diff --git a/src/ClassCodeBundle/Resources/translations/messages.fr.yml b/src/ClassCodeBundle/Resources/translations/messages.fr.yml index d45b0cc788e66e344d3d82fc6197bc042b098a95..fb086725039383316e1da97350d583592795c206 100644 --- a/src/ClassCodeBundle/Resources/translations/messages.fr.yml +++ b/src/ClassCodeBundle/Resources/translations/messages.fr.yml @@ -1,3 +1,4 @@ +"Action non autorisée" : "Action non autorisée" "Retour à l'accueil" : "Retour à l'accueil" "access_error" : "Vous n'êtes pas autorisé à effectuer cette action !" "Se connecter" : "Se connecter" @@ -107,3 +108,14 @@ 'geoloc.compute': "Calculer la position à partir de l'adresse" 'GeolocCompute' : "Position trouvée!" 'GeolocComputeError' : "Adresse introuvable!" +'success.subscriberRemoved' : "Participant supprimé" +'success.subscriberAdded' : "Participant ajouté" +'success.meetingCreated' : "Rencontre créée" +'success.meetingEdited' : "Rencontre editée" +'success.meetingDuplicated' : "Rencontre dupliquée" +'success.meetingDeleted' : "Rencontre supprimée" +'error.peoplenotfound' : "L'utilisateur n'a pas été trouvé" +'success.peopleCreated' : "Profile créé" +'success.peopleEdited' : "Profile edité" +'error.meetingnotfound' : "La rencontre n'a pas été trouvée" +'error.missingparameter' : "Un paramètre obligatoire est manquant" diff --git a/src/ClassCodeBundle/Resources/views/People/queryUsers.json.twig b/src/ClassCodeBundle/Resources/views/People/queryUsers.json.twig new file mode 100644 index 0000000000000000000000000000000000000000..090685651f28ad8d034a371906308f1b15da568f --- /dev/null +++ b/src/ClassCodeBundle/Resources/views/People/queryUsers.json.twig @@ -0,0 +1,2 @@ + {{ people|json_encode()|raw }} + diff --git a/src/ClassCodeBundle/Resources/views/simpleResult.json.twig b/src/ClassCodeBundle/Resources/views/simpleResult.json.twig new file mode 100644 index 0000000000000000000000000000000000000000..c0aea147303e21d696586b0701cb2345fe5c329d --- /dev/null +++ b/src/ClassCodeBundle/Resources/views/simpleResult.json.twig @@ -0,0 +1 @@ +{{ result|json_encode()|raw }}