You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							214 lines
						
					
					
						
							6.3 KiB
						
					
					
				
			
		
		
	
	
							214 lines
						
					
					
						
							6.3 KiB
						
					
					
				<?php
 | 
						|
 | 
						|
/* For licensing terms, see /license.txt */
 | 
						|
 | 
						|
/**
 | 
						|
 * Responses to AJAX calls.
 | 
						|
 */
 | 
						|
$type = isset($_REQUEST['type']) && in_array($_REQUEST['type'], ['personal', 'course', 'admin']) ? $_REQUEST['type'] : 'personal';
 | 
						|
 | 
						|
if ('personal' === $type) {
 | 
						|
    $cidReset = true; // fixes #5162
 | 
						|
}
 | 
						|
 | 
						|
require_once __DIR__.'/../global.inc.php';
 | 
						|
 | 
						|
$action = $_REQUEST['a'] ?? null;
 | 
						|
$group_id = api_get_group_id();
 | 
						|
 | 
						|
if ('course' === $type) {
 | 
						|
    api_protect_course_script(true);
 | 
						|
}
 | 
						|
 | 
						|
$logInfo = [
 | 
						|
    'tool' => TOOL_CALENDAR_EVENT,
 | 
						|
    'action' => $action,
 | 
						|
];
 | 
						|
Event::registerLog($logInfo);
 | 
						|
 | 
						|
$agenda = new Agenda($type);
 | 
						|
// get filtered type
 | 
						|
$type = $agenda->getType();
 | 
						|
 | 
						|
switch ($action) {
 | 
						|
    case 'add_event':
 | 
						|
        if (!$agenda->getIsAllowedToEdit()) {
 | 
						|
            break;
 | 
						|
        }
 | 
						|
        if (false === Security::check_token('get')) {
 | 
						|
            exit;
 | 
						|
        }
 | 
						|
        $add_as_announcement = $_REQUEST['add_as_annonuncement'] ?? null;
 | 
						|
        $title = $_REQUEST['title'] ?? null;
 | 
						|
        $content = $_REQUEST['content'] ?? null;
 | 
						|
        $comment = $_REQUEST['comment'] ?? null;
 | 
						|
        $userToSend = $_REQUEST['users_to_send'] ?? [];
 | 
						|
 | 
						|
        echo $agenda->addEvent(
 | 
						|
            $_REQUEST['start'],
 | 
						|
            $_REQUEST['end'],
 | 
						|
            $_REQUEST['all_day'],
 | 
						|
            $title,
 | 
						|
            $content,
 | 
						|
            $userToSend,
 | 
						|
            $add_as_announcement,
 | 
						|
            null, //$parentEventId = null,
 | 
						|
            [], //$attachmentArray = array(),
 | 
						|
            null, //$attachmentComment = null,
 | 
						|
            $comment
 | 
						|
        );
 | 
						|
        break;
 | 
						|
    case 'edit_event':
 | 
						|
        if (!$agenda->getIsAllowedToEdit()) {
 | 
						|
            break;
 | 
						|
        }
 | 
						|
        if (false === Security::check_token('get')) {
 | 
						|
            exit;
 | 
						|
        }
 | 
						|
        $id_list = explode('_', $_REQUEST['id']);
 | 
						|
        $id = $id_list[1];
 | 
						|
        $title = $_REQUEST['title'] ?? null;
 | 
						|
        $content = $_REQUEST['content'] ?? null;
 | 
						|
        $agenda->editEvent(
 | 
						|
            $id,
 | 
						|
            $_REQUEST['start'],
 | 
						|
            $_REQUEST['end'],
 | 
						|
            $_REQUEST['all_day'],
 | 
						|
            $title,
 | 
						|
            $content
 | 
						|
        );
 | 
						|
        break;
 | 
						|
    case 'delete_event':
 | 
						|
        if (!$agenda->getIsAllowedToEdit()) {
 | 
						|
            break;
 | 
						|
        }
 | 
						|
        if (false === Security::check_token('get')) {
 | 
						|
            exit;
 | 
						|
        }
 | 
						|
        $id_list = explode('_', $_REQUEST['id']);
 | 
						|
        $id = $id_list[1];
 | 
						|
        $deleteAllEventsFromSerie = isset($_REQUEST['delete_all_events']) ? true : false;
 | 
						|
        $agenda->deleteEvent($id, $deleteAllEventsFromSerie);
 | 
						|
        break;
 | 
						|
    case 'resize_event':
 | 
						|
        if (!$agenda->getIsAllowedToEdit()) {
 | 
						|
            break;
 | 
						|
        }
 | 
						|
        if (false === Security::check_token('get')) {
 | 
						|
            exit;
 | 
						|
        }
 | 
						|
        $minute_delta = $_REQUEST['minute_delta'];
 | 
						|
        $id = explode('_', $_REQUEST['id']);
 | 
						|
        $id = $id[1];
 | 
						|
        $agenda->resizeEvent($id, $minute_delta);
 | 
						|
        break;
 | 
						|
    case 'move_event':
 | 
						|
        if (!$agenda->getIsAllowedToEdit()) {
 | 
						|
            break;
 | 
						|
        }
 | 
						|
        if (false === Security::check_token('get')) {
 | 
						|
            exit;
 | 
						|
        }
 | 
						|
        $minute_delta = $_REQUEST['minute_delta'];
 | 
						|
        $allDay = $_REQUEST['all_day'];
 | 
						|
        $id = explode('_', $_REQUEST['id']);
 | 
						|
        $id = $id[1];
 | 
						|
        $agenda->move_event($id, $minute_delta, $allDay);
 | 
						|
        break;
 | 
						|
    case 'get_events':
 | 
						|
        $filter = $_REQUEST['user_id'] ?? null;
 | 
						|
        $sessionId = $_REQUEST['session_id'] ?? null;
 | 
						|
        $result = $agenda->parseAgendaFilter($filter);
 | 
						|
 | 
						|
        $groupId = current($result['groups']);
 | 
						|
        $userId = current($result['users']);
 | 
						|
 | 
						|
        $start = isset($_REQUEST['start']) ? api_strtotime($_REQUEST['start']) : null;
 | 
						|
        $end = isset($_REQUEST['end']) ? api_strtotime($_REQUEST['end']) : null;
 | 
						|
 | 
						|
        if ('personal' === $type && !empty($sessionId)) {
 | 
						|
            $agenda->setSessionId($sessionId);
 | 
						|
        }
 | 
						|
 | 
						|
        $events = $agenda->getEvents(
 | 
						|
            $start,
 | 
						|
            $end,
 | 
						|
            api_get_course_int_id(),
 | 
						|
            $groupId,
 | 
						|
            $userId
 | 
						|
        );
 | 
						|
        header('Content-Type: application/json');
 | 
						|
        echo $events;
 | 
						|
        break;
 | 
						|
    case 'get_user_agenda':
 | 
						|
        // Used in the admin user list.
 | 
						|
        api_protect_admin_script();
 | 
						|
 | 
						|
        if (api_is_allowed_to_edit(null, true)) {
 | 
						|
            //@todo move this in the agenda class
 | 
						|
            $DaysShort = api_get_week_days_short();
 | 
						|
            $MonthsLong = api_get_months_long();
 | 
						|
 | 
						|
            $user_id = (int) $_REQUEST['user_id'];
 | 
						|
            $my_course_list = CourseManager::get_courses_list_by_user_id($user_id, true);
 | 
						|
            if (!is_array($my_course_list)) {
 | 
						|
                // this is for the special case if the user has no courses (otherwise you get an error)
 | 
						|
                $my_course_list = [];
 | 
						|
            }
 | 
						|
            $today = getdate();
 | 
						|
            $year = (!empty($_GET['year']) ? (int) $_GET['year'] : null);
 | 
						|
            if (null === $year) {
 | 
						|
                $year = $today['year'];
 | 
						|
            }
 | 
						|
            $month = (!empty($_GET['month']) ? (int) $_GET['month'] : null);
 | 
						|
            if (null === $month) {
 | 
						|
                $month = $today['mon'];
 | 
						|
            }
 | 
						|
            $day = (!empty($_GET['day']) ? (int) $_GET['day'] : null);
 | 
						|
            if (null === $day) {
 | 
						|
                $day = $today['mday'];
 | 
						|
            }
 | 
						|
            $monthName = $MonthsLong[$month - 1];
 | 
						|
            $week = null;
 | 
						|
 | 
						|
            $agendaitems = Agenda::get_myagendaitems(
 | 
						|
                $user_id,
 | 
						|
                $my_course_list,
 | 
						|
                $month,
 | 
						|
                $year
 | 
						|
            );
 | 
						|
            $agendaitems = Agenda::get_global_agenda_items(
 | 
						|
                $agendaitems,
 | 
						|
                $day,
 | 
						|
                $month,
 | 
						|
                $year,
 | 
						|
                $week,
 | 
						|
                "month_view"
 | 
						|
            );
 | 
						|
 | 
						|
            if ('true' === api_get_setting('allow_personal_agenda')) {
 | 
						|
                $agendaitems = Agenda::get_personal_agenda_items(
 | 
						|
                    $user_id,
 | 
						|
                    $agendaitems,
 | 
						|
                    $day,
 | 
						|
                    $month,
 | 
						|
                    $year,
 | 
						|
                    $week,
 | 
						|
                    "month_view"
 | 
						|
                );
 | 
						|
            }
 | 
						|
            Agenda::display_mymonthcalendar(
 | 
						|
                $user_id,
 | 
						|
                $agendaitems,
 | 
						|
                $month,
 | 
						|
                $year,
 | 
						|
                [],
 | 
						|
                $monthName,
 | 
						|
                false
 | 
						|
            );
 | 
						|
        }
 | 
						|
        break;
 | 
						|
    default:
 | 
						|
        echo '';
 | 
						|
}
 | 
						|
exit;
 | 
						|
 |