Merge branch 'feature-5128/FHC-IDAM_account_activation'

This commit is contained in:
Andreas Österreicher
2020-02-03 14:53:24 +01:00
11 changed files with 558 additions and 133 deletions
+3 -1
View File
@@ -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
/*
|--------------------------------------------------------------------------
@@ -0,0 +1,31 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
* This controller is used to set the current language for a user
* It is part of the Language Switcher Widget
*/
class Language extends FHC_Controller
{
/**
* Calls the parent's constructor
*/
public function __construct()
{
parent::__construct();
}
//------------------------------------------------------------------------------------------------------------------
// Public methods
/**
*
*/
public function setSessionLanguage()
{
$language = $this->input->post('language');
$this->outputJson(setUserLanguage($language));
}
}
+19
View File
@@ -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');
}
}
}
+111 -26
View File
@@ -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
}
+28
View File
@@ -0,0 +1,28 @@
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
use phpseclib\Crypt\Rijndael;
/**
* Collection of different encryption/hashing algorithms
*/
class CryptLib
{
/**
* Encrypt using the Rijndael algorithm with a key length of 256 bits and the ECB mode
* It is possible to disable the padding, enabled by default
*/
public static function RIJNDAEL_256_ECB($value, $key, $paddingDisabled = false)
{
if (isEmptyString($key) || strlen($value) % 32 != 0) return null;
$cipher = new Rijndael(Rijndael::MODE_ECB);
$cipher->setBlockLength(256);
$cipher->setKey($key);
if ($paddingDisabled === true) $cipher->disablePadding();
return $cipher->encrypt($value);
}
}
+3 -19
View File
@@ -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));
}
}
+31 -20
View File
@@ -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
+2
View File
@@ -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.*",
Generated
+56 -7
View File
@@ -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",
+14
View File
@@ -3449,6 +3449,20 @@ if(!$result = @$db->db_query("SELECT 1 FROM fue.tbl_projekttyp LIMIT 1"))
echo '<br>fue.tbl_projekttyp hinzugefuegt.';
}
// Add new webservice type in system.tbl_webservicetyp
if ($result = @$db->db_query("SELECT 1 FROM system.tbl_webservicetyp WHERE webservicetyp_kurzbz = 'API';"))
{
if ($db->db_num_rows($result) == 0)
{
$qry = "INSERT INTO system.tbl_webservicetyp(webservicetyp_kurzbz, beschreibung) VALUES('API', 'Cronjob');";
if (!$db->db_query($qry))
echo '<strong>system.tbl_webservicetyp '.$db->db_last_error().'</strong><br>';
else
echo ' system.tbl_webservicetyp: Added webservice type "API"<br>';
}
}
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
echo '<H2>Pruefe Tabellen und Attribute!</H2>';
+260 -60
View File
@@ -3789,7 +3789,7 @@ When on hold, the date is only a reminder.',
),
array(
'sprache' => 'English',
'text' => 'Please enter the old an new password',
'text' => 'Please enter the old and the new password',
'description' => '',
'insertvon' => 'system'
)
@@ -4036,65 +4036,65 @@ When on hold, the date is only a reminder.',
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'lehrauftraegeBestellen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Lehraufträge bestellen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Order lectureships',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'lehrauftraegeErteilen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Lehraufträge erteilen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Approve lectureships',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'lehrauftraegeAnnehmen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Lehraufträge annehmen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Accept lectureships',
'description' => '',
'insertvon' => 'system'
)
)
),
'app' => 'core',
'category' => 'global',
'phrase' => 'lehrauftraegeBestellen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Lehraufträge bestellen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Order lectureships',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'lehrauftraegeErteilen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Lehraufträge erteilen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Approve lectureships',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'lehrauftraegeAnnehmen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Lehraufträge annehmen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Accept lectureships',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
@@ -4114,6 +4114,206 @@ When on hold, the date is only a reminder.',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'account',
'phrase' => 'title',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Account Aktivierung',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Account Activation',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'account',
'phrase' => 'usage',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Bitte wählen Sie ein Passwort für Ihren Account.<br>Das Passwort muss zumindest 8 Zeichen enthalten, davon mindestens 1 Großbuchstabe, 1 Kleinbuchstabe und eine Ziffer.<br>Das Passwort darf keine Leerzeichen und Umlaute enthalten.<br>Erlaubte Sonderzeichen sind: -$#[]{}!().,*:;_',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Please choose a password for your account<br>The password must contain at least 8 characters, of which 1 must be upper case, 1 lower case and 1 a numeral.<br>The password may not include spaces or umlauts.<br>The following special characters are allowed: -$#[]{}!().,*:;_',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'account',
'phrase' => 'username',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Username',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Username',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'account',
'phrase' => 'code',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Code',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Code',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'captcha',
'phrase' => 'label',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Tippen Sie die angezeigten<br>Zeichen in das untere Feld.',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Enter the characters in<br>the field below.',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'captcha',
'phrase' => 'reload',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Ich kann das Bild nicht lesen - neu laden',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Reload picture',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'account',
'phrase' => 'activate',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Abschicken',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Activate',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'password',
'phrase' => 'wrongCaptcha',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Captcha code falsch ',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Captcha code is wrong',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'account',
'phrase' => 'missingParameters',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Bitte geben Sie Benutzername, Code und Passwort ein',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Please enter username, code and password',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'account',
'phrase' => 'wrongActivationCode',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Der angegebene Aktivierungscode ist falsch',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'The provided activation code is wrong',
'description' => '',
'insertvon' => 'system'
)
)
)
);