diff --git a/application/config/constants.php b/application/config/constants.php index ac2ecc649..621f58ecb 100644 --- a/application/config/constants.php +++ b/application/config/constants.php @@ -64,7 +64,9 @@ define('LDAP_TOO_MANY_USER_DN', 11); |-------------------------------------------------------------------------- */ define('LANG_SESSION_NAME', 'LANGUAGE'); -define('LANG_SESSION_INDEXES', 'LANGUAGE_INDEXES'); +define('LANG_SESSION_INDEXES', 'INDEXES'); +define('LANG_SESSION_ACTIVE_LANGUAGES', 'ACTIVE_LANGUAGES'); +define('LANG_SESSION_CURRENT_LANGUAGE', 'sprache'); // NOTE: it is not under LANG_SESSION_NAME /* |-------------------------------------------------------------------------- diff --git a/application/controllers/lehre/lehrauftrag/Lehrauftrag.php b/application/controllers/lehre/lehrauftrag/Lehrauftrag.php index 3c0808d42..dade1fb21 100644 --- a/application/controllers/lehre/lehrauftrag/Lehrauftrag.php +++ b/application/controllers/lehre/lehrauftrag/Lehrauftrag.php @@ -26,7 +26,7 @@ class Lehrauftrag extends Auth_Controller array( 'index' => 'lehre/lehrauftrag_bestellen:r', 'orderLehrauftrag' => 'lehre/lehrauftrag_bestellen:rw', - 'Dashboard' => array('lehre/lehrauftrag_bestellen:r', 'lehre/lehrauftrag_erteilen:rw'), + 'Dashboard' => array('lehre/lehrauftrag_bestellen:r', 'lehre/lehrauftrag_erteilen:r'), 'LehrendeUebersicht' => array('lehre/lehrauftrag_erteilen:r') ) ); @@ -107,7 +107,7 @@ class Lehrauftrag extends Auth_Controller $studiensemester_kurzbz = $this->input->get('studiensemester'); // if provided by selected studiensemester if (is_null($studiensemester_kurzbz)) // else set next studiensemester as default value { - $studiensemester = $this->StudiensemesterModel->getNext(); + $studiensemester = $this->StudiensemesterModel->getAktOrNextSemester(); if (hasData($studiensemester)) { $studiensemester_kurzbz = $studiensemester->retval[0]->studiensemester_kurzbz; diff --git a/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php b/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php index b2282f6f2..4fc0a879b 100644 --- a/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php +++ b/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php @@ -71,7 +71,7 @@ class LehrauftragAkzeptieren extends Auth_Controller $studiensemester_kurzbz = $this->input->get('studiensemester'); // if provided by selected studiensemester if (is_null($studiensemester_kurzbz)) // else set next studiensemester as default value { - $studiensemester = $this->StudiensemesterModel->getNext(); + $studiensemester = $this->StudiensemesterModel->getAktOrNextSemester(); if (hasData($studiensemester)) { $studiensemester_kurzbz = $studiensemester->retval[0]->studiensemester_kurzbz; diff --git a/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php b/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php index b70b6e2f9..b339c81a4 100644 --- a/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php +++ b/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php @@ -90,7 +90,7 @@ class LehrauftragErteilen extends Auth_Controller $studiensemester_kurzbz = $this->input->get('studiensemester'); // if provided by selected studiensemester if (is_null($studiensemester_kurzbz)) // else set next studiensemester as default value { - $studiensemester = $this->StudiensemesterModel->getNext(); + $studiensemester = $this->StudiensemesterModel->getAktOrNextSemester(); if (hasData($studiensemester)) { $studiensemester_kurzbz = $studiensemester->retval[0]->studiensemester_kurzbz; diff --git a/application/controllers/widgets/Language.php b/application/controllers/widgets/Language.php new file mode 100644 index 000000000..8269d3b2d --- /dev/null +++ b/application/controllers/widgets/Language.php @@ -0,0 +1,31 @@ +input->post('language'); + + $this->outputJson(setUserLanguage($language)); + } +} diff --git a/application/core/FHC_Controller.php b/application/core/FHC_Controller.php index 234cf6a6f..93c324b21 100644 --- a/application/core/FHC_Controller.php +++ b/application/core/FHC_Controller.php @@ -21,6 +21,9 @@ abstract class FHC_Controller extends CI_Controller { parent::__construct(); + // NOTE: placed here before performing anything else!!! + $this->_checkHTTPS(); + $this->_controllerId = null; // set _controllerId as null by default // Loads helper message to manage returning messages @@ -129,4 +132,20 @@ abstract class FHC_Controller extends CI_Controller { $this->output->set_content_type('application/json')->set_output(json_encode($mixed)); } + + //------------------------------------------------------------------------------------------------------------------ + // Private methods + + /** + * Checks if the call is performed via web and if HTTPS is enabled and used + * If NOT then an error is raised and the execution is terminated + */ + private function _checkHTTPS() + { + // If NOT called from command line and if the HTTPS protocol is NOT enabled + if (!$this->input->is_cli_request() && !isset($_SERVER['HTTPS'])) + { + show_error('This web site cannot work correctly without the HTTPS protocol enabled'); + } + } } diff --git a/application/helpers/hlp_language_helper.php b/application/helpers/hlp_language_helper.php index 4dfb53c7b..1678a4102 100644 --- a/application/helpers/hlp_language_helper.php +++ b/application/helpers/hlp_language_helper.php @@ -18,28 +18,48 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); /** * Function to retrieve the language of the logged user - * If is not possible to retrieve it, then the default system language is returnd - * If as parameter is given a valid language the it's returned useful to avoid - * to write the same control structures for the language + * If is not possible to retrieve it, then the default system language is returned + * NOTE: If the given parameter is a valid language then it is returned + * It is useful to avoid to write a lot of "if else" structures */ function getUserLanguage($language = null) { + // If the given parameter is a valid language then return it if (!isEmptyString($language)) return $language; - $ci =& get_instance(); // get CI instance - - // Use the default system language, if it's possible retrieves the language for the logged user + // Use the default system language as fallback $language = DEFAULT_LANGUAGE; - // Checks if the user is authenticated to retrieve the users's language - // NOTE: this helper could be called when the user is not logged in the system - // so this is why is checked if the function getAuthUID exists - if (function_exists('getAuthUID')) + + // If the language is present in the session and it is valid + if (isset($_SESSION[LANG_SESSION_CURRENT_LANGUAGE]) && !isEmptyString($_SESSION[LANG_SESSION_CURRENT_LANGUAGE])) { + $language = $_SESSION[LANG_SESSION_CURRENT_LANGUAGE]; // then use it + } + // Otherwise checks if the user is authenticated to retrieve the users's language + // NOTE: this helper could be called when the user is NOT logged in the system + // therefore is checked if the user is logged + elseif (isLogged()) + { + $ci =& get_instance(); // get CI instance + // NOTE: Stores the loaded model with the alias PersonModelLanguage to avoid to overwrite // an already loaded PersonModel used somewhere else $ci->load->model('person/Person_model', 'PersonModelLanguage'); - $language = $ci->PersonModelLanguage->getLanguage(getAuthUID()); + // Retrieves language/s for the logged user + $languagesDB = $ci->PersonModelLanguage->getLanguage(getAuthUID()); + if (hasData($languagesDB)) + { + // Looks for the first valid language + foreach (getData($languagesDB) as $languageDB) + { + if (!isEmptyString($languageDB->sprache)) + { + $language = $languageDB->sprache; + break; + } + } + } } return $language; @@ -62,31 +82,21 @@ function getPhraseByLanguage($phraseLanguagesArray, $language) $langArray = getSessionElement(LANG_SESSION_NAME, LANG_SESSION_INDEXES); if ($langArray == null) // If not already loaded in session { - // Loads the Sprache_model to retrieve the language settings from the DB - // NOTE: Stores the loaded model with the alias SpracheModelLanguage to avoid to overwrite - // an already loaded SpracheModel used somewhere else - $ci->load->model('system/Sprache_model', 'SpracheModelLanguage'); - - // Add order clause by index and select only the sprache column - $ci->SpracheModelLanguage->addOrder('index'); - $ci->SpracheModelLanguage->addSelect('sprache'); - - // Retrieves from public.tbl_sprache - $dbLanguages = $ci->SpracheModelLanguage->load(); + // Retrieves active languages + $dbLanguages = getDBActiveLanguages(); if (hasData($dbLanguages)) // If everything is ok and contains data { $index = 0; // Incremental integer - $languageIndexes = array(); // Array that will contains languages and their indexes + $langArray = array(); // Array that will contains languages and their indexes // Loops through database results foreach (getData($dbLanguages) as $dbLanguage) { - $languageIndexes[$dbLanguage->sprache] = $index++; // set $languageIndexes array elements + $langArray[$dbLanguage->sprache] = $index++; // set $languageIndexes array elements } } - $langArray = $languageIndexes; // copy $languageIndexes to $langArray - // Set session element $_SESSION['LANG']['LANG_INDEXES'] with $languageIndexes + // Set session element $_SESSION['LANG']['LANG_INDEXES'] with $langArray setSessionElement(LANG_SESSION_NAME, LANG_SESSION_INDEXES, $langArray); } @@ -100,3 +110,78 @@ function getPhraseByLanguage($phraseLanguagesArray, $language) return $phrase; } + +/** + * Tries to load active languages from session, if not present then loads them from database and stores them in session + */ +function getActiveLanguages() +{ + $languagesArray = getSessionElement(LANG_SESSION_NAME, LANG_SESSION_ACTIVE_LANGUAGES); + if ($languagesArray == null) + { + $languagesArray = array(); + + // Retrieves from public.tbl_sprache + $dbLanguages = getDBActiveLanguages(); + if (hasData($dbLanguages)) + { + // Loops through database results + foreach (getData($dbLanguages) as $dbLanguage) + { + $languagesArray[$dbLanguage->sprache] = $dbLanguage->bezeichnung; // set $languageIndexes array elements + } + } + + // Set session element $_SESSION['LANG']['LANG_SESSION_ACTIVE_LANGUAGES'] with $languagesArray + setSessionElement(LANG_SESSION_NAME, LANG_SESSION_ACTIVE_LANGUAGES, $languagesArray); + } + + return $languagesArray; +} + +/** + * Loads active languages from database + */ +function getDBActiveLanguages() +{ + $ci =& get_instance(); // get CI instance + + // Loads the Sprache_model to retrieve the language settings from the DB + // NOTE: Stores the loaded model with the alias SpracheModelLanguage to avoid to overwrite + // an already loaded SpracheModel used somewhere else + $ci->load->model('system/Sprache_model', 'SpracheModelLanguage'); + + // Add order clause by index and select only the sprache column + $ci->SpracheModelLanguage->addOrder('index'); + $ci->SpracheModelLanguage->addSelect('sprache, bezeichnung'); + + // Retrieves from public.tbl_sprache + return $ci->SpracheModelLanguage->loadWhere(array('content' => true)); +} + +/** + * Sets the current language to render the GUI in session + */ +function setUserLanguage($language) +{ + $languageValid = false; + + // Checks if the given language is valid (present between active languages) + foreach (getActiveLanguages() as $languageName => $languageTranslation) + { + if ($language == $languageName) + { + $languageValid = true; + break; + } + } + + if ($languageValid) // if the provided language is valid + { + $_SESSION[LANG_SESSION_CURRENT_LANGUAGE] = $language; // stores it in session + + return success('Language successfully changed'); // return success!! + } + + return error('The given language is not valid'); // return an error +} diff --git a/application/libraries/CryptLib.php b/application/libraries/CryptLib.php new file mode 100644 index 000000000..ea19f3e5b --- /dev/null +++ b/application/libraries/CryptLib.php @@ -0,0 +1,28 @@ +setBlockLength(256); + $cipher->setKey($key); + + if ($paddingDisabled === true) $cipher->disablePadding(); + + return $cipher->encrypt($value); + } +} diff --git a/application/libraries/FilterWidgetLib.php b/application/libraries/FilterWidgetLib.php index c2e57eed2..6e87833bd 100644 --- a/application/libraries/FilterWidgetLib.php +++ b/application/libraries/FilterWidgetLib.php @@ -101,7 +101,7 @@ class FilterWidgetLib const FILTER_UNIQUE_ID = 'filterUniqueId'; // Filter page parameter name const PERMISSION_FILTER_METHOD = 'FilterWidget'; // Name for fake method to be checked by the PermissionLib - const PERMISSION_TYPE = 'rw'; + const PERMISSION_TYPE = 'r'; // Name and array keys of the filters menu array const NAV_MENU_FILTER_KEY = 'filters'; diff --git a/application/libraries/TableWidgetLib.php b/application/libraries/TableWidgetLib.php index 139e5d6cb..dc746b6d5 100644 --- a/application/libraries/TableWidgetLib.php +++ b/application/libraries/TableWidgetLib.php @@ -66,7 +66,7 @@ class TableWidgetLib const DATASET_REP_TABULATOR = 'tabulator'; const PERMISSION_TABLE_METHOD = 'TableWidget'; // Name for fake method to be checked by the PermissionLib - const PERMISSION_TYPE = 'rw'; + const PERMISSION_TYPE = 'r'; private $_ci; // Code igniter instance private $_tableUniqueId; // unique id for this table widget diff --git a/application/libraries/VariableLib.php b/application/libraries/VariableLib.php index 3d732984f..2f038531b 100644 --- a/application/libraries/VariableLib.php +++ b/application/libraries/VariableLib.php @@ -57,7 +57,7 @@ class VariableLib if (!isEmptyString($uid) && !isEmptyString($name) && is_numeric($change)) { - $change = (int) $change; + $change = (int)$change; $varres = $this->_ci->VariableModel->getVariables($uid, array($name)); if (isSuccess($varres)) diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index 9c1146632..388f77b0a 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -205,28 +205,12 @@ class Person_model extends DB_Model */ public function getLanguage($uid) { - $language = DEFAULT_LANGUAGE; - + $this->addSelect('public.tbl_person.sprache'); $this->addJoin('public.tbl_benutzer', 'person_id'); + $this->addJoin('public.tbl_sprache', 'sprache'); $this->addOrder('public.tbl_person.updateamum', 'DESC'); $this->addOrder('public.tbl_person.insertvon', 'DESC'); - $persons = $this->loadWhere(array('uid' => $uid)); - - if (hasData($persons)) - { - for ($i = 0; $i < count($persons->retval); $i++) - { - $person = $persons->retval[$i]; - - if (!isEmptyString($person->sprache)) - { - $language = $person->sprache; - break; - } - } - } - - return $language; + return $this->loadWhere(array('uid' => $uid, 'content' => true)); } } diff --git a/application/models/system/Variable_model.php b/application/models/system/Variable_model.php index 1fcb5b274..875fc8876 100644 --- a/application/models/system/Variable_model.php +++ b/application/models/system/Variable_model.php @@ -24,30 +24,32 @@ class Variable_model extends DB_Model */ public function getVariables($uid, $names = null) { - if (isEmptyString($uid) || (isset($names) && !is_array($names))) + if (isEmptyString($uid)) $result = error('wrong parameters passed'); else { $vardata = array(); + $parametersArray = array($uid); $qry = "SELECT name, wert FROM public.tbl_variable WHERE uid = ?"; - if (isset($names)) + if (!isEmptyArray($names)) { - $qry .= " AND name IN ('".implode(',', $names)."')"; + $qry .= " AND name IN ?"; + $parametersArray[] = $names; } $qry .= ";"; - $varresults = $this->execQuery($qry, array($uid)); + $varresults = $this->execQuery($qry, $parametersArray); if (hasData($varresults)) { $varresults = getData($varresults); - foreach ($varresults as $varresult) - { - if (isset($varresult->wert)) - $vardata[$varresult->name] = $varresult->wert; - } + foreach ($varresults as $varresult) + { + if (isset($varresult->wert)) + $vardata[$varresult->name] = $varresult->wert; + } } $vardefaults = $this->VariablennameModel->getDefaults($names); @@ -56,7 +58,6 @@ class Variable_model extends DB_Model { $vardefaults = getData($vardefaults); - foreach ($vardefaults as $vardefault) { if (!isset($vardata[$vardefault->name]) && isset($vardefault->defaultwert)) diff --git a/application/views/templates/FHC-Header.php b/application/views/templates/FHC-Header.php index 3c1327d5f..03ee011b7 100644 --- a/application/views/templates/FHC-Header.php +++ b/application/views/templates/FHC-Header.php @@ -18,6 +18,7 @@ $addons = isset($addons) ? $addons : false; $ajaxlib = isset($ajaxlib) ? $ajaxlib : false; $bootstrap = isset($bootstrap) ? $bootstrap : false; + $captcha = isset($captcha) ? $captcha : false; $dialoglib = isset($dialoglib) ? $dialoglib : false; $filterwidget = isset($filterwidget) ? $filterwidget : false; $fontawesome = isset($fontawesome) ? $fontawesome : false; @@ -62,12 +63,6 @@ // Font Awesome CSS if ($fontawesome === true) generateCSSsInclude('vendor/components/font-awesome/css/font-awesome.min.css'); - // PivotUI CSS - if ($pivotui === true) - { - generateCSSsInclude('vendor/nicolaskruchten/pivottable/dist/pivot.min.css'); - } - // SB Admin 2 template CSS if ($sbadmintemplate === true) { @@ -75,6 +70,15 @@ generateCSSsInclude('vendor/BlackrockDigital/startbootstrap-sb-admin-2/dist/css/sb-admin-2.min.css'); } + // Securimage CSS + if ($captcha === true) generateCSSsInclude('vendor/dapphp/securimage/securimage.css'); + + // PivotUI CSS + if ($pivotui === true) + { + generateCSSsInclude('vendor/nicolaskruchten/pivottable/dist/pivot.min.css'); + } + // Table sorter CSS if ($tablesorter === true) { @@ -107,6 +111,9 @@ // Eventually required CSS generateCSSsInclude($customCSSs); // Eventually required CSS + // CSS End + // -------------------------------------------------------------------------------------------------------- + // -------------------------------------------------------------------------------------------------------- // Javascripts @@ -132,19 +139,32 @@ } // jQuery checkboxes + // NOTE: keep it after jQuery includes if ($jquerycheckboxes === true) { generateJSsInclude('vendor/rmariuzzo/jquery-checkboxes/dist/jquery.checkboxes-1.0.7.min.js'); } - // Bootstrap JS - if ($bootstrap === true) generateJSsInclude('vendor/twbs/bootstrap/dist/js/bootstrap.min.js'); - // jQuery treetable // NOTE: keep it after jQuery includes if ($jquerytreetable === true) generateJSsInclude('vendor/ludo/jquery-treetable/jquery.treetable.js'); - // MomentJS + // Bootstrap JS + if ($bootstrap === true) generateJSsInclude('vendor/twbs/bootstrap/dist/js/bootstrap.min.js'); + + // SB Admin 2 template JS + if ($sbadmintemplate === true) + { + generateJSsInclude('vendor/BlackrockDigital/startbootstrap-sb-admin-2/vendor/metisMenu/metisMenu.min.js'); + generateJSsInclude('vendor/BlackrockDigital/startbootstrap-sb-admin-2/dist/js/sb-admin-2.min.js'); + generateBackwardCompatibleJSMsIe('vendor/afarkas/html5shiv/dist/html5shiv.min.js'); + generateBackwardCompatibleJSMsIe('vendor/scottjehl/Respond/dest/respond.min.js'); + } + + // Securimage JS + if ($captcha === true) generateJSsInclude('vendor/dapphp/securimage/securimage.js'); + + // Moment JS if ($momentjs === true) { generateJSsInclude('vendor/moment/momentjs/min/moment.min.js'); @@ -152,7 +172,7 @@ generateJSsInclude('vendor/moment/momentjs/locale/en-ie.js'); } - // PivotUI CSS + // PivotUI JS if ($pivotui === true) { generateJSsInclude('vendor/nicolaskruchten/pivottable/dist/pivot.min.js'); @@ -176,15 +196,6 @@ // Tinymce JS if ($tinymce === true) generateJSsInclude('vendor/tinymce/tinymce/tinymce.min.js'); - // SB Admin 2 template JS - if ($sbadmintemplate === true) - { - generateJSsInclude('vendor/BlackrockDigital/startbootstrap-sb-admin-2/vendor/metisMenu/metisMenu.min.js'); - generateJSsInclude('vendor/BlackrockDigital/startbootstrap-sb-admin-2/dist/js/sb-admin-2.min.js'); - generateBackwardCompatibleJSMsIe('vendor/afarkas/html5shiv/dist/html5shiv.min.js'); - generateBackwardCompatibleJSMsIe('vendor/scottjehl/Respond/dest/respond.min.js'); - } - // -------------------------------------------------------------------------------------------------------- // From public folder diff --git a/cis/index.php b/cis/index.php index f9e18cbda..a6ec16786 100644 --- a/cis/index.php +++ b/cis/index.php @@ -70,13 +70,14 @@ if(defined('CIS_CHECK_PASSWORD_CHANGE') && CIS_CHECK_PASSWORD_CHANGE==true) */ function validURLCheck($param) { - if(strstr($param,':')) + if (strstr($param,':') || strstr($param,'//')) { // Der APP_ROOT muss in der URL vorkommen, sonfern es kein relativer Pfad ist // HTTPS und HTTP if(mb_strpos($param, APP_ROOT)!==0 && mb_strpos(mb_str_replace("http://","https://", $param), APP_ROOT)!==0 - && mb_strpos(mb_str_replace("https://","http://", $param), APP_ROOT)!==0) + && mb_strpos(mb_str_replace("https://","http://", $param), APP_ROOT)!==0 + && $param != 'about:blank') { $text="Dies ist eine automatische Mail.\nEs wurde eine mögliche XSS Attacke durchgefuehrt:\n"; $text.="\nFolgende URL wurde versucht aufzurufen: \n".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; diff --git a/cis/private/stud_in_grp.php b/cis/private/stud_in_grp.php index abf3a67a1..d2f9e2d2c 100644 --- a/cis/private/stud_in_grp.php +++ b/cis/private/stud_in_grp.php @@ -183,7 +183,7 @@ else AND studiengang_kz=".$db->db_add_param($_GET['kz']); if (isset($_GET['sem'])) - $qry.=" AND semester=".$db->db_add_param($_GET['sem']); + $qry.=" AND semester=".$db->db_add_param($_GET['sem'], FHC_INTEGER); if (isset($_GET['verband'])) $qry.=" AND verband=".$db->db_add_param($_GET['verband']); diff --git a/cis/testtool/login.php b/cis/testtool/login.php index e42a623b2..477901803 100644 --- a/cis/testtool/login.php +++ b/cis/testtool/login.php @@ -125,6 +125,9 @@ if (isset($_POST['prestudent']) && isset($gebdatum)) { if($rt->freigeschaltet) { + // regenerate Session ID after Login + session_regenerate_id(); + $pruefling = new pruefling(); if($pruefling->getPruefling($ps->prestudent_id)) { diff --git a/composer.json b/composer.json index 2dfe2c38b..145927be0 100644 --- a/composer.json +++ b/composer.json @@ -254,6 +254,8 @@ "components/font-awesome": "4.*", "components/angular.js": "1.3.*", + "dapphp/securimage": "3.6.7", + "easyrdf/easyrdf": "0.9.*", "fzaninotto/faker": "1.*", diff --git a/composer.lock b/composer.lock index 9fc4fab12..d707ce776 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "59fc693321fbae0364ec7174a0d0dcb1", - "content-hash": "b377fd50d87a28fdedf6214e4ffb6a6d", + "hash": "d9941245360c86434d18413999bdc812", + "content-hash": "fbeb5d4ef943f6d1d55220cb844d11f1", "packages": [ { "name": "BlackrockDigital/startbootstrap-sb-admin-2", @@ -627,6 +627,55 @@ "description": "jQuery UI is a curated set of user interface interactions, effects, widgets, and themes built on top of the jQuery JavaScript Library. Whether you're building highly interactive web applications or you just need to add a date picker to a form control, jQuery UI is the perfect choice.", "time": "2016-09-16 05:47:55" }, + { + "name": "dapphp/securimage", + "version": "3.6.7", + "source": { + "type": "git", + "url": "https://github.com/dapphp/securimage.git", + "reference": "1ecb884797c66e01a875c058def46c85aecea45b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dapphp/securimage/zipball/1ecb884797c66e01a875c058def46c85aecea45b", + "reference": "1ecb884797c66e01a875c058def46c85aecea45b", + "shasum": "" + }, + "require": { + "ext-gd": "*", + "php": ">=5.4" + }, + "suggest": { + "ext-pdo": "For database storage support", + "ext-pdo_mysql": "For MySQL database support", + "ext-pdo_sqlite": "For SQLite3 database support" + }, + "type": "library", + "autoload": { + "classmap": [ + "securimage.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Drew Phillips", + "email": "drew@drew-phillips.com" + } + ], + "description": "PHP CAPTCHA Library", + "homepage": "https://www.phpcaptcha.org", + "keywords": [ + "Forms", + "anti-spam", + "captcha", + "security" + ], + "time": "2018-03-09 06:07:41" + }, { "name": "easyrdf/easyrdf", "version": "0.9.1", @@ -1455,16 +1504,16 @@ }, { "name": "tinymce/tinymce", - "version": "4.9.7", + "version": "4.9.8", "source": { "type": "git", "url": "https://github.com/tinymce/tinymce-dist.git", - "reference": "e14935a4ba07beb716ccdb192ee9823dbb4a73d5" + "reference": "912df2bc85015c758e32d1262219f1653bbf9783" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tinymce/tinymce-dist/zipball/e14935a4ba07beb716ccdb192ee9823dbb4a73d5", - "reference": "e14935a4ba07beb716ccdb192ee9823dbb4a73d5", + "url": "https://api.github.com/repos/tinymce/tinymce-dist/zipball/912df2bc85015c758e32d1262219f1653bbf9783", + "reference": "912df2bc85015c758e32d1262219f1653bbf9783", "shasum": "" }, "type": "component", @@ -1497,7 +1546,7 @@ "tinymce", "wysiwyg" ], - "time": "2019-12-19 06:05:16" + "time": "2020-01-28 05:03:01" }, { "name": "tomazdragar/SimpleCropper", diff --git a/content/fas.xul.php b/content/fas.xul.php index 2aecae047..3b273cd54 100644 --- a/content/fas.xul.php +++ b/content/fas.xul.php @@ -96,7 +96,6 @@ foreach($addon_obj->result as $addon) - @@ -115,14 +114,12 @@ foreach($addon_obj->result as $addon) - - @@ -317,12 +314,6 @@ foreach($addon_obj->result as $addon) - result as $addon) accesskey = "&menu-statistic-substatistik-alvsstatistik-html.accesskey;"/> - isBerechtigt('admin')) - { - echo ' - - - - - - '; - } - ?> result as $addon) command = "menu-statistic-studentenstatistik:command" accesskey = "&menu-statistic-studentenstatistik.accesskey;"/> - content/statistik/koordinatorstunden.php?oe_kurzbz='+oe_kurzbz,'Koordinatorstunden'); - } - catch(e) - { - alert('Bitte einen Fachbereich auswaehlen'); - return false; - } -} - // **** // * Erstellt das PDF File fuer die Lehrauftraege // * Studiengang muss ausgewaehlt sein @@ -1209,16 +1185,6 @@ function StatistikPrintStudentenstatistik() window.open('content/statistik/studentenstatistik.php?stsem='+stsem,'Studentenstatistik'); } -// **** -// * Liefert eine statistik ueber die Lektorenverteilung auf die Institute -// **** -function StatistikPrintLektorenstatistik() -{ - var stsem = getStudiensemester(); - - window.open('content/statistik/lektorenstatistik.php?stsem='+stsem,'Lektorenstatistik'); -} - // **** // * Liefert eine statistik ueber die Institutszuordnungen und Aufteilung auf intern/extern // **** @@ -1584,14 +1550,6 @@ function StatistikPrintALVSStatistik(format) window.open('content/statistik/alvsstatistik.php?format='+format,'ALVS-Statistik',''); } -// **** -// * Oeffnet die LVPlanunggesamtSJ Statistik -// **** -function StatistikPrintLvPlanungGesamtSJ() -{ - window.open('content/statistik/lvplanunggesamtsj.php','LVPlanungGesamtSJ',''); -} - // **** // * Oeffnet Studenten/Semester Statistik // **** diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index d506f0459..5e4a3ba61 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -157,8 +157,6 @@ function getStundenproInstitut($mitarbeiter_uid, $studiensemester_kurzbz, $oe_ar WHERE mitarbeiter_uid=".$db->db_add_param($mitarbeiter_uid)." AND studiensemester_kurzbz=".$db->db_add_param($studiensemester_kurzbz)." AND - faktor>0 AND - stundensatz>0 AND bismelden AND tbl_studiengang.oe_kurzbz in(".$db->db_implode4SQL($oe_arr).") GROUP BY tbl_studiengang.bezeichnung"; @@ -305,12 +303,12 @@ if(!$error) $le = new lehreinheit(); $le->load($lem->lehreinheit_id); - if($lem->stundensatz<=0 || $lem->faktor<=0 || $lem->bismelden==false) + if($lem->bismelden==false) $neue_stunden_eingerechnet=false; else $neue_stunden_eingerechnet=true; - if(($stundensatz_alt<=0 || $faktor_alt<=0 || $bismelden_alt==false)) + if($bismelden_alt==false) $alte_stunden_eingerechnet=false; else $alte_stunden_eingerechnet=true; @@ -337,8 +335,6 @@ if(!$error) WHERE mitarbeiter_uid=".$db->db_add_param($lem->mitarbeiter_uid)." AND studiensemester_kurzbz=".$db->db_add_param($le->studiensemester_kurzbz)." AND - faktor>0 AND - stundensatz>0 AND bismelden"; if(count($oe_arr)>0) @@ -559,8 +555,6 @@ if(!$error) WHERE mitarbeiter_uid=".$db->db_add_param($lem->mitarbeiter_uid)." AND studiensemester_kurzbz=".$db->db_add_param($le->studiensemester_kurzbz)." AND - faktor>0 AND - stundensatz>0 AND bismelden"; if(count($oe_arr)>0) diff --git a/content/lvplanung/lehrveranstaltungoverlay.js.php b/content/lvplanung/lehrveranstaltungoverlay.js.php index 0f5f484f2..49fd1c8f2 100644 --- a/content/lvplanung/lehrveranstaltungoverlay.js.php +++ b/content/lvplanung/lehrveranstaltungoverlay.js.php @@ -2546,8 +2546,8 @@ function LeMitarbeiterGesamtkosten() faktor = document.getElementById('lehrveranstaltung-lehreinheitmitarbeiter-textbox-faktor').value stundensatz = document.getElementById('lehrveranstaltung-lehreinheitmitarbeiter-textbox-stundensatz').value - if(!isNaN(semesterstunden) && !isNaN(faktor) && !isNaN(stundensatz)) - gesamtkosten = semesterstunden*faktor*stundensatz; + if(!isNaN(semesterstunden) && !isNaN(stundensatz)) + gesamtkosten = semesterstunden*stundensatz; else gesamtkosten = 0; diff --git a/content/mitarbeiter/lehrtaetigkeit.pdf.php b/content/mitarbeiter/lehrtaetigkeit.pdf.php index 1c5760531..28acffcf1 100644 --- a/content/mitarbeiter/lehrtaetigkeit.pdf.php +++ b/content/mitarbeiter/lehrtaetigkeit.pdf.php @@ -31,14 +31,12 @@ require_once('../../include/studiensemester.class.php'); require_once('../../include/phrasen.class.php'); require_once('../../include/benutzerberechtigung.class.php'); - $user = get_uid(); $sprache = getSprache(); $p = new phrasen($sprache); $doc = new dokument_export('Lehrtaetigkeit'); - if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); @@ -86,12 +84,12 @@ foreach($active_semester_arr as $active_semester) $studiensemester_start_date = $ss->start; $studiensemester_end_date = $ss->ende; - // * get total amount of semesterstunden of the lehreinheiten, where stundensatz > 0 + // * get total amount of semesterstunden of the lehreinheiten $total_semesterstunden = 0; foreach ($le_id_arr as $le_id) { $le_ma = new Lehreinheitmitarbeiter($le_id, $uid); - if ($le_ma && (!is_null ($le_ma->stundensatz) && $le_ma->stundensatz > 0)) + if ($le_ma) { $total_semesterstunden = $total_semesterstunden + $le_ma->semesterstunden; } @@ -140,15 +138,16 @@ foreach ($project_arr as $project) }, $projektstunden_per_semester )); - // * if studiensemester exists, sum up hours of projektarbeit, where stundensatz > 0 + // * if studiensemester exists, sum up hours of projektarbeit if ($studiensemester_index !== false) { - $projektstunden_per_semester [$studiensemester_index]['total_semesterstunden'] = $projektstunden_per_semester [$studiensemester_index]['total_semesterstunden'] + $projektstunden; + $projektstunden_per_semester[$studiensemester_index]['total_semesterstunden'] = + $projektstunden_per_semester[$studiensemester_index]['total_semesterstunden'] + $projektstunden; } // * if not, create new index else { - $projektstunden_per_semester []= ( + $projektstunden_per_semester[] = ( array( 'studiensemester_kurzbz'=> $studiensemester_kurzbz, 'total_semesterstunden' => $projektstunden, @@ -171,7 +170,9 @@ foreach ($projektstunden_per_semester as $item) // * if studiensemester exists, merge lehreinheit- and projektarbeit hours if ($studiensemester_index !== false) { - $semesterstunden_per_semester [$studiensemester_index]['total_semesterstunden'] = $semesterstunden_per_semester [$studiensemester_index]['total_semesterstunden'] + $item['total_semesterstunden']; + $semesterstunden_per_semester[$studiensemester_index]['total_semesterstunden'] = + $semesterstunden_per_semester [$studiensemester_index]['total_semesterstunden'] + + $item['total_semesterstunden']; } // * if not, create new index else @@ -202,12 +203,15 @@ $actual_studiensemester_index = array_search($actual_studiensemester, array_map( }, $semesterstunden_per_semester )); -// * if lector is teaching actually, split former teaching activities from actual teaching activities of actual studiensemester +// if lector is teaching actually, split former teaching activities +// from actual teaching activities of actual studiensemester $semesterstunden_of_actual_semester = array(); if ($actual_studiensemester_index !== false) { - $semesterstunden_of_actual_semester = array_slice($semesterstunden_per_semester, $actual_studiensemester_index); // array with actual + future semester - $semesterstunden_per_semester = array_slice($semesterstunden_per_semester, 0, $actual_studiensemester_index); // array with all former semester + // array with actual + future semester + $semesterstunden_of_actual_semester = array_slice($semesterstunden_per_semester, $actual_studiensemester_index); + // array with all former semester + $semesterstunden_per_semester = array_slice($semesterstunden_per_semester, 0, $actual_studiensemester_index); } // Semester begin and ending date of lehreinheit- and projektarbeit studiensemester @@ -257,7 +261,8 @@ if (!empty($semesterstunden_per_semester)) } else { - $data[]= array('total_ss_per_semester'=> ''); // empty if lector has no lehreinheit- or projektarbeitsstunden in the past (before the actual studiensemester) + // empty if lector has no lehreinheit- or projektarbeitsstunden in the past (before the actual studiensemester) + $data[]= array('total_ss_per_semester'=> ''); } // Add data to lehrtaetigkeit.xsl @@ -275,5 +280,3 @@ $doc->output(); // unlink doc from tmp-folder $doc->close(); - - diff --git a/content/mitarbeiter/mitarbeiterdetailoverlay.xul.php b/content/mitarbeiter/mitarbeiterdetailoverlay.xul.php index 8eb009473..1cc8fb34e 100644 --- a/content/mitarbeiter/mitarbeiterdetailoverlay.xul.php +++ b/content/mitarbeiter/mitarbeiterdetailoverlay.xul.php @@ -143,13 +143,18 @@ echo '';