12, 'default_year' => 'auto', 'show_tabs' => 'yes', ], $atts, 'academiccrew_courses_archive' ); $calc = new AcademicYearCalculator(); $default_year = match ( (string) $atts['default_year'] ) { 'auto' => $calc->calculate( 1 ), 'all' => null, default => (int) $atts['default_year'] ?: null, }; $periods = []; for ( $p = 1; $p <= PeriodCadence::period_count(); $p++ ) { $periods[] = [ 'value' => $p, 'label' => PeriodCadence::period_label( $p ), 'yearFmt' => $calc->format( $calc->calculate( $p ) ), ]; } wp_enqueue_style( 'academiccrew-courses-archive', ACADEMICCREW_URL . 'assets/css/courses-archive.css', [ 'fusion-stylesheet', 'tabler-icons' ], ACADEMICCREW_VERSION ); wp_enqueue_script( 'academiccrew-courses-archive', ACADEMICCREW_URL . 'assets/js/courses-archive.js', [], ACADEMICCREW_VERSION, true ); wp_localize_script( 'academiccrew-courses-archive', 'ACADEMICCREW_ARCHIVE', [ 'restUrl' => rest_url( 'academiccrew/v1/courses' ), 'filtersUrl' => rest_url( 'academiccrew/v1/courses/filters' ), 'nonce' => wp_create_nonce( 'wp_rest' ), 'perPage' => (int) $atts['per_page'], 'defaultYear' => $default_year, 'periods' => $periods, 'i18n' => [ 'all' => __( 'All courses', 'academiccrew' ), 'noResults' => __( 'No courses found with these filters.', 'academiccrew' ), 'loading' => __( 'Loading courses...', 'academiccrew' ), 'courses' => __( 'courses', 'academiccrew' ), 'course' => __( 'course', 'academiccrew' ), 'resetFilters' => __( 'Reset filters', 'academiccrew' ), 'sort' => __( 'Sort', 'academiccrew' ), 'sortCode' => __( 'Code A→Z', 'academiccrew' ), 'sortName' => __( 'Name A→Z', 'academiccrew' ), 'sortCfuDesc' => __( 'Credits ↓', 'academiccrew' ), 'sortCfuAsc' => __( 'Credits ↑', 'academiccrew' ), 'sortYearDesc' => __( 'Year ↓', 'academiccrew' ), 'sortYearAsc' => __( 'Year ↑', 'academiccrew' ), 'cfu' => 'CFU', 'viewCourse' => __( 'View course →', 'academiccrew' ), 'allYears' => __( 'All academic years', 'academiccrew' ), 'allDegrees' => __( 'All degree programmes', 'academiccrew' ), 'allInstructors' => __( 'All instructors', 'academiccrew' ), 'language' => __( 'Language', 'academiccrew' ), 'credits' => __( 'Credits', 'academiccrew' ), 'degreeProgram' => __( 'Degree programme', 'academiccrew' ), 'instructor' => __( 'Instructor', 'academiccrew' ), 'searchPlaceholder' => __( 'Search course or code...', 'academiccrew' ), ], ] ); ob_start(); ?>