예제 #1
0
function fengoffice_reminder_email($reminder, &$ret)
{
    $object = $reminder->getObject();
    $date = $object->getColumnValue($reminder->getContext());
    $valid = true;
    Hook::fire('validate_reminder_email', $reminder, $valid);
    if (!$valid) {
        return;
    }
    if ($reminder->getContext() == "due_date" && ($object instanceof ProjectTask || $object instanceof ProjectMilestone)) {
        if ($object->isCompleted() || $object->isTrashed()) {
            // don't send due date reminders for completed or trashed tasks
            if ($object instanceof ProjectTask && $object->isRepetitive()) {
                // if repetitive task then don't delete the reminder, but disable it
                $reminder->setDate(EMPTY_DATETIME);
                $reminder->save();
            } else {
                $reminder->delete();
            }
            return;
        }
    }
    if (!$date instanceof DateTimeValue) {
        return;
    }
    // skip reminders without a date
    if ($date->getTimestamp() + 24 * 60 * 60 < DateTimeValueLib::now()->getTimestamp()) {
        // don't send reminders older than a day
        if ($object instanceof ProjectTask && $object->isRepetitive()) {
            // if repetitive task then don't delete the reminder, but disable it
            $reminder->setDate(EMPTY_DATETIME);
            $reminder->save();
        } else {
            $reminder->delete();
        }
        throw new Exception("Reminder too old");
    }
    Notifier::objectReminder($reminder);
    if ($object instanceof ProjectTask && $object->isRepetitive()) {
        // if repetitive task then don't delete the reminder, but disable it
        $reminder->setDate(EMPTY_DATETIME);
        $reminder->save();
    } else {
        $reminder->delete();
    }
    $ret++;
}