diff --git a/application/controllers/system/Filters.php b/application/controllers/system/Filters.php new file mode 100644 index 000000000..6d008ede7 --- /dev/null +++ b/application/controllers/system/Filters.php @@ -0,0 +1,464 @@ +load->library('session'); + + $this->load->model('system/Filters_model', 'FiltersModel'); + $this->load->model('person/Benutzer_model', 'BenutzerModel'); + } + + /** + * + */ + public function tableDataset() + { + $json = new stdClass(); + + $json->selectedFields = $_SESSION[self::SESSION_NAME]['selectedFields']; + $json->columnsAliases = $_SESSION[self::SESSION_NAME]['columnsAliases']; + $json->additionalColumns = $_SESSION[self::SESSION_NAME]['additionalColumns']; + $json->checkboxes = $_SESSION[self::SESSION_NAME]['checkboxes']; + $json->dataset = $_SESSION[self::SESSION_NAME]['dataset']; + + $this->output->set_content_type('application/json')->set_output(json_encode($json)); + } + + /** + * + */ + public function selectFields() + { + $json = new stdClass(); + + $json->allSelectedFields = $_SESSION[self::SESSION_NAME]['allSelectedFields']; + $json->allColumnsAliases = $_SESSION[self::SESSION_NAME]['allColumnsAliases']; + + $json->selectedFields = $_SESSION[self::SESSION_NAME]['selectedFields']; + $json->columnsAliases = $_SESSION[self::SESSION_NAME]['columnsAliases']; + + $this->output->set_content_type('application/json')->set_output(json_encode($json)); + } + + /** + * + */ + public function sortSelectedFields() + { + $selectedFieldsLst = $this->input->post('selectedFieldsLst'); + + $json = new stdClass(); + + $allSelectedFields = $_SESSION[self::SESSION_NAME]['allSelectedFields']; + $allColumnsAliases = $_SESSION[self::SESSION_NAME]['allColumnsAliases']; + + if (isset($selectedFieldsLst) && is_array($selectedFieldsLst)) + { + $json->selectedFields = $_SESSION[self::SESSION_NAME]['selectedFields'] = $selectedFieldsLst; + + for ($i = 0; $i < count($json->selectedFields); $i++) + { + $pos = array_search($json->selectedFields[$i], $allSelectedFields); + + if ($pos !== false) + { + $json->columnsAliases[] = $json->selectedFields[$i]; + if ($allColumnsAliases != null && is_array($allColumnsAliases)) + { + $json->columnsAliases[] = $allColumnsAliases[$pos]; + } + } + } + } + + $this->output->set_content_type('application/json')->set_output(json_encode($json)); + } + + /** + * + */ + public function selectFilters() + { + $json = new stdClass(); + + $json->allSelectedFields = $_SESSION[self::SESSION_NAME]['allSelectedFields']; + $json->allColumnsAliases = $_SESSION[self::SESSION_NAME]['allColumnsAliases']; + + $json->selectedFilters = $_SESSION[self::SESSION_NAME]['selectedFilters']; + $json->selectedFiltersAliases = array(); + $json->selectedFiltersMetaData = array(); + + $json->selectedFiltersActiveFilters = array(); + $json->selectedFiltersActiveFiltersOperation = array(); + $json->selectedFiltersActiveFiltersOption = array(); + + $metaData = $_SESSION[self::SESSION_NAME]['metaData']; + $activeFilters = $_SESSION[self::SESSION_NAME]['activeFilters']; + $activeFiltersOperation = $_SESSION[self::SESSION_NAME]['activeFiltersOperation']; + $activeFiltersOption = $_SESSION[self::SESSION_NAME]['activeFiltersOption']; + + for ($i = 0; $i < count($json->selectedFilters); $i++) + { + $pos = array_search($json->selectedFilters[$i], $json->allSelectedFields); + + if ($pos !== false) + { + $json->selectedFiltersAliases[] = $json->selectedFilters[$i]; + if ($json->allColumnsAliases != null && is_array($json->allColumnsAliases)) + { + $json->selectedFiltersAliases[] = $json->allColumnsAliases[$pos]; + } + + $json->selectedFiltersMetaData[] = $metaData[$pos]; + + if (isset($activeFilters[$json->selectedFilters[$i]])) + { + $json->selectedFiltersActiveFilters[] = $activeFilters[$json->selectedFilters[$i]]; + } + + if (isset($activeFiltersOperation[$json->selectedFilters[$i]])) + { + $json->selectedFiltersActiveFiltersOperation[] = $activeFiltersOperation[$json->selectedFilters[$i]]; + } + + if (isset($activeFiltersOption[$json->selectedFilters[$i]])) + { + $json->selectedFiltersActiveFiltersOption[] = $activeFiltersOption[$json->selectedFilters[$i]]; + } + } + } + + $this->output->set_content_type('application/json')->set_output(json_encode($json)); + } + + /** + * + */ + public function saveFilter() + { + $this->_saveFilter($this->input->post("customFilterDescription")); + + $this->output->set_content_type('application/json')->set_output(json_encode('Tutto bene!!!')); + } + + /** + * + */ + private function _saveFilter($customFilterDescription) + { + $objToBeSaved = new stdClass(); + + $filterSessionArray = $this->session->userdata(self::SESSION_NAME); + + $objToBeSaved->name = $customFilterDescription; + + if (isset($filterSessionArray[self::SELECTED_FIELDS])) + { + $selectedFields = $filterSessionArray[self::SELECTED_FIELDS]; + $objToBeSaved->columns = array(); + + for ($selectedFieldsCounter = 0; $selectedFieldsCounter < count($selectedFields); $selectedFieldsCounter++) + { + $objToBeSaved->columns[$selectedFieldsCounter] = new stdClass(); + $objToBeSaved->columns[$selectedFieldsCounter]->name = $selectedFields[$selectedFieldsCounter]; + } + } + + if (isset($filterSessionArray[self::SELECTED_FILTERS])) + { + $selectedFilters = $filterSessionArray[self::SELECTED_FILTERS]; + $objToBeSaved->filters = array(); + + for ($selectedFiltersCounter = 0; $selectedFiltersCounter < count($selectedFilters); $selectedFiltersCounter++) + { + $objToBeSaved->filters[$selectedFiltersCounter] = new stdClass(); + $objToBeSaved->filters[$selectedFiltersCounter]->name = $selectedFilters[$selectedFiltersCounter]; + + if (isset($filterSessionArray[self::ACTIVE_FILTERS]) + && isset($filterSessionArray[self::ACTIVE_FILTERS][$selectedFilters[$selectedFiltersCounter]])) + { + $objToBeSaved->filters[$selectedFiltersCounter]->condition = $filterSessionArray[self::ACTIVE_FILTERS][$selectedFilters[$selectedFiltersCounter]]; + } + + if (isset($filterSessionArray[self::ACTIVE_FILTERS_OPERATION]) + && isset($filterSessionArray[self::ACTIVE_FILTERS_OPERATION][$selectedFilters[$selectedFiltersCounter]])) + { + $objToBeSaved->filters[$selectedFiltersCounter]->operation = $filterSessionArray[self::ACTIVE_FILTERS_OPERATION][$selectedFilters[$selectedFiltersCounter]]; + } + + if (isset($filterSessionArray[self::ACTIVE_FILTERS_OPTION]) + && isset($filterSessionArray[self::ACTIVE_FILTERS_OPTION][$selectedFilters[$selectedFiltersCounter]])) + { + $objToBeSaved->filters[$selectedFiltersCounter]->option = $filterSessionArray[self::ACTIVE_FILTERS_OPTION][$selectedFilters[$selectedFiltersCounter]]; + } + } + } + + $desc = $customFilterDescription; + $descPGArray = '{"'.$desc.'", "'.$desc.'", "'.$desc.'", "'.$desc.'"}'; + + $resultBenutzer = $this->BenutzerModel->load(getAuthUID()); + $personId = $resultBenutzer->retval[0]->person_id; + + $result = $this->FiltersModel->loadWhere(array( + 'app' => $_SESSION[self::SESSION_NAME]['app'], + 'dataset_name' => $_SESSION[self::SESSION_NAME]['datasetName'], + 'description' => $descPGArray, + 'person_id' => $personId + )); + + if (hasData($result)) + { + $this->FiltersModel->update( + array( + 'app' => $_SESSION[self::SESSION_NAME]['app'], + 'dataset_name' => $_SESSION[self::SESSION_NAME]['datasetName'], + 'description' => $descPGArray, + 'person_id' => $personId + ), + array( + 'filter' => json_encode($objToBeSaved) + ) + ); + } + else + { + $this->FiltersModel->insert(array( + 'app' => $_SESSION[self::SESSION_NAME]['app'], + 'dataset_name' => $_SESSION[self::SESSION_NAME]['datasetName'], + 'filter_kurzbz' => uniqid($personId, true), + 'person_id' => $personId, + 'description' => $descPGArray, + 'sort' => null, + 'default_filter' => false, + 'filter' => json_encode($objToBeSaved), + 'oe_kurzbz' => null + )); + } + } + + /** + * + */ + public function deleteCustomFilter() + { + $filter_id = $this->input->post('filter_id'); + + if (is_numeric($filter_id)) + { + $this->FiltersModel->deleteCustomFilter($filter_id); + + $this->output->set_content_type('application/json')->set_output(json_encode('Tutto bene!!!')); + } + } + + /** + * + */ + public function removeSelectedFields() + { + $fieldName = $this->input->post('fieldName'); + + $allSelectedFields = $_SESSION[self::SESSION_NAME]['allSelectedFields']; + $allColumnsAliases = $_SESSION[self::SESSION_NAME]['allColumnsAliases']; + + $selectedFields = $_SESSION[self::SESSION_NAME]['selectedFields']; + $columnsAliases = $_SESSION[self::SESSION_NAME]['columnsAliases']; + + if (($pos = array_search($fieldName, $selectedFields)) !== false) + { + array_splice($selectedFields, $pos, 1); + + if ($columnsAliases != null && is_array($columnsAliases)) + { + array_splice($columnsAliases, $pos, 1); + } + } + + $_SESSION[self::SESSION_NAME]['selectedFields'] = $selectedFields; + $_SESSION[self::SESSION_NAME]['columnsAliases'] = $columnsAliases; + + $json = new stdClass(); + + $json->allSelectedFields = $allSelectedFields; + $json->allColumnsAliases = $allColumnsAliases; + $json->selectedFields = $selectedFields; + $json->columnsAliases = $columnsAliases; + + $this->output->set_content_type('application/json')->set_output(json_encode($json)); + } + + /** + * + */ + public function removeSelectedFilters() + { + $fieldName = $this->input->post('fieldName'); + + $selectedFilters = $_SESSION[self::SESSION_NAME]['selectedFilters']; + $selectedFiltersActiveFilters = $_SESSION[self::SESSION_NAME]['activeFilters']; + $selectedFiltersActiveFiltersOperation = $_SESSION[self::SESSION_NAME]['activeFiltersOperation']; + $selectedFiltersActiveFiltersOption = $_SESSION[self::SESSION_NAME]['activeFiltersOption']; + + if (($pos = array_search($fieldName, $selectedFilters)) !== false) + { + array_splice($selectedFilters, $pos, 1); + array_splice($selectedFiltersActiveFilters, $pos, 1); + array_splice($selectedFiltersActiveFiltersOperation, $pos, 1); + array_splice($selectedFiltersActiveFiltersOption, $pos, 1); + } + + $_SESSION[self::SESSION_NAME]['selectedFilters'] = $selectedFilters; + $_SESSION[self::SESSION_NAME]['activeFilters'] = $selectedFiltersActiveFilters; + $_SESSION[self::SESSION_NAME]['activeFiltersOperation'] = $selectedFiltersActiveFiltersOperation; + $_SESSION[self::SESSION_NAME]['activeFiltersOption'] = $selectedFiltersActiveFiltersOption; + + $json = new stdClass(); + + $json->selectedFilters = $selectedFilters; + $json->selectedFiltersActiveFilters = $selectedFiltersActiveFilters; + $json->selectedFiltersActiveFiltersOperation = $selectedFiltersActiveFiltersOperation; + $json->selectedFiltersActiveFiltersOption = $selectedFiltersActiveFiltersOption; + + $this->output->set_content_type('application/json')->set_output(json_encode($json)); + } + + /** + * + */ + public function addSelectedFields() + { + $fieldName = $this->input->post('fieldName'); + + $allSelectedFields = $_SESSION[self::SESSION_NAME]['allSelectedFields']; + $allColumnsAliases = $_SESSION[self::SESSION_NAME]['allColumnsAliases']; + + $selectedFields = $_SESSION[self::SESSION_NAME]['selectedFields']; + $columnsAliases = $_SESSION[self::SESSION_NAME]['columnsAliases']; + + if (($pos = array_search($fieldName, $allSelectedFields)) !== false + && array_search($fieldName, $selectedFields) === false) + { + array_push($selectedFields, $fieldName); + + if ($columnsAliases != null && is_array($columnsAliases)) + { + array_push($columnsAliases, $allColumnsAliases[$pos]); + } + } + + $_SESSION[self::SESSION_NAME]['selectedFields'] = $selectedFields; + $_SESSION[self::SESSION_NAME]['columnsAliases'] = $columnsAliases; + + $json = new stdClass(); + + $json->allSelectedFields = $allSelectedFields; + $json->allColumnsAliases = $allColumnsAliases; + $json->selectedFields = $selectedFields; + $json->columnsAliases = $columnsAliases; + + $this->output->set_content_type('application/json')->set_output(json_encode($json)); + } + + /** + * + */ + public function addSelectedFilters() + { + $fieldName = $this->input->post('fieldName'); + + $selectedFilters = $_SESSION[self::SESSION_NAME]['selectedFilters']; + $selectedFiltersActiveFilters = $_SESSION[self::SESSION_NAME]['activeFilters']; + $selectedFiltersActiveFiltersOperation = $_SESSION[self::SESSION_NAME]['activeFiltersOperation']; + $selectedFiltersActiveFiltersOption = $_SESSION[self::SESSION_NAME]['activeFiltersOption']; + + if (!in_array($fieldName, $selectedFilters)) + { + array_push($selectedFilters, $fieldName); + $selectedFiltersActiveFilters[$fieldName] = ""; + $selectedFiltersActiveFiltersOperation[$fieldName] = ""; + $selectedFiltersActiveFiltersOption[$fieldName] = ""; + } + + $_SESSION[self::SESSION_NAME]['selectedFilters'] = $selectedFilters; + $_SESSION[self::SESSION_NAME]['activeFilters'] = $selectedFiltersActiveFilters; + $_SESSION[self::SESSION_NAME]['activeFiltersOperation'] = $selectedFiltersActiveFiltersOperation; + $_SESSION[self::SESSION_NAME]['activeFiltersOption'] = $selectedFiltersActiveFiltersOption; + + $json = new stdClass(); + + $json->selectedFilters = $selectedFilters; + $json->selectedFiltersActiveFilters = $selectedFiltersActiveFilters; + $json->selectedFiltersActiveFiltersOperation = $selectedFiltersActiveFiltersOperation; + $json->selectedFiltersActiveFiltersOption = $selectedFiltersActiveFiltersOption; + + $this->output->set_content_type('application/json')->set_output(json_encode($json)); + } + + /** + * + */ + public function applyFilter() + { + $fieldNames = $this->input->post('filterNames'); + $filterOperations = $this->input->post('filterOperations'); + $filterOperationValues = $this->input->post('filterOperationValues'); + $filterOptions = $this->input->post('filterOptions'); + + $activeFilters = array_combine($fieldNames, $filterOperationValues); + $activeFiltersOperation = array_combine($fieldNames, $filterOperations); + $activeFiltersOption = array_combine($fieldNames, $filterOptions); + + $_SESSION[self::SESSION_NAME]['activeFilters'] = $activeFilters; + $_SESSION[self::SESSION_NAME]['activeFiltersOperation'] = $activeFiltersOperation; + $_SESSION[self::SESSION_NAME]['activeFiltersOption'] = $activeFiltersOption; + + $json = new stdClass(); + + $json->fieldNames = $fieldNames; + $json->activeFilters = $activeFilters; + $json->activeFiltersOperation = $activeFiltersOperation; + $json->activeFiltersOption = $activeFiltersOption; + + $this->output->set_content_type('application/json')->set_output(json_encode($json)); + } + + /** + * + */ + public function rowNumber() + { + $json = new stdClass(); + + $dataset = $_SESSION[self::SESSION_NAME]['dataset']; + + if (is_array($dataset)) + { + $json->rowNumber = count($dataset); + } + + $this->output->set_content_type('application/json')->set_output(json_encode($json)); + } +} diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 135e24a5c..4cd6a0e07 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -156,12 +156,12 @@ class InfoCenter extends VileSci_Controller /** * Saves if a document has been formal geprueft. saves current timestamp if checked as geprueft, or null if not. + * @param $person_id */ - public function saveFormalGeprueft() + public function saveFormalGeprueft($person_id) { - $akte_id = $this->input->get('akte_id'); - $formalgeprueft = $this->input->get('formal_geprueft'); - $person_id = $this->input->get('person_id'); + $akte_id = $this->input->post('akte_id'); + $formalgeprueft = $this->input->post('formal_geprueft'); if (!isset($akte_id) || !isset($formalgeprueft) || !isset($person_id)) show_error('Parameters not set!'); @@ -191,7 +191,9 @@ class InfoCenter extends VileSci_Controller ) ); - redirect(self::URL_PREFIX.'/showDetails/'.$person_id.'#DokPruef'); + $this->output + ->set_content_type('application/json') + ->set_output(json_encode($timestamp)); } /** @@ -260,7 +262,9 @@ class InfoCenter extends VileSci_Controller $this->_log($logdata['person_id'], 'savezgv', array($logdata['studiengang_kurzbz'], $prestudent_id)); - $this->_redirectToStart($prestudent_id, 'ZgvPruef'); + $this->output + ->set_content_type('application/json') + ->set_output(json_encode($result->retval)); } /** @@ -385,7 +389,35 @@ class InfoCenter extends VileSci_Controller $this->_log($person_id, 'savenotiz', array($titel)); - redirect(self::URL_PREFIX.'/showDetails/'.$person_id.'#NotizAkt'); + $this->output + ->set_content_type('application/json') + ->set_output(json_encode($result->retval)); + } + + /** + * Loads Notizen view for a person, helper for reloading after ajax request + * @param $person_id + */ + public function reloadNotizen($person_id) + { + $notizen = $this->NotizModel->getNotiz($person_id); + + if (isError($notizen)) + { + show_error($notizen->retval); + } + + $this->load->view('system/infocenter/notizen.php', array('notizen' => $notizen->retval)); + } + + /** + * Loads Logs view for a person, helper for reloading after ajax request + * @param $person_id + */ + public function reloadLogs($person_id) + { + $logs = $this->personloglib->getLogs($person_id); + $this->load->view('system/infocenter/logs.php', array('logs' => $logs)); } /** @@ -416,21 +448,6 @@ class InfoCenter extends VileSci_Controller ->_display(); } - /** - * - */ - public function deleteCustomFilter() - { - $filter_id = $this->input->get('filter_id'); - - if (is_numeric($filter_id)) - { - $this->FiltersModel->deleteCustomFilter($filter_id); - - redirect(self::URL_PREFIX); - } - } - // ----------------------------------------------------------------------------------------------------------------- // Private methods @@ -551,8 +568,9 @@ class InfoCenter extends VileSci_Controller $tofill['children'][] = array( 'link' => sprintf($toPrint, base_url('index.ci.php/system/infocenter/InfoCenter?filter_id'), $filterId), 'description' => $description, - 'subscriptLink' => sprintf($toPrint, base_url('index.ci.php/system/infocenter/InfoCenter/deleteCustomFilter?filter_id'), $filterId), - 'subscriptDescription' => 'Remove' + 'subscriptDescription' => 'Remove', + 'subscriptLinkId' => 'removeFilterById', + 'subscriptLinkValue' => $filterId ); } } @@ -689,7 +707,7 @@ class InfoCenter extends VileSci_Controller // Interessenten come first, otherwise by bewerbungsdatum desc, then by prestudent_id desc usort($zgvpruefungen, function ($a, $b) { - $bewdatesort = strcmp($b->prestudentstatus->bewerbung_abgeschicktamum, $a->prestudentstatus->bewerbung_abgeschicktamum); + $bewdatesort = isset($a->prestudentstatus) && isset($b->prestudentstatus) ? strcmp($b->prestudentstatus->bewerbung_abgeschicktamum, $a->prestudentstatus->bewerbung_abgeschicktamum) : 0; $defaultsort = $bewdatesort === 0 ? (int)$b->prestudent_id - (int)$a->prestudent_id : $bewdatesort; if (!isset($a->prestudentstatus->status_kurzbz) || !isset($b->prestudentstatus->status_kurzbz)) return $defaultsort; diff --git a/application/views/system/infocenter/addNotiz.php b/application/views/system/infocenter/addNotiz.php index 25af11897..8c5574344 100644 --- a/application/views/system/infocenter/addNotiz.php +++ b/application/views/system/infocenter/addNotiz.php @@ -1,4 +1,4 @@ -
+
diff --git a/application/views/system/infocenter/dokpruefung.php b/application/views/system/infocenter/dokpruefung.php index 1c303e3c2..8261a2ebd 100644 --- a/application/views/system/infocenter/dokpruefung.php +++ b/application/views/system/infocenter/dokpruefung.php @@ -22,9 +22,11 @@ erstelltam), 'd.m.Y') ?> langtext ?> - /> + > + formal_geprueft_amum) ? date_format(date_create($dokument->formal_geprueft_amum), 'd.m.Y') : ''; ?> + diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php index 9dd0ef176..9b2643a94 100644 --- a/application/views/system/infocenter/infocenterData.php +++ b/application/views/system/infocenter/infocenterData.php @@ -115,58 +115,46 @@ ', 'hideHeader' => false, 'hideSave' => false, - 'checkboxes' => array('PersonId'), + 'checkboxes' => 'PersonId', 'additionalColumns' => array('Details'), - 'formatRaw' => function($fieldName, $fieldValue, $datasetRaw) { + 'formatRaw' => function($datasetRaw) { - if ($fieldName == 'Details') + $datasetRaw->{'Details'} = sprintf( + 'Details', + base_url('index.ci.php/system/infocenter/InfoCenter/showDetails/'), + $datasetRaw->{'PersonId'} + ); + + if ($datasetRaw->{'SendDate'} == null) { - $link = 'Details'; - - $datasetRaw->{$fieldName} = sprintf( - $link, - base_url('index.ci.php/system/infocenter/InfoCenter/showDetails/'), - $datasetRaw->PersonId - ); + $datasetRaw->{'SendDate'} = 'Not sent'; } - if ($fieldName == 'SendDate') + if ($datasetRaw->{'LastAction'} == null) { - if ($datasetRaw->{$fieldName} == '01.01.1970 01:00:00') - { - $datasetRaw->{$fieldName} = 'Not sent'; - } + $datasetRaw->{'LastAction'} = 'Not logged'; } - if ($fieldName == 'LastAction') + if ($datasetRaw->{'User/Operator'} == '') { - if ($datasetRaw->{$fieldName} == '01.01.1970 01:00:00') - { - $datasetRaw->{$fieldName} = 'Not logged'; - } + $datasetRaw->{'User/Operator'} = 'NA'; } - if ($fieldName == 'User/Operator') + if ($datasetRaw->{'LockDate'} == null) { - if ($datasetRaw->{$fieldName} == '') - { - $datasetRaw->{$fieldName} = 'NA'; - } + $datasetRaw->{'LockDate'} = 'Not locked'; } - if ($fieldName == 'LockDate') + if ($datasetRaw->{'StgAbgeschickt'} == null) { - if ($datasetRaw->{$fieldName} == '01.01.1970 01:00:00') - { - $datasetRaw->{$fieldName} = 'Not locked'; - } + $datasetRaw->{'StgAbgeschickt'} = 'N/A'; } return $datasetRaw; }, 'markRow' => function($datasetRaw) { - if ($datasetRaw->LockDate != '') + if ($datasetRaw->LockDate != null) { return FilterWidget::DEFAULT_MARK_ROW_CLASS; } diff --git a/application/views/system/infocenter/infocenterDetails.php b/application/views/system/infocenter/infocenterDetails.php index da6abaf78..299138e5c 100644 --- a/application/views/system/infocenter/infocenterDetails.php +++ b/application/views/system/infocenter/infocenterDetails.php @@ -129,10 +129,14 @@
+
load->view('system/infocenter/addNotiz.php'); ?> +
+
load->view('system/infocenter/notizen.php'); ?> +
-
+
load->view('system/infocenter/logs.php'); ?>
@@ -144,26 +148,6 @@
- - load->view('templates/FHC-Footer'); ?> diff --git a/application/views/system/infocenter/zgvpruefungen.php b/application/views/system/infocenter/zgvpruefungen.php index 0976c846d..ef0102a50 100644 --- a/application/views/system/infocenter/zgvpruefungen.php +++ b/application/views/system/infocenter/zgvpruefungen.php @@ -27,7 +27,8 @@ class="panel-collapse collapse">
+ action="#" class="zgvform"> +
@@ -96,13 +97,15 @@
- zgvdatum), 'd.m.Y'); + zgvdatum) ? "" : date_format(date_create($zgvpruefung->zgvdatum), 'd.m.Y'); + if ($infoonly): + echo $zgvdatum; else: ?> zgvdatum), 'd.m.Y') ?>" + value="" name="zgvdatum" id="zgvdatum_prestudent_id ?>">
@@ -153,13 +156,15 @@
- zgvmadatum), 'd.m.Y'); + zgvmadatum) ? "" : date_format(date_create($zgvpruefung->zgvmadatum), 'd.m.Y'); + if ($infoonly): + echo $zgvmadatum; else: ?> zgvmadatum), 'd.m.Y') ?>" + value="" name="zgvmadatum">
@@ -189,7 +194,7 @@
-
diff --git a/application/views/widgets/filter/filter.php b/application/views/widgets/filter/filter.php index 5f2ba79e5..9ceeed48e 100644 --- a/application/views/widgets/filter/filter.php +++ b/application/views/widgets/filter/filter.php @@ -26,6 +26,7 @@ margin-left: 3px; margin-right: 3px; padding: 10px; + top: 10px; } .filter-select-field-dnd-span:hover { @@ -56,107 +57,60 @@ border-right: 2px solid #428bca; } + .select-filter-operation { + display: inline; + width: 130px; + } + + .select-filter-operation-value { + display: inline; + width: 400px; + } + + .select-filter-option { + display: inline; + width: 90px; + } + + #addField { + display: inline; + width: 400px; + } + + #addFilter { + display: inline; + width: 400px; + } + + #selectedFilters { + margin-bottom: 20px; + } + + #customFilterDescription { + display: inline; + width: 400px; + } +
- - + -
-
-
-

- Filter options -

-
-
-
-
- -
+
+
+
+

+ Filter options +

+
+
+
+
+ +
-
+
-
- -
+
+ +
-
+
-
- -
+
+
+
-
+
-
+
-
- -
+
+ +
-
+
-
diff --git a/application/views/widgets/filter/saveFilter.php b/application/views/widgets/filter/saveFilter.php index 8edb25ad1..40c43773f 100644 --- a/application/views/widgets/filter/saveFilter.php +++ b/application/views/widgets/filter/saveFilter.php @@ -1,7 +1,39 @@ + +
- Filter description: -
-
- - + + Filter description: + + + + +
diff --git a/application/views/widgets/filter/selectFields.php b/application/views/widgets/filter/selectFields.php index 87694f3ca..14ba39284 100644 --- a/application/views/widgets/filter/selectFields.php +++ b/application/views/widgets/filter/selectFields.php @@ -1,54 +1,239 @@ -
- - for ($selectedFieldsCounter = 0; $selectedFieldsCounter < count($selectedFields); $selectedFieldsCounter++) - { - $selectedField = $selectedFields[$selectedFieldsCounter]; - $selectedFieldAlias = $selectedField; + function dndSF() + { + $(".filter-select-field-dnd-span").draggable({ + containment: "parent", + cursor: "move", + opacity: 0.4, + revert: "invalid", + revertDuration: 200, + drag: function(event, ui) { - if ($columnsAliases != null) - { - $indx = array_search($selectedField, $listFields); - if ($indx !== false) + var padding = 20; + var draggedElement = $(this); + + $(".filter-select-field-dnd-span").each(function(i, e) { + + if ($(this).attr('id') != draggedElement.attr('id')) + { + $(this).removeClass("selection-after"); + $(this).removeClass("selection-before"); + + var elementCenter = $(this).offset().left + ((padding + $(this).width()) / 2); + + if (event.pageX > ($(this).offset().left - (padding / 2)) + && event.pageX < ($(this).offset().left + $(this).width() + (padding / 2))) + { + if (event.pageX > elementCenter) + { + $(this).addClass("selection-after"); + $(this).removeClass("selection-before"); + } + else if (event.pageX < elementCenter) + { + $(this).addClass("selection-before"); + $(this).removeClass("selection-after"); + } + } + } + + }); + + } + }); + + $(".filter-select-field-dnd-span").droppable({ + accept: ".filter-select-field-dnd-span", + drop: function(event, ui) { + + var padding = 20; + var elementCenter = $(this).offset().left + ((padding + $(this).width()) / 2); + var draggedElement = ui.helper; + + if (event.pageX > elementCenter) { - $selectedFieldAlias = $columnsAliases[$indx]; + draggedElement.insertAfter($(this)); + } + else if (event.pageX < elementCenter) + { + draggedElement.insertBefore($(this)); + } + + $(this).removeClass("selection-before"); + $(this).removeClass("selection-after"); + + draggedElement.css({left: '0px', top: '10px'}); + + var arrayDndId = []; + + $(".filter-select-field-dnd-span").each(function(i, e) { + + arrayDndId[i] = $(this).attr('id').replace('dnd', ''); + + }); + + $.ajax({ + url: "", + method: "POST", + data: { + selectedFieldsLst: arrayDndId + } + }) + .done(function(data, textStatus, jqXHR) { + + resetSelectedFields(); + renderSelectedFields(); + + renderTableDataset(); + + }).fail(function(jqXHR, textStatus, errorThrown) { + alert(textStatus); + }); + + } + }); + } + + function resetEventsSF() + { + $("#addField").off('change'); + $(".remove-field").off('click'); + } + + function addEventsSF() + { + $("#addField").change(function(event) { + + $.ajax({ + url: "", + method: "POST", + data: { + fieldName: $(this).val() + } + }) + .done(function(data, textStatus, jqXHR) { + + resetSelectedFields(); + renderSelectedFields(); + + renderTableDataset(); + + }).fail(function(jqXHR, textStatus, errorThrown) { + alert(textStatus); + }); + + }); + + $(".remove-field").click(function(event) { + + $.ajax({ + url: "", + method: "POST", + data: { + fieldName: $(this).attr('fieldToRemove') + } + }) + .done(function(data, textStatus, jqXHR) { + + resetSelectedFields(); + renderSelectedFields(); + + renderTableDataset(); + + }).fail(function(jqXHR, textStatus, errorThrown) { + alert(textStatus); + }); + + }); + } + + function renderSelectedFields() + { + $.ajax({ + url: "", + method: "GET", + data: {}, + dataType: "json" + }) + .done(function(data, textStatus, jqXHR) { + + resetEventsSF(); + + if (data != null) + { + var arrayFieldsToDisplay = []; + + if (data.columnsAliases != null && $.isArray(data.columnsAliases)) + { + arrayFieldsToDisplay = data.columnsAliases; + } + else if (data.selectedFields != null && $.isArray(data.selectedFields)) + { + arrayFieldsToDisplay = data.selectedFields; + } + + for (var i = 0; i < arrayFieldsToDisplay.length; i++) + { + var fieldToDisplay = arrayFieldsToDisplay[i]; + var fieldName = data.selectedFields[i]; + + var strHtml = ''; + + strHtml += ''; + strHtml += fieldToDisplay; + strHtml += ''; + strHtml += ' X '; + strHtml += ''; + $("#filterSelectFieldsDnd").append(strHtml); + } + + var strDropDown = ''; + $("#addField").append(strDropDown); + + for (var i = 0; i < data.allSelectedFields.length; i++) + { + var fieldName = data.allSelectedFields[i]; + var fieldToDisplay = data.allSelectedFields[i]; + + if (data.allColumnsAliases != null && $.isArray(data.allColumnsAliases)) + { + fieldToDisplay = data.allColumnsAliases[i]; + } + + strDropDown = ''; + $("#addField").append(strDropDown); } } - ?> - - - X - - - -
- + + dndSF(); + addEventsSF(); + }) + .fail(function(jqXHR, textStatus, errorThrown) { + alert(textStatus); + }); + } + + function resetSelectedFields() + { + $("#filterSelectFieldsDnd").html(""); + $("#addField").html(""); + } + + $(document).ready(function() { + renderSelectedFields(); + }); + + + +
+
Add field: - - + +
diff --git a/application/views/widgets/filter/selectFilters.php b/application/views/widgets/filter/selectFilters.php index a6b638224..5b33352c5 100644 --- a/application/views/widgets/filter/selectFilters.php +++ b/application/views/widgets/filter/selectFilters.php @@ -1,69 +1,291 @@ -
- - for ($filtersCounter = 0; $filtersCounter < count($selectedFilters); $filtersCounter++) + function resetEventsSFilters() + { + $("#addFilter").off('change'); + } + + function addEventsSFilters() + { + $("#addFilter").change(function(event) { + + $.ajax({ + url: "", + method: "POST", + data: { + fieldName: $(this).val() + } + }) + .done(function(data, textStatus, jqXHR) { + + resetSelectedFilters(); + renderSelectedFilters(); + + renderTableDataset(); + + }).fail(function(jqXHR, textStatus, errorThrown) { + alert(textStatus); + }); + + }); + + $(".remove-filter").click(function(event) { + + $.ajax({ + url: "", + method: "POST", + data: { + fieldName: $(this).attr('filterToRemove') + } + }) + .done(function(data, textStatus, jqXHR) { + + resetSelectedFilters(); + renderSelectedFilters(); + + renderTableDataset(); + + }).fail(function(jqXHR, textStatus, errorThrown) { + alert(textStatus); + }); + + }); + + $(".select-filter-operation").change(function() { + + if ($(this).val() == "set" || $(this).val() == "nset") + { + $(this).parent().parent().find(".select-filter-operation-value").addClass("hidden-control"); + $(this).parent().parent().find(".select-filter-option").addClass("hidden-control"); + + $(this).parent().parent().find(".select-filter-operation-value").prop('disabled', true); + $(this).parent().parent().find(".select-filter-option").prop('disabled', true); + } + else + { + $(this).parent().parent().find(".select-filter-operation-value").removeClass("hidden-control"); + $(this).parent().parent().find(".select-filter-option").removeClass("hidden-control"); + + $(this).parent().parent().find(".select-filter-operation-value").prop('disabled', false); + $(this).parent().parent().find(".select-filter-option").prop('disabled', false); + } + + }); + + $("#applyFilter").click(function() { + + var selectFilterName = []; + var selectFilterOperation = []; + var selectFilterOperationValue = []; + var selectFilterOption = []; + + $("#selectedFilters > div").each(function(i, e) { + var tmpSelectFilterName = $(this).find('.hidden-field-name').val(); + var tmpSelectFilterOperation = $(this).find('.select-filter-operation').val(); + var tmpSelectFilterOperationValue = $(this).find('.select-filter-operation-value:enabled').val(); + var tmpSelectFilterOption = $(this).find('.select-filter-option:enabled').val(); + + selectFilterName.push(tmpSelectFilterName); + selectFilterOperation.push(tmpSelectFilterOperation); + selectFilterOperationValue.push(tmpSelectFilterOperationValue != null ? tmpSelectFilterOperationValue : ""); + selectFilterOption.push(tmpSelectFilterOption != null ? tmpSelectFilterOption : ""); + }); + + $.ajax({ + url: "", + method: "POST", + data: { + filterNames: selectFilterName, + filterOperations: selectFilterOperation, + filterOperationValues: selectFilterOperationValue, + filterOptions: selectFilterOption + } + }) + .done(function(data, textStatus, jqXHR) { + + // Success + + }).fail(function(jqXHR, textStatus, errorThrown) { + + // Error + + }).always(function() { + + location.reload(); + + }); + + }); + } + + function renderSelectedFilterFields(metaData, activeFilters, activeFiltersOperation, activeFiltersOption) + { + var html = ''; + + if (metaData.type.toLowerCase().indexOf("int") >= 0) { - $selectedFilter = $selectedFilters[$filtersCounter]; - - $md = FilterWidget::getFilterMetaData($selectedFilter, $metaData); - $selectedFieldAlias = $md->name; - - if ($columnsAliases != null) - { - $indx = array_search($selectedFilter, $listFields); - if ($indx !== false) - { - $selectedFieldAlias = $columnsAliases[$indx]; - } - } - - ?> -
- - - - - - - - - - - -
- '; + html += ' '; + html += ''; + html += ''; + html += ' '; + html += ''; } - ?> - -
-
- - Add filter: - - - '; + html += ' '; + html += ' '; + html += ' '; + html += ''; + html += ''; + html += ' '; + html += ''; + } + if (metaData.type.toLowerCase().indexOf('bool') >= 0) + { + html = ''; + html += ' '; + html += ''; + html += ''; + html += ' '; + html += ''; + } + if (metaData.type.toLowerCase().indexOf('timestamp') >= 0 || metaData.type.toLowerCase().indexOf('date') >= 0) + { + var classOperation = 'select-filter-operation-value form-control'; + var classOption = 'select-filter-option form-control'; + var disabled = ""; + + if (activeFiltersOperation == "set" || activeFiltersOperation == "nset") { - $field = $listFields[$listFieldsCounter]; - $listFieldAlias = $field; - - if ($columnsAliases != null) - { - $listFieldAlias = $columnsAliases[$listFieldsCounter]; - } - ?> - - - - - - - -
+ html = ''; + html += ' '; + html += ''; + html += ''; + html += ' '; + html += ''; + html += ''; + html += ' '; + html += ''; + } + + html += ''; + html += ' '; + html += ''; + + return html; + } + + function renderSelectedFilters() + { + $.ajax({ + url: "", + method: "GET", + data: {}, + dataType: "json" + }) + .done(function(data, textStatus, jqXHR) { + + resetEventsSFilters(); + + if (data != null) + { + var strDropDown = ''; + $("#addFilter").append(strDropDown); + + for (var i = 0; i < data.allSelectedFields.length; i++) + { + var fieldName = data.allSelectedFields[i]; + var fieldToDisplay = data.allSelectedFields[i]; + + if (data.allColumnsAliases != null && $.isArray(data.allColumnsAliases)) + { + fieldToDisplay = data.allColumnsAliases[i]; + } + + strDropDown = ''; + $("#addFilter").append(strDropDown); + } + + for (var i = 0; i < data.selectedFilters.length; i++) + { + var selectedFilters = '
'; + + selectedFilters += ''; + selectedFilters += data.selectedFiltersAliases[i]; + selectedFilters += ''; + + selectedFilters += renderSelectedFilterFields( + data.selectedFiltersMetaData[i], + data.selectedFiltersActiveFilters[i], + data.selectedFiltersActiveFiltersOperation[i], + data.selectedFiltersActiveFiltersOption[i] + ); + + selectedFilters += ''; + selectedFilters += ''; + selectedFilters += ''; + + selectedFilters += '
'; + + $("#selectedFilters").append(selectedFilters); + } + } + + addEventsSFilters(); + }) + .fail(function(jqXHR, textStatus, errorThrown) { + alert(textStatus); + }); + } + + function resetSelectedFilters() + { + $("#addFilter").html(""); + $("#selectedFilters").html(""); + } + + $(document).ready(function() { + renderSelectedFilters(); + }); + + + +
+ +
+ + Add filter: + + + + + + + + + +
diff --git a/application/views/widgets/filter/tableDataset.php b/application/views/widgets/filter/tableDataset.php index e84ae0715..0074d0eff 100644 --- a/application/views/widgets/filter/tableDataset.php +++ b/application/views/widgets/filter/tableDataset.php @@ -1,104 +1,156 @@ -retval; +
- +
- - - - - - - - - - + - - - - - - {$selectedField}, $result); - ?> - - - - - - - +
Select
- - - {$selectedField}; - ?> - - {$additionalColumn}; - ?> -
diff --git a/application/widgets/FilterWidget.php b/application/widgets/FilterWidget.php index 9f949e352..925126a43 100644 --- a/application/widgets/FilterWidget.php +++ b/application/widgets/FilterWidget.php @@ -31,6 +31,9 @@ class FilterWidget extends Widget const SESSION_NAME = 'FILTER'; + const ALL_SELECTED_FIELDS = 'allSelectedFields'; + const ALL_COLUMNS_ALIASES = 'allColumnsAliases'; + const SELECTED_FIELDS = 'selectedFields'; const SELECTED_FILTERS = 'selectedFilters'; const ACTIVE_FILTERS = 'activeFilters'; @@ -130,9 +133,6 @@ class FilterWidget extends Widget // $this->_setSessionFilterData(); - // - $this->_saveFilter(); - // $this->FiltersModel->resetQuery(); @@ -142,8 +142,8 @@ class FilterWidget extends Widget // $this->listFields = $this->FiltersModel->getExecutedQueryListFields(); - // + $selectedFields = array(); $filterSessionArray = $this->session->userdata(self::SESSION_NAME); if (isset($filterSessionArray[self::SELECTED_FIELDS])) { @@ -154,7 +154,6 @@ class FilterWidget extends Widget if (count($selectedFields) == 0) { $filterSessionArray[self::SELECTED_FIELDS] = $this->listFields; - $this->session->set_userdata(self::SESSION_NAME, $filterSessionArray); } // @@ -163,21 +162,54 @@ class FilterWidget extends Widget show_error('Parameter columnsAliases does not have a number of items equal to those returned by the query'); } + $filterSessionArray[self::COLUMNS_ALIASES] = $this->_getColumnAliasesFromPost(); + $filterSessionArray[self::CHECKBOXES] = $this->checkboxes; + + if ($this->app != null) + { + $filterSessionArray[self::APP_PARAMETER] = $this->app; + } + + if ($this->datasetName != null) + { + $filterSessionArray[self::DATASET_NAME_PARAMETER] = $this->datasetName; + } + + $filterSessionArray[self::ALL_SELECTED_FIELDS] = $this->listFields; + $filterSessionArray[self::ALL_COLUMNS_ALIASES] = $this->columnsAliases; + + /* ------------------------------------------------------------ */ + + $tmpDataset = null; + if (hasData($this->dataset)) + { + $tmpDataset = array(); + + for ($resultsCounter = 0; $resultsCounter < count($this->dataset->retval); $resultsCounter++) + { + $result = $this->dataset->retval[$resultsCounter]; + + $class = $this->_markRow($result); + $formattedResult = $this->_formatRaw($result); + $formattedResult->FILTER_CLASS_MARK_ROW = $class; + $tmpDataset[] = $formattedResult; + } + } + $filterSessionArray[self::DATASET_PARAMETER] = $tmpDataset; + + /* ------------------------------------------------------------ */ + // $this->metaData = $this->FiltersModel->getExecutedQueryMetaData(); + $filterSessionArray[self::METADATA_PARAMETER] = $this->metaData; + + $this->session->set_userdata(self::SESSION_NAME, $filterSessionArray); + // $this->loadViewFilters(); } - /** - * - */ - public static function getSelectedFields() - { - return self::_getFromSession(self::SELECTED_FIELDS); - } - /** * */ @@ -186,14 +218,6 @@ class FilterWidget extends Widget return self::_getFromSession(self::SELECTED_FILTERS); } - /** - * - */ - public static function getAdditionalColumns() - { - return self::_getFromSession(self::ADDITIONAL_COLUMNS); - } - /** * */ @@ -209,12 +233,7 @@ class FilterWidget extends Widget { if (self::$FilterWidgetInstance->hideHeader != true) { - self::_loadView( - self::WIDGET_URL_SELECT_FIELDS, - array( - self::LIST_FIELDS_PARAMETER => self::$FilterWidgetInstance->listFields - ) - ); + self::_loadView(self::WIDGET_URL_SELECT_FIELDS); } } @@ -225,13 +244,7 @@ class FilterWidget extends Widget { if (self::$FilterWidgetInstance->hideHeader != true) { - self::_loadView( - self::WIDGET_URL_SELECT_FILTERS, - array( - self::LIST_FIELDS_PARAMETER => self::$FilterWidgetInstance->listFields, - self::METADATA_PARAMETER => self::$FilterWidgetInstance->metaData - ) - ); + self::_loadView(self::WIDGET_URL_SELECT_FILTERS); } } @@ -251,147 +264,32 @@ class FilterWidget extends Widget */ public static function loadViewTableDataset() { - self::_loadView( - self::WIDGET_URL_TABLE_DATASET, - array( - self::LIST_FIELDS_PARAMETER => self::$FilterWidgetInstance->listFields, - self::DATASET_PARAMETER => self::$FilterWidgetInstance->dataset - ) - ); + self::_loadView(self::WIDGET_URL_TABLE_DATASET); } /** * */ - public static function getFilterMetaData($filter, $metaData) + private function _formatRaw($datasetRaw) { - $md = null; + $tmpDatasetRaw = clone $datasetRaw; - for ($metaDataCounter = 0; $metaDataCounter < count($metaData); $metaDataCounter++) + foreach ($tmpDatasetRaw as $columnName => $columnValue) { - if ($metaData[$metaDataCounter]->name == $filter) + if (is_bool($columnValue)) { - $md = $metaData[$metaDataCounter]; - break; + $tmpDatasetRaw->{$columnValue} = $columnValue === true ? 'true' : 'false'; + } + elseif (DateTime::createFromFormat('Y-m-d G:i:s', $columnValue) !== false) + { + $tmpDatasetRaw->{$columnValue} = date(self::DEFAULT_DATE_FORMAT, strtotime($columnValue)); } } - return $md; - } - - /** - * - */ - public static function renderFilterType($filterMetaData) - { - $html = ''; - $activeFilterValue = self::_getActiveFilterValue($filterMetaData->name); - $activeFilterOperationValue = self::_getActiveFilterOperationValue($filterMetaData->name); - $activeFilterOptionValue = self::_getActiveFilterOptionValue($filterMetaData->name); - - if ($filterMetaData->type == 'int4') + if ($this->formatRaw != null) { - $html = ' - - - - - - - '; - } - elseif ($filterMetaData->type == 'varchar') - { - $html = ' - - - - - - - '; - } - elseif ($filterMetaData->type == 'bool') - { - $html = ' - - - - - - - '; - } - elseif ($filterMetaData->type == 'timestamp') - { - $classOperation = 'select-filter-operation-value'; - $classOption = 'select-filter-option'; - if ($activeFilterOperationValue == self::OP_SET) - { - $classOperation .= ' hidden-control'; - $classOption .= ' hidden-control'; - } - - $html = ' - - - - - - - - '; - } - - return sprintf($html, $filterMetaData->name.'-operation', $filterMetaData->name, $activeFilterValue, $filterMetaData->name.'-option'); - } - - /** - * - */ - public static function formatRaw($fieldName, $fieldValue, $datasetRaw) - { - $tmpDatasetRaw = null; - - if (is_object($datasetRaw)) - { - $tmpDatasetRaw = clone $datasetRaw; - $tmpMetaData = self::getFilterMetaData($fieldName, self::$FilterWidgetInstance->metaData); - - if (is_bool($fieldValue)) - { - $tmpDatasetRaw->{$fieldName} = $fieldValue === true ? 'true' : 'false'; - } - elseif ($tmpMetaData != null && $tmpMetaData->type == 'timestamp') - { - $tmpDatasetRaw->{$fieldName} = date(self::DEFAULT_DATE_FORMAT, strtotime($fieldValue)); - } - - $formatRaw = self::$FilterWidgetInstance->getFormatRaw(); - - if ($formatRaw != null) - { - $tmpDatasetRaw = $formatRaw($fieldName, $fieldValue, $tmpDatasetRaw); - } + $formatRaw = $this->formatRaw; + $tmpDatasetRaw = $formatRaw($tmpDatasetRaw); } return $tmpDatasetRaw; @@ -400,28 +298,18 @@ class FilterWidget extends Widget /** * */ - public static function markRow($datasetRaw) + private function _markRow($datasetRaw) { - $class = ''; - if (is_object($datasetRaw)) { - $markRow = self::$FilterWidgetInstance->getMarkRow(); - if ($markRow != null) + if ($this->markRow != null) { + $markRow = $this->markRow; $class = $markRow($datasetRaw); } } - return $class; - } - - /** - * - */ - public static function getCheckboxes() - { - return self::$FilterWidgetInstance->_getCheckboxes(); + return $class == null ? '' : $class; } /** @@ -444,37 +332,7 @@ class FilterWidget extends Widget protected function loadViewFilters() { // Loads views - $this->view(self::WIDGET_URL_FILTER, - array( - self::DATASET_PARAMETER => $this->dataset, - self::METADATA_PARAMETER => $this->metaData, - self::LIST_FIELDS_PARAMETER => $this->listFields - ) - ); - } - - /** - * - */ - protected function getFormatRaw() - { - return $this->formatRaw; - } - - /** - * - */ - protected function getMarkRow() - { - return $this->markRow; - } - - /** - * - */ - protected function _getCheckboxes() - { - return $this->checkboxes; + $this->view(self::WIDGET_URL_FILTER); } //------------------------------------------------------------------------------------------------------------------ @@ -614,6 +472,16 @@ class FilterWidget extends Widget $filterSessionArray[self::FILTER_NAME] = null; } + if (!isset($filterSessionArray[self::APP_PARAMETER])) + { + $filterSessionArray[self::APP_PARAMETER] = null; + } + + if (!isset($filterSessionArray[self::DATASET_NAME_PARAMETER])) + { + $filterSessionArray[self::DATASET_NAME_PARAMETER] = null; + } + $this->session->set_userdata(self::SESSION_NAME, $filterSessionArray); } @@ -700,9 +568,7 @@ class FilterWidget extends Widget $this->markRow = $args[self::MARK_ROW]; } - if (isset($args[self::CHECKBOXES]) - && is_array($args[self::CHECKBOXES]) - && count($args[self::CHECKBOXES]) > 0) + if (isset($args[self::CHECKBOXES])) { $this->checkboxes = $args[self::CHECKBOXES]; } @@ -825,6 +691,7 @@ class FilterWidget extends Widget } $this->filterName = $filterName; + $this->app = $filter->retval[0]->app; $filterSessionArray = array( self::SELECTED_FIELDS => $selectedFields, @@ -832,7 +699,9 @@ class FilterWidget extends Widget self::ACTIVE_FILTERS => $activeFilters, self::ACTIVE_FILTERS_OPERATION => $activeFiltersOperation, self::ACTIVE_FILTERS_OPTION => $activeFiltersOption, - self::FILTER_NAME => $filterName + self::FILTER_NAME => $filterName, + self::APP_PARAMETER => $filter->retval[0]->app, + self::DATASET_NAME_PARAMETER => $filter->retval[0]->dataset_name ); $this->session->set_userdata(self::SESSION_NAME, $filterSessionArray); @@ -845,7 +714,9 @@ class FilterWidget extends Widget self::ACTIVE_FILTERS => array(), self::ACTIVE_FILTERS_OPERATION => array(), self::ACTIVE_FILTERS_OPTION => array(), - self::FILTER_NAME => null + self::FILTER_NAME => null, + self::APP_PARAMETER => null, + self::DATASET_NAME_PARAMETER => null ); $this->session->set_userdata(self::SESSION_NAME, $filterSessionArray); @@ -963,23 +834,70 @@ class FilterWidget extends Widget $selectedFields = $filterSessionArray[self::SELECTED_FIELDS]; } - if (is_array($_POST)) - { - if (array_key_exists(self::CMD_ADD_FIELD, $_POST) && trim($_POST[self::CMD_ADD_FIELD]) != '') - { - if (!in_array($_POST[self::CMD_ADD_FIELD], $selectedFields)) - { - $selectedFields[] = $_POST[self::CMD_ADD_FIELD]; - } - } + return $selectedFields; + } - if (array_key_exists(self::CMD_REMOVE_FIELD, $_POST) && trim($_POST[self::CMD_REMOVE_FIELD]) != '') + /** + * + */ + private function _getAppFromPost() + { + $app = $this->app; + + $filterSessionArray = $this->session->userdata(self::SESSION_NAME); + if (isset($filterSessionArray[self::APP_PARAMETER])) + { + $app = $filterSessionArray[self::APP_PARAMETER]; + } + + return $app; + } + + /** + * + */ + private function _getDatasetFromPost() + { + $datasetName = $this->datasetName; + + $filterSessionArray = $this->session->userdata(self::SESSION_NAME); + if (isset($filterSessionArray[self::DATASET_NAME_PARAMETER])) + { + $datasetName = $filterSessionArray[self::DATASET_NAME_PARAMETER]; + } + + return $datasetName; + } + + /** + * + */ + private function _getColumnAliasesFromPost() + { + $columnsAliases = $this->columnsAliases; + $selectedFields = array(); + + $filterSessionArray = $this->session->userdata(self::SESSION_NAME); + + if (isset($filterSessionArray[self::SELECTED_FIELDS])) + { + $selectedFields = $filterSessionArray[self::SELECTED_FIELDS]; + } + + if (isset($this->listFields) && count($selectedFields) > 0 && is_array($this->columnsAliases) && count($this->columnsAliases) > 0) + { + $columnsAliases = array(); + + for ($i = 0; $i < count($selectedFields); $i++) { - $selectedFields = $this->_removeElementFromArray($selectedFields, $_POST[self::CMD_REMOVE_FIELD]); + if (($pos = array_search($selectedFields[$i], $this->listFields)) !== false) + { + $columnsAliases[] = $this->columnsAliases[$pos]; + } } } - return $selectedFields; + return $columnsAliases; } /** @@ -996,22 +914,6 @@ class FilterWidget extends Widget $selectedFilters = $filterSessionArray[self::SELECTED_FILTERS]; } - if (is_array($_POST)) - { - if (array_key_exists(self::CMD_ADD_FILTER, $_POST) && trim($_POST[self::CMD_ADD_FILTER]) != '') - { - if (!in_array($_POST[self::CMD_ADD_FILTER], $selectedFilters)) - { - $selectedFilters[] = $_POST[self::CMD_ADD_FILTER]; - } - } - - if (array_key_exists(self::CMD_REMOVE_FILTER, $_POST) && trim($_POST[self::CMD_REMOVE_FILTER]) != '') - { - $selectedFilters = $this->_removeElementFromArray($selectedFilters, $_POST[self::CMD_REMOVE_FILTER]); - } - } - return $selectedFilters; } @@ -1096,7 +998,9 @@ class FilterWidget extends Widget self::SELECTED_FIELDS => $this->_getSelectedFieldsFromPost(), self::SELECTED_FILTERS => $this->_getSelectedFiltersFromPost(), self::ADDITIONAL_COLUMNS => $this->additionalColumns, - self::COLUMNS_ALIASES => $this->columnsAliases + self::COLUMNS_ALIASES => $this->_getColumnAliasesFromPost(), + self::APP_PARAMETER => $this->_getAppFromPost(), + self::DATASET_NAME_PARAMETER => $this->_getDatasetFromPost() ); $filterSessionArray[self::ACTIVE_FILTERS] = array(); @@ -1222,6 +1126,9 @@ class FilterWidget extends Widget case self::OP_NOT_SET: $condition = ' IS NULL'; break; + default: + $condition = ' IS NOT NULL'; + break; } $where .= $condition; @@ -1236,23 +1143,4 @@ class FilterWidget extends Widget return $query; } - - /** - * - */ - private function _removeElementFromArray($array, $element) - { - $_removeElementFromArray = array(); - - for ($arrayCounter = 0; $arrayCounter < count($array); $arrayCounter++) - { - $arrayElement = $array[$arrayCounter]; - if ($arrayElement != $element) - { - $_removeElementFromArray[] = $arrayElement; - } - } - - return $_removeElementFromArray; - } } diff --git a/application/widgets/NavigationMenuWidget.php b/application/widgets/NavigationMenuWidget.php index dbef3b84b..b23054706 100644 --- a/application/widgets/NavigationMenuWidget.php +++ b/application/widgets/NavigationMenuWidget.php @@ -41,7 +41,7 @@ class NavigationMenuWidget extends Widget echo '
  • '; - if (isset($item['subscriptLink']) && isset($item['subscriptDescription'])) + if (isset($item['subscriptLinkId']) && isset($item['subscriptDescription'])) { echo ''; } @@ -62,12 +62,12 @@ class NavigationMenuWidget extends Widget echo ''; - if (isset($item['subscriptLink']) && isset($item['subscriptDescription'])) + if (isset($item['subscriptLinkId']) && isset($item['subscriptDescription'])) { - echo ''.$item['subscriptDescription'].''; + echo ''.$item['subscriptDescription'].''; } - if (isset($item['subscriptLink']) && isset($item['subscriptDescription'])) + if (isset($item['subscriptLinkId']) && isset($item['subscriptDescription'])) { echo ''; } diff --git a/cis/ampel.php b/cis/ampel.php index 3036bcb2b..d8429335f 100644 --- a/cis/ampel.php +++ b/cis/ampel.php @@ -28,43 +28,62 @@ if(is_user_logged_in()) $ampel = new ampel(); $ampel->loadUserAmpel($user); $rot=0; - $gelb=0; + $gelb = 0; + $gruen = 0; $verpflichtend = false; + $cnt_verpflichtend = 0; + $cnt_abgelaufen = 0; + $cnt_notConf_notOverdue = 0; //counts mandatory, not confirmed && not overdued ampeln (for popup) + $datum = new datum(); + $now = $datum->mktime_fromdate(date('Y-m-d')); foreach($ampel->result as $row) - { - $ts_deadline = $datum->mktime_fromdate($row->deadline); - $vlz = "-".$row->vorlaufzeit." day"; - $ts_vorlaufzeit = strtotime($vlz, $ts_deadline); - $ts_now = $datum->mktime_fromdate(date('Y-m-d')); - if($ts_deadline < $ts_now) - { - $rot++; - if ($row->verpflichtend == 't') - $verpflichtend = true; - } - else - { - if($ts_vorlaufzeit<=$ts_now && $ts_now<=$ts_deadline) - { - $gelb++; - if ($row->verpflichtend == 't') - $verpflichtend = true; - } - } - } - if($rot==0 && $gelb==0) - echo ''.$p->t("tools/ampelsystem").'  |  '; + { + $deadline =$datum->mktime_fromdate($row->deadline); + $vorlaufzeit = $row->vorlaufzeit; + $verfallszeit = $row->verfallszeit; + $bestaetigt = $ampel->isBestaetigt($user, $row->ampel_id); + $verpflichtend = $row->verpflichtend; + $abgelaufen = false; - if($rot>0 || $gelb>0) - { - // Wenn es eine verpflichtende Ampel gibt, das Pupup im CIS anzeigen - if ($verpflichtend == true) - { + $datum_liegt_vor_vorlaufzeit = false; + $datum_liegt_nach_verfallszeit = false; + + if (!is_null($vorlaufzeit)) + $datum_liegt_vor_vorlaufzeit = $now < strtotime('-' . $vorlaufzeit . ' day', $deadline); + + if (!is_null($verfallszeit)) + $datum_liegt_nach_verfallszeit = $now > strtotime('+' . $verfallszeit . ' day', $deadline); + + //count mandatory + if($verpflichtend == 't') + $cnt_verpflichtend++; + + //count overdue + if ($datum_liegt_nach_verfallszeit) + $cnt_abgelaufen++; + + //set status + if ($bestaetigt) + $gruen++; + else if ($now >= $deadline && !$datum_liegt_nach_verfallszeit && !$bestaetigt) + $rot++; + else if (!$datum_liegt_nach_verfallszeit && !$datum_liegt_vor_vorlaufzeit) + $gelb++; + + //count mandatory ampeln that are not confirmed and not overdue (for popup) + if ($verpflichtend == 't' && !$bestaetigt && !$datum_liegt_nach_verfallszeit && !$datum_liegt_vor_vorlaufzeit) + $cnt_notConf_notOverdue++; + } + + + // Wenn es eine verpflichtende Ampel gibt, das Pupup im CIS anzeigen + if ($cnt_notConf_notOverdue > 0) + { echo ' '; @@ -101,15 +120,17 @@ if(is_user_logged_in()) } '; } - if($rot>0) + + //show & color header ampel-link + if($rot > 0) echo ''.$p->t("tools/ampelsystem").'  |  '; - elseif($gelb>0) + elseif($gelb > 0) echo ''.$p->t("tools/ampelsystem").'  |  '; - } -} + elseif($rot==0 || $rot <= $cnt_abgelaufen && $gelb==0) + echo ''.$p->t("tools/ampelsystem").'  |  '; + } else { - echo ""; - //echo microtime(); + echo ""; } ?> \ No newline at end of file diff --git a/cis/private/lehre/fotoliste.pdf.php b/cis/private/lehre/fotoliste.pdf.php index 3390b27d1..ead24a33f 100644 --- a/cis/private/lehre/fotoliste.pdf.php +++ b/cis/private/lehre/fotoliste.pdf.php @@ -237,7 +237,8 @@ if ($result = $db->db_query($qry)) { $row->foto_sperre = 'f'; //create foto (if not locked by student OR if fotolist is created by admin or assistenz) - if ($row->foto_sperre == 'f' && $row->foto != '') { + $foto_url = ''; + if ($row->foto_sperre == 'f' && $row->foto != '') { $foto_src = $row->foto; $foto_url = sys_get_temp_dir() . '/foto' . trim($row->matrikelnr) . '.jpg'; $foto_url_arr[] = $foto_url; @@ -254,14 +255,14 @@ if ($result = $db->db_query($qry)) { //add foto to document $doc->addImage($foto_url, trim($row->matrikelnr) . '.jpg', 'image/jpg'); } - elseif ($row->foto == '') - { - $foto_url = ''; - } - else - { - $foto_url = ''; - } +// elseif ($row->foto == '') +// { +// $foto_url = ''; +// } +// else +// { +// $foto_url = ''; +// } //create studiengruppe $student_studiengruppe = strtoupper($row->typ.$row->kurzbz.'-'.$row->semester); diff --git a/cis/private/tools/ampelverwaltung.php b/cis/private/tools/ampelverwaltung.php index ad76dd7cf..98bc9d812 100644 --- a/cis/private/tools/ampelverwaltung.php +++ b/cis/private/tools/ampelverwaltung.php @@ -16,6 +16,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * * Authors: Andreas Oesterreicher + * Cristina Hainberger */ require_once('../../../config/cis.config.inc.php'); require_once('../../../include/functions.inc.php'); @@ -26,19 +27,23 @@ require_once('../../../include/benutzerfunktion.class.php'); require_once('../../../include/organisationseinheit.class.php'); require_once('../../../include/benutzerberechtigung.class.php'); require_once('../../../include/studiensemester.class.php'); +require_once('../../../include/person.class.php'); $user = get_uid(); $sprache = getSprache(); $p = new phrasen($sprache); -$show = (isset($_GET['show'])?$_GET['show']:'aktuell'); +$person = new person(); +$person->getPersonFromBenutzer($user); + +$show = (isset($_POST['show']) ? $_POST['show'] : 'aktuell'); //show: alle / aktuell +$is_popup = (isset($_GET['verpflichtend']) && $_GET['verpflichtend'] == true) ? true : false; //Leiter OEs holen $benutzerfunktion = new benutzerfunktion(); $benutzerfunktion->getBenutzerFunktionen('Leitung', '', '', $user); $organisationseinheit = new organisationseinheit(); - $oes=array(); foreach ($benutzerfunktion->result as $row) { @@ -54,225 +59,431 @@ if($rechte->isBerechtigt('basis/ampeluebersicht')) $oes_berechtigung = $rechte->getOEkurzbz('basis/ampeluebersicht'); $oes = array_merge($oes_berechtigung, $oes); } - array_unique($oes); +//actual studiensemester $studiensemester = new studiensemester(); $ss_akt = $studiensemester->getakt(); -echo ' - - - - - - - - - - - - - - ',$p->t('tools/ampelsystem'),' - - - - -

    ',$p->t('tools/ampelsystem'),'

    '; - -if(count($oes)!=0) - echo '

    '.($p->t('tools/uebersichtLeitung')).'

    '; - -echo '

    '.$p->t('tools/dasAmpelsystemIstEinErinnerungsystem').'

    '; - -if ($show == 'aktuell') - echo '

    '.$p->t('tools/ampelAlleAnzeigen').'

    '; -else - echo '

    '.$p->t('tools/ampelNurAktuellesStudiensemester').'

    '; - -$datum_obj = new datum(); +//semesterstart +$studiensemester = new studiensemester($ss_akt); +$semester_start = $studiensemester->start; $type = isset($_GET['type'])?$_GET['type']:''; $ampel_id = isset($_GET['ampel_id'])?$_GET['ampel_id']:''; -$message=''; + +//ampel confirmation & relaod of header link if($type=='bestaetigen' && is_numeric($ampel_id)) { $ampel = new ampel(); + $message=''; if($ampel->load($ampel_id)) { - if($ampel->isZugeteilt($user, $ampel->benutzer_select)) + if($ampel->isZugeteilt($user, $ampel->benutzer_select)) { if(!$ampel->isBestaetigt($user, $ampel_id)) { - if($ampel->bestaetigen($user, $ampel_id)) + if($ampel->bestaetigen($user, $ampel_id)) //confirm ampel { - //$message = 'OK'; - //Ampel Ansicht im Seiten-Header aktualisieren - $message=''; + echo ''; + header('Refresh:0'); + exit; } else $message = ''.$ampel->errormsg.''; } - else - { - $message = ''.$p->t('tools/ampelBereitsBestaetigt').''; - } } else $message = ''.$p->t('tools/nichtZugeteilt').''; } else $message = ''.$p->t('tools/ampelNichtGefunden').''; + + if ($message != '') + echo ''; } -echo $message; -$ampel = new ampel(); -$ampel->loadUserAmpel($user, false, true); +//get all user ampeln +list( + $user_ampel_arr, + $cnt_ueberfaellig) = //counts overdue ampeln (not expired) + getUserAmpelData($user); -echo ' - - - - - - - - - - -'; -$beginn = new studiensemester($ss_akt); +//sort ampeln +$user_ampel_arr = sortUserAmpelData($user_ampel_arr); -foreach($ampel->result as $row) +//filter ampeln for popup (if at least one mandatory, which is neither expired nor before vorlaufzeit) +if ($is_popup) { - //Nur Ampeln laden, die im aktuellen Studiensemester liegen - if ($show == 'aktuell' && $row->deadline>=$beginn->start) + list( + $user_ampel_arr, + $cnt_ueberfaellig_und_verpflichtend) = //counts mandatory, overdue (not expired), unconfirmed, not before vorlaufzeit + getPopupUserAmpelData($user_ampel_arr); +} + +//filter ampeln of actual term (if radiobutton is set to aktuell) +if ($show == 'aktuell') + $user_ampel_arr = getActualUserAmpelData($user_ampel_arr, $semester_start); + + +//***************************************** FUNCTIONS for Ampeln +function getUserAmpelData($user) +{ + $cnt_ueberfaellig = 0; + + $ampel = new ampel(); + $ampel->loadUserAmpel($user, true); + $user_ampel_arr = array(); + + $datum = new datum(); + $now = $datum->mktime_fromdate(date('Y-m-d')); + + foreach($ampel->result as $row) { - $ts_deadline = $datum_obj->mktime_fromdate($row->deadline); - $vlz = "-".$row->vorlaufzeit." day"; - $ts_vorlaufzeit = strtotime($vlz, $ts_deadline); - $ts_now = $datum_obj->mktime_fromdate(date('Y-m-d')); + $deadline = $datum->mktime_fromdate($row->deadline); + $vorlaufzeit = $row->vorlaufzeit; + $verfallszeit = $row->verfallszeit; + $bestaetigt = $ampel->isBestaetigt($user, $row->ampel_id); + $verpflichtend = $row->verpflichtend; // 't'/'f' + + $datum_liegt_vor_vorlaufzeit = false; + $datum_liegt_nach_verfallszeit = false; + + if (!is_null($vorlaufzeit)) + $datum_liegt_vor_vorlaufzeit = $now < strtotime('-' . $vorlaufzeit . ' day', $deadline); + + if (!is_null($verfallszeit)) + $datum_liegt_nach_verfallszeit = $now > strtotime('+' . $verfallszeit . ' day', $deadline); - if($ts_vorlaufzeit<=$ts_now && $ts_now<=$ts_deadline) - $ampelstatus='gelb'; - elseif($ts_now>$ts_deadline) - $ampelstatus='rot'; - elseif($ts_now<$ts_deadline && $ts_vorlaufzeit>=$ts_now) - $ampelstatus='gruen'; + //default + $show_ampel = true; //true while actual date is not before vorlaufzeit + $abgelaufen = false; //false while actual date is not after verfallszeit + $active = true; //true while not confirmed or expired + $status = 'gelb'; //yellow while not overdue (red) or confirmed (green) + $status_ampel = ''; //ampel image + + if ($bestaetigt) + $status = 'gruen'; - if($bestaetigt = $ampel->isBestaetigt($user,$row->ampel_id)) - $ampelstatus=''; - echo ''; - echo ''; - - echo ''; - $beschreibung = $row->beschreibung[$sprache]; - if($beschreibung=='' && isset($row->beschreibung[DEFAULT_LANGUAGE])) - $beschreibung = $row->beschreibung[DEFAULT_LANGUAGE]; - echo ''; - echo ''; - - // echo ""; - // echo ""; - // echo ""; - echo ''; + $user_ampel_arr[] = array( + 'ampel_id' => $row->ampel_id, + 'kurzbz' => $row->kurzbz, + 'show_ampel' => $show_ampel, + 'status' => $status, + 'status_ampel' => $status_ampel, + 'verpflichtend' => $verpflichtend, + 'bestaetigt' => $bestaetigt, + 'deadline' => $row->deadline, + 'vorlaufzeit' => $row->vorlaufzeit, + 'verfallszeit' => $row->verfallszeit, + 'beschreibung' => $row->beschreibung, + 'abgelaufen' => $abgelaufen, + 'active' => $active); } - elseif ($show == 'alle') - { - $ts_deadline = $datum_obj->mktime_fromdate($row->deadline); - $vlz = "-".$row->vorlaufzeit." day"; - $ts_vorlaufzeit = strtotime($vlz, $ts_deadline); - $ts_now = $datum_obj->mktime_fromdate(date('Y-m-d')); - if($ts_vorlaufzeit<=$ts_now && $ts_now<=$ts_deadline) - $ampelstatus='gelb'; - elseif($ts_now>$ts_deadline) - $ampelstatus='rot'; - elseif($ts_now<$ts_deadline && $ts_vorlaufzeit>=$ts_now) - $ampelstatus='gruen'; - - if($bestaetigt = $ampel->isBestaetigt($user,$row->ampel_id)) - $ampelstatus=''; - - echo ''; - echo ''; - - echo ''; - $beschreibung = $row->beschreibung[$sprache]; - if($beschreibung=='' && isset($row->beschreibung[DEFAULT_LANGUAGE])) - $beschreibung = $row->beschreibung[DEFAULT_LANGUAGE]; - echo ''; - echo ''; - - // echo ""; - // echo ""; - // echo ""; - echo ''; - } + return array($user_ampel_arr, $cnt_ueberfaellig); } -echo '
    '.$p->t('tools/ampelBeschreibung').''.$p->t('tools/ampelDeadline').'
    '; - switch($ampelstatus) + if ($datum_liegt_vor_vorlaufzeit) + $show_ampel = false; + + + if ($datum_liegt_nach_verfallszeit) + $abgelaufen = true; + + + if ($now >= $deadline && !$bestaetigt) + { + if (!$abgelaufen) + $cnt_ueberfaellig++; + $status = 'rot'; + } + + if ($bestaetigt || $abgelaufen) + $active = false; + + //assign png-image to ampelstatus + switch($status) { case 'rot': - $status= ''; + $status_ampel= ''; break; case 'gelb': - $status= ''; + $status_ampel= ''; break; case 'gruen': - $status= ''; + $status_ampel= ''; break; default: - $status= ''; + $status_ampel= ''; break; } - echo $status; - echo ''; - if(!$bestaetigt) - echo '
    '; - else - echo ''; - echo '
    verpflichtend=='t'?'style="background-color: #EF8A88"':'').'>'.$beschreibung.''.$datum_obj->formatDatum($row->deadline,'d.m.Y').'".date('d.m.Y',$ts_now)."".date('d.m.Y',$ts_vorlaufzeit)."".date('d.m.Y',$ts_deadline)."
    '; - switch($ampelstatus) - { - case 'rot': - $status= ''; - break; - case 'gelb': - $status= ''; - break; - case 'gruen': - $status= ''; - break; - default: - $status= ''; - break; - } - echo $status; - - echo ''; - if(!$bestaetigt) - echo '
    '; - else - echo ''; - echo '
    verpflichtend=='t'?'style="background-color: #EF8A88"':'').'>'.$beschreibung.''.$datum_obj->formatDatum($row->deadline,'d.m.Y').'".date('d.m.Y',$ts_now)."".date('d.m.Y',$ts_vorlaufzeit)."".date('d.m.Y',$ts_deadline)."
    '; +function sortUserAmpelData($user_ampel_arr) +{ + //first: sort deadline + foreach ($user_ampel_arr as $key => $val) + $deadline[$key] = $val['deadline']; + + array_multisort($deadline, SORT_DESC, $user_ampel_arr); + + //second: sort inactive after active + $active_ampel_arr = array(); + $inactive_ampel_arr = array(); + foreach ($user_ampel_arr as $user_ampel) + { + if ($user_ampel['active']) + $active_ampel_arr[] = $user_ampel; + else + $inactive_ampel_arr[] = $user_ampel; + } + return $user_ampel_arr = array_merge($active_ampel_arr, $inactive_ampel_arr); +} +function getPopupUserAmpelData($user_ampel_arr) +{ + $arr = array(); + $cnt_ueberfaellig_und_verpflichtend = 0; + foreach ($user_ampel_arr as $user_ampel) + { + if ($user_ampel['verpflichtend'] == 't' && !$user_ampel['bestaetigt'] && !$user_ampel['abgelaufen'] && $user_ampel['show_ampel']) + { + $arr[] = $user_ampel; + + if ($user_ampel['status'] == 'rot') + $cnt_ueberfaellig_und_verpflichtend++; + } + } + return array ($arr, $cnt_ueberfaellig_und_verpflichtend); +} +function getActualUserAmpelData($user_ampel_arr, $semester_start) +{ + $arr = array(); + foreach ($user_ampel_arr as $user_ampel) + { + if ($user_ampel['deadline'] >= $semester_start) + $arr[] = $user_ampel; + } + return $arr; +} + +?> + + + + + + + + + + + + + +<?php echo $p->t('tools/ampelsystem') ?> + + + + + + + + + + + ' . $p->t('tools/ampelsystem') . ''; + + //title in popup for mandatory ampeln + if ($is_popup) + echo '

    ' . $p->t('tools/ampelPopupTitel'). '


    '; + ?> + + +
    + + + +
    + t('tools/ampelAnzeigeFuer') ?>   + + +
    +



    + 1) + $ovdue_txt = 'ich habe ' . count($user_ampel_arr) . ' Nachrichten entdeckt, die verpflichtend zu bestätigen sind.'; + + if (count($user_ampel_arr) > 0) + { + echo ' +
    +
    + sancho_ampel_ueberfaellig +
    +
    +

    +
    +
    +



    '; + } + } +//***************************************** COLLAPSED PANELS WITH AMPELN + + $cnt = 1; //counter to set iterative id's + $cnt_inactive = 1; //counter to set only one heading line for inactive ampeln + + //fill panel with ampeln + foreach ($user_ampel_arr as $user_ampel) + { + //use only ampeln that are not overdue + if ($user_ampel['show_ampel'] == true) + { + //heading line for inactive ampeln + if ($user_ampel['active'] == false && $cnt_inactive == 1) + { + echo ' +
    +
    + +
    +
    '; + $cnt_inactive++; + } + ?> +
    +
    + +
    +
    +
    + +


    +
    + +
    +
    + + +
    +
    + +
    + + + + -echo ' -'; -?> \ No newline at end of file diff --git a/content/student/studentoverlay.js.php b/content/student/studentoverlay.js.php index b232cff18..47a799fc0 100644 --- a/content/student/studentoverlay.js.php +++ b/content/student/studentoverlay.js.php @@ -1155,6 +1155,7 @@ function StudentAuswahl() else { //STUDENT + document.getElementById('student-tab-mobilitaet').hidden=false; document.getElementById('student-tab-zeugnis').collapsed=false; document.getElementById('student-tab-betriebsmittel').collapsed=false; document.getElementById('student-tab-io').collapsed=false; diff --git a/include/ampel.class.php b/include/ampel.class.php index 7473cca87..fba67585e 100644 --- a/include/ampel.class.php +++ b/include/ampel.class.php @@ -221,27 +221,23 @@ class ampel extends basis_db /** * Laedt alle aktuellen Ampeln eines Users * @param string $user User, dessen Ampeln geladen werden sollen - * @param boolean $zukuenftige_anzeigen Default false - * wenn true, werden alle zukuenftigen Ampeln geladen - * wenn false, werden nur die Ampeln geladen die innerhalb der vorlaufzeit liegen * @param boolean $bestaetigt Default false * wenn true, werden alle Ampeln geladen * wenn false, werden nur die Ampeln geladen die noch NICHT bestaetigt wurden */ - public function loadUserAmpel($user, $zukuenftige_anzeigen=false, $bestaetigt=false) + public function loadUserAmpel($user, $bestaetigt=false) { $sprache = new sprache(); $beschreibung = $sprache->getSprachQuery('beschreibung'); - $buttontext = $sprache->getSprachQuery('buttontext'); + $buttontext = $sprache->getSprachQuery('buttontext'); - $qry = "SELECT *,".$beschreibung.", ".$buttontext." FROM public.tbl_ampel WHERE deadline+verfallszeit>now()"; + //all ampeln except where now is before the vorlaufzeit + $qry = "SELECT *,".$beschreibung.", ".$buttontext." FROM public.tbl_ampel"; - if(!$zukuenftige_anzeigen) - $qry.=" AND deadline-vorlaufzeitkeine ZGV vorhanden"); - } - }, - error: function(jqXHR, textStatus, errorThrown) { - alert(textStatus + " - " + errorThrown + " - " + jqXHR.responseText); - } - }); - }); +// ----------------------------------------------------------------------------------------------------------------- +// ajax calls + +function saveFormalGeprueft(personid, akteid, checked) +{ + $.ajax({ + type: "POST", + dataType: "json", + url: "../saveFormalGeprueft/" + personid, + data: {"akte_id": akteid, "formal_geprueft": checked}, + success: function (data, textStatus, jqXHR) + { + if (data === null) + { + $("#formalgeprueftam_" + akteid).text(""); + } + else + { + fgdatum = $.datepicker.parseDate("yy-mm-dd", data); + gerfgdatum = $.datepicker.formatDate("dd.mm.yy", fgdatum); + $("#formalgeprueftam_" + akteid).text(gerfgdatum); + } + //refresh doctable tablesorter, formal geprueft changed! + $("#doctable").trigger("update"); + refreshLog(); + }, + error: function (jqXHR, textStatus, errorThrown) + { + alert(textStatus + " - " + errorThrown + " - " + jqXHR.responseText); } - } -); + }); +} + +function zgvUebernehmen(personid, prestudentid, btn) +{ + $.ajax({ + type: "POST", + dataType: "json", + url: "../getLastPrestudentWithZgvJson/" + personid, + success: function (data, textStatus, jqXHR) + { + if (data !== null) + { + var zgvcode = data.zgv_code !== null ? data.zgv_code : "null"; + var zgvort = data.zgvort !== null ? data.zgvort : ""; + var zgvdatum = data.zgvdatum; + var gerzgvdatum = ""; + if (zgvdatum !== null) + { + zgvdatum = $.datepicker.parseDate("yy-mm-dd", data.zgvdatum); + gerzgvdatum = $.datepicker.formatDate("dd.mm.yy", zgvdatum); + } + var zgvnation = data.zgvnation !== null ? data.zgvnation : "null"; + $("#zgv_" + prestudentid).val(zgvcode); + $("#zgvort_" + prestudentid).val(zgvort); + $("#zgvdatum_" + prestudentid).val(gerzgvdatum); + $("#zgvnation_" + prestudentid).val(zgvnation); + } + else + { + btn.after("  keine ZGV vorhanden"); + } + }, + error: function (jqXHR, textStatus, errorThrown) + { + alert(textStatus + " - " + errorThrown + " - " + jqXHR.responseText); + } + }); +} + +function saveZgv(data) +{ + var prestudentid = data[0].value; + $("#zgvSpeichernNotice").remove(); + $.ajax({ + type: "POST", + dataType: "json", + data: data, + url: "../saveZgvPruefung/" + prestudentid, + success: function (data, textStatus, jqXHR) + { + if (data === prestudentid) + { + refreshLog(); + $("#zgvSpeichern_" + prestudentid).before("ZGV erfolgreich gespeichert!  "); + } + else + { + $("#zgvSpeichern_" + prestudentid).before("Fehler beim Speichern der ZGV!  "); + } + }, + error: function (jqXHR, textStatus, errorThrown) + { + alert(textStatus + " - " + errorThrown + " - " + jqXHR.responseText); + } + }); +} + +function saveNotiz(personid, data) +{ + $.ajax({ + type: "POST", + dataType: "json", + data: data, + url: "../saveNotiz/" + personid, + success: function (data, textStatus, jqXHR) + { + refreshNotizen(); + refreshLog(); + }, + error: function (jqXHR, textStatus, errorThrown) + { + alert(textStatus + " - " + errorThrown + " - " + jqXHR.responseText); + } + }); +} + +// ----------------------------------------------------------------------------------------------------------------- +// methods executed after ajax (refreshers) + +function refreshLog() +{ + var personid = $("#hiddenpersonid").val(); + $("#logs").load('../reloadLogs/' + personid, + function () + { + //readd tablesorter + formatLogTable() + } + ); +} + +function formatLogTable() +{ + addTablesorter("logtable", [[0, 1]], ["filter"], 2); + tablesortAddPager("logtable", "logpager", 23); + $("#logtable").addClass("table-condensed"); +} + +function refreshNotizen() +{ + $("#notizform").find("input[type=text], textarea").val(""); + var personid = $("#hiddenpersonid").val(); + $("#notizen").load('../reloadNotizen/' + personid, + function () + { + //readd tablesorter + formatNotizTable() + } + ); +} + +function formatNotizTable() +{ + addTablesorter("notiztable", [[0, 1]], ["filter"], 2); + tablesortAddPager("notiztable", "notizpager", 10); + $("#notiztable").addClass("table-condensed"); +} diff --git a/include/js/infocenter/infocenterPersonDataset.js b/include/js/infocenter/infocenterPersonDataset.js index f4d80a370..a6b00dde5 100644 --- a/include/js/infocenter/infocenterPersonDataset.js +++ b/include/js/infocenter/infocenterPersonDataset.js @@ -11,29 +11,17 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . - */ -/** - * javascript file for infocenter overview page - */ -$(document).ready( - function() - { - //bootstrap table - $("#tableDataset").addClass('table table-bordered table-responsive'); +*/ - // Checks if the table contains data (rows) - if ($('#tableDataset').find('tbody:empty').length == 0 - && $('#tableDataset').find('tr:empty').length == 0) - { - $("#tableDataset").tablesorter( - { - widgets: ["zebra", "filter"] - }); - } - appendTableActionsHtml(); - setTableActions(); - } -); +/** + * Javascript file for infocenter overview page + */ +$(document).ready(function() { + + appendTableActionsHtml(); + // setTableActions(); + +}); /** * adds person table additional actions html (above and beneath it) @@ -44,7 +32,7 @@ function appendTableActionsHtml() var url = currurl.replace(/infocenter\/InfoCenter(.*)/, "Messages/write"); var formHtml = '
    '; - $("#filterForm").before(formHtml); + $("#datasetActionsTop").before(formHtml); var selectAllHtml = '' + @@ -56,16 +44,36 @@ function appendTableActionsHtml() '' + ' Nachricht senden'; - var personcount = $("#tableDataset tbody tr").length; - var persontext = personcount === 1 ? "Person" : "Personen"; - var countHtml = $("#tableDataset tbody tr").length +" "+persontext; + var personcount = 0; + + $.ajax({ + url: window.location.pathname.replace('infocenter/InfoCenter', 'Filters/rowNumber'), + method: "GET" + }) + .done(function(data, textStatus, jqXHR) { + + if (data != null) + { + if (data.rowNumber != null) + { + personcount = data.rowNumber; + + var persontext = personcount === 1 ? "Person" : "Personen"; + var countHtml = personcount + " " + persontext; + + $("#datasetActionsTop, #datasetActionsBottom").append( + "
    " + selectAllHtml + "  " + messageHtml + "
    "+ + "
    " + countHtml + "
    "+ + "
    " + ); + $("#datasetActionsBottom").append("

    "); + } + + setTableActions(); + } + + }).fail(function(jqXHR, textStatus, errorThrown) {}); - $("#datasetActionsTop, #datasetActionsBottom").append( - "
    "+selectAllHtml+"  "+ messageHtml+"
    "+ - "
    "+countHtml+"
    "+ - "
    " - ); - $("#datasetActionsBottom").append("

    "); } /** @@ -74,7 +82,7 @@ function appendTableActionsHtml() function setTableActions() { $(".sendMsgsLink").click(function() { - var idsel = $("#tableDataset input:checked[name=PersonId\\[\\]]"); + var idsel = $("#filterTableDataset input:checked[name=PersonId\\[\\]]"); if(idsel.length > 0) { var form = $("#sendMsgsForm"); @@ -91,15 +99,15 @@ function setTableActions() $(".selectAll").click(function() { //select only trs if not filtered by tablesorter - var trs = $("#tableDataset tbody tr").not(".filtered"); + var trs = $("#filterTableDataset tbody tr").not(".filtered"); trs.find("input[name=PersonId\\[\\]]").prop("checked", true); } ); $(".unselectAll").click(function() { - var trs = $("#tableDataset tbody tr").not(".filtered"); + var trs = $("#filterTableDataset tbody tr").not(".filtered"); trs.find("input[name=PersonId\\[\\]]").prop("checked", false); } ); -} \ No newline at end of file +} diff --git a/locale/de-AT/global.php b/locale/de-AT/global.php index 318e7e5f6..d13729ba5 100644 --- a/locale/de-AT/global.php +++ b/locale/de-AT/global.php @@ -37,6 +37,8 @@ $this->phrasen['global/loeschen']='Löschen'; $this->phrasen['global/entfernen']='Entfernen'; $this->phrasen['global/editieren']='Editieren'; $this->phrasen['global/suchen']='Suchen'; +$this->phrasen['global/lesen']='Lesen'; +$this->phrasen['global/bestaetigen']='Bestätigen'; $this->phrasen['global/alle']='Alle'; $this->phrasen['global/abbrechen']='Abbrechen'; $this->phrasen['global/eintragen']='Eintragen'; @@ -61,6 +63,7 @@ $this->phrasen['global/drucken']='Drucken'; $this->phrasen['global/pdfExport']='PDF Export'; $this->phrasen['global/und']='und'; $this->phrasen['global/oder']='oder'; +$this->phrasen['global/faelligAm']='Fällig am'; $this->phrasen['global/username']='Username'; $this->phrasen['global/vorname']='Vorname'; diff --git a/locale/de-AT/tools.php b/locale/de-AT/tools.php index 2f7141c83..cbe551bc4 100644 --- a/locale/de-AT/tools.php +++ b/locale/de-AT/tools.php @@ -49,8 +49,14 @@ $this->phrasen['tools/ampelBereitsBestaetigt']='Diese Ampel wurde bereits bestä $this->phrasen['tools/dasAmpelsystemIstEinErinnerungsystem']='Das Ampelsystem ist ein ERINNERUNGS- und BESTÄTIGUNGSSYSTEM, welches Sie auf ausstehende Aufgaben aufmerksam machen soll.'; $this->phrasen['tools/waehlenSieEineOEoderAmpel']='Bitte wählen Sie ein Organisationseinheit und/oder eine Ampel aus dem Dropdown'; $this->phrasen['tools/uebersichtLeitung']='Ampel-Übersicht für LeiterInnen'; -$this->phrasen['tools/ampelAlleAnzeigen']='Alle anzeigen'; -$this->phrasen['tools/ampelNurAktuellesStudiensemester']='Nur aktuelles Studiensemester anzeigen'; +$this->phrasen['tools/ampelAnzeigeFuer']='Anzeige für'; +$this->phrasen['tools/ampelAlleAnzeigen']='alle'; +$this->phrasen['tools/ampelNurAktuellesStudiensemester']='aktuelles Studiensemester'; +$this->phrasen['tools/ampelPopupTitel']='Nachrichten, die verpflichtend bestätigt werden müssen'; +$this->phrasen['tools/ampelBitteBestaetigen']='Bitte bestätigen Sie diese jetzt:'; +$this->phrasen['tools/ampelAbgelaufenTitel']='Abgelaufene oder bereits bestätigte Ampeln'; +$this->phrasen['tools/ampelAbgelaufenTxt']='Sie können diese Ampeln weiterhin lesen, aber nicht mehr bestätigen.'; +$this->phrasen['tools/ampelBestaetigtAbgelaufen']='Bereits bestätigt oder abgelaufen'; //Software fuer Lehre -> Softgrid $this->phrasen['tools/applikationsliste']='Applikationsliste'; diff --git a/locale/en-US/global.php b/locale/en-US/global.php index 0fa50791b..3a614ac46 100644 --- a/locale/en-US/global.php +++ b/locale/en-US/global.php @@ -37,6 +37,8 @@ $this->phrasen['global/loeschen']='Delete'; $this->phrasen['global/entfernen']='Delete'; $this->phrasen['global/editieren']='Edit'; $this->phrasen['global/suchen']='Search'; +$this->phrasen['global/lesen']='Read'; +$this->phrasen['global/bestaetigen']='Confirm'; $this->phrasen['global/alle']='All'; $this->phrasen['global/abbrechen']='Cancel'; $this->phrasen['global/eintragen']='Register'; @@ -60,6 +62,7 @@ $this->phrasen['global/hinzufuegen']='Add'; $this->phrasen['global/drucken']='Print'; $this->phrasen['global/und']='and'; $this->phrasen['global/oder']='or'; +$this->phrasen['global/faelligAm']='Due on'; $this->phrasen['global/username']='Username'; $this->phrasen['global/vorname']='First Name'; diff --git a/locale/en-US/tools.php b/locale/en-US/tools.php index aaac6f9bd..23345ebed 100644 --- a/locale/en-US/tools.php +++ b/locale/en-US/tools.php @@ -51,6 +51,14 @@ $this->phrasen['tools/waehlenSieEineOEoderAmpel']='Please select an organization $this->phrasen['tools/uebersichtLeitung']='Overview of notifications for Heads of Departments'; $this->phrasen['tools/alleAnzeigen']='Show all'; $this->phrasen['tools/nurAktuellesStudiensemester']='Show current semester only'; +$this->phrasen['tools/ampelAnzeigeFuer']='Show'; +$this->phrasen['tools/ampelAlleAnzeigen']='all'; +$this->phrasen['tools/ampelNurAktuellesStudiensemester']='actual term'; +$this->phrasen['tools/ampelPopupTitel']='Mandatory Notifications that need to be confirmed'; +$this->phrasen['tools/ampelBitteBestaetigen']='Please confirm now!'; +$this->phrasen['tools/ampelAbgelaufenTitel']='Notifications expired or confirmed'; +$this->phrasen['tools/ampelAbgelaufenTxt']='Notifications can still be read, but not confirmed anymore.'; +$this->phrasen['tools/ampelBestaetigtAbgelaufen']='Almost confirmed or expired'; //Software fuer Lehre -> Softgrid $this->phrasen['tools/applikationsliste']='List of Applications'; diff --git a/skin/images/csv.ico b/skin/images/csv.ico new file mode 100644 index 000000000..9100c46bc Binary files /dev/null and b/skin/images/csv.ico differ diff --git a/skin/images/outlook.ico b/skin/images/outlook.ico new file mode 100644 index 000000000..bc136896c Binary files /dev/null and b/skin/images/outlook.ico differ diff --git a/skin/images/sancho_round_right_grey.png b/skin/images/sancho_round_right_grey.png new file mode 100644 index 000000000..103634acb Binary files /dev/null and b/skin/images/sancho_round_right_grey.png differ diff --git a/skin/images/sancho_round_right_red.png b/skin/images/sancho_round_right_red.png new file mode 100644 index 000000000..aafe9b2b4 Binary files /dev/null and b/skin/images/sancho_round_right_red.png differ diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 513d778d4..7831171ea 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -1265,6 +1265,35 @@ if($result = $db->db_query("SELECT 1 FROM system.tbl_app WHERE app='bewerbung'") } } +// Remove NOT NULL constraint on vorlaufszeit on public.tbl_ampel +if($result = @$db->db_query("SELECT is_nullable FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'public' AND TABLE_NAME = 'tbl_ampel' AND COLUMN_NAME = 'vorlaufzeit' AND is_nullable = 'NO'")) +{ + if($db->db_num_rows($result) > 0) + { + $qry = "ALTER TABLE public.tbl_ampel ALTER COLUMN vorlaufzeit DROP NOT NULL;"; + + if(!$db->db_query($qry)) + echo 'public.tbl_ampel '.$db->db_last_error().'
    '; + else + echo '
    Removed NOT NULL constraint on "vorlaufszeit" from public.tbl_ampel
    '; + } +} + + +// Remove NOT NULL constraint on verfallszeit on public.tbl_ampel +if($result = @$db->db_query("SELECT is_nullable FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'public' AND TABLE_NAME = 'tbl_ampel' AND COLUMN_NAME = 'verfallszeit' AND is_nullable = 'NO'")) +{ + if($db->db_num_rows($result) > 0 ) + { + $qry = "ALTER TABLE public.tbl_ampel ALTER COLUMN verfallszeit DROP NOT NULL;"; + + if(!$db->db_query($qry)) + echo 'public.tbl_ampel '.$db->db_last_error().'
    '; + else + echo '
    Removed NOT NULL constraint on "verfallszeit" from public.tbl_ampel
    '; + } +} + // Tabelle person_lock hinzufügen if (!$result = @$db->db_query("SELECT 1 FROM system.tbl_person_lock LIMIT 1")) { @@ -1314,6 +1343,335 @@ if($result = @$db->db_query("SELECT * FROM information_schema.role_table_grants } } +/** + * Kommentare fuer Datenbanktabellen + */ +if($result = $db->db_query("SELECT obj_description('public.ci_apikey'::regclass) as comment")) +{ + if($row = $db->db_fetch_object($result)) + { + if($row->comment == '') + { + $qry = " + COMMENT ON TABLE public.ci_apikey IS 'API Keys'; + COMMENT ON TABLE public.tbl_adresse IS 'Person and Company Addresses'; + COMMENT ON TABLE public.tbl_akte IS 'Documents of Persons'; + COMMENT ON TABLE public.tbl_ampel IS 'Notification System'; + COMMENT ON TABLE public.tbl_ampel_benutzer_bestaetigt IS 'Accepted Notifications'; + COMMENT ON TABLE public.tbl_aufnahmeschluessel IS 'DEPRECATED'; + COMMENT ON TABLE public.tbl_aufnahmetermin IS 'DEPRECATED'; + COMMENT ON TABLE public.tbl_aufnahmetermintyp IS 'DEPRECATED'; + COMMENT ON TABLE public.tbl_aufmerksamdurch IS 'Key-Table of Brand Awareness'; + COMMENT ON TABLE public.tbl_bankverbindung IS 'Bank Data of Persons'; + COMMENT ON TABLE public.tbl_benutzer IS 'List of Accounts'; + COMMENT ON TABLE public.tbl_benutzerfunktion IS 'Functions of Persons'; + COMMENT ON TABLE public.tbl_benutzergruppe IS 'Connects Users and Groups'; + COMMENT ON TABLE public.tbl_bewerbungstermine IS 'Application Dates'; + COMMENT ON TABLE public.tbl_buchungstyp IS 'Key-Table of Payment Types'; + COMMENT ON TABLE public.tbl_dokument IS 'Key-Table of Documents'; + COMMENT ON TABLE public.tbl_dokumentprestudent IS 'Accepted Documents of Degree Program'; + COMMENT ON TABLE public.tbl_dokumentstudiengang IS 'Connection Table of Degree Programs and needed Documents'; + COMMENT ON TABLE public.tbl_erhalter IS 'Company Caretaker Information'; + COMMENT ON TABLE public.tbl_fachbereich IS 'Institute, Department'; + COMMENT ON TABLE public.tbl_filter IS 'Predefined Dropdowns for Reports'; + COMMENT ON TABLE public.tbl_firma IS 'Universities, Suppliers, Companies'; + COMMENT ON TABLE public.tbl_firma_mobilitaetsprogramm IS 'Mobility programes of Universities'; + COMMENT ON TABLE public.tbl_firma_organisationseinheit IS 'Connects Companys with Organisation Units'; + COMMENT ON TABLE public.tbl_firmatag IS 'Tags for Companys'; + COMMENT ON TABLE public.tbl_firmentyp IS 'Types of Companys'; + COMMENT ON TABLE public.tbl_fotostatus IS 'Key-Table of Picture Upload Status'; + COMMENT ON TABLE public.tbl_funktion IS 'Key-Table of User Functions'; + COMMENT ON TABLE public.tbl_geschaeftsjahr IS 'Finacial Year'; + COMMENT ON TABLE public.tbl_gruppe IS 'Study Groups, Mail Groups'; + COMMENT ON TABLE public.tbl_kontakt IS 'Contacts of Persons'; + COMMENT ON TABLE public.tbl_kontaktmedium IS 'PreInteressenten-Kontakttypen'; + COMMENT ON TABLE public.tbl_kontakttyp IS 'Key-Table of Contact Types'; + COMMENT ON TABLE public.tbl_konto IS 'Student Payments'; + COMMENT ON TABLE public.tbl_lehrverband IS 'List of Groups'; + COMMENT ON TABLE public.tbl_log IS 'Logging and Undo'; + COMMENT ON TABLE public.tbl_mitarbeiter IS 'Employee Data'; + COMMENT ON TABLE public.tbl_msg_attachment IS 'Messages Attachments'; + COMMENT ON TABLE public.tbl_msg_message IS 'Messages'; + COMMENT ON TABLE public.tbl_msg_recipient IS 'Message Recipients'; + COMMENT ON TABLE public.tbl_msg_status IS 'Message Status'; + COMMENT ON TABLE public.tbl_notiz IS 'Notes'; + COMMENT ON TABLE public.tbl_notiz_dokument IS 'Documents assigned to Notes'; + COMMENT ON TABLE public.tbl_notizzuordnung IS 'Connects Notes with Persons, Courses, …'; + COMMENT ON TABLE public.tbl_organisationseinheit IS 'Organisation Units'; + COMMENT ON TABLE public.tbl_organisationseinheittyp IS 'Key-Table of Types of Organisation Units'; + COMMENT ON TABLE public.tbl_ort IS 'Teaching Rooms, Offices'; + COMMENT ON TABLE public.tbl_ortraumtyp IS 'Connection of Rooms and Room Types'; + COMMENT ON TABLE public.tbl_person IS 'List of all Persons'; + COMMENT ON TABLE public.tbl_person_fotostatus IS 'Connects Picture Upload States with Persons'; + COMMENT ON TABLE public.tbl_personfunktionstandort IS 'Contact Persons of a Company'; + COMMENT ON TABLE public.tbl_preincoming IS 'Incoming Registration'; + COMMENT ON TABLE public.tbl_preincoming_lehrveranstaltung IS 'Incoming Courses'; + COMMENT ON TABLE public.tbl_preinteressent IS 'DEPRECATED'; + COMMENT ON TABLE public.tbl_preinteressentstudiengang IS 'DEPRECATED'; + COMMENT ON TABLE public.tbl_preoutgoing IS 'Outgoing Data'; + COMMENT ON TABLE public.tbl_preoutgoing_firma IS 'Outgoing University'; + COMMENT ON TABLE public.tbl_preoutgoing_lehrveranstaltung IS 'Visited Courses of Outgoings'; + COMMENT ON TABLE public.tbl_preoutgoing_preoutgoing_status IS 'Ougoing Status'; + COMMENT ON TABLE public.tbl_preoutgoing_status IS 'Key-Table of Outgoing Status'; + COMMENT ON TABLE public.tbl_prestudent IS 'Relation Person-DegreeProgram'; + COMMENT ON TABLE public.tbl_prestudentstatus IS 'Student History'; + COMMENT ON TABLE public.tbl_raumtyp IS 'Room Types'; + COMMENT ON TABLE public.tbl_reihungstest IS 'Placement Tests'; + COMMENT ON TABLE public.tbl_rt_ort IS 'Connection Room – Placementtest'; + COMMENT ON TABLE public.tbl_rt_person IS 'Connection Person – Placementtest'; + COMMENT ON TABLE public.tbl_rt_studienplan IS 'Connection StudyPlan – Placementtest'; + COMMENT ON TABLE public.tbl_semesterwochen IS 'Number of Weeks per Semester'; + COMMENT ON TABLE public.tbl_service IS 'ServiceLevelAgreements'; + COMMENT ON TABLE public.tbl_sprache IS 'Key-Table of Languages'; + COMMENT ON TABLE public.tbl_standort IS 'Company Locations'; + COMMENT ON TABLE public.tbl_statistik IS 'Statistics'; + COMMENT ON TABLE public.tbl_status IS 'Key-Table of Student Status'; + COMMENT ON TABLE public.tbl_status_grund IS 'Key-Table of Reasons for Student Status Changes'; + COMMENT ON TABLE public.tbl_student IS 'List of Students'; + COMMENT ON TABLE public.tbl_studentlehrverband IS 'Connection of Students to Semester and Groups'; + COMMENT ON TABLE public.tbl_studiengang IS 'List of Degree Programs'; + COMMENT ON TABLE public.tbl_studiengangstyp IS 'Key-Table of Degree Program Types'; + COMMENT ON TABLE public.tbl_studienjahr IS 'Key-Table of Study Year'; + COMMENT ON TABLE public.tbl_studiensemester IS 'Key-Table of Study Semester'; + COMMENT ON TABLE public.tbl_tag IS 'Orders and Company Tags'; + COMMENT ON TABLE public.tbl_variable IS 'User Variables'; + COMMENT ON TABLE public.tbl_vorlage IS 'Key-Table of Document Templates'; + COMMENT ON TABLE public.tbl_vorlagedokument IS 'Connects Documents with Templates'; + COMMENT ON TABLE public.tbl_vorlagestudiengang IS 'Document Templates of Degree Programs'; + COMMENT ON TABLE bis.tbl_archiv IS 'Ministery Report archive'; + COMMENT ON TABLE bis.tbl_ausbildung IS 'Key-Table of Highest Education of Employees'; + COMMENT ON TABLE bis.tbl_berufstaetigkeit IS 'Key-Table of Professional Activity of Students'; + COMMENT ON TABLE bis.tbl_beschaeftigungsart1 IS 'Key-Table of Contract Types'; + COMMENT ON TABLE bis.tbl_beschaeftigungsart2 IS 'Key-Table of Contract Types'; + COMMENT ON TABLE bis.tbl_beschaeftigungsausmass IS 'Key-Table of Amount of Workinghours'; + COMMENT ON TABLE bis.tbl_besqual IS 'Key-Table of Employee Qualification'; + COMMENT ON TABLE bis.tbl_bisfunktion IS 'Summary of Teaching Hours per Lector'; + COMMENT ON TABLE bis.tbl_bisio IS 'Incoming, Outgoing Mobility'; + COMMENT ON TABLE bis.tbl_bisorgform IS 'Official Organisation Forms for BIS-Meldung'; + COMMENT ON TABLE bis.tbl_bisverwendung IS 'Employee Contracts'; + COMMENT ON TABLE bis.tbl_bundesland IS 'Federal States'; + COMMENT ON TABLE bis.tbl_entwicklungsteam IS 'Members of the Degree Program Development Team'; + COMMENT ON TABLE bis.tbl_gemeinde IS 'Key-Table of Local Community'; + COMMENT ON TABLE bis.tbl_gsprogramm IS 'Joint Degree Programs'; + COMMENT ON TABLE bis.tbl_gsprogrammtyp IS 'Joint Degree Programs'; + COMMENT ON TABLE bis.tbl_gsstudientyp IS 'Joint Degree Programs'; + COMMENT ON TABLE bis.tbl_hauptberuf IS 'Key-Table of Main Job'; + COMMENT ON TABLE bis.tbl_lgartcode IS 'Key-Table of Program Types'; + COMMENT ON TABLE bis.tbl_mobilitaet IS 'Joint Degree Programs of Students'; + COMMENT ON TABLE bis.tbl_mobilitaetsprogramm IS 'Key-Table of Mobility Programs'; + COMMENT ON TABLE bis.tbl_mobilitaetstyp IS 'Key-Table of Type of international activity'; + COMMENT ON TABLE bis.tbl_nation IS 'Key-Table of Nations'; + COMMENT ON TABLE bis.tbl_orgform IS 'Key-Table of Organisation Forms of Degree Programs'; + COMMENT ON TABLE bis.tbl_verwendung IS 'Key-Table of Employee Functions'; + COMMENT ON TABLE bis.tbl_zgv IS 'Key-Table of Requirements Bachelor'; + COMMENT ON TABLE bis.tbl_zgvdoktor IS 'Key-Table of Requirements Doktor'; + COMMENT ON TABLE bis.tbl_zgvgruppe IS 'Aliqoute Reduction Groups'; + COMMENT ON TABLE bis.tbl_zgvgruppe_zuordnung IS 'Aliqoute Reduction Groups'; + COMMENT ON TABLE bis.tbl_zgvmaster IS 'Key-Table of Requirements Master'; + COMMENT ON TABLE bis.tbl_zweck IS 'Key-Table of Purpose of Semester Abroad'; + COMMENT ON TABLE campus.tbl_abgabe IS 'Uploads to Kreuzerltool'; + COMMENT ON TABLE campus.tbl_anwesenheit IS 'Student Attendance'; + COMMENT ON TABLE campus.tbl_beispiel IS 'Kreuzerltool Entries'; + COMMENT ON TABLE campus.tbl_benutzerlvstudiensemester IS 'Subscriptions to Elective Courses'; + COMMENT ON TABLE campus.tbl_content IS 'Content Pages'; + COMMENT ON TABLE campus.tbl_contentchild IS 'Building the Content Tree'; + COMMENT ON TABLE campus.tbl_contentgruppe IS 'Content Permissions'; + COMMENT ON TABLE campus.tbl_contentlog IS 'Locking Log of Content Pages'; + COMMENT ON TABLE campus.tbl_contentsprache IS 'CMS Content in Different Languages'; + COMMENT ON TABLE campus.tbl_coodle IS 'Appointment Surveys'; + COMMENT ON TABLE campus.tbl_coodle_ressource IS 'Ressources Assigned to a Survey'; + COMMENT ON TABLE campus.tbl_coodle_ressource_termin IS 'Selected Time Slots of a Survey'; + COMMENT ON TABLE campus.tbl_coodle_status IS 'Key Table of State of the Survey'; + COMMENT ON TABLE campus.tbl_coodle_termin IS 'Time Slots of a Survey'; + COMMENT ON TABLE campus.tbl_dms IS 'List of CMS Documents'; + COMMENT ON TABLE campus.tbl_dms_kategorie IS 'Document Categories'; + COMMENT ON TABLE campus.tbl_dms_kategorie_gruppe IS 'Restrict Access to Document Categories'; + COMMENT ON TABLE campus.tbl_dms_version IS 'Versions of Documents'; + COMMENT ON TABLE campus.tbl_erreichbarkeit IS 'Key Table of Reachability in Case of Absence'; + COMMENT ON TABLE campus.tbl_feedback IS 'DEPRECATED'; + COMMENT ON TABLE campus.tbl_freebusy IS 'List of FreeBusy Calenders of a Person'; + COMMENT ON TABLE campus.tbl_freebusytyp IS 'Key Table of Supported FreeBusy Urls'; + COMMENT ON TABLE campus.tbl_infoscreen IS 'List of Aavailable Information Monitors'; + COMMENT ON TABLE campus.tbl_infoscreen_content IS 'Content of Information Monitors'; + COMMENT ON TABLE campus.tbl_legesamtnote IS 'Lehreinheit Grades'; + COMMENT ON TABLE campus.tbl_lehre_tools IS 'Additional Course Tools'; + COMMENT ON TABLE campus.tbl_lehre_tools_organisationseinheit IS 'Connects Courses of a Organisationunit to Tools'; + COMMENT ON TABLE campus.tbl_lehrveranstaltung_pruefung IS 'Connects Multiple Courses with one Exam'; + COMMENT ON TABLE campus.tbl_lvgesamtnote IS 'Course Grades Lector'; + COMMENT ON TABLE campus.tbl_lvinfo IS 'DEPRECATED'; + COMMENT ON TABLE campus.tbl_news IS 'studiengang_kz=0 and Semester=NULL -> global News + studiengang_kz=0 and Semester=0 -> Elective Course News + studiengang_kz=0 and Semester>0 -> News for selected Semester in all Degree Programs + studiengang_kz>0 and (Semester=NULL or Semester=0) -> all Semesters in Degree Program + studiengang_kz>0 and Semester>0 -> News for selected Semester in Degree Program'; + COMMENT ON TABLE campus.tbl_notenschluessel IS 'Kreuzerltool Grading Scheme'; + COMMENT ON TABLE campus.tbl_notenschluesseluebung IS 'Kreuzerltool Grading Scheme'; + COMMENT ON TABLE campus.tbl_paabgabe IS 'Project Submissions'; + COMMENT ON TABLE campus.tbl_paabgabetyp IS 'Key Table of Types of Submissions'; + COMMENT ON TABLE campus.tbl_pruefung IS 'Exams'; + COMMENT ON TABLE campus.tbl_pruefungsanmeldung IS 'Subscriptions to Exams'; + COMMENT ON TABLE campus.tbl_pruefungsfenster IS 'Definition Exam Weeks'; + COMMENT ON TABLE campus.tbl_pruefungsstatus IS 'Key Table of Exam Status'; + COMMENT ON TABLE campus.tbl_pruefungstermin IS 'Exam Time Slots'; + COMMENT ON TABLE campus.tbl_reservierung IS 'Room Reservation'; + COMMENT ON TABLE campus.tbl_resturlaub IS 'DEPRECATED'; + COMMENT ON TABLE campus.tbl_studentbeispiel IS 'Selected Entry in Kreuzerltool'; + COMMENT ON TABLE campus.tbl_studentuebung IS 'Exercise Grades in Kreuzerltool'; + COMMENT ON TABLE campus.tbl_template IS 'Templates for CMS Pages'; + COMMENT ON TABLE campus.tbl_uebung IS 'Exercises in Kreuzerltool'; + COMMENT ON TABLE campus.tbl_veranstaltung IS 'Events'; + COMMENT ON TABLE campus.tbl_veranstaltungskategorie IS 'Event Categories'; + COMMENT ON TABLE campus.tbl_zeitaufzeichnung IS 'Time Sheets of Employees'; + COMMENT ON TABLE campus.tbl_zeitsperre IS 'Absences of Employees'; + COMMENT ON TABLE campus.tbl_zeitsperretyp IS 'Type of Absences'; + COMMENT ON TABLE campus.tbl_zeitwunsch IS 'Teaching Time Preferences'; + COMMENT ON TABLE lehre.tbl_abschlussbeurteilung IS 'Key Table of Final Exam Grades'; + COMMENT ON TABLE lehre.tbl_abschlusspruefung IS 'Final Exam'; + COMMENT ON TABLE lehre.tbl_akadgrad IS 'Academic Title Assigned by Degree Program'; + COMMENT ON TABLE lehre.tbl_anrechnung IS 'Course Crediting'; + COMMENT ON TABLE lehre.tbl_anrechnung_begruendung IS 'Course Crediting Reasons'; + COMMENT ON TABLE lehre.tbl_betreuerart IS 'Key Table of Type of Project Supervisor'; + COMMENT ON TABLE lehre.tbl_ferien IS 'Holidays'; + COMMENT ON TABLE lehre.tbl_lehreinheit IS 'Course Parts'; + COMMENT ON TABLE lehre.tbl_lehreinheitgruppe IS 'Groups Assigned to Course'; + COMMENT ON TABLE lehre.tbl_lehreinheitmitarbeiter IS 'Lectures Assigned to Course'; + COMMENT ON TABLE lehre.tbl_lehrfach IS 'DEPRECATED'; + COMMENT ON TABLE lehre.tbl_lehrform IS 'Key Table of Teached Course Types'; + COMMENT ON TABLE lehre.tbl_lehrfunktion IS 'Key Table of Lector Functions in a Course'; + COMMENT ON TABLE lehre.tbl_lehrmittel IS 'DEPRECATED'; + COMMENT ON TABLE lehre.tbl_lehrtyp IS 'Key Table of Course Types'; + COMMENT ON TABLE lehre.tbl_lehrveranstaltung IS 'Courses, Modules'; + COMMENT ON TABLE lehre.tbl_lehrveranstaltung_kompatibel IS 'Course Compatibility'; + COMMENT ON TABLE lehre.tbl_lvangebot IS 'Offered Course Times'; + COMMENT ON TABLE lehre.tbl_lvregel IS 'Course Attendance Rules'; + COMMENT ON TABLE lehre.tbl_lvregeltyp IS 'Key Table of Course Rule Types'; + COMMENT ON TABLE lehre.tbl_moodle IS 'DEPRECATED'; + COMMENT ON TABLE lehre.tbl_moodle_version IS 'DEPRECATED'; + COMMENT ON TABLE lehre.tbl_note IS 'Key Table of Grades'; + COMMENT ON TABLE lehre.tbl_notenschluessel IS 'Course Grading Scheme'; + COMMENT ON TABLE lehre.tbl_notenschluesselaufteilung IS 'Course Grading Scheme Details'; + COMMENT ON TABLE lehre.tbl_notenschluesselzuordnung IS 'Connection Between Grading Scheme and Course/Degree Program'; + COMMENT ON TABLE lehre.tbl_projektarbeit IS 'Projects'; + COMMENT ON TABLE lehre.tbl_projektbetreuer IS 'Project Supervisor'; + COMMENT ON TABLE lehre.tbl_projekttyp IS 'Key Table of Project Type'; + COMMENT ON TABLE lehre.tbl_pruefung IS 'Exams'; + COMMENT ON TABLE lehre.tbl_pruefungstyp IS 'Key Table of Type of Exams'; + COMMENT ON TABLE lehre.tbl_studienordnung IS 'Additional Information for Degree Programs and Study Regulations'; + COMMENT ON TABLE lehre.tbl_studienordnung_semester IS 'DEPRECATED'; + COMMENT ON TABLE lehre.tbl_studienordnungstatus IS 'Key Table of Study Regulation Status'; + COMMENT ON TABLE lehre.tbl_studienplan IS 'Study Plan'; + COMMENT ON TABLE lehre.tbl_studienplan_lehrveranstaltung IS 'Connects Courses with a Study Plan'; + COMMENT ON TABLE lehre.tbl_studienplan_semester IS 'Valid Semesters of a Study Plan'; + COMMENT ON TABLE lehre.tbl_studienplatz IS 'Defines the Maximum Study Places per Degree Program'; + COMMENT ON TABLE lehre.tbl_stunde IS 'Time Grid of Schedule'; + COMMENT ON TABLE lehre.tbl_stundenplan IS 'Schedule (Productive Data)'; + COMMENT ON TABLE lehre.tbl_stundenplan_betriebsmittel IS 'Required Teaching Material'; + COMMENT ON TABLE lehre.tbl_stundenplandev IS 'Schedule (Developing Data)'; + COMMENT ON TABLE lehre.tbl_vertrag IS 'Teaching Contracts'; + COMMENT ON TABLE lehre.tbl_vertrag_vertragsstatus IS 'Status History of Contracts'; + COMMENT ON TABLE lehre.tbl_vertragsstatus IS 'Key Table of Contract Status'; + COMMENT ON TABLE lehre.tbl_vertragstyp IS 'Key Table of Type of Contracts'; + COMMENT ON TABLE lehre.tbl_zeitfenster IS 'DEPRECATED'; + COMMENT ON TABLE lehre.tbl_zeugnis IS 'DEPRECATED'; + COMMENT ON TABLE lehre.tbl_zeugnisnote IS 'Final Grades for Courses'; + COMMENT ON TABLE system.tbl_app IS 'FH Complete Applications'; + COMMENT ON TABLE system.tbl_appdaten IS 'App Specific Data'; + COMMENT ON TABLE system.tbl_benutzerrolle IS 'Assigns Permissions and Roles to Users'; + COMMENT ON TABLE system.tbl_berechtigung IS 'Key Table of Permissions'; + COMMENT ON TABLE system.tbl_cronjob IS 'Automatic Cronjobs'; + COMMENT ON TABLE system.tbl_extensions IS 'Table to Manage FH Complete Extensions'; + COMMENT ON TABLE system.tbl_filters IS 'Table to Manage FH Complete Filters'; + COMMENT ON TABLE system.tbl_log IS 'Person Log'; + COMMENT ON TABLE system.tbl_logtype IS 'Key Table of Types of Log Entries'; + COMMENT ON TABLE system.tbl_phrase IS 'Multi Language Phrases'; + COMMENT ON TABLE system.tbl_phrasentext IS 'Multi Language Phrases Text'; + COMMENT ON TABLE system.tbl_person_lock IS 'Persons that are locked for editing'; + COMMENT ON TABLE system.tbl_rolle IS 'Permission Roles'; + COMMENT ON TABLE system.tbl_rolleberechtigung IS 'Assigns Permissions to Roles'; + COMMENT ON TABLE system.tbl_server IS 'List of Servers for Cronjobs'; + COMMENT ON TABLE system.tbl_udf IS 'User Defined Fields'; + COMMENT ON TABLE system.tbl_verarbeitungstaetigkeit IS 'Processing Activities'; + COMMENT ON TABLE system.tbl_webservicelog IS 'Webservice Log'; + COMMENT ON TABLE system.tbl_webservicerecht IS 'Webservice Permissions'; + COMMENT ON TABLE system.tbl_webservicetyp IS 'Key Table of Webservice Types'; + COMMENT ON TABLE fue.tbl_aktivitaet IS 'Timesheet SLA Activity'; + COMMENT ON TABLE fue.tbl_aufwandstyp IS 'Estimation Scale Type'; + COMMENT ON TABLE fue.tbl_projekt IS 'Projects'; + COMMENT ON TABLE fue.tbl_projekt_dokument IS 'Assigns a DMS Document to a Project'; + COMMENT ON TABLE fue.tbl_projekt_ressource IS 'Assigns a Ressource to a Project'; + COMMENT ON TABLE fue.tbl_projektphase IS 'Project Phases'; + COMMENT ON TABLE fue.tbl_projekttask IS 'Project Tasks'; + COMMENT ON TABLE fue.tbl_ressource IS 'Project Ressources (Persons, Companys, Inventory)'; + COMMENT ON TABLE fue.tbl_scrumsprint IS 'DEPRECATED'; + COMMENT ON TABLE fue.tbl_scrumteam IS 'DEPRECATED'; + COMMENT ON TABLE wawi.tbl_aufteilung IS 'DEPRECATED'; + COMMENT ON TABLE wawi.tbl_aufteilung_default IS 'DEPRECATED'; + COMMENT ON TABLE wawi.tbl_bestelldetail IS 'Order Details'; + COMMENT ON TABLE wawi.tbl_bestelldetailtag IS 'Order Details Tags'; + COMMENT ON TABLE wawi.tbl_bestellstatus IS 'Key Table of Order Status'; + COMMENT ON TABLE wawi.tbl_bestellung IS 'Orders'; + COMMENT ON TABLE wawi.tbl_bestellung_bestellstatus IS 'Order Status History'; + COMMENT ON TABLE wawi.tbl_bestellungtag IS 'Order Tags'; + COMMENT ON TABLE wawi.tbl_betriebsmittel IS 'Inventory'; + COMMENT ON TABLE wawi.tbl_betriebsmittel_betriebsmittelstatus IS 'Inventory Status History'; + COMMENT ON TABLE wawi.tbl_betriebsmittelperson IS 'Assigns Inventory to a Person'; + COMMENT ON TABLE wawi.tbl_betriebsmittelstatus IS 'Key Table of Inventory Status'; + COMMENT ON TABLE wawi.tbl_betriebsmitteltyp IS 'Key Table of Inventory Type'; + COMMENT ON TABLE wawi.tbl_buchung IS 'Accounting of Lecturers (Addon-Abrechnung)'; + COMMENT ON TABLE wawi.tbl_buchungstyp IS 'Key Table of Booking Types'; + COMMENT ON TABLE wawi.tbl_budget IS 'Budget per Cost Unit'; + COMMENT ON TABLE wawi.tbl_konto IS 'Accounts'; + COMMENT ON TABLE wawi.tbl_konto_kostenstelle IS 'Connects Multiple Accounts with a Cost Unit'; + COMMENT ON TABLE wawi.tbl_kostenstelle IS 'Cost Units'; + COMMENT ON TABLE wawi.tbl_projekt_bestellung IS 'Assigns Orders to a Project'; + COMMENT ON TABLE wawi.tbl_rechnung IS 'Invoice'; + COMMENT ON TABLE wawi.tbl_rechnungsbetrag IS 'Invoice Amount'; + COMMENT ON TABLE wawi.tbl_rechnungstyp IS 'Key Table of Invoice Types'; + COMMENT ON TABLE wawi.tbl_zahlungstyp IS 'Key Table of Payment Types'; + COMMENT ON TABLE testtool.tbl_ablauf IS 'List of Sections per Degree Program'; + COMMENT ON TABLE testtool.tbl_ablauf_vorgaben IS 'Additional Test Configuration'; + COMMENT ON TABLE testtool.tbl_antwort IS 'Answers of the Candidate'; + COMMENT ON TABLE testtool.tbl_frage IS 'List of Questions'; + COMMENT ON TABLE testtool.tbl_frage_sprache IS 'Questions in Different Languages'; + COMMENT ON TABLE testtool.tbl_gebiet IS 'List of Test Sections'; + COMMENT ON TABLE testtool.tbl_kategorie IS 'DEPRECATED'; + COMMENT ON TABLE testtool.tbl_kriterien IS 'DEPRECATED'; + COMMENT ON TABLE testtool.tbl_pruefling IS 'List of Tested Candidates'; + COMMENT ON TABLE testtool.tbl_pruefling_frage IS 'Questions Given to a Candidate'; + COMMENT ON TABLE testtool.tbl_vorschlag IS 'Available Answers to a Question'; + COMMENT ON TABLE testtool.tbl_vorschlag_sprache IS 'Answers in Different Languages'; + + COMMENT ON SCHEMA addon IS 'Extensions and Addons'; + COMMENT ON SCHEMA bis IS 'Key Table of and Additional Tables for Ministery Report'; + COMMENT ON SCHEMA campus IS 'Campus Management and CIS'; + COMMENT ON SCHEMA fue IS 'Projectmanagement'; + COMMENT ON SCHEMA lehre IS 'Teaching and Learning'; + COMMENT ON SCHEMA public IS 'Base Data'; + COMMENT ON SCHEMA reports IS 'Cachingtables for Reporting'; + COMMENT ON SCHEMA sync IS 'Synchronisation Data'; + COMMENT ON SCHEMA system IS 'Permissions, Logging'; + COMMENT ON SCHEMA testtool IS 'Placement Test'; + COMMENT ON SCHEMA wawi IS 'Inventory, Orders'; + + COMMENT ON COLUMN public.tbl_prestudent.rt_punkte1 IS 'DEPRECATED'; + COMMENT ON COLUMN public.tbl_prestudent.rt_punkte2 IS 'DEPRECATED'; + COMMENT ON COLUMN public.tbl_prestudent.rt_punkte3 IS 'DEPRECATED'; + COMMENT ON COLUMN public.tbl_prestudent.anmeldungreihungstest IS 'DEPRECATED'; + COMMENT ON COLUMN public.tbl_prestudent.reihungstest_id IS 'DEPRECATED'; + COMMENT ON COLUMN public.tbl_prestudent.ausstellungsstaat IS 'DEPRECATED'; + COMMENT ON COLUMN public.tbl_prestudent.aufnahmeschluessel IS 'DEPRECATED'; + COMMENT ON COLUMN lehre.tbl_lehrveranstaltung.old_lehrfach_id IS 'DEPRECATED'; + "; + + if(!$db->db_query($qry)) + echo 'Comments: '.$db->db_last_error().'
    '; + else + echo 'Kommentare fuer DB Datenbanktabellen hinzugefügt'; + } + + } +} + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

    Pruefe Tabellen und Attribute!

    '; diff --git a/system/mlists/mlists_generate.php b/system/mlists/mlists_generate.php index 55454c322..aca2e9b17 100644 --- a/system/mlists/mlists_generate.php +++ b/system/mlists/mlists_generate.php @@ -444,6 +444,39 @@ $error_msg=''; AND tbl_lehrveranstaltung.studiengang_kz=257 AND tbl_lehrveranstaltung.orgform_kurzbz='DUA' "; + + $verteilerArray['pre_alumni_wintersemester']['bezeichnung'] = 'Zukünftige Absolventen Wintersemester'; + $verteilerArray['pre_alumni_wintersemester']['beschreibung'] = 'Zukünftige Absolventen Wintersemester'; + $verteilerArray['pre_alumni_wintersemester']['sql'] = "SELECT + distinct tbl_benutzer.uid + FROM + public.tbl_studentlehrverband + JOIN public.tbl_studiengang USING(studiengang_kz) + JOIN public.tbl_benutzer ON(uid=student_uid) + WHERE + ( + (tbl_studiengang.typ='m' AND semester=3) + OR (tbl_studiengang.typ='b' AND semester=5) + ) + AND tbl_benutzer.aktiv = true + AND tbl_studentlehrverband.studiensemester_kurzbz = (SELECT studiensemester_kurzbz FROM public.vw_studiensemester where studiensemester_kurzbz like 'WS%' ORDER BY delta LIMIT 1)"; + + $verteilerArray['pre_alumni_sommersemester']['bezeichnung'] = 'Zukünftige Absolventen Sommersemester'; + $verteilerArray['pre_alumni_sommersemester']['beschreibung'] = 'Zukünftige Absolventen Sommersemester'; + $verteilerArray['pre_alumni_sommersemester']['sql'] = "SELECT + distinct tbl_benutzer.uid + FROM + public.tbl_studentlehrverband + JOIN public.tbl_studiengang USING(studiengang_kz) + JOIN public.tbl_benutzer ON(uid=student_uid) + WHERE + ( + (tbl_studiengang.typ='m' AND semester=4) + OR (tbl_studiengang.typ='b' AND semester=6) + ) + AND tbl_benutzer.aktiv = true + AND tbl_studentlehrverband.studiensemester_kurzbz = (SELECT studiensemester_kurzbz FROM public.vw_studiensemester where studiensemester_kurzbz like 'SS%' ORDER BY delta LIMIT 1)"; + $bezeichnung = ''; $beschreibung = ''; foreach ($verteilerArray AS $listname => $data) diff --git a/system/xsl/fotoliste_0.xsl b/system/xsl/fotoliste_0.xsl index 826bed643..0b3109430 100644 --- a/system/xsl/fotoliste_0.xsl +++ b/system/xsl/fotoliste_0.xsl @@ -261,14 +261,14 @@ - + - + - + diff --git a/vilesci/stammdaten/ampel_details.php b/vilesci/stammdaten/ampel_details.php index 3a45f5fec..d04da9992 100644 --- a/vilesci/stammdaten/ampel_details.php +++ b/vilesci/stammdaten/ampel_details.php @@ -175,12 +175,12 @@ $datum_obj = new datum(); Vorlaufzeit (in Tagen) - + Verfallszeit (in Tagen) - +