Merge branch 'hotfix/2.8.2' of ssh://172.20.0.1/var/git/espo/backend into hotfix/2.8.2

This commit is contained in:
yuri
2015-01-12 11:17:34 +02:00
5 changed files with 130 additions and 73 deletions
+11 -7
View File
@@ -91,13 +91,17 @@ class FieldManager
$res = true;
if (isset($fieldDef['label'])) {
$res &= $this->setLabel($name, $fieldDef['label'], $scope);
$this->setLabel($name, $fieldDef['label'], $scope);
}
if (isset($fieldDef['type']) && $fieldDef['type'] == 'enum') {
if (isset($fieldDef['translatedOptions'])) {
$res &= $this->setTranslatedOptions($name, $fieldDef['translatedOptions'], $scope);
}
$this->setTranslatedOptions($name, $fieldDef['translatedOptions'], $scope);
}
}
if (isset($fieldDef['label']) || isset($fieldDef['translatedOptions'])) {
$res &= $this->getLanguage()->save();
}
if ($this->isDefsChanged($name, $fieldDef, $scope)) {
@@ -119,10 +123,9 @@ class FieldManager
);
$res = $this->getMetadata()->delete($unsets, $this->metadataType, $scope);
$res &= $this->deleteLabel($name, $scope);
$this->deleteLabel($name, $scope);
return $res;
return (bool) $res;
}
protected function setEntityDefs($name, $fieldDef, $scope)
@@ -147,7 +150,8 @@ class FieldManager
protected function deleteLabel($name, $scope)
{
return $this->getLanguage()->delete($name, 'fields', $scope);
$this->getLanguage()->delete($name, 'fields', $scope);
return $this->getLanguage()->save();
}
protected function getFieldDef($name, $scope)
+6 -5
View File
@@ -51,7 +51,7 @@ class Json
}
$error = self::getLastError();
if ($json === null || $error) {
if ($json === null || !empty($error)) {
$GLOBALS['log']->error('Json::encode():' . $error . ' - ' . print_r($value, true));
}
@@ -69,6 +69,10 @@ class Json
*/
public static function decode($json, $assoc = false, $depth = 512, $options = 0)
{
if (is_null($json) || $json === false) {
return $json;
}
if (is_array($json)) {
$GLOBALS['log']->warning('Json::decode() - JSON cannot be decoded - '.$json);
return false;
@@ -85,14 +89,13 @@ class Json
}
$error = self::getLastError();
if ($json === null || $error) {
if ($error) {
$GLOBALS['log']->error('Json::decode():' . $error);
}
return $json;
}
/**
* Check if the string is JSON
*
@@ -110,7 +113,6 @@ class Json
return static::decode($json) != null;
}
/**
* Get an array data (if JSON convert to array)
*
@@ -130,7 +132,6 @@ class Json
return $returns;
}
protected static function getLastError($error = null)
{
if (!isset($error)) {
+97 -60
View File
@@ -38,14 +38,11 @@ class Language
*
* @var array
*/
private $allData = array();
private $data = array();
/**
* Data of current language
*
* @var array
*/
private $data = null;
private $deletedData = array();
private $changedData = array();
private $name = 'i18n';
@@ -175,7 +172,6 @@ class Language
return $value;
}
public function get($key = null, $returns = null)
{
$data = $this->getData();
@@ -187,12 +183,59 @@ class Language
return Util::getValueByKey($data, $key, $returns);
}
public function getAll()
{
return $this->get();
}
/**
* Save changes
*
* @return bool
*/
public function save()
{
$path = $this->paths['customPath'];
$currentLanguage = $this->getLanguage();
$result = true;
if (!empty($this->changedData)) {
foreach ($this->changedData as $scope => $data) {
if (!empty($data)) {
$result &= $this->getFileManager()->mergeContents(array($path, $currentLanguage, $scope.'.json'), $data, true);
}
}
}
if (!empty($this->deletedData)) {
foreach ($this->deletedData as $scope => $unsetData) {
if (!empty($unsetData)) {
$result &= $this->getFileManager()->unsetContents(array($path, $currentLanguage, $scope.'.json'), $unsetData, true);
}
}
}
if ($result == false) {
throw new Error("Error saving languages. See log file for details.");
}
$this->clearChanges();
$this->init(true);
return (bool) $result;
}
/**
* Clear unsaved changes
*
* @return void
*/
public function clearChanges()
{
$this->changedData = array();
$this->deletedData = array();
}
/**
* Get data of Unifier language files
*
@@ -200,44 +243,64 @@ class Language
*/
protected function getData()
{
if (!isset($this->data)) {
$currentLanguage = $this->getLanguage();
if (!isset($this->data[$currentLanguage])) {
$this->init();
}
return $this->data;
return $this->data[$currentLanguage];
}
/**
* Set/change a label
* @param string | array $label
* @param mixed $value
* @param string $category
* @param string $scope
*/
public function set($label, $value, $category = 'labels', $scope = 'Global')
{
$path = $this->paths['customPath'];
$currentLanguage = $this->getLanguage();
$data = $this->normalizeDefs($label, $value, $category);
$result = $this->getFileManager()->mergeContents(array($path, $currentLanguage, $scope.'.json'), $data, true);
if ($result === false) {
throw new Error("Error saving languages. See log file for details.");
if (is_array($label)) {
foreach ($label as $rowLabel => $rowValue) {
$this->set($rowLabel, $rowValue, $category, $scope);
}
return;
}
$this->init(true);
$this->changedData[$scope][$category][$label] = $value;
return $result;
$currentLanguage = $this->getLanguage();
$this->data[$currentLanguage][$scope][$category][$label] = $value;
}
/**
* Remove a label
*
* @param string $label
* @param string $category
* @param string $scope
*
* @return void
*/
public function delete($label, $category = 'labels', $scope = 'Global')
{
$path = $this->paths['customPath'];
if (is_array($label)) {
foreach ($label as $rowLabel) {
$this->delete($rowLabel, $category, $scope);
}
return;
}
$this->deletedData[$scope][$category][] = $label;
$currentLanguage = $this->getLanguage();
if (isset($this->data[$currentLanguage][$scope][$category][$label])) {
unset($this->data[$currentLanguage][$scope][$category][$label]);
}
$unsets = array(
$category => $label,
);
$result = $this->getFileManager()->unsetContents(array($path, $currentLanguage, $scope.'.json'), $unsets, true);
$this->init(true);
return $result;
if (isset($this->changedData[$scope][$category][$label])) {
unset($this->changedData[$scope][$category][$label]);
}
}
protected function init($reload = false)
@@ -252,7 +315,7 @@ class Language
$i18nData = Util::merge($fullData[$this->defaultLanguage], $i18nData);
}
$this->allData[$i18nName] = $i18nData;
$this->data[$i18nName] = $i18nData;
if ($this->getConfig()->get('useCache')) {
$i18nCacheFile = str_replace('{*}', $i18nName, $this->cacheFile);
@@ -266,34 +329,8 @@ class Language
}
$currentLanguage = $this->getLanguage();
if (empty($this->allData[$currentLanguage])) {
$this->allData[$currentLanguage] = $this->getFileManager()->getContents($this->getLangCacheFile());
if (empty($this->data[$currentLanguage])) {
$this->data[$currentLanguage] = $this->getFileManager()->getContents($this->getLangCacheFile());
}
$this->data = $this->allData[$currentLanguage];
}
protected function normalizeDefs($label, $value, $category)
{
if (!is_array($label)) {
$label = array(
$label => $value,
);
}
$data = array(
$category => $label,
);
return $data;
}
}
+1 -1
View File
@@ -380,7 +380,7 @@ class Util
$unsetElem = $currVal . "['{$lastKey}']";
$currVal = "
if (isset({$unsetElem}) || ( is_array({$currVal}) && array_key_exists({$lastKey}, {$currVal}) )) {
if (isset({$unsetElem}) || ( is_array({$currVal}) && array_key_exists('{$lastKey}', {$currVal}) )) {
unset({$unsetElem});
} ";
eval($currVal);
+15
View File
@@ -204,7 +204,22 @@ class LanguageTest extends \PHPUnit_Framework_TestCase
$this->assertEquals($result, $this->object->translate('language.en_US', 'options'));
}
public function testSet()
{
$label = 'TEST';
$this->object->set('label', $label, 'fields', 'User');
$this->assertEquals($label, $this->object->translate('label', 'fields', 'User'));
$label2 = 'TEST2';
$this->object->set('name', $label2, 'fields', 'User');
$this->assertEquals($label2, $this->object->translate('name', 'fields', 'User'));
$label3 = 'TEST3';
$this->object->set('name', $label3, 'fields', 'Account');
$this->assertEquals($label3, $this->object->translate('name', 'fields', 'Account'));
$this->reflection->invokeMethod('init', array(true));
}
}