From 23c0bad0b72692d073e1786af17e41bfaacbe873 Mon Sep 17 00:00:00 2001 From: Elmar Ludwig Date: Wed, 4 Mar 2026 18:10:22 +0100 Subject: enable i18n for sem_class/sem_type and rework UI to edit sem classes, fixes #6275 --- app/controllers/admin/sem_classes.php | 202 +++++++++++---------- app/views/admin/sem_classes/_sem_type.php | 38 ---- app/views/admin/sem_classes/add_sem_class.php | 28 +++ app/views/admin/sem_classes/add_sem_type.php | 17 +- app/views/admin/sem_classes/content_plugin.php | 11 +- app/views/admin/sem_classes/details.php | 121 +++++------- app/views/admin/sem_classes/overview.php | 14 -- db/migrations/6.3.1_sem_class_i18n.php | 62 +++++++ lib/models/SemClass.php | 29 +-- lib/models/SemType.php | 23 +-- .../javascripts/bootstrap/admin_sem_classes.js | 9 +- resources/assets/javascripts/init.js | 2 - .../assets/javascripts/lib/admin_sem_class.js | 152 ---------------- 13 files changed, 250 insertions(+), 458 deletions(-) delete mode 100644 app/views/admin/sem_classes/_sem_type.php create mode 100644 app/views/admin/sem_classes/add_sem_class.php create mode 100644 db/migrations/6.3.1_sem_class_i18n.php delete mode 100644 resources/assets/javascripts/lib/admin_sem_class.js diff --git a/app/controllers/admin/sem_classes.php b/app/controllers/admin/sem_classes.php index a0ea22b..d4f2d1f 100644 --- a/app/controllers/admin/sem_classes.php +++ b/app/controllers/admin/sem_classes.php @@ -23,42 +23,49 @@ class Admin_SemClassesController extends AuthenticatedController public function overview_action() { Navigation::activateItem("/admin/locations/sem_classes"); - if (count($_POST) && Request::submitted('delete') && Request::get("delete_sem_class")) { - $sem_class = $GLOBALS['SEM_CLASS'][Request::get("delete_sem_class")]; - if ($sem_class->delete()) { - PageLayout::postMessage(MessageBox::success(_("Veranstaltungskategorie wurde gelöscht."))); - $GLOBALS['SEM_CLASS'] = SemClass::refreshClasses(); - } - } - if (count($_POST) && Request::get("add_name")) { - $statement = DBManager::get()->prepare( - "SELECT 1 FROM sem_classes WHERE name = :name" - ); - $statement->execute(['name' => Request::get("add_name")]); - $duplicate = $statement->fetchColumn(); - if ($duplicate) { - $message = sprintf(_("Es existiert bereits eine Veranstaltungskategorie mit dem Namen \"%s\""), - htmlReady(Request::get("add_name"))); - PageLayout::postMessage(MessageBox::error($message)); - $this->redirect('admin/sem_classes/overview'); + + $links = new ActionsWidget(); + $links->addLink( + _('Neue Kategorie anlegen'), + $this->url_for('admin/sem_classes/add_sem_class'), + Icon::create('add'), + ['data-dialog' => 'size=auto'] + ); + Sidebar::Get()->addWidget($links); + } + + public function add_sem_class_action() { + } + + public function create_sem_class_action() { + $name = Request::i18n('add_name'); + $copy = Request::get('add_like'); + + if (SemClass::countBySql('name = ?', [$add_name])) { + $message = sprintf(_('Es existiert bereits eine Veranstaltungskategorie mit dem Namen "%s"'), htmlReady($name)); + PageLayout::postError($message); + } else { + if ($copy) { + $sem_class = clone $GLOBALS['SEM_CLASS'][$copy]; + $sem_class->setId(0); } else { - $statement = DBManager::get()->prepare( - "INSERT INTO sem_classes SET name = :name, mkdate = UNIX_TIMESTAMP(), chdate = UNIX_TIMESTAMP()" - ); - NotificationCenter::postNotification('SeminarClassDidCreate', Request::get("add_name"), $GLOBALS['user']->id); - $statement->execute(['name' => Request::get("add_name")]); - $id = DBManager::get()->lastInsertId(); - if (Request::get("add_like")) { - $sem_class = clone $GLOBALS['SEM_CLASS'][Request::get("add_like")]; - $sem_class->name = Request::get("add_name"); - $sem_class->id = $id; - $sem_class->store(); - } - $this->redirect(URLHelper::getURL($this->url_for('admin/sem_classes/details'), ['id' => $id])); - PageLayout::postMessage(MessageBox::success(_("Veranstaltungskategorie wurde erstellt."))); - $GLOBALS['SEM_CLASS'] = SemClass::refreshClasses(); + $sem_class = new SemClass(); } + + $sem_class->name = $name; + $sem_class->store(); + + PageLayout::postSuccess(_('Veranstaltungskategorie wurde erstellt.')); } + $this->redirect('admin/sem_classes/overview'); + } + + public function delete_sem_class_action($id) + { + $sem_class = $GLOBALS['SEM_CLASS'][$id]; + $sem_class->delete(); + PageLayout::postSuccess(_('Veranstaltungskategorie wurde gelöscht.')); + $this->redirect('admin/sem_classes/overview'); } public function details_action() @@ -89,43 +96,59 @@ class Admin_SemClassesController extends AuthenticatedController } $this->modules = $modules; - $this->overview_url = $this->url_for("admin/sem_classes/overview"); + + if (!count($this->sem_class->getSemTypes())) { + PageLayout::postInfo(_('Beachten Sie, dass es noch keine Veranstaltungstypen gibt!')); + } + + $links = new ActionsWidget(); + $links->addLink( + _('Veranstaltungstyp anlegen'), + $this->url_for('admin/sem_classes/add_sem_type', $this->sem_class->id), + Icon::create('add'), + ['data-dialog' => 'size=auto'] + ); + Sidebar::Get()->addWidget($links); } public function save_action() { - if (count($_POST) === 0) { - throw new Exception("Kein Zugriff über GET"); - } - $sem_class = $GLOBALS['SEM_CLASS'][Request::int("sem_class_id")]; + $id = Request::int("sem_class_id"); + $sem_class = $GLOBALS['SEM_CLASS'][$id]; $old_data_sem_class = clone $sem_class; $sem_class->modules = Request::getArray("modules"); - $sem_class->name = Request::get("sem_class_name"); - $sem_class->description = Request::get("sem_class_description"); - $sem_class->title_dozent = Request::get("title_dozent") ? Request::get("title_dozent") : null; - $sem_class->title_dozent_plural = Request::get("title_dozent_plural") ? Request::get("title_dozent_plural") : null; - $sem_class->title_tutor = Request::get("title_tutor") ? Request::get("title_tutor") : null; - $sem_class->title_tutor_plural = Request::get("title_tutor_plural") ? Request::get("title_tutor_plural") : null; - $sem_class->title_autor = Request::get("title_autor") ? Request::get("title_autor") : null; - $sem_class->title_autor_plural = Request::get("title_autor_plural") ? Request::get("title_autor_plural") : null; - $sem_class->studygroup_mode = Request::int("studygroup_mode"); - $sem_class->only_inst_user = Request::int("only_inst_user"); + $sem_class->name = Request::i18n("sem_class_name"); + $sem_class->description = Request::i18n("sem_class_description"); + $sem_class->title_dozent = Request::get("title_dozent") ?: null; + $sem_class->title_dozent_plural = Request::get("title_dozent_plural") ?: null; + $sem_class->title_tutor = Request::get("title_tutor") ?: null; + $sem_class->title_tutor_plural = Request::get("title_tutor_plural") ?: null; + $sem_class->title_autor = Request::get("title_autor") ?: null; + $sem_class->title_autor_plural = Request::get("title_autor_plural") ?: null; + $sem_class->studygroup_mode = Request::int("studygroup_mode", 0); + $sem_class->only_inst_user = Request::int("only_inst_user", 0); $sem_class->default_read_level = Request::int("default_read_level"); $sem_class->default_write_level = Request::int("default_write_level"); - $sem_class->bereiche = Request::int("bereiche"); - $sem_class->module = Request::int("module"); - $sem_class->show_browse = Request::int("show_browse"); - $sem_class->visible = Request::int("visible"); - $sem_class->course_creation_forbidden = Request::int("course_creation_forbidden"); + $sem_class->bereiche = Request::int("bereiche", 0); + $sem_class->module = Request::int("module", 0); + $sem_class->show_browse = Request::int("show_browse", 0); + $sem_class->visible = Request::int("visible", 0); + $sem_class->course_creation_forbidden = Request::int("course_creation_forbidden", 0); $sem_class->create_description = Request::get("create_description"); $sem_class->admission_prelim_default = Request::int("admission_prelim_default"); $sem_class->admission_type_default = Request::int("admission_type_default"); - $sem_class->show_raumzeit = Request::int("show_raumzeit"); - $sem_class->is_group = Request::int("is_group"); - $sem_class->unlimited_forbidden = Request::bool('unlimited_forbidden'); - $sem_class->admission_turnout_mandatory = Request::bool('admission_turnout_mandatory'); + $sem_class->show_raumzeit = Request::int("show_raumzeit", 0); + $sem_class->is_group = Request::int("is_group", 0); + $sem_class->unlimited_forbidden = Request::bool('unlimited_forbidden', 0); + $sem_class->admission_turnout_mandatory = Request::bool('admission_turnout_mandatory', 0); $sem_class->store(); + + foreach ($sem_class->getSemTypes() as $sem_type) { + $sem_type->name = Request::i18n('sem_type_' . $sem_type->id); + $sem_type->store(); + } + foreach ($sem_class->modules as $module_name => $module) { if ($sem_class->isModuleMandatory($module_name) && !$old_data_sem_class->isModuleMandatory($module_name)) { $sem_class->activateModuleInCourses($module_name); @@ -134,55 +157,36 @@ class Admin_SemClassesController extends AuthenticatedController $sem_class->deActivateModuleInCourses($module_name); } } - if (!count($sem_class->getSemTypes())) { - $notice = "
"._("Beachten Sie, dass es noch keine Veranstaltungstypen gibt!"); - } else { - $notice = ''; - } - $output = [ - 'html' => (string) MessageBox::success(_("Änderungen wurden gespeichert."." ".''._("Zurück zur Übersichtsseite.").'').$notice) - ]; - $this->render_json($output); + + PageLayout::postSuccess(_('Änderungen wurden gespeichert.')); + $this->redirect('admin/sem_classes/details', ['id' => $id]); } - public function add_sem_type_action() { - if (Request::get('name') && Request::get("sem_class") && count($_POST)) { - $name = Request::get('name'); - $statement = DBManager::get()->prepare( - "INSERT INTO sem_types SET name = :name, class = :sem_class, mkdate = UNIX_TIMESTAMP(), chdate = UNIX_TIMESTAMP()" - ); - $statement->execute([ - 'name' => $name, - 'sem_class' => Request::get("sem_class") - ]); - NotificationCenter::postNotification('SeminarTypeDidCreate', $name, $GLOBALS['user']->id); - $id = DBManager::get()->lastInsertId(); - $GLOBALS['SEM_TYPE'] = SemType::refreshTypes(); - $this->sem_type = $GLOBALS['SEM_TYPE'][$id]; - - $this->render_template( - "admin/sem_classes/_sem_type.php" - ); - } + public function add_sem_type_action($id) + { + $this->sem_class = $id; } - public function rename_sem_type_action() { - $sem_type = $GLOBALS['SEM_TYPE'][Request::get("sem_type")]; - if ($sem_type) { - $sem_type->name = Request::get("name"); - $sem_type->store(); - } - $this->render_nothing(); + public function create_sem_type_action() + { + $name = Request::i18n('name'); + $class = Request::int('sem_class'); + + SemType::create(compact('name', 'class')); + + $this->redirect('admin/sem_classes/details', ['id' => $class]); } - public function delete_sem_type_action() { - if (count($_POST)) { - $sem_type = $GLOBALS['SEM_TYPE'][Request::int("sem_type")]; - if (!$sem_type->delete()) { - throw new Exception("Could not delete sem_type because it' still in use."); - } + public function delete_sem_type_action($id) + { + $sem_type = $GLOBALS['SEM_TYPE'][$id]; + $class = $sem_type->class; + + if ($sem_type->countSeminars() === 0) { + $sem_type->delete(); } - $this->render_nothing(); + + $this->redirect('admin/sem_classes/details', ['id' => $class]); } } diff --git a/app/views/admin/sem_classes/_sem_type.php b/app/views/admin/sem_classes/_sem_type.php deleted file mode 100644 index 9ee57d6..0000000 --- a/app/views/admin/sem_classes/_sem_type.php +++ /dev/null @@ -1,38 +0,0 @@ - - * - * This program 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 2 of - * the License, or (at your option) any later version. - * - * @var SemType $sem_type - */ - -$number_of_seminars = $sem_type->countSeminars(); -$id = $sem_type['id']; -?> -
  • - - "> - [] - - - - - - - () - - asSvg(['class' => 'text-bottom']) ?> - - - "> - asSvg(['class' => 'text-bottom']) ?> - - -
  • diff --git a/app/views/admin/sem_classes/add_sem_class.php b/app/views/admin/sem_classes/add_sem_class.php new file mode 100644 index 0000000..9c728e0 --- /dev/null +++ b/app/views/admin/sem_classes/add_sem_class.php @@ -0,0 +1,28 @@ +
    +
    + + + + + + + +
    + +
    + +
    +
    diff --git a/app/views/admin/sem_classes/add_sem_type.php b/app/views/admin/sem_classes/add_sem_type.php index 27f18c7..117794a 100644 --- a/app/views/admin/sem_classes/add_sem_type.php +++ b/app/views/admin/sem_classes/add_sem_type.php @@ -1,24 +1,15 @@ -
    + +
    - + - -
    diff --git a/app/views/admin/sem_classes/content_plugin.php b/app/views/admin/sem_classes/content_plugin.php index 5cbe039..c55fbb3 100644 --- a/app/views/admin/sem_classes/content_plugin.php +++ b/app/views/admin/sem_classes/content_plugin.php @@ -13,11 +13,12 @@ * @var string $activated */ ?> -
    " id="plugin_" > -

    +
    " > +

    - -
    - + "> + "> + +
    diff --git a/app/views/admin/sem_classes/details.php b/app/views/admin/sem_classes/details.php index 8080920..dd5ce73 100644 --- a/app/views/admin/sem_classes/details.php +++ b/app/views/admin/sem_classes/details.php @@ -8,87 +8,60 @@ * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * - * @var string $overview_url * @var array $sem_class * @var array $modules */ ?> - - "> + + ">
    -
    @@ -160,48 +133,48 @@ @@ -217,7 +190,6 @@ render_partial("admin/sem_classes/content_plugin.php", [ 'plugin' => $module_info, - 'sem_class' => $sem_class, 'plugin_id' => $module_name, 'activated' => $sem_class['modules'][$module_name]['activated'] ?? false, 'sticky' => $sem_class['modules'][$module_name]['sticky'] ?? false, @@ -230,20 +202,9 @@
    -
    - - "STUDIP.admin_sem_class.saveData(); return false;"])?> + countSeminars() === 0) : ?> - "> - "return window.confirm('"._("Wirklich löschen?")."');"])?> + $controller->url_for('admin/sem_classes/delete_sem_class', $sem_class->id)]) ?>
    - - - diff --git a/app/views/admin/sem_classes/overview.php b/app/views/admin/sem_classes/overview.php index 5cae59c..202c9de 100644 --- a/app/views/admin/sem_classes/overview.php +++ b/app/views/admin/sem_classes/overview.php @@ -39,17 +39,3 @@ - -addLink( - _('Neue Kategorie anlegen'), - $controller->url_for('admin/sem_classes/add_sem_type'), - Icon::create('add'), - [ - 'onClick' => 'STUDIP.sem_classes.add(); return false;', - 'data-dialog' => 'size=auto' - ] -); -$sidebar->addWidget($links); diff --git a/db/migrations/6.3.1_sem_class_i18n.php b/db/migrations/6.3.1_sem_class_i18n.php new file mode 100644 index 0000000..fd3162e --- /dev/null +++ b/db/migrations/6.3.1_sem_class_i18n.php @@ -0,0 +1,62 @@ + 'sem_classes', + 'field' => 'name', + 'values' => [ + 'Lehre' => 'Teaching', + 'Studiengruppen' => 'Study groups', + ] + ], [ + 'table' => 'sem_classes', + 'field' => 'description', + 'values' => [ + 'Hier finden Sie alle in Stud.IP registrierten Lehrveranstaltungen' => 'Here you will find all the courses registered in Stud.IP', + 'Hier finden Sie virtuelle Veranstaltungen zu unterschiedlichen Themen' => 'Here you will find virtual courses on various topics', + ] + ], [ + 'table' => 'sem_types', + 'field' => 'name', + 'values' => [ + 'Vorlesung' => 'Lecture', + 'Übung' => 'Exercises', + 'Praktikum' => 'Practical training', + 'Forschungsgruppe' => 'Research group', + 'sonstige' => 'miscellaneous', + 'Gremium' => 'Committee', + 'Projektgruppe' => 'Project group', + 'Kulturforum' => 'Culture forum', + 'Veranstaltungsboard' => 'Course board', + 'Studiengruppe' => 'Study group', + ] + ]]; + + $query = "INSERT INTO i18n SELECT id, ':table', ':field', 'en_GB', :value FROM `:table` WHERE `:field` = :key"; + $stmt = DBManager::get()->prepare($query); + + foreach ($translations as $i18n) { + foreach ($i18n['values'] as $key => $value) { + $stmt->bindValue(':table', $i18n['table'], StudipPDO::PARAM_COLUMN); + $stmt->bindValue(':field', $i18n['field'], StudipPDO::PARAM_COLUMN); + $stmt->bindValue(':value', $value); + $stmt->bindValue(':key', $key); + $stmt->execute(); + } + } + } + + public function down() + { + $query = "DELETE FROM i18n WHERE `table` IN ('sem_classes', 'sem_types')"; + DBManager::get()->exec($query); + } +} diff --git a/lib/models/SemClass.php b/lib/models/SemClass.php index 6eb2029..6bd05ca 100644 --- a/lib/models/SemClass.php +++ b/lib/models/SemClass.php @@ -53,6 +53,8 @@ class SemClass extends SimpleORMap { $config['db_table'] = 'sem_classes'; + $config['i18n_fields']['name'] = true; + $config['i18n_fields']['description'] = true; $config['serialized_fields']['modules'] = 'JSONArrayObject'; $config['has_many']['sem_types'] = [ @@ -345,31 +347,4 @@ class SemClass extends SimpleORMap self::$sem_classes = null; return self::getClasses(); } - - /** - * Static method only to keep the translationstrings of the values. It is - * never used within the system. - */ - static private function localization() - { - _("Lehre"); - _("Forschung"); - _("Organisation"); - _("Community"); - _("Arbeitsgruppen"); - _("importierte Kurse"); - _("Hauptveranstaltungen"); - - _("Hier finden Sie alle in Stud.IP registrierten Lehrveranstaltungen"); - _("Verwenden Sie diese Kategorie, um normale Lehrveranstaltungen anzulegen"); - _("Hier finden Sie virtuelle Veranstaltungen zum Thema Forschung an der Universität"); - _("In dieser Kategorie können Sie virtuelle Veranstaltungen für Forschungsprojekte anlegen."); - _("Hier finden Sie virtuelle Veranstaltungen zu verschiedenen Gremien an der Universität"); - _("Um virtuelle Veranstaltungen für Uni-Gremien anzulegen, verwenden Sie diese Kategorie"); - _("Hier finden Sie virtuelle Veranstaltungen zu unterschiedlichen Themen"); - _("Wenn Sie Veranstaltungen als Diskussiongruppen zu unterschiedlichen Themen anlegen möchten, verwenden Sie diese Kategorie."); - _("Hier finden Sie verschiedene Arbeitsgruppen an der %s"); - _("Verwenden Sie diese Kategorie, um unterschiedliche Arbeitsgruppen anzulegen."); - _("Veranstaltungen dieser Kategorie dienen als Gruppierungselement, um die Zusammengehörigkeit von Veranstaltungen anderer Kategorien abzubilden."); - } } diff --git a/lib/models/SemType.php b/lib/models/SemType.php index 4453bb0..de3212f 100644 --- a/lib/models/SemType.php +++ b/lib/models/SemType.php @@ -30,6 +30,8 @@ class SemType extends SimpleORMap { $config['db_table'] = 'sem_types'; + $config['i18n_fields']['name'] = true; + $config['has_many']['courses'] = [ 'class_name' => Course::class, 'assoc_foreign_key' => 'status' @@ -109,25 +111,4 @@ class SemType extends SimpleORMap $non_grouping = SimpleCollection::createFromArray(SemClass::getClasses())->findBy('is_group', false)->findBy('studygroup_mode', false); return SimpleCollection::createFromArray(array_flatten($non_grouping->getSemTypes()))->pluck('id'); } - - /** - * Static method only to keep the translationstrings of the values. It is - * never used within the system. - */ - static private function localization() - { - _("Vorlesung"); - _("Seminar"); - _("Übung"); - _("Praktikum"); - _("Colloquium"); - _("Kolloquium"); - _("Forschungsgruppe"); - _("sonstige"); - _("Gremium"); - _("Projektgruppe"); - _("Kulturforum"); - _("Veranstaltungsboard"); - _("Studiengruppe"); - } } diff --git a/resources/assets/javascripts/bootstrap/admin_sem_classes.js b/resources/assets/javascripts/bootstrap/admin_sem_classes.js index 7d004ee..2e7ca2d 100644 --- a/resources/assets/javascripts/bootstrap/admin_sem_classes.js +++ b/resources/assets/javascripts/bootstrap/admin_sem_classes.js @@ -1,10 +1,5 @@ STUDIP.domReady(() => { - $(document).on('click', '.sem_type_delete', STUDIP.admin_sem_class.delete_sem_type_question); - $(document).on('blur', '.name_input > input', STUDIP.admin_sem_class.rename_sem_type); - $(STUDIP.admin_sem_class.make_sortable); - $('div[container] > div.droparea > div.plugin select[name=sticky]').change(function() { - $(this) - .closest('div.plugin') - .toggleClass('sticky', this.value === 'sticky'); + $('#plugins .droparea').sortable({ + revert: true, }); }); diff --git a/resources/assets/javascripts/init.js b/resources/assets/javascripts/init.js index a48c028..6799484 100644 --- a/resources/assets/javascripts/init.js +++ b/resources/assets/javascripts/init.js @@ -3,7 +3,6 @@ import Vue from './lib/studip-vue.js'; import ActionMenu from './lib/actionmenu.js'; import ActivityFeed from './lib/activityfeed.js'; -import admin_sem_class from './lib/admin_sem_class.js'; import AdminCourses from './lib/admin-courses.js'; import Admission from './lib/admission.js'; import Arbeitsgruppen from './lib/arbeitsgruppen.js'; @@ -83,7 +82,6 @@ const URLHelper = createURLHelper(configURLHelper); window.STUDIP = _.assign(window.STUDIP || {}, { ActionMenu, ActivityFeed, - admin_sem_class, AdminCourses, Admission, Arbeitsgruppen, diff --git a/resources/assets/javascripts/lib/admin_sem_class.js b/resources/assets/javascripts/lib/admin_sem_class.js deleted file mode 100644 index ddf98de..0000000 --- a/resources/assets/javascripts/lib/admin_sem_class.js +++ /dev/null @@ -1,152 +0,0 @@ -/* ------------------------------------------------------------------------ - * SemClass administration - only for root-user - * ------------------------------------------------------------------------ */ - -const admin_sem_class = { - make_sortable: function() { - jQuery('#plugins .droparea').sortable({ - revert: true, - }); - - }, - saveData: function() { - - var modules = {}; - jQuery('div.plugin').each(function() { - var activated = jQuery(this) - .find('input[name=active]') - .is(':checked'); - var sticky = - !jQuery(this) - .find('input[name=nonsticky]') - .is(':checked'); - var module_name = jQuery(this).attr('id'); - if (module_name) { - module_name = module_name.substr(module_name.indexOf('_') + 1); - } - modules[module_name] = { - activated: +activated, - sticky: +sticky - }; - }); - jQuery('#message_below').html(''); - jQuery.ajax({ - url: STUDIP.ABSOLUTE_URI_STUDIP + 'dispatch.php/admin/sem_classes/save', - data: { - sem_class_id: jQuery('#sem_class_id').val(), - sem_class_name: jQuery('#sem_class_name').val(), - sem_class_description: jQuery('#sem_class_description').val(), - title_dozent: !jQuery('#title_dozent_isnull').is(':checked') ? jQuery('#title_dozent').val() : '', - title_dozent_plural: !jQuery('#title_dozent_isnull').is(':checked') - ? jQuery('#title_dozent_plural').val() - : '', - title_tutor: !jQuery('#title_tutor_isnull').is(':checked') ? jQuery('#title_tutor').val() : '', - title_tutor_plural: !jQuery('#title_tutor_isnull').is(':checked') - ? jQuery('#title_tutor_plural').val() - : '', - title_autor: !jQuery('#title_autor_isnull').is(':checked') ? jQuery('#title_autor').val() : '', - title_autor_plural: !jQuery('#title_autor_isnull').is(':checked') - ? jQuery('#title_autor_plural').val() - : '', - modules: modules, - workgroup_mode: jQuery('#workgroup_mode').is(':checked') ? 1 : 0, - studygroup_mode: jQuery('#studygroup_mode').is(':checked') ? 1 : 0, - only_inst_user: jQuery('#only_inst_user').is(':checked') ? 1 : 0, - default_read_level: jQuery('#default_read_level').val(), - default_write_level: jQuery('#default_write_level').val(), - bereiche: jQuery('#bereiche').is(':checked') ? 1 : 0, - module: jQuery('#module').is(':checked') ? 1 : 0, - show_browse: jQuery('#show_browse').is(':checked') ? 1 : 0, - visible: jQuery('#visible').is(':checked') ? 1 : 0, - course_creation_forbidden: jQuery('#course_creation_forbidden').is(':checked') ? 1 : 0, - create_description: jQuery('#create_description').val(), - admission_prelim_default: jQuery('#admission_prelim_default').val(), - admission_type_default: jQuery('#admission_type_default').val(), - show_raumzeit: jQuery('#show_raumzeit').is(':checked') ? 1 : 0, - is_group: jQuery('#is_group').is(':checked') ? 1 : 0, - unlimited_forbidden: jQuery('#unlimited_forbidden').is(':checked') ? 1 : 0, - admission_turnout_mandatory: jQuery('#admission_turnout_mandatory').is(':checked') ? 1 : 0 - }, - type: 'POST', - dataType: 'json', - success: function(data) { - jQuery('#message_below').html(data.html); - } - }); - }, - delete_sem_type_question: function() { - var sem_type = jQuery(this) - .closest('li') - .attr('id'); - sem_type = sem_type.substr(sem_type.lastIndexOf('_') + 1); - jQuery('#sem_type_for_deletion').val(sem_type); - jQuery('#sem_type_delete_question').dialog({ - title: jQuery('#sem_type_delete_question_title').text() - }); - }, - add_sem_type: function() { - jQuery.ajax({ - url: STUDIP.ABSOLUTE_URI_STUDIP + 'dispatch.php/admin/sem_classes/add_sem_type', - type: 'post', - data: { - sem_class: jQuery('#sem_class_id').val(), - name: jQuery('#new_sem_type').val() - }, - success: function(ret) { - jQuery('#sem_type_list').append(jQuery(ret)); - jQuery('#new_sem_type') - .val('') - .closest('li') - .children() - .toggle(); - }, - error: function() { - jQuery('#new_sem_type') - .val('') - .closest('li') - .children() - .toggle(); - } - }); - }, - delete_sem_type: function() { - jQuery.ajax({ - url: STUDIP.ABSOLUTE_URI_STUDIP + 'dispatch.php/admin/sem_classes/delete_sem_type', - data: { - sem_type: jQuery('#sem_type_for_deletion').val() - }, - type: 'post', - success: function() { - jQuery('#sem_type_' + jQuery('#sem_type_for_deletion').val()).remove(); - jQuery('#sem_type_delete_question').dialog('close'); - } - }); - }, - rename_sem_type: function() { - jQuery(this) - .closest('span.name_container') - .children() - .toggle(); - var name = this.value; - var old_name = jQuery(this) - .closest('.name_container') - .find('.name_html'); - var sem_type = jQuery(this) - .closest('li') - .attr('id'); - sem_type = sem_type.substr(sem_type.lastIndexOf('_') + 1); - jQuery.ajax({ - url: STUDIP.ABSOLUTE_URI_STUDIP + 'dispatch.php/admin/sem_classes/rename_sem_type', - data: { - sem_type: sem_type, - name: name - }, - type: 'post', - success: function() { - old_name.text(name); - } - }); - } -}; - -export default admin_sem_class; -- cgit v1.0