mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-21 17:02:19 +00:00
Code and comments improved
This commit is contained in:
@@ -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 . "<br>";
|
||||
// echo $_phrase->phrase . "<br><br>";
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -92,11 +92,11 @@ function _generateJSPhrasesStorageObject($phrases)
|
||||
{
|
||||
$ci =& get_instance();
|
||||
$ci->load->library('PhrasesLib', array($phrases), 'pj');
|
||||
|
||||
|
||||
$toPrint = "\n";
|
||||
$toPrint .= '<script type="text/javascript">';
|
||||
$toPrint .= '
|
||||
var FHC_JS_PHRASES_STORAGE_OBJECT = '.$ci->pj->getJSON();
|
||||
$toPrint = "\n";
|
||||
$toPrint .= 'var FHC_JS_PHRASES_STORAGE_OBJECT = '.$ci->pj->getJSON();
|
||||
$toPrint .= "\n";
|
||||
$toPrint .= '</script>';
|
||||
$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);
|
||||
?>
|
||||
|
||||
|
||||
</head>
|
||||
<!-- Header end -->
|
||||
|
||||
+43
-85
@@ -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')));
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user