From 48960208784586e8ad9bde75626dc4e631e18711 Mon Sep 17 00:00:00 2001 From: Moritz Strohm <strohm@data-quest.de> Date: Wed, 28 Sep 2022 09:50:22 +0000 Subject: [PATCH] fix for BIESt #1016 Merge request studip/studip!625 --- app/controllers/admin/courseplanning.php | 1 + app/controllers/admin/overlapping.php | 2 +- app/controllers/calendar/contentbox.php | 20 ++-- app/controllers/course/admission.php | 14 ++- app/controllers/course/basicdata.php | 35 ++++--- app/controllers/course/block_appointments.php | 5 +- app/controllers/course/lvgselector.php | 5 +- app/controllers/course/overview.php | 8 +- app/controllers/course/room_requests.php | 35 ++++--- app/controllers/course/study_areas.php | 2 +- app/controllers/course/timesrooms.php | 17 ++-- app/controllers/evaluation.php | 4 +- app/controllers/my_courses.php | 2 +- app/controllers/my_institutes.php | 2 +- app/controllers/questionnaire.php | 3 + app/controllers/studip_controller.php | 4 +- app/views/admin/overlapping/selection.php | 2 +- app/views/calendar/contentbox/display.php | 5 +- app/views/course/basicdata/_input.php | 22 ++--- app/views/course/basicdata/view.php | 10 +- app/views/course/block_appointments/index.php | 20 ++-- app/views/course/lvgselector/index.php | 28 +++--- .../request_select_properties.php | 12 ++- .../room_requests/request_select_room.php | 4 +- app/views/course/timesrooms/_cancel_form.php | 38 ++++---- .../course/timesrooms/_regularEvents.php | 2 +- app/views/course/timesrooms/editDate.php | 6 +- .../course/wizard/steps/lvgroups/index.php | 2 +- .../course/wizard/steps/studyareas/index.php | 30 +++--- app/views/questionnaire/evaluate.php | 2 +- .../freetext/freetext_answer.php | 2 +- .../question_types/test/_answer.php | 4 +- .../question_types/test/test_edit.php | 2 +- .../question_types/vote/_answer.php | 2 +- .../templates/configure.php | 4 +- lib/bootstrap.php | 1 + lib/calendar_functions.inc.php | 1 + lib/classes/Assets.class.php | 14 +-- lib/classes/DataFieldEntry.class.php | 3 +- lib/classes/DbSnapshot.class.php | 2 +- lib/classes/DbView.class.php | 6 +- lib/classes/I18N.php | 2 +- lib/classes/QuickSearch.class.php | 55 +++++++---- lib/classes/Seminar.class.php | 5 +- lib/classes/StudipSemSearchHelper.class.php | 25 +++-- lib/classes/admission/CourseSet.class.php | 17 ++-- .../coursewizardsteps/LVGroupsWizardStep.php | 2 +- .../StudyAreasWizardStep.php | 4 +- .../searchtypes/SeminarSearch.class.php | 9 +- lib/export/export_choose_xslt.inc.php | 7 +- lib/export/export_start.inc.php | 2 +- lib/export/export_studipdata_func.inc.php | 4 +- lib/export/export_xml.inc.php | 4 +- lib/export/export_xml_func.inc.php | 36 ++++--- lib/models/AbschlussKategorie.php | 4 +- lib/models/CourseDate.class.php | 4 +- lib/models/Semester.class.php | 2 +- lib/models/SimpleORMap.class.php | 2 +- lib/models/StudipStudyArea.class.php | 4 +- lib/models/resources/Building.class.php | 95 ++++++++++--------- lib/modules/CoreScm.class.php | 2 +- lib/raumzeit/SeminarDB.class.php | 1 + lib/raumzeit/raumzeit_functions.inc.php | 2 +- lib/resources/RoomManager.class.php | 2 +- public/export.php | 6 +- templates/dates/seminar_html.php | 1 + templates/quicksearch/inputfield.php | 2 +- vendor/trails/src/response.php | 4 +- vendor/trails/trails.php | 4 +- 69 files changed, 386 insertions(+), 304 deletions(-) diff --git a/app/controllers/admin/courseplanning.php b/app/controllers/admin/courseplanning.php index 47c181d5016..c07d6d9e0a2 100644 --- a/app/controllers/admin/courseplanning.php +++ b/app/controllers/admin/courseplanning.php @@ -38,6 +38,7 @@ class Admin_CourseplanningController extends AuthenticatedController if (in_array($action, ['index', 'weekday'])) { PageLayout::allowFullscreenMode(); } + $this->selected_weekday = ''; } private function getPlanTitle() diff --git a/app/controllers/admin/overlapping.php b/app/controllers/admin/overlapping.php index 97efe4e434d..8072ff59b4f 100644 --- a/app/controllers/admin/overlapping.php +++ b/app/controllers/admin/overlapping.php @@ -69,7 +69,7 @@ class Admin_OverlappingController extends AuthenticatedController } $this->conflicts = MvvOverlappingSelection::getConflictsBySelection( $this->selection_id, - !$_SESSION['MVV_OVL_HIDDEN'] + empty($_SESSION['MVV_OVL_HIDDEN']) ); } diff --git a/app/controllers/calendar/contentbox.php b/app/controllers/calendar/contentbox.php index 134fe0cb04f..f2689bfd106 100644 --- a/app/controllers/calendar/contentbox.php +++ b/app/controllers/calendar/contentbox.php @@ -12,17 +12,22 @@ * @category Stud.IP * @package calender */ -class Calendar_ContentboxController extends StudipController { - +class Calendar_ContentboxController extends StudipController +{ /** * Widget controller to produce the formally known show_dates() * * @param String $range_id range id (or array of range ids) of the news to get displayed */ - public function display_action($range_id, $timespan = 604800, $start = null) - { + public function display_action($range_id, $timespan = 604800, $start = null) + { + $this->admin = false; + $this->single = false; + $this->userRange = false; + $this->termine = []; + // Fetch time if needed - $this->start = $start ? : strtotime('today'); + $this->start = $start ?: strtotime('today'); $this->timespan = $timespan; // To array fallback of $range_id @@ -55,7 +60,7 @@ class Calendar_ContentboxController extends StudipController { } // Forge title - if ($this->termine) { + if (!empty($this->termine)) { $this->title = sprintf( _('Termine für die Zeit vom %s bis zum %s'), strftime('%d. %B %Y', $this->start), @@ -75,6 +80,7 @@ class Calendar_ContentboxController extends StudipController { { $course = Course::find($id); $dates = $course->getDatesWithExdates()->findBy('end_time', [$this->start, $this->start + $this->timespan], '><'); + foreach ($dates as $courseDate) { // Build info $info = []; @@ -116,8 +122,6 @@ class Calendar_ContentboxController extends StudipController { ); // Prepare termine - $this->termine = []; - foreach ($events as $termin) { // Exclude events that begin after the given time range if ($termin->getStart() > $this->start + $this->timespan) { diff --git a/app/controllers/course/admission.php b/app/controllers/course/admission.php index 80e084acd88..1e8832e3804 100644 --- a/app/controllers/course/admission.php +++ b/app/controllers/course/admission.php @@ -24,7 +24,7 @@ class Course_AdmissionController extends AuthenticatedController parent::before_filter($action, $args); - $course_id = $args[0]; + $course_id = $args[0] ?? ''; $this->course_id = Request::option('cid', $course_id); @@ -111,7 +111,7 @@ class Course_AdmissionController extends AuthenticatedController } } $lockdata = LockRules::getObjectRule($this->course_id); - if ($lockdata['description'] && LockRules::CheckLockRulePermission($this->course_id, $lockdata['permission'])) { + if (!empty($lockdata['description']) && LockRules::CheckLockRulePermission($this->course_id)) { PageLayout::postMessage(MessageBox::info(formatLinks($lockdata['description']))); } } @@ -400,8 +400,14 @@ class Course_AdmissionController extends AuthenticatedController { PageLayout::setTitle(_('Neue Anmelderegel')); - list($type, $another_type) = explode('_', Request::option('type')); - list($rule_id, $another_rule_id) = explode('_', Request::option('rule_id')); + $types = explode('_', Request::option('type')); + $type = $types[0] ?? ''; + $another_type = $types[1] ?? null; + + $rule_ids = explode('_', Request::option('rule_id')); + $rule_id = $rule_ids[0] ?? ''; + $another_rule_id = $rule_ids[1] ?? null; + $rule_types = AdmissionRule::getAvailableAdmissionRules(true); if (isset($rule_types[$type])) { $rule = new $type($rule_id); diff --git a/app/controllers/course/basicdata.php b/app/controllers/course/basicdata.php index bc20ed5fe38..efff19264a3 100644 --- a/app/controllers/course/basicdata.php +++ b/app/controllers/course/basicdata.php @@ -230,22 +230,23 @@ class Course_BasicdataController extends AuthenticatedController private function instituteChoices($institutes) { $faculty_id = null; - $result = []; + $result = []; foreach ($institutes as $inst) { + $key = $inst['fakultaets_id'] ?? $faculty_id; if ($inst['is_fak']) { $result[$inst['Institut_id']] = [ 'label' => $inst['Name'], 'children' => [], ]; $faculty_id = $inst['Institut_id']; - } elseif (!isset($result[$inst['fakultaets_id'] ?: $faculty_id])) { + } elseif (!isset($result[$key])) { $result[] = [ 'label' => false, 'children' => [$inst['Institut_id'] => $inst['Name']], ]; } else { - $result[$inst['fakultaets_id'] ?: $faculty_id]['children'][$inst['Institut_id']] = $inst['Name']; + $result[$key]['children'][$inst['Institut_id']] = $inst['Name']; } } @@ -257,7 +258,7 @@ class Course_BasicdataController extends AuthenticatedController * Action wie Set ausgeführt wurde, von der hierher weitergeleitet worden ist. * Wichtige Daten dazu wurden dann über $this->flash übertragen. * - * @param md5 $course_id + * @param string $course_id */ public function view_action($course_id = null) { @@ -356,27 +357,37 @@ class Course_BasicdataController extends AuthenticatedController $this->mkstring = $data['mkdate'] ? date("d.m.Y, H:i", $data['mkdate']) : _("unbekannt"); $this->chstring = $data['chdate'] ? date("d.m.Y, H:i", $data['chdate']) : _("unbekannt"); $lockdata = LockRules::getObjectRule($this->course_id); - if ($lockdata['description'] && LockRules::CheckLockRulePermission($this->course_id, $lockdata['permission'])){ + if (!empty($lockdata['description']) && LockRules::CheckLockRulePermission($this->course_id, $lockdata['permission'])){ $this->flash['msg'] = array_merge((array)$this->flash['msg'], [["info", formatLinks($lockdata['description'])]]); } $this->flash->discard(); //schmeißt ab jetzt unnötige Variablen aus der Session. $sidebar = Sidebar::get(); $widget = new ActionsWidget(); - $widget->addLink(_('Bild ändern'), - $this->url_for('avatar/update/course', $course_id), - Icon::create('edit', 'clickable')); + $widget->addLink( + _('Bild ändern'), + $this->url_for('avatar/update/course', $course_id), + Icon::create('edit') + ); if ($this->deputies_enabled) { + $newstatus = null; + $text = null; + if (Deputy::isDeputy($user->id, $this->course_id)) { $newstatus = 'dozent'; $text = _('Lehrende werden'); - } else if (in_array($user->id, array_keys($this->dozenten)) && sizeof($this->dozenten) > 1) { + } else if (in_array($user->id, array_keys($this->dozenten)) && count($this->dozenten) > 1) { $newstatus = 'deputy'; $text = _('Vertretung werden'); } - $widget->addLink($text, - $this->url_for('course/basicdata/switchdeputy', $this->course_id, $newstatus), - Icon::create('persons', 'clickable')); + + if ($text) { + $widget->addLink( + $text, + $this->url_for('course/basicdata/switchdeputy', $this->course_id, $newstatus), + Icon::create('persons') + ); + } } $sidebar->addWidget($widget); // Entry list for admin upwards. diff --git a/app/controllers/course/block_appointments.php b/app/controllers/course/block_appointments.php index f45ac1012ff..67035fa356c 100644 --- a/app/controllers/course/block_appointments.php +++ b/app/controllers/course/block_appointments.php @@ -42,6 +42,8 @@ class Course_BlockAppointmentsController extends AuthenticatedController protected function setAvailableRooms() { + $this->room_search = null; + $this->selectable_rooms = []; if (Config::get()->RESOURCES_ENABLE) { //Check for how many rooms the user has booking permissions. //In case these permissions exist for more than 50 rooms @@ -54,7 +56,6 @@ class Course_BlockAppointmentsController extends AuthenticatedController 'admin' ); - $this->selectable_rooms = []; $rooms_with_booking_permissions = 0; if ($current_user_is_resource_admin) { $rooms_with_booking_permissions = Room::countAll(); @@ -99,7 +100,7 @@ class Course_BlockAppointmentsController extends AuthenticatedController } $this->linkAttributes = ['fromDialog' => Request::int('fromDialog') ? 1 : 0]; $this->start_ts = strtotime('this monday'); - $this->request = $this->flash['request'] ?: $_SESSION['block_appointments']; + $this->request = $this->flash['request'] ?? $_SESSION['block_appointments'] ?? []; $this->confirm_many = isset($this->flash['confirm_many']) ? $this->flash['confirm_many'] : false; $this->lecturers = CourseMember::findByCourseAndStatus( $this->course_id, diff --git a/app/controllers/course/lvgselector.php b/app/controllers/course/lvgselector.php index 541ff27521b..101bee0e042 100644 --- a/app/controllers/course/lvgselector.php +++ b/app/controllers/course/lvgselector.php @@ -46,6 +46,7 @@ class Course_LvgselectorController extends AuthenticatedController */ public function index_action() { + $this->url_params = []; if (Request::get('from')) { $this->url_params['from'] = Request::get('from'); } @@ -117,6 +118,7 @@ class Course_LvgselectorController extends AuthenticatedController } $this->ajax_url = $this->url_for('course/lvgselector/ajax'); + $this->no_js_url = ''; $this->url = $this->action_url('index'); } @@ -132,7 +134,8 @@ class Course_LvgselectorController extends AuthenticatedController $stepNumber = Request::int('step'); $method = Request::get('method'); $parameters = Request::getArray('parameter'); - $result = call_user_func_array(['LVGroupsWizardStep', $method], $parameters); + $wizard_step = new LVGroupsWizardStep(); + $result = call_user_func_array([$wizard_step, $method], $parameters); if (is_array($result) || is_object($result)) { $this->render_json($result); } else { diff --git a/app/controllers/course/overview.php b/app/controllers/course/overview.php index 966c0cac91d..0994d547374 100644 --- a/app/controllers/course/overview.php +++ b/app/controllers/course/overview.php @@ -16,8 +16,6 @@ class Course_OverviewController extends AuthenticatedController public function before_filter(&$action, &$args) { - global $SEM_TYPE, $SEM_CLASS; - parent::before_filter($action, $args); checkObject(); @@ -74,16 +72,16 @@ class Course_OverviewController extends AuthenticatedController $this->dates = $response->body; $this->next_date = $this->sem->getNextDate(); $this->first_date = $this->sem->getFirstDate(); - $show_link = ($GLOBALS["perm"]->have_studip_perm('autor', $this->course_id) && $this->modules['schedule']); + $show_link = $GLOBALS["perm"]->have_studip_perm('autor', $this->course_id) && $this->course->isToolActive('schedule'); $this->times_rooms = $this->sem->getDatesTemplate('dates/seminar_html', ['link_to_dates' => $show_link, 'show_room' => true]); // Fettch teachers $dozenten = $this->sem->getMembers('dozent'); - $num_dozenten = count($dozenten); + $this->num_dozenten = count($dozenten); $show_dozenten = []; foreach ($dozenten as $dozent) { $show_dozenten[] = '<a href="' . URLHelper::getLink('dispatch.php/profile', ['username' => $dozent['username']]) . '">' - . htmlready($num_dozenten > 10 ? get_fullname($dozent['user_id'], 'no_title_short') : $dozent['fullname']) + . htmlready($this->num_dozenten > 10 ? get_fullname($dozent['user_id'], 'no_title_short') : $dozent['fullname']) . '</a>'; } $this->show_dozenten = $show_dozenten; diff --git a/app/controllers/course/room_requests.php b/app/controllers/course/room_requests.php index 8747e9b4ab5..d23b5c72aec 100644 --- a/app/controllers/course/room_requests.php +++ b/app/controllers/course/room_requests.php @@ -28,9 +28,8 @@ class Course_RoomRequestsController extends AuthenticatedController parent::before_filter($action, $args); - $course_id = $args[0]; $this->current_user = User::findCurrent(); - $this->course_id = Request::option('cid', $course_id); + $this->course_id = Request::option('cid', $args[0] ?? null); $pagetitle = ''; //Navigation in der Veranstaltung: if (Navigation::hasItem('/course/admin/room_requests')) { @@ -206,6 +205,17 @@ class Course_RoomRequestsController extends AuthenticatedController */ protected function loadData($session_data, $step = 1) { + $this->available_room_categories = []; + $this->room_name = ''; + $this->category_id = ''; + $this->category = null; + $this->available_properties = []; + $this->selected_properties = []; + $this->seats = ''; + $this->comment = ''; + $this->reply_lecturers = false; + $this->preparation_time = 0; + $this->course_id = Context::getId(); $this->user_is_global_resource_admin = ResourceManager::userHasGlobalPermission( $this->current_user, @@ -220,19 +230,19 @@ class Course_RoomRequestsController extends AuthenticatedController ); } if ($step >= 2) { - if ($session_data['category_id']) { + if (!empty($session_data['category_id'])) { $this->category = ResourceCategory::find($session_data['category_id']); - if ($this->category instanceof ResourceCategory) { + if ($this->category) { //Get all available properties for the category: $this->available_properties = $this->category->getRequestableProperties(); } } - $this->room_name = $session_data['room_name']; - $this->category_id = $session_data['category_id']; - $this->preparation_time = $session_data['preparation_time'] ?: '0'; + $this->room_name = $session_data['room_name'] ?? ''; + $this->category_id = $session_data['category_id'] ?? ''; + $this->preparation_time = $session_data['preparation_time'] ?? '0'; } if ($step >= 3) { - if ($this->category instanceof ResourceCategory) { + if ($this->category) { $this->selected_properties = $session_data['selected_properties']; } } @@ -442,7 +452,7 @@ class Course_RoomRequestsController extends AuthenticatedController $this->available_properties = $this->category->getRequestableProperties(); - if (!$session_data['selected_properties']['seats']) { + if (empty($session_data['selected_properties']['seats'])) { $this->course = Course::find($this->course_id); $admission_turnout = $this->course->admission_turnout; $this->selected_properties['seats'] = $admission_turnout @@ -590,11 +600,11 @@ class Course_RoomRequestsController extends AuthenticatedController $this->reply_lecturers = $this->request->reply_recipients == 'lecturer'; } - $search_properties = $this->selected_properties; - if ($session_data['category_id']) { + $search_properties = $this->selected_properties ?? []; + if (!empty($session_data['category_id'])) { $search_properties['room_category_id'] = $session_data['category_id']; } - if ($search_properties['seats']) { + if (!empty($search_properties['seats'])) { //The seats property value is a minimum. $search_properties['seats'] = [ $search_properties['seats'], @@ -625,7 +635,6 @@ class Course_RoomRequestsController extends AuthenticatedController } $this->available_room_icons = []; $request_time_intervals = $this->request->getTimeIntervals(); - $request_date_amount = count($request_time_intervals); foreach ($this->matching_rooms as $room) { $request_dates_booked = 0; foreach ($request_time_intervals as $interval) { diff --git a/app/controllers/course/study_areas.php b/app/controllers/course/study_areas.php index d1fa13e7c84..fcb64401fcd 100644 --- a/app/controllers/course/study_areas.php +++ b/app/controllers/course/study_areas.php @@ -130,7 +130,7 @@ class Course_StudyAreasController extends AuthenticatedController } $params = []; - if(Request::get('open_node')) { + if (Request::get('open_node')) { $params['open_node'] = Request::get('open_node'); } if (Request::get('from')) { diff --git a/app/controllers/course/timesrooms.php b/app/controllers/course/timesrooms.php index cd9d001b4a4..4ae955fd673 100644 --- a/app/controllers/course/timesrooms.php +++ b/app/controllers/course/timesrooms.php @@ -168,9 +168,8 @@ class Course_TimesroomsController extends AuthenticatedController if (($val->room_booking instanceof ResourceBooking) && !$cycle_has_multiple_rooms) { $date_room = $val->room_booking->resource->name; - if ($this->cycle_room_names[$cycle->id]) { - if ($date_room - && ($date_room != $this->cycle_room_names[$cycle->id])) { + if (isset($this->cycle_room_names[$cycle->id])) { + if ($date_room && $date_room != $this->cycle_room_names[$cycle->id]) { $cycle_has_multiple_rooms = true; } } elseif ($date_room) { @@ -225,8 +224,11 @@ class Course_TimesroomsController extends AuthenticatedController } $this->single_dates = $single_dates; - $this->checked_dates = $_SESSION['_checked_dates']; - unset($_SESSION['_checked_dates']); + $this->checked_dates = []; + if (!empty($_SESSION['_checked_dates'])) { + $this->checked_dates = $_SESSION['_checked_dates']; + unset($_SESSION['_checked_dates']); + } } /** @@ -1115,6 +1117,8 @@ class Course_TimesroomsController extends AuthenticatedController words('day start_time end_time description cycle startWeek teacher_sws fromDialog course_type') ); + $this->linkAttributes = ['fromDialog' => Request::isXhr() ? 1 : 0]; + $this->cycle = new SeminarCycleDate($cycle_id); if ($this->cycle->isNew()) { @@ -1604,6 +1608,8 @@ class Course_TimesroomsController extends AuthenticatedController protected function setAvailableRooms($dates, $date_booking_ids = [], $only_bookable_rooms = false) { + $this->room_search = null; + $this->selectable_rooms = []; if (Config::get()->RESOURCES_ENABLE) { //Check for how many rooms the user has booking permissions. //In case these permissions exist for more than 50 rooms @@ -1629,7 +1635,6 @@ class Course_TimesroomsController extends AuthenticatedController ]; } } - $this->selectable_rooms = []; $rooms_with_booking_permissions = 0; if ($current_user_is_resource_admin) { $rooms_with_booking_permissions = Room::countAll(); diff --git a/app/controllers/evaluation.php b/app/controllers/evaluation.php index 7ed30df8298..4a157a9643b 100644 --- a/app/controllers/evaluation.php +++ b/app/controllers/evaluation.php @@ -38,9 +38,7 @@ class EvaluationController extends AuthenticatedController $this->evaluations = array_merge($this->evaluations, StudipEvaluation::findMany($eval_db->getEvaluationIDs($range_id, EVAL_STATE_STOPPED))); } } - - // Special case: from widget and no data -> no output - if (count($this->evaluations) === 0) { + if (!empty($this->suppress_empty_output) && count($this->evaluations) === 0) { $this->render_nothing(); } else { $this->visit(); diff --git a/app/controllers/my_courses.php b/app/controllers/my_courses.php index 21943fe65cb..da321071253 100644 --- a/app/controllers/my_courses.php +++ b/app/controllers/my_courses.php @@ -955,7 +955,7 @@ class MyCoursesController extends AuthenticatedController $extra_navigation = [ 'url' => URLHelper::getURL($adminnavigation->getURL(), ['cid' => $course['seminar_id']]), 'icon' => $adminnavigation->getImage()->getShape(), - 'label' => $adminnavigation->getLinkAttributes()['title'] ?: _('Verwaltung'), + 'label' => $adminnavigation->getLinkAttributes()['title'] ?? _('Verwaltung'), ]; } } diff --git a/app/controllers/my_institutes.php b/app/controllers/my_institutes.php index 514fd66380b..a17862f206d 100644 --- a/app/controllers/my_institutes.php +++ b/app/controllers/my_institutes.php @@ -84,7 +84,7 @@ class MyInstitutesController extends AuthenticatedController protected function check_institute($institute): bool { if ($institute['visitdate'] || $institute['last_modified']) { - if ($institute['visitdate'] <= $institute["chdate"] || $institute['last_modified'] > 0) { + if ($institute['visitdate'] <= $institute["chdate"] || (!empty($institute['last_modified']) && $institute['last_modified'] > 0)) { $last_modified = ($institute['visitdate'] <= $institute["chdate"] && $institute["chdate"] > $institute['last_modified'] ? $institute["chdate"] : $institute['last_modified']); if ($last_modified) { diff --git a/app/controllers/questionnaire.php b/app/controllers/questionnaire.php index d886be23756..dd115218cfe 100644 --- a/app/controllers/questionnaire.php +++ b/app/controllers/questionnaire.php @@ -399,6 +399,9 @@ class QuestionnaireController extends AuthenticatedController if (!$this->questionnaire->isEditable()) { throw new AccessDeniedException(_('Der Fragebogen ist nicht bearbeitbar.')); } + $this->profile = null; + $this->public = null; + $this->start = null; foreach ($this->questionnaire->assignments as $relation) { if ($relation['range_type'] === "user") { $this->profile = $relation; diff --git a/app/controllers/studip_controller.php b/app/controllers/studip_controller.php index f2eb0236955..2e93d0556fb 100644 --- a/app/controllers/studip_controller.php +++ b/app/controllers/studip_controller.php @@ -263,10 +263,10 @@ abstract class StudipController extends Trails_Controller // Try to create route if none given if ($to === '') { - $args[0] = $this->parent_controller + $to = isset($this->parent_controller) ? $this->parent_controller->current_action : $this->current_action; - return $this->action_url(...$args); + return $this->action_url($to); } // Create url for a specific action diff --git a/app/views/admin/overlapping/selection.php b/app/views/admin/overlapping/selection.php index e9707327f02..1c27c791ca9 100644 --- a/app/views/admin/overlapping/selection.php +++ b/app/views/admin/overlapping/selection.php @@ -58,7 +58,7 @@ <label> <input type="checkbox" name="show_hidden" - value="1" <?= $_SESSION['MVV_OVL_HIDDEN'] ? ' checked' : '' ?>> + value="1" <?= !empty($_SESSION['MVV_OVL_HIDDEN']) ? ' checked' : '' ?>> <?= _('ausgeblendete Veranstaltungen anzeigen') ?> </label> </fieldset> diff --git a/app/views/calendar/contentbox/display.php b/app/views/calendar/contentbox/display.php index 6791670a1ca..41498f4e19c 100644 --- a/app/views/calendar/contentbox/display.php +++ b/app/views/calendar/contentbox/display.php @@ -19,14 +19,13 @@ <? endif; ?> </nav> </header> - <? if($termine): ?> - + <? if ($termine): ?> <? foreach ($termine as $termin): ?> <?= $this->render_partial('calendar/contentbox/_termin.php', ['termin' => $termin]); ?> <? endforeach; ?> <? else: ?> <section> - <? if($isProfile): ?> + <? if ($isProfile): ?> <?= _('Es sind keine aktuellen Termine vorhanden. Um neue Termine zu erstellen, klicken Sie rechts auf das Plus.') ?> <? else: ?> <?= _('Es sind keine aktuellen Termine vorhanden. Um neue Termine zu erstellen, klicken Sie rechts auf die Zahnräder.') ?> diff --git a/app/views/course/basicdata/_input.php b/app/views/course/basicdata/_input.php index ffaad5eae79..60f6b60f507 100644 --- a/app/views/course/basicdata/_input.php +++ b/app/views/course/basicdata/_input.php @@ -2,35 +2,35 @@ # Lifter010: TODO $is_locked = $input['locked'] ? 'disabled readonly' : ''; $is_locked_array = $input['locked'] ? ['disabled' => true, 'readonly' => true] : []; -$is_required_array = $input['must'] ? ['required' => true] : []; -$is_pattern_array = $input['pattern'] ? ['pattern' => $input['pattern']] : []; +$is_required_array = !empty($input['must']) ? ['required' => true] : []; +$is_pattern_array = !empty($input['pattern']) ? ['pattern' => $input['pattern']] : []; if ($input['type'] === "text") : ?> - <? if ($input['i18n']) : ?> + <? if (!empty($input['i18n'])) : ?> <?= I18N::input($input['name'], $input['value'], $is_locked_array + $is_required_array + $is_pattern_array) ?> <? else : ?> - <input <?=$is_locked ?> type="text" name="<?= $input['name'] ?>" value="<?= htmlReady($input['value']) ?>" <? if ($input['must']) echo 'required'; ?> <? if ($input['pattern']) : ?>pattern="<?= htmlReady($input['pattern']) ?>"<? endif ?>> + <input <?=$is_locked ?> type="text" name="<?= htmlReady($input['name']) ?>" value="<?= htmlReady($input['value']) ?>" <? if (!empty($input['must'])) echo 'required'; ?> <? if (!empty($input['pattern'])) printf('pattern="%s"', htmlReady($input['pattern'])) ?>> <? endif ?> <? endif; if ($input['type'] === "number") : ?> - <input <?=$is_locked ?> type="number" name="<?= $input['name'] ?>" value="<?= htmlReady($input['value']) ?>" min="<?= $input['min'] ?>" <? if ($input['must']) echo 'required'; ?>> + <input <?=$is_locked ?> type="number" name="<?= htmlReady($input['name']) ?>" value="<?= htmlReady($input['value']) ?>" min="<?= $input['min'] ?>" <? if (!empty($input['must'])) echo 'required'; ?>> <? endif; if ($input['type'] === "textarea") : ?> - <? if ($input['i18n']) : ?> + <? if (!empty($input['i18n'])) : ?> <?= I18N::textarea($input['name'], $input['value'], $is_locked_array + $is_required_array) ?> <? else : ?> - <textarea <?=$is_locked ?> name="<?= $input['name'] ?>" <? if ($input['must']) echo 'required'; ?>><?= + <textarea <?=$is_locked ?> name="<?= htmlReady($input['name']) ?>" <? if (!empty($input['must'])) echo 'required'; ?>><?= htmlReady($input['value']) ?></textarea> <? endif ?> <? endif; if ($input['type'] === "select") : ?> - <? if (!$input['choices'][$input['value']] && !(isset($input['changable']) && $input['changable'])): ?> + <? if (empty($input['choices'][$input['value']]) && empty($input['changable'])): ?> <?= _("Keine Änderung möglich") ?> <? else: ?> - <select <?=$is_locked ?> name="<?= $input['name'] ?>" <? if ($input['must']) echo 'required'; ?>> + <select <?=$is_locked ?> name="<?= htmlReady($input['name']) ?>" <? if (!empty($input['must'])) echo 'required'; ?>> <? foreach ($input['choices'] as $choice_value => $choice_name): ?> <? if (is_array($choice_name)): ?> <optgroup label="<?= htmlReady($choice_value) ?>"> @@ -51,7 +51,7 @@ if ($input['type'] === "select") : ?> <? endif; if ($input['type'] === "multiselect") : ?> - <select <?=$is_locked ?> name="<?= $input['name'] ?>" multiple class="nested-select" <? if ($input['must']) echo 'required'; ?>> + <select <?=$is_locked ?> name="<?= htmlReady($input['name']) ?>" multiple class="nested-select" <? if (!empty($input['must'])) echo 'required'; ?>> <? if ($input['choices']) : foreach ($input['choices'] as $choice_value => $choice_name) : ?> <option value="<?= htmlReady($choice_value) ?>"<?= in_array($choice_value, is_array($input['value']) ? $input['value'] : [$input['value']]) @@ -65,7 +65,7 @@ if ($input['type'] === 'nested-select'): ?> <? if (isset($input['changable']) && !$input['changable']): ?> <?= _("Keine Änderung möglich") ?> <? else: ?> - <select <?= $is_locked ?> name="<?= $input['name'] ?>" class="nested-select" <? if ($input['must']) echo 'required'; ?> <? if ($input['multiple']) echo 'multiple'; ?>> + <select <?= $is_locked ?> name="<?= htmlReady($input['name']) ?>" class="nested-select" <? if (!empty($input['must'])) echo 'required'; ?> <? if (!empty($input['multiple'])) echo 'multiple'; ?>> <? foreach ($input['choices'] as $outer_id => $group): ?> <? if ($group['label'] !== false): ?> <option value="<?= htmlReady($outer_id) ?>" class="nested-item-header" <? if (in_array($outer_id, (array)$input['value'])) echo 'selected'; ?>> diff --git a/app/views/course/basicdata/view.php b/app/views/course/basicdata/view.php index f74614757f3..cdd4f870799 100644 --- a/app/views/course/basicdata/view.php +++ b/app/views/course/basicdata/view.php @@ -32,10 +32,10 @@ $message_types = ['msg' => "success", 'error' => "error", 'info' => "info"]; <? else: ?> <? foreach ($attributes as $attribute): ?> <label> - <span <?= $attribute['must'] ? 'class="required"' : '' ?>> + <span <?= !empty($attribute['must']) ? 'class="required"' : '' ?>> <?= htmlReady($attribute['title']) ?> </span> - <?= $attribute['description'] ? tooltipIcon($attribute['description']) : '' ?> + <?= !empty($attribute['description']) ? tooltipIcon($attribute['description']) : '' ?> <?= $this->render_partial("course/basicdata/_input", ['input' => $attribute]) ?> </label> @@ -63,7 +63,7 @@ $message_types = ['msg' => "success", 'error' => "error", 'info' => "info"]; <? else: ?> <? foreach ($institutional as $inst): ?> <label> - <span <?= $inst['must'] ? 'class="required"' : '' ?>> + <span <?= !empty($inst['must']) ? 'class="required"' : '' ?>> <?= htmlReady($inst['title']) ?> </span> @@ -304,7 +304,7 @@ $message_types = ['msg' => "success", 'error' => "error", 'info' => "info"]; <?= $this->render_partial('course/basicdata/_input', ['input' => $description]) ?> <? else : ?> <label> - <span <?= $description['must'] ? 'class="required"' : '' ?>> + <span <?= !empty($description['must']) ? 'class="required"' : '' ?>> <?= $description['title'] ?> </span> @@ -333,4 +333,4 @@ json_encode(preg_split('/[\s,;]+/', Config::get()->PROPOSED_TEACHER_LABELS, -1, }); }); STUDIP.MultiPersonSearch.init(); -</script> \ No newline at end of file +</script> diff --git a/app/views/course/block_appointments/index.php b/app/views/course/block_appointments/index.php index 4dc0b87c147..62add7c13c5 100644 --- a/app/views/course/block_appointments/index.php +++ b/app/views/course/block_appointments/index.php @@ -4,7 +4,7 @@ <form <?= Request::isXhr() ? 'data-dialog="size=big"' : '' ?> class="default collapsable" - action="<?= $controller->url_for('course/block_appointments/save/' . $course_id, $editParams) ?>" + action="<?= $controller->link_for('course/block_appointments/save/' . $course_id) ?>" method="post"> <? if ($confirm_many): ?> @@ -27,24 +27,24 @@ <label for="block_appointments_start_day" class="col-3"> <?= _('Startdatum') ?> <input type="text" class="size-s has-date-picker" data-date-picker id="block_appointments_start_day" - name="block_appointments_start_day" value="<?= $request['block_appointments_start_day'] ?>"> + name="block_appointments_start_day" value="<?= $request['block_appointments_start_day'] ?? '' ?>"> </label> <label for="block_appointments_end_day" class="col-3"> <?= _('Enddatum') ?> <input type="text" class="size-s has-date-picker" data-date-picker='{">=":"#block_appointments_start_day"}' id="block_appointments_end_day" - name="block_appointments_end_day" value="<?= $request['block_appointments_end_day'] ?>"> + name="block_appointments_end_day" value="<?= $request['block_appointments_end_day'] ?? '' ?>"> </label> <label for="block_appointments_start_time" class="col-3"> <?= _('Startzeit') ?> <input type="text" class="size-s studip-timepicker" id="block_appointments_start_time" - name="block_appointments_start_time" value="<?= $request['block_appointments_start_time'] ?>" + name="block_appointments_start_time" value="<?= $request['block_appointments_start_time'] ?? '' ?>" placeholder="HH:mm"> </label> <label for="block_appointments_end_time" class="col-3"> <?= _('Endzeit') ?> <input type="text" class="size-s studip-timepicker" id="block_appointments_end_time" - name="block_appointments_end_time" value="<?= $request['block_appointments_end_time'] ?>" + name="block_appointments_end_time" value="<?= $request['block_appointments_end_time'] ?? '' ?>" placeholder="HH:mm"> </label> @@ -58,7 +58,7 @@ </label> <label for="block_appointments_days_1" class="col-2"> - <input <?= in_array('weekdays', (array) $request['block_appointments_days']) ? 'checked ' : '' ?> + <input <?= in_array('weekdays', (array) ($request['block_appointments_days'] ?? [])) ? 'checked ' : '' ?> class="block_appointments_days" name="block_appointments_days[]" id="block_appointments_days_1" type="checkbox" value="weekdays"> <?= _('Mo-Fr') ?> @@ -66,7 +66,7 @@ <? foreach (range(0, 6) as $d) : ?> <? $id = 2 + $d ?> <label for="block_appointments_days_<?= $id ?>" class="col-2"> - <input <?= in_array($d+1, (array) $request['block_appointments_days']) ? 'checked ' : '' ?> + <input <?= in_array($d + 1, (array) ($request['block_appointments_days'] ?? [])) ? 'checked ' : '' ?> class="block_appointments_days" name="block_appointments_days[]" id="block_appointments_days_<?= $id ?>" type="checkbox" value="<?= $d + 1 ?>"> @@ -84,7 +84,7 @@ <select clas="size-l" name="block_appointments_termin_typ" id="block_appointments_termin_typ"> <? foreach ($GLOBALS['TERMIN_TYP'] as $key => $value) : ?> <option - value="<?= $key ?>" <?= $request['block_appointments_termin_typ'] == $key ? 'selected' : '' ?>> + value="<?= $key ?>" <?= ($request['block_appointments_termin_typ'] ?? '') == $key ? 'selected' : '' ?>> <?= htmlReady($value['name']) ?> </option> <? endforeach ?> @@ -115,7 +115,7 @@ <label for="block_appointments_room_text"> <?= _('Freie Ortsangabe') ?> <input type="text" name="block_appointments_room_text" id="block_appointments_room_text" - value="<?= $request['block_appointments_room_text'] ?>"> + value="<?= htmlReady($request['block_appointments_room_text'] ?? '') ?>"> </label> <? if (count($lecturers)): ?> @@ -141,7 +141,7 @@ <label for="block_appointments_date_count"> <?= _('Anzahl der Termine') ?> - <input type="text" name="block_appointments_date_count" id="block_appointments_date_count" class="size-s" value="<?= $request['block_appointments_date_count'] ?: 1 ?>"> + <input type="text" name="block_appointments_date_count" id="block_appointments_date_count" class="size-s" value="<?= $request['block_appointments_date_count'] ?? 1 ?>"> </label> </fieldset> diff --git a/app/views/course/lvgselector/index.php b/app/views/course/lvgselector/index.php index a16b425f8bd..ca9b46f1473 100644 --- a/app/views/course/lvgselector/index.php +++ b/app/views/course/lvgselector/index.php @@ -1,5 +1,5 @@ <? if (!$locked) : ?> - <form action="<?= $controller->url_for('course/lvgselector/index/' . $course_id, $url_params) ?>" method="post"> + <form action="<?= $controller->link_for('course/lvgselector/index/' . $course_id, $url_params ?? []) ?>" method="post"> <? endif ?> <h1><?= _('Lehrveranstaltungsgruppen') ?></h1> <div id="assigned" data-ajax-url="<?= $ajax_url ?>" data-forward-url="<?= $no_js_url ?>"> @@ -26,20 +26,19 @@ <? if (!$locked) : ?> <div id="lvgroup-tree-open-nodes"> <? foreach ($open_lvg_nodes as $opennode): ?> - <input type="hidden" name="open_lvg_nodes[]" value="<?= $opennode; ?>"> + <input type="hidden" name="open_lvg_nodes[]" value="<?= htmlReady($opennode) ?>"> <? endforeach; ?> </div> <div id="studyareas" data-ajax-url="<?= $ajax_url ?>" data-forward-url="<?= $no_js_url ?>" data-no-search-result="<?=_('Es wurde kein Suchergebnis gefunden.') ?>"> <h2><?= _('Lehrveranstaltungsgruppen Suche') ?></h2> <div> - <input type="text" style="width: auto;" size="40" name="search" id="lvgroup-tree-search" - value="<?= $searchterm ?>"> + <input type="text" style="width: auto;" size="40" name="search" id="lvgroup-tree-search"> <span id="lvgroup-tree-search-start"> - <?= Icon::create('search', 'clickable')->asInput(["name" => 'start_search', "onclick" => "return STUDIP.MVV.CourseWizard.searchTree()", "class" => $search_result?'hidden-no-js':'']) ?> - </span> - <span id="lvgroup-tree-search-reset" class="hidden-js"> - <?= Icon::create('refresh', 'clickable')->asInput(["name" => 'reset_search', "onclick" => "return STUDIP.MVV.CourseWizard.resetSearch()", "class" => $search_result?'':' hidden-no-js']) ?> + <?= Icon::create('search')->asInput([ + 'name' => 'start_search', + 'onclick' => 'return STUDIP.MVV.CourseWizard.searchTree()', + ]) ?> </span> </div> @@ -61,11 +60,11 @@ <? foreach ((array) $tree as $node) : ?> <? $children = $node->getChildren(); ?> <? if (count($children) || $node->isAssignable()) : ?> - <?= $this->render_partial('course/wizard/steps/lvgroups/_node', - ['node' => $node, 'pos_id' => $pos_id++, - 'open_nodes' => $open_lvg_nodes ?: [], - 'search_result' => $search_result ?: [], - 'children' => $children]) ?> + <?= $this->render_partial('course/wizard/steps/lvgroups/_node', [ + 'node' => $node, 'pos_id' => $pos_id++, + 'open_nodes' => $open_lvg_nodes ?? [], + 'children' => $children, + ]) ?> <? endif; ?> <? endforeach; ?> </ul> @@ -75,9 +74,6 @@ <? if ($open_lvg_nodes) : ?> <input type="hidden" name="open_nodes" value="<?= json_encode($open_lvg_nodes) ?>"> <? endif ?> - <? if ($searchterm) : ?> - <input type="hidden" name="searchterm" value="<?= $searchterm ?>"> - <? endif ?> <script> //<!-- $(function() { diff --git a/app/views/course/room_requests/request_select_properties.php b/app/views/course/room_requests/request_select_properties.php index 4bec03edf4e..de45b117bc0 100644 --- a/app/views/course/room_requests/request_select_properties.php +++ b/app/views/course/room_requests/request_select_properties.php @@ -1,4 +1,4 @@ -<? if (!$embedded) : ?> +<? if (empty($embedded)) : ?> <?= $this->render_partial( 'course/room_requests/_request_form_header', [ @@ -19,7 +19,7 @@ <? if ($available_properties) : ?> <? foreach ($available_properties as $property) : ?> <?= $property->toHtmlInput( - $selected_properties[$property->name], + $selected_properties[$property->name] ?? '', 'selected_properties[' . htmlReady($property->name) . ']', true, false @@ -50,14 +50,16 @@ placeholder="<?= _('Weitere Wünsche oder Bemerkungen zur angefragten Raumbelegung') ?>"><?= htmlReady($comment) ?></textarea> </label> -<? if (!$embedded) : ?> +<? if (empty($embedded)) : ?> </div> </section> <?= $this->render_partial( 'course/room_requests/_request_form_footer', [ - 'room_search_button' => true, - 'save_buttons' => true + 'room_search_button' => true, + 'save_buttons' => true, + 'room_select_button' => false, + 'select_properties_button' => false ] ) ?> <? endif ?> diff --git a/app/views/course/room_requests/request_select_room.php b/app/views/course/room_requests/request_select_room.php index 37e28c3606d..46df75c3c8f 100644 --- a/app/views/course/room_requests/request_select_room.php +++ b/app/views/course/room_requests/request_select_room.php @@ -1,4 +1,4 @@ -<? if (!$embedded) : ?> +<? if (empty($embedded)) : ?> <?= $this->render_partial( 'course/room_requests/_request_form_header', [ @@ -53,7 +53,7 @@ <? endif ?> </div> </section> -<? if (!$embedded) : ?> +<? if (empty($embedded)) : ?> <?= $this->render_partial( 'course/room_requests/_request_form_footer', [ diff --git a/app/views/course/timesrooms/_cancel_form.php b/app/views/course/timesrooms/_cancel_form.php index 35e077b171f..8a2b7067424 100644 --- a/app/views/course/timesrooms/_cancel_form.php +++ b/app/views/course/timesrooms/_cancel_form.php @@ -1,19 +1,19 @@ -<?php -// In den Controller -$content = ''; -if ($termin instanceof CourseExDate && isset($termin->content)) { - $content = $termin->content; -} -?> -<p> - <strong> <?= _('Wenn Sie die nicht stattfindenden Termine mit einem Kommentar versehen, werden die Ausfalltermine im Ablaufplan weiterhin dargestellt und auch im Terminkalender eingeblendet.') ?></strong> -</p> - -<label for="cancel_comment"> - <?= _('Kommentar') ?> - <textarea rows="5" id="cancel_comment" name="cancel_comment"><?= htmlReady($content) ?></textarea> -</label> -<label for="cancel_send_message" class="inline"> - <input type="checkbox" id="cancel_send_message" name="cancel_send_message" value="1"> - <?= _('Benachrichtigung über ausfallende Termine an alle Teilnehmenden verschicken') ?> -</label> +<?php +// In den Controller +$content = ''; +if (isset($termin) && $termin instanceof CourseExDate) { + $content = $termin->content; +} +?> +<p> + <strong> <?= _('Wenn Sie die nicht stattfindenden Termine mit einem Kommentar versehen, werden die Ausfalltermine im Ablaufplan weiterhin dargestellt und auch im Terminkalender eingeblendet.') ?></strong> +</p> + +<label for="cancel_comment"> + <?= _('Kommentar') ?> + <textarea rows="5" id="cancel_comment" name="cancel_comment"><?= htmlReady($content) ?></textarea> +</label> +<label for="cancel_send_message" class="inline"> + <input type="checkbox" id="cancel_send_message" name="cancel_send_message" value="1"> + <?= _('Benachrichtigung über ausfallende Termine an alle Teilnehmenden verschicken') ?> +</label> diff --git a/app/views/course/timesrooms/_regularEvents.php b/app/views/course/timesrooms/_regularEvents.php index 075c4bf5c1f..f2b1829b396 100644 --- a/app/views/course/timesrooms/_regularEvents.php +++ b/app/views/course/timesrooms/_regularEvents.php @@ -38,7 +38,7 @@ </h1> <section> <span> - <? if ($cycle_room_names[$cycle['cycle']->id]): ?> + <? if (isset($cycle_room_names[$cycle['cycle']->id])): ?> <strong><?= _('Raum') ?>:</strong> <?= htmlReady($cycle_room_names[$cycle['cycle']->id])?> <? elseif (Config::get()->RESOURCES_ALLOW_ROOM_REQUESTS) : ?> diff --git a/app/views/course/timesrooms/editDate.php b/app/views/course/timesrooms/editDate.php index cff54b5a1c7..fa9635f585e 100644 --- a/app/views/course/timesrooms/editDate.php +++ b/app/views/course/timesrooms/editDate.php @@ -1,4 +1,4 @@ -<form action="<?= $controller->url_for('course/timesrooms/saveDate/' . $date->termin_id) ?>" +<form action="<?= $controller->link_for('course/timesrooms/saveDate/' . $date->termin_id) ?>" method="post" class="default collapsable" <?= Request::int('fromDialog') ? 'data-dialog="size=big"' : '' ?>> <?= CSRFProtection::tokenTag() ?> <fieldset style="margin-top: 1ex"> @@ -36,7 +36,7 @@ && ($selectable_rooms || $room_search)): ?> <label> <input style="display: inline;" type="radio" name="room" value="room" - id="room" <?= $date->room_booking->resource_id ? 'checked' : '' ?> + id="room" <? if ($date->room_booking) echo 'checked'; ?> data-activates="input.preparation-time[name='preparation_time']"> <?= _('Raum direkt buchen') ?> <span class="flex-row"> @@ -45,7 +45,7 @@ ->setAttributes(['onFocus' => "jQuery('input[type=radio][name=room][value=room]').prop('checked', 'checked')"]) ->render() ?> <? else: ?> - <? $selected_room_id = $date->room_booking->resource_id ?> + <? $selected_room_id = $date->room_booking->resource_id ?? ''; ?> <select name="room_id" onFocus="jQuery('input[type=radio][name=room][value=room]').prop('checked', 'checked')"> <? foreach ($selectable_rooms as $room): ?> <option value="<?= htmlReady($room->id) ?>" diff --git a/app/views/course/wizard/steps/lvgroups/index.php b/app/views/course/wizard/steps/lvgroups/index.php index a23bbe952cc..744cc94a0a5 100644 --- a/app/views/course/wizard/steps/lvgroups/index.php +++ b/app/views/course/wizard/steps/lvgroups/index.php @@ -11,7 +11,7 @@ <li class="lvgroup-tree-assigned-root keep-node" data-id="root"> <ul id="lvgroup-tree-assigned-selected"> <? foreach ($selection->getAreas() as $area) : ?> - <?= $this->render_partial('lvgroups/lvgroup_entry', compact('area')) ?> + <?= $this->render_partial('lvgroups/lvgroup_entry', ['area' => $area, 'locked' => false, 'course_id' => '']) ?> <? endforeach; ?> </ul> </li> diff --git a/app/views/course/wizard/steps/studyareas/index.php b/app/views/course/wizard/steps/studyareas/index.php index 18c46a6533b..17220968cd3 100644 --- a/app/views/course/wizard/steps/studyareas/index.php +++ b/app/views/course/wizard/steps/studyareas/index.php @@ -13,7 +13,7 @@ <?= htmlReady(Config::get()->UNI_NAME_CLEAN) ?> <ul> <?php foreach ($assigned as $element) : ?> - <?= $element->name ?> + <?= htmlReady($element['name']) ?> <?= $this->render_partial('studyareas/_assigned_node', ['element' => $element, 'studyareas' => $values['studyareas']]) ?> <?php endforeach ?> @@ -31,13 +31,12 @@ data-forward-url="<?= $no_js_url ?>" data-no-search-result="<?=_('Es wurde kein Suchergebnis gefunden.') ?>"> <h2><?= _('Alle Studienbereiche') ?></h2> <div> - <input style="width:auto" type="text" size="40" name="search" id="sem-tree-search" - value="<?= $values['searchterm'] ?>"/> + <input style="width:auto" type="text" size="40" name="search" id="sem-tree-search"> <span id="sem-tree-search-start"> - <?= Icon::create('search', 'clickable')->asInput(["name" => 'start_search', "onclick" => "return STUDIP.CourseWizard.searchTree()", "class" => $search_result?'hidden-no-js':'']) ?> - </span> - <span id="sem-tree-search-reset" class="hidden-js"> - <?= Icon::create('refresh', 'clickable')->asInput(["name" => 'reset_search', "onclick" => "return STUDIP.CourseWizard.resetSearch()", "class" => $search_result?'':' hidden-no-js']) ?> + <?= Icon::create('search')->asInput([ + 'name' => 'start_search', + 'onclick' => 'return STUDIP.CourseWizard.searchTree()', + ]) ?> </span> </div> <div id="sem-tree-assign-all" class="hidden-js hidden-no-js"> @@ -54,22 +53,21 @@ </label> <ul> <?php foreach ($tree as $node) : ?> - <?= $this->render_partial('studyareas/_node', - ['node' => $node, 'stepnumber' => $stepnumber, - 'temp_id' => $temp_id, 'values' => $values, - 'open_nodes' => $open_nodes ?: [], - 'search_result' => $search_result ?: []]) ?> + <?= $this->render_partial('studyareas/_node',[ + 'node' => $node, + 'stepnumber' => $stepnumber, + 'temp_id' => $temp_id, + 'values' => $values, + 'open_nodes' => $open_nodes ?? [], + ]) ?> <?php endforeach ?> </ul> </li> </ul> </div> - <?php if ($values['open_node']) : ?> + <?php if (!empty($values['open_node'])) : ?> <input type="hidden" name="open_node" value="<?= $values['open_node'] ?>"/> <?php endif ?> - <?php if ($values['searchterm']) : ?> - <input type="hidden" name="searchterm" value="<?= $values['searchterm'] ?>"/> - <?php endif ?> <script> //<!-- $(function() { diff --git a/app/views/questionnaire/evaluate.php b/app/views/questionnaire/evaluate.php index 5ac29a59693..f33162fcc31 100644 --- a/app/views/questionnaire/evaluate.php +++ b/app/views/questionnaire/evaluate.php @@ -4,7 +4,7 @@ <? foreach ($questionnaire->questions as $question) : ?> <article class="question_<?= $question->getId() ?>"> <? $template = $question->getResultTemplate() ?> - <?= $template ? $template->render(['anonAnswers' => $anonAnswers]) : _("Ergebnisse konnten nicht ausgewertet werden.") ?> + <?= $template ? $template->render(['anonAnswers' => $anonAnswers ?? '']) : _("Ergebnisse konnten nicht ausgewertet werden.") ?> </article> <? endforeach ?> <? else : ?> diff --git a/app/views/questionnaire/question_types/freetext/freetext_answer.php b/app/views/questionnaire/question_types/freetext/freetext_answer.php index 3011012156c..0b2643d72dc 100644 --- a/app/views/questionnaire/question_types/freetext/freetext_answer.php +++ b/app/views/questionnaire/question_types/freetext/freetext_answer.php @@ -15,5 +15,5 @@ </div> <textarea name="answers[<?= $vote->getId() ?>][answerdata][text]" <?= isset($etask->options['mandatory']) && $etask->options['mandatory'] ? "required" : "" ?> - ><?= htmlReady($answerdata['text']) ?></textarea> + ><?= htmlReady($answerdata['text'] ?? '') ?></textarea> </label> diff --git a/app/views/questionnaire/question_types/test/_answer.php b/app/views/questionnaire/question_types/test/_answer.php index 868b32e920d..15f6ba7bcfe 100644 --- a/app/views/questionnaire/question_types/test/_answer.php +++ b/app/views/questionnaire/question_types/test/_answer.php @@ -5,11 +5,11 @@ name="questions[<?= $vote->getId() ?>][task][correct][]" value="<?= $index + 1 ?>" title="<?= _('Ist diese Antwort korrekt?') ?>" - <?= $forcecorrect || $answer['score'] > 0 ? 'checked' : '' ?>> + <?= !empty($forcecorrect) || (!empty($answer['score']) && ($answer['score'] > 0)) ? 'checked' : '' ?>> <input type="text" name="questions[<?= $vote->getId() ?>][task][answers][]" - value="<?= htmlReady($answer['text']) ?>" + value="<?= htmlReady($answer['text'] ?? '') ?>" placeholder="<?= _('Antwort ...') ?>" aria-label="<?= _('Geben Sie eine Antwortmöglichkeit zu der von Ihnen gestellten Frage ein.') ?>"> diff --git a/app/views/questionnaire/question_types/test/test_edit.php b/app/views/questionnaire/question_types/test/test_edit.php index fd558fe1a64..644e4f40b3d 100644 --- a/app/views/questionnaire/question_types/test/test_edit.php +++ b/app/views/questionnaire/question_types/test/test_edit.php @@ -20,7 +20,7 @@ 'vote' => $vote, 'answer' => [], 'index' => $index + 1, - 'forcecorrect' => !isset($etask->task['answers']) || empty($etask->task['answers']) + 'forcecorrect' => empty($etask->task['answers']) ] ); ?> </ol> diff --git a/app/views/questionnaire/question_types/vote/_answer.php b/app/views/questionnaire/question_types/vote/_answer.php index 2b2271fbcab..95c26edc8af 100644 --- a/app/views/questionnaire/question_types/vote/_answer.php +++ b/app/views/questionnaire/question_types/vote/_answer.php @@ -2,7 +2,7 @@ <?= Assets::img('anfasser_24.png', [ 'title' => _('Antwort verschieben'), 'class' => 'move' ]) ?> <input type="text" name="questions[<?= $vote->getId() ?>][task][answers][]" - value="<?= htmlReady($answer['text']) ?>" + value="<?= htmlReady($answer['text'] ?? '') ?>" placeholder="<?= _('Antwort ...') ?>" aria-label="<?= _('Geben Sie eine Antwortmöglichkeit zu der von Ihnen gestellten Frage ein.') ?>"> <?= Icon::create('trash', ['title' => _('Antwort löschen')])->asImg(20, ['class' => 'text-bottom delete']) ?> diff --git a/lib/admissionrules/participantrestrictedadmission/templates/configure.php b/lib/admissionrules/participantrestrictedadmission/templates/configure.php index d29a2bd32df..3c02c6c65da 100644 --- a/lib/admissionrules/participantrestrictedadmission/templates/configure.php +++ b/lib/admissionrules/participantrestrictedadmission/templates/configure.php @@ -19,9 +19,9 @@ <? if ($rule->isFCFSallowed()) : ?> <label for="enable_FCFS"> - <input <?=($rule->prio_exists ? 'disabled' : '')?> type="checkbox" id="enable_FCFS" name="enable_FCFS" value="1" <?= (!is_null($rule->getDistributionTime()) && !$rule->getDistributionTime() ? "checked" : ""); ?>> + <input <?= !empty($rule->prio_exists ? 'disabled' : '') ?> type="checkbox" id="enable_FCFS" name="enable_FCFS" value="1" <?= (!is_null($rule->getDistributionTime()) && !$rule->getDistributionTime() ? "checked" : ""); ?>> <?=_("<u>Keine</u> automatische Platzverteilung (Windhund-Verfahren)")?> - <?=($rule->prio_exists ? tooltipicon(_("Es existieren bereits Anmeldungen für die automatische Platzverteilung.")) : '')?> + <?= !empty($rule->prio_exists) ? tooltipicon(_("Es existieren bereits Anmeldungen für die automatische Platzverteilung.")) : '' ?> </label> <? endif ?> <script> diff --git a/lib/bootstrap.php b/lib/bootstrap.php index 38b5ba65d73..7a46da7b7cd 100644 --- a/lib/bootstrap.php +++ b/lib/bootstrap.php @@ -178,6 +178,7 @@ if (isset($_SERVER['REQUEST_METHOD'])) { // Prime autoloader if cache is enabled (this cannot be in autoloader's // bootstrap because the stud.ip cache needs to have a db conenction) if ($GLOBALS['CACHING_ENABLE']) { + $lookup_hash = null; $cached = StudipCacheFactory::getCache()->read('STUDIP#autoloader-classes'); if ($cached) { $class_lookup = json_decode($cached, true); diff --git a/lib/calendar_functions.inc.php b/lib/calendar_functions.inc.php index 7448e31049a..deec85a19ec 100644 --- a/lib/calendar_functions.inc.php +++ b/lib/calendar_functions.inc.php @@ -57,6 +57,7 @@ function holiday ($tmstamp, $mod = "") { else $easterday = date("z", mktime(0, 0, 0, 4, $q - 31, $year)) + 1; + $name = ''; // Differenz in Tagen zu Ostertag berechnen $doy = date("z", $tmstamp) + 1; $dif = $doy - $easterday; diff --git a/lib/classes/Assets.class.php b/lib/classes/Assets.class.php index dd82073cac7..b5adfcfc486 100644 --- a/lib/classes/Assets.class.php +++ b/lib/classes/Assets.class.php @@ -143,8 +143,6 @@ class Assets return ''; } - $parts = explode('/', $source); - $size = $opt['size'] ?? null; $opt = Assets::parse_attributes($opt); @@ -156,7 +154,10 @@ class Assets } if (isset($size) && !isset($opt['width'])) { - list($opt['width'], $opt['height']) = explode('@', $size, 2); + $size = explode('@', $size, 2); + $opt['width'] = $size[0]; + $opt['height'] = $size[1] ?? null; + unset($opt['size']); } @@ -195,7 +196,7 @@ class Assets $opt['type'] = 'image'; if (isset($size) && !isset($opt['width'])) { - list($opt['width'], $opt['height']) = explode('@', $size, 2); + [$opt['width'], $opt['height']] = explode('@', $size, 2); unset($opt['size']); } @@ -360,8 +361,10 @@ class Assets */ private static function tag($name, $options = [], $open = FALSE) { - if (!$name) + if (!$name) { return ''; + } + ksort($options); return '<' . $name . ' ' . arrayToHtmlAttributes($options) . ($open ? '>' : '>'); } @@ -413,4 +416,3 @@ class Assets return $attributes; } } - diff --git a/lib/classes/DataFieldEntry.class.php b/lib/classes/DataFieldEntry.class.php index 6acd2739ae8..172b5e4ebda 100644 --- a/lib/classes/DataFieldEntry.class.php +++ b/lib/classes/DataFieldEntry.class.php @@ -101,9 +101,10 @@ abstract class DataFieldEntry if (!$range_id) { return []; // we necessarily need a range ID } - $clause1 = ''; $parameters = []; $clause1 = ''; + $clause2 = ''; + $clause3 = ''; if(is_array($range_id)) { // rangeID may be an array ("classic" rangeID and second rangeID used for user roles) $secRangeID = $range_id[1]; diff --git a/lib/classes/DbSnapshot.class.php b/lib/classes/DbSnapshot.class.php index 4d07541f585..8735fa03e19 100644 --- a/lib/classes/DbSnapshot.class.php +++ b/lib/classes/DbSnapshot.class.php @@ -331,7 +331,7 @@ class DbSnapshot } elseif ($m_snap->numRows) { $result = $this->getDistinctRows($key_field); for ($i = 0; $i < $m_snap->numRows; ++$i) { - if (!$result[$m_snap->result[$i][$key_field]]) { + if (empty($result[$m_snap->result[$i][$key_field]])) { $this->result[] = $m_snap->result[$i]; } } diff --git a/lib/classes/DbView.class.php b/lib/classes/DbView.class.php index bcd7d0f8eb9..81e9b9112d1 100644 --- a/lib/classes/DbView.class.php +++ b/lib/classes/DbView.class.php @@ -305,10 +305,12 @@ class DbView public function get_view($name) { - if (self::$dbviews[$name]["pk"]) + if (!empty(self::$dbviews[$name]["pk"])) { $this->pk = self::$dbviews[$name]["pk"]; - if (self::$dbviews[$name]["temp_table_type"]) + } + if (!empty(self::$dbviews[$name]["temp_table_type"])) { $this->temp_table_type = self::$dbviews[$name]["temp_table_type"]; + } if (!$query_list = self::$dbviews[$name]["query"]) $this->halt("View not found: $name"); (is_array($query_list)) ? $query = $query_list[0] : $query = $query_list; diff --git a/lib/classes/I18N.php b/lib/classes/I18N.php index 5ba2c889542..e6f7c0075df 100644 --- a/lib/classes/I18N.php +++ b/lib/classes/I18N.php @@ -125,7 +125,7 @@ class I18N return $template->render([ 'languages' => $GLOBALS['CONTENT_LANGUAGES'], 'base_lang' => key($GLOBALS['CONTENT_LANGUAGES']), - 'wysiwyg' => in_array('wysiwyg', words($attributes['class'])), + 'wysiwyg' => in_array('wysiwyg', words($attributes['class'] ?? '')), 'name' => $this->name, 'value' => $this->value, 'attributes' => $attributes, diff --git a/lib/classes/QuickSearch.class.php b/lib/classes/QuickSearch.class.php index b058c53a2d0..6b239de1b02 100644 --- a/lib/classes/QuickSearch.class.php +++ b/lib/classes/QuickSearch.class.php @@ -95,6 +95,7 @@ class QuickSearch private $inputStyle = null; private $specialQuery = null; + /** * Deletes all older requests that have not been used for three hours * from the session @@ -333,7 +334,7 @@ class QuickSearch */ public function hasExtendedLayout() { - return $this->search->extendedLayout; + return !empty($this->search->extendedLayout); } /** @@ -359,39 +360,23 @@ class QuickSearch $template->set_attribute('withAttributes', $this->withAttributes); $template->set_attribute('searchresults', $searchresults); $template->set_attribute('name', $this->name); - $template->set_attribute('inputClass', $this->inputClass); $template->set_attribute('search_button_name', $this->search_button_name); $template->set_attribute('reset_button_name', $this->reset_button_name); $template->set_attribute('extendedLayout', $this->hasExtendedLayout()); return $template->render(); } else { - //Abfrage in der Session speichern: - $query_id = md5(serialize($this->search)); - if ($this->specialQuery) { - $_SESSION['QuickSearches'][$query_id]['query'] = $this->specialQuery; - } elseif ($this->search instanceof SearchType) { - $_SESSION['QuickSearches'][$query_id]['object'] = serialize($this->search); - if ($this->search instanceof SearchType) { - $_SESSION['QuickSearches'][$query_id]['includePath'] = $this->search->includePath(); - } - $_SESSION['QuickSearches'][$query_id]['time'] = time(); - } else { - $_SESSION['QuickSearches'][$query_id]['query'] = $this->search; - } - $_SESSION['QuickSearches'][$query_id]['time'] = time(); - //var_dump($_SESSION['QuickSearches'][$query_id]); + $query_id = $this->storeSearchInSession(); + //Ausgabe: $template = $GLOBALS['template_factory']->open('quicksearch/inputfield.php'); $template->set_attribute('withButton', $this->withButton); $template->set_attribute('box_align', $this->box_align); $template->set_attribute('box_width', $this->box_width); - $template->set_attribute('inputStyle', $this->inputStyle ? $this->inputStyle : ""); $template->set_attribute('beschriftung', $this->beschriftung()); $template->set_attribute('name', $this->name); $template->set_attribute('defaultID', $this->defaultID); $template->set_attribute('defaultName', $this->defaultName); - $template->set_attribute('inputClass', $this->inputClass); $template->set_attribute('withAttributes', $this->withAttributes ? $this->withAttributes : []); $template->set_attribute('jsfunction', $this->jsfunction); $template->set_attribute('autocomplete_disabled', Config::get()->getValue("AJAX_AUTOCOMPLETE_DISABLED") || $this->autocomplete_disabled); @@ -466,4 +451,36 @@ class QuickSearch return ""; } } + + /** + * Abfrage in der Session speichern + * + * @return string + */ + protected function storeSearchInSession(): string + { + $query_id = md5(serialize($this->search)); + + // Prepare object + $item = [ + 'time' => time(), + ]; + + if ($this->search instanceof SearchType) { + $item['object'] = serialize($this->search); + if ($this->search instanceof SearchType) { + $item['includePath'] = $this->search->includePath(); + } + } else { + $item['query'] = $this->search; + } + + // Actually storing in session + if (!isset($_SESSION['QuickSearches'])) { + $_SESSION['QuickSearches'] = []; + } + $_SESSION['QuickSearches'][$query_id] = $item; + + return $query_id; + } } diff --git a/lib/classes/Seminar.class.php b/lib/classes/Seminar.class.php index 86546ceac07..0e839e88fee 100644 --- a/lib/classes/Seminar.class.php +++ b/lib/classes/Seminar.class.php @@ -366,6 +366,9 @@ class Seminar ]; if ($val->getResourceID()) { + if (!isset($rooms[$val->getResourceID()])) { + $rooms[$val->getResourceID()] = 0; + } $rooms[$val->getResourceID()]++; } @@ -1755,7 +1758,7 @@ class Seminar $template = $GLOBALS['template_factory']->open($template); } - if ($params['semester_id']) { + if (!empty($params['semester_id'])) { $semester = Semester::find($params['semester_id']); if ($semester) { // apply filter diff --git a/lib/classes/StudipSemSearchHelper.class.php b/lib/classes/StudipSemSearchHelper.class.php index c26742dc447..3875bc2e309 100644 --- a/lib/classes/StudipSemSearchHelper.class.php +++ b/lib/classes/StudipSemSearchHelper.class.php @@ -73,8 +73,11 @@ class StudipSemSearchHelper { $this->visible_only = $visible_only; } - public function doSearch(){ - if(!count($this->params)) return false; + public function doSearch() + { + if (count($this->params) === 0) { + return false; + } $this->params = array_map('addslashes', $this->params); $clause = ""; $and_clause = ""; @@ -83,26 +86,28 @@ class StudipSemSearchHelper { $view = DbView::getView('sem_tree'); - if (isset($this->params['sem']) && $this->params['sem'] != 'all'){ + if (isset($this->params['sem']) && $this->params['sem'] !== 'all'){ $sem_number = (int)$this->params['sem']; $clause = " HAVING (sem_number <= $sem_number AND (sem_number_end >= $sem_number OR sem_number_end = -1)) "; } - if (isset($this->params['category']) && $this->params['category'] != 'all'){ - foreach($GLOBALS['SEM_TYPE'] as $type_key => $type_value){ - if($type_value['class'] == $this->params['category']) + $sem_types = []; + if (isset($this->params['category']) && $this->params['category'] !== 'all'){ + foreach ($GLOBALS['SEM_TYPE'] as $type_key => $type_value){ + if ($type_value['class'] == $this->params['category']) $sem_types[] = $type_key; } } if (isset($this->params['type']) && $this->params['type'] != 'all'){ - unset($sem_types); - $sem_types[0] = $this->params['type']; + $sem_types = [$this->params['type']]; } - if (is_array($sem_types)){ + if ($sem_types) { $clause = " AND c.status IN('" . join("','",$sem_types) . "') " . $clause; } + $view->params = []; + if ($this->params['scope_choose'] && $this->params['scope_choose'] != 'root'){ $sem_tree = TreeAbstract::GetInstance("StudipSemTree", false); $view->params[0] = (is_array($sem_types) ? $sem_types : $sem_tree->sem_status); @@ -171,7 +176,7 @@ class StudipSemSearchHelper { $toFilter = explode(" ", $this->params['title']); $search_for = "(Name LIKE '%" . implode("%' AND Name LIKE '%", $toFilter) . "%')"; - $view->params[0] .= ($this->params['title']) ? $search_for . " " : " "; + $view->params[0] = $this->params['title'] ? $search_for . " " : " "; $view->params[0] .= ($this->params['title'] && $this->params['sub_title']) ? $combination : " "; $view->params[0] .= ($this->params['sub_title']) ? " Untertitel LIKE '%" . $this->trim($this->params['sub_title']) . "%' " : " "; diff --git a/lib/classes/admission/CourseSet.class.php b/lib/classes/admission/CourseSet.class.php index 054c9506479..e3a7e9246cb 100644 --- a/lib/classes/admission/CourseSet.class.php +++ b/lib/classes/admission/CourseSet.class.php @@ -381,19 +381,19 @@ class CourseSet $query .= " AND (c.`private`=0 OR c.`user_id`=?)"; $parameters[] = $GLOBALS['user']->id; } - if ($filter['course_set_name']) { + if (!empty($filter['course_set_name'])) { $query .= " AND c.name LIKE ?"; $parameters[] = $filter['course_set_name'] . '%'; } - if (is_array($filter['rule_types']) && count($filter['rule_types'])) { + if (!empty($filter['rule_types']) && is_array($filter['rule_types']) && count($filter['rule_types'])) { $query .= " AND cr.type IN (?)"; $parameters[] = $filter['rule_types']; } - if ($filter['semester_id']) { + if (!empty($filter['semester_id'])) { $query .= " AND s.start_time = ?"; $parameters[] = Semester::find($filter['semester_id'])->beginn; } - if ($filter['course_set_chdate']) { + if (!empty($filter['course_set_chdate'])) { $query .= " AND c.chdate < ?"; $parameters[] = $filter['chdate']; } @@ -420,19 +420,19 @@ class CourseSet $parameters = []; $query .= " AND (c.`private`=0 OR c.`user_id`=?)"; $parameters[] = $GLOBALS['user']->id; - if ($filter['course_set_name']) { + if (!empty($filter['course_set_name'])) { $query .= " AND c.name LIKE ?"; $parameters[] = $filter['course_set_name'] . '%'; } - if (is_array($filter['rule_types']) && count($filter['rule_types'])) { + if (!empty($filter['rule_types']) && is_array($filter['rule_types']) && count($filter['rule_types'])) { $query .= " AND cr.type IN (?)"; $parameters[] = $filter['rule_types']; } - if ($filter['semester_id']) { + if (!empty($filter['semester_id'])) { $query .= " AND s.start_time = ?"; $parameters[] = Semester::find($filter['semester_id'])->beginn; } - if ($filter['course_set_chdate']) { + if (!empty($filter['course_set_chdate'])) { $query .= " AND c.chdate < ?"; $parameters[] = $filter['chdate']; } @@ -1019,6 +1019,7 @@ class CourseSet public function toString($short=false) { $tpl = $GLOBALS['template_factory']->open('admission/courseset/info'); $tpl->set_attribute('courseset', $this); + $tpl->set_attribute('is_limited', false); $institutes = []; if (!$short) { $institutes = Institute::findAndMapMany(function($i) {return $i->name;}, array_keys($this->institutes), 'ORDER BY Name'); diff --git a/lib/classes/coursewizardsteps/LVGroupsWizardStep.php b/lib/classes/coursewizardsteps/LVGroupsWizardStep.php index 0dbf0582b72..3a9ba545c6f 100644 --- a/lib/classes/coursewizardsteps/LVGroupsWizardStep.php +++ b/lib/classes/coursewizardsteps/LVGroupsWizardStep.php @@ -306,7 +306,7 @@ class LVGroupsWizardStep implements CourseWizardStep $area = Lvgruppe::find($mvvid[0]); $factory = new Flexi_TemplateFactory($GLOBALS['STUDIP_BASE_PATH'] . '/app/views'); - $html = $factory->render('course/wizard/steps/lvgroups/lvgroup_entry', compact('area')); + $html = $factory->render('course/wizard/steps/lvgroups/lvgroup_entry', ['area' => $area, 'locked' => false, 'course_id' => '']); $data = [ 'id' => $area->id, diff --git a/lib/classes/coursewizardsteps/StudyAreasWizardStep.php b/lib/classes/coursewizardsteps/StudyAreasWizardStep.php index 054f63852ab..c0edda89a23 100644 --- a/lib/classes/coursewizardsteps/StudyAreasWizardStep.php +++ b/lib/classes/coursewizardsteps/StudyAreasWizardStep.php @@ -57,7 +57,7 @@ class StudyAreasWizardStep implements CourseWizardStep * Someone works without JS activated, load all ancestors and * children of open node. */ - if ($values['open_node']) { + if (!empty($values['open_node'])) { $tpl->set_attribute('open_nodes', $this->buildPartialSemTree( StudipStudyArea::backwards( @@ -68,7 +68,7 @@ class StudyAreasWizardStep implements CourseWizardStep * Someone works without JS and has entered a search term: * build the partial tree with search results. */ - if ($values['searchterm']) { + if (!empty($values['searchterm'])) { $search = $this->searchSemTree($values['searchterm'], true); if ($search) { $tpl->set_attribute('open_nodes', $search); diff --git a/lib/classes/searchtypes/SeminarSearch.class.php b/lib/classes/searchtypes/SeminarSearch.class.php index d7fc6ed0418..e4902289314 100644 --- a/lib/classes/searchtypes/SeminarSearch.class.php +++ b/lib/classes/searchtypes/SeminarSearch.class.php @@ -48,11 +48,12 @@ class SeminarSearch extends SearchType $search_helper->setParams( [ 'quick_search' => $keyword, - 'qs_choose' => $contextual_data['search_sem_qs_choose'] ?: 'all', + 'qs_choose' => $contextual_data['search_sem_qs_choose'] ?? 'all', 'sem' => $contextual_data['search_sem_sem'] ?? 'all', - 'category' => $contextual_data['search_sem_category'], - 'scope_choose' => $contextual_data['search_sem_scope_choose'], - 'range_choose' => $contextual_data['search_sem_range_choose']], + 'category' => $contextual_data['search_sem_category'] ?? null, + 'scope_choose' => $contextual_data['search_sem_scope_choose'] ?? null, + 'range_choose' => $contextual_data['search_sem_range_choose'] ?? null, + ], !(is_object($GLOBALS['perm']) && $GLOBALS['perm']->have_perm( Config::Get()->SEM_VISIBILITY_PERM))); diff --git a/lib/export/export_choose_xslt.inc.php b/lib/export/export_choose_xslt.inc.php index cbf152ef1a2..3bddbc336fb 100644 --- a/lib/export/export_choose_xslt.inc.php +++ b/lib/export/export_choose_xslt.inc.php @@ -61,7 +61,7 @@ function CheckParamXSLT() if ($page === 1) { reset($xslt_files); foreach ($xslt_files as $val) { - if ($val[$ex_type] && $val[$format]) { + if (!empty($val[$ex_type]) && !empty($val[$format])) { $mod_counter++; } } @@ -89,6 +89,7 @@ function CheckParamXSLT() } $export_pagename = _("Konvertierung der Daten: "); +$export_pagecontent = ''; $xslt_filename = mb_strlen(Request::get('xslt_filename')) ? basename(stripslashes(Request::get('xslt_filename'))) : $xslt_filename_default; if (!CheckParamXSLT()) { @@ -162,9 +163,9 @@ if ($format === "xml" && $page === 1) { $opt_num = 0; foreach ($xslt_files as $key => $val) { - if ($val[$ex_type] && $val[$format]) { + if (!empty($val[$ex_type]) && !empty($val[$format])) { $export_pagecontent .= "<label><input type=\"radio\" name=\"choose\" value=\"" . $key . "\""; - if ($key == $choose || !$choose && $opt_num == 0) { + if (empty($choose) && $opt_num == 0 || (!empty($choose) && $key == $choose)) { $export_pagecontent .= " checked"; } $export_pagecontent .= ">" . $val["name"]; diff --git a/lib/export/export_start.inc.php b/lib/export/export_start.inc.php index 14f8da3c1d7..605d505ba98 100644 --- a/lib/export/export_start.inc.php +++ b/lib/export/export_start.inc.php @@ -44,7 +44,7 @@ $export_pagename = _("Datenexport - Startseite"); $export_info = null; -$export_pagecontent .= "<form class=\"default\" method=\"POST\" action=\"" . URLHelper::getURL() . "\">"; +$export_pagecontent = "<form class=\"default\" method=\"POST\" action=\"" . URLHelper::getLink() . "\">"; $export_pagecontent .= CSRFProtection::tokenTag(); $export_pagecontent .= "<fieldset><legend>"._("Bitte wählen Sie Datenart und Einrichtung.")."</legend>"; diff --git a/lib/export/export_studipdata_func.inc.php b/lib/export/export_studipdata_func.inc.php index b645e1e2f23..1139f214ea8 100644 --- a/lib/export/export_studipdata_func.inc.php +++ b/lib/export/export_studipdata_func.inc.php @@ -130,10 +130,10 @@ function export_range($range_id) // Ist die Range-ID ein Range-Tree-Item? if ($range_id != 'root') { $tree_object = new RangeTreeObject($range_id); - $range_name = $tree_object->item_data["name"]; + $range_name = $tree_object->item_data["name"] ?? ''; // Tree-Item ist ein Institut: - if ($tree_object->item_data['studip_object'] == 'inst') { + if (!empty($tree_object->item_data['studip_object']) && $tree_object->item_data['studip_object'] === 'inst') { if (!$output_startet) { output_data(xml_header(), $o_mode); $output_startet = true; diff --git a/lib/export/export_xml.inc.php b/lib/export/export_xml.inc.php index bdc2e9c55e9..f679f7cc125 100644 --- a/lib/export/export_xml.inc.php +++ b/lib/export/export_xml.inc.php @@ -120,7 +120,7 @@ if ($o_mode === 'file' || $o_mode === 'choose') { if ($object_counter<1) { $xml_export_text = _("Es wurden keine Daten gefunden!"); $export_error = _("Es wurden keine Daten gefunden! Die übergebene ID ist mit keinen Veranstaltungs- / Personendaten verbunden."); - $export_pagecontent .= "<form class=\"default\"><footer>" + $export_pagecontent = "<form class=\"default\"><footer>" . LinkButton::create('<< ' . _('Zurück'), URLHelper::getURL("", ['range_id' => $range_id, 'ex_type' => $ex_type, 'ex_sem' => $ex_sem, 'o_mode' => 'start'])) . "</footer></form>"; $export_error_num ++; @@ -133,7 +133,7 @@ if ($o_mode === 'file' || $o_mode === 'choose') { $export_msg = sprintf(_("%s Objekte wurden verarbeitet.") . " ", $object_counter); } - $export_pagecontent .= "<form class=\"default\" method=\"POST\" action=\"" . URLHelper::getLink() . "\">"; + $export_pagecontent = "<form class=\"default\" method=\"POST\" action=\"" . URLHelper::getLink() . "\">"; $export_pagecontent .= CSRFProtection::tokenTag(); $export_pagecontent .= "<input type=\"hidden\" name=\"page\" value=\"2\">"; $export_pagecontent .= "<input type=\"hidden\" name=\"format\" value=\"" . htmlReady($format) . "\">"; diff --git a/lib/export/export_xml_func.inc.php b/lib/export/export_xml_func.inc.php index f294b67c91b..2021feb05d5 100644 --- a/lib/export/export_xml_func.inc.php +++ b/lib/export/export_xml_func.inc.php @@ -72,15 +72,10 @@ global $SOFTWARE_VERSION, $ex_type, $ex_sem, $range_name, $range_id; * @param string value for optional attribute "key" * @return string xml open tag */ -function xml_open_tag($tag_name, $tag_key = "") +function xml_open_tag($tag_name, $tag_key = null) { - $xml_tag_string = ''; - - if ($tag_key) { - $xml_tag_string .= " key=\"" . xml_escape ($tag_key ) ."\"" ; - } - - $xml_tag_string = "<" . $tag_name . $xml_tag_string . ">\n"; + $xml_tag_string = rtrim(' ' . xml_attributes_to_string(compact('tag_key'))); + $xml_tag_string = "<{$tag_name}{$xml_tag_string}>\n"; return $xml_tag_string; } @@ -115,12 +110,8 @@ function xml_close_tag($tag_name) */ function xml_tag($tag_name, $tag_content, $tag_attributes = null) { - if (is_array($tag_attributes)){ - foreach($tag_attributes as $key => $value){ - $xml_tag_string .= " $key=\"".xml_escape($value)."\" "; - } - } - $xml_tag_string = "<" . $tag_name . $xml_tag_string . ">" + $xml_tag_string = xml_attributes_to_string($tag_attributes ?? []); + $xml_tag_string = "<{$tag_name}{$xml_tag_string}>" . xml_escape ( $tag_content ) . "</" . $tag_name . ">\n"; return $xml_tag_string; @@ -152,3 +143,20 @@ function xml_escape($string) $string = preg_replace('/[\x00-\x08\x0b\x0c\x0e-\x1f]/', '', $string); return htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); } + +function xml_attributes_to_string(array $attributes): string +{ + $attributes = array_filter($attributes, function ($attribute) { + return $attribute !== null; + }); + + if (count($attributes) === 0) { + return ''; + } + + $result = ['']; // Empty item for a leading whitespace + foreach ($attributes as $key => $value) { + $result[] = sprintf('%s="%s"', $key, xml_escape($value)); + } + return implode(' ', $result); +} diff --git a/lib/models/AbschlussKategorie.php b/lib/models/AbschlussKategorie.php index 0f866c47b0a..e60520197ea 100644 --- a/lib/models/AbschlussKategorie.php +++ b/lib/models/AbschlussKategorie.php @@ -308,8 +308,8 @@ class AbschlussKategorie extends ModuleManagementModelTreeItem $_SESSION['MVV/StgteilVersion/trail_parent_id'] = $this->getId(); $trail_parent_id = $_SESSION['MVV/AbschlussKategorie/trail_parent_id']; - $start_sem = self::$object_filter['StgteilVersion']['start_semester']; - $end_sem = self::$object_filter['StgteilVersion']['end_semester']; + $start_sem = self::$object_filter['StgteilVersion']['start_semester'] ?? null; + $end_sem = self::$object_filter['StgteilVersion']['end_semester'] ?? null; return StgteilVersion::getEnrichedByQuery(" SELECT msv.* FROM mvv_abschl_zuord maz diff --git a/lib/models/CourseDate.class.php b/lib/models/CourseDate.class.php index 5d8c60dc41f..5550f93be44 100644 --- a/lib/models/CourseDate.class.php +++ b/lib/models/CourseDate.class.php @@ -224,7 +224,7 @@ class CourseDate extends SimpleORMap implements PrivacyObject */ public function getRoomName() { - if (Config::get()->RESOURCES_ENABLE && $this->room_booking->resource_id) { + if (Config::get()->RESOURCES_ENABLE && $this->room_booking->resource) { return $this->room_booking->resource->name; } return $this['raum']; @@ -237,7 +237,7 @@ class CourseDate extends SimpleORMap implements PrivacyObject */ public function getRoom() { - if (Config::get()->RESOURCES_ENABLE && $this->room_booking->resource_id) { + if (Config::get()->RESOURCES_ENABLE && $this->room_booking->resource) { return $this->room_booking->resource->getDerivedClassInstance(); } return null; diff --git a/lib/models/Semester.class.php b/lib/models/Semester.class.php index 94a66059da0..6e55e4e89fa 100644 --- a/lib/models/Semester.class.php +++ b/lib/models/Semester.class.php @@ -156,7 +156,7 @@ class Semester extends SimpleORMap { return array_values( array_filter(self::getAllAsArray(), function ($semester, $key) use($with_before_first) { - return $GLOBALS['perm']->have_perm('admin') || $semester['visible'] || ((int)$key === 0 && $with_before_first); + return $GLOBALS['perm']->have_perm('admin') || !empty($semester['visible']) || ((int)$key === 0 && $with_before_first); }, ARRAY_FILTER_USE_BOTH) ); } diff --git a/lib/models/SimpleORMap.class.php b/lib/models/SimpleORMap.class.php index 4bce0cf0540..cf09f450511 100644 --- a/lib/models/SimpleORMap.class.php +++ b/lib/models/SimpleORMap.class.php @@ -2240,7 +2240,7 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate } else { $p = (array)$params($this); $records = call_user_func_array($to_call, count($p) ? $p : [null]); - $result = is_array($records) ? $records[0] : $records; + $result = is_array($records) ? ($records[0] ?? null) : $records; $this->relations[$relation] = $result; } } diff --git a/lib/models/StudipStudyArea.class.php b/lib/models/StudipStudyArea.class.php index fe9ae73c9ee..4ef7a5783fb 100644 --- a/lib/models/StudipStudyArea.class.php +++ b/lib/models/StudipStudyArea.class.php @@ -427,12 +427,10 @@ class StudipStudyArea extends SimpleORMap foreach ($nodes as $node) { // if we know the node already place there - if ($hashmap[$node->parent_id]) { - + if (isset($hashmap[$node->parent_id])) { $cached = $hashmap[$node->parent_id]; $cached->required_children[$node->id] = $node; } else { - // if we have a node that is directly under root if ($node->parent_id == $root->id) { $root->required_children[$node->id] = $node; diff --git a/lib/models/resources/Building.class.php b/lib/models/resources/Building.class.php index 09c7786bf8d..f6bb5a1d171 100644 --- a/lib/models/resources/Building.class.php +++ b/lib/models/resources/Building.class.php @@ -32,31 +32,32 @@ class Building extends Resource 'number', 'geo_coordinates' ]; - + protected static function configure($config = []) { - if (!is_array($config['additional_fields'])) { + if (!isset($config['additional_fields'])) { $config['additional_fields'] = []; } + foreach (self::$required_properties as $property) { $config['additional_fields'][$property] = [ 'get' => 'getProperty', 'set' => 'setProperty' ]; } - + $config['additional_fields']['location']['get'] = 'findLocation'; $config['additional_fields']['rooms']['get'] = 'findRooms'; - + $config['additional_fields']['facility_manager'] = [ 'get' => 'getPropertyRelatedObject', 'set' => 'setPropertyRelatedObject' ]; - + $config['registered_callbacks']['before_store'][] = 'cbValidate'; parent::configure($config); } - + /** * Returns all buildings which are stored in the database. * @@ -71,7 +72,7 @@ class Building extends Resource ORDER BY sort_position DESC, name ASC, mkdate ASC" ); } - + public static function getTranslatedClassName($item_count = 1) { return ngettext( @@ -80,12 +81,12 @@ class Building extends Resource $item_count ); } - + public static function getRequiredProperties() { return self::$required_properties; } - + /** * Finds buildings by a location specified by its ID. * @@ -98,17 +99,17 @@ class Building extends Resource if (!$location_id) { return []; } - + $location = Building::find($location_id); if (!$location) { return []; } - + //Return all found Building objects below the location: return $location->findChildrenByClassName('Building', 0, true); } - - + + /** * Returns the part of the URL for getLink and getURL which will be * placed inside the calls to URLHelper::getLink and URLHelper::getURL @@ -128,13 +129,13 @@ class Building extends Resource _('Zur Erstellung der URL fehlt eine Gebäude-ID!') ); } - + //There are some actions which can be handled by the general //resource controller: if (in_array($action, ['files', 'request', 'lock'])) { return parent::buildPathForAction($action, $id); } - + switch ($action) { case 'show': return 'dispatch.php/resources/building/index/' . $id; @@ -148,7 +149,7 @@ class Building extends Resource return parent::buildPathForAction($action, $id); } } - + /** * Returns the appropriate link for the building action that shall be * executed on a building. @@ -173,7 +174,7 @@ class Building extends Resource $link_parameters ); } - + /** * Returns the appropriate URL for the building action that shall be * executed on a building. @@ -197,12 +198,12 @@ class Building extends Resource $url_parameters ); } - + public function getRequiredPropertyNames() { return self::$required_properties; } - + /** * @see StudipItem::__toString */ @@ -210,7 +211,7 @@ class Building extends Resource { return $this->getFullName(); } - + public function cbValidate() { if (!$this->findParentByClassName('Location')) { @@ -222,7 +223,7 @@ class Building extends Resource ) ); } - + if (!is_a($this->category->class_name, get_class($this), true)) { //Only resources with the Building category can be handled //with this class! @@ -233,12 +234,12 @@ class Building extends Resource ) ); } - + return true; } - + //property and shortcut methods: - + /** * Returns the full (localised) name of the building. * @@ -251,7 +252,7 @@ class Building extends Resource $this->name ); } - + /** * Returns the path for the building's image. * If the building has no image the path for a general @@ -263,25 +264,25 @@ class Building extends Resource { return $this->getIcon()->asImagePath(); } - + public function getIcon($role = Icon::ROLE_INFO) { return Icon::create('home', $role); } - + public function checkHierarchy() { //We must check if this building has buildings as children //or rooms or buildings as parents. In any of those cases the hierarchy //is invalid! - + $children = $this->findChildrenByClassName('Building'); if (count($children) > 0) { //At least one child anywhere below this building //resource is a building, too. return false; } - + $parents = ResourceManager::getHierarchy($this); //We do not need to check this element: array_shift($parents); @@ -292,12 +293,12 @@ class Building extends Resource return false; } } - + //If code execution reaches this point then //the hierarchy around this building is valid. return true; } - + /** * Returns the link for an action for this building. * This is the non-static variant of Building::getLinkForAction. @@ -317,7 +318,7 @@ class Building extends Resource $link_parameters ); } - + /** * Returns the URL for an action for this building. * This is the non-static variant of Building::getURLForAction. @@ -337,7 +338,7 @@ class Building extends Resource $url_parameters ); } - + /** * Retrieves the rooms which reside inside this building by looking up * the child resources of this building. @@ -348,7 +349,7 @@ class Building extends Resource public function findRooms() { $rooms = parent::findChildrenByClassName('Room', 0, true); - + $result = []; foreach ($rooms as $room) { if ($room instanceof Room) { @@ -357,7 +358,7 @@ class Building extends Resource } return $result; } - + /** * Retrieves the location where this building is assigned to by looking up * the parent resources of this building. @@ -373,7 +374,7 @@ class Building extends Resource } return null; } - + /** * Adds a child resource to this building. The child resource * must not be a resource of the class Building or Location. @@ -398,7 +399,7 @@ class Building extends Resource } return parent::addChild($resource); } - + public function createSimpleBooking( User $user, DateTime $begin, @@ -411,7 +412,7 @@ class Building extends Resource { return null; } - + public function createBookingFromRequest( User $user, ResourceRequest $request, @@ -425,8 +426,8 @@ class Building extends Resource { return null; } - - + + public function createBooking( User $user, $range_id = null, @@ -443,7 +444,7 @@ class Building extends Resource { return null; } - + public function createSimpleRequest( User $user, DateTime $begin, @@ -454,7 +455,7 @@ class Building extends Resource { return null; } - + public function createRequest( User $user, $date_range_ids = null, @@ -465,7 +466,7 @@ class Building extends Resource { return null; } - + public function createLock( User $user, DateTime $begin, @@ -475,7 +476,7 @@ class Building extends Resource { return null; } - + public function isAssigned( DateTime $begin, DateTime $end, @@ -484,7 +485,7 @@ class Building extends Resource { return false; } - + public function isReserved( DateTime $begin, DateTime $end, @@ -493,7 +494,7 @@ class Building extends Resource { return false; } - + public function isLocked( DateTime $begin, DateTime $end, @@ -502,7 +503,7 @@ class Building extends Resource { return true; } - + public function isAvailable( DateTime $begin, DateTime $end, diff --git a/lib/modules/CoreScm.class.php b/lib/modules/CoreScm.class.php index 595c219cf6a..86e10e14d70 100644 --- a/lib/modules/CoreScm.class.php +++ b/lib/modules/CoreScm.class.php @@ -94,7 +94,7 @@ class CoreScm extends CorePlugin implements StudipModule $link = 'dispatch.php/course/scm'; - $navigation = new Navigation($scms->first()->tab_name ?: _('Informationen'), $link); + $navigation = new Navigation($scms->first()->tab_name ?? _('Informationen'), $link); $navigation->setImage(Icon::create('infopage', Icon::ROLE_INFO_ALT)); $navigation->setActiveImage(Icon::create('infopage', Icon::ROLE_INFO)); diff --git a/lib/raumzeit/SeminarDB.class.php b/lib/raumzeit/SeminarDB.class.php index 85a8c0d4e71..566f7af5af5 100644 --- a/lib/raumzeit/SeminarDB.class.php +++ b/lib/raumzeit/SeminarDB.class.php @@ -88,6 +88,7 @@ class SeminarDB public static function getStatOfNotBookedRooms($cycle_id, $seminar_id, $filterStart = 0, $filterEnd = 0) { $stat = [ + 'all' => 0, 'booked' => 0, 'open' => 0, 'open_rooms' => [], diff --git a/lib/raumzeit/raumzeit_functions.inc.php b/lib/raumzeit/raumzeit_functions.inc.php index 96b3880184b..a65f3bb0dd7 100644 --- a/lib/raumzeit/raumzeit_functions.inc.php +++ b/lib/raumzeit/raumzeit_functions.inc.php @@ -59,7 +59,7 @@ function raumzeit_send_cancel_message($comment, $dates) $message = sprintf(_("In der Veranstaltung %s fällt der/die folgende(n) Termine aus:"), $course->name . ' ('. join(',', $lecturers) .') ' . $course->start_semester->name); $message .= "\n\n- "; - $message .= join("\n- " , array_map(function($a) {return $a->toString();}, $dates)); + $message .= join("\n- " , array_map(function($a) {return (string)$a; }, $dates)); if ($comment) { $message .= "\n\n" . $comment; } diff --git a/lib/resources/RoomManager.class.php b/lib/resources/RoomManager.class.php index b4ca702f928..240ce459813 100644 --- a/lib/resources/RoomManager.class.php +++ b/lib/resources/RoomManager.class.php @@ -510,7 +510,7 @@ class RoomManager $sql_array['room_name'] = $room_name; } - if ($properties['room_category_id']) { + if (!empty($properties['room_category_id'])) { $sql .= "AND rc.id = :room_category_id "; $sql_array['room_category_id'] = $properties['room_category_id']; } diff --git a/public/export.php b/public/export.php index bd97656e72f..b24638acd08 100644 --- a/public/export.php +++ b/public/export.php @@ -66,6 +66,10 @@ ob_start(); if (Config::get()->EXPORT_ENABLE) { $ex_sem_class = Request::intArray('ex_sem_class'); + $export_error_num = 0; + $xslt_process_done = false; + $start_done = false; + $xml_output_done = false; // Zurueckbutton benutzt? if (Request::submitted('back')) @@ -114,7 +118,7 @@ if (Config::get()->EXPORT_ENABLE) $xml_output_done = true; } - if ( ($choose != "") AND ($format != "") AND ($format != "xml") AND (Config::get()->XSLT_ENABLE) AND ($export_error_num==0) AND + if ( (!empty($choose)) AND ($format != "") AND ($format != "xml") AND (Config::get()->XSLT_ENABLE) AND ($export_error_num==0) AND ( ($o_mode == "processor") OR ($o_mode == "passthrough") OR ($page == 3) ) ) { include("lib/export/export_run_xslt.inc.php"); diff --git a/templates/dates/seminar_html.php b/templates/dates/seminar_html.php index 2680287d445..515d9f89624 100644 --- a/templates/dates/seminar_html.php +++ b/templates/dates/seminar_html.php @@ -58,6 +58,7 @@ if (!$dates['regular']['turnus_data'] && empty($dates['irregular'])) { $freetext_rooms['(' . htmlReady($date['raum']) . ')']++; } } + // Remove invalid entry if present unset($irregular_rooms['']); if (is_array($irregular) && sizeof($irregular)) { diff --git a/templates/quicksearch/inputfield.php b/templates/quicksearch/inputfield.php index db42e37f63c..fb9b63238e2 100644 --- a/templates/quicksearch/inputfield.php +++ b/templates/quicksearch/inputfield.php @@ -12,7 +12,7 @@ foreach ($withAttributes as $attr_name => $attr_value) { print ' '.$attr_name.'="'.htmlReady($attr_value).'"'; } - ?> id="<?= $id ?>"<?= $clear_input ?: '' ?> + ?> id="<?= $id ?>" type="text" value="<?= htmlReady($defaultName) ?>" name="<?= strpos($name, "[") === false ? $name."_parameter" : substr($name, 0, strpos($name, "["))."_parameter".substr($name, strpos($name, "[")) ?>" diff --git a/vendor/trails/src/response.php b/vendor/trails/src/response.php index 60376b33a5a..474bfc1a1ee 100644 --- a/vendor/trails/src/response.php +++ b/vendor/trails/src/response.php @@ -75,7 +75,7 @@ class Trails_Response { */ function set_status($status, $reason = NULL) { $this->status = $status; - $this->reason = isset($reason) ? $reason : $this->get_reason($status); + $this->reason = isset($reason) ? $reason : self::get_reason($status); return $this; } @@ -87,7 +87,7 @@ class Trails_Response { * * @return string the reason phrase for this response's status */ - function get_reason($status) { + public static function get_reason($status) { $reason = array( 100 => 'Continue', 'Switching Protocols', 200 => 'OK', 'Created', 'Accepted', 'Non-Authoritative Information', diff --git a/vendor/trails/trails.php b/vendor/trails/trails.php index a6ca0030f43..760fb1664c5 100644 --- a/vendor/trails/trails.php +++ b/vendor/trails/trails.php @@ -371,7 +371,7 @@ class Trails_Response { */ function set_status($status, $reason = NULL) { $this->status = $status; - $this->reason = isset($reason) ? $reason : $this->get_reason($status); + $this->reason = isset($reason) ? $reason : self::get_reason($status); return $this; } @@ -383,7 +383,7 @@ class Trails_Response { * * @return string the reason phrase for this response's status */ - function get_reason($status) { + public static function get_reason($status) { $reason = array( 100 => 'Continue', 'Switching Protocols', 200 => 'OK', 'Created', 'Accepted', 'Non-Authoritative Information', -- GitLab