/** To get the events of the specified user and shared events * @param $userid -- The user Id:: Type integer * @param $from_datetime -- The start date Obj :: Type Array * @param $to_datetime -- The end date Obj :: Type Array * @param $view -- The calendar view :: Type String * @returns $list :: Type Array */ function readAppointment($userid, &$from_datetime, &$to_datetime, $view) { global $current_user, $adb; require 'user_privileges/user_privileges_' . $current_user->id . '.php'; require 'user_privileges/sharing_privileges_' . $current_user->id . '.php'; $and = "AND ((vtiger_activity.date_start between ? AND ?)\n\t\t\tOR (vtiger_activity.date_start < ? AND vtiger_activity.due_date > ?)\n\t\t\tOR (vtiger_activity.due_date between ? AND ?))"; $q = "select vtiger_activity.*, vtiger_crmentity.*, case when (vtiger_users.user_name not like '') then vtiger_users.user_name else vtiger_groups.groupname end as user_name FROM vtiger_activity inner join vtiger_crmentity on vtiger_activity.activityid = vtiger_crmentity.crmid left join vtiger_recurringevents on vtiger_activity.activityid=vtiger_recurringevents.activityid left join vtiger_groups on vtiger_groups.groupid = vtiger_crmentity.smownerid LEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid WHERE vtiger_crmentity.deleted = 0 and vtiger_activity.activitytype not in ('Emails','Task') {$and} "; // User Select Customization: Changes should made also in (calendayLaout getEventList) and one more BELOW $query_filter_prefix = calendarview_getSelectedUserFilterQuerySuffix(); $q .= $query_filter_prefix; // END $params = array($from_datetime->get_formatted_date(), $to_datetime->get_formatted_date(), $from_datetime->get_formatted_date(), $from_datetime->get_formatted_date(), $from_datetime->get_formatted_date(), $to_datetime->get_formatted_date()); if ($is_admin == false && $profileGlobalPermission[1] == 1 && $profileGlobalPermission[2] == 1 && $defaultOrgSharingPermission[16] == 3) { //Added for User Based Custom View for Calendar $sec_parameter = getCalendarViewSecurityParameter(); $q .= $sec_parameter; } $q .= " AND vtiger_recurringevents.activityid is NULL "; $q .= " group by vtiger_activity.activityid ORDER by vtiger_activity.date_start,vtiger_activity.time_start"; $r = $adb->pquery($q, $params); $n = $adb->getRowCount($r); $a = 0; $list = array(); while ($a < $n) { $result = $adb->fetchByAssoc($r); $start_timestamp = strtotime($result["date_start"]); $end_timestamp = strtotime($result["due_date"]); if ($from_datetime->ts <= $start_timestamp) { $from = $start_timestamp; } else { $from = $from_datetime->ts; } if ($to_datetime->ts <= $end_timestamp) { $to = $to_datetime->ts; } else { $to = $end_timestamp; } for ($j = $from; $j <= $to; $j = $j + 60 * 60 * 24) { $obj =& new Appointment(); $temp_start = date("Y-m-d", $j); $result["date_start"] = $temp_start; list($obj->temphour, $obj->tempmin) = explode(":", $result["time_start"]); if ($start_timestamp != $end_timestamp && $view == 'day') { if ($j == $start_timestamp) { $result["duration_hours"] = 24 - $obj->temphour; } elseif ($j > $start_timestamp && $j < $end_timestamp) { list($obj->temphour, $obj->tempmin) = $current_user->start_hour != '' ? explode(":", $current_user->start_hour) : explode(":", "08:00"); $result["duration_hours"] = 24 - $obj->temphour; } elseif ($j == $end_timestamp) { list($obj->temphour, $obj->tempmin) = $current_user->start_hour != '' ? explode(":", $current_user->start_hour) : explode(":", "08:00"); list($ehr, $emin) = explode(":", $result["time_end"]); $result["duration_hours"] = $ehr - $obj->temphour; } } $obj->readResult($result, $view); $list[] = $obj; unset($obj); } $a++; } //Get Recurring events $q = "SELECT vtiger_activity.*, vtiger_crmentity.*, case when (vtiger_users.user_name not like '') then vtiger_users.user_name else vtiger_groups.groupname end as user_name , vtiger_recurringevents.recurringid, vtiger_recurringevents.recurringdate as date_start ,vtiger_recurringevents.recurringtype,vtiger_groups.groupname from vtiger_activity inner join vtiger_crmentity on vtiger_activity.activityid = vtiger_crmentity.crmid inner join vtiger_recurringevents on vtiger_activity.activityid=vtiger_recurringevents.activityid left join vtiger_groups on vtiger_groups.groupid = vtiger_crmentity.smownerid LEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid "; $q .= " where vtiger_crmentity.deleted = 0 and vtiger_activity.activitytype not in ('Emails','Task') AND (recurringdate between ? and ?) "; // User Select Customization $q .= $query_filter_prefix; // END $params = array($from_datetime->get_formatted_date(), $to_datetime->get_formatted_date()); if ($is_admin == false && $profileGlobalPermission[1] == 1 && $profileGlobalPermission[2] == 1 && $defaultOrgSharingPermission[16] == 3) { $sec_parameter = getListViewSecurityParameter('Calendar'); $q .= $sec_parameter; } $q .= " ORDER by vtiger_recurringevents.recurringid"; $r = $adb->pquery($q, $params); $n = $adb->getRowCount($r); $a = 0; while ($a < $n) { $obj =& new Appointment(); $result = $adb->fetchByAssoc($r); list($obj->temphour, $obj->tempmin) = explode(":", $result["time_start"]); $obj->readResult($result, $view); $a++; $list[] = $obj; unset($obj); } usort($list, 'compare'); return $list; }
/** * Function to get events list scheduled between specified dates * @param array $calendar - collection of objects and strings * @param string $start_date - date string * @param string $end_date - date string * @param string $info - string 'listcnt' or empty string. if 'listcnt' means it returns no. of events and no. of pending events in array format else it returns events list in array format * return array $Entries - eventslists in array format */ function getEventList(&$calendar, $start_date, $end_date, $info = '') { global $log, $theme; $Entries = array(); $category = getParentTab(); global $adb, $current_user, $mod_strings, $app_strings, $cal_log, $listview_max_textlength, $list_max_entries_per_page; require 'user_privileges/user_privileges_' . $current_user->id . '.php'; require 'user_privileges/sharing_privileges_' . $current_user->id . '.php'; $cal_log->debug("Entering getEventList() method..."); //modified query to fix the ticket #5014 & #5180 $and = "AND ((((vtiger_activity.date_start between ? AND ?)\n\t\tOR (vtiger_activity.date_start < ? AND vtiger_activity.due_date > ?)\n\t\tOR (vtiger_activity.due_date between ? AND ?))\n\t\tAND (vtiger_recurringevents.activityid is NULL))\n\t\tOR (vtiger_recurringevents.recurringdate BETWEEN ? AND ?))"; $count_qry = "SELECT count(*) as count FROM vtiger_activity\n\t\tINNER JOIN vtiger_crmentity\n\t\tON vtiger_crmentity.crmid = vtiger_activity.activityid\n\t\tLEFT JOIN vtiger_groups\n\t\tON vtiger_groups.groupid = vtiger_crmentity.smownerid\n\t\tLEFT JOIN vtiger_users\n\t\tON vtiger_users.id = vtiger_crmentity.smownerid\n\t\tLEFT OUTER JOIN vtiger_recurringevents\n\t\tON vtiger_recurringevents.activityid = vtiger_activity.activityid\n\t\tWHERE vtiger_crmentity.deleted = 0\n\t\tAND (vtiger_activity.activitytype not in ('Emails','Task')) {$and} "; $query = "SELECT vtiger_groups.groupname, vtiger_users.user_name,vtiger_crmentity.smownerid, vtiger_crmentity.crmid,\n \t\tvtiger_activity.* FROM vtiger_activity\n\t\tINNER JOIN vtiger_crmentity\n\t\t\tON vtiger_crmentity.crmid = vtiger_activity.activityid\n\t\tLEFT JOIN vtiger_groups\n\t\t\tON vtiger_groups.groupid = vtiger_crmentity.smownerid\n\t\tLEFT JOIN vtiger_users\n\t \t\tON vtiger_users.id = vtiger_crmentity.smownerid \n\t\tLEFT OUTER JOIN vtiger_recurringevents\n\t\t\tON vtiger_recurringevents.activityid = vtiger_activity.activityid\n\t\tWHERE vtiger_crmentity.deleted = 0\n\t\t\tAND (vtiger_activity.activitytype not in ('Emails','Task')) {$and} "; $list_query = $query . " AND vtiger_crmentity.smownerid = " . $current_user->id; // User Select Customization: Changes should made also in (Appointment::readAppointment) $query_filter_prefix = calendarview_getSelectedUserFilterQuerySuffix(); $query .= $query_filter_prefix; $count_query .= $query_filter_prefix; // END $params = $info_params = array($start_date, $end_date, $start_date, $end_date, $start_date, $end_date, $start_date, $end_date); if ($info != '') { $groupids = explode(",", fetchUserGroupids($current_user->id)); // Explode can be removed, once implode is removed from fetchUserGroupids if (count($groupids) > 0) { $com_q = " AND (vtiger_crmentity.smownerid = ?\n\t\t\t\t\tOR vtiger_groups.groupid in (" . generateQuestionMarks($groupids) . "))\n\t\t\t\t\tGROUP BY vtiger_activity.activityid"; } else { $com_q = " AND vtiger_crmentity.smownerid = ?\n\t\t\t\tGROUP BY vtiger_activity.activityid"; } $pending_query = $query . " AND (vtiger_activity.eventstatus = 'Planned')" . $com_q; $total_q = $query . "" . $com_q; array_push($info_params, $current_user->id); if (count($groupids) > 0) { array_push($info_params, $groupids); } $total_res = $adb->pquery($total_q, $info_params); $total = $adb->num_rows($total_res); $res = $adb->pquery($pending_query, $info_params); $pending_rows = $adb->num_rows($res); $cal_log->debug("Exiting getEventList() method..."); return array('totalevent' => $total, 'pendingevent' => $pending_rows); } if ($is_admin == false && $profileGlobalPermission[1] == 1 && $profileGlobalPermission[2] == 1 && $defaultOrgSharingPermission[16] == 3) { $sec_parameter = getCalendarViewSecurityParameter(); $query .= $sec_parameter; $list_query .= $sec_parameter; $count_qry .= $sec_parameter; } if (isset($_REQUEST['type']) && $_REQUEST['type'] == 'search') { $search_where = calendar_search_where($_REQUEST['field_name'], $_REQUEST['search_option'], $_REQUEST['search_text']); $group_cond .= $search_where; $count_qry .= $search_where; } $group_cond .= " GROUP BY vtiger_activity.activityid ORDER BY vtiger_activity.date_start,vtiger_activity.time_start ASC"; $count_qry .= ' GROUP BY vtiger_activity.activityid '; $count_res = $adb->pquery($count_qry, $params); $total_rec_count = $adb->num_rows($count_res); if (isset($_REQUEST['start']) && $_REQUEST['start'] != '') { $start = vtlib_purify($_REQUEST['start']); } else { $start = 1; } $navigation_array = getNavigationValues($start, $total_rec_count, $list_max_entries_per_page); $start_rec = $navigation_array['start']; $end_rec = $navigation_array['end_val']; if ($start_rec <= 1) { $start_rec = 0; } else { $start_rec = $start_rec - 1; } $query .= $group_cond . " limit {$start_rec},{$list_max_entries_per_page}"; $list_query .= $group_cond; if ($adb->dbType == "pgsql") { $query = fixPostgresQuery($query, $log, 0); $list_query = fixPostgresQuery($list_query, $log, 0); } $list_query = $adb->convert2Sql($list_query, $params); $_SESSION['Calendar_listquery'] = $list_query; $result = $adb->pquery($query, $params); $rows = $adb->num_rows($result); $c = 0; if ($start > 1) { $c = ($start - 1) * $list_max_entries_per_page; } for ($i = 0; $i < $rows; $i++) { $element = array(); $element['no'] = $c + 1; $image_tag = ""; $contact_data = ""; $more_link = ""; $start_time = $adb->query_result($result, $i, "time_start"); $end_time = $adb->query_result($result, $i, "time_end"); $format = $calendar['calendar']->hour_format; $value = getaddEventPopupTime($start_time, $end_time, $format); $start_hour = $value['starthour'] . ':' . $value['startmin'] . '' . $value['startfmt']; $end_hour = $value['endhour'] . ':' . $value['endmin'] . '' . $value['endfmt']; $date_start = $adb->query_result($result, $i, "date_start"); $due_date = $adb->query_result($result, $i, "due_date"); $element['starttime'] = getDisplayDate($date_start) . ' ' . $start_hour; $element['endtime'] = getDisplayDate($due_date) . ' ' . $end_hour; $contact_id = $adb->query_result($result, $i, "contactid"); $id = $adb->query_result($result, $i, "activityid"); $subject = $adb->query_result($result, $i, "subject"); $eventstatus = $adb->query_result($result, $i, "eventstatus"); $assignedto = $adb->query_result($result, $i, "user_name"); $userid = $adb->query_result($result, $i, "smownerid"); $idShared = "normal"; if (!empty($assignedto) && $userid != $current_user->id && $adb->query_result($result, $i, "visibility") == "Public") { $que = "select * from vtiger_sharedcalendar where sharedid=? and userid=?"; $row = $adb->pquery($que, array($current_user->id, $userid)); $no = $adb->getRowCount($row); if ($no > 0) { $idShared = "shared"; } else { $idShared = "normal"; } } if ($listview_max_textlength && strlen($subject) > $listview_max_textlength) { $subject = substr($subject, 0, $listview_max_textlength) . "..."; } if ($contact_id != '') { $contactname = getContactName($contact_id); $contact_data = "<b>" . $contactname . "</b>,"; } $more_link = "<a href='index.php?action=DetailView&module=Calendar&record=" . $id . "&activity_mode=Events&viewtype=calendar&parenttab=" . $category . "' class='webMnu'>[" . $mod_strings['LBL_MORE'] . "...]</a>"; $type = $adb->query_result($result, $i, "activitytype"); if ($type == 'Call') { $image_tag = "<img src='" . vtiger_imageurl('Calls.gif', $theme) . "' align='middle'> " . $app_strings['Call']; } else { if ($type == 'Meeting') { $image_tag = "<img src='" . vtiger_imageurl('Meetings.gif', $theme) . "' align='middle'> " . $app_strings['Meeting']; } else { $image_tag = " " . getTranslatedString($type); } } $element['eventtype'] = $image_tag; $element['eventdetail'] = $contact_data . " " . $subject . " " . $more_link; /*if(getFieldVisibilityPermission('Events',$current_user->id,'parent_id') == '0') { $element['relatedto']= getRelatedTo('Calendar',$result,$i); }*/ if ($idShared == "normal") { if (isPermitted("Calendar", "EditView") == "yes" || isPermitted("Calendar", "Delete") == "yes") { $element['action'] = "<img onClick='getcalAction(this,\"eventcalAction\"," . $id . ",\"" . $calendar['view'] . "\",\"" . $calendar['calendar']->date_time->hour . "\",\"" . $calendar['calendar']->date_time->get_formatted_date() . "\",\"event\");' src='" . vtiger_imageurl('cal_event.jpg', $theme) . "' border='0'>"; } } else { if (isPermitted("Calendar", "EditView") == "yes" || isPermitted("Calendar", "Delete") == "yes") { $element['action'] = "<img onClick=\"alert('" . $mod_strings["SHARED_EVENT_DEL_MSG"] . "')\"; src='" . vtiger_imageurl('cal_event.jpg', $theme) . "' border='0'>"; } } if (getFieldVisibilityPermission('Events', $current_user->id, 'eventstatus') == '0') { if (!$is_admin && $eventstatus != '') { $roleid = $current_user->roleid; $roleids = array(); $subrole = getRoleSubordinates($roleid); if (count($subrole) > 0) { $roleids = $subrole; } array_push($roleids, $roleid); //here we are checking wheather the table contains the sortorder column .If sortorder is present in the main picklist table, then the role2picklist will be applicable for this table... $sql = "select * from vtiger_eventstatus where eventstatus=?"; $res = $adb->pquery($sql, array(decode_html($eventstatus))); $picklistvalueid = $adb->query_result($res, 0, 'picklist_valueid'); if ($picklistvalueid != null) { $pick_query = "select * from vtiger_role2picklist where picklistvalueid={$picklistvalueid} and roleid in (" . generateQuestionMarks($roleids) . ")"; $res_val = $adb->pquery($pick_query, array($roleids)); $num_val = $adb->num_rows($res_val); } if ($num_val > 0) { $element['status'] = getTranslatedString(decode_html($eventstatus)); } else { $element['status'] = "<font color='red'>" . $app_strings['LBL_NOT_ACCESSIBLE'] . "</font>"; } } else { $element['status'] = getTranslatedString(decode_html($eventstatus)); } } if (!empty($assignedto)) { $element['assignedto'] = $assignedto; } else { $element['assignedto'] = $adb->query_result($result, $i, "groupname"); } $element['visibility'] = $adb->query_result($result, $i, "visibility"); $c++; $Entries[] = $element; } $ret_arr[0] = $Entries; $ret_arr[1] = $navigation_array; $cal_log->debug("Exiting getEventList() method..."); return $ret_arr; }
/** To get the events of the specified user and shared events * @param $userid -- The user Id:: Type integer * @param $from_datetime -- The start date Obj :: Type Array * @param $to_datetime -- The end date Obj :: Type Array * @param $view -- The calendar view :: Type String * @returns $list :: Type Array */ function readAppointment($userid, &$from_datetime, &$to_datetime, $view) { global $current_user, $adb; require 'user_privileges/user_privileges_' . $current_user->id . '.php'; require 'user_privileges/sharing_privileges_' . $current_user->id . '.php'; $and = "AND (\n\t\t\t\t\t(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t(CAST(CONCAT(date_start,' ',time_start) AS DATETIME) >= ? AND CAST(CONCAT(date_start,' ',time_start) AS DATETIME) <= ?)\n\t\t\t\t\t\t\tOR\t(CAST(CONCAT(due_date,' ',time_end) AS DATETIME) >= ? AND CAST(CONCAT(due_date,' ',time_end) AS DATETIME) <= ? )\n\t\t\t\t\t\t\tOR\t(CAST(CONCAT(date_start,' ',time_start) AS DATETIME) <= ? AND CAST(CONCAT(due_date,' ',time_end) AS DATETIME) >= ?)\n\t\t\t\t\t\t)\n\t\t\t\t\t\tAND vtiger_recurringevents.activityid is NULL\n\t\t\t\t\t)\n\t\t\t\tOR (\n\t\t\t\t\t\t(CAST(CONCAT(vtiger_recurringevents.recurringdate,' ',time_start) AS DATETIME) >= ?\n\t\t\t\t\t\t\tAND CAST(CONCAT(vtiger_recurringevents.recurringdate,' ',time_start) AS DATETIME) <= ?)\n\t\t\t\t\t\tOR\t(CAST(CONCAT(due_date,' ',time_end) AS DATETIME) >= ? AND CAST(CONCAT(due_date,' ',time_end) AS DATETIME) <= ?)\n\t\t\t\t\t\tOR\t(CAST(CONCAT(vtiger_recurringevents.recurringdate,' ',time_start) AS DATETIME) <= ?\n\t\t\t\t\t\t\tAND CAST(CONCAT(due_date,' ',time_end) AS DATETIME) >= ?)\n\t\t\t\t\t)\n\t\t\t\t)"; $userNameSql = getSqlForNameInDisplayFormat(array('first_name' => 'vtiger_users.first_name', 'last_name' => 'vtiger_users.last_name'), 'Users'); $q = "select vtiger_activity.*, vtiger_crmentity.*,\n\t\t\t\t\tcase when (vtiger_users.user_name not like '') then {$userNameSql} else vtiger_groups.groupname end as user_name\n\t\t\t\t\tFROM vtiger_activity\n\t\t\t\t\t\tinner join vtiger_crmentity on vtiger_activity.activityid = vtiger_crmentity.crmid\n\t\t\t\t\t\tleft join vtiger_recurringevents on vtiger_activity.activityid=vtiger_recurringevents.activityid\n\t\t\t\t\t\tleft join vtiger_groups on vtiger_groups.groupid = vtiger_crmentity.smownerid\n\t\t\t\t\t\tLEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid\n\t\t\t\t\tWHERE vtiger_crmentity.deleted = 0 and vtiger_activity.activitytype not in ('Emails','Task') {$and} "; // User Select Customization: Changes should made also in (calendayLaout getEventList) and one more BELOW $query_filter_prefix = calendarview_getSelectedUserFilterQuerySuffix(); $q .= $query_filter_prefix; // END $h = $from_datetime->z_hour; $m = $from_datetime->min; if (empty($m)) { $m = '00'; } $startDate = new DateTimeField($from_datetime->year . "-" . $from_datetime->z_month . "-" . $from_datetime->z_day . " {$h}:{$m}"); $h = '23'; $m = '59'; $endDate = new DateTimeField($to_datetime->year . "-" . $to_datetime->z_month . "-" . $to_datetime->z_day . " {$h}:{$m}"); $params = array($startDate->getDBInsertDateTimeValue(), $endDate->getDBInsertDateTimeValue(), $startDate->getDBInsertDateTimeValue(), $endDate->getDBInsertDateTimeValue(), $startDate->getDBInsertDateTimeValue(), $endDate->getDBInsertDateTimeValue(), $startDate->getDBInsertDateTimeValue(), $endDate->getDBInsertDateTimeValue(), $startDate->getDBInsertDateTimeValue(), $endDate->getDBInsertDateTimeValue(), $startDate->getDBInsertDateTimeValue(), $endDate->getDBInsertDateTimeValue()); if ($is_admin == false && $profileGlobalPermission[1] == 1 && $profileGlobalPermission[2] == 1 && $defaultOrgSharingPermission[16] == 3) { //Added for User Based Custom View for Calendar $sec_parameter = getCalendarViewSecurityParameter(); $q .= $sec_parameter; } $q .= " AND vtiger_recurringevents.activityid is NULL "; $q .= " group by vtiger_activity.activityid ORDER by vtiger_activity.date_start,vtiger_activity.time_start"; $r = $adb->pquery($q, $params); $n = $adb->getRowCount($r); $a = 0; $list = array(); while ($a < $n) { $result = $adb->fetchByAssoc($r); $from = strtotime($result['date_start']); $to = strtotime($result['due_date'] . ' ' . $result["time_end"]); $windowTo = strtotime($endDate->getDBInsertDateTimeValue()); for ($j = $from; $j <= $to; $j = $j + 60 * 60 * 24) { $obj =& new Appointment(); $temp_start = date("Y-m-d", $j); $endTime = strtotime($temp_start . ' ' . $result['time_start']); if ($endTime > $windowTo) { break; } $result["date_start"] = $temp_start; list($obj->temphour, $obj->tempmin) = explode(":", $result["time_start"]); if ($start_timestamp != $end_timestamp && $view == 'day') { if ($j == $start_timestamp) { $result["duration_hours"] = 24 - $obj->temphour; } elseif ($j > $start_timestamp && $j < $end_timestamp) { list($obj->temphour, $obj->tempmin) = $current_user->start_hour != '' ? explode(":", $current_user->start_hour) : explode(":", "08:00"); $result["duration_hours"] = 24 - $obj->temphour; } elseif ($j == $end_timestamp) { list($obj->temphour, $obj->tempmin) = $current_user->start_hour != '' ? explode(":", $current_user->start_hour) : explode(":", "08:00"); list($ehr, $emin) = explode(":", $result["time_end"]); $result["duration_hours"] = $ehr - $obj->temphour; } } $obj->readResult($result, $view); $list[] = $obj; unset($obj); } $a++; } //Get Recurring events $q = "SELECT vtiger_activity.*, vtiger_crmentity.*, case when (vtiger_users.user_name not like '') then {$userNameSql} else vtiger_groups.groupname end as user_name , vtiger_recurringevents.recurringid, vtiger_recurringevents.recurringdate as date_start ,vtiger_recurringevents.recurringtype,vtiger_groups.groupname from vtiger_activity inner join vtiger_crmentity on vtiger_activity.activityid = vtiger_crmentity.crmid inner join vtiger_recurringevents on vtiger_activity.activityid=vtiger_recurringevents.activityid left join vtiger_groups on vtiger_groups.groupid = vtiger_crmentity.smownerid LEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid"; $q .= getNonAdminAccessControlQuery('Calendar', $current_user); $q .= " where vtiger_crmentity.deleted = 0 and vtiger_activity.activitytype not in ('Emails','Task') AND (cast(concat(recurringdate, ' ', time_start) as datetime) between ? and ?) "; // User Select Customization $q .= $query_filter_prefix; // END $params = array($startDate->getDBInsertDateTimeValue(), $endDate->getDBInsertDateTimeValue()); $q .= " ORDER by vtiger_recurringevents.recurringid"; $r = $adb->pquery($q, $params); $n = $adb->getRowCount($r); $a = 0; while ($a < $n) { $obj =& new Appointment(); $result = $adb->fetchByAssoc($r); list($obj->temphour, $obj->tempmin) = explode(":", $result["time_start"]); $obj->readResult($result, $view); $a++; $list[] = $obj; unset($obj); } usort($list, 'compare'); return $list; }