function ParseAnnotations($DocComment) { preg_match_all('/@([a-zA-Z0-9_-]+)\\:(.+)/', $DocComment, $parsed); $annotations = array(); foreach ($parsed[1] as $i => $Name) { $annotations[] = '"' . $Name . '": ' . $parsed[2][$i]; } $Json = '{' . implode(',', ObjectCp1251ToUtf8($annotations)) . '}'; return JsonDecode($Json); }
function AdminUpdateApply() { global $updates_folder, $autoupdate_to; // Распаковываем архив, показываем сообщение, что обновление прошло успешно. $update_file = RealPath2($updates_folder . $_GET['file']); if (!is_file($update_file)) { System::admin()->AddCenterBox('Ошибка'); System::admin()->HighlightError('Файл обновления не найден.'); return; } $zip = new ZipArchive(); $zip->open($update_file); $metadata = JsonDecode($zip->getFromName('metadata')); if (!isset($metadata) || !isset($metadata['product']) || $metadata['product'] != CMS_UPDATE_PRODUCT || !isset($metadata['type']) || $metadata['type'] != 'update' || !isset($metadata['from_version']) || $metadata['from_version'] != CMS_VERSION || !isset($metadata['to_version']) || !isset($metadata['changelog'])) { System::admin()->AddCenterBox('Ошибка'); System::admin()->HighlightError('Файл не является файлом обновления или не подходит к вашей версии системы.'); return; } $errors = array(); $numFiles = $zip->numFiles; for ($i = 0; $i < $numFiles; $i++) { $fn = $zip->getNameIndex($i); if ($fn == 'metadata') { continue; } if (substr($fn, -1) != '/') { // Файл $content = $zip->getFromIndex($i); if (is_file($fn)) { $r = file_put_contents($fn, $content); if ($r === false) { $errors[] = 'Не удалось обновить файл ' . $r; } } else { $r = file_put_contents($fn, $content); if ($r !== false) { chmod($fn, 0666); } else { $errors[] = 'Не удалось создать файл ' . $r; } } } else { // Папка if (!is_dir($fn)) { $r = MkDirRecursive($fn); if ($r === false) { $errors[] = 'Не удалось создать папку ' . $r; } } } } $zip->close(); if (count($errors) == 0) { // Автообновление $autoupdate_to = $metadata['to_version']; Audit('Обновление системы: Запуск обновления системы до версии ' . $autoupdate_to); include 'config/autoupdate.php'; // Очистка кэша System::cache()->ClearAll(); System::admin()->AddCenterBox('Обновление системы'); System::admin()->Highlight('Обновление прошло успешно, система обновлена до версии ' . SafeDB($metadata['to_version'], 20, str) . '.'); Audit('Обновление системы: Успешное завершение обновления, система была обновлена до версии "' . $autoupdate_to . '"'); } else { System::admin()->AddCenterBox('При обновлении произошли ошибки'); System::admin()->HighlightError(implode("<br>\n", $errors)); } }