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 @@ -