function friendly_date(DateTimeValue $date, $timezone = null) { if ($timezone == null) { $timezone = logged_user()->getTimezone(); } //TODO: 7 days before: "Dom at 13:43", older: "Oct, 06 at 15:20" if ($date->isToday()) { $now = DateTimeValueLib::now(); $diff = DateTimeValueLib::get_time_difference($date->getTimestamp(), $now->getTimestamp()); if ($diff['hours'] == 0) { if ($diff['minutes'] >= 0) { return lang('minutes ago', $diff['minutes']); } else { return format_descriptive_date($date); } } else { if ($diff['hours'] > 0) { return lang('about hours ago', round($diff['hours'] + ($diff['minutes'] > 30 ? 1 : 0))); } else { return format_descriptive_date($date); } } } else { if ($date->isYesterday()) { return lang('yesterday at', format_time($date)); } else { $now = DateTimeValueLib::now(); $diff = DateTimeValueLib::get_time_difference($date->getTimestamp(), $now->getTimestamp()); if ($diff['days'] < 7) { return lang('day at', Localization::dateByLocalization("D", $date->getTimestamp()), format_time($date)); } else { if ($now->getYear() != $date->getYear()) { return lang('day at', Localization::dateByLocalization("M d, Y", $date->getTimestamp()), format_time($date)); } else { return lang('day at', Localization::dateByLocalization("M, d", $date->getTimestamp()), format_time($date)); } } } } }
$occup[$event_start->getHour()][1][$posHoriz] = true; } for ($i = $event_start->getHour() + 1; $i < $event_duration->getHour(); $i++) { $occup[$i][0][$posHoriz] = true; $occup[$i][1][$posHoriz] = true; } if ($event_duration->getMinute() > 0) { $occup[$event_duration->getHour()][0][$posHoriz] = true; if ($event_duration->getMinute() > 30) { $occup[$event_duration->getHour()][1][$posHoriz] = true; } } //if ($posHoriz+1 == $evs_same_time) $width = $width - 0.75; $procesados[$hr_start]++; $event_duration->add('s', 1); $ev_duration = DateTimeValueLib::get_time_difference($event_start->getTimestamp(), $event_duration->getTimestamp()); if ($event instanceof ProjectEvent) { $real_start = new DateTimeValue($event->getStart()->getTimestamp() + 3600 * logged_user()->getTimezone()); $real_duration = new DateTimeValue($event->getDuration()->getTimestamp() + 3600 * logged_user()->getTimezone()); } else { if ($event instanceof ProjectTask) { if ($event->getStartDate() instanceof DateTimeValue) { $real_start = new DateTimeValue($event->getStartDate()->getTimestamp() + 3600 * logged_user()->getTimezone()); } else { $real_start = $event_start; } if ($event->getDueDate() instanceof DateTimeValue) { $real_duration = new DateTimeValue($event->getDueDate()->getTimestamp() + 3600 * logged_user()->getTimezone()); } else { $real_duration = $event_duration; }
function move_event() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $event = ProjectEvents::findById(get_id()); if(!$event->canEdit(logged_user())){ flash_error(lang('no access permissions')); ajx_current("empty"); return; } $is_read = $event->getIsRead(logged_user()->getId()); $year = array_var($_GET, 'year', $event->getStart()->getYear()); $month = array_var($_GET, 'month', $event->getStart()->getMonth()); $day = array_var($_GET, 'day', $event->getStart()->getDay()); $hour = array_var($_GET, 'hour', 0); $min = array_var($_GET, 'min', 0); if ($hour == -1) $hour = format_date($event->getStart(), 'H', logged_user()->getTimezone() ); if ($min == -1) $min = format_date($event->getStart(), 'i', logged_user()->getTimezone() ); if ($event->isRepetitive()) { $orig_date = DateTimeValueLib::dateFromFormatAndString('Y-m-d H:i:s', array_var($_GET, 'orig_date')); $diff = DateTimeValueLib::get_time_difference($orig_date->getTimestamp(), mktime($hour, $min, 0, $month, $day, $year)); $new_start = new DateTimeValue($event->getStart()->getTimestamp()); $new_start->add('d', $diff['days']); $new_start->add('h', $diff['hours']); $new_start->add('m', $diff['minutes']); if ($event->getRepeatH()) { $event->setRepeatDow(date("w", mktime($hour, $min, 0, $month, $day, $year))+1); $wnum = 0; $tmp_day = $new_start->getDay(); while ($tmp_day > 0) { $tmp_day -= 7; $wnum++; } $event->setRepeatWnum($wnum); } } else { $new_start = new DateTimeValue(mktime($hour, $min, 0, $month, $day, $year) - logged_user()->getTimezone() * 3600); } $diff = DateTimeValueLib::get_time_difference($event->getStart()->getTimestamp(), $event->getDuration()->getTimestamp()); $new_duration = new DateTimeValue($new_start->getTimestamp()); $new_duration->add('d', $diff['days']); $new_duration->add('h', $diff['hours']); $new_duration->add('m', $diff['minutes']); // see if we have to reload $os = format_date($event->getStart(), 'd', logged_user()->getTimezone() ); $od = format_date($event->getDuration(), 'd', logged_user()->getTimezone() ); $ohm = format_date($event->getDuration(), 'H:i', logged_user()->getTimezone() ); $nd = format_date($new_duration, 'd', logged_user()->getTimezone() ); $nhm = format_date($new_duration, 'H:i', logged_user()->getTimezone() ); $different_days = ($os != $od && $ohm != '00:00') || ($day != $nd && $nhm != '00:00'); DB::beginWork(); $event->setStart($new_start->format("Y-m-d H:i:s")); $event->setDuration($new_duration->format("Y-m-d H:i:s")); $event->save(); $old_reminders = ObjectReminders::getByObject($event); if($old_reminders != null){ $object_controller = new ObjectController(); $object_controller->update_reminders($event, $old_reminders); //updating the old ones }else if(user_config_option("add_event_autoreminder")){ $reminder = new ObjectReminder(); $def = explode(",",user_config_option("reminders_events")); $minutes = array_var($def, 2) * array_var($def, 1); $reminder->setMinutesBefore($minutes); $reminder->setType(array_var($def, 0)); $reminder->setContext("start"); $reminder->setObject($event); $reminder->setUserId(0); $date = $event->getStart(); if ($date instanceof DateTimeValue) { $rdate = new DateTimeValue($date->getTimestamp() - $minutes * 60); $reminder->setDate($rdate); } $reminder->save(); } if (!$is_read) { $event->setIsRead(logged_user()->getId(), false); } if($event->getSpecialID() != ""){ $this->sync_calendar_extern($event); } DB::commit(); ajx_extra_data($this->get_updated_event_data($event)); if ($different_days || $event->isRepetitive()) ajx_current("reload"); else ajx_current("empty"); }
function getSecondsSincePause(){ if (!$this->getPausedOn()) return 0; $endTime = DateTimeValueLib::now(); $timeDiff = DateTimeValueLib::get_time_difference($this->getPausedOn()->getTimestamp(),$endTime->getTimestamp()); return $timeDiff['days'] * 86400 + $timeDiff['hours'] * 3600 + $timeDiff['minutes']* 60 + $timeDiff['seconds']; }
static function updateBillingValues() { $timeslot_rows = DB::executeAll("SELECT * FROM " . TABLE_PREFIX . "timeslots WHERE `end_time` > 0 AND billing_id = 0 AND is_fixed_billing = 0"); $users = Contacts::getAllUsers(); $usArray = array(); foreach ($users as $u) { $usArray[$u->getId()] = $u; } $count = 0; $categories_cache = array(); foreach ($timeslot_rows as $ts_row) { if ($ts_row['start_time'] == EMPTY_DATETIME) { $ts_row['minutes'] = 0; } else { $startTime = DateTimeValueLib::makeFromString($ts_row['start_time']); if ($ts_row['start_time'] == EMPTY_DATETIME) { $endTime = $ts_row['is_paused'] ? DateTimeValueLib::makeFromString($ts_row['paused_on']) : DateTimeValueLib::now(); } else { $endTime = DateTimeValueLib::makeFromString($ts_row['end_time']); } $timeDiff = DateTimeValueLib::get_time_difference($startTime->getTimestamp(), $endTime->getTimestamp(), $ts_row['subtract']); $ts_row['minutes'] = $timeDiff['days'] * 1440 + $timeDiff['hours'] * 60 + $timeDiff['minutes']; } $user = $usArray[$ts_row['contact_id']]; if ($user instanceof Contact) { $billing_category_id = $user->getDefaultBillingId(); if ($billing_category_id > 0) { $hours = $ts_row['minutes'] / 60; $billing_category = array_var($categories_cache, $billing_category_id); if (!$billing_category instanceof BillingCategory) { $billing_category = BillingCategories::findById($billing_category_id); $categories_cache[$billing_category_id] = $billing_category; } if ($billing_category instanceof BillingCategory) { $hourly_billing = $billing_category->getDefaultValue(); DB::execute("UPDATE " . TABLE_PREFIX . "timeslots SET billing_id='{$billing_category_id}', hourly_billing='{$hourly_billing}', \r\n\t\t\t\t\t\t\tfixed_billing='" . round($hourly_billing * $hours, 2) . "', is_fixed_billing=0 \r\n\t\t\t\t\t\t\tWHERE object_id=" . $ts_row['object_id']); $count++; } } } else { DB::execute("UPDATE " . TABLE_PREFIX . "timeslots SET is_fixed_billing=1 WHERE object_id=" . $ts_row['object_id']); } } return $count; }
function move_event() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $event = ProjectEvents::findById(get_id()); if (!$event->canEdit(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $is_read = $event->getIsRead(logged_user()->getId()); $year = array_var($_GET, 'year', $event->getStart()->getYear()); $month = array_var($_GET, 'month', $event->getStart()->getMonth()); $day = array_var($_GET, 'day', $event->getStart()->getDay()); $hour = array_var($_GET, 'hour', 0); $min = array_var($_GET, 'min', 0); if ($hour == -1) { $hour = format_date($event->getStart(), 'H', logged_user()->getTimezone()); } if ($min == -1) { $min = format_date($event->getStart(), 'i', logged_user()->getTimezone()); } if ($event->isRepetitive()) { $orig_date = DateTimeValueLib::dateFromFormatAndString('Y-m-d H:i:s', array_var($_GET, 'orig_date')); $diff = DateTimeValueLib::get_time_difference($orig_date->getTimestamp(), mktime($hour, $min, 0, $month, $day, $year)); $new_start = new DateTimeValue($event->getStart()->getTimestamp()); $new_start->add('d', $diff['days']); $new_start->add('h', $diff['hours']); $new_start->add('m', $diff['minutes']); if ($event->getRepeatH()) { $event->setRepeatDow(date("w", mktime($hour, $min, 0, $month, $day, $year)) + 1); $wnum = 0; $tmp_day = $new_start->getDay(); while ($tmp_day > 0) { $tmp_day -= 7; $wnum++; } $event->setRepeatWnum($wnum); } } else { $new_start = new DateTimeValue(mktime($hour, $min, 0, $month, $day, $year) - logged_user()->getTimezone() * 3600); } $diff = DateTimeValueLib::get_time_difference($event->getStart()->getTimestamp(), $event->getDuration()->getTimestamp()); $new_duration = new DateTimeValue($new_start->getTimestamp()); $new_duration->add('d', $diff['days']); $new_duration->add('h', $diff['hours']); $new_duration->add('m', $diff['minutes']); // see if we have to reload $os = format_date($event->getStart(), 'd', logged_user()->getTimezone()); $od = format_date($event->getDuration(), 'd', logged_user()->getTimezone()); $ohm = format_date($event->getDuration(), 'H:i', logged_user()->getTimezone()); $nd = format_date($new_duration, 'd', logged_user()->getTimezone()); $nhm = format_date($new_duration, 'H:i', logged_user()->getTimezone()); $different_days = $os != $od && $ohm != '00:00' || $day != $nd && $nhm != '00:00'; DB::beginWork(); $event->setStart($new_start->format("Y-m-d H:i:s")); $event->setDuration($new_duration->format("Y-m-d H:i:s")); $event->save(); if (!$is_read) { $event->setIsRead(logged_user()->getId(), false); } if ($event->getSpecialID() != "") { $this->sync_calendar_extern($event); } DB::commit(); ajx_extra_data($this->get_updated_event_data($event)); if ($different_days || $event->isRepetitive()) { ajx_current("reload"); } else { ajx_current("empty"); } }