コード例 #1
0
/**
 * Entry point for scheduling on DELETE, for which there are thee outcomes:
 *  - We don't do scheduling (disabled, no organizer, ...)
 *  - We are an ATTENDEE declining the meeting.
 *  - We are the ORGANIZER canceling the meeting.
 *   
 * @param DAVResource $deleted_resource The resource which has already been deleted
 */
function do_scheduling_for_delete(DAVResource $deleted_resource)
{
    // By the time we arrive here the resource *has* actually been deleted from disk
    // we can only fail to (de-)schedule the activity...
    global $request, $c;
    if (!isset($request) || isset($c->enable_auto_schedule) && !$c->enable_auto_schedule) {
        return true;
    }
    if ($deleted_resource->IsInSchedulingCollection()) {
        return true;
    }
    $caldav_data = $deleted_resource->GetProperty('dav-data');
    if (empty($caldav_data)) {
        return true;
    }
    $vcal = new vCalendar($caldav_data);
    $organizer = $vcal->GetOrganizer();
    if ($organizer === false || empty($organizer)) {
        dbg_error_log('schedule', 'Event has no organizer - no scheduling required.');
        return true;
    }
    if ($vcal->GetScheduleAgent() != 'SERVER') {
        dbg_error_log('schedule', 'SCHEDULE-AGENT=%s - no scheduling required.', $vcal->GetScheduleAgent());
        return true;
    }
    $organizer_email = preg_replace('/^mailto:/i', '', $organizer->Value());
    if ($request->principal->email() == $organizer_email) {
        return doItipOrganizerCancel($vcal);
    } else {
        if (isset($_SERVER['HTTP_SCHEDULE_REPLY']) && $_SERVER['HTTP_SCHEDULE_REPLY'] == 'F') {
            dbg_error_log('schedule', 'Schedule-Reply header set to "F" - no scheduling required.');
            return true;
        }
        return doItipAttendeeReply($vcal, 'DECLINED', $request->principal->email());
    }
}