From 865eea224598b2a1e7c2d18902b5b5410b9c1978 Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 29 May 2018 14:13:00 +0200 Subject: [PATCH 01/11] Added PHRASES translation for javascript added: . PhrasesLib.js: translate method for retreiving phrasentexte in users language with JS . PhrasesLib.php: methods to retrieve data from Phrase_model and return as JSON . Phrase_model: method to perform query for categories AND phrases-array AND language . FHC-Header.php: -- included js lib -- generate global FHC_JS_PHRASES_STORAGE_OBJECT Changes of other files: loading libs, inits,... --- application/core/FHC_Controller.php | 4 +- application/libraries/PhrasesLib.php | 43 +++++-- application/models/system/Phrase_model.php | 34 ++++++ .../views/system/infocenter/infocenter.php | 6 + .../system/infocenter/infocenterDetails.php | 2 + application/views/templates/FHC-Header.php | 29 ++++- public/js/PhrasesLib.js | 115 ++++++++++++++++++ system/phrasesupdate.php | 21 ++++ 8 files changed, 244 insertions(+), 10 deletions(-) create mode 100644 public/js/PhrasesLib.js diff --git a/application/core/FHC_Controller.php b/application/core/FHC_Controller.php index fc200d935..65509b890 100644 --- a/application/core/FHC_Controller.php +++ b/application/core/FHC_Controller.php @@ -25,11 +25,11 @@ class FHC_Controller extends CI_Controller * NOTE: The library is loaded with the alias 'p', so must me used with this alias in the rest of the code. * EX: $this->p->t(, ) */ - public function loadPhrases($categories, $language = null) + protected function loadPhrases($categories, $language = null) { $this->load->library('PhrasesLib', array($categories, $language), 'p'); } - + /** * Sets the unique id for the called controller * NOTE: it is only working with HTTP GET request, not neeaded with POST diff --git a/application/libraries/PhrasesLib.php b/application/libraries/PhrasesLib.php index 1194e769c..25d4d1004 100644 --- a/application/libraries/PhrasesLib.php +++ b/application/libraries/PhrasesLib.php @@ -259,7 +259,7 @@ class PhrasesLib * - language: optional parameter must be a string. It's used to load phrases */ private function _extend_construct($params) - { + { // Checks if the $params is an array with at least one element if (is_array($params) && count($params) > 0) { @@ -287,15 +287,44 @@ class PhrasesLib $language = $this->_ci->PersonModel->getLanguage(getAuthUID()); } - // Loads phrases - $phrases = $this->_ci->PhraseModel->getPhrasesByCategoryAndLanguage($categories, $language); + //checks if categories is associative or indexed array + if (ctype_digit(implode('', array_keys($categories)))) + { + // Loads phrases + $phrases = $this->_ci->PhraseModel->getPhrasesByCategoryAndLanguage($categories, $language); - // If there are phrases loaded then store them in the property _phrases - if (hasData($phrases)) + // If there are phrases loaded then store them in the property _phrases + if (hasData($phrases)) + { + $this->_phrases = $phrases->retval; + } + } + else { - $this->_phrases = $phrases->retval; + // Loads specific phrasentexte by category and phrases + $phrases = $this->_ci->PhraseModel->getPhrasesByCategoryAndPhrasesAndLanguage($categories, $language); + + // If there are phrases loaded then store them in the property _phrases + if (hasData($phrases)) + { + $this->_phrases = $phrases->retval; + } } } - } + } } + + public function getJSON() + { + if (is_array($this->_phrases) && !is_null($this->_phrases)) + { + return json_encode($this->_phrases); + } + else + { + //...CECK: better a return than console.log? + console.log('No phrases set to be returned to JS.'); + } + } + } diff --git a/application/models/system/Phrase_model.php b/application/models/system/Phrase_model.php index dff8bebaf..3a364bc2b 100644 --- a/application/models/system/Phrase_model.php +++ b/application/models/system/Phrase_model.php @@ -77,6 +77,40 @@ class Phrase_model extends DB_Model return $this->execQuery($query, array($categories, $language)); } + + /** + * + */ + public function getPhrasesByCategoryAndPhrasesAndLanguage($phrasesParams, $language) + { + $qry = ' + SELECT p.category, p.phrase, pt.orgeinheit_kurzbz, pt.orgform_kurzbz, pt.text + FROM system.tbl_phrase p + INNER JOIN system.tbl_phrasentext pt USING(phrase_id) + WHERE '; + + foreach ($phrasesParams as $category => $phrases) + { + $qry .= ' + (p.category = \'' . $category . '\' + AND phrase IN ('; + foreach ($phrases as $phrase) + { + $qry .= '\'' . $phrase . '\', '; + } + + $qry = rtrim($qry, ', '); + $qry .= ')) AND pt.sprache = \'' . $language . '\' OR '; + } + $qry = rtrim($qry, 'OR '); + + return $this->execQuery($qry, array($phrasesParams, $language)); + + + } + + + /** * Loads all categories diff --git a/application/views/system/infocenter/infocenter.php b/application/views/system/infocenter/infocenter.php index f33abff79..d1bd4ad87 100644 --- a/application/views/system/infocenter/infocenter.php +++ b/application/views/system/infocenter/infocenter.php @@ -5,12 +5,18 @@ 'title' => 'Info Center', 'jquery' => true, 'jqueryui' => true, + 'ajaxlib' => true, 'bootstrap' => true, 'fontawesome' => true, 'sbadmintemplate' => true, 'tablesorter' => true, 'ajaxlib' => true, 'filterwidget' => true, + 'phrases'=> array( + 'person' => array('vorname','nachname'), + 'ui' => array('speichern'), + 'global' => array('mailAnXversandt') + ), 'navigationwidget' => true, 'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css', 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/infocenterPersonDataset.js') diff --git a/application/views/system/infocenter/infocenterDetails.php b/application/views/system/infocenter/infocenterDetails.php index 700c06569..39da27aad 100755 --- a/application/views/system/infocenter/infocenterDetails.php +++ b/application/views/system/infocenter/infocenterDetails.php @@ -7,6 +7,8 @@ 'bootstrap' => true, 'fontawesome' => true, 'jqueryui' => true, + 'ajaxlib' => true, + 'phraseslib' => true, 'tablesorter' => true, 'tinymce' => true, 'sbadmintemplate' => true, diff --git a/application/views/templates/FHC-Header.php b/application/views/templates/FHC-Header.php index 8b4dc058a..147d84e8f 100755 --- a/application/views/templates/FHC-Header.php +++ b/application/views/templates/FHC-Header.php @@ -11,6 +11,7 @@ $calledMethod = $this->router->method; $title = isset($title) ? $title : null; $customCSSs = isset($customCSSs) ? $customCSSs : null; $customJSs = isset($customJSs) ? $customJSs : null; +$phrases = isset($phrases) ? $phrases : null; // By default set the parameters to false $jquery = isset($jquery) ? $jquery : false; @@ -84,6 +85,26 @@ function _generateJSDataStorageObject($calledPath, $calledMethod) echo $toPrint; } +/** + * Generates global JS-Object to pass phrases to other javascripts + */ +function _generateJSPhrasesStorageObject($phrases) +{ + $ci =& get_instance(); + $ci->load->library('PhrasesLib', array($phrases), 'pj'); + + $toPrint = "\n"; + $toPrint .= ''; + $toPrint .= "\n\n"; + + echo $toPrint; +} + + /** * Generates tags for the javascripts you want to include, the parameter could by a string or an array of strings */ @@ -183,6 +204,9 @@ function _generateAddonsJSsInclude($calledFrom) // Generates the global object to pass useful parameters to other javascripts // NOTE: must be called before any other JS include _generateJSDataStorageObject($calledPath, $calledMethod); + + // Generates the global object to pass phrases to javascripts + _generateJSPhrasesStorageObject($phrases); // JQuery V3 if ($jquery === true) _generateJSsInclude('vendor/components/jquery/jquery.min.js'); @@ -196,6 +220,9 @@ function _generateAddonsJSsInclude($calledFrom) // AjaxLib JS if ($ajaxlib === true) _generateJSsInclude('public/js/AjaxLib.js'); + +// // PhfrasesLib JS + if ($phrases != null) _generateJSsInclude('public/js/PhrasesLib.js'); // Bootstrap JS if ($bootstrap === true) _generateJSsInclude('vendor/twbs/bootstrap/dist/js/bootstrap.min.js'); @@ -230,6 +257,6 @@ function _generateAddonsJSsInclude($calledFrom) // Eventually required JS _generateJSsInclude($customJSs); ?> - + diff --git a/public/js/PhrasesLib.js b/public/js/PhrasesLib.js new file mode 100644 index 000000000..f21026553 --- /dev/null +++ b/public/js/PhrasesLib.js @@ -0,0 +1,115 @@ +/** + * FH-Complete + * + * @package + * @author + * @copyright Copyright (c) 2016 fhcomplete.org + * @license GPLv3 + * @link https://fhcomplete.org + * @since Version 1.0.0 + */ + +/** + * Definition and initialization of object FHC_PhraseLib + */ + +var FHC_PhraseLib = { + + //------------------------------------------------------------------------------------------------------------------ + // Public methods + + /** + Returns the phrase-text in the user's language + * @param {String} category : phrase-category + * @param {String} phrase : phrase-name + * @param {array} params : String-parameters to be set in variables in phrasentext + * @returns {String} : phrase-text + */ + t: function(category, phrase, params = []) + { + var category_found = false; + var phrase_found = false; + + //check category and phrase first + if(typeof(category) == "undefined" || category === null + || typeof(phrase) == "undefined" || phrase === null) + { + console.log('Category and/or phrase not found. \n\ + 1. Check params in PhrasesLib.js t-method\n\ + 2. Check params in FHC-Header.php phrases-array'); + return; + } + + //loop through global JS PHRASES STORAGE OBJECT and search for phrase + for(i in FHC_JS_PHRASES_STORAGE_OBJECT) + { + e = FHC_JS_PHRASES_STORAGE_OBJECT[i]; + if (e.category === category) + { + category_found = true; + if (e.phrase === phrase) + { + phrase_found = true; + + //replace if params are set + if ($.isArray(params) && typeof params !== 'undefined' && params !== null) + { + if (params.length !== 0) + { + e.text = replacePhraseVariable(e.text, params); + } + } + else + { + console.log('Could not replace variable. \n\ + Replace-params should be an array.') + } + + return e.text; + } + } + } + + //show error messages for missing categories/phrases + if (!category_found) + { + console.log('Category not found. \n\ + 1. Check params in PhrasesLib.js t-method\n\ + 2. Check params in FHC-Header.php phrases-array'); + } + + if (category_found && !phrase_found) + { + console.log('Phrase not found. \n\ + 1. Check params in PhrasesLib.js t-method\n\ + 2. Check params in FHC-Header.php phrases-array'); + } + } +} + + +//------------------------------------------------------------------------------------------------------------------ +// Helper methods + +/** + Returns phrase with variables being replaced + * @param {String} phrase : phrasen-text (with one ore more variables) + * @param {array} replaceStringArr : String-array to be set in variables in phrasentext (order matters) + * @returns {String} : replaced phrasen-text + */ +function replacePhraseVariable(phrase, replaceStringArr) +{ + for (var i = 0; i < replaceStringArr.length; i++) + { + phrase = phrase.replace(/\{(.*?)\}/, replaceStringArr[i]); + } + return phrase; +} + + + +//...TEST +console.log(FHC_PhraseLib.t('global', 'mailAnXversandt', new Array('c@yahoo.de', 'test'))); + + + diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 585830b9d..37d0e2b9e 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -909,6 +909,27 @@ $phrases = array( ) ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'mailAnXversandt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Mail an {email} versandt.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Mail was sent to {email}.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + //******************************* CORE/ui array( From 7c5995c31890a51c73b5eca10d45ef2701368295 Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 29 May 2018 15:57:10 +0200 Subject: [PATCH 02/11] Code and comments improved --- application/libraries/PhrasesLib.php | 131 ++++++------------ application/models/system/Phrase_model.php | 55 +++----- .../views/system/infocenter/infocenter.php | 4 +- application/views/templates/FHC-Header.php | 25 ++-- public/js/PhrasesLib.js | 128 ++++++----------- 5 files changed, 122 insertions(+), 221 deletions(-) diff --git a/application/libraries/PhrasesLib.php b/application/libraries/PhrasesLib.php index 25d4d1004..9329bcfc4 100644 --- a/application/libraries/PhrasesLib.php +++ b/application/libraries/PhrasesLib.php @@ -14,6 +14,8 @@ class PhrasesLib { $this->_ci =& get_instance(); + $this->_phrases = null; // set the property _phrases as null by default + // CI parser $this->_ci->load->library('parser'); @@ -78,7 +80,6 @@ class PhrasesLib return $this->_ci->PhraseModel->update($phrase_id, $data); } - /** * getVorlagetextByVorlage() - will load tbl_vorlagestudiengang for a spezific Template. */ @@ -179,75 +180,37 @@ class PhrasesLib } /** - * + * Retrives a phrases from the the property _phrases with the given parameters + * It also replace parameters inside the phrase if they are provided */ public function t($category, $phrase, $parameters = array(), $orgeinheit_kurzbz = null, $orgform_kurzbz = null) { - if (isset($this->_phrases) && is_array($this->_phrases)) + // If the property _phrases is populated + if (is_array($this->_phrases)) { + // Loops through the _phrases property for ($i = 0; $i < count($this->_phrases); $i++) { - - $_phrase = $this->_phrases[$i]; - + $_phrase = $this->_phrases[$i]; // single phrase + + // If the single phrase match the given parameters and is not an empty string if ($_phrase->category == $category && $_phrase->phrase == $phrase && $_phrase->orgeinheit_kurzbz == $orgeinheit_kurzbz - && $_phrase->orgform_kurzbz== $orgform_kurzbz - && (!empty($_phrase->text))) - { - if ($parameters == null) - $parameters = array(); - - return $this->_ci->parser->parse_string($_phrase->text, $parameters, true); - } - } - - //fallback 1: if phrase not found in phrases-array, try with default language - $default_language = DEFAULT_LANGUAGE; - $categories = $this->_ci->PhraseModel->getCategories(); - - if (hasData($categories)) - { - $categories = $categories->retval; - foreach($categories as $cat) - $all_categories[] = $cat->category; - } - - $phrases = $this->_ci->PhraseModel->getPhrasesByCategoryAndLanguage($all_categories, $default_language); - - if (hasData($phrases)) - { - $default_phrases = $phrases->retval; - } - - if (isset($default_phrases) && is_array($default_phrases)) - { - for ($i = 0; $i < count($default_phrases); $i++) + && $_phrase->orgform_kurzbz == $orgform_kurzbz + && (!empty(trim($_phrase->text)))) { - $_phrase = $default_phrases[$i]; -// var_dump($_phrase); - -// echo $phrase . "
"; -// echo $_phrase->phrase . "

"; + if (!is_array($parameters)) $parameters = array(); // if params is not an array - if ($_phrase->category == $category - && $_phrase->phrase == $phrase - && $_phrase->orgeinheit_kurzbz == $orgeinheit_kurzbz - && $_phrase->orgform_kurzbz== $orgform_kurzbz) - { - if ($parameters == null) - $parameters = array(); - return $this->_ci->parser->parse_string($_phrase->text, $parameters, true); - } + return $this->_ci->parser->parse_string($_phrase->text, $parameters, true); // parsing } } - - //fallback 2: if phrase not found at all, return phrasename - $phrase = '<< PHRASE ' . $phrase . ' >>'; - return $this->_ci->parser->parse_string($phrase, $parameters, true); - } + } + + // If a valid phrase is not found + return '<< PHRASE '.$phrase.' >>'; } + // ----------------------------------------------------------------------------------------------------------------- // Private methods @@ -255,11 +218,13 @@ class PhrasesLib * Extends the functionalities of the constructor of this class * This is a workaround to use more parameters in the construct since PHP doesn't support many constructors * The new accepted parameters are: - * - categories: could be a string or an array of strings. These are the categories used to load phrases + * - categories: + * - could be a string or an array of strings. These are the categories used to load phrases + * - could be an array of categories, and for each category there is an array of phrases * - language: optional parameter must be a string. It's used to load phrases */ private function _extend_construct($params) - { + { // Checks if the $params is an array with at least one element if (is_array($params) && count($params) > 0) { @@ -287,44 +252,32 @@ class PhrasesLib $language = $this->_ci->PersonModel->getLanguage(getAuthUID()); } - //checks if categories is associative or indexed array + // checks if categories is associative or indexed array if (ctype_digit(implode('', array_keys($categories)))) - { - // Loads phrases - $phrases = $this->_ci->PhraseModel->getPhrasesByCategoryAndLanguage($categories, $language); - - // If there are phrases loaded then store them in the property _phrases - if (hasData($phrases)) - { - $this->_phrases = $phrases->retval; - } - } - else { - // Loads specific phrasentexte by category and phrases + // Loads phrases + $phrases = $this->_ci->PhraseModel->getPhrasesByCategoryAndLanguage($categories, $language); + } + else + { + // Loads specific phrasentexte by category and phrases $phrases = $this->_ci->PhraseModel->getPhrasesByCategoryAndPhrasesAndLanguage($categories, $language); + } - // If there are phrases loaded then store them in the property _phrases - if (hasData($phrases)) - { - $this->_phrases = $phrases->retval; - } + // If there are phrases loaded then store them in the property _phrases + if (hasData($phrases)) + { + $this->_phrases = $phrases->retval; } } - } - } - - public function getJSON() - { - if (is_array($this->_phrases) && !is_null($this->_phrases)) - { - return json_encode($this->_phrases); } - else - { - //...CECK: better a return than console.log? - console.log('No phrases set to be returned to JS.'); - } } + /** + * Returns the property _phrases JSON encoded + */ + public function getJSON() + { + return json_encode($this->_phrases); + } } diff --git a/application/models/system/Phrase_model.php b/application/models/system/Phrase_model.php index 3a364bc2b..da9da1a7e 100644 --- a/application/models/system/Phrase_model.php +++ b/application/models/system/Phrase_model.php @@ -77,49 +77,38 @@ class Phrase_model extends DB_Model return $this->execQuery($query, array($categories, $language)); } - + /** - * + * Loads phrases using category(s) and language as keys using associative category array + * that contains also phrases for each category + * They are ordered by p.category, p.phrase, pt.orgeinheit_kurzbz DESC and pt.orgform_kurzbz DESC' */ public function getPhrasesByCategoryAndPhrasesAndLanguage($phrasesParams, $language) - { - $qry = ' + { + $query = ' SELECT p.category, p.phrase, pt.orgeinheit_kurzbz, pt.orgform_kurzbz, pt.text - FROM system.tbl_phrase p - INNER JOIN system.tbl_phrasentext pt USING(phrase_id) - WHERE '; - + FROM system.tbl_phrase p + INNER JOIN system.tbl_phrasentext pt USING(phrase_id) + WHERE '; + foreach ($phrasesParams as $category => $phrases) { - $qry .= ' + $query .= ' (p.category = \'' . $category . '\' - AND phrase IN ('; + AND phrase IN ('; foreach ($phrases as $phrase) { - $qry .= '\'' . $phrase . '\', '; + $query .= '\'' . $phrase . '\', '; } - - $qry = rtrim($qry, ', '); - $qry .= ')) AND pt.sprache = \'' . $language . '\' OR '; + + $query = rtrim($query, ', '); + $query .= ')) AND pt.sprache = \'' . $language . '\' OR '; } - $qry = rtrim($qry, 'OR '); - - return $this->execQuery($qry, array($phrasesParams, $language)); - + $query = rtrim($query, 'OR '); + + $query .= ' ORDER BY p.category, p.phrase, pt.orgeinheit_kurzbz DESC, pt.orgform_kurzbz DESC'; + + return $this->execQuery($query, array($phrasesParams, $language)); } - - - - - /** - * Loads all categories - */ - public function getCategories() - { - $query = 'SELECT DISTINCT category - FROM system.tbl_phrase'; - - return $this->execQuery($query); - } -} \ No newline at end of file +} diff --git a/application/views/system/infocenter/infocenter.php b/application/views/system/infocenter/infocenter.php index d1bd4ad87..b747d9810 100644 --- a/application/views/system/infocenter/infocenter.php +++ b/application/views/system/infocenter/infocenter.php @@ -13,10 +13,10 @@ 'ajaxlib' => true, 'filterwidget' => true, 'phrases'=> array( - 'person' => array('vorname','nachname'), + 'person' => array('vorname', 'nachname'), 'ui' => array('speichern'), 'global' => array('mailAnXversandt') - ), + ), 'navigationwidget' => true, 'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css', 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/infocenterPersonDataset.js') diff --git a/application/views/templates/FHC-Header.php b/application/views/templates/FHC-Header.php index 147d84e8f..fcfc4cdf6 100755 --- a/application/views/templates/FHC-Header.php +++ b/application/views/templates/FHC-Header.php @@ -92,11 +92,11 @@ function _generateJSPhrasesStorageObject($phrases) { $ci =& get_instance(); $ci->load->library('PhrasesLib', array($phrases), 'pj'); - + $toPrint = "\n"; $toPrint .= ''; $toPrint .= "\n\n"; @@ -104,7 +104,6 @@ function _generateJSPhrasesStorageObject($phrases) echo $toPrint; } - /** * Generates tags for the javascripts you want to include, the parameter could by a string or an array of strings */ @@ -204,8 +203,9 @@ function _generateAddonsJSsInclude($calledFrom) // Generates the global object to pass useful parameters to other javascripts // NOTE: must be called before any other JS include _generateJSDataStorageObject($calledPath, $calledMethod); - + // Generates the global object to pass phrases to javascripts + // NOTE: must be called before including the PhrasesLib.js _generateJSPhrasesStorageObject($phrases); // JQuery V3 @@ -218,12 +218,6 @@ function _generateAddonsJSsInclude($calledFrom) _generateJSsInclude('vendor/components/jqueryui/ui/i18n/datepicker-de.js'); // datepicker german language file } - // AjaxLib JS - if ($ajaxlib === true) _generateJSsInclude('public/js/AjaxLib.js'); - -// // PhfrasesLib JS - if ($phrases != null) _generateJSsInclude('public/js/PhrasesLib.js'); - // Bootstrap JS if ($bootstrap === true) _generateJSsInclude('vendor/twbs/bootstrap/dist/js/bootstrap.min.js'); @@ -245,6 +239,13 @@ function _generateAddonsJSsInclude($calledFrom) _generateJSsInclude('vendor/BlackrockDigital/startbootstrap-sb-admin-2/dist/js/sb-admin-2.min.js'); } + // AjaxLib JS + // NOTE: must be called before including others JS libraries that use it + if ($ajaxlib === true) _generateJSsInclude('public/js/AjaxLib.js'); + + // PhrasesLib JS + if ($phrases != null) _generateJSsInclude('public/js/PhrasesLib.js'); + // FilterWidget JS if($filterwidget === true) _generateJSsInclude('public/js/FilterWidget.js') ; @@ -257,6 +258,6 @@ function _generateAddonsJSsInclude($calledFrom) // Eventually required JS _generateJSsInclude($customJSs); ?> - + diff --git a/public/js/PhrasesLib.js b/public/js/PhrasesLib.js index f21026553..a676bb7c8 100644 --- a/public/js/PhrasesLib.js +++ b/public/js/PhrasesLib.js @@ -12,104 +12,62 @@ /** * Definition and initialization of object FHC_PhraseLib */ - var FHC_PhraseLib = { - + //------------------------------------------------------------------------------------------------------------------ // Public methods /** - Returns the phrase-text in the user's language - * @param {String} category : phrase-category - * @param {String} phrase : phrase-name - * @param {array} params : String-parameters to be set in variables in phrasentext - * @returns {String} : phrase-text - */ - t: function(category, phrase, params = []) - { - var category_found = false; - var phrase_found = false; - - //check category and phrase first - if(typeof(category) == "undefined" || category === null - || typeof(phrase) == "undefined" || phrase === null) + * Returns the phrase-text in the user's language + * @param {String} category : phrase-category + * @param {String} phrase : phrase-name + * @param {array} params : String-parameters to be set in variables in phrasentext + * @returns {String} : phrase-text + */ + t: function(category, phrase, params = []) { + + // Checks if FHC_JS_PHRASES_STORAGE_OBJECT is an array + if ($.isArray(FHC_JS_PHRASES_STORAGE_OBJECT)) { - console.log('Category and/or phrase not found. \n\ - 1. Check params in PhrasesLib.js t-method\n\ - 2. Check params in FHC-Header.php phrases-array'); - return; - } - - //loop through global JS PHRASES STORAGE OBJECT and search for phrase - for(i in FHC_JS_PHRASES_STORAGE_OBJECT) - { - e = FHC_JS_PHRASES_STORAGE_OBJECT[i]; - if (e.category === category) + // loop through global JS PHRASES STORAGE OBJECT and search for phrase + for (var i in FHC_JS_PHRASES_STORAGE_OBJECT) { - category_found = true; - if (e.phrase === phrase) + var phraseObj = FHC_JS_PHRASES_STORAGE_OBJECT[i]; // Single phrase object + + // If the single phrase match the given parameters and is not an empty string + if (phraseObj.category == category + && phraseObj.phrase == phrase + && phraseObj.text != null + && phraseObj.text.trim() != '') { - phrase_found = true; - - //replace if params are set - if ($.isArray(params) && typeof params !== 'undefined' && params !== null) + // If params is null or not an array + if (params == null || (params != null && $.isArray(params))) { - if (params.length !== 0) - { - e.text = replacePhraseVariable(e.text, params); - } + params = []; } - else - { - console.log('Could not replace variable. \n\ - Replace-params should be an array.') - } - - return e.text; + + return = FHC_PhraseLib._replacePhraseVariable(phraseObj.text, params); // parsing } } } - - //show error messages for missing categories/phrases - if (!category_found) + + return '<< PHRASE ' + phraseObj.phrase + ' >>'; + }, + + //------------------------------------------------------------------------------------------------------------------ + // Private methods + + /** + * Returns phrase with variables being replaced + * @param {String} phrase : phrasen-text (with one ore more variables) + * @param {array} replaceStringArr : String-array to be set in variables in phrasentext (order matters) + * @returns {String} : replaced phrasen-text + */ + _replacePhraseVariable: function(phrase, replaceStringArr) { + for (var i = 0; i < replaceStringArr.length; i++) { - console.log('Category not found. \n\ - 1. Check params in PhrasesLib.js t-method\n\ - 2. Check params in FHC-Header.php phrases-array'); + phrase = phrase.replace(/\{(.*?)\}/, replaceStringArr[i]); } - - if (category_found && !phrase_found) - { - console.log('Phrase not found. \n\ - 1. Check params in PhrasesLib.js t-method\n\ - 2. Check params in FHC-Header.php phrases-array'); - } - } -} - - -//------------------------------------------------------------------------------------------------------------------ -// Helper methods - -/** - Returns phrase with variables being replaced - * @param {String} phrase : phrasen-text (with one ore more variables) - * @param {array} replaceStringArr : String-array to be set in variables in phrasentext (order matters) - * @returns {String} : replaced phrasen-text - */ -function replacePhraseVariable(phrase, replaceStringArr) -{ - for (var i = 0; i < replaceStringArr.length; i++) - { - phrase = phrase.replace(/\{(.*?)\}/, replaceStringArr[i]); + return phrase; } - return phrase; -} - - - -//...TEST -console.log(FHC_PhraseLib.t('global', 'mailAnXversandt', new Array('c@yahoo.de', 'test'))); - - - +}; From 855be4abe5cd53003df1c3c8fd2da852d75f1743 Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Mon, 4 Jun 2018 15:15:43 +0200 Subject: [PATCH 03/11] Zeitaufzeichnung Anpassung Link ins Moodle --- cis/private/tools/zeitaufzeichnung.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 98fdf4115..9507b0f89 100755 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -738,7 +738,11 @@ if($projekt->getProjekteMitarbeiter($user, true)) "; if ($p->t("dms_link/handbuchZeitaufzeichnung")!='') { - echo '

'.$p->t("zeitaufzeichnung/handbuchZeitaufzeichnung").'

'; + // An der FHTW wird ins Moodle verlinkt + if (CAMPUS_NAME == 'FH Technikum Wien') + echo '

'.$p->t("zeitaufzeichnung/handbuchZeitaufzeichnung").'

'; + else + echo '

'.$p->t("zeitaufzeichnung/handbuchZeitaufzeichnung").'

'; } if ($p->t("dms_link/fiktiveNormalarbeitszeit")!='') { From 9ae236a8e1a3b4ebd352a57ccadd61b8f97eeeb9 Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Mon, 4 Jun 2018 15:17:15 +0200 Subject: [PATCH 04/11] FAS Bescheid Englisch entfernt Bescheid gibt es nur Zweisprachig --- content/fas.xul.php | 6 - locale/de-AT/fas.dtd | 2 +- system/xsl/bescheid_0.xsl | 256 +++++++++++++++++++++++--------- system/xsl/bescheid_style_0.xsl | 82 +++++----- 4 files changed, 232 insertions(+), 114 deletions(-) diff --git a/content/fas.xul.php b/content/fas.xul.php index 81969fa7f..9f31ec1c3 100644 --- a/content/fas.xul.php +++ b/content/fas.xul.php @@ -680,12 +680,6 @@ foreach($addon_obj->result as $addon) label = "&menu-dokumente-bescheid_deutsch.label;" command = "menu-dokumente-bescheid_deutsch:command" accesskey = "&menu-dokumente-bescheid_deutsch.accesskey;"/> - - + diff --git a/system/xsl/bescheid_0.xsl b/system/xsl/bescheid_0.xsl index 806de06fd..3f7fde34d 100644 --- a/system/xsl/bescheid_0.xsl +++ b/system/xsl/bescheid_0.xsl @@ -18,10 +18,45 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" - + - @@ -32,25 +67,59 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + - + + + + - + + + + + + + + + + + + + + + + @@ -66,56 +135,71 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" Diese wird als erstes vom RDF geliefert --> - - + + - Bescheid - - Staatsbürgerschaft nicht angegeben - Datum der Abschlussprüfung nicht gesetzt - Kein akademischer Grad ausgewählt - Sponsionsdatum nicht gesetzt + + + + Bescheid - - - - Das Kollegium der Fachhochschule Technikum Wien verleiht - - - - geboren am in + + Geburtsdatum fehlt + Datum der Abschlussprüfung nicht gesetzt + Kein akademischer Grad ausgewählt + Geburtsnation fehlt + Name des Rektors fehlt + Englische Geburtsnation fehlt + + + Das Kollegium der Fachhochschule Technikum Wien verleiht + + + + + geboren am in , - - + - der + der - die + die - die/der + die/der - durch Ablegung der - + durch Ablegung der + Bachelor Master Diplom Lehrgang Kurzstudium - prüfung am - den - + prüfung am den Bachelor Master @@ -123,45 +207,79 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" Lehrgang Kurzstudium studiengang - - - (Studiengangskennzahl ) - - ordnungsgemäß abgeschlossen hat, - gemäß § 6 Abs 1 FHStG, BGBl. Nr. 340/1993, idgF, - den akademischen Grad - - - abgekürzt - . - - - Rechtsmittelbelehrung: Gegen diesen Bescheid ist gemäß § 10 Abs 6 FHStG, BGBl. Nr. - 340/1993, idgF, eine Beschwerde beim Bundesverwaltungsgericht zulässig. Sie ist innerhalb - von vier Wochen ab Zustellung bei der belangten Behörde (Kollegium der Fachhochschule - Technikum Wien) einzubringen. - + + + + (Studiengangskennzahl ) + + ordnungsgemäß abgeschlossen hat, + gemäß § 6 Abs 1 FHStG, BGBl. Nr. 340/1993, idgF, den akademischen Grad + + + born on in + + + , + + + who, by taking the + + Bachelor + Master + Diploma + Course + Short study + examination on , has duly completed the + + Bachelor + Master + Diploma + Course + Short study + 's degree program + + + + + + + (Degree Program Code ) + + according to § 6 Abs 1 FHStG, BGBl. No. 340/1993, as amended, the academic degree of + + + + + () + + + + Rechtsmittelbelehrung: Gegen diesen Bescheid ist gemäß § 10 Abs 6 FHStG, BGBl. Nr. 340/1993, idgF, eine Beschwerde beim Bundesverwaltungsgericht zulässig. Sie ist innerhalb von vier Wochen ab Zustellung bei der belangten Behörde (Kollegium der Fachhochschule Technikum Wien) einzubringen. + Appeal notice: An appeal against this decision may be lodged with the Federal Administrative Court (Bundesverwaltungsgericht) in accordance with Section 10 (6) of the FHStG, Federal Law Gazette no. 340/1993, as amended. It must be submitted to the relevant authority (Council of the University of Applied Sciences Technikum Wien) within four weeks of notification. + + - - - + + + + - Wien, - - Für das Fachhochschulkollegium - Der Rektor - - - - - + + Wien, + + Für das Fachhochschulkollegium + Der Rektor + + + + - + \ No newline at end of file diff --git a/system/xsl/bescheid_style_0.xsl b/system/xsl/bescheid_style_0.xsl index d8e2b9dd3..b60996661 100644 --- a/system/xsl/bescheid_style_0.xsl +++ b/system/xsl/bescheid_style_0.xsl @@ -31,13 +31,13 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" - + - + @@ -65,28 +65,13 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" - - - - - - - - - - - - - - - - - - - - - - + + + + + + + @@ -94,52 +79,52 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" - + - + - + - + - + - + - + - + - + - + @@ -148,17 +133,38 @@ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" + + + + + + + + + + + - - + - + + + - + + + + + + Kollegium der FH Technikum Wien + Höchstädtplatz 6 + A-1200 Wien + + From 9a6a420cb133abe430d3457278a801e4d7c9ea68 Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Tue, 5 Jun 2018 17:28:56 +0200 Subject: [PATCH 05/11] Bescheid Tabelle statt Spalten im oberen Teil --- system/xsl/bescheid_0.xsl | 173 ++++++++++++++++++++++---------------- 1 file changed, 99 insertions(+), 74 deletions(-) diff --git a/system/xsl/bescheid_0.xsl b/system/xsl/bescheid_0.xsl index 3f7fde34d..02f4e4167 100644 --- a/system/xsl/bescheid_0.xsl +++ b/system/xsl/bescheid_0.xsl @@ -66,6 +66,18 @@ office:version="1.2"> + + + + + + + + + + + + @@ -174,80 +186,93 @@ office:version="1.2"> - - geboren am in - - - , - - - - - der - - - die - - - die/der - - - durch Ablegung der - - Bachelor - Master - Diplom - Lehrgang - Kurzstudium - prüfung am den - - Bachelor - Master - Diplom - Lehrgang - Kurzstudium - studiengang - - - - (Studiengangskennzahl ) - - ordnungsgemäß abgeschlossen hat, - gemäß § 6 Abs 1 FHStG, BGBl. Nr. 340/1993, idgF, den akademischen Grad - - - born on in - - - , - - - who, by taking the - - Bachelor - Master - Diploma - Course - Short study - examination on , has duly completed the - - Bachelor - Master - Diploma - Course - Short study - 's degree program - - - - - - - (Degree Program Code ) - - according to § 6 Abs 1 FHStG, BGBl. No. 340/1993, as amended, the academic degree of - - + + + + + + + geboren am in + + + , + + + + + der + + + die + + + die/der + + + durch Ablegung der + + Bachelor + Master + Diplom + Lehrgang + Kurzstudium + prüfung am den + + Bachelor + Master + Diplom + Lehrgang + Kurzstudium + studiengang + + + + born on in + + + , + + + who, by taking the + + Bachelor + Master + Diploma + Course + Short study + examination on , has duly completed the + + Bachelor + Master + Diploma + Course + Short study + 's degree program + + + + + + + (Studiengangskennzahl ) + + + + (Degree Program Code ) + + + + + + ordnungsgemäß abgeschlossen hat, + gemäß § 6 Abs 1 FHStG, BGBl. Nr. 340/1993, idgF, den akademischen Grad + + + + according to § 6 Abs 1 FHStG, BGBl. No. 340/1993, as amended, the academic degree of + + + () From 2b8782afe867b21a52b5064fe2eb0942767df36b Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Tue, 5 Jun 2018 17:31:07 +0200 Subject: [PATCH 06/11] Funktion getAkten mit neuen Parametern $returnInhalt und $order - Wenn $returnInhalt true ist, wird auch der Inhalt der Akte geladen. Default false - $order: Sortierreihenfolge der Spalten im SQL --- include/akte.class.php | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/include/akte.class.php b/include/akte.class.php index 9bc65eb2a..6c053f6a5 100644 --- a/include/akte.class.php +++ b/include/akte.class.php @@ -297,16 +297,21 @@ class akte extends basis_db * @param $stg_kz -> wenn gesetzt werden nur Akten angezeigt die ZUSÄTZLICH zum Studiengang abgegeben worden sind ohne Zeugnis * @param $prestudent_id -> gesetzt wenn auch stg_kz gesetzt ist um sicherzugehen, dass Akten, die er schon für seinen Studiengang abgegeben hat, * nicht mehr angezeigt werden + * @param boolean $returnInhalt Wenn true, wird auch den Inhalt (base64-Code) geladen, sonst nur allgemeine Informationen + * @param string $order Sortierreihenfolge im SQL * @return true wenn ok, sonst false */ - public function getAkten($person_id, $dokument_kurzbz=null, $stg_kz = null, $prestudent_id = null) + public function getAkten($person_id, $dokument_kurzbz=null, $stg_kz = null, $prestudent_id = null, $returnInhalt = false, $order = 'erstelltam') { $qry = "SELECT akte_id, person_id, dokument_kurzbz, mimetype, erstelltam, gedruckt, titel_intern, anmerkung_intern, titel, bezeichnung, updateamum, insertamum, updatevon, insertvon, uid, dms_id, anmerkung, nachgereicht, CASE WHEN inhalt is not null THEN true ELSE false END as inhalt_vorhanden, - nachgereicht_am, ausstellungsnation, formal_geprueft_amum, archiv, signiert, stud_selfservice - FROM public.tbl_akte WHERE person_id=".$this->db_add_param($person_id, FHC_INTEGER); + nachgereicht_am, ausstellungsnation, formal_geprueft_amum, archiv, signiert, stud_selfservice"; + if($returnInhalt === true) + $qry.=",inhalt "; + + $qry.=" FROM public.tbl_akte WHERE person_id=".$this->db_add_param($person_id, FHC_INTEGER); if($dokument_kurzbz!=null) $qry.=" AND dokument_kurzbz=".$this->db_add_param($dokument_kurzbz); if($stg_kz != null && $prestudent_id != null) @@ -315,7 +320,8 @@ class akte extends basis_db (SELECT dokument_kurzbz FROM public.tbl_dokumentprestudent JOIN public.tbl_dokument USING(dokument_kurzbz) WHERE prestudent_id=".$this->db_add_param($prestudent_id).")"; - $qry.=" ORDER BY erstelltam"; + if ($order != '') + $qry.=" ORDER BY ".$order; $this->errormsg = $qry; @@ -328,7 +334,9 @@ class akte extends basis_db $akten->akte_id = $row->akte_id; $akten->person_id = $row->person_id; $akten->dokument_kurzbz = $row->dokument_kurzbz; - //$akte->inhalt = $row->inhalt; + if($returnInhalt === true) + $akten->inhalt = $row->inhalt; + $akten->inhalt_vorhanden = $this->db_parse_bool($row->inhalt_vorhanden); $akten->mimetype = $row->mimetype; $akten->erstelltam = $row->erstelltam; From b9a1ad6b6cc02625be161cdf74b9965fe7e89ecc Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Tue, 5 Jun 2018 17:37:05 +0200 Subject: [PATCH 07/11] Mehrfach-Export von Archivdokumenten MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Nach Rechtsklick auf Studierenden gibt es die Auswahl "Archivdokument exportieren" - Derzeit nur für Bescheid - Mehrfachmarkierung von Studierenden möglich --- content/pdfExport.php | 831 +++++++++++++---------- content/student/studentenoverlay.xul.php | 5 + content/student/studentoverlay.js.php | 37 + 3 files changed, 522 insertions(+), 351 deletions(-) diff --git a/content/pdfExport.php b/content/pdfExport.php index 44e30c7a0..2954dc276 100644 --- a/content/pdfExport.php +++ b/content/pdfExport.php @@ -45,6 +45,8 @@ require_once('../include/studiengang.class.php'); require_once('../include/studiensemester.class.php'); require_once('../include/studienordnung.class.php'); require_once('../include/dokument_export.class.php'); +require_once('../include/dokument.class.php'); +require_once('../include/pdf.class.php'); $user = get_uid(); $db = new basis_db(); @@ -52,414 +54,541 @@ $db = new basis_db(); $variable_obj = new variable(); $variable_obj->loadVariables($user); -//Parameter holen -if (isset($_GET['xml'])) - $xml = $_GET['xml']; -else - die('Fehlerhafte Parameteruebergabe'); -if (isset($_GET['xsl'])) - $xsl = $_GET['xsl']; -else - die('Fehlerhafte Parameteruebergabe'); +$archivdokument = ''; -if(isset($_GET['sign'])) - $sign = true; -else - $sign = false; - -// Studiengang ermitteln dessen Vorlage verwendet werden soll -$xsl_stg_kz = 0; -// Direkte uebergabe des Studienganges dessen Vorlage verwendet werden soll -if (isset($_GET['xsl_stg_kz'])) - $xsl_stg_kz = $_GET['xsl_stg_kz']; -else +// Wenn der Parameter archivdokument übergeben wird, werden ein oder mehrere Dokumente aus dem Archiv zu einem PDF zusammengefügt und ausgegeben +// Ansonsten wird ein neues XML-Dokument erstellt +if (isset($_GET['archivdokument'])) { - // Wenn eine Studiengangskennzahl uebergeben wird, wird die Vorlage dieses Studiengangs verwendet - if (isset($_GET['stg_kz'])) - $xsl_stg_kz = $_GET['stg_kz']; - else - { - // Werden UIDs oder Prestudent_IDs uebergeben, wird die Vorlage des Studiengangs genommen - // in dem der 1. Studierende in der Liste ist - if (isset($_GET['uid']) && $_GET['uid']!='') - { - if (strstr($_GET['uid'],';')) - $uids = explode(';',$_GET['uid']); - else - $uids[1] = $_GET['uid']; + $archivdokument = $_GET['archivdokument']; + $allDocs = array(); + $errorText = ''; + + $dokument = new dokument(); + $dokument->loadDokumenttyp($archivdokument); + + $pdf = new pdf(); + + // Temporaeren Ordner fuer die Erstellung der Dokumente generieren + $tmpDir = sys_get_temp_dir() . "/fhc_archivexport_" . uniqid(); + + if (!file_exists($tmpDir)) + mkdir($tmpDir, 0777, true); - $student_obj = new student(); - if ($student_obj->load($uids[1])) + // Studierende für Rechteabfrage laden + if (isset($_GET['uid']) && $_GET['uid'] != '') + { + if (strstr($_GET['uid'],';')) + { + $uids = explode(';',$_GET['uid']); + } + else + $uids[1] = $_GET['uid']; + + $student_obj = new student(); + if ($student_obj->load($uids[1])) + { + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($user); + + if (!$rechte->isBerechtigt('admin', $student_obj->studiengang_kz, 'suid') + && !$rechte->isBerechtigt('assistenz', $student_obj->studiengang_kz, 'suid')) + die('Sie haben keine Berechtigung für diese Studierenden'); + else { - $xsl_stg_kz = $student_obj->studiengang_kz; + // Die jeweils letzte (aktuellste) Akte dieses Typs von jedem Studierenden laden und in eine temporäre Datei schreiben + foreach ($uids AS $value) + { + // Leere Einträge überspringen + if ($value == '') + continue; + + $student_obj = new student($value); + $person_id = $student_obj->person_id; + $akte = new akte(); + $akte->getAkten($person_id, $archivdokument, null, null, true, 'erstelltam DESC'); + + if (isset($akte->result[0])) + { + $filename = ''; + if($akte->result[0]->inhalt != '') + { + $filename = $tmpDir . "/" . uniqid(); + + $fileData = base64_decode($akte->result[0]->inhalt); + file_put_contents($filename, $fileData); + + $allDocs[] = $filename; + } + else + $errorText .= "Das Dokument ".$dokument->bezeichnung." bei ".$student_obj->nachname." ".$student_obj->vorname." (".$value.") ist leer\n"; + } + else + $errorText .= $student_obj->nachname." ".$student_obj->vorname." (".$value.") hat kein Dokument '".$dokument->bezeichnung."' im Archiv\n"; + } + if (count($allDocs) == 0) + { + rmdir($tmpDir); + die('Bei keinem der gewählten Studierenden ist einen Bescheid vorhanden'); + } + + // Textseite mit Errormessages generieren und in PDF umwandeln + if ($errorText != '') + { + $errorfile = $tmpDir . "/" . uniqid() . ".txt"; + file_put_contents($errorfile, $errorText); + + $newnameErrorfile = $tmpDir . "/" . uniqid(); + + $docExport = new dokument_export(); + $docExport->convert($errorfile, $newnameErrorfile, "pdf"); + unlink($errorfile); + + // Konvertiertes File an erste Position im Array hängen + array_unshift($allDocs, $newnameErrorfile); + } + + $finishedPdf = $tmpDir . "/".$archivdokument."_Album.pdf"; + $pdf->merge($allDocs, $finishedPdf); + + foreach ($allDocs as $doc) + unlink($doc); + + $fsize = filesize($finishedPdf); + + if(!$handle = fopen($finishedPdf,'r')) + die('load failed'); + + header('Content-type: application/pdf'); + header('Content-Disposition: attachment; filename="'.$archivdokument.'_Album.pdf"'); + header('Content-Length: '.$fsize); + + while (!feof($handle)) + { + echo fread($handle, 8192); + } + fclose($handle); + + unlink($finishedPdf); + rmdir($tmpDir); } } - elseif (isset($_GET['prestudent_id']) && $_GET['prestudent_id']!='') + else + die('Der/Die Studierenden konnte nicht geladen werden'); + } +} +else +{ + //Parameter holen + if (isset($_GET['xml'])) + $xml = $_GET['xml']; + else + die('Fehlerhafte Parameteruebergabe'); + + if (isset($_GET['xsl'])) + $xsl = $_GET['xsl']; + else + die('Fehlerhafte Parameteruebergabe'); + + if(isset($_GET['sign'])) + $sign = true; + else + $sign = false; + + // Studiengang ermitteln dessen Vorlage verwendet werden soll + $xsl_stg_kz = 0; + // Direkte uebergabe des Studienganges dessen Vorlage verwendet werden soll + if (isset($_GET['xsl_stg_kz'])) + $xsl_stg_kz = $_GET['xsl_stg_kz']; + else + { + // Wenn eine Studiengangskennzahl uebergeben wird, wird die Vorlage dieses Studiengangs verwendet + if (isset($_GET['stg_kz'])) + $xsl_stg_kz = $_GET['stg_kz']; + else { - if (strstr($_GET['prestudent_id'],';')) - $prestudent_ids = explode(';',$_GET['prestudent_id']); - else - $prestudent_ids[1] = $_GET['prestudent_id']; - - $prestudent_obj = new prestudent(); - if ($prestudent_obj->load($prestudent_ids[1])) + // Werden UIDs oder Prestudent_IDs uebergeben, wird die Vorlage des Studiengangs genommen + // in dem der 1. Studierende in der Liste ist + if (isset($_GET['uid']) && $_GET['uid']!='') { - $xsl_stg_kz = $prestudent_obj->studiengang_kz; + if (strstr($_GET['uid'],';')) + $uids = explode(';',$_GET['uid']); + else + $uids[1] = $_GET['uid']; + + $student_obj = new student(); + if ($student_obj->load($uids[1])) + { + $xsl_stg_kz = $student_obj->studiengang_kz; + } + } + elseif (isset($_GET['prestudent_id']) && $_GET['prestudent_id']!='') + { + if (strstr($_GET['prestudent_id'],';')) + $prestudent_ids = explode(';',$_GET['prestudent_id']); + else + $prestudent_ids[1] = $_GET['prestudent_id']; + + $prestudent_obj = new prestudent(); + if ($prestudent_obj->load($prestudent_ids[1])) + { + $xsl_stg_kz = $prestudent_obj->studiengang_kz; + } } } } -} -if (isset($_GET['xsl_oe_kurzbz'])) - $xsl_oe_kurzbz = $_GET['xsl_oe_kurzbz']; -else - $xsl_oe_kurzbz = ''; - -//Parameter setzen -$params = 'xmlformat=xml'; - -// GET Parameter die an XML durchgereicht werden -foreach ($_GET as $getkey=>$getvalue) -{ - if (in_array($getkey, - array('uid', 'stg_kz', 'person_id', 'id', 'prestudent_id', 'buchungsnummern', 'ss', 'abschlusspruefung_id', - 'typ', 'all', 'preoutgoing_id', 'lvid', 'projekt_kurzbz', 'von', 'bis', 'stundevon', 'stundebis', - 'sem', 'lehreinheit', 'mitarbeiter_uid', 'studienordnung_id', 'fixangestellt', 'standort', - 'abrechnungsmonat', 'form') + if (isset($_GET['xsl_oe_kurzbz'])) + $xsl_oe_kurzbz = $_GET['xsl_oe_kurzbz']; + else + $xsl_oe_kurzbz = ''; + + //Parameter setzen + $params = 'xmlformat=xml'; + + // GET Parameter die an XML durchgereicht werden + foreach ($_GET as $getkey=>$getvalue) + { + if (in_array($getkey, + array('uid', 'stg_kz', 'person_id', 'id', 'prestudent_id', 'buchungsnummern', 'ss', 'abschlusspruefung_id', + 'typ', 'all', 'preoutgoing_id', 'lvid', 'projekt_kurzbz', 'von', 'bis', 'stundevon', 'stundebis', + 'sem', 'lehreinheit', 'mitarbeiter_uid', 'studienordnung_id', 'fixangestellt', 'standort', + 'abrechnungsmonat', 'form') + ) ) - ) - { - $params .= '&'.$getkey.'='.urlencode($getvalue); + { + $params .= '&'.$getkey.'='.urlencode($getvalue); + } } -} - -if (isset($_GET['vertrag_id'])) -{ - foreach($_GET['vertrag_id'] as $id) + + if (isset($_GET['vertrag_id'])) { - $params .= '&vertrag_id[]='.urlencode($id); - } -} -if (isset($_GET['version']) && is_numeric($_GET['version'])) - $version = $_GET['version']; -else - $version = null; - -$output = (isset($_GET['output'])?$_GET['output']:'odt'); - -$rechte = new benutzerberechtigung(); -$rechte->getBerechtigungen($user); - -//OE fuer Output ermitteln - -if ($xsl_oe_kurzbz != '') -{ - $oe_kurzbz = $xsl_oe_kurzbz; -} -else -{ - if ($xsl_stg_kz == '') - $xsl_stg_kz = '0'; - $oe = new studiengang(); - $oe->load($xsl_stg_kz); - $oe_kurzbz = $oe->oe_kurzbz; -} - -//Darf der User Dokumente in einem NICHT-PDF-Format exportieren? -if (isset($_GET['output']) && $_GET['output'] != 'pdf') -{ - if (!$rechte->isBerechtigt('system/change_outputformat',$oe_kurzbz)) - { - $output = 'pdf'; + foreach($_GET['vertrag_id'] as $id) + { + $params .= '&vertrag_id[]='.urlencode($id); + } } + if (isset($_GET['version']) && is_numeric($_GET['version'])) + $version = $_GET['version']; else - $output = $_GET['output']; -} -else - $output = 'pdf'; - -$vorlage = new vorlage(); -if(!$vorlage->loadVorlage($xsl)) - die('Vorlage wurde nicht gefunden'); - -//Berechtigung pruefen -if ($xsl == 'AccountInfo') -{ - $isberechtigt = false; - - $uids = explode(';',$_GET['uid']); - foreach ($uids as $uid) - { - //Berechtigung fuer das Drucken des Accountinfoblattes pruefen - $ma = new mitarbeiter(); - if($ma->load($uid)) - { - //Mitarbeiterrechte erforderlich - if ($rechte->isBerechtigt('admin', 0, 'suid') || $rechte->isBerechtigt('mitarbeiter', 0, 'suid')) - { - $isberechtigt = true; - } - } - - $stud = new student(); - if ($stud->load($uid)) - { - //Rechte pruefen - if ($rechte->isBerechtigt('admin', $stud->studiengang_kz, 'suid') || - $rechte->isBerechtigt('admin', 0, 'suid') || - $rechte->isBerechtigt('assistenz', $stud->studiengang_kz, 'suid') || - $rechte->isBerechtigt('assistenz', 0, 'suid') || - $rechte->isBerechtigt('support', 0, 'suid')) - { - $isberechtigt=true; - } - } - } - - if (!$isberechtigt) - { - echo 'Sie haben keine Berechtigung um dieses AccountInfoBlatt zu drucken'; - exit; - } -} -else -{ - $vorlagestudiengang = new vorlage(); + $version = null; + + $output = (isset($_GET['output'])?$_GET['output']:'odt'); + + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($user); + + //OE fuer Output ermitteln + if ($xsl_oe_kurzbz != '') { - $vorlagestudiengang->getAktuelleVorlage($xsl_oe_kurzbz, $xsl, $version); + $oe_kurzbz = $xsl_oe_kurzbz; } else { if ($xsl_stg_kz == '') $xsl_stg_kz = '0'; - - $vorlagestudiengang->getAktuelleVorlage($xsl_stg_kz, $xsl, $version); + $oe = new studiengang(); + $oe->load($xsl_stg_kz); + $oe_kurzbz = $oe->oe_kurzbz; } - // Wenn Berechtigung direkt beim der Vorlage angegeben ist - if (count($vorlagestudiengang->berechtigung)>0) + + //Darf der User Dokumente in einem NICHT-PDF-Format exportieren? + if (isset($_GET['output']) && $_GET['output'] != 'pdf') { - $allowed = false; - foreach($vorlagestudiengang->berechtigung as $berechtigung_kurzbz) + if (!$rechte->isBerechtigt('system/change_outputformat',$oe_kurzbz)) { - if ($rechte->isBerechtigt($berechtigung_kurzbz)) - $allowed = true; + $output = 'pdf'; } - if (!$allowed) + else + $output = $_GET['output']; + } + else + $output = 'pdf'; + + $vorlage = new vorlage(); + if(!$vorlage->loadVorlage($xsl)) + die('Vorlage wurde nicht gefunden'); + + //Berechtigung pruefen + if ($xsl == 'AccountInfo') + { + $isberechtigt = false; + + $uids = explode(';',$_GET['uid']); + foreach ($uids as $uid) { - echo 'unbekanntes Dokument oder keine Berechtigung'; + //Berechtigung fuer das Drucken des Accountinfoblattes pruefen + $ma = new mitarbeiter(); + if($ma->load($uid)) + { + //Mitarbeiterrechte erforderlich + if ($rechte->isBerechtigt('admin', 0, 'suid') || $rechte->isBerechtigt('mitarbeiter', 0, 'suid')) + { + $isberechtigt = true; + } + } + + $stud = new student(); + if ($stud->load($uid)) + { + //Rechte pruefen + if ($rechte->isBerechtigt('admin', $stud->studiengang_kz, 'suid') || + $rechte->isBerechtigt('admin', 0, 'suid') || + $rechte->isBerechtigt('assistenz', $stud->studiengang_kz, 'suid') || + $rechte->isBerechtigt('assistenz', 0, 'suid') || + $rechte->isBerechtigt('support', 0, 'suid')) + { + $isberechtigt=true; + } + } + } + + if (!$isberechtigt) + { + echo 'Sie haben keine Berechtigung um dieses AccountInfoBlatt zu drucken'; exit; } } else { - echo 'unbekanntes Dokument oder keine Berechtigung'; - exit; - } -} - -//wenn uid gefunden wird, dann den Nachnamen zum Dateinamen dazuhaengen -$nachname = ''; -if (isset($_GET['uid']) && $_GET['uid']!='') -{ - $uid = str_replace(';','',$_GET['uid']); - $benutzer_obj = new benutzer(); - if ($benutzer_obj->load($uid)) - $nachname = '_'.convertProblemChars($benutzer_obj->nachname); - -} -$filename = $xsl.$nachname; - -if ($xsl_oe_kurzbz == '') -{ - if ($xsl_stg_kz == '') - $xsl_stg_kz = '0'; - $stg_obj = new studiengang(); - if (!$stg_obj->load($xsl_stg_kz)) - die($stg_obj->errormsg); - $xsl_oe_kurzbz = $stg_obj->oe_kurzbz; -} - -if($sign === true && $vorlage->signierbar === false) -{ - die('Diese Vorlage darf nicht signiert werden'); -} - -if (!isset($_REQUEST["archive"])) -{ - if (mb_strstr($vorlage->mimetype, 'application/vnd.oasis.opendocument')) - { - $dokument = new dokument_export($xsl, $xsl_oe_kurzbz, $version); - $dokument->addDataURL($xml, $params); - - /** - * Get Filename - * TODO cleanup - */ - if ($vorlage->bezeichnung!='') - $filename = $vorlage->bezeichnung.$nachname; - else - $filename = $vorlage->vorlage_kurzbz.$nachname; - - switch($xsl) + $vorlagestudiengang = new vorlage(); + if ($xsl_oe_kurzbz != '') { - case 'LV_Informationen': - $studiengang = new studiengang($_GET['stg_kz']); - $studiensemester = new studiensemester($_GET['ss']); - $filename = $filename.'_'.$studiengang->kurzbzlang.'_'.$studiensemester->studiensemester_kurzbz; - break; - case 'Honorarvertrag': - $filename = $filename.'_'.$benutzer_obj->nachname.'_'.$benutzer_obj->vorname; - break; - case 'Studienordnung': - $studienordnung = new studienordnung(); - $studienordnung->loadStudienordnung($_GET['studienordnung_id']); - $filename = 'Studienordnung-Studienplan-'. sprintf("%'.04d",$studienordnung->studiengang_kz).'-'.$studienordnung->studiengangkurzbzlang; - break; + $vorlagestudiengang->getAktuelleVorlage($xsl_oe_kurzbz, $xsl, $version); } - - $dokument->setFilename($filename); - - if ($sign === true) - { - $dokument->sign($user); - } - - if ($dokument->create($output)) - $dokument->output(); else - echo $dokument->errormsg; - - $dokument->close(); - } -} -else -{ - if(!$vorlage->archivierbar) - die('Dieses Dokument ist nicht archivierbar'); - - // Archivieren von Dokumenten - $uid = $_REQUEST["uid"]; - $heute = date('Y-m-d'); - - $student = new student(); - $student->load($uid); - - if (isset($_REQUEST['ss'])) - { - $ss = $_REQUEST["ss"]; - - $prestudent = new prestudent(); - $prestudent->getLastStatus($student->prestudent_id,$ss); - $semester = $prestudent->ausbildungssemester; - - $query = "SELECT - tbl_studiengang.studiengang_kz, tbl_studentlehrverband.semester, tbl_studiengang.typ, - tbl_studiengang.kurzbz, tbl_person.person_id FROM tbl_person, tbl_benutzer, - tbl_studentlehrverband, tbl_studiengang - WHERE - tbl_studentlehrverband.student_uid = tbl_benutzer.uid - AND tbl_benutzer.person_id = tbl_person.person_id - AND tbl_studentlehrverband.studiengang_kz = tbl_studiengang.studiengang_kz - AND tbl_studentlehrverband.student_uid = ".$db->db_add_param($uid)." - AND tbl_studentlehrverband.studiensemester_kurzbz = ".$db->db_add_param($ss); - - if ($result = $db->db_query($query)) { - if ($row = $db->db_fetch_object($result)) + if ($xsl_stg_kz == '') + $xsl_stg_kz = '0'; + + $vorlagestudiengang->getAktuelleVorlage($xsl_stg_kz, $xsl, $version); + } + // Wenn Berechtigung direkt beim der Vorlage angegeben ist + if (count($vorlagestudiengang->berechtigung)>0) + { + $allowed = false; + foreach($vorlagestudiengang->berechtigung as $berechtigung_kurzbz) { - $person_id = $row->person_id; - $titel = $xsl."_".strtoupper($row->typ).strtoupper($row->kurzbz)."_".$semester; - $bezeichnung = $xsl." ".strtoupper($row->typ).strtoupper($row->kurzbz)." ".$semester.". Semester"; - $studiengang_kz = $row->studiengang_kz; + if ($rechte->isBerechtigt($berechtigung_kurzbz)) + $allowed = true; } + if (!$allowed) + { + echo 'unbekanntes Dokument oder keine Berechtigung'; + exit; + } + } + else + { + echo 'unbekanntes Dokument oder keine Berechtigung'; + exit; + } + } + + //wenn uid gefunden wird, dann den Nachnamen zum Dateinamen dazuhaengen + $nachname = ''; + if (isset($_GET['uid']) && $_GET['uid']!='') + { + $uid = str_replace(';','',$_GET['uid']); + $benutzer_obj = new benutzer(); + if ($benutzer_obj->load($uid)) + $nachname = '_'.convertProblemChars($benutzer_obj->nachname); + + } + $filename = $xsl.$nachname; + + if ($xsl_oe_kurzbz == '') + { + if ($xsl_stg_kz == '') + $xsl_stg_kz = '0'; + $stg_obj = new studiengang(); + if (!$stg_obj->load($xsl_stg_kz)) + die($stg_obj->errormsg); + $xsl_oe_kurzbz = $stg_obj->oe_kurzbz; + } + + if($sign === true && $vorlage->signierbar === false) + { + die('Diese Vorlage darf nicht signiert werden'); + } + + if (!isset($_REQUEST["archive"])) + { + if (mb_strstr($vorlage->mimetype, 'application/vnd.oasis.opendocument')) + { + $dokument = new dokument_export($xsl, $xsl_oe_kurzbz, $version); + $dokument->addDataURL($xml, $params); + + /** + * Get Filename + * TODO cleanup + */ + if ($vorlage->bezeichnung!='') + $filename = $vorlage->bezeichnung.$nachname; else + $filename = $vorlage->vorlage_kurzbz.$nachname; + + switch($xsl) { - die('Student hat keinen Status in diesem Semester'); + case 'LV_Informationen': + $studiengang = new studiengang($_GET['stg_kz']); + $studiensemester = new studiensemester($_GET['ss']); + $filename = $filename.'_'.$studiengang->kurzbzlang.'_'.$studiensemester->studiensemester_kurzbz; + break; + case 'Honorarvertrag': + $filename = $filename.'_'.$benutzer_obj->nachname.'_'.$benutzer_obj->vorname; + break; + case 'Studienordnung': + $studienordnung = new studienordnung(); + $studienordnung->loadStudienordnung($_GET['studienordnung_id']); + $filename = 'Studienordnung-Studienplan-'. sprintf("%'.04d",$studienordnung->studiengang_kz).'-'.$studienordnung->studiengangkurzbzlang; + break; } + + $dokument->setFilename($filename); + + if ($sign === true) + { + $dokument->sign($user); + } + + if ($dokument->create($output)) + $dokument->output(); + else + echo $dokument->errormsg; + + $dokument->close(); } } else { - $studiengang = new studiengang(); - $studiengang->load($student->studiengang_kz); - $studiengang_kz=$student->studiengang_kz; - $person_id = $student->person_id; - $titel = $vorlage->bezeichnung.'_'.$studiengang->kuerzel; - $bezeichnung = $vorlage->bezeichnung.'_'.$studiengang->kuerzel; - } - - if ($rechte->isBerechtigt('admin', $studiengang_kz, 'suid') - || $rechte->isBerechtigt('assistenz', $studiengang_kz, 'suid')) - { - $dokument = new dokument_export($xsl, $xsl_oe_kurzbz, $version); - $dokument->addDataURL($xml, $params); - - $dokument->setFilename($filename); - - $error = false; - - // Beim Archivieren wird das Dokument immer signiert wenn moeglich - if($vorlage->signierbar) - $sign = true; - - if ($sign === true) + if(!$vorlage->archivierbar) + die('Dieses Dokument ist nicht archivierbar'); + + // Archivieren von Dokumenten + $uid = $_REQUEST["uid"]; + $heute = date('Y-m-d'); + + $student = new student(); + $student->load($uid); + + if (isset($_REQUEST['ss'])) { - $dokument->sign($user); + $ss = $_REQUEST["ss"]; + + $prestudent = new prestudent(); + $prestudent->getLastStatus($student->prestudent_id,$ss); + $semester = $prestudent->ausbildungssemester; + + $query = "SELECT + tbl_studiengang.studiengang_kz, tbl_studentlehrverband.semester, tbl_studiengang.typ, + tbl_studiengang.kurzbz, tbl_person.person_id FROM tbl_person, tbl_benutzer, + tbl_studentlehrverband, tbl_studiengang + WHERE + tbl_studentlehrverband.student_uid = tbl_benutzer.uid + AND tbl_benutzer.person_id = tbl_person.person_id + AND tbl_studentlehrverband.studiengang_kz = tbl_studiengang.studiengang_kz + AND tbl_studentlehrverband.student_uid = ".$db->db_add_param($uid)." + AND tbl_studentlehrverband.studiensemester_kurzbz = ".$db->db_add_param($ss); + + if ($result = $db->db_query($query)) + { + if ($row = $db->db_fetch_object($result)) + { + $person_id = $row->person_id; + $titel = $xsl."_".strtoupper($row->typ).strtoupper($row->kurzbz)."_".$semester; + $bezeichnung = $xsl." ".strtoupper($row->typ).strtoupper($row->kurzbz)." ".$semester.". Semester"; + $studiengang_kz = $row->studiengang_kz; + } + else + { + die('Student hat keinen Status in diesem Semester'); + } + } } - - if ($dokument->create($output)) - $doc = $dokument->output(false); else { - $errormsg = $dokument->errormsg; - $error = true; + $studiengang = new studiengang(); + $studiengang->load($student->studiengang_kz); + $studiengang_kz=$student->studiengang_kz; + $person_id = $student->person_id; + $titel = $vorlage->bezeichnung.'_'.$studiengang->kuerzel; + $bezeichnung = $vorlage->bezeichnung.'_'.$studiengang->kuerzel; } - - $dokument->close(); - - if(!$error) + + if ($rechte->isBerechtigt('admin', $studiengang_kz, 'suid') + || $rechte->isBerechtigt('assistenz', $studiengang_kz, 'suid')) { - $hex = base64_encode($doc); - $akte = new akte(); - $akte->person_id = $person_id; - if($vorlage->dokument_kurzbz!='') - $akte->dokument_kurzbz = $vorlage->dokument_kurzbz; - else - $akte->dokument_kurzbz = 'Zeugnis'; - $akte->inhalt = $hex; - $akte->mimetype = 'application/pdf'; - $akte->erstelltam = $heute; - $akte->gedruckt = true; - $akte->titel = $titel.'.pdf'; - $akte->bezeichnung = $bezeichnung; - $akte->updateamum = ''; - $akte->updatevon = ''; - $akte->insertamum = date('Y-m-d H:i:s'); - $akte->insertvon = $user; - $akte->ext_id = ''; - $akte->uid = $uid; - $akte->new = true; - $akte->archiv = true; - $akte->signiert = $sign; - $akte->stud_selfservice = $vorlage->stud_selfservice; - - if (!$akte->save()) + $dokument = new dokument_export($xsl, $xsl_oe_kurzbz, $version); + $dokument->addDataURL($xml, $params); + + $dokument->setFilename($filename); + + $error = false; + + // Beim Archivieren wird das Dokument immer signiert wenn moeglich + if($vorlage->signierbar) + $sign = true; + + if ($sign === true) { - echo 'Erstellen Fehlgeschlagen: '.$akte->errormsg; + $dokument->sign($user); + } + + if ($dokument->create($output)) + $doc = $dokument->output(false); + else + { + $errormsg = $dokument->errormsg; + $error = true; + } + + $dokument->close(); + + if(!$error) + { + $hex = base64_encode($doc); + $akte = new akte(); + $akte->person_id = $person_id; + if($vorlage->dokument_kurzbz!='') + $akte->dokument_kurzbz = $vorlage->dokument_kurzbz; + else + $akte->dokument_kurzbz = 'Zeugnis'; + $akte->inhalt = $hex; + $akte->mimetype = 'application/pdf'; + $akte->erstelltam = $heute; + $akte->gedruckt = true; + $akte->titel = $titel.'.pdf'; + $akte->bezeichnung = $bezeichnung; + $akte->updateamum = ''; + $akte->updatevon = ''; + $akte->insertamum = date('Y-m-d H:i:s'); + $akte->insertvon = $user; + $akte->ext_id = ''; + $akte->uid = $uid; + $akte->new = true; + $akte->archiv = true; + $akte->signiert = $sign; + $akte->stud_selfservice = $vorlage->stud_selfservice; + + if (!$akte->save()) + { + echo 'Erstellen Fehlgeschlagen: '.$akte->errormsg; + return false; + } + else + { + return true; + } + } + else + { + echo $errormsg; return false; } - else - { - return true; - } } else - { - echo $errormsg; - return false; - } + echo 'Keine Berechtigung zum Speichern'; } - else - echo 'Keine Berechtigung zum Speichern'; } ?> diff --git a/content/student/studentenoverlay.xul.php b/content/student/studentenoverlay.xul.php index a9de22360..b329ee4d5 100644 --- a/content/student/studentenoverlay.xul.php +++ b/content/student/studentenoverlay.xul.php @@ -75,6 +75,11 @@ else