Neue Übersichtsseite für Reihungstests hinzugefügt

This commit is contained in:
Andreas Österreicher
2018-11-27 11:04:08 +01:00
parent 3fcfcd49b1
commit 608a86e049
9 changed files with 494 additions and 4 deletions
+25
View File
@@ -24,6 +24,14 @@ $config['navigation_header'] = array(
'expand' => true,
'sort' => 1,
'requiredPermissions' => 'basis/vilesci:r'
),
'reihungstest' => array(
'link' => site_url('organisation/Reihungstest'),
'icon' => 'list-ol',
'description' => 'Reihungstests',
'expand' => true,
'sort' => 1,
'requiredPermissions' => 'infocenter:r'
)
)
),
@@ -147,3 +155,20 @@ $config['navigation_menu']['system/infocenter/InfoCenter/freigegeben'] = array(
'sort' => 1
)
);
$config['navigation_menu']['organisation/Reihungstest/index'] = array(
'reihungstestverwalung' => array(
'link' => base_url('vilesci/stammdaten/reihungstestverwaltung.php'),
'description' => 'Reihungstestverwaltung',
'icon' => 'cogs',
'sort' => 1,
'target' => '_blank'
),
'auswertung' => array(
'link' => CIS_ROOT.'/cis/testtool/admin/auswertung.php',
'description' => 'Auswertung',
'icon' => 'list-alt',
'sort' => 1,
'target' => '_blank'
)
);
@@ -0,0 +1,193 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Overview of Placementtests
*/
class Reihungstest extends Auth_Controller
{
private $_uid; // contains the UID of the logged user
const REIHUNGSTEST_URI = 'organisation/Reihungstest'; // URL prefix for this controller
/**
* Constructor
*/
public function __construct()
{
parent::__construct(
array(
'index' => 'infocenter:r',
'setNavigationMenuArrayJson' => 'infocenter:r'
)
);
$this->load->library('WidgetLib');
$this->loadPhrases(
array(
'global',
'ui',
'filter'
)
);
$this->_uid = getAuthUID();
$this->load->model('system/filters_model', 'FiltersModel');
$this->setControllerId(); // sets the controller id
}
// -----------------------------------------------------------------------------------------------------------------
// Public methods
/**
* Main page of the InfoCenter tool
*/
public function index()
{
$this->_setNavigationMenuIndex(); // define the navigation menu for this page
$this->load->view('organisation/reihungstest/reihungstest.php');
}
/**
* Define the navigation menu for the showDetails page
*/
private function _setNavigationMenuIndex()
{
$this->load->library('NavigationLib', array('navigation_page' => 'organisation/Reihungstest/index'));
$link = site_url();
$listFilters = array();
$listCustomFilters = array();
// LOAD FILTERS
$filters = $this->FiltersModel->getFilterList('reihungstest', 'overview','%');
if (hasData($filters))
{
for ($filtersCounter = 0; $filtersCounter < count($filters->retval); $filtersCounter++)
{
$filter = $filters->retval[$filtersCounter];
$listFilters[$filter->filter_id] = $filter->description[0];
}
}
$filtersArray = array();
$filtersArray = $this->navigationlib->oneLevel(
ucfirst('Filter'), // description
'#', // link
array(), // children
'', // icon
true, // expand
null, // subscriptDescription
null, // subscriptLinkClass
null, // subscriptLinkValue
'', // target
2 // sort
);
$this->_fillFilters($listFilters, $filtersArray);
// LOAD CUSTOM FILTERS
$customFilters = $this->FiltersModel->getCustomFiltersList('reihungstest', 'overview', $this->_uid);
if (hasData($customFilters))
{
for ($filtersCounter = 0; $filtersCounter < count($customFilters->retval); $filtersCounter++)
{
$filter = $customFilters->retval[$filtersCounter];
$listCustomFilters[$filter->filter_id] = $filter->description[0];
}
}
if (count($listCustomFilters) > 0)
{
$filtersArray['children']['personal'] = $this->navigationlib->oneLevel(
'Personal filters', // description
'#', // link
array(), // children
'', // icon
true, // expand
null, // subscriptDescription
null, // subscriptLinkClass
null, // subscriptLinkValue
'', // target
3 // sort
);
$this->_fillCustomFilters($listCustomFilters, $filtersArray['children']['personal']);
}
$this->navigationlib->setSessionMenu(
array(
'filters' => $this->navigationlib->oneLevel(
'Filter', // description
'#', // link
$filtersArray['children'], // children
'', // icon
true, // expand
null, // subscriptDescription
null, // subscriptLinkClass
null, // subscriptLinkValue
'', // target
10 // sort
)
)
);
}
/**
* Utility method used to fill elements of the left menu of the main RT page
*/
private function _fillFilters($filters, &$tofill)
{
$toPrint = "%s?%s=%s&%s=%s";
foreach ($filters as $filterId => $description)
{
$tofill['children'][] = array(
'link' => sprintf(
$toPrint,
site_url(self::REIHUNGSTEST_URI), 'filter_id', $filterId,
FHC_Controller::FHC_CONTROLLER_ID,
$this->getControllerId()
),
'description' => $description
);
}
}
/**
* Utility method used to fill elements of the InfoCenter left menu
* with the list of the custom filter of the authenticated user
*/
private function _fillCustomFilters($filters, &$tofill)
{
$toPrint = "%s?%s=%s&%s=%s";
foreach ($filters as $filterId => $description)
{
$tofill['children'][] = array(
'link' => sprintf(
$toPrint,
site_url(self::REIHUNGSTEST_URI), 'filter_id', $filterId,
FHC_Controller::FHC_CONTROLLER_ID,
$this->getControllerId()
),
'description' => $description,
'subscriptDescription' => 'Remove',
'subscriptLinkClass' => 'remove-custom-filter',
'subscriptLinkValue' => $filterId
);
}
}
/**
* Wrapper for setNavigationMenu, returns JSON message
*/
public function setNavigationMenuArrayJson()
{
$this->_setNavigationMenuIndex();
$this->outputJsonSuccess('success');
}
}
@@ -0,0 +1,169 @@
<?php
$filterWidgetArray = array(
'query' => "
SELECT
reihungstest_id,
datum,
uhrzeit,
freigeschaltet,
max_plaetze,
oeffentlich,
studiensemester_kurzbz,
anmeldefrist,
anzahl_angemeldet,
studiengaenge,
fakultaet,
max_plaetze - anzahl_angemeldet as freie_plaetze,
raeume
FROM
(
SELECT
reihungstest_id, datum, uhrzeit, freigeschaltet,
/* Plaetze aus Termin oder zugeteilten Raeumen minus Schwund */
COALESCE(
max_teilnehmer,
(SELECT sum(arbeitsplaetze) - ceil(sum(arbeitsplaetze)/100.0*5)
FROM
public.tbl_rt_ort
JOIN public.tbl_ort ON(tbl_rt_ort.ort_kurzbz=tbl_ort.ort_kurzbz)
WHERE
tbl_rt_ort.rt_id=tbl_reihungstest.reihungstest_id
)
) as max_plaetze,
oeffentlich, studiensemester_kurzbz, anmeldefrist,
(SELECT count(*)
FROM public.tbl_rt_person
WHERE rt_id=tbl_reihungstest.reihungstest_id
) as anzahl_angemeldet,
/* Bezeichnung der Studiengaenge der zugeordneten Personen*/
(SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || ':' || sp.orgform_kurzbz), ', ')
FROM
public.tbl_rt_person
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
JOIN lehre.tbl_studienordnung USING(studienordnung_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE
tbl_rt_person.rt_id = tbl_reihungstest.reihungstest_id
) as studiengaenge,
/* Fakultaeten zu den zugeordneten Studienplaenen */
(
WITH RECURSIVE meine_oes(oe_kurzbz, oe_parent_kurzbz, organisationseinheittyp_kurzbz) as
(
SELECT
oe_kurzbz, oe_parent_kurzbz, organisationseinheittyp_kurzbz
FROM
public.tbl_organisationseinheit
WHERE
oe_kurzbz in (
SELECT
oe_kurzbz
FROM
public.tbl_rt_studienplan
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
JOIN lehre.tbl_studienordnung USING(studienordnung_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE
tbl_rt_studienplan.reihungstest_id = tbl_reihungstest.reihungstest_id
)
AND aktiv = true
UNION ALL
SELECT
o.oe_kurzbz, o.oe_parent_kurzbz, o.organisationseinheittyp_kurzbz
FROM
public.tbl_organisationseinheit o, meine_oes
WHERE
o.oe_kurzbz=meine_oes.oe_parent_kurzbz
AND aktiv = true
)
SELECT
ARRAY_TO_STRING(ARRAY_AGG(DISTINCT tbl_organisationseinheit.bezeichnung),', ')
FROM
meine_oes
JOIN public.tbl_organisationseinheit USING(oe_kurzbz)
WHERE
meine_oes.organisationseinheittyp_kurzbz='Fakultaet'
) as fakultaet,
/* Zugeteilte Raeume*/
(SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT ort_kurzbz), ', ')
FROM
public.tbl_rt_ort
WHERE
tbl_rt_ort.rt_id = tbl_reihungstest.reihungstest_id
) as raeume
FROM
public.tbl_reihungstest
WHERE
datum>now()-'2 weeks'::interval
ORDER BY datum desc
) data
",
'requiredPermissions' => 'admin',
'additionalColumns' => array('Details'),
'columnsAliases' => array(
'ReihungstestID',
'Datum',
'Uhrzeit',
'Freigegschaltet',
'Maximale Teilnehmer',
'Öffentlich',
'Studiensemester',
'Anmeldefrist',
'Anzahl Angemeldet',
'Teilnehmer Stg',
'Fakultät',
'Freie Plätze',
'Räume'
),
'formatRow' => function($datasetRaw) {
/* NOTE: Dont use $this here for PHP Version compatibility */
$datasetRaw->{'Details'} = sprintf(
'<a href="%s?reihungstest_id=%s" target="_blank">Details</a>',
base_url('vilesci/stammdaten/reihungstestverwaltung.php'),
$datasetRaw->{'reihungstest_id'}
);
if ($datasetRaw->{'anmeldefrist'} == null)
{
$datasetRaw->{'anmeldefrist'} = '-';
}
if ($datasetRaw->{'max_plaetze'} == null)
{
$datasetRaw->{'max_plaetze'} = '-';
}
if ($datasetRaw->{'studiengaenge'} == null)
{
$datasetRaw->{'studiengaenge'} = '-';
}
if ($datasetRaw->{'raeume'} == null)
{
$datasetRaw->{'raeume'} = '-';
}
if ($datasetRaw->{'freie_plaetze'} == null)
{
$datasetRaw->{'freie_plaetze'} = '-';
}
if ($datasetRaw->{'oeffentlich'} == 'true')
{
$datasetRaw->{'oeffentlich'} = 'Ja';
}
if ($datasetRaw->{'oeffentlich'} == 'false')
{
$datasetRaw->{'oeffentlich'} = 'Nein';
}
return $datasetRaw;
}
);
$filterWidgetArray['app'] = 'reihungstest';
$filterWidgetArray['datasetName'] = 'overview';
$filterWidgetArray['filterKurzbz'] = 'Reihungstest';
$filterWidgetArray['filter_id'] = $this->input->get('filter_id');
echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray);
?>
@@ -0,0 +1,48 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => 'Reihungstest',
'jquery' => true,
'jqueryui' => true,
'bootstrap' => true,
'fontawesome' => true,
'sbadmintemplate' => true,
'tablesorter' => true,
'ajaxlib' => true,
'filterwidget' => true,
'navigationwidget' => true,
'phrases' => array(
'ui' => array('bitteEintragWaehlen')
),
'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css',
'customJSs' => array(
'public/js/bootstrapper.js',
'public/js/reihungstest/reihungstest.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">
Reihungstest <?php echo ucfirst($this->p->t('global', 'uebersicht')); ?>
</h3>
</div>
</div>
<div>
<?php $this->load->view('organisation/reihungstest/ReihungstestUebersichtData.php'); ?>
</div>
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
+3 -3
View File
@@ -399,11 +399,11 @@ class FilterWidget extends Widget
// Basic conversions
if (is_bool($columnValue))
{
$rawDatasetRow->{$columnValue} = $columnValue === true ? 'true' : 'false';
$rawDatasetRow->{$columnName} = ($columnValue === true ? 'true' : 'false');
}
elseif (DateTime::createFromFormat('Y-m-d G:i:s', $columnValue) !== false)
elseif (DateTime::createFromFormat('Y-m-d H:i:s', $columnValue) !== false)
{
$rawDatasetRow->{$columnValue} = date(self::DEFAULT_DATE_FORMAT, strtotime($columnValue));
$rawDatasetRow->{$columnName} = date(self::DEFAULT_DATE_FORMAT, strtotime($columnValue));
}
}
+7 -1
View File
@@ -495,7 +495,13 @@ var FHC_FilterWidget = {
filter_page: FHC_FilterWidget.getFilterPage()
},
{
successCallback: refreshSideMenuHook // NOTE: to be checked
successCallback: function(data, textStatus, jqXHR) {
// If a success and refreshSideMenuHook is a valid function then call it to refresh the side menu
if (typeof refreshSideMenuHook == "function")
{
refreshSideMenuHook();
}
}
}
);
}
+12
View File
@@ -0,0 +1,12 @@
/**
* Javascript file for Reihungstest overview page
*/
/**
* Global function used by FilterWidget JS to refresh the side menu
* NOTE: it is called from the FilterWidget JS therefore must be a global function
*/
function refreshSideMenuHook()
{
FHC_NavigationWidget.refreshSideMenuHook('organisation/Reihungstest/setNavigationMenuArrayJson');
}
+15
View File
@@ -2498,6 +2498,21 @@ if($result = @$db->db_query("SELECT * FROM information_schema.role_table_grants
}
}
// App 'reihungstest' hinzufügen
if($result = $db->db_query("SELECT 1 FROM system.tbl_app WHERE app='reihungstest'"))
{
if($db->db_num_rows($result)==0)
{
$qry = "INSERT INTO system.tbl_app(app) VALUES('reihungstest');";
if(!$db->db_query($qry))
echo '<strong>App: '.$db->db_last_error().'</strong><br>';
else
echo '<br>Neue App reihungstest in system.tbl_app hinzugefügt';
}
}
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
echo '<H2>Pruefe Tabellen und Attribute!</H2>';
+22
View File
@@ -322,6 +322,28 @@ $filters = array(
}
',
'oe_kurzbz' => null,
),
array(
'app' => 'reihungstest',
'dataset_name' => 'overview',
'filter_kurzbz' => 'Reihungstest',
'description' => '{Reihungstest Übersicht}',
'sort' => 1,
'default_filter' => true,
'filter' => '
{
"name": "Reihungstest",
"columns": [
{"name": "fakultaet"},
{"name": "datum"},
{"name": "oeffentlich"},
{"name": "studiengaenge"},
{"name": "freie_plaetze"}
],
"filters": []
}
',
'oe_kurzbz' => null,
)
);