<?php
/* For licensing terms, see /license.txt */

/**
 * Template (front controller in MVC pattern) used for dispatching
 * to the controllers depend on the current action.
 *
 * @author Christian Fasanando <christian1827@gmail.com>
 * @author Julio Montoya <gugli100@gmail.com> Bug fixing, sql improvements
 *
 * @package chamilo.attendance
 */
require_once __DIR__.'/../inc/global.inc.php';
require_once 'attendance_controller.php';
require_once api_get_path(SYS_CODE_PATH).'gradebook/lib/fe/exportgradebook.php';

$current_course_tool = TOOL_ATTENDANCE;

// current section
$this_section = SECTION_COURSES;

// protect a course script
api_protect_course_script(true);

// Get actions
$actions = [
    'attendance_list',
    'attendance_sheet_list',
    'attendance_sheet_add',
    'attendance_add',
    'attendance_edit',
    'attendance_delete',
    'attendance_delete_select',
    'attendance_set_invisible',
    'attendance_set_invisible_select',
    'attendance_set_visible',
    'attendance_set_visible_select',
    'attendance_restore',
    'attendance_sheet_export_to_pdf',
    'attendance_sheet_list_no_edit',
    'calendar_logins',
];

$actions_calendar = [
    'calendar_list',
    'calendar_add',
    'calendar_edit',
    'calendar_delete',
    'calendar_all_delete',
];

$action = 'attendance_list';

$course_id = '';
if (isset($_GET['cidReq'])) {
    $course_id = $_GET['cidReq'];
}

if (isset($_GET['action']) &&
    (in_array($_GET['action'], $actions) || in_array($_GET['action'], $actions_calendar))
) {
    $action = $_GET['action'];
}
if (isset($_GET['isStudentView']) && $_GET['isStudentView'] == 'true') {
    $action = 'attendance_list';
}

// get attendance id
$attendance_id = 0;
if (isset($_GET['attendance_id'])) {
    $attendance_id = intval($_GET['attendance_id']);
}

// get calendar id
$calendar_id = '';
if (isset($_GET['calendar_id'])) {
    $calendar_id = intval($_GET['calendar_id']);
}

// instance attendance object for using like library here
$attendance = new Attendance();

// attendance controller object
$attendanceController = new AttendanceController();
$attendance_data = [];
// get attendance data
if (!empty($attendance_id)) {
    // attendance data by id
    $attendance_data = $attendance->get_attendance_by_id($attendance_id);
}

$htmlHeadXtra[] = '<script>
$(function() {
    $("table th img").click(function() {
        var col_id = this.id;
        var col_split = col_id.split("_");
        var calendar_id = col_split[2];
        var class_img = $(this).attr("class");

        if (class_img == "img_unlock") {
            //lock
            $(".checkbox_head_"+calendar_id).attr("disabled", true);

            $(".row_odd  td.checkboxes_col_"+calendar_id).css({
                "opacity":"1",
                "background-color":"#F9F9F9",   
                "border-left":"none",
                "border-right":"none"
            });
            $(".row_even td.checkboxes_col_"+calendar_id).css({
                "opacity":"1","background-color":"#FFF",      "border-left":"none","border-right":"none"
            });
            $(".checkboxes_col_"+calendar_id+" input:checkbox").attr("disabled",true);
            $(this).attr("src","'.Display::returnIconPath('lock-closed.png').'");
            $(this).attr("title","'.get_lang('Unlock date').'");
            $(this).attr("alt","'.get_lang('Unlock date').'");
            $(this).attr("class","img_lock");
            $("#hidden_input_"+calendar_id).attr("value","");
            $("#hidden_input_"+calendar_id).attr("disabled",true);
            return false;
        } else {
            //Unlock
            $(".checkbox_head_"+calendar_id).attr("disabled", false);
            $(".checkbox_head_"+calendar_id).removeAttr("disabled");

            $(".row_odd  td.checkboxes_col_"+calendar_id).css({
                "opacity":"1",
                "background-color":"#dcdcdc", 
                "border-left":"1px #bbb solid", 
                "border-right":"1px #bbb solid", 
                "z-index":"1"
            });
            $(".row_even td.checkboxes_col_"+calendar_id).css({
                "opacity":"1",
                "background-color":"#eee", 
                "border-left":"1px #bbb solid", 
                "border-right":"1px #bbb solid", 
                "z-index":"1"
            });

            $(".checkboxes_col_"+calendar_id).mouseover(function() {
                //$(".checkbox_head_"+calendar_id).removeAttr("opacity");
                //$("row_even td.checkboxes_col_"+calendar_id).css({"opacity":"1","background-color":"red", "border-left":"1px #EEEE00 solid", "border-right":"1px #EEEE00 solid" , "border-bottom":"1px #ccc solid" });
                //$("row_odd  td.checkboxes_col_"+calendar_id).css({"opacity":"1","background-color":"#FFF",       "border-left":"1px #EEEE00 solid", "border-right":"1px #EEEE00 solid" , "border-bottom":"1px #ccc solid" });
            });

            $(".checkboxes_col_"+calendar_id).mouseout(function() {
                //    $("row_even td.checkboxes_col_"+calendar_id).css({"opacity":"1","background-color":"#F9F9F9", "border-left":"1px #EEEE00 solid", "border-right":"1px #EEEE00 solid" , "border-bottom":"1px #ccc solid" });
                //    $("row_odd  td.checkboxes_col_"+calendar_id).css({"opacity":"1","background-color":"#FFF",       "border-left":"1px #EEEE00 solid", "border-right":"1px #EEEE00 solid" , "border-bottom":"1px #ccc solid" });
            });

            $(".checkboxes_col_"+calendar_id+" input:checkbox").attr("disabled",false);
            $(this).attr("src","'.Display::returnIconPath('lock-open.png').'");
            $(this).attr("title","'.get_lang('Lock date').'");
            $(this).attr("alt","'.get_lang('Lock date').'");
            $(this).attr("class","img_unlock");
            $("#hidden_input_"+calendar_id).attr("disabled",false);
            $("#hidden_input_"+calendar_id).attr("value",calendar_id);
            return false;
        }
    });

    $("table th input:checkbox").click(function() {
        var col_id = this.id;
        var col_split = col_id.split("_");
        var calendar_id = col_split[2];

        if (this.checked) {
            $(".checkboxes_col_"+calendar_id+" input:checkbox").prop("checked",true);
            $(".checkboxes_col_"+calendar_id+"").addClass("row_selected");
        } else {
            $(".checkboxes_col_"+calendar_id+" input:checkbox").prop("checked",false);
            $(".checkboxes_col_"+calendar_id+"").removeClass("row_selected");
        }
    });

    $(".attendance-sheet-content .row_odd, .attendance-sheet-content .row_even").mouseover(function() {
        $(".row_odd").css({"background-color":"#F9F9F9"});
        $(".row_even").css({"background-color":"#FFF"});
    });
    $(".attendance-sheet-content .row_odd, .attendance-sheet-content .row_even").mouseout(function() {
        $(".row_odd").css({"background-color":"#F9F9F9"});
        $(".row_even").css({"background-color":"#FFF"});
    });
});

</script>';
$student_param = '';
$student_id = null;

if (api_is_drh() && isset($_GET['student_id'])) {
    $student_id = intval($_GET['student_id']);
    $student_param = '&student_id='.$student_id;
    $student_info = api_get_user_info($student_id);
    $interbreadcrumb[] = [
        'url' => api_get_path(WEB_CODE_PATH).'mySpace/myStudents.php?student='.$student_id,
        'name' => $student_info['complete_name'],
    ];
}
if (api_is_in_gradebook()) {
    $interbreadcrumb[] = [
        'url' => api_get_path(WEB_CODE_PATH).'gradebook/index.php?'.api_get_cidreq(),
        'name' => get_lang('Assessments'),
    ];
}
$interbreadcrumb[] = [
    'url' => 'index.php?'.api_get_cidreq().'&action=attendance_list&'.$student_param,
    'name' => get_lang('Attendances'),
];
if ($action == 'attendance_add') {
    $interbreadcrumb[] = ['url' => '#', 'name' => get_lang('Create a new attendance list')];
}
if ($action == 'attendance_edit') {
    $interbreadcrumb[] = ['url' => '#', 'name' => get_lang('Edit')];
}
if ($action == 'attendance_sheet_list' || $action == 'attendance_sheet_add') {
    $interbreadcrumb[] = ['url' => '#', 'name' => $attendance_data['name']];
}
if ($action == 'calendar_list' || $action == 'calendar_edit' || $action == 'calendar_delete' ||
    $action == 'calendar_all_delete'
) {
    $interbreadcrumb[] = [
        'url' => 'index.php?'.api_get_cidreq().'&action=attendance_sheet_list&attendance_id='.$attendance_id,
        'name' => $attendance_data['name'],
    ];
    $interbreadcrumb[] = ['url' => '#', 'name' => get_lang('Attendance calendar')];
}
if ($action == 'calendar_add') {
    $interbreadcrumb[] = [
        'url' => 'index.php?'.api_get_cidreq().'&action=attendance_sheet_list&attendance_id='.$attendance_id,
        'name' => $attendance_data['name'],
    ];
    $interbreadcrumb[] = ['url' => '#', 'name' => get_lang('Add a date and time')];
}

$allowToEdit = api_is_allowed_to_edit(null, true);

// Delete selected attendance
if (isset($_POST['action']) && $_POST['action'] == 'attendance_delete_select' && $allowToEdit) {
    $attendanceController->attendance_delete($_POST['id']);
}

if (isset($_POST['action']) && $_POST['action'] == 'attendance_set_invisible_select' && $allowToEdit) {
    $attendanceController->attendanceSetInvisible($_POST['id']);
}

if (isset($_POST['action']) && $_POST['action'] == 'attendance_set_visible_select' && $allowToEdit) {
    $attendanceController->attendanceSetVisible($_POST['id']);
}

switch ($action) {
    case 'attendance_list':
        $attendanceController->attendance_list();
        break;
    case 'attendance_add':
        if ($allowToEdit) {
            $attendanceController->attendance_add();
        } else {
            api_not_allowed(true);
        }
        break;
    case 'attendance_edit':
        if ($allowToEdit) {
            $attendanceController->attendance_edit($attendance_id);
        } else {
            api_not_allowed(true);
        }
        break;
    case 'attendance_delete':
        if ($allowToEdit) {
            $attendanceController->attendance_delete($attendance_id);
            Display::addFlash(Display::return_message(get_lang('Deleted')));
        } else {
            api_not_allowed(true);
        }
        break;
    case 'attendance_set_invisible':
        if ($allowToEdit) {
            $attendanceController->attendanceSetInvisible($attendance_id);
        } else {
            api_not_allowed(true);
        }
        break;
    case 'attendance_set_visible':
        if ($allowToEdit) {
            $attendanceController->attendanceSetVisible($attendance_id);
        } else {
            api_not_allowed(true);
        }
        break;
    /*case 'attendance_restore':
        if ($allowToEdit) {
            $attendanceController->attendance_restore($attendance_id);
        } else {
            api_not_allowed(true);
        }
        break;*/
    case 'attendance_sheet_list':
        $attendanceController->attendance_sheet(
            $action,
            $attendance_id,
            $student_id,
            true
        );
        break;
    case 'attendance_sheet_list_no_edit':
        $attendanceController->attendance_sheet(
            $action,
            $attendance_id,
            $student_id,
            false
        );
        break;
    case 'attendance_sheet_export_to_pdf':
        $attendanceController->attendance_sheet_export_to_pdf(
            $action,
            $attendance_id,
            $student_id,
            $course_id
        );
        break;
    case 'attendance_sheet_add':
        if ($allowToEdit) {
            $attendanceController->attendance_sheet($action, $attendance_id);
        } else {
            api_not_allowed(true);
        }
        break;
    case 'lock_attendance':
    case 'unlock_attendance':
        if ($allowToEdit) {
            $attendanceController->lock_attendance($action, $attendance_id);
        } else {
            api_not_allowed(true);
        }
        break;
    case 'calendar_add':
    case 'calendar_edit':
    case 'calendar_all_delete':
    case 'calendar_delete':
        if (!$allowToEdit) {
            api_not_allowed(true);
        }
        //no break
    case 'calendar_list':
        $attendanceController->attendance_calendar(
            $action,
            $attendance_id,
            $calendar_id
        );
        break;
    case 'calendar_logins':
        if (api_is_course_admin() || api_is_drh()) {
            $attendanceController->getAttendanceBaseInLogin(false, true);
        }
        break;
    default:
        $attendanceController->attendance_list();
}
