コード例 #1
0
 /** 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;
 }
コード例 #2
0
ファイル: calendarLayout.php プロジェクト: p6/VF
/**
 * 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'>&nbsp;" . $app_strings['Call'];
        } else {
            if ($type == 'Meeting') {
                $image_tag = "<img src='" . vtiger_imageurl('Meetings.gif', $theme) . "' align='middle'>&nbsp;" . $app_strings['Meeting'];
            } else {
                $image_tag = "&nbsp;" . getTranslatedString($type);
            }
        }
        $element['eventtype'] = $image_tag;
        $element['eventdetail'] = $contact_data . " " . $subject . "&nbsp;" . $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;
}
コード例 #3
0
 /** 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;
 }