Merge branch 'master' of github.com:FH-Complete/FHC-Core

This commit is contained in:
Andreas Österreicher
2018-11-30 15:57:55 +01:00
11 changed files with 539 additions and 410 deletions
@@ -201,6 +201,18 @@ class Filters extends FHC_Controller
}
}
/**
* Define the navigation menu for the current filter widget
*/
public function setNavigationMenu()
{
// Generates the filters structure array
$filterMenu = $this->filterslib->generateFilterMenu($this->input->get(FiltersLib::NAVIGATION_PAGE));
$this->outputJsonSuccess('Success');
}
//------------------------------------------------------------------------------------------------------------------
// Private methods
@@ -856,89 +856,30 @@ class InfoCenter extends Auth_Controller
*/
private function _setNavigationMenuFreigegeben()
{
// Loads NavigationLib
$this->load->library('NavigationLib', array(self::NAVIGATION_PAGE => self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE));
$listFilters = array();
$listCustomFilters = array();
$filters = $this->FiltersModel->getFilterList('infocenter', 'freigegeben', '%InfoCenterFreigegeben%');
if (hasData($filters))
{
for ($filtersCounter = 0; $filtersCounter < count($filters->retval); $filtersCounter++)
{
$filter = $filters->retval[$filtersCounter];
$listFilters[$filter->filter_id] = $filter->description[0];
}
}
$customFilters = $this->FiltersModel->getCustomFiltersList('infocenter', 'freigegeben', $this->_uid);
if (hasData($customFilters))
{
for ($filtersCounter = 0; $filtersCounter < count($customFilters->retval); $filtersCounter++)
{
$filter = $customFilters->retval[$filtersCounter];
$listCustomFilters[$filter->filter_id] = $filter->description[0];
}
}
$filtersArray = array();
$filtersArray['children'] = array();
$this->_fillFiltersFreigegeben($listFilters, $filtersArray);
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
15 // sort
);
$this->_fillCustomFilters($listCustomFilters, $filtersArray['children']['personal']);
}
$homeLink = site_url('system/infocenter/InfoCenter/index');
// Generate the home link with the eventually loaded filter
$homeLink = site_url(self::INFOCENTER_URI.'/'.self::INDEX_PAGE);
$prevFilterId = $this->input->get(self::PREV_FILTER_ID);
if (isset($prevFilterId))
{
$homeLink .= '?'.self::FILTER_ID.'='.$prevFilterId;
}
$this->navigationlib->setSessionMenu(
array(
'freigegeben' => $this->navigationlib->oneLevel(
'Home', // description
$homeLink, // link
null, // children
'angle-left', // icon
null, // subscriptDescription
false, // expand
null, // subscriptLinkClass
null, // subscriptLinkValue
'', // target
1 // sort
),
'filters' => $this->navigationlib->oneLevel(
'Filter', // description
'#', // link
(isset($filtersArray['children']) ? $filtersArray['children'] : ''), // children
'', // icon
true, // expand
null, // subscriptDescription
null, // subscriptLinkClass
null, // subscriptLinkValue
'', // target
10 // sort
)
$this->navigationlib->setElementSessionMenu(
self::FREIGEGEBEN_PAGE,
$this->navigationlib->oneLevel(
'Home', // description
$homeLink, // link
null, // children
'angle-left', // icon
null, // subscriptDescription
false, // expand
null, // subscriptLinkClass
null, // subscriptLinkValue
'', // target
1 // sort
)
);
}
+104
View File
@@ -53,6 +53,8 @@ class FiltersLib
const HIDE_HEADER = 'hideHeader';
const HIDE_SAVE = 'hideSave';
const CUSTOM_MENU = 'customMenu'; // ...to specify if the menu for this filter is custom (true) or not (false)
// Filter operations values
const OP_EQUAL = 'equal';
const OP_NOT_EQUAL = 'nequal';
@@ -76,6 +78,15 @@ class FiltersLib
const PERMISSION_FILTER_METHOD = 'FilterWidget'; // Name for fake method to be checked by the PermissionLib
const PERMISSION_TYPE = 'rw';
// Name and array keys of the filters menu array
const NAV_MENU_FILTER_KEY = 'filters';
const NAV_MENU_FILTER_NAME = 'Filters';
const NAV_MENU_CUSTOM_FILTER_KEY = 'personal_filters';
const NAV_MENU_CUSTOM_FILTER_NAME = 'Personal filters';
// Navigation page parameter name
const NAVIGATION_PAGE = 'navigation_page';
private $_ci; // Code igniter instance
private $_filterUniqueId; // unique id for this filter widget
@@ -668,6 +679,99 @@ class FiltersLib
return $removeCustomFilter;
}
/**
* Generates the filters menu structure array and stores it into the session
*/
public function generateFilterMenu($navigationPage)
{
// Loads the NavigationLib for the current page (given as parameter)
$this->_ci->load->library('NavigationLib', array(FiltersLib::NAVIGATION_PAGE => $navigationPage));
$filterMenu = null;
$currentMenu = $this->_ci->navigationlib->getSessionMenu(); // The navigation menu currently stored in session
$session = $this->getSession(); // The filter currently stored in session (the one that is currently used)
if ($session != null)
{
// Loads the Fitlers model
$this->_ci->load->model('system/Filters_model', 'FiltersModel');
// Loads all the filters related to this page (same dataset_name and same app name)
$filters = $this->_ci->FiltersModel->getFiltersByAppDatasetName(
$session[self::APP_PARAMETER], $session[self::DATASET_NAME_PARAMETER]
);
// If filters were loaded
if (hasData($filters))
{
$childrenArray = array(); // contains all the children elements in a menu entry
$childrenPersonalArray = array(); // contains all the children elements in menu enty for personal filters
// Loops through loaded filters
foreach ($filters->retval as $filter)
{
// Generate a menu entry
$menuEntry = $this->_ci->navigationlib->oneLevel(
$filter->description[0], // description
sprintf(
'%s?%s=%s',
site_url($this->_ci->router->directory.$this->_ci->router->class.'/'.$this->_ci->router->method),
self::FILTER_ID,
$filter->filter_id
) // link
);
// If it is NOT a personal filter
if ($filter->person_id == null)
{
$childrenArray[] = $menuEntry; // adds to filters menu array
}
else // otherwise
{
$menuEntry['subscriptDescription'] = 'Remove';
$menuEntry['subscriptLinkClass'] = 'remove-custom-filter';
$menuEntry['subscriptLinkValue'] = $filter->filter_id;
$childrenPersonalArray[] = $menuEntry; // adds to personal filters menu array
}
}
// If personal filters are present then add the menu entry for them
if (count($childrenPersonalArray) > 0)
{
$childrenArray[self::NAV_MENU_CUSTOM_FILTER_KEY] = $this->_ci->navigationlib->oneLevel(
self::NAV_MENU_CUSTOM_FILTER_NAME, // description
'#', // link
$childrenPersonalArray, // children
'', // icon
true, // expand
null, // subscriptDescription
null, // subscriptLinkClass
null, // subscriptLinkValue
'', // target
20 // sort
);
}
// Adds menu entry for all the filters
$filterMenu = $this->_ci->navigationlib->oneLevel(
self::NAV_MENU_FILTER_NAME, // description
'#', // link
$childrenArray, // children
'', // icon
true, // expand
null, // subscriptDescription
null, // subscriptLinkClass
null, // subscriptLinkValue
'', // target
10 // sort
);
// Sets in the session only the element related to the filters menu
$this->_ci->navigationlib->setElementSessionMenu(FiltersLib::NAV_MENU_FILTER_KEY, $filterMenu);
}
}
}
//------------------------------------------------------------------------------------------------------------------
// Private methods
+6 -12
View File
@@ -170,14 +170,11 @@ class NavigationLib
{
$session = $this->getSessionMenu();
if (!isset($session[$this->_navigationPage]))
{
$session[$this->_navigationPage] = array();
}
if ($session == null) $session = array();
$session[$this->_navigationPage][$name] = $value;
$session[$name] = $value;
setElementSession(self::SESSION_NAME, self::SESSION_MENU_NAME, $session); // stores the single value
setElementSession(self::SESSION_NAME, self::SESSION_MENU_NAME, array($this->_navigationPage => $session)); // stores the single value
}
/**
@@ -187,14 +184,11 @@ class NavigationLib
{
$session = $this->getSessionHeader();
if (!isset($session[$this->_navigationPage]))
{
$session[$this->_navigationPage] = array();
}
if ($session == null) $session = array();
$session[$this->_navigationPage][$name] = $value;
$session[$name] = $value;
setElementSession(self::SESSION_NAME, self::SESSION_HEADER_NAME, $session); // stores the single value
setElementSession(self::SESSION_NAME, self::SESSION_HEADER_NAME, array($this->_navigationPage => $session)); // stores the single value
}
//------------------------------------------------------------------------------------------------------------------
@@ -17,6 +17,8 @@ class Filters_model extends DB_Model
*/
public function getFilterList($app, $dataset_name, $filter_kurzbz)
{
$this->resetQuery(); // reset any previous built query
$this->addSelect('filter_id, description');
$this->addOrder('sort', 'ASC');
@@ -36,6 +38,8 @@ class Filters_model extends DB_Model
*/
public function getCustomFiltersList($app, $dataset_name, $uid)
{
$this->resetQuery(); // reset any previous built query
$this->addSelect('filter_id, description');
$this->addJoin('public.tbl_benutzer', 'person_id');
$this->addOrder('sort', 'ASC');
@@ -49,4 +53,23 @@ class Filters_model extends DB_Model
return $this->loadWhere($filterParametersArray);
}
/**
* Loads all filters by their app and dataset_name
*/
public function getFiltersByAppDatasetName($app, $dataset_name)
{
$this->resetQuery(); // reset any previous built query
$this->addSelect('filter_id, person_id, description');
$this->addOrder('person_id', 'DESC'); // sort descending on column person_id
$this->addOrder('sort', 'ASC'); // sort on column sort
$filterParametersArray = array(
'app' => $app,
'dataset_name' => $dataset_name
);
return $this->loadWhere($filterParametersArray);
}
}
@@ -10,202 +10,208 @@
$LOGTYPE_KURZBZ = '\'Processstate\'';
$STATUS_KURZBZ = '\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\'';
$filterWidgetArray = array(
'query' => '
WITH currentOrNextStudiensemester AS (
SELECT ss.studiensemester_kurzbz
FROM public.tbl_studiensemester ss
WHERE ss.ende > NOW()
ORDER BY ss.ende
LIMIT 3
)
$query = '
WITH currentOrNextStudiensemester AS (
SELECT ss.studiensemester_kurzbz
FROM public.tbl_studiensemester ss
WHERE ss.ende > NOW()
ORDER BY ss.ende
LIMIT 3
)
SELECT
p.person_id AS "PersonId",
p.vorname AS "Vorname",
p.nachname AS "Nachname",
p.gebdatum AS "Gebdatum",
p.staatsbuergerschaft AS "Nation",
pl.zeitpunkt AS "LockDate",
pl.lockuser AS "LockUser",
pd.parkdate AS "ParkDate",
(
SELECT l.zeitpunkt
FROM system.tbl_log l
WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.')
AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.')
AND l.person_id = p.person_id
ORDER BY l.zeitpunkt DESC
LIMIT 1
) AS "LastAction",
(
SELECT l.insertvon
FROM system.tbl_log l
WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.')
AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.')
AND l.person_id = p.person_id
ORDER BY l.zeitpunkt DESC
LIMIT 1
) AS "User/Operator",
(
SELECT pss.studiensemester_kurzbz
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bestaetigtam IS NULL
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss)
ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC
LIMIT 1
) AS "Studiensemester",
(
SELECT pss.bewerbung_abgeschicktamum
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NOT NULL
AND pss.bestaetigtam IS NULL
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss)
AND NOT EXISTS (
SELECT 1
FROM tbl_prestudentstatus spss
WHERE spss.prestudent_id = pss.prestudent_id
AND spss.status_kurzbz = '.$REJECTED_STATUS.'
AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW())
)
ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC
LIMIT 1
) AS "SendDate",
(
SELECT COUNT(*)
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NOT NULL
AND pss.bestaetigtam IS NULL
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss)
AND NOT EXISTS (
SELECT 1
FROM tbl_prestudentstatus spss
WHERE spss.prestudent_id = pss.prestudent_id
AND spss.status_kurzbz = '.$REJECTED_STATUS.'
AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW())
)
LIMIT 1
) AS "AnzahlAbgeschickt",
(
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \')
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NOT NULL
AND pss.bestaetigtam IS NULL
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss)
AND NOT EXISTS (
SELECT 1
FROM tbl_prestudentstatus spss
WHERE spss.prestudent_id = pss.prestudent_id
AND spss.status_kurzbz = '.$REJECTED_STATUS.'
AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW())
)
LIMIT 1
) AS "StgAbgeschickt",
(
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \')
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NULL
AND pss.bestaetigtam IS NULL
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss)
AND NOT EXISTS (
SELECT 1
FROM tbl_prestudentstatus spss
WHERE spss.prestudent_id = pss.prestudent_id
AND spss.status_kurzbz = '.$REJECTED_STATUS.'
AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW())
)
LIMIT 1
) AS "StgNichtAbgeschickt",
(
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \')
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
WHERE pss.status_kurzbz IN ('.$STATUS_KURZBZ.')
AND pss.bewerbung_abgeschicktamum IS NULL
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.start >= NOW())
AND NOT EXISTS (
SELECT 1
FROM tbl_prestudentstatus spss
WHERE spss.prestudent_id = pss.prestudent_id
AND spss.status_kurzbz = '.$REJECTED_STATUS.'
AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW())
)
LIMIT 1
) AS "StgAktiv"
FROM public.tbl_person p
LEFT JOIN (
SELECT tpl.person_id,
tpl.zeitpunkt,
tpl.uid AS lockuser
FROM system.tbl_person_lock tpl
WHERE tpl.app = '.$APP.'
) pl USING(person_id)
LEFT JOIN (
SELECT l.person_id,
l.zeitpunkt AS parkdate
FROM system.tbl_log l
WHERE l.logtype_kurzbz = '.$LOGTYPE_KURZBZ.'
AND l.logdata->>\'name\' = '.$LOGDATA_NAME_PARKED.'
AND l.zeitpunkt >= NOW()
) pd USING(person_id)
WHERE
EXISTS (
SELECT 1
FROM public.tbl_prestudent sps
JOIN public.tbl_studiengang ssg USING(studiengang_kz)
WHERE sps.person_id = p.person_id
AND ssg.typ IN ('.$STUDIENGANG_TYP.')
AND '.$INTERESSENT_STATUS.' = (
SELECT spss.status_kurzbz
FROM public.tbl_prestudentstatus spss
WHERE spss.prestudent_id = sps.prestudent_id
ORDER BY spss.datum DESC, spss.insertamum DESC, spss.ext_id DESC
LIMIT 1
)
AND EXISTS (
SELECT 1
FROM public.tbl_prestudentstatus spss
WHERE spss.prestudent_id = sps.prestudent_id
AND spss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND spss.bestaetigtam IS NULL
AND spss.bewerbung_abgeschicktamum IS NOT NULL
AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW())
)
)
ORDER BY "LastAction" ASC
',
SELECT
p.person_id AS "PersonId",
p.vorname AS "Vorname",
p.nachname AS "Nachname",
p.gebdatum AS "Gebdatum",
p.staatsbuergerschaft AS "Nation",
pl.zeitpunkt AS "LockDate",
pl.lockuser AS "LockUser",
pd.parkdate AS "ParkDate",
(
SELECT l.zeitpunkt
FROM system.tbl_log l
WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.')
AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.')
AND l.person_id = p.person_id
ORDER BY l.zeitpunkt DESC
LIMIT 1
) AS "LastAction",
(
SELECT l.insertvon
FROM system.tbl_log l
WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.')
AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.')
AND l.person_id = p.person_id
ORDER BY l.zeitpunkt DESC
LIMIT 1
) AS "User/Operator",
(
SELECT pss.studiensemester_kurzbz
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bestaetigtam IS NULL
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss)
ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC
LIMIT 1
) AS "Studiensemester",
(
SELECT pss.bewerbung_abgeschicktamum
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NOT NULL
AND pss.bestaetigtam IS NULL
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss)
AND NOT EXISTS (
SELECT 1
FROM tbl_prestudentstatus spss
WHERE spss.prestudent_id = pss.prestudent_id
AND spss.status_kurzbz = '.$REJECTED_STATUS.'
AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW())
)
ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC
LIMIT 1
) AS "SendDate",
(
SELECT COUNT(*)
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NOT NULL
AND pss.bestaetigtam IS NULL
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss)
AND NOT EXISTS (
SELECT 1
FROM tbl_prestudentstatus spss
WHERE spss.prestudent_id = pss.prestudent_id
AND spss.status_kurzbz = '.$REJECTED_STATUS.'
AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW())
)
LIMIT 1
) AS "AnzahlAbgeschickt",
(
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \')
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NOT NULL
AND pss.bestaetigtam IS NULL
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss)
AND NOT EXISTS (
SELECT 1
FROM tbl_prestudentstatus spss
WHERE spss.prestudent_id = pss.prestudent_id
AND spss.status_kurzbz = '.$REJECTED_STATUS.'
AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW())
)
LIMIT 1
) AS "StgAbgeschickt",
(
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \')
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NULL
AND pss.bestaetigtam IS NULL
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT cnss.studiensemester_kurzbz FROM currentOrNextStudiensemester cnss)
AND NOT EXISTS (
SELECT 1
FROM tbl_prestudentstatus spss
WHERE spss.prestudent_id = pss.prestudent_id
AND spss.status_kurzbz = '.$REJECTED_STATUS.'
AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW())
)
LIMIT 1
) AS "StgNichtAbgeschickt",
(
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \')
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
WHERE pss.status_kurzbz IN ('.$STATUS_KURZBZ.')
AND pss.bewerbung_abgeschicktamum IS NULL
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.start >= NOW())
AND NOT EXISTS (
SELECT 1
FROM tbl_prestudentstatus spss
WHERE spss.prestudent_id = pss.prestudent_id
AND spss.status_kurzbz = '.$REJECTED_STATUS.'
AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW())
)
LIMIT 1
) AS "StgAktiv"
FROM public.tbl_person p
LEFT JOIN (
SELECT tpl.person_id,
tpl.zeitpunkt,
tpl.uid AS lockuser
FROM system.tbl_person_lock tpl
WHERE tpl.app = '.$APP.'
) pl USING(person_id)
LEFT JOIN (
SELECT l.person_id,
l.zeitpunkt AS parkdate
FROM system.tbl_log l
WHERE l.logtype_kurzbz = '.$LOGTYPE_KURZBZ.'
AND l.logdata->>\'name\' = '.$LOGDATA_NAME_PARKED.'
AND l.zeitpunkt >= NOW()
) pd USING(person_id)
WHERE
EXISTS (
SELECT 1
FROM public.tbl_prestudent sps
JOIN public.tbl_studiengang ssg USING(studiengang_kz)
WHERE sps.person_id = p.person_id
AND ssg.typ IN ('.$STUDIENGANG_TYP.')
AND '.$INTERESSENT_STATUS.' = (
SELECT spss.status_kurzbz
FROM public.tbl_prestudentstatus spss
WHERE spss.prestudent_id = sps.prestudent_id
ORDER BY spss.datum DESC, spss.insertamum DESC, spss.ext_id DESC
LIMIT 1
)
AND EXISTS (
SELECT 1
FROM public.tbl_prestudentstatus spss
WHERE spss.prestudent_id = sps.prestudent_id
AND spss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND spss.bestaetigtam IS NULL
AND spss.bewerbung_abgeschicktamum IS NOT NULL
AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > NOW())
)
)
ORDER BY "LastAction" ASC';
$filterWidgetArray = array(
'query' => $query,
'app' => 'infocenter',
'datasetName' => 'overview',
'filterKurzbz' => 'InfoCenterSentApplicationAll',
'filter_id' => $this->input->get('filter_id'),
'requiredPermissions' => 'infocenter',
'customMenu' => true,
'checkboxes' => 'PersonId',
'additionalColumns' => array('Details'),
'columnsAliases' => array(
@@ -317,10 +323,5 @@
}
);
$filterWidgetArray['app'] = 'infocenter';
$filterWidgetArray['datasetName'] = 'overview';
$filterWidgetArray['filterKurzbz'] = 'InfoCenterSentApplicationAll';
$filterWidgetArray['filter_id'] = $this->input->get('filter_id');
echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray);
?>
@@ -6,110 +6,115 @@
$TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\'';
$LOGDATA_NAME = '\'Login with code\', \'New application\'';
$filterWidgetArray = array(
'query' => '
SELECT
p.person_id AS "PersonId",
p.vorname AS "Vorname",
p.nachname AS "Nachname",
p.gebdatum AS "Gebdatum",
p.staatsbuergerschaft AS "Nation",
pl.zeitpunkt AS "LockDate",
pl.lockuser AS "LockUser",
(
SELECT l.zeitpunkt
FROM system.tbl_log l
WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.')
AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.')
AND l.person_id = p.person_id
ORDER BY l.zeitpunkt DESC
LIMIT 1
) AS "LastAction",
(
SELECT l.insertvon
FROM system.tbl_log l
WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.')
AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.')
AND l.person_id = p.person_id
ORDER BY l.zeitpunkt DESC
LIMIT 1
) AS "User/Operator",
(
SELECT pss.studiensemester_kurzbz
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW())
ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC
LIMIT 1
) AS "Studiensemester",
(
SELECT pss.bewerbung_abgeschicktamum
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NOT NULL
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW())
ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC
LIMIT 1
) AS "SendDate",
(
SELECT COUNT(*)
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NOT NULL
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW())
LIMIT 1
) AS "AnzahlAbgeschickt",
(
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz)), \', \')
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NOT NULL
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW())
LIMIT 1
) AS "StgAbgeschickt"
FROM public.tbl_person p
LEFT JOIN (
SELECT tpl.person_id,
tpl.zeitpunkt,
tpl.uid AS lockuser
FROM system.tbl_person_lock tpl
WHERE tpl.app = '.$APP.'
) pl USING(person_id)
WHERE
EXISTS (
SELECT 1
FROM public.tbl_prestudent ps
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND EXISTS (
SELECT 1
FROM public.tbl_prestudentstatus pss
WHERE pss.prestudent_id = ps.prestudent_id
AND pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bestaetigtam IS NOT NULL
AND pss.bewerbung_abgeschicktamum IS NOT NULL
AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW())
)
$query = '
SELECT
p.person_id AS "PersonId",
p.vorname AS "Vorname",
p.nachname AS "Nachname",
p.gebdatum AS "Gebdatum",
p.staatsbuergerschaft AS "Nation",
pl.zeitpunkt AS "LockDate",
pl.lockuser AS "LockUser",
(
SELECT l.zeitpunkt
FROM system.tbl_log l
WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.')
AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.')
AND l.person_id = p.person_id
ORDER BY l.zeitpunkt DESC
LIMIT 1
) AS "LastAction",
(
SELECT l.insertvon
FROM system.tbl_log l
WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.')
AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.')
AND l.person_id = p.person_id
ORDER BY l.zeitpunkt DESC
LIMIT 1
) AS "User/Operator",
(
SELECT pss.studiensemester_kurzbz
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW())
ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC
LIMIT 1
) AS "Studiensemester",
(
SELECT pss.bewerbung_abgeschicktamum
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NOT NULL
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW())
ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC
LIMIT 1
) AS "SendDate",
(
SELECT COUNT(*)
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NOT NULL
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW())
LIMIT 1
) AS "AnzahlAbgeschickt",
(
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz)), \', \')
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NOT NULL
AND ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW())
LIMIT 1
) AS "StgAbgeschickt"
FROM public.tbl_person p
LEFT JOIN (
SELECT tpl.person_id,
tpl.zeitpunkt,
tpl.uid AS lockuser
FROM system.tbl_person_lock tpl
WHERE tpl.app = '.$APP.'
) pl USING(person_id)
WHERE
EXISTS (
SELECT 1
FROM public.tbl_prestudent ps
JOIN public.tbl_studiengang sg USING(studiengang_kz)
WHERE ps.person_id = p.person_id
AND sg.typ IN ('.$STUDIENGANG_TYP.')
AND EXISTS (
SELECT 1
FROM public.tbl_prestudentstatus pss
WHERE pss.prestudent_id = ps.prestudent_id
AND pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bestaetigtam IS NOT NULL
AND pss.bewerbung_abgeschicktamum IS NOT NULL
AND pss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >= NOW())
)
ORDER BY "LastAction" DESC
',
)
ORDER BY "LastAction" DESC';
$filterWidgetArray = array(
'query' => $query,
'app' => 'infocenter',
'datasetName' => 'freigegeben',
'filterKurzbz' => 'InfoCenterFreigegeben5days',
'filter_id' => $this->input->get('filter_id'),
'requiredPermissions' => 'infocenter',
'checkboxes' => 'PersonId',
'additionalColumns' => array('Details'),
@@ -194,10 +199,5 @@
}
);
$filterWidgetArray['app'] = 'infocenter';
$filterWidgetArray['datasetName'] = 'freigegeben';
$filterWidgetArray['filterKurzbz'] = 'InfoCenterFreigegeben5days';
$filterWidgetArray['filter_id'] = $this->input->get('filter_id');
echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray);
?>
+26 -1
View File
@@ -43,6 +43,8 @@ class FilterWidget extends Widget
private $_hideHeader;
private $_hideSave;
private $_customMenu; // if true then method _setFilterMenu is NOT called
private static $_FilterWidgetInstance; // static property that contains the instance of itself
/**
@@ -60,7 +62,13 @@ class FilterWidget extends Widget
// Let's start if it's allowed
// NOTE: If it is NOT allowed then no data are loaded
if ($this->filterslib->isAllowed($this->_requiredPermissions)) $this->_startFilterWidget();
if ($this->filterslib->isAllowed($this->_requiredPermissions))
{
$this->_startFilterWidget();
// If a custom menu is not used, then default menu is used
if ($this->_customMenu != true) $this->_setFilterMenu();
}
}
//------------------------------------------------------------------------------------------------------------------
@@ -144,6 +152,7 @@ class FilterWidget extends Widget
$this->_checkboxes = null;
$this->_hideHeader = null;
$this->_hideSave = null;
$this->_customMenu = null;
// Retrived the required permissions parameter if present
if (isset($args[FiltersLib::REQUIRED_PERMISSIONS_PARAMETER]))
@@ -224,6 +233,11 @@ class FilterWidget extends Widget
{
$this->_hideSave = $args[FiltersLib::HIDE_SAVE];
}
if (isset($args[FiltersLib::CUSTOM_MENU]) && is_bool($args[FiltersLib::CUSTOM_MENU]))
{
$this->_customMenu = $args[FiltersLib::CUSTOM_MENU];
}
}
/**
@@ -364,6 +378,17 @@ class FilterWidget extends Widget
$this->filterslib->setElementSession(FiltersLib::REQUIRED_PERMISSIONS_PARAMETER, $this->_requiredPermissions);
}
/**
*
*/
private function _setFilterMenu()
{
// Generates the filters structure array
$filterMenu = $this->filterslib->generateFilterMenu(
$this->router->directory.$this->router->class.'/'.$this->router->method
);
}
/**
* Calls the method _markRow and _formatRow to marks rows using markRow and format rowns using formatRow
* NOTE: this method operates directly on the retrived dataset: parameter passed by reference
+17
View File
@@ -9,6 +9,23 @@
* @since Version 1.0.0
*/
/**
* 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
* It may be overwritten by a custom refreshSideMenuHook included in a javascript which will be loaded after this one
* The given parameters, filter_page and navigation_page, are required
*/
function refreshSideMenuHook()
{
FHC_NavigationWidget.refreshSideMenuHook(
'system/Filters/setNavigationMenu',
{
filter_page: FHC_FilterWidget.getFilterPage(),
navigation_page: FHC_NavigationWidget.getNavigationPage()
}
);
}
/**
* Global function used by NavigationWidget JS to bind events to side menu elements
* NOTE: it is called from the NavigationWidget JS therefore must be a global function
+21 -13
View File
@@ -25,7 +25,7 @@ var FHC_NavigationWidget = {
FHC_AjaxClient.ajaxCallGet(
'system/Navigation/header',
{
navigation_page: FHC_NavigationWidget._getNavigationWidgetCalled()
navigation_page: FHC_NavigationWidget.getNavigationPage()
},
{
successCallback: function(data, textStatus, jqXHR) {
@@ -54,7 +54,7 @@ var FHC_NavigationWidget = {
FHC_AjaxClient.ajaxCallGet(
'system/Navigation/menu',
{
navigation_page: FHC_NavigationWidget._getNavigationWidgetCalled()
navigation_page: FHC_NavigationWidget.getNavigationPage()
},
{
successCallback: function(data, textStatus, jqXHR) {
@@ -87,13 +87,20 @@ var FHC_NavigationWidget = {
/**
* Calls URL to retrive a refreshed menu array
*/
refreshSideMenuHook: function(url) {
refreshSideMenuHook: function(url, params = null) {
var callParameters = {};
if (params != null && typeof params == "object")
{
callParameters = params;
}
callParameters.navigation_page = FHC_NavigationWidget.getNavigationPage();
FHC_AjaxClient.ajaxCallGet(
url,
{
navigation_page: FHC_NavigationWidget._getNavigationWidgetCalled()
},
callParameters,
{
successCallback: function(data, textStatus, jqXHR) {
FHC_NavigationWidget.renderSideMenu();
@@ -105,6 +112,14 @@ var FHC_NavigationWidget = {
);
},
/**
* Returns the URI of the caller
*/
getNavigationPage: function() {
return FHC_JS_DATA_STORAGE_OBJECT.called_path + "/" + FHC_JS_DATA_STORAGE_OBJECT.called_method;
},
//------------------------------------------------------------------------------------------------------------------
// Private methods
@@ -266,13 +281,6 @@ var FHC_NavigationWidget = {
return strLeftMenu;
},
/**
* Returns the URI of the caller
*/
_getNavigationWidgetCalled: function() {
return FHC_JS_DATA_STORAGE_OBJECT.called_path + "/" + FHC_JS_DATA_STORAGE_OBJECT.called_method;
},
/**
* Generates the menu entry link within the fhc_controller_id if present
*/
@@ -5,10 +5,14 @@
/**
* 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
* To be called only if the page has a customized menu (currently only index)
*/
function refreshSideMenuHook()
if (FHC_JS_DATA_STORAGE_OBJECT.called_method == 'index')
{
FHC_NavigationWidget.refreshSideMenuHook('system/infocenter/InfoCenter/setNavigationMenuArrayJson');
function refreshSideMenuHook()
{
FHC_NavigationWidget.refreshSideMenuHook('system/infocenter/InfoCenter/setNavigationMenuArrayJson');
}
}
/**