/** * Генерирует полное имя файла кэша и контрольного файла, по имени группы и ключу. * @param $Group * @param $Key * @return array <type> */ public function GetFiles($Group, $Key) { $cacheGroupPath = $this->Path . $Group; if (!is_dir($cacheGroupPath)) { MkDirRecursive($cacheGroupPath); } $cacheGroupPath .= '/'; $Key = rawurlencode($Key); return array($cacheGroupPath . $Key . $this->FileSuffix, $cacheGroupPath . $Key . $this->ExpirySuffix); }
/** * Генерирует миниатюру и кэширует её. Возвращает имя файла миниатюры. * @param $FileName Исходный файл изображения. * @param int $MaxWidth Максимальная ширина миниатюры. * @param int $MaxHeight Максимальная высота миниатюры. * @param bool $Streech Растягивать ли картинку если заданные размеры больше исходных * @param null $SaveFormat Формат сохранения миниатюры (jpeg, png, gif, wbmp). * @return mixed */ function GetThumb($FileName, $MaxWidth = 0, $MaxHeight = 0, $Streech = false, $SaveFormat = null) { if ($FileName == '') { return 'images/no_image.png'; } elseif (substr($FileName, 0, 7) == 'http://') { return $FileName; } $FileName = RealPath2($FileName); if (isset($SaveFormat)) { $ext = '.' . $SaveFormat; } else { $ext = GetFileExt($FileName); } $tmb_path = System::config('general/tmb_path'); if (!is_dir($tmb_path)) { MkDirRecursive($tmb_path); } $tmb_file = $tmb_path . md5($FileName) . '_' . $MaxWidth . 'x' . $MaxHeight . ($Streech ? '_streech' : '') . $ext; if (!is_file($tmb_file)) { CreateThumb($FileName, $tmb_file, $MaxWidth, $MaxHeight, $Streech, $SaveFormat); } return $tmb_file; }
function AdminExtensionsUpload() { if (!isset($_FILES['extension'])) { System::admin()->AddTextBox('Ошибка', 'Файл не выбран.'); return; } $extension = $_FILES['extension']; if ($extension['error'] != 0) { System::admin()->AddTextBox('Ошибка', 'Ошибка при загрузке файла. Код ошибки: ' . $extension['error'] . '.'); return; } $valid_ext = '.ext.zip'; $path = './'; $errors_log = ''; $to_unpack = array(); // Проверяем расширение $archive_filename = $extension['name']; if (substr($archive_filename, -strlen($valid_ext)) != $valid_ext) { $errors_log .= 'Файл не является пакетом расширения LinkorCMS.'; } else { $archive = $extension['tmp_name']; $zip = new ZipArchive(); if ($zip->open($archive) === true) { for ($i = 0; $i < $zip->numFiles; $i++) { $filename = $zip->getNameIndex($i); $fileinfo = pathinfo($filename); if (!is_writable($path . $fileinfo['dirname'])) { $errors_log .= 'Нет прав на запись в папку ' . $path . $fileinfo['dirname'] . "\n"; continue; } if (substr($path . $filename, -1) == '/') { if (!is_dir($path . $filename)) { MkDirRecursive($path . $filename); } } else { $to_unpack[] = $filename; } } } else { $errors_log .= 'Не удалось прочитать файл. Неверный формат.'; } } if ($errors_log != '') { System::admin()->AddCenterBox('Ошибка, не удалось распаковать'); System::admin()->HighlightError(nl2br($errors_log)); $zip->close(); } else { // Распаковываем файлы if (!$zip->extractTo($path, $to_unpack)) { System::admin()->AddCenterBox('Ошибка'); System::admin()->HighlightError('Ошибка при распаковке.'); $zip->close(); return; } Audit('Расширения: Загружен архив расширения "' . $archive_filename . '"'); $zip->close(); GO(ADMIN_FILE . '?exe=extensions&a=installlist'); } }
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)); } }