Fixed many sublanguage routines and corresponding tests

skala
ywarnier 14 years ago
parent 263443aa5a
commit 79f024086f
  1. 84
      main/admin/sub_language.class.php
  2. 54
      main/admin/sub_language_add.php
  3. 175
      tests/main/admin/sub_language.class.test.php

@ -16,16 +16,16 @@ class SubLanguageManager {
//void
}
/**
* Get all data of dokeos folder (forum.inc.php,gradebook.inc.php,notebook.inc.php)
* @param String The dokeos path folder (/var/www/my_dokeos/main/lang/spanish)
* Get all data of lang folder (forum.inc.php,gradebook.inc.php,notebook.inc.php)
* @param String The lang path folder (/var/www/my_lms/main/lang/spanish)
* @param bool true if we only want the "subname" trad4all instead of trad4all.inc.php
* @return Array All file of dokeos folder
* @return Array All file of lang folder
*
*/
public static function get_all_data_of_dokeos_folder ($dokeos_path_folder,$only_main_name=false) {
public static function get_lang_folder_files_list ($path,$only_main_name=false) {
$content_dir=array();
if (is_dir($dokeos_path_folder)) {
if ($dh = opendir($dokeos_path_folder)) {
if (is_dir($path)) {
if ($dh = opendir($path)) {
while (($file = readdir($dh)) !== false) {
if ($file[0]<>'.' && substr($file,-4,strlen($file))=='.php') {
if ($only_main_name) {
@ -111,9 +111,9 @@ class SubLanguageManager {
* @param String The language variable
* @return void()
*/
public static function write_data_in_file($path_file, $new_sub_language, $variable_sub_language) {
public static function write_data_in_file($path_file, $new_term, $new_variable) {
$return_value = false;
$new_data=$variable_sub_language.'='.$new_sub_language;
$new_data=$new_variable.'='.$new_term;
$resource = @fopen($path_file, "a");
if (file_exists($path_file) && $resource) {
if (fwrite($resource, $new_data.PHP_EOL) === false) {
@ -128,23 +128,57 @@ class SubLanguageManager {
}
/**
* Add directory for sub-language
* @param String The sub-language path directory ( /var/www/chamilo/main/lang/spanish_corporate )
* @return boolean
* @param String The sub-language directory ( e.g. 'spanish_corporate' )
* @return boolean True on success, false on failure
*/
public static function add_directory_of_sub_language($path_sub_language) {
//return @mkdir($path_sub_language, 0777) !== false;
return @mkdir($path_sub_language, api_get_permissions_for_new_directories()) !== false;
public static function add_language_directory($sub_language_dir) {
if (empty($sub_language_dir)) { return false; }
$dir = api_get_path(SYS_LANG_PATH).$sub_language_dir;
if (is_dir($dir)) { return true; } //even if the dir already exists, we reach the objective of having the directory there
return @mkdir($dir, api_get_permissions_for_new_directories());
}
/**
* Delete sub-language
* Delete sub-language.
* In order to avoid deletion of main laguages, we check the existence of a parent
* @param Integer The parent id
* @return void()
* @return bool True on success, false on error
*/
public static function removed_sub_language ($parent_id,$sub_language_id) {
public static function remove_sub_language ($parent_id,$sub_language_id) {
if (empty($parent_id) or (intval($parent_id)!=$parent_id) or empty($sub_language_id) or (intval($sub_language_id) != $sub_language_id)) { return false; }
$tbl_admin_languages = Database :: get_main_table(TABLE_MAIN_LANGUAGE);
$sql = 'DELETE FROM '.$tbl_admin_languages.' WHERE parent_id="'.Database::escape_string($parent_id).'" AND id="'.Database::escape_string($sub_language_id).'" ';
Database::query($sql);
$sql = 'SELECT dokeos_folder FROM '.$tbl_admin_languages.' WHERE parent_id = '.$parent_id.' and id= '.$sub_language_id;
$res = Database::query($sql);
if ($res === false or Database::num_rows($res)<1) { return false; }
$row = Database::fetch_assoc($res);
$res = SubLanguageManager::remove_language_directory($row['dokeos_folder']);
if ($res === false) { return false; } //can't delete dir, so do not delete language record
$sql = 'DELETE FROM '.$tbl_admin_languages.' WHERE id="'.Database::escape_string($sub_language_id).'" ';
$res = Database::query($sql);
return $res;
}
/**
* Remove directory for sub-language
* @param String The sub-language path directory ( e.g. 'spanish_corporate'' )
* @return boolean True on success, false on failure
*/
public static function remove_language_directory($sub_language_dir) {
if (empty($sub_language_dir)) { return false; }
$dir = api_get_path(SYS_LANG_PATH).$sub_language_dir;
if (!is_dir($dir)) { return true; } //even if the dir does not exist, we reach the objective of not having the directory there
$content = SubLanguageManager::get_lang_folder_files_list($dir);
if (count($content)>0) {
foreach ($content as $value_content) {
$path_file = $dir.'/'.$value_content;
unlink($path_file);
}
return @rmdir($dir);
} else {
return @rmdir($dir);
}
}
/**
* check if language exist by id
* @param Integer The language id
@ -239,6 +273,7 @@ class SubLanguageManager {
* @return void()
*/
public static function set_platform_language ($language_id) {
if (empty($language_id) or (intval($language_id)!=$language_id)) { return false; }
$tbl_admin_languages = Database :: get_main_table(TABLE_MAIN_LANGUAGE);
$tbl_settings_current = Database :: get_main_table(TABLE_MAIN_SETTINGS_CURRENT);
$sql_update = "SELECT english_name FROM ". $tbl_admin_languages." WHERE id='".Database::escape_string($language_id)."'";
@ -248,6 +283,19 @@ class SubLanguageManager {
$result_2 = Database::query($sql_update_2);
}
/**
* Get platform language ID
* @return int The platform language ID
*/
public static function get_platform_language_id () {
$name = api_get_setting('platformLanguage');
$tbl_admin_languages = Database :: get_main_table(TABLE_MAIN_LANGUAGE);
$sql = "SELECT id FROM ". $tbl_admin_languages." WHERE englsh_name ='$name'";
$res = Database::query($sql);
if (Database::num_rows($res)<1) { return false;}
$row = Database::fetch_array($res);
return $row['id'];
}
/*
* Get parent language path (or null if no parent)
* @param string Children language path
* @return string Parent language path or null

@ -145,44 +145,6 @@ function ckeck_if_is_parent_of_sub_language ($parent_id) {
function allow_get_all_information_of_sub_language ($parent_id,$sub_language_id) {
return SubLanguageManager::get_all_information_of_sub_language($parent_id,$sub_language_id);
}
/**
* Add directory for sub-language
* @param string Path of new sub-language
* @return
*/
function add_directory_of_sub_language ($path_sub_language) {
return SubLanguageManager::add_directory_of_sub_language($path_sub_language);
}
/**
* Remove directory of sub-language
* @param string Path of new sub_language
* @return bool True on success, false otherwise
*/
function remove_directory_of_sub_language ($path) {
$content = SubLanguageManager::get_all_data_of_dokeos_folder($path);
if (count($content)>0) {
foreach ($content as $value_content) {
$path_file = $path.'/'.$value_content;
unlink($path_file);
}
$rs = @rmdir($path);
if ($rs === true) {
return true;
} else {
return false;
}
} else {
$rs = @rmdir($path);
if ($rs === true) {
return true;
} else {
return false;
}
}
}
/*end declare functions*/
//add data
@ -266,9 +228,8 @@ if (isset($_POST['SubmitAddNewLanguage'])) {
$isocode=str_replace(' ','_',$isocode);
$str_info='<br/>'.get_lang('OriginalName').' : '.$original_name.'<br/>'.get_lang('EnglishName').' : '.$english_name.'<br/>'.get_lang('PlatformCharsetTitle').' : '.$isocode;
$path=api_get_path(SYS_LANG_PATH).$english_name;
$mkdir_result=add_directory_of_sub_language($path);
$mkdir_result=SubLanguageManager::add_language_directory($english_name);
if ($mkdir_result) {
add_sub_language($original_name,$english_name,$isocode,$sublanguage_available,$parent_id);
$link = '<br /><br /><a href="languages.php">'.get_lang('ReturnToLanguagesList').'</a>';
@ -287,14 +248,11 @@ if (isset($_POST['SubmitAddNewLanguage'])) {
}
}
if (isset($_POST['SubmitAddDeleteLanguage'])) {
$path=api_get_path(SYS_LANG_PATH).$english_name;
if (is_dir($path)) {
$rs=remove_directory_of_sub_language($path);
if ($rs===true) {
SubLanguageManager::removed_sub_language($parent_id,$sub_language_id);
Display::display_confirmation_message(get_lang('TheSubLanguageHasBeenRemoved'));
}
$rs = SubLanguageManager::remove_sub_language($english_name);
if ($rs===true) {
Display::display_confirmation_message(get_lang('TheSubLanguageHasBeenRemoved'));
} else {
Display::display_error_message(get_lang('TheSubLanguageHasNotBeenRemoved'));
}
}
// ckeck_if_is_parent_of_sub_language($parent_id)===false

@ -10,16 +10,16 @@ class TestSubLanguageManager extends UnitTestCase {
$this->UnitTestCase('Sublanguage Manager library - main/admin/sub_language.class.test.php');
}
/**
* Testing who get all data of dokeos folder
* Testing who get all data of lang folder
* @param String to url path folder
* @param bool true if we only want the subname
* @return Array All file of dokeos folder
* @return Array All file of lang folder
*/
public function testget_all_data_of_dokeos_folder(){
$dokeos_path_folder = api_get_path(SYS_PATH);
$res = SubLanguageManager::get_all_data_of_dokeos_folder($dokeos_path_folder, $only_main_name = false);
public function testget_lang_folder_files_list(){
$path = api_get_path(SYS_LANG_PATH).'english';
$res = SubLanguageManager::get_lang_folder_files_list($path, $only_main_name = false);
$this->assertTrue(is_array($res));
$this->assertTrue($res);
$this->assertTrue(count($res)>0);
}
/**
@ -30,19 +30,16 @@ class TestSubLanguageManager extends UnitTestCase {
$parent_id = 13;
$language_id = 10;
$res = SubLanguageManager::get_all_information_of_sub_language($parent_id, $language_id);
// under normal circumstances, there is no language 10 child of language 13
$this->assertFalse($res);
$this->assertTrue(is_array($res));
// var_dump($res);
}
/**
/**
*
*/
public function testget_all_information_of_language(){
$parent_id = 11;
$res = SubLanguageManager::get_all_information_of_language($parent_id);
$this->assertTrue($res);
$this->assertTrue(is_array($res));
}
@ -55,63 +52,38 @@ class TestSubLanguageManager extends UnitTestCase {
$res = SubLanguageManager::get_all_language_variable_in_file($system_path_file);
$this->assertTrue(is_array($res));
}
/**
* Add directory for sub-language
* @param String The sub-language path directory ( /var/www/my_lms/main/lang/spanish_corporate )
* @return boolean
*/
public function testadd_language_directory() {
$res = SubLanguageManager :: add_language_directory('test');
$this->assertTrue($res);
$res = SubLangageManager :: remove_language_directory('test');
}
/**
*
*
*/
public function testadd_file_in_language_directory(){
$dirname = api_get_path(SYS_LANG_PATH);
$perm_dir = substr(sprintf('%o', fileperms($dirname)), -4);
if ($perm_dir != '0777') {
$msg = 'Error';
$this->assertTrue(is_string($msg));
} else {
$system_path_file = $dirname.'spanish.inc.php';
$res = SubLanguageManager::add_file_in_language_directory($system_path_file);
unlink($system_path_file);
$this->assertNull($res);
$this->assertTrue(is_null($res));
}
//var_dump($res);
$res = SubLanguageManager :: add_language_directory('test');
$this->assertTrue($res);
$system_path_file = api_get_path(SYS_LANG_PATH).'test/spanish.inc.php';
$res = SubLanguageManager::add_file_in_language_directory($system_path_file);
$this->assertTrue($res);
$res = SubLanguageManager :: remove_language_directory('test');
}
public function testwrite_data_in_file(){
$dirname = api_get_path(SYS_LANG_PATH);
$perm_dir = substr(sprintf('%o', fileperms($dirname)), -4);
if ($perm_dir != '0777') {
$msg = "Error";
$this->assertTrue(is_string($msg));
} else {
$file = $dirname.'spanish.inc.php';
$path_file = $file;
$new_sub_language='spanishtest';
$variable_sub_language='test';
$res = SubLanguageManager::write_data_in_file($path_file,$new_sub_language,$variable_sub_language);
$this->assertTrue(is_null($res));
$this->assertNull($res);
}
//var_dump($res);
$this->assertFalse($res);
$this->assertTrue(is_null($res));
}
/**
* Add directory for sub-language
* @param String The sub-language path directory ( /var/www/my_dokeos/main/lang/spanish_corporate )
* @return boolean
*/
public function testadd_directory_of_sub_language() {
$path_sub_language = api_get_path(SYS_LANG_PATH).'test';
$res = SubLanguageManager :: add_directory_of_sub_language($path_sub_language);
if (is_bool($res)) {
$this->assertTrue($path_sub_language);
} else {
$this->assertFalse($path_sub_language);
}
$file = $dirname.'spanish.inc.php';
$path_file = $file;
$new_sub_language='spanishtest';
$variable_sub_language='test';
$res = SubLanguageManager::write_data_in_file($path_file,$new_sub_language,$variable_sub_language);
$this->assertTrue($res);
}
/**
@ -119,11 +91,11 @@ class TestSubLanguageManager extends UnitTestCase {
* @param Integer id's.
* @return null
*/
public function Testremoved_sub_language() {
public function Testremove_sub_language() {
$parent_id = '';
$sub_language_id = 1;
$res = SubLanguageManager :: removed_sub_language($parent_id, $sub_language_id);
$this->assertNull($res);
$res = SubLanguageManager :: remove_sub_language($parent_id, $sub_language_id);
$this->assertFalse($res);
// var_dump($res);
}
@ -146,9 +118,15 @@ class TestSubLanguageManager extends UnitTestCase {
*/
public function Testget_name_of_language_by_id() {
$language_id = 13;
$tbl_admin_languages = Database :: get_main_table(TABLE_MAIN_LANGUAGE);
$sql='SELECT original_name FROM '.$tbl_admin_languages.' WHERE id=13';
$rs=Database::query($sql);
$name ='';
if (Database::num_rows($rs)>0) {
$name = Database::result($rs,0,'original_name');
}
$res = SubLanguageManager :: get_name_of_language_by_id($language_id);
$this->assertTrue(is_string($res));
// var_dump($res);
$this->assertEqual($res,$name,'The language name from function does not match the database value');
}
/**
@ -156,10 +134,10 @@ class TestSubLanguageManager extends UnitTestCase {
* @param Integer
* @return Boolean
*/
public function Testcheck_if_language_is_sub_language() {
public function Testcheck_if_language_is_sub_language_for_non_existing_sublanguage() {
$language_id = 112;
$res = SubLanguageManager :: check_if_language_is_sub_language($language_id);
$this->assertTrue(is_bool($res));
$this->assertFalse($res);
// var_dump($res);
}
@ -169,18 +147,18 @@ class TestSubLanguageManager extends UnitTestCase {
public function Testcheck_if_language_is_father() {
$language_id = 12;
$res = SubLanguageManager :: check_if_language_is_father($language_id);
$this->assertTrue(is_bool($res));
$this->assertFalse($res);
// var_dump($res);
}
/**
*
*/
public function Testmake_unavailable_language() {
$language_id = 15;
public function Testmake_language_unavailable_and_back() {
$language_id = 11;
$res = SubLanguageManager :: make_unavailable_language($language_id);
$this->assertNull($res);
$this->assertTrue(is_null($res));
$this->assertTrue($res,'Language could not be made unavailable');
$res = SubLanguageManager :: make_available_language($language_id);
// var_dump($res);
}
@ -189,55 +167,42 @@ class TestSubLanguageManager extends UnitTestCase {
*/
public function Testmake_available_language() {
$language_id= 11;
$res = SubLanguageManager :: make_unavailable_language($language_id);
$res = SubLanguageManager :: make_available_language ($language_id);
$this->assertNull($res);
$this->assertTrue(is_null($res));
$this->assertTrue($res,'Language could not be made available');
// var_dump($res);
}
/**
*
*
*/
public function Testset_platform_language(){
public function Testset_platform_language_empty(){
$backup = SubLanguageManager :: get_platform_language_id();
$language_id = '';
$res = SubLanguageManager :: set_platform_language($language_id);
$this->assertTrue(is_null($res));
$this->assertNull($res);
$this->assertFalse($res);
$res = SubLanguageManager :: set_platform_language($backup);
// var_dump($res);
}
public function Testset_platform_language_2(){
$backup = SubLanguageManager :: get_platform_language_id();
$language_id = 2;
$res = SubLanguageManager :: set_platform_language($language_id);
$this->assertTrue($res);
$res = SubLanguageManager :: set_platform_language($backup);
// var_dump($res);
}
/**
*
*
*/
public function Testremove_directory_of_sub_language(){
// create a directory of sub language
$path_sub_language = api_get_path(SYS_LANG_PATH).'test';
//$path_sub_language = '/var/www/prueba123';
//$res = SubLanguageManager :: add_directory_of_sub_language($path_sub_language, 0777);
$res = SubLanguageManager :: add_directory_of_sub_language($path_sub_language, api_get_permissions_for_new_directories());
// remove a directory of sub language
if (file_exists($path_sub_language)) {
rmdir($path_sub_language);
}
$this->assertTrue(is_bool($res));
// var_dump($res);
}
/*
public function TestDeleteCourse(){
$code = 'COURSETEST';
$res = CourseManager::delete_course($code);
$path = api_get_path(SYS_PATH).'archive';
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if (strpos($file,$code)!==false) {
if (is_dir($path.'/'.$file)) {
rmdirr($path.'/'.$file);
}
}
}
closedir($handle);
}
$res = SubLanguageManager :: remove_language_directory('test');
// create a directory of sub language
$res = SubLanguageManager :: add_language_directory('test');
$this->assertTrue($res);
$res = SubLanguageManager :: remove_language_directory('test');
// var_dump($res);
}
*/
}
?>

Loading…
Cancel
Save