Exemple #1
0
function getEventLimits($event, $date, &$event_start, &$event_duration, &$end_modified) {
	$end_modified = false;
	if ($event instanceof ProjectEvent) {
		$event_start = new DateTimeValue($event->getStart()->getTimestamp() + 3600 * logged_user()->getTimezone());
		$event_duration = new DateTimeValue($event->getDuration()->getTimestamp() + 3600 * logged_user()->getTimezone());
	
	} else if ($event instanceof ProjectTask) {/* @var $event ProjectTask */
		
		$work_day_start = new DateTimeValue($date->getTimestamp());
		$wsd = user_config_option('work_day_start_time');
		$work_day_start->setHour(substr($wsd, 0, strpos($wsd, ':')));
		$work_day_start->setMinute(substr($wsd, strpos($wsd, ':')+1));
		
		if ($event->getStartDate() instanceof DateTimeValue && $event->getStartDate()->getTimestamp() + 3600 * logged_user()->getTimezone() >= $work_day_start->getTimestamp()) {
			$event_start = new DateTimeValue($event->getStartDate()->getTimestamp() + 3600 * logged_user()->getTimezone());
		} else if (!$event->getStartDate() instanceof DateTimeValue && $event->getTimeEstimate() > 0 && $event->getDueDate() instanceof DateTimeValue) {
			$event_start = new DateTimeValue($event->getDueDate()->getTimestamp() + 3600 * logged_user()->getTimezone());
			$event_start->advance($event->getTimeEstimate() * -60);
		} else {
			$event_start = $work_day_start;
		}
		
		$work_day_end = new DateTimeValue($date->getTimestamp());
		$wed = user_config_option('work_day_end_time');
		$work_day_end->setHour(substr($wed, 0, strpos($wed, ':')));
		$work_day_end->setMinute(substr($wed, strpos($wed, ':')+1));
		
		if ($event->getDueDate() instanceof DateTimeValue && $event->getDueDate()->getTimestamp() + 3600 * logged_user()->getTimezone() <= $work_day_end->getTimestamp()) {
			$event_duration = new DateTimeValue($event->getDueDate()->getTimestamp() + 3600 * logged_user()->getTimezone());
		} else if (!$event->getDueDate() instanceof DateTimeValue && $event->getTimeEstimate() > 0 && $event->getStartDate() instanceof DateTimeValue) {
			$event_duration = new DateTimeValue($event_start->getTimestamp());
			$event_duration->advance($event->getTimeEstimate() * 60);
		} else {
			$event_duration = $work_day_end;
		}
	}
	
	$tomorrow = new DateTimeValue($date->getTimestamp());
	$tomorrow->add('d', 1);
	if ($event_duration->getTimestamp() > $tomorrow->getTimestamp()) {
		$event_duration = new DateTimeValue($tomorrow->getTimestamp());
		$end_modified = true;
	}
	if ($event_start->getTimestamp() < $date->getTimestamp()) {
		if (!$event->isRepetitive()) {
			$event_start = new DateTimeValue($date->getTimestamp());
		} else {
			$event_start->setDay($date->getDay());
			$event_start->setMonth($date->getMonth());
			$event_start->setYear($date->getYear());
		}
	}
}
/**
*
* @param array $params
* @param Smarty $smarty
* @return string
*/
function smarty_function_reminder($params, &$smarty)
{
    $object = array_var($params, 'object');
    $reminder_date = null;
    if (instance_of($object, 'ProjectObject')) {
        if ($object->isCompleted()) {
            return '';
        }
        // if
        $link = mysql_connect(DB_HOST, DB_USER, DB_PASS);
        mysql_select_db(DB_NAME, $link);
        $query = "select reminder_date from healingcrystals_project_object_misc where object_id='" . $object->getId() . "'";
        $result = mysql_query($query);
        if (mysql_num_rows($result)) {
            $info = mysql_fetch_assoc($result);
            if (!empty($info['reminder_date'])) {
                $reminder_date = DateTimeValue::makeFromString($info['reminder_date']);
            }
        }
        mysql_close($link);
    } else {
        return new InvalidParamError('object', $object, '$object is not expected to be an instance of ProjectObject', true);
    }
    // if
    $offset = get_user_gmt_offset();
    if (instance_of($reminder_date, 'DateTimeValue')) {
        require_once SMARTY_PATH . '/plugins/modifier.datetime.php';
        $date = smarty_modifier_datetime($reminder_date, 0);
        // just printing date, offset is 0!
        if ($reminder_date->isToday($offset)) {
            return '<span class="today"><span class="number">Reminder set for: ' . lang('Today') . ' ' . date('h:i A', $reminder_date->getTimestamp()) . '</span></span>';
        } elseif ($reminder_date->isYesterday($offset)) {
            return '<span class="late" title="' . clean($date) . '">Reminder set for: ' . lang('<span class="number">Yesterday ' . date('h:i A', $reminder_date->getTimestamp()) . '</span>') . '</span>';
        } elseif ($reminder_date->isTomorrow($offset)) {
            return '<span class="upcoming" title="' . clean($date) . '">Reminder set for: <span class="number">' . lang('Tomorrow') . ' ' . date('h:i A', $reminder_date->getTimestamp()) . '</span></span>';
        } else {
            $now = new DateTimeValue();
            $now->advance($offset);
            $now = $now->beginningOfDay();
            $reminder_date->beginningOfDay();
            if ($reminder_date->getTimestamp() > $now->getTimestamp()) {
                return '<span class="upcoming" title="' . clean($date) . '">Reminder set for: ' . date('F d, Y h:i A', $reminder_date->getTimestamp()) . lang(' (<span class="number">:days</span> Days)', array('days' => floor(($reminder_date->getTimestamp() - $now->getTimestamp()) / 86400))) . '</span>';
            } else {
                return '<span class="late" title="' . clean($date) . '">Reminder set for: ' . date('F d, Y h:i A', $reminder_date->getTimestamp()) . lang(' (<span class="number">:days</span> Days Late)', array('days' => floor(($now->getTimestamp() - $reminder_date->getTimestamp()) / 86400))) . '</span>';
            }
            // if
        }
        // if
    } else {
        return '';
    }
    // if
}
/**
 * Print due on string (due in, due today or late) for a given object
 *
 * @param array $params
 * @param Smarty $smarty
 * @return string
 */
function smarty_function_due($params, &$smarty)
{
    $object = array_var($params, 'object');
    $due_date = null;
    if (instance_of($object, 'ProjectObject')) {
        if ($object->can_be_completed) {
            if ($object->isCompleted()) {
                return lang('Completed');
            }
            // if
            $due_date = $object->getDueOn();
        } else {
            return '--';
        }
        // if
    } elseif (instance_of($object, 'Invoice')) {
        if ($object->getStatus() == INVOICE_STATUS_ISSUED) {
            $due_date = $object->getDueOn();
        } else {
            return '--';
        }
        // if
    } else {
        return new InvalidParamError('object', $object, '$object is not expected to be an instance of ProjectObject or Invoice class', true);
    }
    // if
    $offset = get_user_gmt_offset();
    if (instance_of($due_date, 'DateValue')) {
        require_once SMARTY_PATH . '/plugins/modifier.date.php';
        $date = smarty_modifier_date($due_date, 0);
        // just printing date, offset is 0!
        $reminder_string_begining = '';
        $reminder_string_end = '';
        $sql = "select auto_email_status, email_reminder_period, email_reminder_unit, email_reminder_time from healingcrystals_project_object_misc where object_id=? and auto_email_status='1'";
        $arguments = array($object->getId());
        $sql = db_prepare_string($sql, $arguments);
        $row = db_execute_all($sql);
        if (!empty($row)) {
            $entry = $row[0];
            $auto_email_status = array_var($entry, 'auto_email_status');
            $email_reminder_period = array_var($entry, 'email_reminder_period', '0');
            $email_reminder_unit = array_var($entry, 'email_reminder_unit', 'D');
            $email_reminder_time = array_var($entry, 'email_reminder_time', '06:00');
            $meridian = '';
            list($h, $m) = explode(':', $email_reminder_time);
            $h = (int) $h;
            if ($h > 12) {
                $h -= 12;
                $meridian = 'PM';
            } elseif ($h == 12) {
                $meridian = 'PM';
            } elseif ($h == 0) {
                $meridian = 'AM';
            } else {
                $meridian = 'AM';
            }
            $email_reminder_time = str_pad($h, 2, '0', STR_PAD_LEFT) . ':' . $m . ' ' . $meridian;
            $reminder_string_begining = 'Reminder set for ' . $email_reminder_period . ' ' . ($email_reminder_unit == 'D' ? 'Day(s)' : ($email_reminder_unit == 'W' ? 'Week(s)' : ($email_reminder_unit == 'M' ? 'Month(s)' : ''))) . " from Due Date: ";
            $reminder_string_end = " at " . $email_reminder_time;
        }
        if ($due_date->isToday($offset)) {
            if (!empty($reminder_string_begining)) {
                return '<span class="today">' . $reminder_string_begining . '<span class="number">' . lang('Today') . '</span>' . $reminder_string_end . '</span>';
            } else {
                return '<span class="today"><span class="number">' . lang('Due Today') . '</span></span>';
            }
        } elseif ($due_date->isYesterday($offset)) {
            if (!empty($reminder_string_begining)) {
                return '<span class="late" title="' . clean($date) . '">' . $reminder_string_begining . lang('<span class="number">1 Day Late</span>') . $reminder_string_end . '</span>';
            } else {
                return '<span class="late" title="' . clean($date) . '">' . lang('<span class="number">1 Day Late</span>') . '</span>';
            }
        } elseif ($due_date->isTomorrow($offset)) {
            if (!empty($reminder_string_begining)) {
                return '<span class="upcoming" title="' . clean($date) . '">' . $reminder_string_begining . '<span class="number">' . lang('Tomorrow') . '</span>' . $reminder_string_end . '</span>';
            } else {
                return '<span class="upcoming" title="' . clean($date) . '"><span class="number">' . lang('Due Tomorrow') . '</span></span>';
            }
        } else {
            $now = new DateTimeValue();
            $now->advance($offset);
            $now = $now->beginningOfDay();
            $due_date->beginningOfDay();
            if ($due_date->getTimestamp() > $now->getTimestamp()) {
                //return '<span class="upcoming" title="' . clean($date) . '">' . lang('Due in <span class="number">:days</span> Days', array('days' => floor(($due_date->getTimestamp() - $now->getTimestamp()) / 86400))) . '</span>';
                //return '<span class="upcoming" title="' . clean($date) . '">' . lang('<span class="number">:days</span> Days', array('days' => floor(($due_date->getTimestamp() - $now->getTimestamp()) / 86400))) . '</span>';
                if (!empty($reminder_string_begining)) {
                    return '<span class="upcoming" title="' . clean($date) . '">' . $reminder_string_begining . date('F d, Y', $due_date->getTimestamp()) . lang(' (<span class="number">:days</span> Days)', array('days' => floor(($due_date->getTimestamp() - $now->getTimestamp()) / 86400))) . $reminder_string_end . '</span>';
                } else {
                    return '<span class="upcoming" title="' . clean($date) . '">Due ' . date('F d, Y', $due_date->getTimestamp()) . lang(' (<span class="number">:days</span> Days)', array('days' => floor(($due_date->getTimestamp() - $now->getTimestamp()) / 86400))) . '</span>';
                }
            } else {
                //return '<span class="late" title="' . clean($date) . '">' . lang('<span class="number">:days</span> Days Late', array('days' => floor(($now->getTimestamp() - $due_date->getTimestamp()) / 86400))) . '</span>';
                if (!empty($reminder_string_begining)) {
                    return '<span class="late" title="' . clean($date) . '">' . $reminder_string_begining . date('F d, Y', $due_date->getTimestamp()) . lang(' (<span class="number">:days</span> Days Late)', array('days' => floor(($now->getTimestamp() - $due_date->getTimestamp()) / 86400))) . $reminder_string_end . '</span>';
                } else {
                    return '<span class="late" title="' . clean($date) . '">Due ' . date('F d, Y', $due_date->getTimestamp()) . lang(' (<span class="number">:days</span> Days Late)', array('days' => floor(($now->getTimestamp() - $due_date->getTimestamp()) / 86400))) . '</span>';
                }
            }
            // if
        }
        // if
    } else {
        //return lang('No Due Date');
        return lang('--');
    }
    // if
}
function smarty_function_recurring_info($params, &$smarty)
{
    $object = array_var($params, 'object');
    if (!instance_of($object, 'ProjectObject')) {
        return new InvalidParamError('object', $object, '$object is expected to be an instance of ProjectObject', true);
    }
    $info = '';
    $sql = "select recurring_period, recurring_period_type, recurring_period_condition, recurring_end_date from healingcrystals_project_object_misc where object_id=?";
    $arguments = array($object->getId());
    $sql = db_prepare_string($sql, $arguments);
    $row = db_execute_all($sql);
    if (!empty($row)) {
        $entry = $row[0];
        $recurring_period = array_var($entry, 'recurring_period');
        $recurring_period_type = array_var($entry, 'recurring_period_type');
        $recurring_period_condition = array_var($entry, 'recurring_period_condition');
        $recurring_end_date = array_var($entry, 'recurring_end_date');
        if (!empty($recurring_period) && !empty($recurring_period_type) && $recurring_period_condition) {
            $info = 'Recurring every ' . $recurring_period . ' ';
            switch ($recurring_period_type) {
                case 'D':
                    $info .= ' day(s) ';
                    break;
                case 'W':
                    $info .= ' week(s) ';
                    break;
                case 'M':
                    $info .= ' month(s) ';
                    break;
            }
            switch ($recurring_period_condition) {
                case 'after_due_date':
                    $info .= 'after Task is Due';
                    break;
                case 'after_task_complete':
                    $info .= 'after Task has been Completed';
                    break;
            }
            $info = '<span class="recurring">' . $info . '</span>';
        }
    }
    return $info;
    if (instance_of($due_date, 'DateValue')) {
        require_once SMARTY_PATH . '/plugins/modifier.date.php';
        $date = smarty_modifier_date($due_date, 0);
        // just printing date, offset is 0!
        $reminder_string_begining = '';
        $reminder_string_end = '';
        $sql = "select auto_email_status, email_reminder_period, email_reminder_unit, email_reminder_time from healingcrystals_project_object_misc where object_id=?";
        $arguments = array($object->getId());
        $sql = db_prepare_string($sql, $arguments);
        $row = db_execute_all($sql);
        if (!empty($row)) {
            $entry = $row[0];
            $auto_email_status = array_var($entry, 'auto_email_status');
            $email_reminder_period = array_var($entry, 'email_reminder_period', '0');
            $email_reminder_unit = array_var($entry, 'email_reminder_unit', 'D');
            $email_reminder_time = array_var($entry, 'email_reminder_time', '06:00');
            $meridian = '';
            list($h, $m) = explode(':', $email_reminder_time);
            $h = (int) $h;
            if ($h > 12) {
                $h -= 12;
                $meridian = 'PM';
            } elseif ($h == 0) {
                $meridian = 'PM';
            } else {
                $meridian = 'AM';
            }
            $email_reminder_time = str_pad($h, 2, '0', STR_PAD_LEFT) . ':' . $m . ' ' . $meridian;
            $reminder_string_begining = 'Reminder set for ' . $email_reminder_period . ' ' . ($email_reminder_unit == 'D' ? 'Day(s)' : ($email_reminder_unit == 'W' ? 'Week(s)' : ($email_reminder_unit == 'M' ? 'Month(s)' : ''))) . " from Due Date: ";
            $reminder_string_end = " at " . $email_reminder_time;
        }
        if ($due_date->isToday($offset)) {
            if (!empty($reminder_string_begining)) {
                return '<span class="today">' . $reminder_string_begining . '<span class="number">' . lang('Today') . '</span>' . $reminder_string_end . '</span>';
            } else {
                return '<span class="today"><span class="number">' . lang('Due Today') . '</span></span>';
            }
        } elseif ($due_date->isYesterday($offset)) {
            if (!empty($reminder_string_begining)) {
                return '<span class="late" title="' . clean($date) . '">' . $reminder_string_begining . lang('<span class="number">1 Day Late</span>') . $reminder_string_end . '</span>';
            } else {
                return '<span class="late" title="' . clean($date) . '">' . lang('<span class="number">1 Day Late</span>') . '</span>';
            }
        } elseif ($due_date->isTomorrow($offset)) {
            if (!empty($reminder_string_begining)) {
                return '<span class="upcoming" title="' . clean($date) . '">' . $reminder_string_begining . '<span class="number">' . lang('Tomorrow') . '</span>' . $reminder_string_end . '</span>';
            } else {
                return '<span class="upcoming" title="' . clean($date) . '"><span class="number">' . lang('Due Tomorrow') . '</span></span>';
            }
        } else {
            $now = new DateTimeValue();
            $now->advance($offset);
            $now = $now->beginningOfDay();
            $due_date->beginningOfDay();
            if ($due_date->getTimestamp() > $now->getTimestamp()) {
                //return '<span class="upcoming" title="' . clean($date) . '">' . lang('Due in <span class="number">:days</span> Days', array('days' => floor(($due_date->getTimestamp() - $now->getTimestamp()) / 86400))) . '</span>';
                //return '<span class="upcoming" title="' . clean($date) . '">' . lang('<span class="number">:days</span> Days', array('days' => floor(($due_date->getTimestamp() - $now->getTimestamp()) / 86400))) . '</span>';
                if (!empty($reminder_string_begining)) {
                    return '<span class="upcoming" title="' . clean($date) . '">' . $reminder_string_begining . date('F d, Y', $due_date->getTimestamp()) . lang(' (<span class="number">:days</span> Days)', array('days' => floor(($due_date->getTimestamp() - $now->getTimestamp()) / 86400))) . $reminder_string_end . '</span>';
                } else {
                    return '<span class="upcoming" title="' . clean($date) . '">Due ' . date('F d, Y', $due_date->getTimestamp()) . lang(' (<span class="number">:days</span> Days)', array('days' => floor(($due_date->getTimestamp() - $now->getTimestamp()) / 86400))) . '</span>';
                }
            } else {
                //return '<span class="late" title="' . clean($date) . '">' . lang('<span class="number">:days</span> Days Late', array('days' => floor(($now->getTimestamp() - $due_date->getTimestamp()) / 86400))) . '</span>';
                if (!empty($reminder_string_begining)) {
                    return '<span class="late" title="' . clean($date) . '">' . $reminder_string_begining . date('F d, Y', $due_date->getTimestamp()) . lang(' (<span class="number">:days</span> Days Late)', array('days' => floor(($now->getTimestamp() - $due_date->getTimestamp()) / 86400))) . $reminder_string_end . '</span>';
                } else {
                    return '<span class="late" title="' . clean($date) . '">Due ' . date('F d, Y', $due_date->getTimestamp()) . lang(' (<span class="number">:days</span> Days Late)', array('days' => floor(($now->getTimestamp() - $due_date->getTimestamp()) / 86400))) . '</span>';
                }
            }
            // if
        }
        // if
    } else {
        //return lang('No Due Date');
        return lang('--');
    }
    // if
}
 /**
  * Return upcoming objects in a given projects
  *
  * @param User $user
  * @param Project $project
  * @param array $types
  * @param integer $page
  * @param integer $per_page
  * @return array
  */
 function findUpcoming($user, $project = null, $types = null, $page = null, $per_page = null)
 {
     if (instance_of($project, 'Project')) {
         $type_filter = ProjectUsers::getVisibleTypesFilterByProject($user, $project, $types);
     } else {
         $type_filter = ProjectUsers::getVisibleTypesFilter($user, array(PROJECT_STATUS_ACTIVE), $types);
     }
     if ($type_filter) {
         $today = new DateTimeValue();
         $today->advance(get_user_gmt_offset());
         $newer_than = $today->endOfDay();
         $conditions = array($type_filter . ' AND due_on > ? AND state >= ? AND visibility >= ? AND completed_on IS NULL', $newer_than, STATE_VISIBLE, $user->getVisibility());
         if ($page !== null && $per_page !== null) {
             return ProjectObjects::paginate(array('conditions' => $conditions, 'order' => 'due_on, priority DESC'), $page, $per_page);
         } else {
             return ProjectObjects::find(array('conditions' => $conditions, 'order' => 'due_on, priority DESC'));
         }
         // if
     }
     // if
     return null;
 }
 function change_start_due_date()
 {
     $task = ProjectTasks::findById(get_id());
     if (!$task->canEdit(logged_user())) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     $tochange = array_var($_GET, 'tochange', '');
     if (($tochange == 'both' || $tochange == 'due') && $task->getDueDate() instanceof DateTimeValue) {
         $year = array_var($_GET, 'year', $task->getDueDate()->getYear());
         $month = array_var($_GET, 'month', $task->getDueDate()->getMonth());
         $day = array_var($_GET, 'day', $task->getDueDate()->getDay());
         $hour = array_var($_GET, 'hour', $task->getDueDate()->getHour());
         $minute = array_var($_GET, 'min', $task->getDueDate()->getMinute());
         $new_date = new DateTimeValue(mktime($hour, $minute, 0, $month, $day, $year));
         if (isset($_GET['hour']) && isset($_GET['min'])) {
             $new_date->advance(logged_user()->getTimezone() * -3600);
         }
         $task->setDueDate($new_date);
     }
     if (($tochange == 'both' || $tochange == 'start') && $task->getStartDate() instanceof DateTimeValue) {
         $year = array_var($_GET, 'year', $task->getStartDate()->getYear());
         $month = array_var($_GET, 'month', $task->getStartDate()->getMonth());
         $day = array_var($_GET, 'day', $task->getStartDate()->getDay());
         $hour = array_var($_GET, 'hour', $task->getStartDate()->getHour());
         $minute = array_var($_GET, 'min', $task->getStartDate()->getMinute());
         $new_date = new DateTimeValue(mktime($hour, $minute, 0, $month, $day, $year));
         if (isset($_GET['hour']) && isset($_GET['min'])) {
             $new_date->advance(logged_user()->getTimezone() * -3600);
         }
         $task->setStartDate($new_date);
     }
     try {
         DB::beginWork();
         $task->save();
         DB::commit();
     } catch (Exception $e) {
         DB::rollback();
         flash_error(lang('error change date'));
     }
     // try
     ajx_current("empty");
 }
Exemple #7
0
					<th width="15%"></th>
					<?php 
if (user_config_option("start_monday")) {
    ?>
						<th width='15%'></th>
					<?php 
}
?>
					<th id="ie_scrollbar_adjust" style="display:none;width:15px;padding:0px;margin:0px;"></th>
				</tr>
					<?php 
$date_start = new DateTimeValue($fd_ts);
$date_start->advance(-24 * 3600 * $firstday);
$ld_dow = date('w', $ld_ts);
$date_end = new DateTimeValue($ld_ts);
$date_end->advance(24 * 3600 * (6 - $ld_dow));
$milestones = ProjectMilestones::getRangeMilestones($date_start, $date_end);
if ($task_filter != "hide") {
    $tasks = ProjectTasks::getRangeTasksByUser($date_start, $date_end, $user_filter != -1 ? $user : null, $task_filter);
}
if (user_config_option('show_birthdays_in_calendar')) {
    $birthdays = Contacts::instance()->getRangeContactsByBirthday($date_start, $date_end, active_context_members(false));
} else {
    $birthdays = array();
}
$result = array();
if ($milestones) {
    $result = array_merge($result, $milestones);
}
if (isset($tasks)) {
    foreach ($tasks as $task) {
/**
*
* @param array $params
* @param Smarty $smarty
* @return string
* HISTORY
* 22 May 2012 (SA) Ticket #841: check recurring task reminder script
*/
function smarty_function_reminder($params, &$smarty)
{
    $object = array_var($params, 'object');
    $reminder_date = null;
    if (instance_of($object, 'ProjectObject')) {
        if ($object->isCompleted()) {
            return '';
        }
        // if
        $link = mysql_connect(DB_HOST, DB_USER, DB_PASS);
        mysql_select_db(DB_NAME, $link);
        //BOF:mod 20120904
        /*
        //EOF:mod 20120904
                $query = "select * from healingcrystals_project_object_misc where object_id='" . $object->getId() . "'";
        //BOF:mod 20120904
        */
        $query = "select a.reminder_date, a.recurring_period, a.recurring_period_type, b.completed_on from healingcrystals_project_object_misc a inner join healingcrystals_project_objects b on a.object_id=b.id where a.object_id='" . $object->getId() . "'";
        //EOF:mod 20120904
        $result = mysql_query($query);
        if (mysql_num_rows($result)) {
            $info = mysql_fetch_assoc($result);
            if (!empty($info['reminder_date']) && $info['reminder_date'] != '0000-00-00 00:00:00') {
                $reminder_date = DateTimeValue::makeFromString($info['reminder_date']);
            }
            //BOF:mod 20120904
            if (!empty($info['completed_on'])) {
                //EOF:mod 20120904
                if ($info['recurring_period_type'] != '' && $info['recurring_period'] != '') {
                    $recurring_period = $info['recurring_period'];
                    $recurring_period_type = $info['recurring_period_type'];
                    switch ($recurring_period_type) {
                        case 'D':
                            $recurring_period_type = 'day' . ($recurring_period == 1 ? '' : 's');
                            break;
                        case 'W':
                            $recurring_period_type = 'week' . ($recurring_period == 1 ? '' : 's');
                            break;
                        case 'M':
                            $recurring_period_type = 'month' . ($recurring_period == 1 ? '' : 's');
                            break;
                        case 'Y':
                            $recurring_period_type = 'year' . ($recurring_period == 1 ? '' : 's');
                            break;
                    }
                    $datetime = new DateTime();
                    $datetime->modify('+' . $recurring_period . ' ' . $recurring_period_type);
                    //BOF:mod 20120703
                    if (!empty($reminder_date)) {
                        $temp_date = $reminder_date;
                    }
                    //EOF:mod 20120703
                    $reminder_date = DateTimeValue::makeFromString($datetime->format('Y-m-d H:00'));
                    //BOF:mod 20120703
                    if (!empty($temp_date) && $temp_date->getTimestamp() >= time()) {
                        $reminder_date = $temp_date;
                    }
                    //EOF:mod 20120703
                }
                //BOF:mod 20120904
            }
            //EOF:mod 20120904
        }
        mysql_close($link);
    } else {
        return new InvalidParamError('object', $object, '$object is not expected to be an instance of ProjectObject', true);
    }
    // if
    $offset = get_user_gmt_offset();
    if (instance_of($reminder_date, 'DateTimeValue')) {
        require_once SMARTY_PATH . '/plugins/modifier.datetime.php';
        $date = smarty_modifier_datetime($reminder_date, 0);
        // just printing date, offset is 0!
        if ($reminder_date->isToday($offset)) {
            return '<span class="today"><span class="number">Reminder set for: ' . lang('Today') . ' ' . date('h:i A', $reminder_date->getTimestamp()) . '</span></span>';
        } elseif ($reminder_date->isYesterday($offset)) {
            return '<span class="late" title="' . clean($date) . '">Reminder set for: ' . lang('<span class="number">Yesterday ' . date('h:i A', $reminder_date->getTimestamp()) . '</span>') . '</span>';
        } elseif ($reminder_date->isTomorrow($offset)) {
            return '<span class="upcoming" title="' . clean($date) . '">Reminder set for: <span class="number">' . lang('Tomorrow') . ' ' . date('h:i A', $reminder_date->getTimestamp()) . '</span></span>';
        } else {
            $now = new DateTimeValue();
            $now->advance($offset);
            $now = $now->beginningOfDay();
            $reminder_date->beginningOfDay();
            if ($reminder_date->getTimestamp() > $now->getTimestamp()) {
                return '<span class="upcoming" title="' . clean($date) . '">Reminder set for: ' . date('F d, Y h:i A', $reminder_date->getTimestamp()) . lang(' (<span class="number">:days</span> Days)', array('days' => floor(($reminder_date->getTimestamp() - $now->getTimestamp()) / 86400))) . '</span>';
            } else {
                return '<span class="late" title="' . clean($date) . '">Reminder set for: ' . date('F d, Y h:i A', $reminder_date->getTimestamp()) . lang(' (<span class="number">:days</span> Days Late)', array('days' => floor(($now->getTimestamp() - $reminder_date->getTimestamp()) / 86400))) . '</span>';
            }
            // if
        }
        // if
    } else {
        return '';
    }
    // if
}
 function snoozereminder()
 {
     $snooze = $this->request->post('snooze');
     $link = mysql_connect(DB_HOST, DB_USER, DB_PASS);
     mysql_select_db(DB_NAME);
     if ($snooze) {
         /*mysql_query("update healingcrystals_project_object_misc set snooze_duration='" . (int)$snooze['duration'] . "', snooze_unit='" . $snooze['unit'] . "' where object_id='" . $this->active_task->getId() . "'");
         		$query = "select reminder_date from healingcrystals_project_object_misc where object_id='" . $this->active_task->getId() . "'";
         		$result = mysql_query($query);
         		if (mysql_num_rows($result)){
         			$info = mysql_fetch_assoc($result);
         			if (!empty($info['reminder_date']) && $info['reminder_date']!='0000-00-00 00:00:00'){
         				$base_date = strtotime($info['reminder_date']);
         				$modified_date = '';
         				if ($snooze['duration']>0){
         					switch($snooze['unit']){
         						case 'H':
         							$modified_date = strtotime('+ ' . $snooze['duration'] . ' hours', $base_date);
         							break;
         						case 'D':
         							$modified_date = strtotime('+ ' . $snooze['duration'] . ' days', $base_date);
         							break;
         						case 'W':
         							$modified_date = strtotime('+ ' . $snooze['duration'] . ' weeks', $base_date);
         							break;
         						case 'M':
         							$modified_date = strtotime('+ ' . $snooze['duration'] . ' months', $base_date);
         							break;
         					}
         					if (!empty($modified_date)){
         						mysql_query("update healingcrystals_project_object_misc set reminder_date='" . date('Y-m-d H:i:s', $modified_date) . "' where object_id='" . $this->active_task->getId() . "'");
         					}
         				}
         			}
         		}*/
         //$query = mysql_query("select now() as cur_time");
         //$info = mysql_fetch_assoc($query);
         //$base_date = strtotime($info['cur_time']);
         $base_date = new DateTimeValue();
         $base_date->advance(get_system_gmt_offset($this->logged_user), true);
         //$base_date->advance(get_user_gmt_offset($this->logged_user), true);
         $modified_date = '';
         if ($snooze['duration'] > 0) {
             switch ($snooze['unit']) {
                 case 'I':
                     $modified_date = strtotime('+ ' . $snooze['duration'] . ' minutes', $base_date->getTimestamp());
                     break;
                 case 'H':
                     $modified_date = strtotime('+ ' . $snooze['duration'] . ' hours', $base_date->getTimestamp());
                     break;
                 case 'D':
                     $modified_date = strtotime('+ ' . $snooze['duration'] . ' days', $base_date->getTimestamp());
                     break;
                 case 'W':
                     $modified_date = strtotime('+ ' . $snooze['duration'] . ' weeks', $base_date->getTimestamp());
                     break;
                 case 'M':
                     $modified_date = strtotime('+ ' . $snooze['duration'] . ' months', $base_date->getTimestamp());
                     break;
             }
             if (!empty($modified_date)) {
                 $sql = "select object_id from " . TABLE_PREFIX . "project_object_misc where object_id='" . $this->active_task->getId() . "'";
                 $result = mysql_query($sql);
                 if (mysql_num_rows($result)) {
                     mysql_query("update healingcrystals_project_object_misc set last_modified=now(),  snooze_datetime='" . date('Y-m-d H:i:s', $modified_date) . "' where object_id='" . $this->active_task->getId() . "'");
                 } else {
                     mysql_query("insert into " . TABLE_PREFIX . "project_object_misc (object_id, date_added, snooze_datetime) values ('" . $this->active_task->getId() . "', now(), '" . date('Y-m-d H:i:s', $modified_date) . "')");
                 }
             }
         }
         $this->redirectToUrl($this->active_task->getViewUrl() . '#task' . $this->active_task->getId());
     } else {
         /*$snooze = array('duration' => '', 'unit' => '');
         		$result = mysql_query("select snooze_duration, snooze_unit from healingcrystals_project_object_misc where object_id='" . $this->active_task->getId() . "'");
         		if (mysql_num_rows($result)){
         			$info = mysql_fetch_assoc($result);
         			if (!empty($info['snooze_duration'])) $snooze['duration'] = $info['snooze_duration'];
         			if (!empty($info['snooze_unit'])) $snooze['unit'] = $info['snooze_unit'];
         		}*/
         $snooze_date = 'Not Set';
         $result = mysql_query("select snooze_datetime from healingcrystals_project_object_misc where object_id='" . $this->active_task->getId() . "'");
         if (mysql_num_rows($result)) {
             $info = mysql_fetch_assoc($result);
             if (!empty($info['snooze_datetime'])) {
                 $snooze_date = date('m-d-Y H:i', strtotime($info['snooze_datetime']));
             }
         }
     }
     mysql_close($link);
     $this->smarty->assign(array('form_action_url' => assemble_url('project_task_snoozereminder', array('project_id' => $this->active_project->getId(), 'task_id' => $this->active_task->getId())), 'snooze_date' => $snooze_date));
 }
Exemple #10
0
function replicateRepetitiveTaskForCalendarRawTask($task, $from_date, $to_date)
{
    $new_task_array = array();
    if ($task['repeat_forever'] > 0 || $task['repeat_num'] > 0 || $task['repeat_end'] != EMPTY_DATETIME) {
        $res = forwardRepDateRawTask($task, $from_date);
        $ref_date = $res['date'];
        $top_repeat_num = $task['repeat_num'] - $res['count'];
        $last_repeat = $task['repeat_end'] != EMPTY_DATETIME ? new DateTimeValue(strtotime($task['repeat_end'])) : null;
        if ($task['repeat_num'] > 0 && $top_repeat_num <= 0 || $last_repeat instanceof DateTimeValue && $last_repeat->getTimestamp() < $ref_date->getTimestamp()) {
            return array();
        }
        $num_repetitions = 0;
        while ($ref_date->getTimestamp() < $to_date->getTimestamp()) {
            if ($task['repeat_by'] == 'start_date' && $task['start_date'] == EMPTY_DATETIME) {
                return $new_task_array;
            }
            if ($task['repeat_by'] == 'due_date' && $task['due_date'] == EMPTY_DATETIME) {
                return $new_task_array;
            }
            if ($task['repeat_by'] == 'start_date') {
                $diff = $ref_date->getTimestamp() - strtotime($task['start_date']);
                $task['start_date'] = $ref_date->toMySQL();
                if ($task['due_date'] != EMPTY_DATETIME) {
                    $dd = new DateTimeValue(strtotime($task['due_date']));
                    $dd->advance($diff);
                    $task['due_date'] = $dd->toMySQL();
                }
            } else {
                if ($task['repeat_by'] == 'due_date') {
                    $diff = $ref_date->getTimestamp() - strtotime($task['due_date']);
                    $task['due_date'] = $ref_date->toMySQL();
                    if ($task['start_date'] != EMPTY_DATETIME) {
                        $sd = new DateTimeValue(strtotime($task['start_date']));
                        $sd->advance($diff);
                        $task['start_date'] = $sd->toMySQL();
                    }
                }
            }
            $new_task = array();
            foreach ($task as $k => $v) {
                $new_task[$k] = $v;
            }
            $new_due_date = null;
            $new_st_date = null;
            if ($task['start_date'] != EMPTY_DATETIME) {
                $new_st_date = new DateTimeValue(strtotime($task['start_date']));
            }
            if ($task['due_date'] != EMPTY_DATETIME) {
                $new_due_date = new DateTimeValue(strtotime($task['due_date']));
            }
            if ($task['repeat_d'] > 0) {
                if ($new_st_date instanceof DateTimeValue) {
                    $new_st_date = $new_st_date->add('d', $task['repeat_d']);
                }
                if ($new_due_date instanceof DateTimeValue) {
                    $new_due_date = $new_due_date->add('d', $task['repeat_d']);
                }
                $ref_date->add('d', $task['repeat_d']);
            } else {
                if ($task['repeat_m'] > 0) {
                    if ($new_st_date instanceof DateTimeValue) {
                        $new_st_date = $new_st_date->add('M', $task['repeat_m']);
                    }
                    if ($new_due_date instanceof DateTimeValue) {
                        $new_due_date = $new_due_date->add('M', $task['repeat_m']);
                    }
                    $ref_date->add('M', $task['repeat_m']);
                } else {
                    if ($task['repeat_y'] > 0) {
                        if ($new_st_date instanceof DateTimeValue) {
                            $new_st_date = $new_st_date->add('y', $task['repeat_y']);
                        }
                        if ($new_due_date instanceof DateTimeValue) {
                            $new_due_date = $new_due_date->add('y', $task['repeat_y']);
                        }
                        $ref_date->add('y', $task['repeat_y']);
                    }
                }
            }
            if ($new_st_date instanceof DateTimeValue) {
                $new_task['start_date'] = $new_st_date->toMySQL();
            }
            if ($new_due_date instanceof DateTimeValue) {
                $new_task['due_date'] = $new_due_date->toMySQL();
            }
            $num_repetitions++;
            if ($top_repeat_num > 0 && $top_repeat_num == $num_repetitions) {
                break;
            }
            if ($last_repeat instanceof DateTimeValue && $last_repeat->getTimestamp() < $ref_date->getTimestamp()) {
                break;
            }
            $new_task_array[] = $new_task;
            $task = array();
            foreach ($new_task as $k => $v) {
                $task[$k] = $v;
            }
        }
    } else {
        return array($task);
    }
    return $new_task_array;
}