2020-09-03 21:25:42 +02:00
< ? php
// 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 <http://www.gnu.org/licenses/>.
/**
* External Web Service Template
*
* @ package mod_timetable
* @ copyright 2020 Raphael Dannecker < raphael . dannecker @ steinbeisschule - reutlingen . de >
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
require_once ( $CFG -> libdir . " /externallib.php " );
2020-12-05 10:03:20 +00:00
require_once ( " classes/import.php " );
2020-09-03 21:25:42 +02:00
class mod_timetable_external extends external_api {
2020-12-05 10:03:20 +00:00
/**
* Returns description of method parameters
* @ return external_function_parameters
*/
public static function search_parameters () {
return new external_function_parameters (
array ( 'searchstring' => new external_value ( PARAM_TEXT , 'The searchstring.' , VALUE_DEFAULT , '' ))
);
}
2020-09-03 21:25:42 +02:00
2020-12-05 10:03:20 +00:00
/**
* Returns welcome message
* @ return search result message
*/
public static function search ( $searchstring = 'Hello world, ' ) {
global $USER , $DB ;
2020-09-03 21:25:42 +02:00
2020-12-05 10:03:20 +00:00
//Parameter validation
//REQUIRED
$params = self :: validate_parameters ( self :: search_parameters (),
array ( 'searchstring' => $searchstring ));
//Context validation
//OPTIONAL but in most web service it should present
//$context = get_context_instance(CONTEXT_USER, $USER->id);
$context = context_user :: instance ( $USER -> id );
self :: validate_context ( $context );
//Capability checking
//OPTIONAL but in most web service it should present
if ( ! has_capability ( 'mod/timetable:search' , $context )) {
throw new moodle_exception ( 'cannotperformsearch' );
2020-09-03 21:25:42 +02:00
}
2020-12-05 10:03:20 +00:00
$results = array ();
$classes = $DB -> get_records_select ( 'timetable_class' , 'class like ? OR description like ? LIMIT 10' , array ( '%' . $params [ 'searchstring' ] . '%' , '%' . $params [ 'searchstring' ] . '%' ));
foreach ( $classes as $class ) {
$result = array (
'type' => 'class' ,
'name' => $class -> class ,
'description' => " Klassenplan: $class->description ( $class->class ) "
);
$results [] = $result ;
}
$teachers = $DB -> get_records_select ( 'timetable_teacher' , 'teacher like ? OR surname like ? LIMIT 10' , array ( '%' . $params [ 'searchstring' ] . '%' , '%' . $params [ 'searchstring' ] . '%' ));
foreach ( $teachers as $teacher ) {
$result = array (
'type' => 'teacher' ,
'name' => $teacher -> teacher ,
'description' => " Lehrerplan: $teacher->surname , $teacher->firstname ( $teacher->teacher ) "
);
$results [] = $result ;
}
$rooms = $DB -> get_records_select ( 'timetable_room' , 'description like ? limit 10' , array ( '%' . $params [ 'searchstring' ] . '%' ));
foreach ( $rooms as $room ) {
$result = array (
'type' => 'room' ,
'name' => $room -> room ,
'description' => " Raumplan: " . $room -> description
);
$results [] = $result ;
2020-09-03 21:25:42 +02:00
}
2020-12-05 10:03:20 +00:00
return $results ;
}
2020-09-03 21:25:42 +02:00
2020-12-05 10:03:20 +00:00
/**
* Returns description of method result value
* @ return external_description
*/
public static function search_returns () {
//return new external_value(PARAM_TEXT, 'The search result');
return new external_multiple_structure (
new external_single_structure (
array (
'type' => new external_value ( PARAM_TEXT , 'type of timetable: class, teacher, room' ),
'name' => new external_value ( PARAM_TEXT , 'value of type' ),
'description' => new external_value ( PARAM_TEXT , 'description' )
)
)
);
}
2020-09-03 21:25:42 +02:00
2020-12-05 10:03:20 +00:00
/**
* Returns description of method parameters
* @ return external_function_parameters
*/
public static function update_parameters () {
return new external_function_parameters (
array (
'files' => new external_multiple_structure (
new external_single_structure (
2020-09-03 21:25:42 +02:00
array (
2020-12-05 10:03:20 +00:00
'name' => new external_value ( PARAM_TEXT , 'name of file' ),
'content' => new external_value ( PARAM_RAW , 'content of file' )
2020-09-03 21:25:42 +02:00
)
2020-12-05 10:03:20 +00:00
)
)
)
);
}
/**
* Returns description of method result value
* @ return external_description
*/
public static function update_returns () {
return new external_multiple_structure (
new external_single_structure (
array (
'name' => new external_value ( PARAM_TEXT , 'name of file' ),
'result' => new external_value ( PARAM_RAW , 'result message' )
)
)
);
}
/**
* Returns description of method result value
* @ return external_description
*/
public static function update ( $files ) {
global $USER ;
//Context validation
//OPTIONAL but in most web service it should present
$context = context_user :: instance ( $USER -> id );
self :: validate_context ( $context );
//$contextmodule = context_module::instance($cm->id);
$usercontext = context_user :: instance ( $USER -> id );
//Capability checking
//OPTIONAL but in most web service it should present
if ( ! has_capability ( 'mod/timetable:update' , $usercontext )) {
throw new \moodle_exception ( 'cannotupdatetimetable' );
2020-09-03 21:25:42 +02:00
}
2020-12-05 10:03:20 +00:00
$import_data = new \mod_timetable\import_data ();
return $import_data -> update ( $files );
}
/**
* Returns description of method parameters
* @ return external_function_parameters
*/
public static function get_parameters () {
return new external_function_parameters (
array (
'type' => new external_value ( PARAM_TEXT , 'The type of timetable: class, teacher, room' ),
'name' => new external_value ( PARAM_TEXT , 'value of type' ),
'week' => new external_value ( PARAM_INT , 'The week of timetable' )
)
);
}
/**
* Returns welcome message
* @ return get result message
*/
public static function get ( $type , $name , $week ) {
global $USER , $DB ;
//Parameter validation
//REQUIRED
$params = self :: validate_parameters ( self :: get_parameters (),
array ( 'type' => $type , 'name' => $name , 'week' => $week ));
//Context validation
//OPTIONAL but in most web service it should present
//$context = get_context_instance(CONTEXT_USER, $USER->id);
$context = context_user :: instance ( $USER -> id );
self :: validate_context ( $context );
//$contextmodule = context_module::instance($cm->id);
$usercontext = context_user :: instance ( $USER -> id );
//Capability checking
//OPTIONAL but in most web service it should present
if ( ! has_capability ( 'mod/timetable:view' . $params [ 'type' ], $usercontext )) {
//if (!(($params['type'] == 'class') && has_capability('mod/timetable:viewownclass', $usercontext) && ($params['name'] == str_replace('_','/',$USER->department))))
if ( ! (( $params [ 'type' ] == 'class' ) && ( $params [ 'name' ] == str_replace ( '_' , '/' , $USER -> department ))))
throw new \moodle_exception ( 'cannotviewtimetable' . $params [ 'type' ]);
}
2020-09-03 21:25:42 +02:00
2020-09-13 21:07:32 +02:00
/*
if ( $USER -> department == " Lehrer " || $USER -> department == " Lehrer_fvs " ) {
} elseif (( $params [ 'type' ] == 'class' ) && ( $params [ 'name' ] == str_replace ( '_' , '/' , $USER -> department ))) {
} else {
throw new \moodle_exeption ( 'Forbidden' );
}
2020-12-05 10:03:20 +00:00
*/
2020-09-03 21:25:42 +02:00
2020-12-05 10:03:20 +00:00
//echo "Type: ".$params['type']."\n";
//echo "Name: ".$params['name']."\n";
//echo "Week: ".$params['week']."\n";
if ( ! ( $params [ 'week' ])) {
$today = new \DateTime ();
$params [ 'week' ] = $today -> format ( " W " );
$dayofweek = $today -> format ( 'w' );
if (( $dayofweek > 5 + get_config ( 'timetable' , 'saturday' )) || ( $dayofweek == 0 )) {
$params [ 'week' ] ++ ;
}
2020-09-03 21:25:42 +02:00
}
2020-12-05 10:03:20 +00:00
$ttable = new \mod_timetable\timetable ( $params [ 'type' ], $params [ 'name' ]);
$ttable -> read_db ( $params [ 'week' ]);
//echo var_dump($ttable->prepare_output());
return $ttable -> prepare_output ();
//$renderable = new \mod_timetable\output\timetable($ttable);
//return $renderable->export_for_template(new \mod_timetable\output\renderer($USER,array()));
}
/**
* Returns description of method result value
* @ return external_description
*/
public static function get_returns () {
2020-09-03 21:25:42 +02:00
2020-12-05 10:03:20 +00:00
return new external_single_structure (
array (
'periods' => new external_multiple_structure (
new external_single_structure (
2020-09-03 21:25:42 +02:00
array (
2020-12-05 10:03:20 +00:00
'number' => new external_value ( PARAM_INT , 'number of period' ),
'starttime' => new external_value ( PARAM_TEXT , 'starttime of period' ),
'endtime' => new external_value ( PARAM_TEXT , 'endtime of period' ),
'days' => new external_multiple_structure (
new external_single_structure (
array (
'substitutionold' => new external_value ( PARAM_TEXT , 'substitution' ),
'lessons' => new external_multiple_structure (
new external_single_structure (
2020-09-03 21:25:42 +02:00
array (
2020-12-05 10:03:20 +00:00
'class' => new external_value ( PARAM_TEXT , 'name of class' ),
'teacher' => new external_value ( PARAM_TEXT , 'name of teacher' ),
'room' => new external_value ( PARAM_TEXT , 'name of room' ),
'subject' => new external_value ( PARAM_TEXT , 'name of subject' ),
'classa' => new external_value ( PARAM_TEXT , 'name of class' ),
'teachera' => new external_value ( PARAM_TEXT , 'name of teacher' ),
'rooma' => new external_value ( PARAM_TEXT , 'name of room' ),
'subjecta' => new external_value ( PARAM_TEXT , 'name of subject' ),
'classb' => new external_value ( PARAM_TEXT , 'name of class' ),
'teacherb' => new external_value ( PARAM_TEXT , 'name of teacher' ),
'roomb' => new external_value ( PARAM_TEXT , 'name of room' ),
'subjectb' => new external_value ( PARAM_TEXT , 'name of subject' ),
'classchanged' => new external_value ( PARAM_BOOL , 'name of class' ),
'teacherchanged' => new external_value ( PARAM_BOOL , 'name of teacher' ),
'roomchanged' => new external_value ( PARAM_BOOL , 'name of room' ),
'subjectchanged' => new external_value ( PARAM_BOOL , 'name of subject' ),
'substitution' => new external_value ( PARAM_TEXT , 'lesson is substitution' ),
'cancel' => new external_value ( PARAM_TEXT , 'lesson is canceled' ),
'cancel4me' => new external_value ( PARAM_TEXT , 'lesson is canceled 4 me' ),
'event' => new external_value ( PARAM_TEXT , 'lesson is event' ),
'status' => new external_value ( PARAM_TEXT , 'status of lesson' ),
'flag' => new external_value ( PARAM_TEXT , 'flag of lesson' ),
'text' => new external_value ( PARAM_TEXT , 'description text' ),
'subtype' => new external_multiple_structure ( new external_value ( PARAM_INT , 'bitnumber' ))
//'subtype' => new external_multiple_structure( new external_value('number', PARAM_INT, 'bitnumber'))
2020-09-03 21:25:42 +02:00
)
2020-12-05 10:03:20 +00:00
)
2020-09-03 21:25:42 +02:00
)
2020-12-05 10:03:20 +00:00
)
)
)
2020-09-03 21:25:42 +02:00
)
2020-12-05 10:03:20 +00:00
)
),
'type' => new external_value ( PARAM_TEXT , 'The type of timetable: class, teacher, room' ),
'viewteacher' => new external_value ( PARAM_TEXT , '1 if type of timetable teacher' ),
'viewclass' => new external_value ( PARAM_TEXT , '1 if type of timetable class' ),
'viewroom' => new external_value ( PARAM_TEXT , '1 if type of timetable room' ),
'name' => new external_value ( PARAM_TEXT , 'value of type' ),
'date' => new external_value ( PARAM_TEXT , 'date' ),
'description' => new external_value ( PARAM_TEXT , 'description' ),
'saturday' => new external_value ( PARAM_INT , 'if timetable includes saturday' ),
'week' => new external_value ( PARAM_INT , 'The week of timetable' ),
'prevweek' => new external_value ( PARAM_INT , 'The next week of timetable' ),
'nextweek' => new external_value ( PARAM_INT , 'The prev week of timetable' ),
'id' => new external_value ( PARAM_TEXT , 'The id of timetable' )
)
);
}
2020-09-03 21:25:42 +02:00
}