Language: chnaged set(), delete() methods

This commit is contained in:
Taras Machyshyn
2015-01-22 14:49:40 +02:00
parent ac36096d55
commit 785934c7cc
4 changed files with 160 additions and 40 deletions
+3 -5
View File
@@ -39,7 +39,6 @@ class FieldManager
protected $customOptionName = 'isCustom';
public function __construct(Metadata $metadata, Language $language)
{
$this->metadata = $metadata;
@@ -133,7 +132,6 @@ class FieldManager
{
$fieldDef = $this->normalizeDefs($name, $fieldDef, $scope);
//$data = Json::encode($fieldDef);
$this->getMetadata()->set($this->metadataType, $scope, $fieldDef);
$res = $this->getMetadata()->save();
@@ -142,17 +140,17 @@ class FieldManager
protected function setTranslatedOptions($name, $value, $scope)
{
return $this->getLanguage()->set($name, $value, 'options', $scope);
return $this->getLanguage()->set($scope, 'options', $name, $value);
}
protected function setLabel($name, $value, $scope)
{
return $this->getLanguage()->set($name, $value, 'fields', $scope);
return $this->getLanguage()->set($scope, 'fields', $name, $value);
}
protected function deleteLabel($name, $scope)
{
$this->getLanguage()->delete($name, 'fields', $scope);
$this->getLanguage()->delete($scope, 'fields', $name);
return $this->getLanguage()->save();
}
+43 -20
View File
@@ -220,7 +220,6 @@ class Language
}
$this->clearChanges();
$this->init(true);
return (bool) $result;
}
@@ -234,6 +233,7 @@ class Language
{
$this->changedData = array();
$this->deletedData = array();
$this->init(true);
}
/**
@@ -253,53 +253,76 @@ class Language
/**
* Set/change a label
* @param string | array $label
* @param mixed $value
* @param string $category
*
* @param string $scope
* @param string $category
* @param string | array $name
* @param mixed $value
*
* @return void
*/
public function set($label, $value, $category = 'labels', $scope = 'Global')
public function set($scope, $category, $name, $value)
{
if (is_array($label)) {
foreach ($label as $rowLabel => $rowValue) {
$this->set($rowLabel, $rowValue, $category, $scope);
if (is_array($name)) {
foreach ($name as $rowLabel => $rowValue) {
$this->set($scope, $category, $rowLabel, $rowValue);
}
return;
}
$this->changedData[$scope][$category][$label] = $value;
$this->changedData[$scope][$category][$name] = $value;
$currentLanguage = $this->getLanguage();
$this->data[$currentLanguage][$scope][$category][$label] = $value;
if (!isset($this->data[$currentLanguage])) {
$this->init();
}
$this->data[$currentLanguage][$scope][$category][$name] = $value;
$this->undelete($scope, $category, $name);
}
/**
* Remove a label
*
* @param string $label
* @param string $name
* @param string $category
* @param string $scope
*
* @return void
*/
public function delete($label, $category = 'labels', $scope = 'Global')
public function delete($scope, $category, $name)
{
if (is_array($label)) {
foreach ($label as $rowLabel) {
$this->delete($rowLabel, $category, $scope);
if (is_array($name)) {
foreach ($name as $rowLabel) {
$this->delete($scope, $category, $rowLabel);
}
return;
}
$this->deletedData[$scope][$category][] = $label;
$this->deletedData[$scope][$category][] = $name;
$currentLanguage = $this->getLanguage();
if (isset($this->data[$currentLanguage][$scope][$category][$label])) {
unset($this->data[$currentLanguage][$scope][$category][$label]);
if (!isset($this->data[$currentLanguage])) {
$this->init();
}
if (isset($this->changedData[$scope][$category][$label])) {
unset($this->changedData[$scope][$category][$label]);
if (isset($this->data[$currentLanguage][$scope][$category][$name])) {
unset($this->data[$currentLanguage][$scope][$category][$name]);
}
if (isset($this->changedData[$scope][$category][$name])) {
unset($this->changedData[$scope][$category][$name]);
}
}
protected function undelete($scope, $category, $name)
{
if (isset($this->deletedData[$scope][$category])) {
foreach ($this->deletedData[$scope][$category] as $key => $labelName) {
if ($name === $labelName) {
unset($this->deletedData[$scope][$category][$key]);
}
}
}
}
+3 -4
View File
@@ -1,4 +1,4 @@
<?php
<?php
/************************************************************************
* This file is part of EspoCRM.
*
@@ -89,7 +89,7 @@ class FieldManagerTest extends \PHPUnit_Framework_TestCase
->method('get')
->will($this->returnValue($data));
$this->assertTrue($this->object->update('name', $data, 'Account'));
$this->object->update('name', $data, 'Account');
}
public function testUpdateCustomFieldIsNotChanged()
@@ -138,10 +138,9 @@ class FieldManagerTest extends \PHPUnit_Framework_TestCase
"isCustom" => true,
);
$this->assertTrue($this->object->update('varName', $data, 'CustomEntity'));
$this->object->update('varName', $data, 'CustomEntity');
}
public function testRead()
{
$data = array(
+111 -11
View File
@@ -1,4 +1,4 @@
<?php
<?php
/************************************************************************
* This file is part of EspoCRM.
*
@@ -80,7 +80,6 @@ class LanguageTest extends \PHPUnit_Framework_TestCase
$this->object->setLanguage($originalLang);
}
public function testGetLangCacheFile()
{
$cacheFile = $this->cacheFile;
@@ -96,7 +95,6 @@ class LanguageTest extends \PHPUnit_Framework_TestCase
$this->object->setLanguage($originalLang);
}
public function testGetData()
{
$result = array (
@@ -142,7 +140,6 @@ class LanguageTest extends \PHPUnit_Framework_TestCase
$this->assertEquals($result, $this->reflection->invokeMethod('getData', array()));
}
public function testGet()
{
$result = array (
@@ -204,7 +201,6 @@ class LanguageTest extends \PHPUnit_Framework_TestCase
$this->assertEquals($result, $this->object->translate('language', 'options', 'Global', $requiredOptions));
}
public function testTranslateArray()
{
$input = array(
@@ -227,20 +223,124 @@ class LanguageTest extends \PHPUnit_Framework_TestCase
public function testSet()
{
$label = 'TEST';
$this->object->set('label', $label, 'fields', 'User');
$this->object->set('User', 'fields', 'label', $label);
$this->assertEquals($label, $this->object->translate('label', 'fields', 'User'));
$result = array(
'User' => array(
'fields' => array(
'label' => 'TEST',
),
),
);
$this->assertEquals($result, $this->reflection->getProperty('changedData'));
$label2 = 'TEST2';
$this->object->set('name', $label2, 'fields', 'User');
$this->object->set('User', 'fields', 'name', $label2);
$this->assertEquals($label2, $this->object->translate('name', 'fields', 'User'));
$result = array(
'User' => array(
'fields' => array(
'label' => 'TEST',
'name' => 'TEST2',
),
),
);
$this->assertEquals($result, $this->reflection->getProperty('changedData'));
$label3 = 'TEST3';
$this->object->set('name', $label3, 'fields', 'Account');
$this->object->set('Account', 'fields', 'name', $label3);
$this->assertEquals($label3, $this->object->translate('name', 'fields', 'Account'));
$this->reflection->invokeMethod('init', array(true));
$result = array(
'User' => array(
'fields' => array(
'label' => 'TEST',
'name' => 'TEST2',
),
),
'Account' => array(
'fields' => array(
'name' => 'TEST3',
),
),
);
$this->assertEquals($result, $this->reflection->getProperty('changedData'));
$this->object->clearChanges();
$this->assertEquals(array(), $this->reflection->getProperty('changedData'));
$this->assertNotEquals('TEST', $this->object->get('User', 'fields', 'label'));
}
public function testDelete()
{
$this->object->delete('User', 'fields', 'label');
$this->assertNull($this->object->get('User.fields.label'));
$result = array(
'User' => array(
'fields' => array(
'label',
),
),
);
$this->assertEquals($result, $this->reflection->getProperty('deletedData'));
$this->object->delete('User', 'fields', 'name');
$this->assertNull($this->object->get('User.fields.name'));
$result = array(
'User' => array(
'fields' => array(
'label',
'name',
),
),
);
$this->assertEquals($result, $this->reflection->getProperty('deletedData'));
$this->object->clearChanges();
$this->assertNotNull($this->object->get('User.fields.label'));
$this->assertNotNull($this->object->get('User.fields.name'));
$this->assertEquals(array(), $this->reflection->getProperty('deletedData'));
}
public function testUndelete()
{
$this->object->delete('User', 'fields', 'label');
$this->assertNull($this->object->get('User.fields.label'));
$this->object->delete('User', 'fields', 'name');
$this->assertNull($this->object->get('User.fields.name'));
$label = 'TEST';
$this->object->set('User', 'fields', 'label', $label);
$this->assertEquals($label, $this->object->translate('label', 'fields', 'User'));
$result = array(
'User' => array(
'fields' => array(
1 => 'name',
),
),
);
$this->assertEquals($result, $this->reflection->getProperty('deletedData'));
$label2 = 'TEST2';
$this->object->set('User', 'fields', 'name', $label2);
$this->assertEquals($label2, $this->object->translate('name', 'fields', 'User'));
$result = array(
'User' => array(
'fields' => array(
),
),
);
$this->assertEquals($result, $this->reflection->getProperty('deletedData'));
}
}
?>