예제 #1
0
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));
                }
            }
        }
    }
}
예제 #2
0
     $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;
         }
예제 #3
0
	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");
	}
예제 #4
0
 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'];
 }
예제 #5
0
 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;
 }
예제 #6
0
 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");
     }
 }