if ($integer) { $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["dstamp"] = $integer; } $_SERVER["QUERY_STRING"] = replace_query(array("dstamp" => false)); } else { if (!isset($_SESSION[APPLICATION_IDENTIFIER]["tmp"]["dstamp"])) { $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["dstamp"] = time(); } } echo "<form action=\"\" method=\"get\">\n"; echo "<input type=\"hidden\" id=\"dstamp\" name=\"dstamp\" value=\"" . html_encode($_SESSION[APPLICATION_IDENTIFIER]["tmp"]["dstamp"]) . "\" />\n"; echo "</form>\n"; /** * This fetches the unix timestamps from the first and last second of the day, week, month, year, etc. */ $DISPLAY_DURATION = fetch_timestamps($_SESSION[APPLICATION_IDENTIFIER][$MODULE]["dtype"], $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["dstamp"]); ?> <h2><?php echo html_encode($rotation["title"]); ?> </h2> <table style="width: 100%" cellspacing="1" cellpadding="2" border="0" summary="Select Block"> <colgroup> <col style="width: 3%" /> <col style="width: 25%" /> <col style="width: 72%" /> </colgroup> <tbody> <tr> <td> </td> <td style="width: 53%; vertical-align: top; text-align: left">
} if (isset($_GET["dstamp"])) { $integer = (int) trim($_GET["dstamp"]); if ($integer) { $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["dstamp"] = $integer; } $_SERVER["QUERY_STRING"] = replace_query(array("dstamp" => false)); } else { if (!isset($_SESSION[APPLICATION_IDENTIFIER]["tmp"]["dstamp"])) { $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["dstamp"] = time(); } } /** * This fetches the unix timestamps from the first and last second of the day, week, month, year, etc. */ $display_duration = fetch_timestamps($_SESSION[APPLICATION_IDENTIFIER][$MODULE]["dtype"], $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["dstamp"]); /** * Update requsted number of rows per page. * Valid: any integer really. */ if (isset($_GET["pp"]) && (int) trim($_GET["pp"])) { $integer = (int) trim($_GET["pp"]); if ($integer > 0 && $integer <= 250) { $_SESSION[APPLICATION_IDENTIFIER]["cid_" . $COMMUNITY_ID][$PAGE_URL]["pp"] = $integer; } $_SERVER["QUERY_STRING"] = replace_query(array("pp" => false)); } else { if (!isset($_SESSION[APPLICATION_IDENTIFIER]["cid_" . $COMMUNITY_ID][$PAGE_URL]["pp"])) { $_SESSION[APPLICATION_IDENTIFIER]["cid_" . $COMMUNITY_ID][$PAGE_URL]["pp"] = 5; } }
*/ if (isset($_GET["pp"]) && (int) trim($_GET["pp"])) { $integer = (int) trim($_GET["pp"]); if ($integer > 0 && $integer <= 250) { $_SESSION[APPLICATION_IDENTIFIER]["community_page"]["pp"] = $integer; } $_SERVER["QUERY_STRING"] = replace_query(array("pp" => false)); } else { if (!isset($_SESSION[APPLICATION_IDENTIFIER]["community_page"]["pp"])) { $_SESSION[APPLICATION_IDENTIFIER]["community_page"]["pp"] = DEFAULT_ROWS_PER_PAGE; } } /** * This fetches the unix timestamps from the first and last second of the day, week, month, year, etc. */ $DISPLAY_DURATION = fetch_timestamps($_SESSION[APPLICATION_IDENTIFIER]["community_page"]["dtype"], $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["dstamp"]); /** * Get the total number of results using the generated queries above and calculate the total number * of pages that are available based on the results per page preferences. */ $query = "\tSELECT COUNT(`events`.`event_id`) AS `total_rows`\n FROM `events`\n WHERE " . ($DISPLAY_DURATION ? "`events`.`event_start` BETWEEN " . $db->qstr($DISPLAY_DURATION["start"]) . " AND " . $db->qstr($DISPLAY_DURATION["end"]) . "\n AND " : "") . " `events`.`course_id` IN (" . implode(", ", $course_ids) . ")"; $result = $db->GetRow($query); if ($result) { $TOTAL_ROWS = $result["total_rows"]; if ($TOTAL_ROWS <= $_SESSION[APPLICATION_IDENTIFIER]["community_page"]["pp"]) { $TOTAL_PAGES = 1; } elseif ($TOTAL_ROWS % $_SESSION[APPLICATION_IDENTIFIER]["community_page"]["pp"] == 0) { $TOTAL_PAGES = (int) ($TOTAL_ROWS / $_SESSION[APPLICATION_IDENTIFIER]["community_page"]["pp"]); } else { $TOTAL_PAGES = (int) ($TOTAL_ROWS / $_SESSION[APPLICATION_IDENTIFIER]["community_page"]["pp"]) + 1; }
/** * Function used by public events and admin events index to generate the SQL queries based on the users * filter settings and results that can be iterated through by these views. */ function events_fetch_filtered_events($proxy_id = 0, $user_group = "", $user_role = "", $organisation_id = 0, $sort_by = "", $sort_order = "", $date_type = "", $timestamp_start = 0, $timestamp_finish = 0, $filters = array(), $pagination = true, $current_page = 1, $results_per_page = 15, $community_id = false, $respect_time_release = true) { global $db, $ENTRADA_ACL, $ENTRADA_USER, $ENTRADA_CACHE; $output = array("duration_start" => 0, "duration_end" => 0, "total_rows" => 0, "total_pages" => 0, "page_current" => 0, "page_previous" => 0, "page_next" => 0, "result_ids_map" => array(), "events" => array()); if (!($proxy_id = (int) $proxy_id)) { return false; } $user_group = clean_input($user_group); $user_role = clean_input($user_role); if (!($organisation_id = (int) $organisation_id)) { return false; } $sort_by = clean_input($sort_by); $sort_order = strtoupper($sort_order) == "ASC" ? "ASC" : "DESC"; $date_type = clean_input($date_type); if (!($timestamp_start = (int) $timestamp_start)) { return false; } $timestamp_finish = (int) $timestamp_finish; if (!is_array($filters)) { $filters = array(); } $pagination = (bool) $pagination; if (!($current_page = (int) $current_page)) { $current_page = 1; } if (!($results_per_page = (int) $results_per_page)) { $results_per_page = 15; } $filter_clerkship_events = false; if ($user_group == "student" && $ENTRADA_ACL->amIAllowed("clerkship", "read")) { $query = "\tSELECT a.*, c.*\n\t\t\t\t\tFROM `" . CLERKSHIP_DATABASE . "`.`events` AS a\n\t\t\t\t\tLEFT JOIN `" . CLERKSHIP_DATABASE . "`.`event_contacts` AS b\n\t\t\t\t\tON b.`event_id` = a.`event_id`\n\t\t\t\t\tLEFT JOIN `" . CLERKSHIP_DATABASE . "`.`global_lu_rotations` AS c\n\t\t\t\t\tON c.`rotation_id` = a.`rotation_id`\n\t\t\t\t\tWHERE (a.`event_status` = 'published' OR a.`event_status` = 'approval')\n\t\t\t\t\tAND b.`econtact_type` = 'student'\n\t\t\t\t\tAND b.`etype_id` = " . $db->qstr($proxy_id) . "\n\t\t\t\t\tORDER BY a.`event_start` ASC"; $clerkship_events = $db->GetAll($query); if ($clerkship_events) { $course_ids_string = ""; $course_ids = array(); $clerkship_start = $clerkship_events[0]["event_start"]; $clerkship_finish = $clerkship_events[0]["event_finish"]; $time_periods = array(); foreach ($clerkship_events as $clerkship_event) { if ($clerkship_event["event_start"] < $clerkship_start) { $clerkship_start = $clerkship_event["event_start"]; } if ($clerkship_event["event_finish"] > $clerkship_finish) { $clerkship_finish = $clerkship_event["event_finish"]; } $filter_clerkship_events = true; if ($clerkship_event["course_id"] && $clerkship_event["rotation_id"] != MAX_ROTATION) { if (array_search($clerkship_event["course_id"], $course_ids) === false) { if ($course_ids_string) { $course_ids_string .= ", " . $db->qstr($clerkship_event["course_id"]); } else { $course_ids_string = $db->qstr($clerkship_event["course_id"]); } $course_ids[] = $clerkship_event["course_id"]; } if (count($time_periods)) { $time_periods[] = "OR (`courses`.`course_id` = " . $db->qstr($clerkship_event["course_id"]) . " AND ((`events`.`event_start` >= " . $db->qstr($clerkship_event["event_start"]) . " AND `events`.`event_start` <= " . $db->qstr($clerkship_event["event_finish"]) . ") OR (`events`.`event_finish` <= " . $db->qstr($clerkship_event["event_finish"]) . " AND `events`.`event_finish` >= " . $db->qstr($clerkship_event["event_start"]) . ") OR (`events`.`event_start` <= " . $db->qstr($clerkship_event["event_start"]) . " AND `events`.`event_finish` >= " . $db->qstr($clerkship_event["event_start"]) . ")))"; } else { $time_periods[] = "(`courses`.`course_id` = " . $db->qstr($clerkship_event["course_id"]) . " AND ((`events`.`event_start` >= " . $db->qstr($clerkship_event["event_start"]) . " AND `events`.`event_start` <= " . $db->qstr($clerkship_event["event_finish"]) . ") OR (`events`.`event_finish` <= " . $db->qstr($clerkship_event["event_finish"]) . " AND `events`.`event_finish` >= " . $db->qstr($clerkship_event["event_start"]) . ") OR (`events`.`event_start` <= " . $db->qstr($clerkship_event["event_start"]) . " AND `events`.`event_finish` >= " . $db->qstr($clerkship_event["event_start"]) . ")))"; } } } $time_periods[] = "OR (`events`.`event_start` < " . $db->qstr($clerkship_start) . ")"; $time_periods[] = "OR (`events`.`event_finish` > " . $db->qstr($clerkship_finish) . ")"; } } $sort_by = events_fetch_sorting_query($sort_by, $sort_order); /** * This fetches the unix timestamps from the first and last second of the day, week, month, year, etc. */ $display_duration = fetch_timestamps($date_type, $timestamp_start, $timestamp_finish); $output["duration_start"] = $display_duration["start"]; $output["duration_end"] = $display_duration["end"]; $query_events = ""; $query_events_select = "SELECT '" . (int) $respect_time_release . "' AS `respect_time_release`,\n `events`.`event_id`,\n `events`.`course_id`,\n `events`.`parent_id`,\n `events`.`recurring_id`,\n `events`.`event_title`,\n `events`.`event_description`,\n `events`.`event_duration`,\n `events`.`event_message`,\n `events`.`event_location`,\n `events`.`event_start`,\n `events`.`event_finish`,\n `events`.`release_date`,\n `events`.`release_until`,\n `events`.`updated_date`,\n\t\t\t\t\t\t\t`events`.`objectives_release_date`,\n `event_audience`.`audience_type`,\n `courses`.`organisation_id`,\n `courses`.`course_code`,\n `courses`.`course_name`,\n `courses`.`permission`,\n `curriculum_lu_types`.`curriculum_type_id`,\n `curriculum_lu_types`.`curriculum_type_name` AS `event_phase`,\n `curriculum_lu_types`.`curriculum_type_name` AS `event_term`,\n CONCAT_WS(', ', `" . AUTH_DATABASE . "`.`user_data`.`lastname`, `" . AUTH_DATABASE . "`.`user_data`.`firstname`) AS `fullname`\n FROM `events`"; $query_events_count = "SELECT COUNT(DISTINCT `events`.`event_id`) AS `event_count` FROM `events`"; /** * If there are filters set by the user, build the SQL to reflect the filters. */ if (is_array($filters) && !empty($filters)) { $build_query = array(); $where_teacher = array(); $where_student_course_ids = array(); // Students' enrolled in courses only $where_student_cohorts = array(); // Students' cohort events $where_student_proxy_ids = array(); // Students' indivdual events $where_student_cgroup_ids = array(); // Students' course small groups events $where_cohort = array(); $where_course = array(); $where_term = array(); $where_eventtype = array(); $where_clinical_presentation = array(); $where_curriculum_objective = array(); $where_topic = array(); $where_department = array(); $join_event_contacts = array(); $contact_sql = ""; $objective_sql = ""; $topic_sql = ""; $query_events .= "\tLEFT JOIN `event_contacts` AS `primary_teacher`\n\t\t\t\t\t\t\tON `primary_teacher`.`event_id` = `events`.`event_id`\n\t\t\t\t\t\t\tAND `primary_teacher`.`contact_order` = '0'\n\t\t\t\t\t\t\tLEFT JOIN `event_eventtypes`\n\t\t\t\t\t\t\tON `event_eventtypes`.`event_id` = `events`.`event_id`\n\t\t\t\t\t\t\tLEFT JOIN `event_audience`\n\t\t\t\t\t\t\tON `event_audience`.`event_id` = `events`.`event_id`\n\t\t\t\t\t\t\t%CONTACT_JOIN%\n\t\t\t\t\t\t\tLEFT JOIN `" . AUTH_DATABASE . "`.`user_data`\n\t\t\t\t\t\t\tON `" . AUTH_DATABASE . "`.`user_data`.`id` = `primary_teacher`.`proxy_id`\n\t\t\t\t\t\t\tLEFT JOIN `courses`\n\t\t\t\t\t\t\tON `courses`.`course_id` = `events`.`course_id`\n\t\t\t\t\t\t\tLEFT JOIN `curriculum_lu_types`\n\t\t\t\t\t\t\tON `curriculum_lu_types`.`curriculum_type_id` = `courses`.`curriculum_type_id`\n\t\t\t\t\t\t\t%OBJECTIVE_JOIN%\n\t\t\t\t\t\t\t%TOPIC_JOIN%\n\t\t\t\t\t\t\tWHERE `courses`.`organisation_id` = " . $db->qstr($organisation_id) . "\n\t\t\t\t\t\t\t" . ($filter_clerkship_events && $course_ids_string ? "AND (`courses`.`course_id` NOT IN (" . $course_ids_string . ")\n OR (" . implode("\n", $time_periods) . "))" : "") . "\n\t\t\t\t\t\t\t" . ($display_duration ? " AND `events`.`event_start` BETWEEN " . $db->qstr($display_duration["start"]) . " AND " . $db->qstr($display_duration["end"]) : ""); if (!is_array($filters) || empty($filters)) { // Apply default filters. } if (!empty($filters)) { foreach ($filters as $filter_type => $filter_contents) { if (is_array($filter_contents) && !empty($filter_contents)) { foreach ($filter_contents as $filter_key => $filter_value) { switch ($filter_type) { case "teacher": $where_teacher[] = (int) $filter_value; break; case "student": if ($user_group != "student" || $filter_value == $proxy_id) { // Students' enrolled in courses only $course_ids = groups_get_explicitly_enrolled_course_ids((int) $filter_value, false, $organisation_id); if ($course_ids) { $where_student_course_ids = $course_ids; } // Students' cohort events $cohorts = groups_get_cohorts((int) $filter_value); if ($cohorts) { foreach ($cohorts as $cohort) { $where_student_cohorts[] = $cohort["group_id"]; } } // Students' indivdual events $where_student_proxy_ids[] = (int) $filter_value; // Students' course small groups events $cgroup_ids = course_fetch_enrolled_course_groups((int) $filter_value); if ($cgroup_ids) { $where_student_cgroup_ids = $cgroup_ids; } } break; case "group": $where_cohort[] = (int) $filter_value; break; case "course": $where_course[] = (int) $filter_value; break; case "term": $where_term[] = (int) $filter_value; break; case "eventtype": $where_eventtype[] = (int) $filter_value; break; case "cp": $where_clinical_presentation[] = (int) $filter_value; break; case "co": $where_curriculum_objective[] = (int) $filter_value; break; case "topic": $where_topic[] = (int) $filter_value; break; case "department": $where_department[] = (int) $filter_value; break; default: continue; break; } } } } } if ($where_teacher) { $build_query[] = "(`primary_teacher`.`proxy_id` IN (" . implode(", ", $where_teacher) . ") OR `event_contacts`.`proxy_id` IN (" . implode(", ", $where_teacher) . "))"; } if ($where_student_course_ids || $where_student_cohorts || $where_student_proxy_ids || $where_student_cgroup_ids) { $where_student = array(); if ($where_student_course_ids) { $where_student_course_ids = array_unique($where_student_course_ids); $where_student[] = "(`event_audience`.`audience_type` = 'course_id' AND `event_audience`.`audience_value` IN (" . implode(", ", $where_student_course_ids) . "))"; } if ($where_student_cohorts) { $where_student_cohorts = array_unique($where_student_cohorts); $where_student[] = "(`event_audience`.`audience_type` = 'cohort' AND `event_audience`.`audience_value` IN (" . implode(", ", $where_student_cohorts) . "))"; } if ($where_student_proxy_ids) { $where_student_proxy_ids = array_unique($where_student_proxy_ids); $where_student[] = "(`event_audience`.`audience_type` = 'proxy_id' AND `event_audience`.`audience_value` IN (" . implode(", ", $where_student_proxy_ids) . "))"; } if ($where_student_cgroup_ids) { $where_student_cgroup_ids = array_unique($where_student_cgroup_ids); $where_student[] = "(`event_audience`.`audience_type` = 'group_id' AND `event_audience`.`audience_value` IN (" . implode(", ", $where_student_cgroup_ids) . "))"; } $build_query[] = "(" . implode(" OR ", $where_student) . ")"; } if ($where_cohort) { $build_query[] = "(`event_audience`.`audience_type` = 'cohort' AND `event_audience`.`audience_value` IN (" . implode(", ", $where_cohort) . "))"; } if ($where_course) { $build_query[] = "(`events`.`course_id` IN (" . implode(", ", $where_course) . "))"; } if ($where_term) { $build_query[] = "(`curriculum_lu_types`.`curriculum_type_id` IN (" . implode(", ", $where_term) . "))"; } if ($where_eventtype) { $build_query[] = "(`event_eventtypes`.`eventtype_id` IN (" . implode(", ", $where_eventtype) . "))"; } if ($where_clinical_presentation) { $build_query[] = "(`event_objectives`.`objective_id` IN (" . implode(", ", $where_clinical_presentation) . "))"; } if ($where_curriculum_objective) { $build_query[] = "(`event_objectives`.`objective_id` IN (" . implode(", ", $where_curriculum_objective) . "))"; } if ($where_topic) { $build_query[] = "(`event_topics`.`topic_id` IN (" . implode(", ", $where_topic) . "))"; } if ($build_query) { $query_events .= " AND (" . implode(") AND (", $build_query) . ")"; } if ($where_teacher) { $contact_sql = "\tLEFT JOIN `event_contacts`\n\t\t\t\t\t\t\t\tON `event_contacts`.`event_id` = `events`.`event_id`\n\t\t\t\t\t\t\t\tAND (`event_contacts`.`proxy_id` IN (" . implode(", ", $where_teacher) . "))"; } if ($where_clinical_presentation || $where_curriculum_objective) { $objective_sql = "\tLEFT JOIN `event_objectives`\n\t\t\t\t\t\t\t\tON `event_objectives`.`event_id` = `events`.`event_id`"; } if ($where_topic) { $topic_sql = "\tLEFT JOIN `event_topics`\n\t\t\t\t\t\t\tON `event_topics`.`event_id` = `events`.`event_id`"; } if ($where_department) { $event_ids = ""; // fetch the user_id of members in the selected departments $department_members_query = "\tSELECT `a`.`id`\n\t\t\t\t\t\t\t\t\t\t\tFROM `" . AUTH_DATABASE . "`.`user_data` AS `a`\n\t\t\t\t\t\t\t\t\t\t\tJOIN `" . AUTH_DATABASE . "`.`user_departments` AS `b`\n\t\t\t\t\t\t\t\t\t\t\tON `a`.`id` = `b`.`user_id`\n\t\t\t\t\t\t\t\t\t\t\tJOIN `" . AUTH_DATABASE . "`.`departments` AS `c`\n\t\t\t\t\t\t\t\t\t\t\tON `b`.`dep_id` = `c`.`department_id`\n\t\t\t\t\t\t\t\t\t\t\tWHERE `b`.`dep_id` IN (" . implode(',', $where_department) . ")\n\t\t\t\t\t\t\t\t\t\t\tGROUP BY `a`.`id`"; $department_members = $db->GetAll($department_members_query); if ($department_members) { foreach ($department_members as $member) { $members_list[] = $member["id"]; } // fetch the event_id the members are assigned to $department_events_query = "\tSELECT `a`.`event_id`\n\t\t\t\t\t\t\t\t\t\t\t\tFROM `events` AS `a`\n\t\t\t\t\t\t\t\t\t\t\t\tJOIN `event_contacts` AS `b`\n\t\t\t\t\t\t\t\t\t\t\t\tON `a`.`event_id` = `b`.`event_id`\n\t\t\t\t\t\t\t\t\t\t\t\tWHERE `b`.`proxy_id` IN (" . implode(',', $members_list) . ")\n\t\t\t\t\t\t\t\t\t\t\t\tAND `a`.`event_start` > " . $db->qstr($display_duration["start"]) . "\n\t\t\t\t\t\t\t\t\t\t\t\tAND `a`.`event_finish` < " . $db->qstr($display_duration["end"]) . "\n\t\t\t\t\t\t\t\t\t\t\t\tGROUP BY `a`.`event_id`"; $department_events = $db->GetAll($department_events_query); if ($department_events) { foreach ($department_events as $event) { $event_list[] = $event["event_id"]; } } $event_ids = !empty($event_list) ? implode(", ", $event_list) : ''; } $query_events .= " AND `events`.`event_id` IN (" . $event_ids . ")"; } $query_events = str_replace("%CONTACT_JOIN%", $contact_sql, $query_events); $query_events = str_replace("%OBJECTIVE_JOIN%", $objective_sql, $query_events); $query_events = str_replace("%TOPIC_JOIN%", $topic_sql, $query_events); } else { $query_events .= "\tLEFT JOIN `event_contacts`\n\t\t\t\t\t\t\tON `event_contacts`.`event_id` = `events`.`event_id`\n\t\t\t\t\t\t\tAND `event_contacts`.`contact_order` = '0'\n\t\t\t\t\t\t\tLEFT JOIN `event_audience`\n\t\t\t\t\t\t\tON `event_audience`.`event_id` = `events`.`event_id`\n\t\t\t\t\t\t\tLEFT JOIN `" . AUTH_DATABASE . "`.`user_data`\n\t\t\t\t\t\t\tON `" . AUTH_DATABASE . "`.`user_data`.`id` = `event_contacts`.`proxy_id`\n\t\t\t\t\t\t\tLEFT JOIN `courses`\n\t\t\t\t\t\t\tON (`courses`.`course_id` = `events`.`course_id`)\n\t\t\t\t\t\t\tLEFT JOIN `curriculum_lu_types`\n\t\t\t\t\t\t\tON `curriculum_lu_types`.`curriculum_type_id` = `courses`.`curriculum_type_id`\n\t\t\t\t\t\t\tWHERE `courses`.`organisation_id` = " . $db->qstr($organisation_id) . "\n\t\t\t\t\t\t\t" . ($filter_clerkship_events && $course_ids_string ? "AND (`courses`.`course_id` NOT IN (" . $course_ids_string . ")\n OR (" . implode("\n", $time_periods) . "))" : "") . "\n\t\t\t\t\t\t\t" . ($display_duration ? "AND `events`.`event_start` BETWEEN " . $db->qstr($display_duration["start"]) . " AND " . $db->qstr($display_duration["end"]) : ""); } /** * This builds the counting query that is run to see whether or not * the cache gets hit. */ $query_events_count .= " " . $query_events; $query_events_select .= " " . $query_events . "GROUP BY `events`.`event_id` ORDER BY %s"; $limitless_query_events = sprintf($query_events_select, $sort_by); /** * Provide the previous query so we can have previous / next event links on the details page. */ if (session_id()) { $stored_query = false; $stored_events_count = false; if ($community_id && isset($_SESSION[APPLICATION_IDENTIFIER]["tmp"]["community_page"][$community_id]["previous_query"]["limitless_query"]) && $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["community_page"][$community_id]["previous_query"]["limitless_query"] || isset($_SESSION[APPLICATION_IDENTIFIER]["tmp"]["events"]["previous_query"]["limitless_query"]) && $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["events"]["previous_query"]["limitless_query"]) { if ($community_id == false) { if (isset($_SESSION[APPLICATION_IDENTIFIER]["tmp"]["events"]["previous_query"])) { $stored_query = $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["events"]["previous_query"]["limitless_query"]; $stored_events_count = $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["events"]["previous_query"]["total_returned_rows"]; } } else { if (isset($_SESSION[APPLICATION_IDENTIFIER]["tmp"]["community_page"][$community_id]["previous_query"])) { $stored_query = $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["community_page"][$community_id]["previous_query"]["limitless_query"]; $stored_events_count = $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["community_page"][$community_id]["previous_query"]["total_returned_rows"]; } } } $live_events_count = (int) $db->GetOne($query_events_count); $current_result_ids_map = $ENTRADA_CACHE->load(($community_id ? "community_" . $community_id . "_" : "") . "events_map_" . AUTH_APP_ID . "_" . $ENTRADA_USER->getID()); if (!$stored_query || $stored_query != $limitless_query_events || !isset($current_result_ids_map) || !$current_result_ids_map || !$stored_events_count || $live_events_count != $stored_events_count) { $all_events = $db->GetAll($limitless_query_events); $result_ids_map = array(); if ($all_events) { if ($user_group == "student") { $enroled_courses = groups_get_enrolled_course_ids($proxy_id, true, $output["duration_start"], $output["duration_end"]); } else { $enroled_courses = array(); } foreach ($all_events as $map_event) { if ($user_group != "student" || in_array($map_event["course_id"], $enroled_courses)) { if ($respect_time_release) { $event_resource = new EventResource($map_event["event_id"], $map_event["course_id"], $map_event["organisation_id"]); if ((!$map_event["release_date"] || $map_event["release_date"] <= time()) && (!$map_event["release_until"] || $map_event["release_until"] >= time()) && $ENTRADA_ACL->amIAllowed($event_resource, "read", true)) { $result_ids_map[] = $map_event["event_id"]; } } else { $result_ids_map[] = $map_event["event_id"]; } } } } $ENTRADA_CACHE->save($result_ids_map, ($community_id ? "community_" . $community_id . "_" : "") . "events_map_" . AUTH_APP_ID . "_" . $ENTRADA_USER->getID(), array("events", "community"), 10800); } else { $result_ids_map = $current_result_ids_map; } $output["total_rows"] = count($result_ids_map); if ($output["total_rows"] <= $results_per_page) { $output["total_pages"] = 1; } elseif ($output["total_rows"] % $results_per_page == 0) { $output["total_pages"] = (int) ($output["total_rows"] / $results_per_page); } else { $output["total_pages"] = (int) ($output["total_rows"] / $results_per_page) + 1; } /** * Check if pv variable is set and see if it's a valid page, other wise page 1 it is. */ if ($current_page) { $output["page_current"] = (int) trim($current_page); if ($output["page_current"] < 1 || $output["page_current"] > $output["total_pages"]) { $output["page_current"] = 1; } } else { $output["page_current"] = 1; } $output["page_previous"] = $output["page_current"] > 1 ? $output["page_current"] - 1 : false; $output["page_next"] = $output["page_current"] < $output["total_pages"] ? $output["page_current"] + 1 : false; $output["result_ids_map"] = $result_ids_map; if ($pagination) { $event_ids_string = ""; for ($i = ($output["page_current"] - 1) * $results_per_page; $i < $output["page_current"] * $results_per_page; $i++) { if ($i + 1 > count($result_ids_map)) { break; } $event_ids_string .= ($event_ids_string ? ", " : "") . $db->qstr($result_ids_map[$i]); } if (!strlen($event_ids_string)) { $event_ids_string = "0"; } $query_events = "\tSELECT `events`.`event_id`,\n\t\t\t\t\t\t\t\t`events`.`course_id`,\n\t\t\t\t\t\t\t\t`events`.`parent_id`,\n\t\t\t\t\t\t\t\t`events`.`recurring_id`,\n\t\t\t\t\t\t\t\t`events`.`event_title`,\n\t\t\t\t\t\t\t\t`events`.`event_description`,\n\t\t\t\t\t\t\t\t`events`.`event_duration`,\n\t\t\t\t\t\t\t\t`events`.`event_message`,\n\t\t\t\t\t\t\t\t`events`.`event_location`,\n\t\t\t\t\t\t\t\t`events`.`event_start`,\n\t\t\t\t\t\t\t\t`events`.`event_finish`,\n\t\t\t\t\t\t\t\t`events`.`release_date`,\n\t\t\t\t\t\t\t\t`events`.`release_until`,\n\t\t\t\t\t\t\t\t`events`.`updated_date`,\n\t\t\t\t\t\t\t\t`events`.`objectives_release_date`,\n\t\t\t\t\t\t\t\t`event_audience`.`audience_type`,\n\t\t\t\t\t\t\t\t`courses`.`organisation_id`,\n\t\t\t\t\t\t\t\t`courses`.`course_code`,\n\t\t\t\t\t\t\t\t`courses`.`course_name`,\n\t\t\t\t\t\t\t\t`courses`.`permission`,\n\t\t\t\t\t\t\t\t`curriculum_lu_types`.`curriculum_type_id`,\n\t\t\t\t\t\t\t\t`curriculum_lu_types`.`curriculum_type_name` AS `event_phase`,\n\t\t\t\t\t\t\t\t`curriculum_lu_types`.`curriculum_type_name` AS `event_term`,\n\t\t\t\t\t\t\t\tCONCAT_WS(', ', `" . AUTH_DATABASE . "`.`user_data`.`lastname`, `" . AUTH_DATABASE . "`.`user_data`.`firstname`) AS `fullname`\n\t\t\t\t\t\t\t\tFROM `events`\n\t\t\t\t\t\t\t\tLEFT JOIN `event_contacts`\n\t\t\t\t\t\t\t\tON `event_contacts`.`event_id` = `events`.`event_id`\n\t\t\t\t\t\t\t\tAND `event_contacts`.`contact_order` = '0'\n\t\t\t\t\t\t\t\tLEFT JOIN `event_audience`\n\t\t\t\t\t\t\t\tON `event_audience`.`event_id` = `events`.`event_id`\n\t\t\t\t\t\t\t\tLEFT JOIN `" . AUTH_DATABASE . "`.`user_data`\n\t\t\t\t\t\t\t\tON `" . AUTH_DATABASE . "`.`user_data`.`id` = `event_contacts`.`proxy_id`\n\t\t\t\t\t\t\t\tLEFT JOIN `courses`\n\t\t\t\t\t\t\t\tON (`courses`.`course_id` = `events`.`course_id`)\n\t\t\t\t\t\t\t\tLEFT JOIN `curriculum_lu_types`\n\t\t\t\t\t\t\t\tON `curriculum_lu_types`.`curriculum_type_id` = `courses`.`curriculum_type_id`\n\t\t\t\t\t\t\t\tWHERE `events`.`event_id` IN (" . $event_ids_string . ")\n\t\t\t\t\t\t\t\tGROUP BY `events`.`event_id`\n\t\t\t\t\t\t\t\tORDER BY %s"; $query_events = sprintf($query_events, $sort_by); $learning_events = $db->GetAll($query_events); } else { $learning_events = $db->GetAll($limitless_query_events); } if ($learning_events) { if ($respect_time_release) { $i = 0; foreach ($learning_events as $event) { if ($event["course_id"]) { $event_resource = new EventResource($event["event_id"], $event["course_id"], $event["organisation_id"]); } if ($event["release_date"] != 0 && $event["release_date"] > time() || $event["release_until"] != 0 && $event["release_until"] < time() || !$ENTRADA_ACL->amIAllowed($event_resource, "read", true)) { unset($learning_events[$i]); } $i++; } } if ($user_group == "student") { $event_ids = array(); foreach ($learning_events as $event) { $event_ids[] = $event["event_id"]; } if (!empty($event_ids)) { $query = "\tSELECT `action_value` AS `event_id`, MAX(`statistics`.`timestamp`) AS `last_visited` FROM `statistics`\n\t\t\t\t\t\t\t\tWHERE `action_value` IN (" . implode(", ", $event_ids) . ")\n\t\t\t\t\t\t\t\tAND `module` = 'events'\n\t\t\t\t\t\t\t\tAND `proxy_id` = " . $db->qstr($proxy_id) . "\n\t\t\t\t\t\t\t\tAND `action` = 'view'\n\t\t\t\t\t\t\t\tAND `action_field` = 'event_id'\n\t\t\t\t\t\t\t\tGROUP BY `proxy_id`, `module`, `action_field`, `action`, `action_value`"; $last_visited_dates = $db->GetAll($query); if (!empty($last_visited_dates)) { $dates_array = array(); foreach ($last_visited_dates as $event_last_visited) { $dates_array[$event_last_visited["event_id"]] = $event_last_visited["last_visited"]; } foreach ($learning_events as &$event) { if (array_key_exists($event["event_id"], $dates_array)) { $event["last_visited"] = $dates_array[$event["event_id"]]; } } } } } $parent_ids = array(); foreach ($learning_events as $temp_event) { if ($temp_event["parent_id"]) { $parent_ids[] = $temp_event["parent_id"]; } } if (!empty($parent_ids)) { $query = "\tSELECT * FROM `events`\n\t\t\t\t\t\t\tWHERE `event_id` IN (" . implode(", ", $parent_ids) . ")\n\t\t\t\t\t\t\tGROUP BY `event_id`"; $parent_events = $db->GetAll($query); if (!empty($parent_events)) { $parent_events_array = array(); foreach ($parent_events as $parent_event) { $parent_events_array[$parent_event["event_id"]] = $parent_event; } } } $output["events"] = $learning_events; } if ($community_id == false) { $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["dashboard"]["previous_query"]["query"] = $query_events; $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["dashboard"]["previous_query"]["limitless_query"] = $limitless_query_events; $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["dashboard"]["previous_query"]["total_returned_rows"] = $live_events_count; $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["dashboard"]["previous_query"]["total_rows"] = $output["total_rows"]; $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["events"]["previous_query"]["query"] = $query_events; $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["events"]["previous_query"]["limitless_query"] = $limitless_query_events; $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["events"]["previous_query"]["total_returned_rows"] = $live_events_count; $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["events"]["previous_query"]["total_rows"] = $output["total_rows"]; } else { $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["community_page"][$community_id]["previous_query"]["query"] = $query_events; $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["community_page"][$community_id]["previous_query"]["limitless_query"] = $limitless_query_events; $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["community_page"][$community_id]["previous_query"]["total_returned_rows"] = $live_events_count; $_SESSION[APPLICATION_IDENTIFIER]["tmp"]["community_page"][$community_id]["previous_query"]["total_rows"] = $output["total_rows"]; } } return $output; }
$sidebar_html = "<div style=\"font-size: 10px; padding: 6px 2px 6px 6px\">\n"; $sidebar_html .= limit_chars(($APARTMENT_INFO["apartment_number"] != "" ? html_encode($APARTMENT_INFO["apartment_number"]) . "-" : "") . html_encode($APARTMENT_INFO["apartment_address"]), 25, true) . "<br />"; $sidebar_html .= html_encode($APARTMENT_INFO["region_name"]) . ($APARTMENT_INFO["province"] ? ", " . html_encode($APARTMENT_INFO["province"]) : "") . "<br />"; $sidebar_html .= html_encode($APARTMENT_INFO["apartment_postcode"]) . ", " . html_encode($APARTMENT_INFO["country"]) . "<br /><br />"; if ($APARTMENT_INFO["apartment_phone"]) { $sidebar_html .= html_encode($APARTMENT_INFO["apartment_phone"]) . "<br />"; } if ($APARTMENT_INFO["apartment_email"]) { $sidebar_html .= "<a href=\"mailto:" . html_encode($APARTMENT_INFO["apartment_email"]) . "\" style=\"font-size: 10px\">" . html_encode(limit_chars($APARTMENT_INFO["apartment_email"], 30)) . "</a><br />"; } $sidebar_html .= "\t<br />\n"; $sidebar_html .= "\t<strong>Max</strong> Occupants: " . $APARTMENT_INFO["max_occupants"] . "\n"; $sidebar_html .= "\t<br /><br />\n"; $sidebar_html .= "\t<strong>Current</strong> Occupants:\n"; $sidebar_html .= "\t<ul class=\"menu\">\n"; $timestamp = fetch_timestamps("day", time()); $query = "\tSELECT a.*, CONCAT_WS(', ', c.`lastname`, c.`firstname`) AS `fullname`, c.`gender`\n\t\t\t\t\t\t\tFROM `" . CLERKSHIP_DATABASE . "`.`apartment_schedule` AS a\n\t\t\t\t\t\t\tLEFT JOIN `" . AUTH_DATABASE . "`.`user_data` AS c\n\t\t\t\t\t\t\tON c.`id` = a.`proxy_id`\n\t\t\t\t\t\t\tWHERE a.`apartment_id` = " . $db->qstr($APARTMENT_INFO["apartment_id"]) . "\n\t\t\t\t\t\t\tAND (\n\t\t\t\t\t\t\t" . $db->qstr($timestamp["start"]) . " BETWEEN a.`inhabiting_start` AND a.`inhabiting_finish` OR\n\t\t\t\t\t\t\t" . $db->qstr($timestamp["end"]) . " BETWEEN a.`inhabiting_start` AND a.`inhabiting_finish` OR\n\t\t\t\t\t\t\ta.`inhabiting_start` BETWEEN " . $db->qstr($timestamp["start"]) . " AND " . $db->qstr($timestamp["end"]) . " OR\n\t\t\t\t\t\t\ta.`inhabiting_finish` BETWEEN " . $db->qstr($timestamp["start"]) . " AND " . $db->qstr($timestamp["end"]) . "\n\t\t\t\t\t\t\t)"; $results = $db->GetAll($query); if ($results) { foreach ($results as $result) { $sidebar_html .= "<li class=\"" . $result["occupant_type"] . "\">" . html_encode(limit_chars($result["occupant_type"] == "other" ? $result["occupant_title"] : $result["fullname"], 23)) . "</li>\n"; } } else { $sidebar_html .= "<li class=\"status-offline\">Not currently occupied</li>"; } $sidebar_html .= "\t</ul>\n"; $sidebar_html .= "</div>\n"; new_sidebar_item("Apartment Information", $sidebar_html, "regionaled-apt-nav", "open"); $APARTMENT_EXPIRED = true; if (!(int) $APARTMENT_INFO["available_finish"] || $APARTMENT_INFO["available_finish"] > time()) { $APARTMENT_EXPIRED = false;
} elseif (!$ENTRADA_ACL->amIAllowed("regionaled", "update", false)) { $ERROR++; $ERRORSTR[] = "Your account does not have the permissions required to use this feature of this module.<br /><br />If you believe you are receiving this message in error please contact <a href=\"mailto:" . html_encode($AGENT_CONTACTS["administrator"]["email"]) . "\">" . html_encode($AGENT_CONTACTS["administrator"]["name"]) . "</a> for assistance."; echo display_error(); application_log("error", "Group [" . $GROUP . "] and role [" . $ROLE . "] does not have access to this module [" . $MODULE . "]"); } else { require_once "Entrada/calendar/calendar.class.php"; $HEAD[] = "<script type=\"text/javascript\" src=\"" . ENTRADA_URL . "/javascript/calendar/script/xc2_timestamp.js\"></script>\n"; $HEAD[] = "<link href=\"" . ENTRADA_RELATIVE . "/css/calendar.css?release=" . html_encode(APPLICATION_VERSION) . "\" rel=\"stylesheet\" type=\"text/css\" media=\"all\" />"; /** * Check to see if user is requesting the calendar show a specific date. */ if (isset($_GET["dstamp"]) && ($tmp_input = clean_input($_GET["dstamp"], array("nows", "int")))) { $timestamp = fetch_timestamps("month", $tmp_input); } else { $timestamp = fetch_timestamps("month", time()); } $calendar = new Calendar(); $calendar->setBaseUrl(ENTRADA_URL . "/admin/regionaled/apartments/manage"); $calendar->setCharset(DEFAULT_CHARSET); $schedule = regionaled_apartment_occupants($APARTMENT_INFO["apartment_id"], $timestamp["start"], $timestamp["end"]); if ($schedule) { foreach ($schedule as $result) { $event = array(); $event["timestamp_start"] = $result["inhabiting_start"]; $event["timestamp_end"] = $result["inhabiting_finish"]; switch ($result["occupant_type"]) { case "undergrad": $event["calendar_id"] = 1; break; case "postgrad":