mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-05 12:59:28 +00:00
Merge branch 'feature-19538/Gruppenadministratoren'
This commit is contained in:
@@ -119,6 +119,13 @@ $config['navigation_header'] = array(
|
||||
'expand' => true,
|
||||
'sort' => 30,
|
||||
'requiredPermissions' => 'system/issues_verwalten:r'
|
||||
),
|
||||
'gruppenmanagement' => array(
|
||||
'link' => site_url('person/Gruppenmanagement'),
|
||||
'description' => 'Gruppenmanagement',
|
||||
'expand' => true,
|
||||
'sort' => 40,
|
||||
'requiredPermissions' => 'lehre/gruppenmanager:r'
|
||||
)
|
||||
)
|
||||
),
|
||||
|
||||
@@ -0,0 +1,254 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Page for managing groups of which user is the manager
|
||||
*/
|
||||
class Gruppenmanagement extends Auth_Controller
|
||||
{
|
||||
private $_uid; // contains the UID of the logged user
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'index' => 'lehre/gruppenmanager:r',
|
||||
'showBenutzergruppe' => 'lehre/gruppenmanager:r',
|
||||
'getBenutzer' => 'lehre/gruppenmanager:r',
|
||||
'getAllBenutzer' => 'lehre/gruppenmanager:r',
|
||||
'addBenutzer' => 'lehre/gruppenmanager:rw',
|
||||
'removeBenutzer' => 'lehre/gruppenmanager:rw'
|
||||
)
|
||||
);
|
||||
|
||||
// Loads models
|
||||
$this->load->model('person/benutzer_model', 'BenutzerModel');
|
||||
$this->load->model('ressource/mitarbeiter_model', 'MitarbeiterModel');
|
||||
$this->load->model('person/benutzergruppe_model', 'BenutzergruppeModel');
|
||||
$this->load->model('system/Log_model', 'LogModel');
|
||||
|
||||
$this->load->library('WidgetLib');
|
||||
$this->loadPhrases(
|
||||
array(
|
||||
'global',
|
||||
'person',
|
||||
'lehre',
|
||||
'ui',
|
||||
'filter',
|
||||
'gruppenmanagement'
|
||||
)
|
||||
);
|
||||
|
||||
$this->setControllerId(); // sets the controller id
|
||||
$this->_setAuthUID(); // sets property uid
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* Main page
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$this->load->view(
|
||||
'person/gruppenmanagement/gruppenmanagement.php',
|
||||
array('uid' => $this->_uid)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows Benutzergruppe overview page.
|
||||
*/
|
||||
public function showBenutzergruppe()
|
||||
{
|
||||
$this->_setNavigationMenuShowDetails();
|
||||
$gruppe_kurzbz = $this->input->get('gruppe_kurzbz');
|
||||
|
||||
$data[self::FHC_CONTROLLER_ID] = $this->getControllerId();
|
||||
|
||||
$this->load->view(
|
||||
'person/gruppenmanagement/benutzergruppe.php',
|
||||
array('gruppe_kurzbz' => $gruppe_kurzbz)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets Benutzer assigned to a Gruppe
|
||||
*/
|
||||
public function getBenutzer()
|
||||
{
|
||||
$gruppe_kurzbz = $this->input->get('gruppe_kurzbz');
|
||||
|
||||
$this->BenutzergruppeModel->addSelect('uid, vorname, nachname, ben.aktiv');
|
||||
$this->BenutzergruppeModel->addJoin('public.tbl_benutzer ben', 'uid');
|
||||
$this->BenutzergruppeModel->addJoin('public.tbl_person', 'person_id');
|
||||
$benutzerRes = $this->BenutzergruppeModel->loadWhere(array('gruppe_kurzbz' => $gruppe_kurzbz));
|
||||
|
||||
$this->outputJson($benutzerRes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all Benutzer for assignment to Gruppe
|
||||
*/
|
||||
public function getAllBenutzer()
|
||||
{
|
||||
$this->BenutzerModel->addSelect('uid, vorname, nachname');
|
||||
$this->BenutzerModel->addJoin('public.tbl_person', 'person_id');
|
||||
$benutzerRes = $this->BenutzerModel->loadWhere(
|
||||
array('tbl_benutzer.aktiv' => true)
|
||||
);
|
||||
$this->outputJson($benutzerRes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a Benutzer to Gruppe
|
||||
*/
|
||||
public function addBenutzer()
|
||||
{
|
||||
$uid = $this->input->post('uid');
|
||||
$gruppe_kurzbz = $this->input->post('gruppe_kurzbz');
|
||||
|
||||
if (isEmptyString($uid))
|
||||
$result = error('Uid missing');
|
||||
else
|
||||
{
|
||||
$benutzerExistsRes = $this->BenutzergruppeModel->loadWhere(
|
||||
array(
|
||||
'uid' => $uid,
|
||||
'gruppe_kurzbz' => $gruppe_kurzbz
|
||||
)
|
||||
);
|
||||
|
||||
if (isError($benutzerExistsRes))
|
||||
{
|
||||
$this->outputJsonError(getError($benutzerExistsRes));
|
||||
return;
|
||||
}
|
||||
|
||||
if (hasData($benutzerExistsRes))
|
||||
{
|
||||
$this->outputJsonError($this->p->t('gruppenmanagement', 'benutzerSchonZugewiesen'));
|
||||
return;
|
||||
}
|
||||
|
||||
$result = $this->BenutzergruppeModel->insert(
|
||||
array(
|
||||
'uid' => $uid,
|
||||
'gruppe_kurzbz' => $gruppe_kurzbz,
|
||||
'insertamum' => date('Y-m-d H:i:s'),
|
||||
'insertvon' => $this->_uid
|
||||
)
|
||||
);
|
||||
|
||||
// log the group add
|
||||
$lastQry = $this->db->last_query();
|
||||
|
||||
if (isSuccess($result))
|
||||
{
|
||||
$beschreibung = 'Gruppenmanagement: Nutzer zu Gruppe hinzugefügt';
|
||||
$this->_writeLog($this->_uid, $beschreibung, $lastQry);
|
||||
}
|
||||
}
|
||||
|
||||
$this->outputJson($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes Benutzer from Gruppe
|
||||
*/
|
||||
public function removeBenutzer()
|
||||
{
|
||||
$uid = $this->input->post('uid');
|
||||
$gruppe_kurzbz = $this->input->post('gruppe_kurzbz');
|
||||
|
||||
if (isEmptyString($uid))
|
||||
$result = error('Uid missing');
|
||||
else
|
||||
{
|
||||
$result = $this->BenutzergruppeModel->delete(
|
||||
array(
|
||||
'uid' => $uid,
|
||||
'gruppe_kurzbz' => $gruppe_kurzbz
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// log the group remove
|
||||
$lastQry = $this->db->last_query();
|
||||
|
||||
if (isSuccess($result))
|
||||
{
|
||||
$beschreibung = 'Gruppenmanagement: Nutzer aus Gruppe entfernt';
|
||||
$this->_writeLog($this->_uid, $beschreibung, $lastQry);
|
||||
}
|
||||
|
||||
$this->outputJson($result);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Private methods
|
||||
|
||||
/**
|
||||
* Define the navigation menu for the showDetails page
|
||||
*/
|
||||
private function _setNavigationMenuShowDetails()
|
||||
{
|
||||
$this->load->library('NavigationLib', array('navigation_page' => 'person/Gruppenmanagement/showBenutzergruppe'));
|
||||
|
||||
$link = site_url('person/Gruppenmanagement');
|
||||
|
||||
$this->navigationlib->setSessionMenu(
|
||||
array(
|
||||
'back' => $this->navigationlib->oneLevel(
|
||||
'Zurück', // description
|
||||
$link, // link
|
||||
array(), // children
|
||||
'angle-left', // icon
|
||||
true, // expand
|
||||
null, // subscriptDescription
|
||||
null, // subscriptLinkClass
|
||||
null, // subscriptLinkValue
|
||||
'', // target
|
||||
1 // sort
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set uid of authentificated user
|
||||
*/
|
||||
private function _setAuthUID()
|
||||
{
|
||||
$this->_uid = getAuthUID();
|
||||
|
||||
if (!$this->_uid) show_error('User authentification failed');
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes an entry in the log table
|
||||
*/
|
||||
private function _writeLog($uid, $beschreibung, $lastQry)
|
||||
{
|
||||
$mitarbeiterResult = $this->MitarbeiterModel->load(array('mitarbeiter_uid'=>$this->_uid));
|
||||
|
||||
if(!isSuccess($mitarbeiterResult) || !hasData($mitarbeiterResult))
|
||||
{
|
||||
$uid = DUMMY_LEKTOR_UID;
|
||||
$beschreibung .= ': '.$this->_uid;
|
||||
$beschreibung = mb_substr($beschreibung, 0, 64);
|
||||
}
|
||||
|
||||
$this->LogModel->insert(array(
|
||||
'mitarbeiter_uid' => $uid,
|
||||
'beschreibung' => $beschreibung,
|
||||
'sql' => $lastQry
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
$this->load->view(
|
||||
'templates/FHC-Header',
|
||||
array(
|
||||
'title' => 'Benutzer in Gruppe',
|
||||
'jquery' => true,
|
||||
'jqueryui' => true,
|
||||
'bootstrap' => true,
|
||||
'fontawesome' => true,
|
||||
'sbadmintemplate' => true,
|
||||
'tablesorter' => true,
|
||||
'ajaxlib' => true,
|
||||
'dialoglib' => true,
|
||||
'navigationwidget' => true,
|
||||
'phrases' => array(
|
||||
'gruppenmanagement',
|
||||
'ui'
|
||||
),
|
||||
'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css',
|
||||
'customJSs' => array('public/js/bootstrapper.js', 'public/js/tablesort/tablesort.js', 'public/js/person/benutzergruppe.js')
|
||||
)
|
||||
);
|
||||
?>
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
|
||||
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
|
||||
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header">
|
||||
<?php echo ucfirst($this->p->t('gruppenmanagement', 'benutzergruppe')).' '.$gruppe_kurzbz ?>
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="form-inline">
|
||||
<div class="input-group" id="absgstatusgrselect_137998">
|
||||
<input type="text" class="form-control" name="teilnehmerSelect" id="teilnehmerSelect">
|
||||
<input type="hidden" name="teilnehmer_uid" id="teilnehmer_uid">
|
||||
<input type="hidden" name="gruppe_kurzbz" id="gruppe_kurzbz" value="<?php echo $gruppe_kurzbz ?>">
|
||||
<span class="input-group-btn">
|
||||
<button type="button" class="btn btn-default" id="teilnehmerHinzufuegen">
|
||||
<?php echo $this->p->t('gruppenmanagement', 'benutzerHinzufuegen') ?>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<table class="table table-bordered table-condensed table-responsive" id="benutzer-table">
|
||||
<thead>
|
||||
<th>Uid</th>
|
||||
<th><?php echo ucfirst($this->p->t('person', 'vorname')); ?></th>
|
||||
<th><?php echo ucfirst($this->p->t('person', 'nachname')); ?></th>
|
||||
<th><?php echo ucfirst($this->p->t('gruppenmanagement', 'aktiv')); ?></th>
|
||||
<th><?php echo ucfirst($this->p->t('ui', 'entfernen')); ?></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer'); ?>
|
||||
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
$this->load->view(
|
||||
'templates/FHC-Header',
|
||||
array(
|
||||
'title' => 'Gruppenmanagement',
|
||||
'jquery' => true,
|
||||
'jqueryui' => true,
|
||||
'bootstrap' => true,
|
||||
'fontawesome' => true,
|
||||
'sbadmintemplate' => true,
|
||||
'tablesorter' => true,
|
||||
'ajaxlib' => true,
|
||||
'filterwidget' => true,
|
||||
'navigationwidget' => true,
|
||||
'phrases' => array(
|
||||
'ui'
|
||||
),
|
||||
'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css',
|
||||
'customJSs' => array('public/js/bootstrapper.js')
|
||||
)
|
||||
);
|
||||
?>
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
|
||||
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
|
||||
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header">
|
||||
<?php echo ucfirst($this->p->t('gruppenmanagement', 'gruppenmanagement')); ?>
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<?php $this->load->view('person/gruppenmanagement/gruppenmanagementData.php'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer'); ?>
|
||||
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
$filterWidgetArray = array(
|
||||
'query' => '
|
||||
SELECT gruppe_kurzbz, grp.bezeichnung AS gruppe_bezeichnung, grp.beschreibung AS gruppe_beschreibung,
|
||||
studiengang_kz, UPPER(stg.typ||stg.kurzbz) AS studiengang_kurzbz, semester, sichtbar, lehre, grp.aktiv, mailgrp, generiert
|
||||
FROM public.tbl_gruppe grp
|
||||
JOIN public.tbl_studiengang stg USING (studiengang_kz)
|
||||
JOIN public.tbl_gruppe_manager grpmgr USING (gruppe_kurzbz)
|
||||
WHERE grp.aktiv = TRUE
|
||||
AND grpmgr.uid = \''.$uid.'\'',
|
||||
'requiredPermissions' => 'lehre/gruppenmanager',
|
||||
'datasetRepresentation' => 'tablesorter',
|
||||
'additionalColumns' => array('Teilnehmer'),
|
||||
'columnsAliases' => array(
|
||||
ucfirst($this->p->t('gruppenmanagement', 'kurzbezeichnung')),
|
||||
ucfirst($this->p->t('gruppenmanagement', 'bezeichnung')),
|
||||
ucfirst($this->p->t('gruppenmanagement', 'beschreibung')),
|
||||
ucfirst($this->p->t('lehre', 'studiengangskennzahlLehre')),
|
||||
ucfirst($this->p->t('lehre', 'studiengang')),
|
||||
ucfirst($this->p->t('lehre', 'semester')),
|
||||
'Sichtbar',
|
||||
'Lehre',
|
||||
'Aktiv',
|
||||
'Mailgrp',
|
||||
'Generiert'
|
||||
),
|
||||
'formatRow' => function($datasetRaw) {
|
||||
|
||||
/* NOTE: Dont use $this here for PHP Version compatibility */
|
||||
$datasetRaw->{'Teilnehmer'} = sprintf(
|
||||
'<a href="%s?gruppe_kurzbz=%s&origin_page=%s&fhc_controller_id=%s">'.$this->p->t('gruppenmanagement', 'zuweisenloeschen').'</a>',
|
||||
site_url('person/Gruppenmanagement/showBenutzergruppe'),
|
||||
$datasetRaw->{'gruppe_kurzbz'},
|
||||
'index',
|
||||
(isset($_GET['fhc_controller_id'])?$_GET['fhc_controller_id']:'')
|
||||
);
|
||||
|
||||
if ($datasetRaw->{'gruppe_bezeichnung'} == null)
|
||||
{
|
||||
$datasetRaw->{'gruppe_bezeichnung'} = '-';
|
||||
}
|
||||
if ($datasetRaw->{'gruppe_beschreibung'} == null)
|
||||
{
|
||||
$datasetRaw->{'gruppe_beschreibung'} = '-';
|
||||
}
|
||||
if ($datasetRaw->{'semester'} == null)
|
||||
{
|
||||
$datasetRaw->{'semester'} = '-';
|
||||
}
|
||||
$datasetRaw->{'sichtbar'} = $datasetRaw->{'sichtbar'} == 'true' ? 'ja' : 'nein';
|
||||
$datasetRaw->{'lehre'} = $datasetRaw->{'lehre'} == 'true' ? 'ja' : 'nein';
|
||||
$datasetRaw->{'aktiv'} = $datasetRaw->{'aktiv'} == 'true' ? 'ja' : 'nein';
|
||||
$datasetRaw->{'mailgrp'} = $datasetRaw->{'mailgrp'} == 'true' ? 'ja' : 'nein';
|
||||
$datasetRaw->{'generiert'} = $datasetRaw->{'generiert'} == 'true' ? 'ja' : 'nein';
|
||||
|
||||
return $datasetRaw;
|
||||
}
|
||||
);
|
||||
|
||||
$filterWidgetArray['app'] = 'core';
|
||||
$filterWidgetArray['datasetName'] = 'gruppenmanagement';
|
||||
$filterWidgetArray['filterKurzbz'] = 'gruppenmanagement';
|
||||
$filterWidgetArray['filter_id'] = $this->input->get('filter_id');
|
||||
|
||||
echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray);
|
||||
?>
|
||||
@@ -258,6 +258,9 @@ define('STIP_USER_PASSWORD','password');
|
||||
// Array mit Usern die nicht Kollidieren
|
||||
define('KOLLISIONSFREIE_USER',serialize(array('_DummyLektor')));
|
||||
|
||||
// UID des Dummy Lektors
|
||||
define('DUMMY_LEKTOR_UID','_DummyLektor');
|
||||
|
||||
// Soll der Lageplan am Infoterminal angezeigt werden (true|false)
|
||||
//define('CIS_INFOSCREEN_LAGEPLAN_ANZEIGEN', true);
|
||||
|
||||
|
||||
@@ -0,0 +1,187 @@
|
||||
<?php
|
||||
/* Copyright (C) 2006 Technikum-Wien
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Authors: Alexei Karpenko <karpenko@technikum-wien.at>.
|
||||
*/
|
||||
require_once(dirname(__FILE__).'/basis_db.class.php');
|
||||
|
||||
class gruppemanager extends basis_db
|
||||
{
|
||||
public $new;
|
||||
|
||||
//Tabellenspalten
|
||||
public $uid; // varchar(32)
|
||||
public $gruppe_kurzbz; // varchar(32)
|
||||
public $insertamum; // timestamp
|
||||
public $insertvon; // varchar(32)
|
||||
|
||||
public $uids = array(); // array
|
||||
|
||||
/**
|
||||
* Konstruktor - Laedt optional einen Gruppenmanager
|
||||
* @param $uid
|
||||
* @param $gruppe_kurzbz
|
||||
*/
|
||||
public function __construct($uid=null, $gruppe_kurzbz=null)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
if(!is_null($gruppe_kurzbz) && !is_null($uid))
|
||||
$this->load($uid, $gruppe_kurzbz);
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt die BenutzerGruppe
|
||||
* @param uid, gruppe_kurzbz
|
||||
* @return true wenn ok, false im Fehlerfall
|
||||
*/
|
||||
public function load($uid, $gruppe_kurzbz)
|
||||
{
|
||||
$qry = "SELECT * FROM public.tbl_gruppe_manager WHERE uid=".$this->db_add_param($uid)." AND gruppe_kurzbz=".$this->db_add_param($gruppe_kurzbz);
|
||||
|
||||
if($this->db_query($qry))
|
||||
{
|
||||
if($row = $this->db_fetch_object())
|
||||
{
|
||||
$this->uid = $row->uid;
|
||||
$this->gruppe_kurzbz = $row->gruppe_kurzbz;
|
||||
$this->insertamum = $row->insertamum;
|
||||
$this->insertvon = $row->insertvon;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Es wurde kein Datensatz gefunden';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Fehler beim Laden des Datensatzes';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt die Manager einer Benutzergruppe
|
||||
* @param gruppe_kurzbz
|
||||
* @return true wenn ok, false im Fehlerfall
|
||||
*/
|
||||
public function load_uids($gruppe_kurzbz)
|
||||
{
|
||||
$qry = "SELECT * FROM public.tbl_gruppe_manager
|
||||
WHERE gruppe_kurzbz=".$this->db_add_param($gruppe_kurzbz);
|
||||
|
||||
if ($this->db_query($qry))
|
||||
{
|
||||
if ($this->db_num_rows() == 0)
|
||||
return false;
|
||||
else
|
||||
{
|
||||
while ($row = $this->db_fetch_object())
|
||||
{
|
||||
$gm_obj = new gruppemanager();
|
||||
$gm_obj->uid = $row->uid;
|
||||
$this->uids[] = $gm_obj;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Fehler beim Laden des Datensatzes';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft die Variablen vor dem Speichern
|
||||
* auf Gueltigkeit.
|
||||
* @return true wenn ok, false im Fehlerfall
|
||||
*/
|
||||
protected function validate()
|
||||
{
|
||||
if(mb_strlen($this->uid)>32)
|
||||
{
|
||||
$this->errormsg = 'UID darf nich laenger als 32 Zeichen sein';
|
||||
return false;
|
||||
}
|
||||
if(mb_strlen($this->gruppe_kurzbz)>32)
|
||||
{
|
||||
$this->errormsg = 'Gruppe_kurzbz darf nicht laenger als 32 Zeichen sein';
|
||||
return false;
|
||||
}
|
||||
if(mb_strlen($this->insertvon)>32)
|
||||
{
|
||||
$this->errormsg = 'Insertvon darf nicht laenger als 32 Zeichen sein';
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Speichert GruppeManager in die Datenbank
|
||||
* Wenn $new auf true gesetzt ist wird ein neuer Datensatz
|
||||
* angelegt, ansonsten der Datensatz upgedated
|
||||
* @return true wenn erfolgreich, false im Fehlerfall
|
||||
*/
|
||||
public function save()
|
||||
{
|
||||
//Variablen auf Gueltigkeit pruefen
|
||||
if(!$this->validate())
|
||||
return false;
|
||||
|
||||
$qry = 'INSERT INTO public.tbl_gruppe_manager (uid, gruppe_kurzbz, insertamum, insertvon)
|
||||
VALUES('.$this->db_add_param($this->uid).','.
|
||||
$this->db_add_param($this->gruppe_kurzbz).','.
|
||||
$this->db_add_param($this->insertamum).','.
|
||||
$this->db_add_param($this->insertvon).');';
|
||||
|
||||
if($this->db_query($qry))
|
||||
{
|
||||
//Log schreiben
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Fehler beim Speichern des GruppeManagers';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loescht eine Gruppenmanagerzuordnung
|
||||
*
|
||||
* @param $uid
|
||||
* @param $gruppe_kurzbz
|
||||
* @return boolean
|
||||
*/
|
||||
public function delete($uid, $gruppe_kurzbz)
|
||||
{
|
||||
$qry = "DELETE FROM public.tbl_gruppe_manager WHERE uid=".$this->db_add_param($uid)." AND gruppe_kurzbz=".$this->db_add_param($gruppe_kurzbz);
|
||||
|
||||
if($this->db_query($qry))
|
||||
return true;
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Fehler beim Loeschen der Zuteilung';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,223 @@
|
||||
/**
|
||||
* Javascript file for benutzergruppe management page
|
||||
*/
|
||||
|
||||
var Benutzergruppe = {
|
||||
getBenutzer: function(gruppe_kurzbz) {
|
||||
FHC_AjaxClient.ajaxCallGet(
|
||||
'person/gruppenmanagement/getBenutzer',
|
||||
{
|
||||
gruppe_kurzbz: gruppe_kurzbz
|
||||
},
|
||||
{
|
||||
successCallback: function(data, textStatus, jqXHR) {
|
||||
if (FHC_AjaxClient.isError(data))
|
||||
{
|
||||
FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
|
||||
return;
|
||||
}
|
||||
|
||||
let benutzerTable = $("#benutzer-table tbody");
|
||||
benutzerTable.empty();
|
||||
|
||||
if (FHC_AjaxClient.hasData(data))
|
||||
{
|
||||
// save loaded data
|
||||
let benutzerData = FHC_AjaxClient.getData(data);
|
||||
|
||||
// fill table with Benutzer of Gruppe
|
||||
for (let i = 0; i < benutzerData.length; i++)
|
||||
{
|
||||
let benutzer = benutzerData[i];
|
||||
benutzerTable.append(
|
||||
"<tr>"+
|
||||
"<td>"+benutzer.uid+"</td>"+
|
||||
"<td>"+benutzer.vorname+"</td>"+
|
||||
"<td>"+benutzer.nachname+"</td>"+
|
||||
"<td>"+(benutzer.aktiv === true ? "Ja" : "Nein")+"</td>"+
|
||||
"<td>"+
|
||||
"<button class='btn btn-default benutzerLoeschen' id='"+benutzer.uid+"_benutzerLoeschen'>"+
|
||||
FHC_PhrasesLib.t('ui', 'entfernen')+
|
||||
"</button>"+
|
||||
"</td>"+
|
||||
"</tr>"
|
||||
);
|
||||
|
||||
// add delete event to button
|
||||
$("#"+benutzer.uid+"_benutzerLoeschen").click(
|
||||
function() {
|
||||
Benutzergruppe.removeBenutzer(benutzer.uid, gruppe_kurzbz);
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// add tablesorter to benutzergruppe table
|
||||
Benutzergruppe._setTablesorter();
|
||||
},
|
||||
errorCallback: function(jqXHR, textStatus, errorThrown) {
|
||||
FHC_DialogLib.alertError(textStatus);
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
getAllBenutzer: function() {
|
||||
FHC_AjaxClient.ajaxCallGet(
|
||||
'person/gruppenmanagement/getAllBenutzer',
|
||||
null,
|
||||
{
|
||||
successCallback: function(data, textStatus, jqXHR) {
|
||||
if (FHC_AjaxClient.isError(data))
|
||||
{
|
||||
FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
|
||||
return;
|
||||
}
|
||||
|
||||
if (FHC_AjaxClient.hasData(data))
|
||||
{
|
||||
benutzerArr = [];
|
||||
|
||||
// save loaded data
|
||||
let benutzerData = FHC_AjaxClient.getData(data);
|
||||
|
||||
for (let i = 0; i < benutzerData.length; i++)
|
||||
{
|
||||
let ben = benutzerData[i];
|
||||
|
||||
benutzerArr.push(
|
||||
{
|
||||
vorname: ben.vorname,
|
||||
nachname: ben.nachname,
|
||||
uid: ben.uid,
|
||||
label: ben.nachname + " " + ben.vorname + " (" + ben.uid + ")",
|
||||
id: ben.uid
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
// callback for searching source mitarbeiter array correctly
|
||||
let sourceCallback = function(request, response)
|
||||
{
|
||||
// case insensitive matcher
|
||||
let matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
|
||||
|
||||
// match vorname nachname OR nachname vorname OR uid
|
||||
response($.grep(benutzerArr, function (value) {
|
||||
return matcher.test(value.nachname + ' '+value.vorname + ' ' + value.nachname)
|
||||
|| matcher.test(value.uid);
|
||||
}));
|
||||
}
|
||||
|
||||
// fill autocomplete field with benutzer data
|
||||
Benutzergruppe._fillAutocomplete(
|
||||
'teilnehmerSelect',
|
||||
'teilnehmer_uid',
|
||||
sourceCallback
|
||||
);
|
||||
}
|
||||
},
|
||||
errorCallback: function(jqXHR, textStatus, errorThrown) {
|
||||
FHC_DialogLib.alertError(textStatus);
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
addBenutzer: function(uid, gruppe_kurzbz) {
|
||||
FHC_AjaxClient.ajaxCallPost(
|
||||
'person/gruppenmanagement/addBenutzer',
|
||||
{
|
||||
uid: uid,
|
||||
gruppe_kurzbz: gruppe_kurzbz
|
||||
},
|
||||
{
|
||||
successCallback: function(data, textStatus, jqXHR) {
|
||||
if (FHC_AjaxClient.isError(data))
|
||||
{
|
||||
FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
|
||||
return;
|
||||
}
|
||||
|
||||
if (FHC_AjaxClient.hasData(data))
|
||||
{
|
||||
// load Benutzer after add to show change
|
||||
Benutzergruppe.getBenutzer(gruppe_kurzbz);
|
||||
}
|
||||
},
|
||||
errorCallback: function(jqXHR, textStatus, errorThrown) {
|
||||
FHC_DialogLib.alertError(textStatus);
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
removeBenutzer: function(uid, gruppe_kurzbz) {
|
||||
FHC_AjaxClient.ajaxCallPost(
|
||||
'person/gruppenmanagement/removeBenutzer',
|
||||
{
|
||||
uid: uid,
|
||||
gruppe_kurzbz: gruppe_kurzbz
|
||||
},
|
||||
{
|
||||
successCallback: function(data, textStatus, jqXHR) {
|
||||
if (FHC_AjaxClient.isError(data))
|
||||
{
|
||||
FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
|
||||
return;
|
||||
}
|
||||
|
||||
if (FHC_AjaxClient.hasData(data))
|
||||
{
|
||||
// load Benutzer after remove to show change
|
||||
Benutzergruppe.getBenutzer(gruppe_kurzbz);
|
||||
}
|
||||
},
|
||||
errorCallback: function(jqXHR, textStatus, errorThrown) {
|
||||
FHC_DialogLib.alertError(textStatus);
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
_fillAutocomplete: function(autocompleteId, idFieldId, source) {
|
||||
// jQuery ui autocomplete for benutzer
|
||||
$("#"+autocompleteId).autocomplete(
|
||||
{
|
||||
// custom matcher
|
||||
source: source,
|
||||
autoFocus: true,
|
||||
select: function(event, ui)
|
||||
{
|
||||
// when autocmplete entry selected, display label text in autocomplete, fill hidden value field
|
||||
$("#"+autocompleteId).val(ui.item.label);
|
||||
$("#"+idFieldId).val(ui.item.id);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
_setTablesorter: function() {
|
||||
Tablesort.addTablesorter(
|
||||
// sort by first and third column asc, show filters beggining with 2 Benutzer, exclude fifth column from filter
|
||||
"benutzer-table", [[0,0], [2,0]], ["filter", "zebra"], 2, {headers: {4: {filter: false}}}
|
||||
)
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* When JQuery is up
|
||||
*/
|
||||
$(document).ready(function() {
|
||||
// get the group name
|
||||
let gruppe_kurzbz = $("#gruppe_kurzbz").val();
|
||||
|
||||
// load Benutzer for autocomplete selection
|
||||
Benutzergruppe.getAllBenutzer();
|
||||
// load Benutzer for table
|
||||
Benutzergruppe.getBenutzer(gruppe_kurzbz);
|
||||
|
||||
// add click event to "add Benutzer" button
|
||||
$("#teilnehmerHinzufuegen").click(function(){
|
||||
let uid = $("#teilnehmer_uid").val();
|
||||
Benutzergruppe.addBenutzer(uid, gruppe_kurzbz);
|
||||
$("#teilnehmerSelect").val('');
|
||||
}
|
||||
);
|
||||
});
|
||||
@@ -6243,6 +6243,72 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht
|
||||
}
|
||||
}
|
||||
|
||||
// Creates table public.tbl_gruppe_manager if it doesn't exist and grants privileges
|
||||
if (!$result = @$db->db_query('SELECT 1 FROM public.tbl_gruppe_manager LIMIT 1'))
|
||||
{
|
||||
$qry = 'CREATE TABLE public.tbl_gruppe_manager (
|
||||
gruppe_manager_id integer,
|
||||
gruppe_kurzbz varchar(32) NOT NULL,
|
||||
uid varchar(32) NOT NULL,
|
||||
insertamum timestamp DEFAULT NOW(),
|
||||
insertvon varchar(32)
|
||||
);
|
||||
|
||||
COMMENT ON TABLE public.tbl_gruppe_manager IS \'Table to save assignments groups to their managers.\';
|
||||
COMMENT ON COLUMN public.tbl_gruppe_manager.gruppe_kurzbz IS \'Name of group\';
|
||||
COMMENT ON COLUMN public.tbl_gruppe_manager.uid IS \'User id of group manager\';
|
||||
|
||||
CREATE SEQUENCE public.seq_gruppe_manager_gruppe_manager_id
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
ALTER TABLE public.tbl_gruppe_manager ALTER COLUMN gruppe_manager_id SET DEFAULT nextval(\'public.seq_gruppe_manager_gruppe_manager_id\'::regclass);
|
||||
|
||||
GRANT SELECT, UPDATE ON SEQUENCE public.seq_gruppe_manager_gruppe_manager_id TO vilesci;
|
||||
GRANT SELECT, UPDATE ON SEQUENCE public.seq_gruppe_manager_gruppe_manager_id TO fhcomplete;
|
||||
|
||||
ALTER TABLE public.tbl_gruppe_manager ADD CONSTRAINT pk_gruppe_manager PRIMARY KEY (gruppe_manager_id);
|
||||
|
||||
ALTER TABLE public.tbl_gruppe_manager ADD CONSTRAINT fk_gruppe_manager_gruppe_kurzbz FOREIGN KEY (gruppe_kurzbz) REFERENCES public.tbl_gruppe(gruppe_kurzbz) ON UPDATE CASCADE ON DELETE CASCADE;
|
||||
ALTER TABLE public.tbl_gruppe_manager ADD CONSTRAINT fk_gruppe_manager_uid FOREIGN KEY (uid) REFERENCES public.tbl_benutzer(uid) ON UPDATE CASCADE ON DELETE RESTRICT;
|
||||
|
||||
ALTER TABLE public.tbl_gruppe_manager ADD CONSTRAINT uk_gruppe_manager_gruppe_kurzbz_uid UNIQUE (gruppe_kurzbz, uid);';
|
||||
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>public.tbl_gruppe_manager: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>public.tbl_gruppe_manager table created';
|
||||
|
||||
$qry = 'GRANT SELECT ON TABLE public.tbl_gruppe_manager TO web;';
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>public.tbl_gruppe_manager: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Granted privileges to <strong>web</strong> on public.tbl_gruppe_manager';
|
||||
|
||||
$qry = 'GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE public.tbl_gruppe_manager TO vilesci;';
|
||||
if (!$db->db_query($qry))
|
||||
echo '<strong>public.tbl_gruppe_manager: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Granted privileges to <strong>vilesci</strong> on public.tbl_gruppe_manager';
|
||||
}
|
||||
|
||||
// Add permission for managing user groups
|
||||
if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'lehre/gruppenmanager';"))
|
||||
{
|
||||
if($db->db_num_rows($result) == 0)
|
||||
{
|
||||
$qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('lehre/gruppenmanager', 'Manager einer Gruppe werden und die Gruppe verwalten');";
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong>system.tbl_berechtigung '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo ' system.tbl_berechtigung: Added permission for lehre/gruppenmanager<br>';
|
||||
}
|
||||
}
|
||||
|
||||
// NOTE(chris): Add "Template" to "Lehrtyp"
|
||||
if($result = @$db->db_query("SELECT 1 FROM lehre.tbl_lehrtyp WHERE bezeichnung = 'Template';"))
|
||||
{
|
||||
|
||||
@@ -1112,6 +1112,27 @@ $filters = array(
|
||||
}
|
||||
',
|
||||
'oe_kurzbz' => null
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'dataset_name' => 'gruppenmanagement',
|
||||
'filter_kurzbz' => 'gruppenmanagement',
|
||||
'description' => '{Meine Gruppen}',
|
||||
'sort' => 1,
|
||||
'default_filter' => true,
|
||||
'filter' => '
|
||||
{
|
||||
"name": "gruppenmanagement",
|
||||
"columns": [
|
||||
{"name": "gruppe_kurzbz"},
|
||||
{"name": "gruppe_bezeichnung"},
|
||||
{"name": "gruppe_beschreibung"},
|
||||
{"name": "studiengang_kurzbz"}
|
||||
],
|
||||
"filters": []
|
||||
}
|
||||
',
|
||||
'oe_kurzbz' => null,
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
+181
-1
@@ -16238,7 +16238,7 @@ array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Ab dem Studienjahr 2022/23 ist der Erwerb von internationalen und interkulturellen Kompetenzen Teil des Curriculums. <br />
|
||||
Auf der Grundlage der vorliegenden Maßnahmen absolvieren Sie im Laufe ihres Studiums Internationalisierungsaktivitäten, die mit unterschiedlichen ECTS-Punkten hinterlegt sind. <br />
|
||||
In Summe müssen 5 ECTS erworben werden, die im 6. Semester wirksam werden. <br/>
|
||||
In Summe müssen 5 ECTS erworben werden, die im 6. Semester wirksam werden. <br/>
|
||||
Das Modul „International skills“ wird mit der Beurteilung „Mit Erfolg teilgenommen“ abgeschlossen. <br />
|
||||
Bitte wählen Sie die für Sie in Frage kommenden Maßnahmen aus und planen Sie das entsprechende Semester. <br />
|
||||
Sobald die 5 ECTS erreicht wurden, überprüft der Studiengang die von Ihnen hochgeladenen Dokumente.',
|
||||
@@ -16758,6 +16758,186 @@ array(
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'gruppenmanagement',
|
||||
'phrase' => 'benutzerSchonZugewiesen',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Benutzer ist bereits der Gruppe zugewiesen",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "User is already assigned to the group",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'gruppenmanagement',
|
||||
'phrase' => 'gruppenmanagement',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Gruppenmanagement",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "Group management",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'gruppenmanagement',
|
||||
'phrase' => 'kurzbezeichnung',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Kurzbezeichnung",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "Short description",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'gruppenmanagement',
|
||||
'phrase' => 'bezeichnung',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Bezeichnung",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "Name",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'gruppenmanagement',
|
||||
'phrase' => 'beschreibung',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Beschreibung",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "Description",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'gruppenmanagement',
|
||||
'phrase' => 'zuweisenloeschen',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Zuweisen/Entfernen",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "Assign/Remove",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'gruppenmanagement',
|
||||
'phrase' => 'benutzergruppe',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Benutzergruppe",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "User group",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'gruppenmanagement',
|
||||
'phrase' => 'benutzerHinzufuegen',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "Benutzer hinzufügen",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "Add user",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'gruppenmanagement',
|
||||
'phrase' => 'aktiv',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => "aktiv",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => "active",
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ require_once('../../config/vilesci.config.inc.php');
|
||||
require_once('../../include/functions.inc.php');
|
||||
require_once('../../include/studiengang.class.php');
|
||||
require_once('../../include/gruppe.class.php');
|
||||
require_once('../../include/gruppemanager.class.php');
|
||||
require_once('../../include/person.class.php');
|
||||
require_once('../../include/benutzer.class.php');
|
||||
require_once('../../include/student.class.php');
|
||||
@@ -82,17 +83,59 @@ if(!$rechte->isBerechtigt('lehre/gruppe', null, 's'))
|
||||
<title>Gruppe-Verwaltung</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<link rel="stylesheet" href="../../skin/vilesci.css" type="text/css">
|
||||
<link rel="stylesheet" href="../../skin/jquery-ui-1.9.2.custom.min.css" type="text/css">
|
||||
|
||||
<?php
|
||||
include('../../include/meta/jquery.php');
|
||||
include('../../include/meta/jquery-tablesorter.php');
|
||||
?>
|
||||
|
||||
<?php
|
||||
// html Vorlage für ein manager span
|
||||
const MANAGER_HTML = "<span class='manager-uid'>%s - %s %s "
|
||||
."<img class='manager-delete-image' src='../../skin/images/cross.png' title='Manager entfernen' alt='Manager entfernen'>"
|
||||
."<input type='hidden' name='gruppemanager[]' value='%s'>"
|
||||
."</span>";
|
||||
?>
|
||||
<script type="text/javascript" src="../../vendor/components/jqueryui/jquery-ui.min.js"></script>
|
||||
<script language="JavaScript" type="text/javascript">
|
||||
function conf_del()
|
||||
{
|
||||
return confirm('Diese Gruppe wirklich löschen?');
|
||||
}
|
||||
function setManagerDeleteEvent()
|
||||
{
|
||||
var deleteImages = $('.manager-delete-image');
|
||||
deleteImages.off("click");
|
||||
deleteImages.click(function()
|
||||
{
|
||||
// closest manager uid parent
|
||||
$(this).closest('.manager-uid').remove();
|
||||
adjustManagerTableCellSize();
|
||||
});
|
||||
}
|
||||
function showIfManagerAssignable()
|
||||
{
|
||||
var generiert = $("#generiert").prop('checked');
|
||||
|
||||
if (generiert === true)
|
||||
{
|
||||
$("#gruppemanager").prop("disabled", true);
|
||||
$("#genGruppenManagerHinweis").removeClass("hiddenNotice");
|
||||
}
|
||||
else
|
||||
{
|
||||
$("#gruppemanager").prop("disabled", false);
|
||||
$("#genGruppenManagerHinweis").addClass("hiddenNotice");
|
||||
}
|
||||
}
|
||||
function adjustManagerTableCellSize()
|
||||
{
|
||||
// Tabellenzelle vergrössern wenn es Administratorelemente gibt
|
||||
if ($("input[name='gruppemanager[]']").length)
|
||||
$("#gruppenmanager-cell").addClass("gruppenmanager-cell");
|
||||
else
|
||||
$("#gruppenmanager-cell").removeClass("gruppenmanager-cell");
|
||||
}
|
||||
$(document).ready(function()
|
||||
{
|
||||
$("#t1").tablesorter(
|
||||
@@ -110,11 +153,82 @@ if(!$rechte->isBerechtigt('lehre/gruppe', null, 's'))
|
||||
return false;
|
||||
});
|
||||
|
||||
$( "#mailgrp" ).click(function() {
|
||||
$( "#mailgrp" ).click(function()
|
||||
{
|
||||
$( "#domain_text" ).toggle();
|
||||
$('#gesperrt').prop('disabled', function(i, v) { return !v; });
|
||||
});
|
||||
|
||||
// Löschen von Gruppemanager html bei Klick
|
||||
setManagerDeleteEvent();
|
||||
|
||||
// Hinzufügen von Managern deaktiviert wenn generierte Gruppe
|
||||
showIfManagerAssignable();
|
||||
|
||||
// autocomplete für user input Feld
|
||||
$("#gruppemanager").autocomplete({
|
||||
source: "einheit_autocomplete.php?work=searchUser",
|
||||
minLength:3,
|
||||
response: function(event, ui)
|
||||
{
|
||||
// Value und Label fuer die Anzeige setzen
|
||||
for(i in ui.content)
|
||||
{
|
||||
ui.content[i].value=ui.content[i].uid;
|
||||
ui.content[i].label=ui.content[i].uid+" - "+ui.content[i].vorname+" "+ui.content[i].nachname;
|
||||
}
|
||||
},
|
||||
// bei Auswahl einer uid
|
||||
select: function(event, ui)
|
||||
{
|
||||
// Administrator html holen und Werte ersetzen
|
||||
var managerHtml = "<?php echo MANAGER_HTML ?>";
|
||||
var managerHtmlValues = [ui.item.uid, ui.item.vorname, ui.item.nachname, ui.item.uid];
|
||||
|
||||
for (var i = 0; i < managerHtmlValues.length; i++)
|
||||
{
|
||||
managerHtml = managerHtml.replace(/%s/, managerHtmlValues[i]);
|
||||
}
|
||||
|
||||
// wenn noch nicht vorhanden, Administrator unterhalb des Inputfeldes einfügen
|
||||
if (!$("input[name='gruppemanager[]'][value='"+ui.item.uid+"']").length)
|
||||
{
|
||||
var counter = 0;
|
||||
$(".manager-uid-container").children().each(
|
||||
function() {
|
||||
if ($(this).hasClass('manager-uid'))
|
||||
counter++;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
);
|
||||
|
||||
// nach 5 Managern in nächste Zeile springen
|
||||
if (counter >= 5)
|
||||
{
|
||||
$(".manager-uid-container").prepend(
|
||||
"<p class='manager-separator'></p>"
|
||||
);
|
||||
}
|
||||
|
||||
$(".manager-uid-container").prepend(
|
||||
managerHtml
|
||||
);
|
||||
|
||||
// Loeschen Event für neuen Administrator setzen
|
||||
setManagerDeleteEvent();
|
||||
// Größe der Administrator Tabellenzelle anpassen
|
||||
adjustManagerTableCellSize();
|
||||
}
|
||||
|
||||
// Feld leeren
|
||||
$("#gruppemanager").val('');
|
||||
return false; // prevent default, damit text nicht im Inputfeld bleibt
|
||||
}
|
||||
});
|
||||
|
||||
// Hinzufügen von Managern deaktiviert wenn Gruppe auf generiert setzen
|
||||
$("#generiert").click(showIfManagerAssignable);
|
||||
});
|
||||
</script>
|
||||
<style>
|
||||
@@ -126,6 +240,35 @@ if(!$rechte->isBerechtigt('lehre/gruppe', null, 's'))
|
||||
{
|
||||
background-color: #d1d1d1;
|
||||
}
|
||||
col.first-table-column
|
||||
{
|
||||
width: 130px;
|
||||
}
|
||||
.manager-uid
|
||||
{
|
||||
border: 1px solid black;
|
||||
padding: 2px;
|
||||
margin-right: 2px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.manager-delete-image
|
||||
{
|
||||
position: relative;
|
||||
top: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.manager-separator
|
||||
{
|
||||
margin: 3px;
|
||||
}
|
||||
.gruppenmanager-cell
|
||||
{
|
||||
padding-bottom: 3px;
|
||||
}
|
||||
.hiddenNotice
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -158,8 +301,10 @@ else if (isset($_GET['type']) && $_GET['type']=='delete')
|
||||
|
||||
if($rechte->isBerechtigt('lehre/gruppe', $oe_studiengang, 'suid'))
|
||||
{
|
||||
$grp_kurzbz = $_GET['einheit_id'];
|
||||
|
||||
$e=new gruppe();
|
||||
if(!$e->delete($_GET['einheit_id']))
|
||||
if(!$e->delete($grp_kurzbz))
|
||||
echo $e->errormsg;
|
||||
}
|
||||
else
|
||||
@@ -214,6 +359,7 @@ function printDropDown()
|
||||
echo '<input type="submit" value="Anzeigen" />';
|
||||
echo '</form>';
|
||||
}
|
||||
|
||||
function doSave()
|
||||
{
|
||||
global $rechte;
|
||||
@@ -241,8 +387,10 @@ function doSave()
|
||||
$e->new = false;
|
||||
}
|
||||
|
||||
$user = get_uid();
|
||||
|
||||
$e->updateamum = date('Y-m-d H:i:s');
|
||||
$e->updatevon = get_uid();
|
||||
$e->updatevon = $user;
|
||||
$e->bezeichnung = $_POST['bezeichnung'];
|
||||
$e->beschreibung = $_POST['beschreibung'];
|
||||
$e->studiengang_kz = $_POST['studiengang_kz'];
|
||||
@@ -258,13 +406,66 @@ function doSave()
|
||||
$e->sort = $_POST['sort'];
|
||||
$e->content_visible = isset($_POST['content_visible']);
|
||||
|
||||
|
||||
// gruppemanager immer array, leer wenn keine angegeben
|
||||
$gruppemanager_uids = isset($_POST['gruppemanager']) && is_array($_POST['gruppemanager']) ? $_POST['gruppemanager'] : array();
|
||||
|
||||
// Prüfung: generierte Gruppen haben keine Manager
|
||||
if (count($gruppemanager_uids) > 0 && $e->generiert === true)
|
||||
{
|
||||
echo "<span class='error'>Generierte Gruppen dürfen keine Administratoren haben!</span>";
|
||||
return;
|
||||
}
|
||||
|
||||
if(!$e->save())
|
||||
echo $e->errormsg;
|
||||
echo "<span class='error'>".$e->errormsg."</span>";
|
||||
else // wenn Gruppe erfolgreich gespeichert, Gruppenmanager speichern
|
||||
{
|
||||
// Gruppe gemäss Konvention in Großbuchstaben
|
||||
$gruppe_kurzbz = mb_strtoupper($_POST['kurzbz']);
|
||||
|
||||
// bestehende Gruppenmanager laden
|
||||
$bestehende_gruppemanager_uids = array();
|
||||
$gruppemanager_hlp = new gruppemanager();
|
||||
if ($gruppemanager_hlp->load_uids($gruppe_kurzbz))
|
||||
{
|
||||
foreach ($gruppemanager_hlp->uids as $uid_obj)
|
||||
{
|
||||
$bestehende_gruppemanager_uids[] = $uid_obj->uid;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($gruppemanager_uids as $gruppemanager_uid)
|
||||
{
|
||||
// wenn Gruppenmanager noch nicht zugewiesen
|
||||
if (!in_array($gruppemanager_uid, $bestehende_gruppemanager_uids))
|
||||
{
|
||||
// Gruppemanager speichern
|
||||
$gruppemgr = new gruppemanager();
|
||||
$gruppemgr->uid = $gruppemanager_uid;
|
||||
$gruppemgr->gruppe_kurzbz = $gruppe_kurzbz;
|
||||
$gruppemgr->insertamum = date('Y-m-d H:i:s');
|
||||
$gruppemgr->insertvon = $user;
|
||||
|
||||
if(!$gruppemgr->save())
|
||||
echo $gruppemgr->errormsg;
|
||||
}
|
||||
}
|
||||
|
||||
// zu löschende Gruppemanager ermitteln
|
||||
$geloeschte_gruppemanager_uids = array_diff($bestehende_gruppemanager_uids, $gruppemanager_uids);
|
||||
|
||||
// Nicht mehr vorhandene Gruppenmanager löschen
|
||||
$gruppemanager_hlp = new gruppemanager();
|
||||
foreach ($geloeschte_gruppemanager_uids as $geloeschte_uid)
|
||||
{
|
||||
if (!$gruppemanager_hlp->delete($geloeschte_uid, $gruppe_kurzbz))
|
||||
echo $gruppemanager_hlp->errormsg;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function doEdit($kurzbz,$new=false)
|
||||
{
|
||||
global $db, $rechte, $studiengang, $searchItems;
|
||||
@@ -282,6 +483,9 @@ function doEdit($kurzbz,$new=false)
|
||||
<form name="gruppe" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
|
||||
<p><b>Gruppe <?php echo ($new?'hinzufügen':'bearbeiten'); ?></b><br>
|
||||
<table id="newFormTable" border="0">
|
||||
<colgroup>
|
||||
<col span="1" class="first-table-column">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Kurzbezeichnung</td>
|
||||
@@ -341,6 +545,44 @@ function doEdit($kurzbz,$new=false)
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gruppenadministrator</td>
|
||||
<?php
|
||||
$gruppemanagerCellClass = '';
|
||||
$gruppemanager_hlp = new gruppemanager();
|
||||
$gruppemanager_uids_result = $gruppemanager_hlp->load_uids($e->gruppe_kurzbz);
|
||||
|
||||
// richtige Tabellenzeige Grösse wenn Administratoren vorhanden
|
||||
if ($gruppemanager_uids_result === true)
|
||||
{
|
||||
$gruppemanagerCellClass = ' class="gruppenmanager-cell"';
|
||||
}
|
||||
?>
|
||||
<td<?php echo $gruppemanagerCellClass ?> id="gruppenmanager-cell">
|
||||
<input type="text" name="gruppemanager" id="gruppemanager" autofocus="autofocus" />
|
||||
<span class="hiddenNotice" id="genGruppenManagerHinweis">
|
||||
Generierte Gruppen dürfen keine Administratoren haben.
|
||||
</span>
|
||||
<?php
|
||||
echo "<div class='manager-uid-container'>";
|
||||
// alle Manager der Gruppe anzeigen
|
||||
if ($gruppemanager_uids_result === true)
|
||||
{
|
||||
$count = 1;
|
||||
foreach ($gruppemanager_hlp->uids as $uid_obj)
|
||||
{
|
||||
$ben = new benutzer($uid_obj->uid);
|
||||
// Vorlagestring durch Werte ersetzen und ausgeben
|
||||
echo sprintf(MANAGER_HTML, $uid_obj->uid, $ben->vorname, $ben->nachname, $uid_obj->uid);
|
||||
if ($count % 5 == 0) // neue Zeile nach 5 Elementen
|
||||
echo "<p class='manager-separator'></p>";
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td>Optional, Administratoren, die Benutzer zur Gruppe entfernen/hinzufügen können</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Semester</td>
|
||||
<td><input type="text" name="semester" size="2" maxlength="1" value="<?php echo $e->semester ?>"></td>
|
||||
|
||||
Reference in New Issue
Block a user