@@ -6,40 +7,7 @@
-
-
-
-
+
diff --git a/application/views/widgets/filter/filterOptions.php b/application/views/widgets/filter/filterOptions.php
new file mode 100644
index 000000000..6f1dd3885
--- /dev/null
+++ b/application/views/widgets/filter/filterOptions.php
@@ -0,0 +1,35 @@
+
+
+
+
+
diff --git a/application/views/widgets/filter/tableDataset.php b/application/views/widgets/filter/tableDataset.php
index ca917503a..2f1b94e61 100644
--- a/application/views/widgets/filter/tableDataset.php
+++ b/application/views/widgets/filter/tableDataset.php
@@ -1,8 +1,7 @@
-
diff --git a/application/views/widgets/filter/tabulatorDataset.php b/application/views/widgets/filter/tabulatorDataset.php
new file mode 100644
index 000000000..f5efc50b3
--- /dev/null
+++ b/application/views/widgets/filter/tabulatorDataset.php
@@ -0,0 +1 @@
+
diff --git a/application/views/widgets/table/pivotUIDataset.php b/application/views/widgets/table/pivotUIDataset.php
new file mode 100644
index 000000000..0b43fcdac
--- /dev/null
+++ b/application/views/widgets/table/pivotUIDataset.php
@@ -0,0 +1 @@
+
diff --git a/application/views/widgets/table/table.php b/application/views/widgets/table/table.php
new file mode 100644
index 000000000..e73aec335
--- /dev/null
+++ b/application/views/widgets/table/table.php
@@ -0,0 +1,17 @@
+
+
diff --git a/application/views/widgets/table/tableDataset.php b/application/views/widgets/table/tableDataset.php
new file mode 100644
index 000000000..7c2f26ea5
--- /dev/null
+++ b/application/views/widgets/table/tableDataset.php
@@ -0,0 +1,7 @@
+
+
diff --git a/application/views/widgets/table/tabulatorDataset.php b/application/views/widgets/table/tabulatorDataset.php
new file mode 100644
index 000000000..4984284bc
--- /dev/null
+++ b/application/views/widgets/table/tabulatorDataset.php
@@ -0,0 +1 @@
+
diff --git a/application/widgets/Ausbildungssemester_widget.php b/application/widgets/Ausbildungssemester_widget.php
new file mode 100644
index 000000000..8200d8a63
--- /dev/null
+++ b/application/widgets/Ausbildungssemester_widget.php
@@ -0,0 +1,43 @@
+id = $i;
+ $ausbildungssemester_obj->description = $i;
+
+ $ausbildungssemester_arr []= $ausbildungssemester_obj;
+ }
+
+ $this->setElementsArray(
+ success($ausbildungssemester_arr),
+ true,
+ $this->p->t('lehre', 'ausbildungssemester'),
+ 'No Ausbildungssemester found'
+ );
+
+ $this->loadDropDownView($widgetData);
+ }
+}
\ No newline at end of file
diff --git a/application/widgets/FilterWidget.php b/application/widgets/FilterWidget.php
index 84a4d138b..1cef91c15 100644
--- a/application/widgets/FilterWidget.php
+++ b/application/widgets/FilterWidget.php
@@ -7,9 +7,11 @@ class FilterWidget extends Widget
{
// Paths of the views
const WIDGET_URL_FILTER = 'widgets/filter/filter';
+ const WIDGET_URL_FILTER_OPTIONS = 'widgets/filter/filterOptions';
const WIDGET_URL_SELECT_FIELDS = 'widgets/filter/selectFields';
const WIDGET_URL_DATASET_TABLESORTER = 'widgets/filter/tableDataset';
const WIDGET_URL_DATASET_PIVOTUI = 'widgets/filter/pivotUIDataset';
+ const WIDGET_URL_DATASET_TABULATOR = 'widgets/filter/tabulatorDataset';
const WIDGET_URL_SELECT_FILTERS = 'widgets/filter/selectFilters';
const WIDGET_URL_SAVE_FILTER = 'widgets/filter/saveFilter';
@@ -40,16 +42,23 @@ class FilterWidget extends Widget
// To have a column in the GUI with checkboxes to select rows in the table
private $_checkboxes;
- // To hide the GUI to operate or save the filter widget
- private $_hideHeader;
- private $_hideSave;
+ // To hide the GUI to operate with the filter widget or to save a custom filter
+ private $_hideOptions; // if true hides all the options
+ private $_hideSelectFields; // if true hides the fields selection
+ private $_hideSelectFilters; // if true hides the filters selections
+ private $_hideSave; // if true hides the GUI to save a custom filter
+ private $_hideMenu; // if true then the menu is not shown
private $_customMenu; // if true then method _setFilterMenu is NOT called
private $_datasetRepresentation; // dataset representation (ex: tablesorter, pivotUI, ...)
private $_datasetRepresentationOptions; // dataset representation options for tablesorter, pivotUI, ...
+ private $_datasetRepFieldsDefs; // dataset representation attributes for each record field
+
private $_reloadDataset; // Force Reload of Dataset
+ private $_sessionTimeout; // session expiring time
+
private static $_FilterWidgetInstance; // static property that contains the instance of itself
/**
@@ -61,18 +70,20 @@ class FilterWidget extends Widget
self::$_FilterWidgetInstance = $this; // set static property $_FilterWidgetInstance with this instance
- $this->load->library('FiltersLib'); // Loads the FiltersLib that contains all the used logic
+ $this->load->library('FilterWidgetLib'); // Loads the FilterWidgetLib that contains all the used logic
$this->_initFilterWidget($args); // checks parameters and initialize properties
+ $this->filterwidgetlib->setFilterUniqueIdByParams($args);
+
// Let's start if it's allowed
// NOTE: If it is NOT allowed then no data are loaded
- if ($this->filterslib->isAllowed($this->_requiredPermissions))
+ if ($this->filterwidgetlib->isAllowed($this->_requiredPermissions))
{
$this->_startFilterWidget();
// If a custom menu is not used, then default menu is used
- if ($this->_customMenu != true) $this->_setFilterMenu();
+ if ($this->_hideMenu != true && $this->_customMenu != true) $this->_setFilterMenu();
}
}
@@ -84,18 +95,33 @@ class FilterWidget extends Widget
*/
public function display($widgetData)
{
- $this->view(self::WIDGET_URL_FILTER); // GUI starts here
+ $this->view(self::WIDGET_URL_FILTER, array(
+ 'app' => $this->_app,
+ 'dataset' => $this->_datasetName,
+ 'filterid' => $this->_filterId
+ )); // GUI starts here
}
//------------------------------------------------------------------------------------------------------------------
// Public static methods used to load views and to access statically to some properies of the FilterWidget
+ /**
+ * Loads the view related to the filter options
+ */
+ public static function loadViewFilterOptions()
+ {
+ if (self::$_FilterWidgetInstance->_hideOptions != true)
+ {
+ self::_loadView(self::WIDGET_URL_FILTER_OPTIONS);
+ }
+ }
+
/**
* Loads the view related to the selected fields
*/
public static function loadViewSelectFields()
{
- if (self::$_FilterWidgetInstance->_hideHeader != true)
+ if (self::$_FilterWidgetInstance->_hideSelectFields != true)
{
self::_loadView(self::WIDGET_URL_SELECT_FIELDS);
}
@@ -106,7 +132,7 @@ class FilterWidget extends Widget
*/
public static function loadViewSelectFilters()
{
- if (self::$_FilterWidgetInstance->_hideHeader != true)
+ if (self::$_FilterWidgetInstance->_hideSelectFilters != true)
{
self::_loadView(self::WIDGET_URL_SELECT_FILTERS);
}
@@ -128,15 +154,20 @@ class FilterWidget extends Widget
*/
public static function loadViewDataset()
{
- if (self::$_FilterWidgetInstance->_datasetRepresentation == FiltersLib::DATASET_REP_TABLESORTER)
+ if (self::$_FilterWidgetInstance->_datasetRepresentation == FilterWidgetLib::DATASET_REP_TABLESORTER)
{
self::_loadView(self::WIDGET_URL_DATASET_TABLESORTER);
}
- if (self::$_FilterWidgetInstance->_datasetRepresentation == FiltersLib::DATASET_REP_PIVOTUI)
+ if (self::$_FilterWidgetInstance->_datasetRepresentation == FilterWidgetLib::DATASET_REP_PIVOTUI)
{
self::_loadView(self::WIDGET_URL_DATASET_PIVOTUI);
}
+
+ if (self::$_FilterWidgetInstance->_datasetRepresentation == FilterWidgetLib::DATASET_REP_TABULATOR)
+ {
+ self::_loadView(self::WIDGET_URL_DATASET_TABULATOR);
+ }
}
//------------------------------------------------------------------------------------------------------------------
@@ -157,122 +188,158 @@ class FilterWidget extends Widget
$this->_datasetName = null;
$this->_filterKurzbz = null;
$this->_filterId = null;
- $this->_reloadDataset = null;
+ $this->_reloadDataset = true; // by default the dataset is NOT cached in session
$this->_query = null;
$this->_additionalColumns = null;
$this->_columnsAliases = null;
$this->_formatRow = null;
$this->_markRow = null;
$this->_checkboxes = null;
- $this->_hideHeader = null;
+ $this->_hideOptions = null;
+ $this->_hideSelectFields = null;
+ $this->_hideSelectFilters = null;
$this->_hideSave = null;
+ $this->_hideMenu = null;
$this->_customMenu = null;
$this->_datasetRepresentation = null;
$this->_datasetRepresentationOptions = null;
+ $this->_datasetRepFieldsDefs = null;
+ $this->_sessionTimeout = FilterWidgetLib::SESSION_DEFAULT_TIMEOUT;
// Retrieved the required permissions parameter if present
- if (isset($args[FiltersLib::REQUIRED_PERMISSIONS_PARAMETER]))
+ if (isset($args[FilterWidgetLib::REQUIRED_PERMISSIONS]))
{
- $this->_requiredPermissions = $args[FiltersLib::REQUIRED_PERMISSIONS_PARAMETER];
+ $this->_requiredPermissions = $args[FilterWidgetLib::REQUIRED_PERMISSIONS];
}
// Parameters needed to retrieve univocally a filter from DB
- if (isset($args[FiltersLib::APP_PARAMETER]))
+ if (isset($args[FilterWidgetLib::APP]))
{
- $this->_app = $args[FiltersLib::APP_PARAMETER];
+ $this->_app = $args[FilterWidgetLib::APP];
}
- if (isset($args[FiltersLib::DATASET_NAME_PARAMETER]))
+ if (isset($args[FilterWidgetLib::DATASET_NAME]))
{
- $this->_datasetName = $args[FiltersLib::DATASET_NAME_PARAMETER];
+ $this->_datasetName = $args[FilterWidgetLib::DATASET_NAME];
}
- if (isset($args[FiltersLib::FILTER_KURZBZ_PARAMETER]))
+ if (isset($args[FilterWidgetLib::FILTER_KURZBZ]))
{
- $this->_filterKurzbz = $args[FiltersLib::FILTER_KURZBZ_PARAMETER];
+ $this->_filterKurzbz = $args[FilterWidgetLib::FILTER_KURZBZ];
}
- if (isset($args[FiltersLib::FILTER_ID]))
+ if (isset($args[FilterWidgetLib::FILTER_ID]))
{
- $this->_filterId = $args[FiltersLib::FILTER_ID];
+ $this->_filterId = $args[FilterWidgetLib::FILTER_ID];
}
// How to retrieve data for the filter: SQL statement or a result from DB
- if (isset($args[FiltersLib::QUERY_PARAMETER]))
+ if (isset($args[FilterWidgetLib::QUERY]))
{
- $this->_query = $args[FiltersLib::QUERY_PARAMETER];
+ $this->_query = $args[FilterWidgetLib::QUERY];
}
- if (isset($args[FiltersLib::DATASET_RELOAD_PARAMETER]))
+ if (isset($args[FilterWidgetLib::DATASET_RELOAD]))
{
- $this->_reloadDataset = $args[FiltersLib::DATASET_RELOAD_PARAMETER];
+ $this->_reloadDataset = $args[FilterWidgetLib::DATASET_RELOAD];
}
// Parameter is used to add extra columns to the dataset
- if (isset($args[FiltersLib::ADDITIONAL_COLUMNS])
- && is_array($args[FiltersLib::ADDITIONAL_COLUMNS])
- && count($args[FiltersLib::ADDITIONAL_COLUMNS]) > 0)
+ if (isset($args[FilterWidgetLib::ADDITIONAL_COLUMNS])
+ && is_array($args[FilterWidgetLib::ADDITIONAL_COLUMNS])
+ && count($args[FilterWidgetLib::ADDITIONAL_COLUMNS]) > 0)
{
- $this->_additionalColumns = $args[FiltersLib::ADDITIONAL_COLUMNS];
+ $this->_additionalColumns = $args[FilterWidgetLib::ADDITIONAL_COLUMNS];
}
// Parameter is used to add use aliases for the columns fo the dataset
- if (isset($args[FiltersLib::COLUMNS_ALIASES])
- && is_array($args[FiltersLib::COLUMNS_ALIASES])
- && count($args[FiltersLib::COLUMNS_ALIASES]) > 0)
+ if (isset($args[FilterWidgetLib::COLUMNS_ALIASES])
+ && is_array($args[FilterWidgetLib::COLUMNS_ALIASES])
+ && count($args[FilterWidgetLib::COLUMNS_ALIASES]) > 0)
{
- $this->_columnsAliases = $args[FiltersLib::COLUMNS_ALIASES];
+ $this->_columnsAliases = $args[FilterWidgetLib::COLUMNS_ALIASES];
}
// Parameter that contains a function to format the rows of the dataset
- if (isset($args[FiltersLib::FORMAT_ROW]) && is_callable($args[FiltersLib::FORMAT_ROW]))
+ if (isset($args[FilterWidgetLib::FORMAT_ROW]) && is_callable($args[FilterWidgetLib::FORMAT_ROW]))
{
- $this->_formatRow = $args[FiltersLib::FORMAT_ROW];
+ $this->_formatRow = $args[FilterWidgetLib::FORMAT_ROW];
}
// Parameter that contains a function to mark in the GUI the rows of the dataset
- if (isset($args[FiltersLib::MARK_ROW]) && is_callable($args[FiltersLib::MARK_ROW]))
+ if (isset($args[FilterWidgetLib::MARK_ROW]) && is_callable($args[FilterWidgetLib::MARK_ROW]))
{
- $this->_markRow = $args[FiltersLib::MARK_ROW];
+ $this->_markRow = $args[FilterWidgetLib::MARK_ROW];
}
// Parameter used to specify the column of the dataset that will be used
// as id of the checkboxes column in the GUI
- if (isset($args[FiltersLib::CHECKBOXES]))
+ if (isset($args[FilterWidgetLib::CHECKBOXES]))
{
- $this->_checkboxes = $args[FiltersLib::CHECKBOXES];
+ $this->_checkboxes = $args[FilterWidgetLib::CHECKBOXES];
}
- // To specify if the header to operate with the FilterWidget is shown or not
- if (isset($args[FiltersLib::HIDE_HEADER]) && is_bool($args[FiltersLib::HIDE_HEADER]))
+ // To specify if the filter options are shown ot not
+ if (isset($args[FilterWidgetLib::HIDE_OPTIONS]) && is_bool($args[FilterWidgetLib::HIDE_OPTIONS]))
{
- $this->_hideHeader = $args[FiltersLib::HIDE_HEADER];
+ $this->_hideOptions = $args[FilterWidgetLib::HIDE_OPTIONS];
+ }
+
+ // To specify if the form to select fields is shown or not
+ if (isset($args[FilterWidgetLib::HIDE_SELECT_FIELDS]) && is_bool($args[FilterWidgetLib::HIDE_SELECT_FIELDS]))
+ {
+ $this->_hideSelectFields = $args[FilterWidgetLib::HIDE_SELECT_FIELDS];
+ }
+
+ // To specify if the form to select filters is shown or not
+ if (isset($args[FilterWidgetLib::HIDE_SELECT_FILTERS]) && is_bool($args[FilterWidgetLib::HIDE_SELECT_FILTERS]))
+ {
+ $this->_hideSelectFilters = $args[FilterWidgetLib::HIDE_SELECT_FILTERS];
}
// To specify if the form to save a custom FilterWidget is shown or not
- if (isset($args[FiltersLib::HIDE_SAVE]) && is_bool($args[FiltersLib::HIDE_SAVE]))
+ if (isset($args[FilterWidgetLib::HIDE_SAVE]) && is_bool($args[FilterWidgetLib::HIDE_SAVE]))
{
- $this->_hideSave = $args[FiltersLib::HIDE_SAVE];
+ $this->_hideSave = $args[FilterWidgetLib::HIDE_SAVE];
+ }
+
+ // If the menu should be shown or not
+ if (isset($args[FilterWidgetLib::HIDE_MENU]) && is_bool($args[FilterWidgetLib::HIDE_MENU]))
+ {
+ $this->_hideMenu = $args[FilterWidgetLib::HIDE_MENU];
}
// If a custom menu is set
- if (isset($args[FiltersLib::CUSTOM_MENU]) && is_bool($args[FiltersLib::CUSTOM_MENU]))
+ if (isset($args[FilterWidgetLib::CUSTOM_MENU]) && is_bool($args[FilterWidgetLib::CUSTOM_MENU]))
{
- $this->_customMenu = $args[FiltersLib::CUSTOM_MENU];
+ $this->_customMenu = $args[FilterWidgetLib::CUSTOM_MENU];
}
// To specify how to represent the dataset (ex: tablesorter, pivotUI, ...)
- if (isset($args[FiltersLib::DATASET_REPRESENTATION])
- && ($args[FiltersLib::DATASET_REPRESENTATION] == FiltersLib::DATASET_REP_TABLESORTER
- || $args[FiltersLib::DATASET_REPRESENTATION] == FiltersLib::DATASET_REP_PIVOTUI))
+ if (isset($args[FilterWidgetLib::DATASET_REPRESENTATION])
+ && ($args[FilterWidgetLib::DATASET_REPRESENTATION] == FilterWidgetLib::DATASET_REP_TABLESORTER
+ || $args[FilterWidgetLib::DATASET_REPRESENTATION] == FilterWidgetLib::DATASET_REP_PIVOTUI
+ || $args[FilterWidgetLib::DATASET_REPRESENTATION] == FilterWidgetLib::DATASET_REP_TABULATOR))
{
- $this->_datasetRepresentation = $args[FiltersLib::DATASET_REPRESENTATION];
+ $this->_datasetRepresentation = $args[FilterWidgetLib::DATASET_REPRESENTATION];
}
// To specify options for the dataset representation (ex: tablesorter, pivotUI, ...)
- if (isset($args[FiltersLib::DATASET_REP_OPTIONS]) && !isEmptyString($args[FiltersLib::DATASET_REP_OPTIONS]))
+ if (isset($args[FilterWidgetLib::DATASET_REP_OPTIONS]) && !isEmptyString($args[FilterWidgetLib::DATASET_REP_OPTIONS]))
{
- $this->_datasetRepresentationOptions = $args[FiltersLib::DATASET_REP_OPTIONS];
+ $this->_datasetRepresentationOptions = $args[FilterWidgetLib::DATASET_REP_OPTIONS];
+ }
+
+ // To specify how to represent each record field
+ if (isset($args[FilterWidgetLib::DATASET_REP_FIELDS_DEFS]) && !isEmptyString($args[FilterWidgetLib::DATASET_REP_FIELDS_DEFS]))
+ {
+ $this->_datasetRepFieldsDefs = $args[FilterWidgetLib::DATASET_REP_FIELDS_DEFS];
+ }
+
+ // To specify the expiring session time
+ if (isset($args[FilterWidgetLib::SESSION_TIMEOUT]) && is_numeric($args[FilterWidgetLib::SESSION_TIMEOUT]))
+ {
+ $this->_sessionTimeout = $args[FilterWidgetLib::SESSION_TIMEOUT];
}
}
@@ -281,40 +348,55 @@ class FilterWidget extends Widget
*/
private function _checkParameters($args)
{
+ // If no options are given to this widget...
if (!is_array($args) || (is_array($args) && count($args) == 0))
{
show_error('Second parameter of the widget call must be a NOT empty associative array');
}
- else
+ else // ...otherwise
{
- if ((!isset($args[FiltersLib::APP_PARAMETER]) && !isset($args[FiltersLib::DATASET_NAME_PARAMETER]))
- && !isset($args[FiltersLib::FILTER_ID]))
+ // Parameters (app AND dataset name) OR filter id are mandatory
+ if ((!isset($args[FilterWidgetLib::APP]) && !isset($args[FilterWidgetLib::DATASET_NAME]))
+ && !isset($args[FilterWidgetLib::FILTER_ID]))
{
show_error(
- 'The parameters ("'.FiltersLib::APP_PARAMETER.'" and "'.FiltersLib::DATASET_NAME_PARAMETER.') OR "'.
- FiltersLib::FILTER_ID.'" must be specified'
+ 'The parameters ("'.FilterWidgetLib::APP.'" AND "'.FilterWidgetLib::DATASET_NAME.') OR "'.
+ FilterWidgetLib::FILTER_ID.'" must be specified'
);
}
- if (!isset($args[FiltersLib::QUERY_PARAMETER]))
+ // The query parameter is mandatory
+ if (!isset($args[FilterWidgetLib::QUERY]))
{
- show_error('The parameters "'.FiltersLib::QUERY_PARAMETER.'" must be specified');
+ show_error('The parameter "'.FilterWidgetLib::QUERY.'" must be specified');
}
- if (!isset($args[FiltersLib::DATASET_REPRESENTATION]))
+ // The dataset representation parameter is mandatory
+ if (!isset($args[FilterWidgetLib::DATASET_REPRESENTATION]))
{
- show_error('The parameter "'.FiltersLib::DATASET_REPRESENTATION.'" must be specified');
+ show_error('The parameter "'.FilterWidgetLib::DATASET_REPRESENTATION.'" must be specified');
}
- if (isset($args[FiltersLib::DATASET_REPRESENTATION])
- && $args[FiltersLib::DATASET_REPRESENTATION] != FiltersLib::DATASET_REP_TABLESORTER
- && $args[FiltersLib::DATASET_REPRESENTATION] != FiltersLib::DATASET_REP_PIVOTUI)
+ // Checks if the dataset representation parameter is valid
+ if (isset($args[FilterWidgetLib::DATASET_REPRESENTATION])
+ && $args[FilterWidgetLib::DATASET_REPRESENTATION] != FilterWidgetLib::DATASET_REP_TABLESORTER
+ && $args[FilterWidgetLib::DATASET_REPRESENTATION] != FilterWidgetLib::DATASET_REP_PIVOTUI
+ && $args[FilterWidgetLib::DATASET_REPRESENTATION] != FilterWidgetLib::DATASET_REP_TABULATOR)
{
show_error(
- 'The parameter "'.FiltersLib::DATASET_REPRESENTATION.
- '" must be IN ("'.FiltersLib::DATASET_REP_TABLESORTER.'", "'.FiltersLib::DATASET_REP_PIVOTUI.'")'
+ 'The parameter "'.FilterWidgetLib::DATASET_REPRESENTATION.
+ '" must be IN ("'
+ .FilterWidgetLib::DATASET_REP_TABLESORTER.'", "'
+ .FilterWidgetLib::DATASET_REP_PIVOTUI.'", "'
+ .FilterWidgetLib::DATASET_REP_TABULATOR.'")'
);
}
+
+ // If given the session timeout parameter must be a number
+ if (isset($args[FilterWidgetLib::SESSION_TIMEOUT]) && !is_numeric($args[FilterWidgetLib::SESSION_TIMEOUT]))
+ {
+ show_error('The parameter "'.FilterWidgetLib::SESSION_TIMEOUT.'" must be a number');
+ }
}
}
@@ -323,52 +405,53 @@ class FilterWidget extends Widget
*/
private function _startFilterWidget()
{
+ // Looks for expired filter widgets in session and drops them
+ $this->filterwidgetlib->dropExpiredFilterWidgets();
+
// Read the all session for this filter widget
- $session = $this->filterslib->getSession();
+ $session = $this->filterwidgetlib->getSession();
// If session is NOT empty -> a filter was already loaded
if ($session != null)
{
// Retrieve the filterId stored in the session
- $sessionFilterId = $this->filterslib->getSessionElement(FiltersLib::FILTER_ID);
+ $sessionFilterId = $this->filterwidgetlib->getSessionElement(FilterWidgetLib::FILTER_ID);
// If the filter loaded in session is NOT the same that is being requested then empty the session
if ($this->_filterId != $sessionFilterId)
{
- $this->filterslib->setSession(null);
+ $this->filterwidgetlib->setSession(null);
$session = null;
}
else // else if the filter loaded in session is the same that is being requested
{
- // Get SESSION_RELOAD_DATASET from the session
- $sessionReloadDataset = $this->filterslib->getSessionElement(FiltersLib::SESSION_RELOAD_DATASET);
+ // Get SESSION_DATASET_RELOAD from the session
+ $sessionReloadDataset = $this->filterwidgetlib->getSessionElement(FilterWidgetLib::SESSION_DATASET_RELOAD);
// if Filter changed or reload is forced by parameter then reload the Dataset
if ($this->_reloadDataset === true || $sessionReloadDataset === true)
{
// Set as false to stop changing the dataset
- $this->filterslib->setSessionElement(FiltersLib::SESSION_RELOAD_DATASET, false);
+ $this->filterwidgetlib->setSessionElement(FilterWidgetLib::SESSION_DATASET_RELOAD, false);
// Generate dataset query using filters from the session
- $datasetQuery = $this->filterslib->generateDatasetQuery(
+ $datasetQuery = $this->filterwidgetlib->generateDatasetQuery(
$this->_query,
- $this->filterslib->getSessionElement(FiltersLib::SESSION_FILTERS)
+ $this->filterwidgetlib->getSessionElement(FilterWidgetLib::SESSION_FILTERS)
);
// Then retrieve dataset from DB
- $dataset = $this->filterslib->getDataset($datasetQuery);
+ $dataset = $this->filterwidgetlib->getDataset($datasetQuery);
// Save changes into session if data are valid
if (!isError($dataset))
{
$this->_formatDataset($dataset); // marks rows using markRow and format rowns using formatRow
- $this->load->model('system/Filters_model', 'FiltersModel');
-
// Set the new dataset and its attributes in the session
- $this->filterslib->setSessionElement(FiltersLib::SESSION_METADATA, $this->FiltersModel->getExecutedQueryMetaData());
- $this->filterslib->setSessionElement(FiltersLib::SESSION_ROW_NUMBER, count($dataset->retval));
- $this->filterslib->setSessionElement(FiltersLib::SESSION_DATASET, $dataset->retval);
+ $this->filterwidgetlib->setSessionElement(FilterWidgetLib::SESSION_METADATA, $this->FiltersModel->getExecutedQueryMetaData());
+ $this->filterwidgetlib->setSessionElement(FilterWidgetLib::SESSION_ROW_NUMBER, count($dataset->retval));
+ $this->filterwidgetlib->setSessionElement(FilterWidgetLib::SESSION_DATASET, $dataset->retval);
}
}
}
@@ -378,7 +461,7 @@ class FilterWidget extends Widget
if ($session == null)
{
// Load filter definition data from DB
- $definition = $this->filterslib->loadDefinition(
+ $definition = $this->filterwidgetlib->loadDefinition(
$this->_filterId,
$this->_app,
$this->_datasetName,
@@ -386,53 +469,54 @@ class FilterWidget extends Widget
);
// Checks and parse json present into the definition
- $parsedFilterJson = $this->filterslib->parseFilterJson($definition);
+ $parsedFilterJson = $this->filterwidgetlib->parseFilterJson($definition);
if ($parsedFilterJson != null) // if the json is valid
{
// Generate dataset query
- $datasetQuery = $this->filterslib->generateDatasetQuery($this->_query, $parsedFilterJson->filters);
+ $datasetQuery = $this->filterwidgetlib->generateDatasetQuery($this->_query, $parsedFilterJson->filters);
// Then retrieve dataset from DB
- $dataset = $this->filterslib->getDataset($datasetQuery);
+ $dataset = $this->filterwidgetlib->getDataset($datasetQuery);
// Try to load the name of the filter using the PhrasesLib
- $filterName = $this->filterslib->getFilterName($parsedFilterJson);
+ $filterName = $this->filterwidgetlib->getFilterName($parsedFilterJson);
// Save changes into session if data are valid
if (!isError($dataset))
{
$this->_formatDataset($dataset); // marks rows using markRow and format rowns using formatRow
- $this->load->model('system/Filters_model', 'FiltersModel');
-
// Stores an array that contains all the data useful for
- $this->filterslib->setSession(
+ $this->filterwidgetlib->setSession(
array(
- FiltersLib::FILTER_ID => $this->_filterId, // the current filter id
- FiltersLib::APP_PARAMETER => $this->_app, // the current app parameter
- FiltersLib::DATASET_NAME_PARAMETER => $this->_datasetName, // the carrent dataset name
- FiltersLib::SESSION_FILTER_NAME => $filterName, // the current filter name
- FiltersLib::SESSION_FIELDS => $this->FiltersModel->getExecutedQueryListFields(), // all the fields of the dataset
- FiltersLib::SESSION_SELECTED_FIELDS => $this->_getColumnsNames($parsedFilterJson->columns), // all the selected fields
- FiltersLib::SESSION_COLUMNS_ALIASES => $this->_columnsAliases, // all the fields aliases
- FiltersLib::SESSION_ADDITIONAL_COLUMNS => $this->_additionalColumns, // additional columns
- FiltersLib::SESSION_CHECKBOXES => $this->_checkboxes, // the name of the field used to build the checkboxes column
- FiltersLib::SESSION_FILTERS => $parsedFilterJson->filters, // all the filters used to filter the dataset
- FiltersLib::SESSION_METADATA => $this->FiltersModel->getExecutedQueryMetaData(), // the metadata of the dataset
- FiltersLib::SESSION_ROW_NUMBER => count($dataset->retval), // the number of loaded rows by this filter
- FiltersLib::SESSION_DATASET => $dataset->retval, // the entire dataset
- FiltersLib::SESSION_RELOAD_DATASET => false, // if the dataset must be reloaded, not needed the first time
- FiltersLib::SESSION_DATASET_REPRESENTATION => $this->_datasetRepresentation, // the choosen dataset representation
- FiltersLib::SESSION_DATASET_REP_OPTIONS => $this->_datasetRepresentationOptions // the choosen dataset representation options
+ FilterWidgetLib::FILTER_ID => $this->_filterId, // the current filter id
+ FilterWidgetLib::APP => $this->_app, // the current app parameter
+ FilterWidgetLib::DATASET_NAME => $this->_datasetName, // the carrent dataset name
+ FilterWidgetLib::SESSION_FILTER_NAME => $filterName, // the current filter name
+ FilterWidgetLib::SESSION_FIELDS => $this->FiltersModel->getExecutedQueryListFields(), // all the fields of the dataset
+ FilterWidgetLib::SESSION_SELECTED_FIELDS => $this->_getColumnsNames($parsedFilterJson->columns), // all the selected fields
+ FilterWidgetLib::SESSION_COLUMNS_ALIASES => $this->_columnsAliases, // all the fields aliases
+ FilterWidgetLib::SESSION_ADDITIONAL_COLUMNS => $this->_additionalColumns, // additional columns
+ FilterWidgetLib::SESSION_CHECKBOXES => $this->_checkboxes, // the name of the field used to build the checkboxes column
+ FilterWidgetLib::SESSION_FILTERS => $parsedFilterJson->filters, // all the filters used to filter the dataset
+ FilterWidgetLib::SESSION_METADATA => $this->FiltersModel->getExecutedQueryMetaData(), // the metadata of the dataset
+ FilterWidgetLib::SESSION_ROW_NUMBER => count($dataset->retval), // the number of loaded rows by this filter
+ FilterWidgetLib::SESSION_DATASET => $dataset->retval, // the entire dataset
+ FilterWidgetLib::SESSION_DATASET_RELOAD => false, // if the dataset must be reloaded, not needed the first time
+ FilterWidgetLib::SESSION_DATASET_REPRESENTATION => $this->_datasetRepresentation, // the choosen dataset representation
+ FilterWidgetLib::SESSION_DATASET_REP_OPTIONS => $this->_datasetRepresentationOptions, // the choosen dataset representation options
+ FilterWidgetLib::SESSION_DATASET_REP_FIELDS_DEFS => $this->_datasetRepFieldsDefs // the choosen dataset representation record fields definition
)
);
}
}
}
+ // NOTE: latest operations to be performed in the session to be shure that they are always present
// To be always stored in the session, otherwise is not possible to load data from Filters controller
- // NOTE: must the latest operation to be performed in the session to be shure that is always present
- $this->filterslib->setSessionElement(FiltersLib::REQUIRED_PERMISSIONS_PARAMETER, $this->_requiredPermissions);
+ $this->filterwidgetlib->setSessionElement(FilterWidgetLib::REQUIRED_PERMISSIONS, $this->_requiredPermissions);
+ // Renew or set the session expiring time
+ $this->filterwidgetlib->setSessionElement(FilterWidgetLib::SESSION_TIMEOUT, strtotime('+'.$this->_sessionTimeout.' minutes', time()));
}
/**
@@ -441,7 +525,7 @@ class FilterWidget extends Widget
private function _setFilterMenu()
{
// Generates the filters structure array
- $filterMenu = $this->filterslib->generateFilterMenu(
+ $filterMenu = $this->filterwidgetlib->generateFilterMenu(
$this->router->directory.$this->router->class.'/'.$this->router->method
);
}
diff --git a/application/widgets/Organisationseinheit_widget.php b/application/widgets/Organisationseinheit_widget.php
index 67d1598b0..e4fbfe2ba 100644
--- a/application/widgets/Organisationseinheit_widget.php
+++ b/application/widgets/Organisationseinheit_widget.php
@@ -5,16 +5,34 @@ class Organisationseinheit_widget extends DropdownWidget
public function display($widgetData)
{
$this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
-
+
if (isset($widgetData['typ']))
- $typ = $widgetData['typ'];
+ {
+ $this->setElementsArray($this->OrganisationseinheitModel->getRecursiveList($widgetData['typ']));
+ }
+ // If 'organisationseinheit' (array of specific oe_kurzbz) is given, retrieve these organisational units only
+ elseif (isset($widgetData['organisationseinheit']) && !empty($widgetData['organisationseinheit']))
+ {
+ $condition = '
+ oe_kurzbz IN (\''. implode('\',\'', $widgetData['organisationseinheit']) . '\') AND
+ aktiv = TRUE
+ ';
+ $this->addSelectToModel($this->OrganisationseinheitModel, 'oe_kurzbz', 'organisationseinheittyp_kurzbz || \' \' || bezeichnung');
+ $this->OrganisationseinheitModel->addOrder('organisationseinheittyp_kurzbz', 'ASC');
+ $this->setElementsArray(
+ $this->OrganisationseinheitModel->loadWhere($condition),
+ true,
+ $this->p->t('lehre', 'organisationseinheit'),
+ 'No organisational units found'
+ );
+ }
+ // Default: retrieve tree of all organisational units
else
- $typ = null;
-
- // NOTE: no need to call addSelectToModel because getRecursiveList already returns
- // the correct names of the fields
-
- $this->setElementsArray($this->OrganisationseinheitModel->getRecursiveList($typ));
+ {
+ // NOTE: no need to call addSelectToModel because getRecursiveList already returns
+ // the correct names of the fields
+ $this->setElementsArray($this->OrganisationseinheitModel->getRecursiveList());
+ }
$this->loadDropDownView($widgetData);
}
diff --git a/application/widgets/Studiengang_widget.php b/application/widgets/Studiengang_widget.php
index a09c865f5..250f2a9bc 100644
--- a/application/widgets/Studiengang_widget.php
+++ b/application/widgets/Studiengang_widget.php
@@ -8,15 +8,29 @@ class Studiengang_widget extends DropdownWidget
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$this->StudiengangModel->addOrder('kurzbzlang');
- $this->addSelectToModel($this->StudiengangModel, 'studiengang_kz', '\'(\' || kurzbzlang || \') \' || bezeichnung');
-
- $this->setElementsArray(
- $this->StudiengangModel->loadWhere(array('aktiv' => true)),
- true,
- 'Select a studiengang...',
- 'No studiengaenge found'
- );
-
+ $this->addSelectToModel($this->StudiengangModel, 'studiengang_kz', '\'(\' || upper(typ||kurzbz) || \') \' || tbl_studiengang.bezeichnung');
+
+ // If 'studiengang' (array of specific studiengaenge) is given, retrieve these studiengaenge only
+ if (isset($widgetData['studiengang']) && !empty($widgetData['studiengang']))
+ {
+ $condition = '
+ studiengang_kz IN ('. implode(',', $widgetData['studiengang']) . ') AND
+ aktiv = true
+ ';
+ }
+ // Default: retrieve all studiengaenge
+ else
+ {
+ $condition = array('aktiv' => true);
+ }
+
+ $this->setElementsArray(
+ $this->StudiengangModel->loadWhere($condition),
+ true,
+ $this->p->t('lehre', 'studiengang'),
+ 'No studiengaenge found'
+ );
+
$this->loadDropDownView();
}
}
\ No newline at end of file
diff --git a/application/widgets/Studiensemester_widget.php b/application/widgets/Studiensemester_widget.php
index bc1c0a201..dc6e28d38 100644
--- a/application/widgets/Studiensemester_widget.php
+++ b/application/widgets/Studiensemester_widget.php
@@ -6,14 +6,14 @@ class Studiensemester_widget extends DropdownWidget
{
// Studiensemester
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
- $this->StudiensemesterModel->addOrder('studiensemester_kurzbz', 'DESC');
+ $this->StudiensemesterModel->addOrder('start', 'DESC');
$this->addSelectToModel($this->StudiensemesterModel, 'studiensemester_kurzbz', 'studiensemester_kurzbz');
$this->setElementsArray(
$this->StudiensemesterModel->load(),
true,
- 'Select a studiensemester...',
+ $this->p->t('lehre', 'studiensemester'),
'No studiensemester found'
);
diff --git a/application/widgets/TableWidget.php b/application/widgets/TableWidget.php
new file mode 100644
index 000000000..5a000601f
--- /dev/null
+++ b/application/widgets/TableWidget.php
@@ -0,0 +1,440 @@
+load->library('TableWidgetLib'); // Loads the TableWidgetLib that contains all the used logic
+
+ $this->_initTableWidget($args); // checks parameters and initialize properties
+
+ $this->tablewidgetlib->setTableUniqueIdByParams($args);
+
+ // Let's start if it's allowed
+ // NOTE: If it is NOT allowed then no data are loaded
+ if ($this->tablewidgetlib->isAllowed($this->_requiredPermissions))
+ {
+ $this->_startTableWidget($args[TableWidgetLib::TABLE_UNIQUE_ID]);
+ }
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ // Public methods
+
+ /**
+ * Called when echoing the table widget call
+ */
+ public function display($widgetData)
+ {
+ $this->view(self::WIDGET_URL_TABLE, array(
+ 'tableUniqueId' => $widgetData[TableWidgetLib::TABLE_UNIQUE_ID]
+ )); // GUI starts here
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ // Public static methods used to load views and to access statically to some properies of the TableWidget
+
+ /**
+ * Loads the view related to the dataset, here is decided how to represent the dataset (ex: tablesorter, pivotUI, ...)
+ */
+ public static function loadViewDataset()
+ {
+ if (self::$_TableWidgetInstance->_datasetRepresentation == TableWidgetLib::DATASET_REP_TABLESORTER)
+ {
+ self::_loadView(self::WIDGET_URL_DATASET_TABLESORTER);
+ }
+
+ if (self::$_TableWidgetInstance->_datasetRepresentation == TableWidgetLib::DATASET_REP_PIVOTUI)
+ {
+ self::_loadView(self::WIDGET_URL_DATASET_PIVOTUI);
+ }
+
+ if (self::$_TableWidgetInstance->_datasetRepresentation == TableWidgetLib::DATASET_REP_TABULATOR)
+ {
+ self::_loadView(self::WIDGET_URL_DATASET_TABULATOR);
+ }
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ // Private methods
+
+ /**
+ * Checks parameters and initialize all the properties of this TableWidget
+ */
+ private function _initTableWidget($args)
+ {
+ $this->_checkParameters($args);
+
+ // If here then everything is ok
+
+ // Initialize class properties
+ $this->_requiredPermissions = null;
+ $this->_reloadDataset = true; // by default the dataset is NOT cached in session
+ $this->_query = null;
+ $this->_additionalColumns = null;
+ $this->_columnsAliases = null;
+ $this->_formatRow = null;
+ $this->_markRow = null;
+ $this->_checkboxes = null;
+ $this->_datasetRepresentation = null;
+ $this->_datasetRepresentationOptions = null;
+ $this->_datasetRepFieldsDefs = null;
+ $this->_sessionTimeout = TableWidgetLib::SESSION_DEFAULT_TIMEOUT;
+
+ // Retrieved the required permissions parameter if present
+ if (isset($args[TableWidgetLib::REQUIRED_PERMISSIONS]))
+ {
+ $this->_requiredPermissions = $args[TableWidgetLib::REQUIRED_PERMISSIONS];
+ }
+
+ // How to retrieve data for the table: SQL statement or a result from DB
+ if (isset($args[TableWidgetLib::QUERY]))
+ {
+ $this->_query = $args[TableWidgetLib::QUERY];
+ }
+
+ if (isset($args[TableWidgetLib::DATASET_RELOAD]))
+ {
+ $this->_reloadDataset = $args[TableWidgetLib::DATASET_RELOAD];
+ }
+
+ // Parameter is used to add extra columns to the dataset
+ if (isset($args[TableWidgetLib::ADDITIONAL_COLUMNS])
+ && is_array($args[TableWidgetLib::ADDITIONAL_COLUMNS])
+ && count($args[TableWidgetLib::ADDITIONAL_COLUMNS]) > 0)
+ {
+ $this->_additionalColumns = $args[TableWidgetLib::ADDITIONAL_COLUMNS];
+ }
+
+ // Parameter is used to add use aliases for the columns fo the dataset
+ if (isset($args[TableWidgetLib::COLUMNS_ALIASES])
+ && is_array($args[TableWidgetLib::COLUMNS_ALIASES])
+ && count($args[TableWidgetLib::COLUMNS_ALIASES]) > 0)
+ {
+ $this->_columnsAliases = $args[TableWidgetLib::COLUMNS_ALIASES];
+ }
+
+ // Parameter that contains a function to format the rows of the dataset
+ if (isset($args[TableWidgetLib::FORMAT_ROW]) && is_callable($args[TableWidgetLib::FORMAT_ROW]))
+ {
+ $this->_formatRow = $args[TableWidgetLib::FORMAT_ROW];
+ }
+
+ // Parameter that contains a function to mark in the GUI the rows of the dataset
+ if (isset($args[TableWidgetLib::MARK_ROW]) && is_callable($args[TableWidgetLib::MARK_ROW]))
+ {
+ $this->_markRow = $args[TableWidgetLib::MARK_ROW];
+ }
+
+ // Parameter used to specify the column of the dataset that will be used
+ // as id of the checkboxes column in the GUI
+ if (isset($args[TableWidgetLib::CHECKBOXES]))
+ {
+ $this->_checkboxes = $args[TableWidgetLib::CHECKBOXES];
+ }
+
+ // To specify how to represent the dataset (ex: tablesorter, pivotUI, ...)
+ if (isset($args[TableWidgetLib::DATASET_REPRESENTATION])
+ && ($args[TableWidgetLib::DATASET_REPRESENTATION] == TableWidgetLib::DATASET_REP_TABLESORTER
+ || $args[TableWidgetLib::DATASET_REPRESENTATION] == TableWidgetLib::DATASET_REP_PIVOTUI
+ || $args[TableWidgetLib::DATASET_REPRESENTATION] == TableWidgetLib::DATASET_REP_TABULATOR))
+ {
+ $this->_datasetRepresentation = $args[TableWidgetLib::DATASET_REPRESENTATION];
+ }
+
+ // To specify options for the dataset representation (ex: tablesorter, pivotUI, ...)
+ if (isset($args[TableWidgetLib::DATASET_REP_OPTIONS]) && !isEmptyString($args[TableWidgetLib::DATASET_REP_OPTIONS]))
+ {
+ $this->_datasetRepresentationOptions = $args[TableWidgetLib::DATASET_REP_OPTIONS];
+ }
+
+ // To specify how to represent each record field
+ if (isset($args[TableWidgetLib::DATASET_REP_FIELDS_DEFS]) && !isEmptyString($args[TableWidgetLib::DATASET_REP_FIELDS_DEFS]))
+ {
+ $this->_datasetRepFieldsDefs = $args[TableWidgetLib::DATASET_REP_FIELDS_DEFS];
+ }
+
+ // To specify the expiring session time
+ if (isset($args[TableWidgetLib::SESSION_TIMEOUT]) && is_numeric($args[TableWidgetLib::SESSION_TIMEOUT]))
+ {
+ $this->_sessionTimeout = $args[TableWidgetLib::SESSION_TIMEOUT];
+ }
+ }
+
+ /**
+ * Checks the required parameters used to call this TableWidget
+ */
+ private function _checkParameters($args)
+ {
+ // If no options are given to this widget...
+ if (!is_array($args) || (is_array($args) && count($args) == 0))
+ {
+ show_error('Second parameter of the widget call must be a NOT empty associative array');
+ }
+ else // ...otherwise
+ {
+ // The unique id parameter is mandatory
+ if (!isset($args[TableWidgetLib::TABLE_UNIQUE_ID]))
+ {
+ show_error('The parameter "'.TableWidgetLib::TABLE_UNIQUE_ID.'" must be specified');
+ }
+
+ // The query parameter is mandatory
+ if (!isset($args[TableWidgetLib::QUERY]))
+ {
+ show_error('The parameter "'.TableWidgetLib::QUERY.'" must be specified');
+ }
+
+ // The dataset representation parameter is mandatory
+ if (!isset($args[TableWidgetLib::DATASET_REPRESENTATION]))
+ {
+ show_error('The parameter "'.TableWidgetLib::DATASET_REPRESENTATION.'" must be specified');
+ }
+
+ // Checks if the dataset representation parameter is valid
+ if (isset($args[TableWidgetLib::DATASET_REPRESENTATION])
+ && $args[TableWidgetLib::DATASET_REPRESENTATION] != TableWidgetLib::DATASET_REP_TABLESORTER
+ && $args[TableWidgetLib::DATASET_REPRESENTATION] != TableWidgetLib::DATASET_REP_PIVOTUI
+ && $args[TableWidgetLib::DATASET_REPRESENTATION] != TableWidgetLib::DATASET_REP_TABULATOR)
+ {
+ show_error(
+ 'The parameter "'.TableWidgetLib::DATASET_REPRESENTATION.
+ '" must be IN ("'
+ .TableWidgetLib::DATASET_REP_TABLESORTER.'", "'
+ .TableWidgetLib::DATASET_REP_PIVOTUI.'", "'
+ .TableWidgetLib::DATASET_REP_TABULATOR.'")'
+ );
+ }
+
+ // If given the session timeout parameter must be a number
+ if (isset($args[TableWidgetLib::SESSION_TIMEOUT]) && !is_numeric($args[TableWidgetLib::SESSION_TIMEOUT]))
+ {
+ show_error('The parameter "'.TableWidgetLib::SESSION_TIMEOUT.'" must be a number');
+ }
+ }
+ }
+
+ /**
+ * Contains all the logic used to load all the data needed to the TableWidget
+ */
+ private function _startTableWidget($tableUniqueId)
+ {
+ // Looks for expired table widgets in session and drops them
+ $this->tablewidgetlib->dropExpiredTableWidgets();
+
+ // Read the all session for this table widget
+ $session = $this->tablewidgetlib->getSession();
+
+ // If session is NOT empty -> a table was already loaded
+ if ($session != null)
+ {
+ // Get SESSION_DATASET_RELOAD from the session
+ $sessionReloadDataset = $this->tablewidgetlib->getSessionElement(TableWidgetLib::SESSION_DATASET_RELOAD);
+
+ // if Filter changed or reload is forced by parameter then reload the Dataset
+ if ($this->_reloadDataset === true || $sessionReloadDataset === true)
+ {
+ // Set as false to stop changing the dataset
+ $this->tablewidgetlib->setSessionElement(TableWidgetLib::SESSION_DATASET_RELOAD, false);
+
+ // Generate dataset query using tables from the session
+ $datasetQuery = $this->tablewidgetlib->generateDatasetQuery($this->_query);
+
+ // Then retrieve dataset from DB
+ $dataset = $this->tablewidgetlib->getDataset($datasetQuery);
+
+ // Save changes into session if data are valid
+ if (!isError($dataset))
+ {
+ $this->_formatDataset($dataset); // marks rows using markRow and format rowns using formatRow
+
+ // Set the new dataset and its attributes in the session
+ $this->tablewidgetlib->setSessionElement(TableWidgetLib::SESSION_METADATA, $this->tablewidgetlib->getExecutedQueryMetaData());
+ $this->tablewidgetlib->setSessionElement(TableWidgetLib::SESSION_ROW_NUMBER, count($dataset->retval));
+ $this->tablewidgetlib->setSessionElement(TableWidgetLib::SESSION_DATASET, $dataset->retval);
+ }
+ }
+ }
+
+ // If the session is empty -> first time that this table is loaded
+ if ($session == null)
+ {
+ // Generate dataset query
+ $datasetQuery = $this->tablewidgetlib->generateDatasetQuery($this->_query);
+
+ // Then retrieve dataset from DB
+ $dataset = $this->tablewidgetlib->getDataset($datasetQuery);
+
+ // Save changes into session if data are valid
+ if (!isError($dataset))
+ {
+ $this->_formatDataset($dataset); // marks rows using markRow and format rowns using formatRow
+
+ // Stores an array that contains all the data useful for
+ $this->tablewidgetlib->setSession(
+ array(
+ TableWidgetLib::TABLE_UNIQUE_ID => $tableUniqueId, // table unique id
+ TableWidgetLib::SESSION_FIELDS => $this->tablewidgetlib->getExecutedQueryListFields(), // all the fields of the dataset
+ TableWidgetLib::SESSION_COLUMNS_ALIASES => $this->_columnsAliases, // all the fields aliases
+ TableWidgetLib::SESSION_ADDITIONAL_COLUMNS => $this->_additionalColumns, // additional columns
+ TableWidgetLib::SESSION_CHECKBOXES => $this->_checkboxes, // the name of the field used to build the checkboxes column
+ TableWidgetLib::SESSION_METADATA => $this->tablewidgetlib->getExecutedQueryMetaData(), // the metadata of the dataset
+ TableWidgetLib::SESSION_ROW_NUMBER => count($dataset->retval), // the number of loaded rows by this table
+ TableWidgetLib::SESSION_DATASET => $dataset->retval, // the entire dataset
+ TableWidgetLib::SESSION_DATASET_RELOAD => false, // if the dataset must be reloaded, not needed the first time
+ TableWidgetLib::SESSION_DATASET_REPRESENTATION => $this->_datasetRepresentation, // the choosen dataset representation
+ TableWidgetLib::SESSION_DATASET_REP_OPTIONS => $this->_datasetRepresentationOptions, // the choosen dataset representation options
+ TableWidgetLib::SESSION_DATASET_REP_FIELDS_DEFS => $this->_datasetRepFieldsDefs // the choosen dataset representation record fields definition
+ )
+ );
+ }
+ }
+
+ // NOTE: must the latest operation to be performed in the session to be shure that is always present
+ // To be always stored in the session, otherwise is not possible to load data from Filters controller
+ $this->tablewidgetlib->setSessionElement(TableWidgetLib::REQUIRED_PERMISSIONS, $this->_requiredPermissions);
+ // Renew or set the session expiring time
+ $this->tablewidgetlib->setSessionElement(TableWidgetLib::SESSION_TIMEOUT, strtotime('+'.$this->_sessionTimeout.' minutes', time()));
+ }
+
+ /**
+ * Calls the method _markRow and _formatRow to marks rows using markRow and format rowns using formatRow
+ * NOTE: this method operates directly on the retrieved dataset: parameter passed by reference
+ */
+ private function _formatDataset(&$rawDataset)
+ {
+ if (hasData($rawDataset) && is_array($rawDataset->retval))
+ {
+ // For each row of the data set
+ for ($rowCounter = 0; $rowCounter < count($rawDataset->retval); $rowCounter++)
+ {
+ // Calls the methods to mark and to format a row
+ // NOTE: keep this order! the markRow function given as parameter is supposing to work
+ // on a raw dataset, NOT on a formatted one
+ $rawDataset->retval[$rowCounter]->MARK_ROW_CLASS = $this->_markRow($rawDataset->retval[$rowCounter]);
+ $this->_formatRow($rawDataset->retval[$rowCounter]);
+ }
+ }
+ }
+
+ /**
+ * Formats the columns of all the rows of the entire dataset
+ * - converts booleans into strings "true" and "false"
+ * - format dates using the format string defined in DEFAULT_DATE_FORMAT
+ * Calls the parameter formatRow if it was given and if it is a valid funtion
+ * NOTE: this method operates directly on the retrieved dataset: parameter passed by reference
+ */
+ private function _formatRow(&$rawDatasetRow)
+ {
+ // For each column of the row
+ foreach ($rawDatasetRow as $columnName => $columnValue)
+ {
+ // Basic conversions
+ if (is_bool($columnValue))
+ {
+ $rawDatasetRow->{$columnName} = ($columnValue === true ? 'true' : 'false');
+ }
+ elseif (DateTime::createFromFormat('Y-m-d H:i:s', $columnValue) !== false)
+ {
+ $rawDatasetRow->{$columnName} = date(self::DEFAULT_DATE_FORMAT, strtotime($columnValue));
+ }
+ }
+
+ // If a valid function call the given formatRow
+ if ($this->_formatRow != null && is_callable($this->_formatRow))
+ {
+ $formatRowFunction = $this->_formatRow;
+ $rawDatasetRow = $formatRowFunction($rawDatasetRow);
+ }
+ }
+
+ /**
+ * Returns a string that contains a class name used to mark rows in the dataset table
+ * Calls the parameter markRow if it was given and if it is a valid funtion
+ */
+ private function _markRow($rawDatasetRow)
+ {
+ // If a valid function call the given markRow
+ if ($this->_markRow != null && is_callable($this->_markRow))
+ {
+ $markRowFunction = $this->_markRow;
+ $class = $markRowFunction($rawDatasetRow);
+ }
+
+ return !isset($class) ? '' : $class;
+ }
+
+ /**
+ * Utility method that retrieves the name of the columns present in a table JSON definition
+ */
+ private function _getColumnsNames($columns)
+ {
+ $columnsNames = array();
+
+ foreach ($columns as $key => $obj)
+ {
+ if (isset($obj->name))
+ {
+ $columnsNames[] = $obj->name;
+ }
+ }
+
+ return $columnsNames;
+ }
+
+ /**
+ * Loads a view using the given viewName and eventually other parameters
+ */
+ private static function _loadView($viewName, $parameters = null)
+ {
+ $ci =& get_instance();
+ $ci->load->view($viewName, $parameters);
+ }
+}
diff --git a/application/widgets/html/DropdownWidget.php b/application/widgets/html/DropdownWidget.php
index 5c28e5a9f..eba79900d 100644
--- a/application/widgets/html/DropdownWidget.php
+++ b/application/widgets/html/DropdownWidget.php
@@ -107,7 +107,7 @@ class DropdownWidget extends HTMLWidget
{
if (is_object($elements) && isset($elements->retval))
{
- show_error($elements->retval);
+ show_error(getError($elements));
}
else if (is_string($elements))
{
diff --git a/cis/infoterminal/index.php b/cis/infoterminal/index.php
index acbd7b0e4..a3a7dfb91 100644
--- a/cis/infoterminal/index.php
+++ b/cis/infoterminal/index.php
@@ -20,13 +20,7 @@
* Rudolf Hangl < rudolf.hangl@technikum-wien.at >
* Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at >
*/
-
-// ------------------------------------------------------------------------------------------
-// Session Starten - Merk Anwenderdaten
-// ------------------------------------------------------------------------------------------
- $SESSIONID=trim((isset($_REQUEST['SESSIONID']) ? $_REQUEST['SESSIONID']:''));
- if (session_start($SESSIONID))
- $SESSIONID=@session_id();
+session_start();
require_once('../../config/cis.config.inc.php');
require_once('../../include/wochenplan.class.php');
@@ -1980,6 +1974,9 @@ function personen_id_read_mitarbeiter_oder_student($db,$person_id)
*/
function read_create_html_news($db,$fachbereich_kurzbz,$studiengang_kz,$semester)
{
+ if(defined('CIS_INFOSCREEN_NEWS_ANZEIGEN') && CIS_INFOSCREEN_NEWS_ANZEIGEN==false)
+ return '';
+
// ------------------------------------------------------------------------------------------
// Lesen Newstickerzeilen
// ------------------------------------------------------------------------------------------
diff --git a/cis/private/bildupload.php b/cis/private/bildupload.php
index 968f67ab0..b8ce66422 100644
--- a/cis/private/bildupload.php
+++ b/cis/private/bildupload.php
@@ -23,8 +23,6 @@
*/
// Oberflaeche zum Upload von Bildern
-
-//session_cache_limiter('none'); //muss gesetzt werden damit der upload in chrome und das automatische updaten des profilbildes funktioniert
require_once('../../config/cis.config.inc.php');
require_once('../../include/functions.inc.php');
require_once('../../include/person.class.php');
@@ -32,67 +30,52 @@ require_once('../../include/benutzer.class.php');
require_once('../../include/akte.class.php');
require_once('../../include/phrasen.class.php');
require_once('../../include/fotostatus.class.php');
-
$user = get_uid();
$sprache = getSprache();
$p = new phrasen($sprache);
-
echo '
+
-
-
'.
- cropCss().'
-
-
-
-
-
-
-
-
-
+
+
'.$p->t('profil/Bildupload').'
+
'.$p->t('profil/Bildupload').' ';
-
function resize($filename, $width, $height)
{
- $ext = explode('.',$_FILES['bild']['name']);
- $ext = strtolower($ext[count($ext)-1]);
+ $ext = explode('.',$_FILES['bild']['name']);
+ $ext = strtolower($ext[count($ext)-1]);
+ // Hoehe und Breite neu berechnen
+ list($width_orig, $height_orig) = getimagesize($filename);
+ if ($width && ($width_orig < $height_orig))
+ {
+ $width = ($height / $height_orig) * $width_orig;
+ }
+ else
+ {
+ $height = ($width / $width_orig) * $height_orig;
+ }
- // Hoehe und Breite neu berechnen
- list($width_orig, $height_orig) = getimagesize($filename);
+ $image_p = imagecreatetruecolor($width, $height);
- if ($width && ($width_orig < $height_orig))
- {
- $width = ($height / $height_orig) * $width_orig;
- }
- else
- {
- $height = ($width / $width_orig) * $height_orig;
- }
+ $image = imagecreatefromjpeg($filename);
- $image_p = imagecreatetruecolor($width, $height);
+ //Bild nur verkleinern aber nicht vergroessern
+ if($width_orig>$width || $height_orig>$height)
+ imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
+ else
+ $image_p = $image;
- $image = imagecreatefromjpeg($filename);
+ imagejpeg($image_p, $filename, 80);
- //Bild nur verkleinern aber nicht vergroessern
- if($width_orig>$width || $height_orig>$height)
- imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
- else
- $image_p = $image;
-
- imagejpeg($image_p, $filename, 80);
-
- @imagedestroy($image_p);
- @imagedestroy($image);
+ @imagedestroy($image_p);
+ @imagedestroy($image);
}
-
-
if(isset($_GET['person_id']))
{
$benutzer = new benutzer();
@@ -107,269 +90,132 @@ if(isset($_GET['person_id']))
}
else
die($p->t('global/fehlerBeiDerParameteruebergabe'));
+//Bei Upload des Bildes
+if(isset($_POST['submitbild']))
+{
+ if(isset($_FILES['bild']['tmp_name']))
+ {
+ //Extension herausfiltern
+ $ext = explode('.',$_FILES['bild']['name']);
+ $ext = mb_strtolower($ext[count($ext)-1]);
+ $width=101;
+ $height=130;
-echo '
';
-echo $p->t('profil/BilduploadInfotext',array($p->t('dms_link/bildRichtlinien'))).'
';
-echo '
- '.$p->t('profil/fotoAuswählen').'
-
-
-
-
-
';
+ //--check that it's a jpeg
+ if ($ext=='jpg' || $ext=='jpeg')
+ {
+ $filename = $_FILES['bild']['tmp_name'];
-if (isset($_POST['src'])) {
- $src = $_POST['src'];
- echo $src;
+ //groesse auf maximal 827x1063 begrenzen
+ resize($filename, 827, 1063);
+
+ $fp = fopen($filename,'r');
+ //auslesen
+ $content = fread($fp, filesize($filename));
+ fclose($fp);
+
+ $akte = new akte();
+
+ if($akte->getAkten($_GET['person_id'], 'Lichtbil'))
+ {
+ if(count($akte->result)>0)
+ {
+ $akte = $akte->result[0];
+ $akte->new = false;
+ }
+ else
+ $akte->new = true;
+ }
+ else
+ {
+ $akte->new = true;
+ }
+
+ $akte->dokument_kurzbz = 'Lichtbil';
+ $akte->person_id = $_GET['person_id'];
+ $akte->inhalt = base64_encode($content);
+ $akte->mimetype = "image/jpg";
+ $akte->erstelltam = date('Y-m-d H:i:s');
+ $akte->gedruckt = false;
+ $akte->titel = "Lichtbild_".$_GET['person_id'].".jpg";
+ $akte->bezeichnung = "Lichtbild gross";
+ $akte->updateamum = date('Y-m-d H:i:s');
+ $akte->updatevon = $user;
+ $akte->insertamum = date('Y-m-d H:i:s');
+ $akte->insertvon = $user;
+ $akte->uid = '';
+
+ if(!$akte->save())
+ {
+ echo '
Fehler: '.$akte->errormsg.'
';
+ }
+
+ //groesse auf maximal 101x130 begrenzen
+ resize($filename, 101, 130);
+
+ //in DB speichern
+ //File oeffnen
+ $fp = fopen($filename,'r');
+ //auslesen
+ $content = fread($fp, filesize($filename));
+ fclose($fp);
+ //in base64-Werte umrechnen
+ $content = base64_encode($content);
+ $person = new person();
+ if($person->load($_GET['person_id']))
+ {
+ //base64 Wert in die Datenbank speichern
+ $person->foto = $content;
+ $person->new = false;
+ if($person->save())
+ {
+ $fs = new fotostatus();
+ $fs->person_id=$person->person_id;
+ $fs->fotostatus_kurzbz='hochgeladen';
+ $fs->datum = date('Y-m-d');
+ $fs->insertamum = date('Y-m-d H:i:s');
+ $fs->insertvon = $user;
+ $fs->updateamum = date('Y-m-d H:i:s');
+ $fs->updatevon = $user;
+ if(!$fs->save(true))
+ echo '
Fehler beim Setzen des Bildstatus
';
+ else
+ {
+
+ echo "
Bild wurde erfolgreich gespeichert
+ ";
+ }
+ }
+ else
+ echo '
'.$person->errormsg.'
';
+ }
+ else
+ echo '
'.$person->errormsg.'
';
+ }
+ else
+ echo '
'.$p->t('profil/nurJPGBilder').'
';
+ }
}
-function cropCss() {
- return '
- ';
-}
+//echo '
';
+echo $p->t('profil/BilduploadInfotext',array($p->t('dms_link/bildRichtlinien'))).'
+
+ ';
?>
+
diff --git a/cis/private/coodle/coodle_worker.php b/cis/private/coodle/coodle_worker.php
index a16fe553c..8f986e540 100644
--- a/cis/private/coodle/coodle_worker.php
+++ b/cis/private/coodle/coodle_worker.php
@@ -314,6 +314,24 @@ switch($work)
echo $coodletermin->errormsg;
break;
+
+ case 'countTermine':
+ if(isset($_POST['coodle_id']))
+ $coodle_id = $_POST['coodle_id'];
+ else
+ die('CoodleID fehlt');
+
+ $coodle = new coodle();
+ if ($coodle->getTermine($coodle_id))
+ {
+ echo count($coodle->result);
+ }
+ else
+ {
+ echo $coodle->errormsg;
+ }
+
+ break;
default:
die('Invalid Work Parameter');
}
diff --git a/cis/private/coodle/termin.php b/cis/private/coodle/termin.php
index 8f0a2cfb7..dd61878c0 100644
--- a/cis/private/coodle/termin.php
+++ b/cis/private/coodle/termin.php
@@ -76,11 +76,12 @@ if(isset($_POST['action']) && $_POST['action']=='start')
// Start der Umfrage
$coodle_termine = new coodle();
$coodle_termine->getTermine($coodle_id);
- if(count($coodle_termine->result)>0)
+ // Die Terminoption "keine Auswahl wird immer benötigt. Deshalb > 1
+ if(count($coodle_termine->result) > 1)
{
$coodle_ressource = new coodle();
$coodle_ressource->getRessourcen($coodle_id);
- if(count($coodle_ressource->result)>0)
+ if(count($coodle_ressource->result) > 0)
{
// Status aendern
$coodle->coodle_status_kurzbz='laufend';
@@ -135,16 +136,18 @@ if(isset($_POST['action']) && $_POST['action']=='start')
Bitte folgen Sie dem Link, um Ihre Terminwünsche bekannt zu geben:
Link zur Terminumfrage
+ '.($coodle->beschreibung != '' ? '
Beschreibung:
- '.$coodle->beschreibung.'
+ '.$coodle->beschreibung.'
' : '').'
'.nl2br($sign);
$text=$anrede."!\n\nSie wurden zu einer Terminumfrage zum Thema \"".$db->convert_html_chars($coodle->titel)."\" eingeladen.\n
Bitte folgen Sie dem Link, um Ihre Terminwünsche bekannt zu geben:\n
$link\n\n
+ ".($coodle->beschreibung != "" ? "
Beschreibung:\n\n
".strip_tags($coodle->beschreibung)."
- \n\n
+ \n\n" : "")."
$sign";
$mail = new mail($email, $von,'Terminumfrage - '.$coodle->titel, $text);
@@ -317,7 +320,6 @@ echo '
- '.$p->t('coodle/ressourcenBeschreibung').'
+ '.$p->t('coodle/ressourcenBeschreibung');
+ echo '
'.$p->t('coodle/externePersonhinzu').'
'.$p->t('coodle/umfrageStarten').'
-
'.$p->t('coodle/startBeschreibung').'
diff --git a/cis/private/lehre/benotungstool/nachpruefungeintragen.php b/cis/private/lehre/benotungstool/nachpruefungeintragen.php
index f1afe0420..0ad985e76 100644
--- a/cis/private/lehre/benotungstool/nachpruefungeintragen.php
+++ b/cis/private/lehre/benotungstool/nachpruefungeintragen.php
@@ -170,7 +170,9 @@ if (isset($_REQUEST["submit"]) && ($_REQUEST["student_uid"] != '') )
if($pr->getPruefungen($student_uid, "Termin1", $lvid, $stsem))
{
if ($pr->result)
+ {
$termin1 = 1;
+ }
else
{
$lvnote = new lvgesamtnote();
@@ -183,6 +185,7 @@ if (isset($_REQUEST["submit"]) && ($_REQUEST["student_uid"] != '') )
else
{
$pr_note = 9;
+ $pr_punkte = '';
$benotungsdatum = $jetzt;
}
diff --git a/cis/private/lehre/fotoliste.pdf.php b/cis/private/lehre/fotoliste.pdf.php
index 8054955ca..3fc04355f 100644
--- a/cis/private/lehre/fotoliste.pdf.php
+++ b/cis/private/lehre/fotoliste.pdf.php
@@ -1,306 +1,310 @@
-
- *
- * Description: This file creates a studentlist with students' profile fotos
- * by a given studiengangs- and lehrveranstaltungs ID (and eventually a given lehreinheit ID).
- * If fotos are locked by student, a dummy picture is inserted instead of the students foto.
- * EXCEPTION: if user has admins or assitents rights, ALL students' fotos are iserted (even locked ones)
- *
- */
-
-require_once('../../../config/cis.config.inc.php');
-require_once('../../../include/dokument_export.class.php');
-require_once('../../../include/lehrveranstaltung.class.php');
-require_once('../../../include/lehreinheit.class.php');
-require_once('../../../include/benutzerberechtigung.class.php');
-require_once('../../../include/studiensemester.class.php');
-require_once('../../../include/functions.inc.php');
-require_once('../../../include/erhalter.class.php');
-require_once('../../../include/datum.class.php');
-
-
-$doc = new dokument_export('fotoliste');
-$output = 'pdf';
-$show_all_fotos = false;
-
-
-//check user access & $_GET vars
-if (!$db = new basis_db())
- die('Es konnte keine Verbindung zum Server aufgebaut werden.');
-
-$user = get_uid();
-
-
-if (isset($_GET['lvid']) && is_numeric($_GET['lvid']))
- $lvid = $_GET['lvid'];
-else
- die('Eine gueltige LvID muss uebergeben werden');
-
-isset($_GET['stsem']) ? $studiensemester = $_GET['stsem'] : die('Ein Studiensemester muss uebergeben werden');
-
-$lv = new lehrveranstaltung();
-$lv->load($lvid);
-
-$berechtigung = new benutzerberechtigung();
-$berechtigung->getBerechtigungen($user);
-
-if (!$berechtigung->isBerechtigt('admin') && !$berechtigung->isBerechtigt('assistenz') && !$berechtigung->isBerechtigt('lehre', $lv->oe_kurzbz, 's') && !check_lektor_lehrveranstaltung($user, $lvid, $studiensemester))
- die('Sie muessen LektorIn der LV sein oder das Recht "ADMIN", "ASSISTENZ" oder "LEHRE" haben, um diese Seite aufrufen zu koennen');
-
-if ($berechtigung->isBerechtigt('admin') || $berechtigung->isBerechtigt('assistenz'))
- $show_all_fotos = true;
-
-if (isset($_GET['output']) && ($output = 'odt' || $output = 'doc'))
- $output = $_GET['output'];
-isset($_GET['stg_kz']) ? $studiengang = $_GET['stg_kz'] : $studiengang = NULL;
-isset($_GET['lehreinheit_id']) ? $lehreinheit = $_GET['lehreinheit_id'] : $lehreinheit = NULL;
-
-
-//**************************** overall lehrveranstaltungs data *******************************
-//load overall lehrveranstaltungs-data
-$qry = "SELECT DISTINCT ON
- (kuerzel, semester, verband, gruppe, gruppe_kurzbz)
- UPPER(stg_typ || stg_kurzbz) as kuerzel,
- lv_bezeichnung,
- stg_bez,
- semester,
- verband,
- gruppe,
- gruppe_kurzbz,
- stg_typ
- FROM
- campus.vw_lehreinheit
- WHERE
- lehrveranstaltung_id=" . $db->db_add_param($lvid, FHC_INTEGER) . "
- AND
- studiensemester_kurzbz=" . $db->db_add_param($studiensemester);
-if ($lehreinheit != '')
- $qry .= " AND lehreinheit_id=" . $db->db_add_param($lehreinheit, FHC_INTEGER);
-
-$gruppen_string = '';
-$gruppen_string_arr = array();
-$stg_typ = '';
-
-//structure overall lehrveranstaltungs data
-if ($result = $db->db_query($qry)) {
- while ($row = $db->db_fetch_object($result)) {
- //lehrveranstaltung
- $lv_bezeichnung = $row->lv_bezeichnung;
- //studiengang
- $stg_bezeichnung = $row->stg_bez;
- //studiengangstyp
- $stg_typ = $row->stg_typ;
- //collect all gruppenkürzel
- if ($row->gruppe_kurzbz == '')
- $gruppen_string = trim($row->kuerzel . '-' . $row->semester . $row->verband . $row->gruppe);
- else
- $gruppen_string = $row->gruppe_kurzbz;
-
- $gruppen_string_arr[] = $gruppen_string;
- }
-}
-
-//concatinate distinct gruppenkürzel
-$studiengruppe = implode(", ", array_unique($gruppen_string_arr));
-
-//get studiengangstyp-bezeichnung
-$qry = "SELECT
- bezeichnung
- FROM
- public.tbl_studiengangstyp
- WHERE
- typ =" . $db->db_add_param($stg_typ);
-
-if ($result = $db->db_query($qry)) {
- $row = $db->db_fetch_object($result);
- $stg_typ_bezeichnung = $row->bezeichnung;
-}
-
-
-//add overall lehrveranstaltungs-data for XML
-$data = array(
- 'lehrveranstaltung' => $lv_bezeichnung,
- 'studiengang' => $stg_bezeichnung,
- 'studiengangs_typ' => $stg_typ_bezeichnung,
- 'studiensemester' => $studiensemester,
- 'studiengruppe' => $studiengruppe
-);
-
-
-
-//**************************** students data *******************************
-//load students-data
-$qry = 'SELECT DISTINCT ON
- (nachname, vorname, person_id)
- vorname,
- nachname,
- matrikelnr,
- tbl_studentlehrverband.semester,
- tbl_studentlehrverband.verband,
- tbl_studentlehrverband.gruppe,
- (SELECT
- status_kurzbz
- FROM
- public.tbl_prestudentstatus
- WHERE
- prestudent_id=tbl_student.prestudent_id
- ORDER BY
- datum DESC, insertamum DESC, ext_id DESC LIMIT 1) as status,
- tbl_studiengang.kurzbz,
- tbl_studiengang.typ,
- tbl_bisio.bisio_id,
- tbl_bisio.von,
- tbl_bisio.bis,
- tbl_student.studiengang_kz AS stg_kz_student,
- tbl_zeugnisnote.note,
- tbl_mitarbeiter.mitarbeiter_uid,
- tbl_person.matr_nr,
- tbl_person.geschlecht,
- tbl_person.foto,
- tbl_person.foto_sperre
- FROM
- campus.vw_student_lehrveranstaltung
- JOIN public.tbl_benutzer USING(uid)
- JOIN public.tbl_person USING(person_id)
- LEFT JOIN public.tbl_student ON(uid=student_uid)
- LEFT JOIN public.tbl_studiengang ON(tbl_studiengang.studiengang_kz=tbl_student.studiengang_kz)
- LEFT JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid)
- LEFT JOIN public.tbl_studentlehrverband USING(student_uid,studiensemester_kurzbz)
- LEFT JOIN lehre.tbl_zeugnisnote ON(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id
- AND tbl_zeugnisnote.student_uid=tbl_student.student_uid
- AND tbl_zeugnisnote.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz)
- LEFT JOIN bis.tbl_bisio ON(uid=tbl_bisio.student_uid)
- WHERE
- vw_student_lehrveranstaltung.lehrveranstaltung_id=' . $db->db_add_param($lvid, FHC_INTEGER) . ' AND
- vw_student_lehrveranstaltung.studiensemester_kurzbz=' . $db->db_add_param($studiensemester);
-
-if ($lehreinheit != '')
- $qry .= ' AND vw_student_lehrveranstaltung.lehreinheit_id=' . $db->db_add_param($lehreinheit, FHC_INTEGER);
-
-$qry .= ' ORDER BY nachname, vorname, person_id, tbl_bisio.bis DESC';
-
-$stsem_obj = new studiensemester();
-$stsem_obj->load($studiensemester);
-$stsemdatumvon = $stsem_obj->start;
-$stsemdatumbis = $stsem_obj->ende;
-
-$erhalter = new erhalter();
-$erhalter->getAll();
-
-$a_o_kz = '9' . sprintf("%03s", $erhalter->result[0]->erhalter_kz); //Stg_Kz AO-Studierende auslesen (9005 fuer FHTW)
-$anzahl_studierende = 0;
-$datum = new datum();
-$zusatz = '';
-
-//structure students data
-if ($result = $db->db_query($qry)) {
- while ($row = $db->db_fetch_object($result)) {
- if ($row->status != 'Abbrecher' && $row->status != 'Unterbrecher') {
- $anzahl_studierende++;
-
- if ($row->status == 'Incoming') //Incoming
- $zusatz = '(i)';
- else
- $zusatz = '';
-
- if ($row->bisio_id != '' && $row->status != 'Incoming' && ($row->bis > $stsemdatumvon || $row->bis == '') && $row->von < $stsemdatumbis) //Outgoing
- $zusatz .= '(o)(ab ' . $datum->formatDatum($row->von, 'd.m.Y') . ')';
-
- if ($row->note == 6) //angerechnet
- $zusatz .= '(ar)';
-
- if ($row->mitarbeiter_uid != '') //mitarbeiter
- $zusatz .= '(ma)';
-
- if ($row->stg_kz_student == $a_o_kz) //Außerordentliche Studierende
- $zusatz .= '(a.o.)';
-
- //allow admin and assistenz to see ALL fotos (even if locked by user)
- if ($show_all_fotos)
- $row->foto_sperre = 'f';
-
- //create foto (if not locked by student OR if fotolist is created by admin or assistenz)
- $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;
-
- //create writeable file
- if (!$foto = fopen($foto_url, 'w'))
- die("Das Bild konnte nicht erstellt werden");
- //add foto base64-code
- if (!fwrite($foto, base64_decode($foto_src)))
- {
- die("Das Bild konnte nicht erstellt werden");
- }
-
- //add foto to document
- $doc->addImage($foto_url, trim($row->matrikelnr) . '.jpg', 'image/jpg');
- }
- elseif ($row->foto_sperre == 't')
- {
- $foto_url = 'gesperrt';
- }
-
- //create studiengruppe
- $student_studiengruppe = strtoupper($row->typ.$row->kurzbz.'-'.$row->semester);
-
- //add studierenden data for XML
- $data[] = array('studierende' => array(
- 'vorname' => $row->vorname,
- 'nachname' => mb_strtoupper($row->nachname, 'UTF-8'),
- 'personenkennzeichen' => trim($row->matrikelnr),
- 'geschlecht' => $row->geschlecht,
- 'foto_gesperrt' => $row->foto_sperre, // f/t
- 'foto_url' => $foto_url,
- 'studiengruppe' => $student_studiengruppe,
- 'verband' => trim($row->verband),
- 'gruppe' => trim($row->gruppe),
- 'zusatz' => $zusatz
- ));
- }
- }
- //Anzahl Studierende in Array $data (an erster Stelle) einfuegen
- $data = array_reverse($data, true);
- $data['anzahl_studierende'] = $anzahl_studierende;
- $data = array_reverse($data, true);
-}
-
-//add data to fotoliste.xsl
-$doc->addDataArray($data, 'fotoliste');
-
-//set doc name
-$doc->setFilename('Fotoliste_'.$stg_bezeichnung.'_'.$studiensemester.'_'.$lv_bezeichnung);
-
-//create doc in format required
-if (!$doc->create($output))
- die($doc->errormsg);
-
-//download doc
-$doc->output();
-
-//unlink doc from tmp-folder
-$doc->close();
-
-//unlink fotos from tmp-folder
-foreach ($foto_url_arr as $foto_url)
- unlink($foto_url);
+
+ *
+ * Description: This file creates a studentlist with students' profile fotos
+ * by a given studiengangs- and lehrveranstaltungs ID (and eventually a given lehreinheit ID).
+ * If fotos are locked by student, a dummy picture is inserted instead of the students foto.
+ * EXCEPTION: if user has admins or assitents rights, ALL students' fotos are iserted (even locked ones)
+ *
+ */
+
+require_once('../../../config/cis.config.inc.php');
+require_once('../../../include/dokument_export.class.php');
+require_once('../../../include/lehrveranstaltung.class.php');
+require_once('../../../include/lehreinheit.class.php');
+require_once('../../../include/benutzerberechtigung.class.php');
+require_once('../../../include/studiensemester.class.php');
+require_once('../../../include/studiengang.class.php');
+require_once('../../../include/functions.inc.php');
+require_once('../../../include/erhalter.class.php');
+require_once('../../../include/datum.class.php');
+
+
+$doc = new dokument_export('fotoliste');
+$output = 'pdf';
+$show_all_fotos = false;
+
+
+//check user access & $_GET vars
+if (!$db = new basis_db())
+ die('Es konnte keine Verbindung zum Server aufgebaut werden.');
+
+$user = get_uid();
+
+
+if (isset($_GET['lvid']) && is_numeric($_GET['lvid']))
+ $lvid = $_GET['lvid'];
+else
+ die('Eine gueltige LvID muss uebergeben werden');
+
+isset($_GET['stsem']) ? $studiensemester = $_GET['stsem'] : die('Ein Studiensemester muss uebergeben werden');
+
+$lv = new lehrveranstaltung();
+$lv->load($lvid);
+
+$stg = new studiengang();
+$stg->load($lv->studiengang_kz);
+
+$berechtigung = new benutzerberechtigung();
+$berechtigung->getBerechtigungen($user);
+
+if (!$berechtigung->isBerechtigt('admin') && !$berechtigung->isBerechtigt('assistenz') && !$berechtigung->isBerechtigt('lehre', $lv->oe_kurzbz, 's') && !check_lektor_lehrveranstaltung($user, $lvid, $studiensemester))
+ die('Sie muessen LektorIn der LV sein oder das Recht "ADMIN", "ASSISTENZ" oder "LEHRE" haben, um diese Seite aufrufen zu koennen');
+
+if ($berechtigung->isBerechtigt('admin') || $berechtigung->isBerechtigt('assistenz'))
+ $show_all_fotos = true;
+
+if (isset($_GET['output']) && ($output = 'odt' || $output = 'doc'))
+ $output = $_GET['output'];
+isset($_GET['stg_kz']) ? $studiengang = $_GET['stg_kz'] : $studiengang = NULL;
+isset($_GET['lehreinheit_id']) ? $lehreinheit = $_GET['lehreinheit_id'] : $lehreinheit = NULL;
+
+
+//**************************** overall lehrveranstaltungs data *******************************
+//load overall lehrveranstaltungs-data
+$qry = "SELECT DISTINCT ON
+ (kuerzel, semester, verband, gruppe, gruppe_kurzbz)
+ UPPER(stg_typ || stg_kurzbz) as kuerzel,
+ lv_bezeichnung,
+ stg_bez,
+ semester,
+ verband,
+ gruppe,
+ gruppe_kurzbz,
+ stg_typ
+ FROM
+ campus.vw_lehreinheit
+ WHERE
+ lehrveranstaltung_id=" . $db->db_add_param($lvid, FHC_INTEGER) . "
+ AND
+ studiensemester_kurzbz=" . $db->db_add_param($studiensemester);
+if ($lehreinheit != '')
+ $qry .= " AND lehreinheit_id=" . $db->db_add_param($lehreinheit, FHC_INTEGER);
+
+$gruppen_string = '';
+$gruppen_string_arr = array();
+$stg_typ = $stg->typ;
+$stg_bezeichnung = $stg->bezeichnung;
+
+//structure overall lehrveranstaltungs data
+if ($result = $db->db_query($qry)) {
+ while ($row = $db->db_fetch_object($result)) {
+ //lehrveranstaltung
+ $lv_bezeichnung = $row->lv_bezeichnung;
+
+ //collect all gruppenkürzel
+ if ($row->gruppe_kurzbz == '')
+ $gruppen_string = trim($row->kuerzel . '-' . $row->semester . $row->verband . $row->gruppe);
+ else
+ $gruppen_string = $row->gruppe_kurzbz;
+
+ $gruppen_string_arr[] = $gruppen_string;
+ }
+}
+
+//concatinate distinct gruppenkürzel
+$studiengruppe = implode(", ", array_unique($gruppen_string_arr));
+
+//get studiengangstyp-bezeichnung
+$qry = "SELECT
+ bezeichnung
+ FROM
+ public.tbl_studiengangstyp
+ WHERE
+ typ =" . $db->db_add_param($stg_typ);
+
+if ($result = $db->db_query($qry)) {
+ $row = $db->db_fetch_object($result);
+ $stg_typ_bezeichnung = $row->bezeichnung;
+}
+
+
+//add overall lehrveranstaltungs-data for XML
+$data = array(
+ 'lehrveranstaltung' => $lv_bezeichnung,
+ 'studiengang' => $stg_bezeichnung,
+ 'studiengangs_typ' => $stg_typ_bezeichnung,
+ 'studiensemester' => $studiensemester,
+ 'studiengruppe' => $studiengruppe
+);
+
+
+
+//**************************** students data *******************************
+//load students-data
+$qry = 'SELECT DISTINCT ON
+ (nachname, vorname, person_id)
+ vorname,
+ nachname,
+ matrikelnr,
+ tbl_studentlehrverband.semester,
+ tbl_studentlehrverband.verband,
+ tbl_studentlehrverband.gruppe,
+ (SELECT
+ status_kurzbz
+ FROM
+ public.tbl_prestudentstatus
+ WHERE
+ prestudent_id=tbl_student.prestudent_id
+ ORDER BY
+ datum DESC, insertamum DESC, ext_id DESC LIMIT 1) as status,
+ tbl_studiengang.kurzbz,
+ tbl_studiengang.typ,
+ tbl_bisio.bisio_id,
+ tbl_bisio.von,
+ tbl_bisio.bis,
+ tbl_student.studiengang_kz AS stg_kz_student,
+ tbl_zeugnisnote.note,
+ tbl_mitarbeiter.mitarbeiter_uid,
+ tbl_person.person_id,
+ tbl_person.matr_nr,
+ tbl_person.geschlecht,
+ tbl_person.foto,
+ tbl_person.foto_sperre
+ FROM
+ campus.vw_student_lehrveranstaltung
+ JOIN public.tbl_benutzer USING(uid)
+ JOIN public.tbl_person USING(person_id)
+ LEFT JOIN public.tbl_student ON(uid=student_uid)
+ LEFT JOIN public.tbl_studiengang ON(tbl_studiengang.studiengang_kz=tbl_student.studiengang_kz)
+ LEFT JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid)
+ LEFT JOIN public.tbl_studentlehrverband USING(student_uid,studiensemester_kurzbz)
+ LEFT JOIN lehre.tbl_zeugnisnote ON(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id
+ AND tbl_zeugnisnote.student_uid=tbl_student.student_uid
+ AND tbl_zeugnisnote.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz)
+ LEFT JOIN bis.tbl_bisio ON(uid=tbl_bisio.student_uid)
+ WHERE
+ vw_student_lehrveranstaltung.lehrveranstaltung_id=' . $db->db_add_param($lvid, FHC_INTEGER) . ' AND
+ vw_student_lehrveranstaltung.studiensemester_kurzbz=' . $db->db_add_param($studiensemester);
+
+if ($lehreinheit != '')
+ $qry .= ' AND vw_student_lehrveranstaltung.lehreinheit_id=' . $db->db_add_param($lehreinheit, FHC_INTEGER);
+
+$qry .= ' ORDER BY nachname, vorname, person_id, tbl_bisio.bis DESC';
+
+$stsem_obj = new studiensemester();
+$stsem_obj->load($studiensemester);
+$stsemdatumvon = $stsem_obj->start;
+$stsemdatumbis = $stsem_obj->ende;
+
+$erhalter = new erhalter();
+$erhalter->getAll();
+
+$a_o_kz = '9' . sprintf("%03s", $erhalter->result[0]->erhalter_kz); //Stg_Kz AO-Studierende auslesen (9005 fuer FHTW)
+$anzahl_studierende = 0;
+$datum = new datum();
+$zusatz = '';
+$foto_url_arr = array();
+
+//structure students data
+if ($result = $db->db_query($qry)) {
+ while ($row = $db->db_fetch_object($result)) {
+ if ($row->status != 'Abbrecher' && $row->status != 'Unterbrecher') {
+ $anzahl_studierende++;
+
+ if ($row->status == 'Incoming') //Incoming
+ $zusatz = '(i)';
+ else
+ $zusatz = '';
+
+ if ($row->bisio_id != '' && $row->status != 'Incoming' && ($row->bis > $stsemdatumvon || $row->bis == '') && $row->von < $stsemdatumbis) //Outgoing
+ $zusatz .= '(o)(ab ' . $datum->formatDatum($row->von, 'd.m.Y') . ')';
+
+ if ($row->note == 6) //angerechnet
+ $zusatz .= '(ar)';
+
+ if ($row->mitarbeiter_uid != '') //mitarbeiter
+ $zusatz .= '(ma)';
+
+ if ($row->stg_kz_student == $a_o_kz) //Außerordentliche Studierende
+ $zusatz .= '(a.o.)';
+
+ //allow admin and assistenz to see ALL fotos (even if locked by user)
+ if ($show_all_fotos)
+ $row->foto_sperre = 'f';
+
+ //create foto (if not locked by student OR if fotolist is created by admin or assistenz)
+ $foto_url = '';
+
+ if ($row->foto_sperre == 'f' && $row->foto != '') {
+ $foto_src = $row->foto;
+ $foto_url = sys_get_temp_dir() . '/foto' . trim($row->person_id) . '.jpg';
+ $foto_url_arr[] = $foto_url;
+
+ //create writeable file
+ if (!$foto = fopen($foto_url, 'w'))
+ die("Das Bild konnte nicht erstellt werden");
+ //add foto base64-code
+ if (!fwrite($foto, base64_decode($foto_src)))
+ {
+ die("Das Bild konnte nicht erstellt werden");
+ }
+
+ //add foto to document
+ $doc->addImage($foto_url, trim($row->person_id) . '.jpg', 'image/jpg');
+ }
+ elseif ($row->foto_sperre == 't')
+ {
+ $foto_url = 'gesperrt';
+ }
+
+ //create studiengruppe
+ $student_studiengruppe = strtoupper($row->typ.$row->kurzbz.'-'.$row->semester);
+
+ //add studierenden data for XML
+ $data[] = array('studierende' => array(
+ 'vorname' => $row->vorname,
+ 'nachname' => mb_strtoupper($row->nachname, 'UTF-8'),
+ 'personenkennzeichen' => trim($row->matrikelnr),
+ 'geschlecht' => $row->geschlecht,
+ 'foto_gesperrt' => $row->foto_sperre, // f/t
+ 'foto_url' => $foto_url,
+ 'studiengruppe' => $student_studiengruppe,
+ 'verband' => trim($row->verband),
+ 'gruppe' => trim($row->gruppe),
+ 'zusatz' => $zusatz
+ ));
+ }
+ }
+ //Anzahl Studierende in Array $data (an erster Stelle) einfuegen
+ $data = array_reverse($data, true);
+ $data['anzahl_studierende'] = $anzahl_studierende;
+ $data = array_reverse($data, true);
+}
+
+//add data to fotoliste.xsl
+$doc->addDataArray($data, 'fotoliste');
+
+//set doc name
+$doc->setFilename('Fotoliste_'.$stg_bezeichnung.'_'.$studiensemester.'_'.$lv_bezeichnung);
+
+//create doc in format required
+if (!$doc->create($output))
+ die($doc->errormsg);
+
+//download doc
+$doc->output();
+
+//unlink doc from tmp-folder
+$doc->close();
+
+//unlink fotos from tmp-folder
+foreach ($foto_url_arr as $foto_url)
+ unlink($foto_url);
diff --git a/cis/private/lehre/notenliste.php b/cis/private/lehre/notenliste.php
index 5cdea3111..56fd4a36d 100644
--- a/cis/private/lehre/notenliste.php
+++ b/cis/private/lehre/notenliste.php
@@ -1,441 +1,445 @@
-,
- * Andreas Oesterreicher
- * Rudolf Hangl < rudolf.hangl@technikum-wien.at >
- * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at >
- */
-/*
- * Erstellt eine Liste mit den Noten des eingeloggten Studenten
- * das betreffende Studiensemester kann ausgewaehlt werden
- */
-require_once('../../../config/cis.config.inc.php');
-require_once('../../../config/global.config.inc.php');
-require_once('../../../include/functions.inc.php');
-require_once('../../../include/studiensemester.class.php');
-require_once('../../../include/datum.class.php');
-require_once('../../../include/note.class.php');
-require_once('../../../include/phrasen.class.php');
-require_once('../../../include/studiengang.class.php');
-require_once('../../../include/studienordnung.class.php');
-require_once('../../../include/lehrveranstaltung.class.php');
-require_once('../../../include/pruefung.class.php');
-require_once('../../../include/benutzerberechtigung.class.php');
-require_once('../../../include/prestudent.class.php');
-
-$sprache = getSprache();
-$p = new phrasen($sprache);
-
-if (! $db = new basis_db())
- die($p->t('global/fehlerBeimOeffnenDerDatenbankverbindung'));
-
-if (isset($_GET['stsem']))
- $stsem = $_GET['stsem'];
-else
- $stsem = '';
-
-echo '
-
-
-
-
-
-
-
-
-
-
-
- ' . $p->t('tools/leistungsbeurteilung') . '
-
-
-
-
-
- ' . $p->t('tools/leistungsbeurteilung') . ' ';
-
-$user = get_uid();
-
-if (isset($_GET['uid']))
-{
- // Administratoren duerfen die UID als Parameter uebergeben um die Notenliste
- // von anderen Personen anzuzeigen
-
- $rechte = new benutzerberechtigung();
- $rechte->getBerechtigungen($user);
- if ($rechte->isBerechtigt('admin'))
- {
- $user = $_GET['uid'];
- $getParam = "&uid=" . $user;
- }
- else
- $getParam = "";
-}
-else
- $getParam = '';
-
-$datum_obj = new datum();
-
-$error = '';
-
-if (! check_student($user))
-{
- $error .= $p->t('tools/mussAlsStudentEingeloggtSein');
-}
-else
-{
- $qry = "SELECT vw_student.vorname, vw_student.nachname, vw_student.prestudent_id, tbl_studiengang.studiengang_kz
- FROM public.tbl_studiengang JOIN campus.vw_student USING (studiengang_kz)
- WHERE campus.vw_student.uid = " . $db->db_add_param($user) . ";";
-
- if (! $result = $db->db_query($qry))
- die($p->t('tools/studentWurdeNichtGefunden'));
- else
- {
- $row = $db->db_fetch_object($result);
-
- $vorname = $row->vorname;
- $nachname = $row->nachname;
- $prestudent_id = $row->prestudent_id;
- $stg_obj = new studiengang();
- $stg_obj->load($row->studiengang_kz);
- $stg_name = $stg_obj->bezeichnung_arr[$sprache];
- $prestudent_id = $row->prestudent_id;
- $prestudent = new prestudent($prestudent_id);
- if ($prestudent->getLastStatus($prestudent_id))
- {
- $studienplan_id = $prestudent->studienplan_id;
- $studienordnung = new studienordnung();
- if ($studienordnung->getStudienordnungFromStudienplan($studienplan_id))
- {
- $studiengangbezeichnung_sto = $sprache === 'English' ? $studienordnung->__get('studiengangbezeichnung_englisch') : $studienordnung->__get('studiengangbezeichnung');
- }
- }
-
- $studiengang_bezeichnung = empty($studiengangbezeichnung_sto) ? $stg_name : $studiengangbezeichnung_sto;
- }
-
- $notenarr = array();
- $note = new note();
- $note->getAll();
- foreach ($note->result as $row)
- {
- $notenarr[$row->note]['bezeichnung'] = $row->bezeichnung;
- $notenarr[$row->note]['notenwert'] = $row->notenwert;
- }
-
- // Aktuelles Studiensemester ermitteln
-
- $stsem_obj = new studiensemester();
- if ($stsem == '')
- $stsem = $stsem_obj->getaktorNext();
-
- // Erstes und letztes Studiensemester mit Studenten-Status ermitteln
- $prestudent = new prestudent();
- // Wenn Incoming, dann Incomingstatus laden, sonst Studentenstatus
- $prestudent->getPrestudentRolle($prestudent_id, 'Incoming');
- if(count($prestudent->result) > 0)
- {
- $prestudent->getFirstStatus($prestudent_id, 'Incoming');
- $firstStudiensemester = $prestudent->studiensemester_kurzbz;
- $prestudent->getLastStatus($prestudent_id, null, 'Incoming');
- $lastStudiensemester = $prestudent->studiensemester_kurzbz;
- }
- else
- {
- $prestudent->getFirstStatus($prestudent_id, 'Student');
- $firstStudiensemester = $prestudent->studiensemester_kurzbz;
- $prestudent->getLastStatus($prestudent_id, null, 'Student');
- $lastStudiensemester = $prestudent->studiensemester_kurzbz;
- }
-
- $stsem_obj->getStudiensemesterBetween($firstStudiensemester, $lastStudiensemester);
-
- echo " ";
- echo "".$p->t('global/name').": $vorname $nachname ";
- echo "".$p->t('global/studiengang').": $studiengang_bezeichnung ";
- echo "".$p->t('global/studiensemester')." ";
- echo "".$p->t('news/allesemester')." ";
- $notenImAktuellenStSem = false;
- foreach ($stsem_obj->studiensemester as $semrow)
- {
- if ($stsem == $semrow->studiensemester_kurzbz)
- {
- echo "$semrow->studiensemester_kurzbz ";
- $notenImAktuellenStSem = true;
- }
- else
- {
- echo "$semrow->studiensemester_kurzbz ";
- }
- }
- echo " ";
-
- // echo "Datum: ".date('d.m.Y')." ";
- echo " ";
- if ($notenImAktuellenStSem == false)
- {
- $stsem = 'alle';
- }
- // Lehrveranstaltungen und Noten holen
- if ($stsem != "alle")
- {
- $sqlFilter = " AND tbl_zeugnisnote.studiensemester_kurzbz = " . $db->db_add_param($stsem) . "
- AND (tbl_lvgesamtnote.studiensemester_kurzbz = " . $db->db_add_param($stsem) . " OR tbl_lvgesamtnote.studiensemester_kurzbz is null) ";
- }
- else
- $sqlFilter = "";
-
- $qry = "SELECT
- tbl_lehrveranstaltung.lehrveranstaltung_id, tbl_zeugnisnote.note, tbl_zeugnisnote.punkte,
- tbl_lvgesamtnote.note as lvnote, tbl_lvgesamtnote.punkte as lvpunkte,
- tbl_zeugnisnote.benotungsdatum, tbl_lvgesamtnote.freigabedatum,
- tbl_lvgesamtnote.benotungsdatum as lvbenotungsdatum,
- tbl_zeugnisnote.studiensemester_kurzbz AS studiensemester_zeugnis, tbl_lvgesamtnote.studiensemester_kurzbz AS studiensemester_lvnote,
- tbl_lehrveranstaltung.zeugnis, tbl_lehrveranstaltung.ects
- FROM
- lehre.tbl_lehrveranstaltung, lehre.tbl_zeugnisnote
- LEFT OUTER JOIN
- campus.tbl_lvgesamtnote
- USING (lehrveranstaltung_id, student_uid, studiensemester_kurzbz)
- WHERE
- tbl_zeugnisnote.student_uid = " . $db->db_add_param($user) . $sqlFilter . "
- AND tbl_lehrveranstaltung.lehrveranstaltung_id = tbl_zeugnisnote.lehrveranstaltung_id
- ORDER BY bezeichnung";
-
- if ($result = $db->db_query($qry))
- {
- // Tabelle anzeigen
- $tbl = "";
- $tblHead = "
-
- " . $p->t('global/lehrveranstaltung') . " ";
- if ($stsem == "alle")
- $tblHead .= "" . $p->t('global/studiensemester') . " ";
-
- $tblHead .= "" . $p->t('benotungstool/lvNote') . " ";
- if (defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE)
- $tblHead .= "" . $p->t('benotungstool/punkte') . " ";
-
- $tblHead .= " " . $p->t('benotungstool/zeugnisnote') . " ";
- if (defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE)
- $tblHead .= "" . $p->t('benotungstool/punkte') . " ";
-
- $tblHead .= "
- " . $p->t('tools/benotungsdatumDerZeugnisnote') . "
- " . $p->t('benotungstool/pruefung') . "
-
- ";
- $tblBody = "";
- $i = 0;
- $legende = false;
- $notenSummenArray = array();
- while ($row = $db->db_fetch_object($result))
- {
- $lv_obj = new lehrveranstaltung();
- $lv_obj->load($row->lehrveranstaltung_id);
-
- $i ++;
- $tblBody .= "" . $lv_obj->bezeichnung_arr[$sprache] . ($lv_obj->lehrform_kurzbz != "" && $lv_obj->lehrform_kurzbz != " - " ? " (" . $lv_obj->lehrform_kurzbz . ")" : "") . " ";
- if ($stsem == "alle")
- $tblBody .= "" . ($row->studiensemester_zeugnis != '' ? $row->studiensemester_zeugnis : $row->studiensemester_lvnote) . "";
-
- $tblBody .= " ";
-
- // Nur freigegebene Noten anzeigen
- if ($row->freigabedatum >= $row->lvbenotungsdatum)
- {
- if (isset($notenarr[$row->lvnote]))
- $tblBody .= $notenarr[$row->lvnote]['bezeichnung'];
- else
- $tblBody .= $row->lvnote;
-
- // Nur Noten, die aufs Zeugnis gedruckt werden für Durchschnittsberechnung addieren
- if ($row->zeugnis == true)
- {
- $notenSummenArray[$row->lehrveranstaltung_id]['notenwert'] = (isset($notenarr[$row->note]['notenwert']) ? $notenarr[$row->note]['notenwert'] : '');
- $notenSummenArray[$row->lehrveranstaltung_id]['ects'] = $row->ects;
- }
- }
- $tblBody .= " ";
-
- // LV Gesamtnote Punkte
- if (defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE)
- {
- $lvpunkte = ($row->lvpunkte != '' ? (float) $row->lvpunkte : '');
- $tblBody .= "" . $lvpunkte . " ";
- }
-
- if ($row->note != $row->lvnote && $row->lvnote != NULL)
- {
- $markier = " style='background-color: #FFD999;'";
- $legende = true;
- }
- else
- $markier = "";
- $tblBody .= "";
-
- if (isset($notenarr[$row->note]))
- $tblBody .= $notenarr[$row->note]['bezeichnung'];
- else
- $tblBody .= $row->note;
-
- $tblBody .= " ";
-
- if (defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE)
- {
- $punkte = ($row->punkte != '' ? ((float) $row->punkte) : '');
- $tblBody .= "" . $punkte . " ";
- }
-
- $tblBody .= '' . $datum_obj->formatDatum($row->benotungsdatum, 'Y-m-d') . ' ';
-
- $pruefung = new pruefung();
- $pruefung->getPruefungen($user, null, $row->lehrveranstaltung_id, $stsem);
-
- if (count($pruefung->result) > 0)
- {
- $tblBody .= '';
- foreach ($pruefung->result as $row)
- {
- if (isset($notenarr[$row->note]))
- $note = $notenarr[$row->note]['bezeichnung'];
- else
- $note = $row->note;
-
- if ($row->punkte != '')
- $punkte = ' (' . (float) $row->punkte . ')';
- else
- $punkte = '';
-
- $tblBody .= $row->pruefungstyp_beschreibung . ' ' . $datum_obj->formatDatum($row->datum, 'd.m.Y') . ' ' . $note . $punkte . ' ';
- }
- $tblBody .= ' ';
- }
- else
- $tblBody .= ' ';
-
- $tblBody .= " ";
- }
- // Durchschnitt und gewichteten Durchschnitt berechnen
- $notenSumme = 0;
- $notenSummeGewichtet = 0;
- $ectsSumme = 0;
- $anzahlLv = 0;
- foreach ($notenSummenArray AS $key => $value)
- {
- if ($value['notenwert'] != '')
- {
- $anzahlLv++;
- $notenSumme += $value['notenwert'];
- $ectsSumme += $value['ects'];
- $notenSummeGewichtet += $value['notenwert'] * $value['ects'];
- }
- }
-
- $tblBody .= " ";
- $tblFoot = "";
-
- if ($anzahlLv != 0)
- $notenDurchschnitt = round($notenSumme / $anzahlLv, 2);
- else
- $notenDurchschnitt = 0;
-
- if ($ectsSumme != 0)
- $notenDurchschnittGewichtet = round($notenSummeGewichtet / $ectsSumme, 2);
- else
- $notenDurchschnittGewichtet = 0;
-
- $tblFoot .= '';
- $tblFoot .= '' . $p->t("tools/notendurchschnittDerZeugnisnote") . ' ';
- $tblFoot .= ''.$notenDurchschnitt.' ';
- $tblFoot .= ' ';
- $tblFoot .= " ";
-
- $tblFoot .= '';
- $tblFoot .= '' . $p->t("tools/gewichteterNotendurchschnittDerZeugnisnote") . ' ';
- $tblFoot .= ''.$notenDurchschnittGewichtet.' ';
- $tblFoot .= ' ';
-
- $tblFoot .= " ";
-
- $tblFoot .= " ";
-
- $tbl .= $tblHead.$tblFoot.$tblBody;
-
- $tbl .= "* " . $p->t('tools/legendeNotendurchschnitt') . " ";
- $tbl .= "** " . $p->t('tools/legendeGewichteterNotendurchschnitt') . " ";
- if ($legende)
- {
- $tbl .= "" . $p->t('tools/hinweistextMarkierung') . " ";
- }
- $tbl .= "
";
- if ($i == 0)
- echo $p->t('tools/nochKeineBeurteilungEingetragen');
- else
- {
- $tbl .= "