aboutsummaryrefslogtreecommitdiff
path: root/app/controllers/admin/datafields.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers/admin/datafields.php')
-rw-r--r--app/controllers/admin/datafields.php277
1 files changed, 277 insertions, 0 deletions
diff --git a/app/controllers/admin/datafields.php b/app/controllers/admin/datafields.php
new file mode 100644
index 0000000..d301791
--- /dev/null
+++ b/app/controllers/admin/datafields.php
@@ -0,0 +1,277 @@
+<?php
+/**
+ * datafields.php - controller class for the datafields
+ *
+ * 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.
+ *
+ * @author Nico Müller <nico.mueller@uni-oldenburg.de>
+ * @author Michael Riehemann <michael.riehemann@uni-oldenburg.de>
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
+ * @category Stud.IP
+ * @package admin
+ * @since 2.1
+ */
+class Admin_DatafieldsController extends AuthenticatedController
+{
+ public $user_status = [
+ 'user' => 1,
+ 'autor' => 2,
+ 'tutor' => 4,
+ 'dozent' => 8,
+ 'admin' => 16,
+ 'root' => 32,
+ ];
+
+ /**
+ * Common tasks for all actions.
+ */
+ public function before_filter(&$action, &$args)
+ {
+ parent::before_filter($action, $args);
+
+ // user must have root permission
+ $GLOBALS['perm']->check('root');
+
+ // set navigation
+ Navigation::activateItem('/admin/config/datafields');
+ PageLayout::setTitle(_('Verwaltung von generischen Datenfeldern'));
+
+ // Set variables used by (almost) all actions
+ $this->allclasses = DataField::getDataClass();
+ $this->class_filter = Request::option('class_filter', null);
+
+ $this->createSidebar($action);
+ }
+
+ /**
+ * Maintenance view for the datafield view
+ *
+ * @param string $class static types for datafields
+ */
+ public function index_action($class = null)
+ {
+ if ($this->class_filter) {
+ $this->datafields_list = [
+ $this->class_filter => DataField::getDataFields($this->class_filter),
+ ];
+ } else {
+ $this->datafields_list = [
+ 'sem' => DataField::getDataFields('sem'),
+ 'inst' => DataField::getDataFields('inst'),
+ 'user' => DataField::getDataFields('user'),
+ 'userinstrole' => DataField::getDataFields('userinstrole'),
+ 'usersemdata' => DataField::getDataFields('usersemdata'),
+ 'roleinstdata' => DataField::getDataFields('roleinstdata'),
+ 'moduldeskriptor' => DataField::getDataFields('moduldeskriptor'),
+ 'modulteildeskriptor' => DataField::getDataFields('modulteildeskriptor'),
+ 'studycourse' => DataField::getDataFields('studycourse'),
+ ];
+ }
+
+ // set variables for view
+ $this->current_class = $class;
+ $this->allclass = array_keys($this->allclasses);
+ }
+
+ /**
+ * Edit a datatyp
+ *
+ * @param string $datafield_id
+ */
+ public function edit_action($datafield_id)
+ {
+ PageLayout::setTitle(_('Datenfeld ändern'));
+
+ $datafield = new DataField($datafield_id);
+ $datafield_default = clone $datafield;
+ $datafield_default->name = _('Standardwert');
+ $datafield_default->description = _('Hier können Sie den Standardwert für dieses Datenfeld festlegen.');
+ $datafield_default->is_required = 0;
+ $datafield_entry = DataFieldEntry::createDataFieldEntry($datafield_default);
+
+ if (Request::submitted('uebernehmen')) {
+ if (Request::get('datafield_name')) {
+ $datafield->name = Request::i18n('datafield_name');
+ if ($datafield->object_type === 'moduldeskriptor'
+ || $datafield->object_type === 'modulteildeskriptor') {
+ $object_class = implode(',', Request::getArray('object_class'));
+ $datafield->object_class = (trim($object_class) && $object_class != 'NULL') ? $object_class : null;
+ } elseif ($datafield->object_type === 'studycourse') {
+ $datafield->object_class = trim(Request::option('object_class', 'all_settings'));
+ } else {
+ $datafield->object_class = array_sum(Request::getArray('object_class')) ?: null;
+ }
+ $datafield->edit_perms = Request::get('edit_perms');
+ $datafield->view_perms = Request::get('visibility_perms');
+ $datafield->institut_id = Request::option('institut_id') ?: null;
+ $datafield->system = Request::int('system') ?: 0;
+ $datafield->priority = Request::int('priority') ?: 0;
+ $datafield->type = Request::get('datafield_type');
+ $datafield->is_required = Request::int('is_required') ?: 0;
+ $datafield->description = Request::get('description', $datafield->description);
+ $datafield->is_userfilter = Request::int('is_userfilter') ?: 0;
+ $datafield_entry->setValueFromSubmit(Request::getInstance()->offsetGet('default_value'));
+ $datafield->default_value = $datafield_entry->getValue();
+ $datafield->store();
+
+ PageLayout::postSuccess(_('Die Änderungen am generischen Datenfeld wurden übernommen.'));
+ $this->redirect('admin/datafields/index/' . $datafield->object_type . '#item_'.$datafield_id);
+ } else {
+ PageLayout::postError(_('Es wurde keine Bezeichnung eingetragen!'));
+ }
+ }
+
+ // set variables for view
+ $this->institutes = Institute::getMyInstitutes();
+ $this->item = $datafield;
+ $this->datafield_id = $datafield->id;
+ $this->type = $datafield->type;
+ $this->datafield_entry = $datafield_entry;
+ }
+
+ /**
+ * Create a new Datafield
+ *
+ * @param $type static types for datafields
+ */
+ public function new_action($type = null)
+ {
+ $this->datafield = new DataField();
+
+ PageLayout::setTitle(_('Neues Datenfeld anlegen'));
+
+ if (Request::submitted('anlegen')) {
+ if (Request::submitted('datafield_name')) {
+ $datafield = new DataField();
+ $datafield->name = Request::i18n('datafield_name');
+ $datafield->object_type = $type;
+ if ($type === 'moduldeskriptor' || $type === 'modulteildeskriptor') {
+ $object_class = implode(',', Request::getArray('object_class'));
+ $datafield->object_class = (trim($object_class) && $object_class != 'NULL') ? $object_class : null;
+ } elseif ($type === 'studycourse') {
+ $datafield->object_class = Request::option('object_class');
+ } else {
+ $datafield->object_class = array_sum(Request::getArray('object_class')) ?: null;
+ }
+ $datafield->edit_perms = Request::get('edit_perms');
+ $datafield->view_perms = Request::get('visibility_perms');
+ $datafield->institut_id = Request::option('institut_id') ?: null;
+ $datafield->system = Request::int('system', 0) ;
+ $datafield->priority = Request::int('priority', 0);
+ $datafield->type = Request::get('datafield_type');
+ $datafield->is_required = Request::bool('is_required', false);
+ $datafield->is_userfilter = Request::bool('is_userfilter', false);
+ if ($type === 'sem') {
+ $datafield->description = Request::get('description', '');
+ } else {
+ $datafield->description = '';
+ }
+ $datafield->store();
+
+ PageLayout::postSuccess(_('Das neue generische Datenfeld wurde angelegt.'));
+ $this->redirect('admin/datafields/index/' . $datafield->object_type . '#item_' . $datafield->id);
+ return;
+ } else {
+ PageLayout::postError(_('Es wurde keine Bezeichnung eingetragen!'));
+ }
+ }
+
+ $type = $type ?: Request::get('datafield_typ');
+
+ $this->type_name = $this->allclasses[$type];
+ $this->object_typ = $type;
+ $this->institutes = Institute::getMyInstitutes();
+ if (!$this->object_typ) {
+ $this->render_action('type_select');
+ }
+
+ if (Request::isXhr() && $this->type_name) {
+ PageLayout::setTitle(sprintf(_('Einen neuen Datentyp für die Kategorie "%s" erstellen'), $this->type_name));
+ }
+ }
+
+ /**
+ * Delete a datafield
+ *
+ * @param md5 $datafield_id
+ * @param string $name
+ */
+ public function delete_action($datafield_id)
+ {
+ $datafield = DataField::find($datafield_id);
+ $type = $datafield->object_type;
+ $name = $datafield->name;
+ if (Request::int('delete') == 1) {
+ $datafield->delete();
+
+ PageLayout::postSuccess(_('Das Datenfeld wurde erfolgreich gelöscht!'));
+ } elseif (!Request::get('back')) {
+ $this->datafield_id = $datafield_id;
+ PageLayout::postQuestion(
+ sprintf(
+ _('Wollen Sie das Datenfeld "%s" wirklich löschen? Bedenken Sie bitte, dass noch Einträge dazu existieren können'),
+ htmlReady($datafield->name)
+ ),
+ $this->deleteURL($datafield_id, ['delete' => true]),
+ $this->deleteURL($datafield_id, ['back' => true])
+ );
+ }
+
+ $this->redirect('admin/datafields/index/' . $type . '#' . $type);
+ }
+
+ /**
+ * Configures a datafield
+ *
+ * @param String $datafield_id Datafield id
+ */
+ public function config_action($datafield_id)
+ {
+ $datafield = DataField::find($datafield_id);
+
+ if (Request::get('typeparam')) {
+ $datafield->typeparam = Request::get('typeparam');
+ }
+
+ if (Request::isPost() && Request::submitted('store')) {
+ $datafield->store();
+
+ PageLayout::postSuccess(_('Die Parameter wurden übernommen.'));
+
+ $this->redirect('admin/datafields/index/' . $datafield_id->object_type . '#item_' . $datafield_id);
+ }
+
+ $this->struct = $datafield;
+
+ if (Request::submitted('preview')) {
+ $this->preview = DataFieldEntry::createDataFieldEntry($datafield);
+ $this->render_action('preview');
+ }
+ }
+
+ /**
+ * Creates the sidebar.
+ *
+ * @param String $action Currently called action
+ */
+ private function createSidebar($action)
+ {
+ $sidebar = Sidebar::Get();
+
+ $actions = new ActionsWidget();
+ $actions->addLink(
+ _('Neues Datenfeld anlegen'),
+ $this->url_for('admin/datafields/new/' . $this->class_filter),
+ Icon::create('add')
+ )->asDialog();
+ $sidebar->addWidget($actions);
+
+ $filter = new SelectWidget(_('Filter'), $this->url_for('admin/datafields'), 'class_filter');
+ $filter->addElement(new SelectElement('', _('alle anzeigen')));
+ $filter->setOptions($this->allclasses, $this->class_filter);
+ $sidebar->addWidget($filter);
+ }
+}