/** * @param Application $app * @param Request $req * * @return string */ public function indexAction(Application $app, Request $req) { $errors = array(); $eventsRec = array(); $events = array(); $eventsInt = array(); /** @var $token TokenInterface */ $token = $app['security.token_storage']->getToken(); /** @var $user User */ $user = $token->getUser(); $id = $user->getId(); $page = $req->get('page', 0); if (!is_numeric($page) || $page < 0) { $page = 0; } if ($app['odbc_aster'] !== false) { // recommended events $userRecProvider = new UserRecommendationProvider($app['odbc_aster']); $eventsRec = $userRecProvider->getUserRecommendations($id, self::NUM_EVENTS_TO_RETRIEVE, $page * self::NUM_EVENTS_TO_RETRIEVE); if ($eventsRec === false) { $errors[] = "Error while retrieving recommended events for the user! (Bad Query?)"; } // general events $eventsProvider = new EventProvider($app['odbc_aster']); $events = $eventsProvider->getEventsWithInterests($id, self::NUM_EVENTS_TO_RETRIEVE, $page * self::NUM_EVENTS_TO_RETRIEVE); if ($events === false) { $errors[] = "Error while retrieving events! (Bad Query?)"; } // interested events $userIntProvider = new UserInterestProvider($app['odbc_aster']); $eventsInt = $userIntProvider->getUserInterests($id, self::NUM_EVENTS_TO_RETRIEVE, $page * self::NUM_EVENTS_TO_RETRIEVE); if ($eventsInt === false) { $errors[] = "Error while retrieving interested events for the user! (Bad Query?)"; } } else { $errors[] = "Could not connect to the DB!"; } return $app['twig']->render('app.twig', array('user' => $user, 'rec_events' => $eventsRec, 'events' => $events, 'int_events' => $eventsInt, 'p' => $page + 1, 'error' => $errors, 'page' => 'discover')); }
/** * Loads all recommended events for a given user. It is limited to a number of results * otherwise the web server will fail. * * @param $user_id int * @param $num int number of elements to retrieve * @param $offset int offset * * @return array of Event|null */ public function getUserRecommendations($user_id, $num = 20, $offset = 0) { /* $events = $this->db->getByEqCondsAndLimitedAndOrdered( 'events.*', self::ENTITY_NAME . " RIGHT JOIN events ON (".self::ENTITY_NAME.".event_id = events.event_id) ", array(self::ENTITY_NAME . '.user_id' => $user_id), $num, $offset, 'events.event_id' ); */ $query = "\n SELECT e.*, ui.interested, ui.not_interested\n FROM " . self::ENTITY_NAME . " ur JOIN (events e LEFT JOIN user_interest ui ON (e.event_id = ui.event_id)) ON (ur.event_id = e.event_id)\n WHERE ur.user_id = '{$user_id}'\n AND ui.user_id = '{$user_id}' OR ui.user_id IS NULL\n ORDER BY e.event_id\n LIMIT {$num} OFFSET {$offset};"; $events = $this->db->executeQueryAndFetch($query); if ($events === false) { return false; } // Retrieve all events as Event Object $tmp = new \ReflectionClass('App\\Model\\Event'); foreach ($events as $key => $event) { // calculate interests as single value $int = -1; $not_int = -1; if (array_key_exists("interested", $event)) { $int = $event['interested']; } if (array_key_exists("not_interested", $event)) { $not_int = $event['not_interested']; } if ($int == -1 && $not_int == -1) { $intval = -1; } else { if ($int == 0) { if ($not_int == 0) { $intval = 1; } else { $intval = 0; } } else { $intval = 2; } } // create new Event obj try { $events[$key] = EventProvider::toArrayForCvalues($events[$key]); $events[$key][0] = $tmp->newInstanceArgs($events[$key]); $events[$key][1] = $intval; } catch (InvalidArgumentException $e) { $events[$key] = null; } } return $events; }
/** * Loads all recommended events for a given user. It is limited to a number of results * otherwise the web server will fail. * * @param $user_id int * @param $num int number of elements to retrieve * @param $offset int offset * * @return array of Event|null */ public function getUserInterests($user_id, $num = 20, $offset = 0) { $events = $this->db->getByEqCondsAndLimitedAndOrdered('events.*', self::ENTITY_NAME . " RIGHT OUTER JOIN events ON (" . self::ENTITY_NAME . ".event_id = events.event_id) ", array(self::ENTITY_NAME . '.user_id' => $user_id), $num, $offset, 'events.event_id'); if ($events === false) { return false; } // Retrieve all events as Event Object $tmp = new \ReflectionClass('App\\Model\\Event'); foreach ($events as $key => $event) { try { $events[$key] = EventProvider::toArrayForCvalues($events[$key]); $events[$key] = $tmp->newInstanceArgs($events[$key]); } catch (InvalidArgumentException $e) { $events[$key] = null; } } return $events; }
/** * @param Request $req * @param Application $app * * @return string */ public function searchAction(Request $req, Application $app) { $errors = array(); $events = array(); $message = ''; $keywords = $req->get('keywords', ''); if ($keywords !== '') { /** @var $token TokenInterface */ $token = $app['security.token_storage']->getToken(); /** @var $user User */ $user = $token->getUser(); if ($app['odbc_aster'] !== false) { // user events $eventsProvider = new EventProvider($app['odbc_aster']); $events = $eventsProvider->getEventsByKeywordsWithInterest($user->getId(), $keywords); if ($events === false) { $errors[] = "Error while retrieving the events of the user! (Bad Query?)"; } } else { $errors[] = "Could not connect to the DB!"; } } return $app['twig']->render('event_search.twig', array('events' => $events, 'message' => $message, 'errors' => $errors, 'page' => 'event_search')); }