Web Entry 2.0 Rest - Languages EP
ACCEPTACE CRITERIA
1. The result should include the detailed fields.
2. The result should include the installed languages.
3. User should be logged.
This commit is contained in:
davidcallizaya
2017-05-25 09:47:48 -04:00
parent 08375cfce1
commit 3d82540339
4 changed files with 50771 additions and 0 deletions

View File

@@ -0,0 +1,98 @@
<?php
namespace ProcessMaker\BusinessModel;
/**
* Test the ProcessMaker\BusinessModel\Language class.
*/
class LanguageTest extends \WorkflowTestCase
{
/**
* @var Language
*/
protected $object;
private $translationEnv;
/**
* Sets up the unit tests.
*/
protected function setUp()
{
$this->setupDB();
$this->object = new Language;
$this->translationEnv = PATH_DATA."META-INF".PATH_SEP."translations.env";
file_exists($this->translationEnv) ? unlink($this->translationEnv) : false;
}
/**
* Tears down the unit tests.
*/
protected function tearDown()
{
$this->dropDB();
}
/**
* Test default languages
*
* @category HOR-3209:1
* @covers ProcessMaker\BusinessModel\Language::getLanguageList
*/
public function testGetLanguageList()
{
$list = $this->object->getLanguageList();
$this->assertCount(1, $list);
$this->assertEquals('en', $list[0]['LANG_ID']);
$this->assertEquals('English', $list[0]['LANG_NAME']);
}
/**
* Test installed languages
*
* @category HOR-3209:2
* @covers ProcessMaker\BusinessModel\Language::getLanguageList
*/
public function testGetLanguageListInstalled()
{
$this->installLanguage('es', __DIR__.'/processmaker.es.po');
$list = $this->object->getLanguageList();
$this->assertCount(2, $list);
$this->assertEquals('en', $list[0]['LANG_ID']);
$this->assertEquals('English', $list[0]['LANG_NAME']);
$this->assertEquals('es-ES', $list[1]['LANG_ID']);
$this->assertEquals('Spanish (Spain)', $list[1]['LANG_NAME']);
$this->uninstallLanguage('es', __DIR__.'/processmaker.es.po');
$list2 = $this->object->getLanguageList();
$this->assertCount(1, $list2);
}
/**
* Install a language to the system.
*
* @param type $lanId
* @param type $filename
*/
private function installLanguage($lanId, $filename)
{
copy($filename, PATH_CORE.'content/translations/'.basename($filename));
$language = \LanguagePeer::retrieveByPK($lanId);
$language->setLanEnabled(1);
$language->save();
file_exists($this->translationEnv) ? unlink($this->translationEnv) : false;
}
/**
* Uninstall a language from the system.
*
* @param type $lanId
* @param type $filename
*/
private function uninstallLanguage($lanId, $filename)
{
unlink(PATH_CORE.'content/translations/'.basename($filename));
$language = \LanguagePeer::retrieveByPK($lanId);
$language->setLanEnabled(0);
$language->save();
file_exists($this->translationEnv) ? unlink($this->translationEnv) : false;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,42 @@
<?php
namespace ProcessMaker\BusinessModel;
use Translation;
/**
* Translation class
*
*/
class Language
{
/**
* Web Entry 2.0 Rest - Get languages
*
* @category HOR-3209,PROD-181
* @return array
*/
public function getLanguageList()
{
$Translations = new Translation();
$translationsTable = $Translations->getTranslationEnvironments();
$availableLangArray = [];
foreach ($translationsTable as $locale) {
$row['LANG_ID'] = $locale['LOCALE'];
if ($locale['COUNTRY'] != '.') {
$row['LANG_NAME'] = $locale['LANGUAGE'].' ('.
(ucwords(strtolower($locale['COUNTRY']))).')';
} else {
$row['LANG_NAME'] = $locale['LANGUAGE'];
}
$availableLangArray [] = $row;
}
return $availableLangArray;
}
}

View File

@@ -52,6 +52,24 @@ class System extends Api
} }
} }
/**
* Get a list of the installed languages.
*
* @category HOR-3209,PROD-181
* @return array
* @url GET /languages
*/
public function doGetLanguages()
{
try {
$language = new \ProcessMaker\BusinessModel\Language;
$list = $language->getLanguageList();
return ["data" => $list];
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
/** /**
* @return array * @return array
* *