После очередного обновления Majordomo слетают собственные изменения в файлах.
Простой метод повторения изменений в файлах после их перезаписи очередным обновлением Majordomo.
Например, я ввёл собственные языковые переменные
'GENERAL_ROOM_BALCONY' => 'Балкон',
'GENERAL_ROOM_KIDSROOM' => 'Детская'
в файлах локализаций:
- /var/www/html/languages/default.php
- /var/www/html/languages/ru.php
- /var/www/html/languages/ua.php
После обновления Majordomo эти значения перезатираются.
Для автоматического изменения языковых файлов после обновления я добавил метод firmwareUpdated в класс Computer. Изменил свойство LatestUpdateTimestamp таким образом, что бы при изменении вызывался новосозданный метод.
После этого в объекте MyComputer добавил в метод firmwareUpdated следующий код:
$filename = "/var/www/html/languages/default.php";
$str_old = " 'GENERAL_ROOM_TOILET' => 'Toilet',";
$str_new = " 'GENERAL_ROOM_TOILET' => 'Toilet',\n 'GENERAL_ROOM_BALCONY' => 'Balcony',\n 'GENERAL_ROOM_KIDSROOM' => 'Kidsroom',";
$res_array = replace_in_file_with_check($filename, $str_old, $str_new);
$filename = "/var/www/html/languages/ru.php";
$str_old = " 'GENERAL_ROOM_TOILET' => 'Туалет',";
$str_new = " 'GENERAL_ROOM_TOILET' => 'Туалет',\n 'GENERAL_ROOM_BALCONY' => 'Балкон',\n 'GENERAL_ROOM_KIDSROOM' => 'Детская',";
$res_array = replace_in_file_with_check($filename, $str_old, $str_new);
$filename = "/var/www/html/languages/ua.php";
$str_old = " 'GENERAL_ROOM_TOILET' => 'Туалет',";
$str_new = " 'GENERAL_ROOM_TOILET' => 'Туалет',\n 'GENERAL_ROOM_BALCONY' => 'Балкон',\n 'GENERAL_ROOM_KIDSROOM' => 'Дитяча',";
$res_array = replace_in_file_with_check($filename, $str_old, $str_new);
При этом две пользователские функции, которые используются в коде можно объявить тут же, либо вынести в отдельный файл с пользовательскими функциями:
/**
function replace_in_file_with_check($FilePath, $OldText, $NewText)
{
$Result = array('status' => 'error', 'message' => '', 'check' => '');
$fileexists = file_exists($FilePath);
if ($fileexists) {
$file = file_get_contents($FilePath);
$strpos = strpos($file, $NewText);
if($strpos) { //проверка на наличие заменяемой строки
$Result['status'] = $res['status'];
$Result['message'] = $res['message'];
$Result['check'] = "Файл $FilePath существует. Он уже обновлён.";
} else {
$res = replace_in_file($FilePath, $OldText, $NewText);
$Result['status'] = $res['status'];
$Result['message'] = $res['message'];
$Result['check'] = "Файл $FilePath существует. Он ещё не обновлён. Обновляем.";
}
} else {
//Файл $FilePath не существует
$Result['status'] = 'error';
$Result['message'] = $res['message'];
$Result['check'] = "Файл $FilePath не существует";
}
return $Result;
}
/**
function replace_in_file($FilePath, $OldText, $NewText)
{
$Result = array('status' => 'error', 'message' => '');
if(file_exists($FilePath)===TRUE)
{
if(is_writeable($FilePath))
{
try
{
$FileContent = file_get_contents($FilePath);
$FileContent = str_replace($OldText, $NewText, $FileContent);
if(file_put_contents($FilePath, $FileContent) > 0)
{
$Result["status"] = 'success';
}
else
{
$Result["message"] = 'Error while writing file';
}
}
catch(Exception $e)
{
$Result["message"] = 'Error : '.$e;
}
}
else
{
$Result["message"] = 'File '.$FilePath.' is not writable !';
}
}
else
{
$Result["message"] = 'File '.$FilePath.' does not exist !';
}
return $Result;
}
В результате,
после обновления Majordomo вызывается метод firmwareUpdated и добавляет необходимые изменения в файлы локализаци.
Таким же способом можно выполнять изменения и в других файлах Majordomo.
Kiev, Ukraine
На форуме: Vip