mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-05 04:49:28 +00:00
Neue Übersichtsseite für Reihungstests hinzugefügt
This commit is contained in:
@@ -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'); ?>
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
@@ -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>';
|
||||
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user