diff --git a/TandemPlugin.class.php b/TandemPlugin.class.php index 2cd714f2267d45be8f6746f7449fc8b12a03e453..624b68262a40a2bcfd690ba52c43285068472563 100644 --- a/TandemPlugin.class.php +++ b/TandemPlugin.class.php @@ -158,6 +158,12 @@ class TandemPlugin extends StudIPPlugin implements SystemPlugin, PortalPlugin ); $navigation->addSubNavigation('config', $sub_navigation); + $sub_navigation = new Navigation( + dgettext('TandemPlugin', 'Sprachen'), + PluginEngine::getURL('tandemplugin/admin/languages') + ); + $navigation->addSubNavigation('languages', $sub_navigation); + if ($top_navigation) { $top_navigation->addSubNavigation( $navigation_name, diff --git a/controllers/admin.php b/controllers/admin.php index 4e2872a9a6ebc887973f6a526daf11906b19ba19..42e994af92e6e8b9d912fc4929fa940defb3d3c1 100644 --- a/controllers/admin.php +++ b/controllers/admin.php @@ -583,4 +583,168 @@ class AdminController extends PluginController ?: ''; } } + + + public function languages_action() + { + if(Navigation::hasItem($this->admin_nav_path . '/languages')) { + Navigation::activateItem($this->admin_nav_path . '/languages'); + } + + if(Navigation::hasItem('/profile/tandem_administration/languages')) { + Navigation::activateItem('/profile/tandem_administration/languages'); + } + + $sidebar = Sidebar::Get(); + $actions = new ActionsWidget(); + $actions->addLink( + dgettext('TandemPlugin', 'Sprache hinzufügen'), + $this->url_for('admin/add_language'), + Icon::create('add'), + ['data-dialog' => 'reload-on-close'] + ); + $sidebar->addWidget($actions); + + $this->languages = TandemLanguage::findAll(); + } + + + protected function validateFormFields() + { + $name = Request::get('name'); + $name_ger = Request::get('name_ger'); + $name_eng = Request::get('name_eng'); + + if (!$name) { + PageLayout::postError( + dgettext('TandemPlugin', 'Es wurde kein Name angegeben.') + ); + return false; + } + if (!$name_ger) { + PageLayout::postError( + dgettext('TandemPlugin', 'Es wurde kein deutscher Name angegeben.') + ); + return false; + } + if (!$name_eng) { + PageLayout::postError( + dgettext('TandemPlugin', 'Es wurde kein englischer Name angegeben.') + ); + return false; + } + return true; + } + + + public function add_language_action() + { + $this->lang_id = ''; + $this->name = ''; + $this->name_ger = ''; + $this->name_eng = ''; + + if (Request::submitted('save')) { + CSRFProtection::verifyUnsafeRequest(); + $this->lang_id = Request::get('lang_id'); + $this->name = Request::get('name'); + $this->name_ger = Request::get('name_ger'); + $this->name_eng = Request::get('name_eng'); + + $language = new TandemLanguage($this->lang_id); + if (!$language->isNew()) { + PageLayout::postError( + dgettext('TandemPlugin', 'Eine Sprache mit diesem ISO-Code existiert bereits!') + ); + return; + } + + if (!$this->validateFormFields()) { + return; + } + + $language->name = $this->name; + $language->name_ger = $this->name_ger; + $language->name_eng = $this->name_eng; + if ($language->store()) { + PageLayout::postSuccess( + dgettext('TandemPlugin', 'Die Sprache wurde hinzugefügt.') + ); + $this->response->add_header('X-Dialog-Close', '1'); + } else { + PageLayout::postError( + dgettext('TandemPlugin', 'Die Sprache konnte nicht hinzugefügt werden.') + ); + } + } + } + + + public function edit_language_action($lang_id) + { + $this->language = TandemLanguage::find($lang_id); + if (!$this->language) { + PageLayout::postError( + sprintf( + dgettext('TandemPlugin', 'Die Sprache mit dem Sprachcode %s existiert nicht.'), + $lang_id + ) + ); + return; + } + + if (Request::submitted('save')) { + CSRFProtection::verifyUnsafeRequest(); + + $this->language->name = Request::get('name'); + $this->language->name_ger = Request::get('name_ger'); + $this->language->name_eng = Request::get('name_eng'); + + if (!$this->validateFormFields()) { + return; + } + + $success = false; + if ($this->language->isDirty()) { + $success = $this->language->store(); + } else { + $success = true; + } + if ($success) { + PageLayout::postSuccess(dgettext('TandemPlugin', 'Die Sprache wurde gespeichert.')); + $this->response->add_header('X-Dialog-Close', '1'); + } else { + PageLayout::postError(dgettext('TandemPlugin', 'Die Sprache konnte nicht gespeichert werden.')); + } + } + } + + + public function delete_language_action($lang_id) + { + $this->language = TandemLanguage::find($lang_id); + if (!$this->language) { + PageLayout::postError( + sprintf( + dgettext('TandemPlugin', 'Die Sprache mit dem Sprachcode %s existiert nicht.'), + $lang_id + ) + ); + return; + } + + if (Request::submitted('delete')) { + CSRFProtection::verifyUnsafeRequest(); + if ($this->language->delete()) { + PageLayout::postSuccess( + dgettext('TandemPlugin', 'Die Sprache wurde gelöscht.') + ); + $this->response->add_header('X-Dialog-Close', '1'); + } else { + PageLayout::postError( + dgettext('TandemPlugin', 'Die Sprache konnte nicht gelöscht werden.') + ); + } + } + } } diff --git a/plugin.manifest b/plugin.manifest index ebf201eec760582e15b1a0d32c49bb268b8bfc62..5c836bd5c62dac4f41bb1a2ac70649d28993a7b1 100644 --- a/plugin.manifest +++ b/plugin.manifest @@ -1,7 +1,7 @@ pluginname=TandemPlugin pluginclassname=TandemPlugin origin=data-quest -version=1.1.1 +version=1.2.0 description=Dieses Plugin ermöglicht es, Sprachtandems innerhalb der Stud.IP Platform zu bilden. studipMinVersion=4.0 studipMaxVersion=5.9.99 diff --git a/views/admin/_common_language_form.php b/views/admin/_common_language_form.php new file mode 100644 index 0000000000000000000000000000000000000000..9782bcc2b2301b16c3a161ae2649f12bddee9176 --- /dev/null +++ b/views/admin/_common_language_form.php @@ -0,0 +1,18 @@ +<label> + <?= dgettext('TandemPlugin', 'Name') ?> + <input type="text" name="name" value="<?= htmlReady($name) ?>"> +</label> +<label> + <?= dgettext('TandemPlugin', 'Deutscher Name') ?> + <input type="text" name="name_ger" value="<?= htmlReady($name_ger) ?>"> +</label> +<label> + <?= dgettext('TandemPlugin', 'Englischer Name') ?> + <input type="text" name="name_eng" value="<?= htmlReady($name_eng) ?>"> +</label> +<div data-dialog-button> + <?= \Studip\Button::create( + dgettext('TandemPlugin', 'Speichern'), + 'save' + ) ?> +</div> diff --git a/views/admin/add_language.php b/views/admin/add_language.php new file mode 100644 index 0000000000000000000000000000000000000000..fa29d79761734af4ac419bd0e4e7e3c56100915e --- /dev/null +++ b/views/admin/add_language.php @@ -0,0 +1,16 @@ +<form class="default" method="post" data-dialog="reload-on-close" + action="<?= $controller->link_for('admin/add_language') ?>"> + <?= CSRFProtection::tokenTag() ?> + <label> + <?= dgettext('TandemPlugin', 'ISO 639-2 Code') ?> + <input type="text" name="lang_id" value="<?= htmlReady($lang_id) ?>"> + </label> + <?= $this->render_partial( + 'admin/_common_language_form', + [ + 'name' => $name, + 'name_ger' => $name_ger, + 'name_eng' => $name_eng + ] + ) ?> +</form> diff --git a/views/admin/delete_language.php b/views/admin/delete_language.php new file mode 100644 index 0000000000000000000000000000000000000000..4d64e5415b0351c167ff5b2122f2e7018323f7be --- /dev/null +++ b/views/admin/delete_language.php @@ -0,0 +1,25 @@ +<? if ($language) : ?> + <?= MessageBox::warning( + dgettext('TandemPlugin', 'Soll die folgende Sprache wirklich gelöscht werden?') + ) ?> + <dl> + <dt><?= dgettext('TandemPlugin', 'ISO 639-2 Code') ?></dt> + <dd><?= htmlReady($language->id) ?></dd> + <dt><?= dgettext('TandemPlugin', 'Name') ?></dt> + <dd><?= htmlReady($language->name) ?></dd> + <dt><?= dgettext('TandemPlugin', 'Deutscher Name') ?></dt> + <dd><?= htmlReady($language->name_ger) ?></dd> + <dt><?= dgettext('TandemPlugin', 'Englischer Name') ?></dt> + <dd><?= htmlReady($language->name_eng) ?></dd> + </dl> + <form class="default" method="post" data-dialog="reload-on-close" + action="<?= $controller->link_for('admin/delete_language/' . $language->id) ?>"> + <?= CSRFProtection::tokenTag() ?> + <div data-dialog-button> + <?= \Studip\Button::create( + dgettext('TandemPlugin', 'Löschen'), + 'delete' + ) ?> + </div> + </form> +<? endif ?> diff --git a/views/admin/edit_language.php b/views/admin/edit_language.php new file mode 100644 index 0000000000000000000000000000000000000000..0de8d44f8f28e3cc7416e395b268869a8f20eba2 --- /dev/null +++ b/views/admin/edit_language.php @@ -0,0 +1,12 @@ +<form class="default" method="post" data-dialog="reload-on-close" + action="<?= $controller->link_for('admin/edit_language/' . $language->id) ?>"> + <?= CSRFProtection::tokenTag() ?> + <?= $this->render_partial( + 'admin/_common_language_form', + [ + 'name' => $language->name, + 'name_ger' => $language->name_ger, + 'name_eng' => $language->name_eng + ] + ) ?> +</form> diff --git a/views/admin/languages.php b/views/admin/languages.php new file mode 100644 index 0000000000000000000000000000000000000000..ca3e87cb5e522c158897149fcaeeaf6f65820d19 --- /dev/null +++ b/views/admin/languages.php @@ -0,0 +1,43 @@ +<? if ($languages) : ?> + <table class="default"> + <thead> + <tr> + <th><?= dgettext('TandemPlugin', 'ISO 639-2 Code') ?></th> + <th><?= dgettext('TandemPlugin', 'Name') ?></th> + <th><?= dgettext('TandemPlugin', 'Deutscher Name') ?></th> + <th><?= dgettext('TandemPlugin', 'Englischer Name') ?></th> + <th class="actions"><?= dgettext('TandemPlugin', 'Aktionen') ?></th> + </tr> + </thead> + <tbody> + <? foreach ($languages as $language) : ?> + <tr> + <td><?= htmlReady($language->id) ?></td> + <td><?= htmlReady($language->name) ?></td> + <td><?= htmlReady($language->name_ger) ?></td> + <td><?= htmlReady($language->name_eng) ?></td> + <td class="actions"> + <? + $action_menu = ActionMenu::get(); + $action_menu->addLink( + $controller->url_for('admin/edit_language/' . $language->id), + dgettext('TandemPlugin', 'Bearbeiten'), + Icon::create('edit'), + ['data-dialog' => 'reload-on-close'] + ); + $action_menu->addLink( + $controller->url_for('admin/delete_language/' . $language->id), + dgettext('TandemPlugin', 'Löschen'), + Icon::create('trash'), + ['data-dialog' => 'reload-on-close'] + ); + ?> + <?= $action_menu->render() ?> + </td> + </tr> + <? endforeach ?> + </tbody> + </table> +<? else : ?> + <?= MessageBox::info(dgettext('TandemPlugin', 'Es sind keine Sprachen verfügbar.')) ?> +<? endif ?>