private function build_view(HTTPRequestCustom $request) { $db_querier = PersistenceContext::get_querier(); $date_lang = LangLoader::get('date-common'); $events_list = $participants = array(); $config = CalendarConfig::load(); $year = $this->year ? $this->year : $request->get_int('calendar_ajax_year', date('Y')); $month = $this->month ? $this->month : $request->get_int('calendar_ajax_month', date('n')); $day = $this->day ? $this->day : $request->get_int('calendar_ajax_day', 1); $array_l_month = array($date_lang['january'], $date_lang['february'], $date_lang['march'], $date_lang['april'], $date_lang['may'], $date_lang['june'], $date_lang['july'], $date_lang['august'], $date_lang['september'], $date_lang['october'], $date_lang['november'], $date_lang['december']); $result = $db_querier->select("SELECT *\n\t\tFROM " . CalendarSetup::$calendar_events_table . " event\n\t\tLEFT JOIN " . CalendarSetup::$calendar_events_content_table . " event_content ON event_content.id = event.content_id\n\t\tLEFT JOIN " . DB_TABLE_MEMBER . " member ON member.user_id = event_content.author_id\n\t\tLEFT JOIN " . DB_TABLE_COMMENTS_TOPIC . " com ON com.id_in_module = event.id_event AND com.module_id = 'calendar'\n\t\tWHERE approved = 1\n\t\tAND ((start_date BETWEEN :first_day_hour AND :last_day_hour) OR (end_date BETWEEN :first_day_hour AND :last_day_hour) OR (:first_day_hour BETWEEN start_date AND end_date))\n\t\tORDER BY start_date ASC", array('first_day_hour' => mktime(0, 0, 0, $month, $day, $year), 'last_day_hour' => mktime(23, 59, 59, $month, $day, $year))); while ($row = $result->fetch()) { $event = new CalendarEvent(); $event->set_properties($row); $events_list[$event->get_id()] = $event; } $result->dispose(); $events_number = $result->get_rows_count(); $this->view->put_all(array('C_COMMENTS_ENABLED' => $config->are_comments_enabled(), 'C_EVENTS' => $events_number > 0, 'DATE' => $day . ' ' . $array_l_month[$month - 1] . ' ' . $year, 'L_EVENTS_NUMBER' => $events_number > 1 ? StringVars::replace_vars($this->lang['calendar.labels.events_number'], array('events_number' => $events_number)) : $this->lang['calendar.labels.one_event'])); if (!empty($events_list)) { $result = $db_querier->select('SELECT event_id, member.user_id, display_name, level, groups FROM ' . CalendarSetup::$calendar_users_relation_table . ' participants LEFT JOIN ' . DB_TABLE_MEMBER . ' member ON member.user_id = participants.user_id WHERE event_id IN :events_list', array('events_list' => array_keys($events_list))); while ($row = $result->fetch()) { if (!empty($row['display_name'])) { $participant = new CalendarEventParticipant(); $participant->set_properties($row); $participants[$row['event_id']][$participant->get_user_id()] = $participant; } } $result->dispose(); foreach ($events_list as $event) { if (isset($participants[$event->get_id()])) { $event->set_participants($participants[$event->get_id()]); } $this->view->assign_block_vars('event', $event->get_array_tpl_vars()); $participants_number = count($event->get_participants()); $i = 0; foreach ($event->get_participants() as $participant) { $i++; $this->view->assign_block_vars('event.participant', array_merge($participant->get_array_tpl_vars(), array('C_LAST_PARTICIPANT' => $i == $participants_number))); } } } }
private function build_view() { $event = $this->get_event(); $category = $event->get_content()->get_category(); $this->tpl->put_all(array_merge($event->get_array_tpl_vars(), array('NOT_VISIBLE_MESSAGE' => MessageHelper::display(LangLoader::get_message('element.not_visible', 'status-messages-common'), MessageHelper::WARNING)))); $participants_number = count($event->get_participants()); $i = 0; foreach ($event->get_participants() as $participant) { $i++; $this->tpl->assign_block_vars('participant', array_merge($participant->get_array_tpl_vars(), array('C_LAST_PARTICIPANT' => $i == $participants_number))); } if (CalendarConfig::load()->are_comments_enabled()) { $comments_topic = new CalendarCommentsTopic($event); $comments_topic->set_id_in_module($event->get_id()); $comments_topic->set_url(CalendarUrlBuilder::display_event($category->get_id(), $category->get_rewrited_name(), $event->get_id(), $event->get_content()->get_rewrited_title())); $this->tpl->put_all(array('C_COMMENTS_ENABLED' => true, 'COMMENTS' => $comments_topic->display())); } }
public function get_root_category() { $root = new RootCategory(); $root->set_authorizations(CalendarConfig::load()->get_authorizations()); return $root; }
private function init() { $this->lang = LangLoader::get('common', 'calendar'); $this->config = CalendarConfig::load(); }
private function get_pagination($condition, $parameters, $page) { $row = PersistenceContext::get_querier()->select_single_row_query('SELECT COUNT(*) AS events_number FROM ' . CalendarSetup::$calendar_events_table . ' event LEFT JOIN ' . CalendarSetup::$calendar_events_content_table . ' event_content ON event_content.id = event.content_id ' . $condition, $parameters); $pagination = new ModulePagination($page, $row['events_number'], (int) CalendarConfig::load()->get_items_number_per_page()); $pagination->set_url(CalendarUrlBuilder::display_pending_events('%d')); if ($pagination->current_page_is_empty() && $page > 1) { $error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_controller); } return $pagination; }
/** * @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)); }
private function build_view(HTTPRequestCustom $request) { $config = CalendarConfig::load(); $categories = CalendarService::get_categories_manager()->get_categories_cache()->get_categories(); $year = $this->year ? $this->year : min($request->get_int('calendar_ajax_year', date('Y')), 2037); $month = $this->month ? $this->month : min($request->get_int('calendar_ajax_month', date('n')), 12); $bissextile = date("L", mktime(0, 0, 0, 1, 1, $year)) == 1 ? 29 : 28; $array_month = array(31, $bissextile, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); $array_l_month = array($this->lang['january'], $this->lang['february'], $this->lang['march'], $this->lang['april'], $this->lang['may'], $this->lang['june'], $this->lang['july'], $this->lang['august'], $this->lang['september'], $this->lang['october'], $this->lang['november'], $this->lang['december']); $month_days = $array_month[$month - 1]; $previous_month = $month == 1 ? 12 : $month - 1; $previous_year = $month == 1 ? $year - 1 : $year; $next_month = $month == 12 ? 1 : $month + 1; $next_year = $month == 12 ? $year + 1 : $year; //Months for ($i = 1; $i <= 12; $i++) { $this->view->assign_block_vars('months', array('VALUE' => $i, 'NAME' => $array_l_month[$i - 1], 'SELECTED' => $month == $i)); } //Years for ($i = 1970; $i <= 2037; $i++) { $this->view->assign_block_vars('years', array('VALUE' => $i, 'NAME' => $i, 'SELECTED' => $year == $i)); } //Retrieve all the events of the selected month $events = $month == date('n') && $year == date('Y') ? CalendarCurrentMonthEventsCache::load()->get_events() : CalendarService::get_all_current_month_events($month, $year, $month_days); $events_legends_list = array(); foreach ($events as $event) { $start_date = new Date($event['start_date'], Timezone::SERVER_TIMEZONE); $end_date = new Date($event['end_date'], Timezone::SERVER_TIMEZONE); if (($end_date->get_month() > $start_date->get_month() || $end_date->get_year() > $start_date->get_year()) && $month == $start_date->get_month()) { $first_event_day = $start_date->get_day(); $last_event_day = $array_month[$month - 1]; } else { if (($end_date->get_month() > $start_date->get_month() || $end_date->get_year() > $start_date->get_year()) && $month == $end_date->get_month()) { $first_event_day = 1; $last_event_day = $end_date->get_day(); } else { if (($end_date->get_month() > $start_date->get_month() || $end_date->get_year() > $start_date->get_year()) && $month > $start_date->get_month() && $month < $end_date->get_month()) { $first_event_day = 1; $last_event_day = $array_month[$month - 1]; } else { $first_event_day = $start_date->get_day(); $last_event_day = $end_date->get_day(); } } } for ($j = $first_event_day; $j <= $last_event_day; $j++) { if ($event['type'] == 'EVENT' || $event['type'] == 'BIRTHDAY') { $title = isset($array_events[$j]['title']) ? $array_events[$j]['title'] : ''; $array_events[$j] = array('title' => $title . (!empty($title) ? ' ' : '') . ($event['type'] != 'BIRTHDAY' ? $j == $start_date->get_day() && $month == $start_date->get_month() && $year == $start_date->get_year() ? $start_date->get_hours() . 'h' . $start_date->get_minutes() . ' : ' : '' : LangLoader::get_message('calendar.labels.birthday_title', 'common', 'calendar') . ' ') . $event['title'], 'type' => $event['type'], 'color' => $event['type'] == 'BIRTHDAY' ? $config->get_birthday_color() : ($event['id_category'] != Category::ROOT_CATEGORY && $categories[$event['id_category']]->get_color() ? $categories[$event['id_category']]->get_color() : $config->get_event_color()), 'id_category' => $event['id_category']); if ($event['type'] == 'BIRTHDAY') { $events_legends_list[$j] = array('name' => LangLoader::get_message('calendar.labels.birthday', 'common', 'calendar'), 'color' => $config->get_birthday_color()); } else { if ($event['type'] == 'EVENT' && $event['id_category'] == Category::ROOT_CATEGORY) { $events_legends_list[$j] = array('name' => LangLoader::get_message('calendar.titles.event', 'common', 'calendar'), 'color' => $config->get_event_color()); } else { if (!isset($events_legends_list[$event['id_category']])) { $events_legends_list[$j] = array('name' => $categories[$event['id_category']]->get_name(), 'color' => $categories[$event['id_category']]->get_color()); } } } } } } $this->view->put_all(array('C_MINI_MODULE' => $this->is_mini_calendar(), 'C_DISPLAY_LEGEND' => !empty($events_legends_list) && !$this->is_mini_calendar(), 'DATE' => $array_l_month[$month - 1] . ' ' . $year, 'MINI_MODULE' => (int) $this->is_mini_calendar(), 'PREVIOUS_MONTH_TITLE' => $month == 1 ? $array_l_month[11] . ' ' . ($year - 1) : $array_l_month[$month - 2] . ' ' . $year, 'PREVIOUS_YEAR' => $previous_year, 'PREVIOUS_MONTH' => $previous_month, 'NEXT_MONTH_TITLE' => $month == 12 ? $array_l_month[0] . ' ' . ($year + 1) : $array_l_month[$month] . ' ' . $year, 'NEXT_YEAR' => $next_year, 'NEXT_MONTH' => $next_month, 'LEGEND' => self::build_legend($events_legends_list), 'U_AJAX_CALENDAR' => CalendarUrlBuilder::ajax_month_calendar()->rel(), 'U_AJAX_EVENTS' => CalendarUrlBuilder::ajax_month_events()->rel())); //First day of the month $first_day = date('w', @mktime(1, 0, 0, $month, 1, $year)); if ($first_day == 0) { $first_day = 7; } //Calendar generation $day = 1; $last_day = $month_days + $first_day; for ($i = 1; $i <= 56; $i++) { $birthday_day = $color = false; if ($i % 8 == 1 && $i < $last_day) { $content = date('W', mktime(0, 0, 0, $month, $day, $year)); $class = 'calendar-week'; $last_day++; } else { if ($i >= $first_day + 1 && $i < $last_day) { if ($day == date("j") && $month == date("m") && $year == date("Y")) { $class = 'calendar-today'; } else { if (!empty($array_events[$day])) { $birthday_day = $array_events[$day]['type'] == 'BIRTHDAY'; $color = $array_events[$day]['color']; $class = ''; } else { if ($i % 8 == 7 || $i % 8 == 0) { $class = 'calendar-weekend'; } else { $class = 'calendar-other'; } } } $content = $day; $day++; } else { if (($i % 8 == 7 || $i % 8 == 0) && $i > $first_day && $day <= $month_days) { $class = 'calendar-weekend'; } else { $class = 'calendar-none'; } } } if ($day > $month_days && $i % 8 == 0) { $i = 56; } $today = $day - 1; $this->view->assign_block_vars('day', array('C_MONTH_DAY' => $i % 8 != 1 && $class != 'calendar-none', 'C_COLOR' => $color || $birthday_day, 'C_WEEK_LABEL' => $i % 8 == 1, 'DAY' => $content, 'TITLE' => !empty($array_events[$today]) ? $array_events[$today]['title'] : '', 'COLOR' => $color, 'CLASS' => $class, 'CHANGE_LINE' => $i % 8 == 0 && $i != 56, 'U_DAY_EVENTS' => CalendarUrlBuilder::home($year, $month, $today, true)->rel())); } }