public function build_view(HTTPRequestCustom $request)
    {
        $authorized_categories = CalendarService::get_authorized_categories(Category::ROOT_CATEGORY);
        $condition = 'WHERE approved = 0
		AND parent_id = 0
		AND id_category IN :authorized_categories
		' . (!CalendarAuthorizationsService::check_authorizations()->moderation() ? ' AND event_content.author_id = :user_id' : '');
        $parameters = array('authorized_categories' => $authorized_categories, 'user_id' => AppContext::get_current_user()->get_id());
        $page = AppContext::get_request()->get_getint('page', 1);
        $pagination = $this->get_pagination($condition, $parameters, $page);
        $result = PersistenceContext::get_querier()->select('SELECT *
		FROM ' . CalendarSetup::$calendar_events_table . ' event
		LEFT JOIN ' . CalendarSetup::$calendar_events_content_table . ' event_content ON event_content.id = event.content_id
		LEFT JOIN ' . DB_TABLE_MEMBER . ' member ON member.user_id = event_content.author_id
		LEFT JOIN ' . DB_TABLE_COMMENTS_TOPIC . ' com ON com.id_in_module = event.id_event AND com.module_id = \'calendar\'
		' . $condition . '
		ORDER BY start_date DESC
		LIMIT :number_items_per_page OFFSET :display_from', array_merge($parameters, array('number_items_per_page' => $pagination->get_number_items_per_page(), 'display_from' => $pagination->get_display_from())));
        $this->events_view->put_all(array('C_PAGINATION' => $pagination->has_several_pages(), 'C_EVENTS' => $result->get_rows_count() > 0, 'C_PENDING_PAGE' => true, 'PAGINATION' => $pagination->display()));
        while ($row = $result->fetch()) {
            $event = new CalendarEvent();
            $event->set_properties($row);
            $this->events_view->assign_block_vars('event', $event->get_array_tpl_vars());
        }
        $result->dispose();
        $this->tpl->put_all(array('EVENTS' => $this->events_view, 'C_PENDING_PAGE' => true));
        return $this->tpl;
    }
 public function get_search_request($args)
 {
     $authorized_categories = CalendarService::get_authorized_categories(Category::ROOT_CATEGORY);
     $weight = isset($args['weight']) && is_numeric($args['weight']) ? $args['weight'] : 1;
     return "SELECT " . $args['id_search'] . " AS id_search,\n\t\t\tid_event AS id_content,\n\t\t\ttitle,\n\t\t\t( 2 * FT_SEARCH_RELEVANCE(title, '" . $args['search'] . "') + FT_SEARCH_RELEVANCE(contents, '" . $args['search'] . "') ) / 3 * " . $weight . " AS relevance,\n\t\t\tCONCAT('" . PATH_TO_ROOT . "/calendar/index.php?url=/', id_category, '-', IF(id_category != 0, cat.rewrited_name, 'root'), '/', id_event, '-', event_content.rewrited_title) AS link\n\t\t\tFROM " . CalendarSetup::$calendar_events_table . " event\n\t\t\tLEFT JOIN " . CalendarSetup::$calendar_events_content_table . " event_content ON event_content.id = event.content_id\n\t\t\tLEFT JOIN " . CalendarSetup::$calendar_cats_table . " cat ON id_category = cat.id\n\t\t\tWHERE ( FT_SEARCH(title, '" . $args['search'] . "') OR FT_SEARCH(contents, '" . $args['search'] . "') )\n\t\t\tAND event_content.approved = 1\n\t\t\tAND id_category IN(" . implode(", ", $authorized_categories) . ")\n\t\t\tORDER BY relevance DESC\n\t\t\tLIMIT 100 OFFSET 0";
 }
 /**
  * @desc Return all the events of the requested month.
  * @param int $month Month of the request
  * @param int $year Year of the request
  * @param int $month_days Number of days in the requested month
  */
 public static function get_all_current_month_events($month, $year, $month_days, $id_category = Category::ROOT_CATEGORY)
 {
     $authorized_categories = CalendarService::get_authorized_categories($id_category);
     return self::$db_querier->select((CalendarConfig::load()->is_members_birthday_enabled() ? "\r\n\t\t(SELECT member_extended_fields.user_born AS start_date, member_extended_fields.user_born AS end_date, display_name AS title, 'BIRTHDAY' AS type, 0 AS id_category, '" . CalendarEventContent::YEARLY . "' AS repeat_type, 100 AS repeat_number\r\n\t\tFROM " . DB_TABLE_MEMBER . " member\r\n\t\tLEFT JOIN " . DB_TABLE_MEMBER_EXTENDED_FIELDS . " member_extended_fields ON member_extended_fields.user_id = member.user_id\r\n\t\tWHERE member_extended_fields.user_born <> '' AND MONTH(FROM_UNIXTIME(member_extended_fields.user_born)) = :month AND :year > YEAR(FROM_UNIXTIME(member_extended_fields.user_born)))\r\n\t\tUNION\r\n\t\t" : "") . "(SELECT start_date, end_date, title, 'EVENT' AS type, id_category, repeat_type, repeat_number\r\n\t\tFROM " . CalendarSetup::$calendar_events_table . " event\r\n\t\tLEFT JOIN " . CalendarSetup::$calendar_events_content_table . " event_content ON event_content.id = event.content_id\r\n\t\tWHERE approved = 1\r\n\t\tAND ((start_date BETWEEN :first_month_day AND :last_month_day) OR (end_date BETWEEN :first_month_day AND :last_month_day) OR (:first_month_day BETWEEN start_date AND end_date)) \r\n\t\tAND id_category IN :authorized_categories)\r\n\t\tORDER BY start_date ASC", array('month' => $month, 'year' => $year, 'first_month_day' => mktime(0, 0, 0, $month, 1, $year), 'last_month_day' => mktime(23, 59, 59, $month, $month_days, $year), 'authorized_categories' => $authorized_categories));
 }