2023-05-17 21:19:14 +02:00
< ? php
2023-08-24 23:02:41 +02:00
// This file is part of the Studyplan plugin for Moodle
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <https://www.gnu.org/licenses/>.
/**
*
* @ package local_treestudyplan
* @ copyright 2023 P . M . Kuipers
* @ license https :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
2023-05-17 21:19:14 +02:00
require_once ( " ../../config.php " );
2023-06-16 11:59:36 +02:00
use \local_treestudyplan\courseservice ;
2023-05-17 21:19:14 +02:00
require_once ( $CFG -> libdir . '/weblib.php' );
$systemcontext = context_system :: instance ();
2023-08-24 23:02:41 +02:00
$PAGE -> set_url ( " /local/treestudyplan/view-plan.php " , array ());
2023-05-17 21:19:14 +02:00
require_login ();
2023-08-24 23:02:41 +02:00
// Figure out the context (category or system, based on either category or context parameter).
$categoryid = optional_param ( 'categoryid' , 0 , PARAM_INT ); // Category id.
$contextid = optional_param ( 'contextid' , 0 , PARAM_INT ); // Context id.
if ( $categoryid > 0 ) {
2023-05-17 21:19:14 +02:00
$studyplancontext = context_coursecat :: instance ( $categoryid );
}
2023-08-24 23:02:41 +02:00
else if ( $contextid > 0 ) {
2023-05-17 21:19:14 +02:00
$studyplancontext = context :: instance_by_id ( $contextid );
2023-08-24 23:02:41 +02:00
if ( in_array ( $studyplancontext -> contextlevel , [ CONTEXT_SYSTEM , CONTEXT_COURSECAT ]))
2023-05-17 21:19:14 +02:00
{
$categoryid = $studyplancontext -> instanceid ;
}
2023-08-24 23:02:41 +02:00
else
2023-05-17 21:19:14 +02:00
{
$studyplancontext = $systemcontext ;
}
}
else
{
2023-08-24 23:02:41 +02:00
// If no context is selected, find the first available one.
2023-06-16 13:49:05 +02:00
$available_contexts = courseservice :: list_accessible_categories_with_usage ( " view " );
2023-08-24 23:02:41 +02:00
$contextid = 1 ; // fallback to system context.
foreach ( $available_contexts as $ctx ) {
if ( $ctx -> count > 0 ) {
2023-06-16 13:49:05 +02:00
$contextid = $ctx -> ctxid ;
2023-06-16 11:59:36 +02:00
break ;
}
}
2023-08-24 23:02:41 +02:00
// reload page with selected category.
$url = new \moodle_url ( '/local/treestudyplan/view-plan.php' , [ " contextid " => $contextid ]);
2023-06-16 11:59:36 +02:00
header ( 'Location: ' . $url -> out ( false ), true , 302 );
exit ;
2023-05-17 21:19:14 +02:00
}
2023-08-24 23:02:41 +02:00
require_capability ( 'local/treestudyplan:viewuserreports' , $studyplancontext );
$contextname = $studyplancontext -> get_context_name ( false , false );
2023-05-17 21:19:14 +02:00
$PAGE -> set_pagelayout ( 'base' );
$PAGE -> set_context ( $studyplancontext );
2023-08-24 23:02:41 +02:00
$PAGE -> set_title ( get_string ( 'view_plan' , 'local_treestudyplan' ) . " - " . $contextname );
$PAGE -> set_heading ( get_string ( 'view_plan' , 'local_treestudyplan' ) . " - " . $contextname );
2023-05-17 21:19:14 +02:00
2023-08-24 23:02:41 +02:00
if ( $studyplancontext -> id > 1 ) {
2023-05-17 21:19:14 +02:00
navigation_node :: override_active_url ( new moodle_url ( '/course/index.php' , [ 'categoryid' => $categoryid ]));
2023-08-24 23:02:41 +02:00
$PAGE -> navbar -> add ( get_string ( 'view_plan' , 'local_treestudyplan' ));
2023-05-17 21:19:14 +02:00
}
2023-08-24 23:02:41 +02:00
// Load javascripts and specific css.
2023-08-19 17:54:40 +02:00
$PAGE -> requires -> css ( new moodle_url ( $CFG -> wwwroot . '/local/treestudyplan/css/bootstrap-vue/bootstrap-vue.css' ));
2023-05-17 21:19:14 +02:00
$PAGE -> requires -> css ( new moodle_url ( $CFG -> wwwroot . '/local/treestudyplan/css/devstyles.css' ));
2023-08-24 23:02:41 +02:00
$PAGE -> requires -> js_call_amd ( 'local_treestudyplan/page-view-plan' , 'init' , [ $studyplancontext -> id , $categoryid ]);
2023-05-17 21:19:14 +02:00
2023-08-24 23:02:41 +02:00
//Local translate function.
function t ( $str , $param = null , $plugin = 'local_treestudyplan' ) {
print get_string ( $str , $plugin , $param );
2023-05-17 21:19:14 +02:00
}
print $OUTPUT -> header ();
?>
< div id = 'root' >
< div class = 'vue-loader' v - show = 'false' >
< div class = " spinner-border text-primary " role = " status " >
< span class = " sr-only " > Loading ...</ span >
</ div >
</ div >
< div v - cloak >
2023-08-24 23:02:41 +02:00
< div v - if = '!activestudyplan && usedcontexts' class = 'ml-3 mb-3' >
2023-05-17 21:19:14 +02:00
< b - form - select text = '<?php print($contextname);?>' : value = " contextid " >
< b - form - select - option v - for = 'ctx in usedcontexts' : key = 'ctx.id' : value = " ctx.context_id " @ click = 'switchContext(ctx)'
: active = " ctx.context_id == contextid " : class = " (ctx.studyplancount > 0)?'font-weight-bold':'' "
2023-08-24 23:02:41 +02:00
>< span v - for = " (p, i) in ctx.category.path " >< span v - if = " i>0 " > / </ span > {{ p }} </ span > < span > ({{ ctx . studyplancount }}) </ b - form - select - option >
2023-05-17 21:19:14 +02:00
</ b - form - select >
</ div >
< h3 v - else >< ? php print $contextname ; ?> </h3>
< div class = " m-buttonbar " style = " margin-bottom: 1em; " >
< a href = '#' v - if = 'displayedstudyplan' @ click . prevent = 'closeStudyplan' >< i style = 'font-size: 150%;' class = 'fa fa-chevron-left' ></ i > < ? php t ( 'back' ); ?> </a>
< span v - if = 'displayedstudyplan' >< ? php t ( " studyplan_select " ); ?> </span>
2023-08-22 16:47:37 +02:00
< b - form - select v - if = 'displayedstudyplan' lazy : text = 'dropdown_title' >
2023-08-24 23:02:41 +02:00
< b - form - select - option v - for = '(studyplan, planindex) in studyplans' : key = 'studyplan.id' @ click = 'selectStudyplan(studyplan)' > {{ studyplan . name }} </ b - form - select - option >
2023-08-22 16:47:37 +02:00
</ b - form - select >& nbsp ;
2023-05-17 21:19:14 +02:00
< b - button variant = 'primary' v - if = 'associatedstudents && associatedstudents.length > 0' v - b - toggle . toolbox - sidebar >< ? php t ( 'selectstudent_btn' ) ?> </b-button>
</ div >
< div class = 't-studyplan-container' >
< h2 v - if = 'displayedstudyplan&& selectedstudent' > {{ selectedstudent . firstname }} {{ selectedstudent . lastname }} - {{ displayedstudyplan . name }} </ h2 >
< h2 v - else - if = 'displayedstudyplan' >< ? php t ( " showoverview " ); ?> - {{displayedstudyplan.name}}</h2>
< r - studyplan v - if = '!loadingstudyplan && displayedstudyplan' v - model = 'displayedstudyplan' : teachermode = '!selectedstudent' ></ r - studyplan >
< div v - else - if = 'loadingstudyplan' class = " spinner-border text-primary " role = " status " >
< span class = " sr-only " > Loading ...</ span >
</ div >
< div v - else class = 't-studyplan-notselected' >
< p >< ? php t ( " studyplan_noneselected " ); ?> </p>
< b - card - group deck >
2023-08-24 23:02:41 +02:00
< s - studyplan - card
v - for = '(studyplan, planindex) in studyplans'
: key = 'studyplan.id'
2023-05-17 21:19:14 +02:00
v - model = 'studyplans[planindex]'
open
@ open = 'selectStudyplan(studyplan)'
></ s - studyplan - card >
</ b - card - group >
</ div >
</ div >
< b - sidebar
id = " toolbox-sidebar "
right
shadow
title = '<?php t("selectstudent")?>'
>
< div class = 'm-2' >< ? php t ( " selectstudent_details " ) ?> </div>
< b - list - group v - if = " associatedstudents " >
< b - list - group - item : active = " ! selectedstudent "
button
variant = " primary "
@ click = 'showOverview()'
>
< ? php t ( " showoverview " ); ?>
</ b - list - group - item >
< b - list - group - item v - for = " student in associatedstudents " : key = " student.id "
: active = " selectedstudent && student.id == selectedstudent.id "
button
@ click = 'showStudentView(student)'
>
{{ student . firstname }} {{ student . lastname }}
</ b - list - group - item >
</ b - list - group >
</ b - sidebar >
</ div >
</ div >
< ? php
print $OUTPUT -> footer ();