public function getAgenda($api, $args) { // Fetch the next 14 days worth of meetings (limited to 20) $end_time = new SugarDateTime("+14 days"); $start_time = new SugarDateTime("-1 hour"); $meeting = BeanFactory::newBean('Meetings'); $meetingList = $meeting->get_list('date_start', "date_start > " . $GLOBALS['db']->convert($GLOBALS['db']->quoted($start_time->asDb()), 'datetime') . " AND date_start < " . $GLOBALS['db']->convert($GLOBALS['db']->quoted($end_time->asDb()), 'datetime')); // Setup the breaks for the various time periods $datetime = new SugarDateTime(); $today_stamp = $datetime->get_day_end()->getTimestamp(); $tomorrow_stamp = $datetime->setDate($datetime->year, $datetime->month, $datetime->day + 1)->get_day_end()->getTimestamp(); $timeDate = TimeDate::getInstance(); $returnedMeetings = array('today' => array(), 'tomorrow' => array(), 'upcoming' => array()); foreach ($meetingList['list'] as $meetingBean) { $meetingStamp = $timeDate->fromUser($meetingBean->date_start)->getTimestamp(); $meetingData = $this->formatBean($api, $args, $meetingBean); if ($meetingStamp < $today_stamp) { $returnedMeetings['today'][] = $meetingData; } else { if ($meetingStamp < $tomorrow_stamp) { $returnedMeetings['tomorrow'][] = $meetingData; } else { $returnedMeetings['upcoming'][] = $meetingData; } } } return $returnedMeetings; }
/** * Create a todo entry for the given task. * * @param UserBean $user_bean the current UserBean * @param Task $task the task for the todo entry * @param string $moduleName the name of the task module * @param string $dtstamp the current timestamp * @return string the todo entry for the task */ protected function createSugarIcalTodo($user_bean, $task, $moduleName, $dtstamp) { global $sugar_config; $ical_array = array(); $ical_array[] = array("BEGIN", "VTODO"); $validDueDate = isset($task->date_due) && $task->date_due != "" && $task->date_due != "0000-00-00"; $validDueTime = isset($task->time_due) && $task->time_due != ""; $dueYear = 1970; $dueMonth = 1; $dueDay = 1; $dueHour = 0; $dueMin = 0; if ($validDueDate) { $dateDueArr = explode("-", $task->date_due); $dueYear = (int) $dateDueArr[0]; $dueMonth = (int) $dateDueArr[1]; $dueDay = (int) $dateDueArr[2]; if ($validDueTime) { $timeDueArr = explode(":", $task->time_due); $dueHour = (int) $timeDueArr[0]; $dueMin = (int) $timeDueArr[1]; } } $date_arr = array('day' => $dueDay, 'month' => $dueMonth, 'hour' => $dueHour, 'min' => $dueMin, 'year' => $dueYear); $due_date_time = new SugarDateTime(); $due_date_time->setDate($dueYear, $dueMonth, $dueDay); $due_date_time->setTime($dueHour, $dueMin); $ical_array[] = array("DTSTART;TZID=" . $user_bean->getPreference('timezone'), str_replace("Z", "", $this->getUtcDateTime($due_date_time))); $ical_array[] = array("DTSTAMP", $dtstamp); $ical_array[] = array("SUMMARY", $task->name); $ical_array[] = array("UID", $task->id); if ($validDueDate) { $iCalDueDate = str_replace("-", "", $task->date_due); if (strlen($iCalDueDate) > 8) { $iCalDueDate = substr($iCalDueDate, 0, 8); } $ical_array[] = array("DUE;VALUE=DATE", $iCalDueDate); } if ($moduleName == "ProjectTask") { $ical_array[] = array("DESCRIPTION:Project", $task->project_name . vCal::EOL . vCal::EOL . $task->description); } else { $ical_array[] = array("DESCRIPTION", $task->description); } $ical_array[] = array("URL;VALUE=URI", $sugar_config['site_url'] . "/index.php?module=" . $moduleName . "&action=DetailView&record=" . $task->id); if ($task->status == 'Completed') { $ical_array[] = array("STATUS", "COMPLETED"); $ical_array[] = array("PERCENT-COMPLETE", "100"); $ical_array[] = array("COMPLETED", $this->getUtcDateTime($due_date_time)); } else { if (!empty($task->percent_complete)) { $ical_array[] = array("PERCENT-COMPLETE", $task->percent_complete); } } if ($task->priority == "Low") { $ical_array[] = array("PRIORITY", "9"); } else { if ($task->priority == "Medium") { $ical_array[] = array("PRIORITY", "5"); } else { if ($task->priority == "High") { $ical_array[] = array("PRIORITY", "1"); } } } $ical_array[] = array("END", "VTODO"); return vCal::create_ical_string_from_array($ical_array, true); }
/** * Create a todo entry for the given task. * * @param UserBean $user_bean the current UserBean * @param Task $task the task for the todo entry * @param string $moduleName the name of the task module * @param string $dtstamp the current timestamp * @return string the todo entry for the task */ protected function createSugarIcalTodo($user_bean, $task, $moduleName, $dtstamp) { global $sugar_config; $str = ""; $str .= "BEGIN:VTODO\n"; $validDueDate = isset($task->date_due) && $task->date_due != "" && $task->date_due != "0000-00-00"; $validDueTime = isset($task->time_due) && $task->time_due != ""; $dueYear = 1970; $dueMonth = 1; $dueDay = 1; $dueHour = 0; $dueMin = 0; if ($validDueDate) { $dateDueArr = split("-", $task->date_due); $dueYear = (int) $dateDueArr[0]; $dueMonth = (int) $dateDueArr[1]; $dueDay = (int) $dateDueArr[2]; if ($validDueTime) { $timeDueArr = split(":", $task->time_due); $dueHour = (int) $timeDueArr[0]; $dueMin = (int) $timeDueArr[1]; } } $date_arr = array('day' => $dueDay, 'month' => $dueMonth, 'hour' => $dueHour, 'min' => $dueMin, 'year' => $dueYear); $due_date_time = new SugarDateTime(); $due_date_time->setDate($dueYear, $dueMonth, $dueDay); $due_date_time->setTime($dueHour, $dueMin); $str .= "DTSTART;TZID=" . $user_bean->getPreference('timezone') . ":" . str_replace("Z", "", $this->getUtcDateTime($due_date_time)) . "\n"; $str .= "DTSTAMP:" . $dtstamp . "\n"; $str .= "SUMMARY:" . $task->name . "\n"; $str .= "UID:" . $task->id . "\n"; if ($validDueDate) { $iCalDueDate = str_replace("-", "", $task->date_due); if (strlen($iCalDueDate) > 8) { $iCalDueDate = substr($iCalDueDate, 0, 8); } $str .= "DUE;VALUE=DATE:" . $iCalDueDate . "\n"; } if ($moduleName == "ProjectTask") { $str .= "DESCRIPTION:Project: " . $task->project_name . "\\n\\n" . $this->escapeNls($task->description) . "\n"; } else { $str .= "DESCRIPTION:" . $this->escapeNls($task->description) . "\n"; } $str .= "URL;VALUE=URI:" . $sugar_config['site_url'] . "/index.php?module=" . $moduleName . "&action=DetailView&record=" . $task->id . "\n"; if ($task->status == 'Completed') { $str .= "STATUS:COMPLETED\n"; $str .= "PERCENT-COMPLETE:100\n"; $str .= "COMPLETED:" . $this->getUtcDateTime($due_date_time) . "\n"; } else { if (!empty($task->percent_complete)) { $str .= "PERCENT-COMPLETE:" . $task->percent_complete . "\n"; } } if ($task->priority == "Low") { $str .= "PRIORITY:9\n"; } else { if ($task->priority == "Medium") { $str .= "PRIORITY:5\n"; } else { if ($task->priority == "High") { $str .= "PRIORITY:1\n"; } } } $str .= "END:VTODO\n"; return $str; }
/** * @param integer $duration * @param string|null $start_date The starting date in format of Y-m-d * @return array */ public function getGenericStartEndByDuration($duration, $start_date = null) { $mapping = array('current' => 0, 'next' => 3, 'year' => 12); if (array_key_exists($duration, $mapping)) { $duration = $mapping[$duration]; } elseif (!is_numeric($duration)) { $duration = 0; } $start = false; if (!is_null($start_date)) { $start = SugarDateTime::createFromFormat('Y-m-d', $start_date); $end = SugarDateTime::createFromFormat('Y-m-d', $start_date); } if ($start === false) { $start = new SugarDateTime(); $end = new SugarDateTime(); } // since we subtract one from the month, we need to add one to the duration since php is // not zero 0 based for months // figure out what the starting month is. $startMonth = floor(($start->month - 1) / 3) * 3 + $duration + 1; $year = $start->year; $endYear = $year; $endMonth = $startMonth + 3; // if the end month is dec, we put it to Jan and increase the end year as well so it goes back to the last // day of dec if ($endMonth == 12) { $endYear++; $endMonth = 1; } if ($duration == 12) { $endYear++; $startMonth = 1; $endMonth = 1; } $start->setDate($year, $startMonth, 1); $end->setDate($endYear, $endMonth, 0); // since we are using timestamp, we need to convert this into UTC since that is // what the DB is storing as $tz = new DateTimeZone("UTC"); return array('start_date' => $start->asDbDate(false), 'start_date_timestamp' => $start->setTimezone($tz)->setTime(0, 0, 0)->format('U'), 'end_date' => $end->asDbDate(false), 'end_date_timestamp' => $end->setTimezone($tz)->setTime(0, 0, 0)->format('U')); }