} else { $arrList = array(); foreach ($arrFiles as &$file) { copy('templates/site/default/' . $file, filesys::setPath('templates/site/' . $_POST['nameTemplate']) . $file); $arrList[] = array('id' => str_replace('.', '_', $file), 'name' => $file); } echo '{"result":"success", "listFiles":' . ajax::sdgJSONencode(array_reverse($arrList)) . '}'; } } elseif ('deleteTemplate' === $_GET['action'] && !empty($_POST['nameTemplate']) && is_dir('templates/site/' . $_POST['nameTemplate'])) { if ('default' == $_POST['nameTemplate']) { echo 'errDelDefaultTemplate'; } elseif (CONF_TEMPLATE == $_POST['nameTemplate']) { echo 'errDelConfTemplate'; } else { sleep(1); echo !filesys::removeDir('templates/site/' . $_POST['nameTemplate']) ? 'errDelTemplate' : 'success'; } } elseif ('addTplFile' === $_GET['action'] && !empty($_POST['nameTplFile']) && is_dir('templates/site/' . $_POST['currTemplate']) && !empty($_POST['discriptionTplFile'])) { if (is_file('templates/site/' . $_POST['currTemplate'] . '/' . $_POST['nameTplFile'])) { echo 'errTplFileExists'; } else { $arrData = localiz::getConstForParsingFile("lang/russian/adm.lang.templates.php"); $nameConst = 'HELP_ADMIN_TEMPLATE_DESCRIPTION_' . str_replace('.', '_', strtoupper($_POST['nameTplFile'])); $arrData[$nameConst] = $_POST['discriptionTplFile']; $arrNewData = array(); foreach ($arrData as $constName => &$constValue) { $arrNewData[] = "define('" . strtoupper($constName) . "', '" . (!empty($constValue) ? $constValue : strtoupper($constName)) . "');"; } $data = "<?php\n\n" . "(!defined('SDG')) ? die ('Triple protection!') : null;\n\n" . implode("\n\n", $arrNewData) . "\n"; file_put_contents("lang/russian/adm.lang.templates.php", $data); echo false === @file_put_contents('templates/site/' . $_POST['currTemplate'] . '/' . $_POST['nameTplFile'], '') ? 'errAddTplFile' : 'success';
/** * Функция установки обновления * @param string $file - путь к архиву обновления * @return bool */ static function setupUpdate($file) { // проверяем файл if (!file_exists($file)) { self::$errorMessage = ERROR_UPDATES_UPDATE_FILE_NOT_FOUND; return false; } // создаем объект $zip = new PclZip($file); // получаем текст из файла обновления (для частичного обновления файлов) // если он есть // извлекаем файлы self::clearLogData(); self::setLogData(array('error' => 2, 'message' => 'Try get data from update.xml', 'object' => $file)); self::saveLogData(); if ($update = $zip->extract(PCLZIP_OPT_BY_NAME, 'update.xml', PCLZIP_OPT_EXTRACT_AS_STRING)) { // создаем объект SimpleXML, со свойствами файла $xml = new SimpleXMLElement($update[0]['content'], LIBXML_NOCDATA); // делаем обход по объекту, и выполянем необходимые действия foreach ($xml->children() as $child) { // обновление PHP файлов if ($child->getName() == 'php') { self::clearLogData(); self::setLogData(array('error' => 2, 'message' => 'Update PHP files (PHP-node in XML)', 'object' => 'PHP')); self::saveLogData(); // делаем обход по текущему узлу XML-файла foreach ($child->children() as $children) { // формируем из свойств объекта массив $params = get_object_vars($children); // проверяем, с чем необходимо работать if ($children->getName() == 'expconst') { self::clearLogData(); self::setLogData(array('error' => 2, 'message' => 'Update constant file (action: ' . $params['action'] . '; string: ' . $params['string'] . '; value: ' . $params['value'] . ')', 'object' => $params['file'])); self::saveLogData(); // если запрос не удался, логируем ошибку if (!self::updateConstFile($params)) { self::setLogData(array('error' => 1, 'message' => self::$errorMessage, 'object' => $params['file'], 'data' => $params)); } else { self::setLogData(array('error' => 0, 'message' => 'Success updated', 'object' => $params['file'], 'data' => $params)); } self::saveLogData(); } elseif ($children->getName() == 'exparray') { global ${$params['subj']}; // так сделано из-за того, что возникают проблемы с объектами SimpleXMLElement // которые попадают в сериализованные данные. Это актуально только для обновления массивов // т.к. там есть вложеность узлов. // В дальнейшем можно сделать рекурсивную функцию для обработки таких объектов // Сейчас не охота такого делать $setParams = array('action' => $params['action'], 'file' => $params['file'], 'subj' => $params['subj']); self::clearLogData(); self::setLogData(array('error' => 2, 'message' => 'Update array file (action: ' . $params['action'] . '; file: ' . $params['file'] . '; subj: ' . $params['subj'] . ')', 'object' => $params['file'])); self::saveLogData(); // если запрос не удался, логируем ошибку if (!self::updateArrFile($children, ${$params['subj']})) { self::setLogData(array('error' => 1, 'message' => self::$errorMessage, 'object' => $params['file'], 'data' => $setParams)); } else { self::setLogData(array('error' => 0, 'message' => 'Success updated', 'object' => $params['file'], 'data' => $setParams)); } self::saveLogData(); } elseif ($children->getName() == 'expfile') { self::clearLogData(); self::setLogData(array('error' => 2, 'message' => 'Add text to file (action: ' . $params['action'] . '; string: ' . $params['string'] . ')', 'object' => $params['file'])); self::saveLogData(); // если запрос не удался, логируем ошибку if (!self::updateTextInFile($children)) { self::setLogData(array('error' => 1, 'message' => self::$errorMessage, 'object' => $params['file'], 'data' => $params)); } else { self::setLogData(array('error' => 0, 'message' => 'Success updated', 'object' => $params['file'], 'data' => $params)); } self::saveLogData(); } } } elseif ($child->getName() == 'sql') { self::clearLogData(); self::setLogData(array('error' => 2, 'message' => 'Update DataBase (SQL-node in XML)', 'object' => 'SQL')); self::saveLogData(); // делаем обход по текущему узлу XML-файла foreach ($child->children() as $children) { $params = get_object_vars($children); self::clearLogData(); self::setLogData(array('error' => 2, 'message' => !empty($params['query']) ? $params['query'] : 'Not query', 'object' => $params['table'] . '; action: ' . $params['action'] . (!empty($params['field']) ? '; field: ' . $params['field'] : ''))); self::saveLogData(); if (self::updateDB($children)) { self::setLogData(array('error' => 0, 'message' => 'Success updated', 'object' => $params['table'], 'data' => $params)); } else { self::setLogData(array('error' => 1, 'message' => self::$errorMessage, 'object' => $params['table'], 'data' => $params)); } self::saveLogData(); } } elseif ($child->getName() == 'delfiles') { self::clearLogData(); self::setLogData(array('error' => 2, 'message' => 'Delete files', 'object' => 'delfiles')); self::saveLogData(); // делаем обход по текущему узлу XML-файла foreach ($child->children() as $children) { $params = get_object_vars($children); self::clearLogData(); self::setLogData(array('error' => 2, 'message' => 'Try delete file', 'object' => $params['expfname'])); self::saveLogData(); if (file_exists($params['expfname'])) { if (!unlink($params['expfname'])) { self::setLogData(array('error' => 1, 'message' => 'Unable delete file', 'object' => $params['expfname'])); } else { self::setLogData(array('error' => 0, 'message' => 'File success deleted', 'object' => $params['expfname'])); } self::saveLogData(); } else { self::clearLogData(); self::setLogData(array('error' => 0, 'message' => 'File not exists', 'object' => $params['expfname'])); self::saveLogData(); } } } elseif ($child->getName() == 'deldirs') { // делаем обход по текущему узлу XML-файла self::clearLogData(); self::setLogData(array('error' => 2, 'message' => 'Delte dirs', 'object' => 'deldirs')); self::saveLogData(); foreach ($child->children() as $children) { $params = get_object_vars($children); self::clearLogData(); self::setLogData(array('error' => 2, 'message' => 'Try delete dir', 'object' => $params['expfname'])); self::saveLogData(); if (file_exists($params['expfname'])) { if (!filesys::removeDir($params['expfname'])) { self::setLogData(array('error' => 1, 'message' => 'Unable delete dir', 'object' => $params['expfname'])); } else { self::setLogData(array('error' => 2, 'message' => 'Dir success deleted', 'object' => $params['expfname'])); } self::saveLogData(); } else { self::clearLogData(); self::setLogData(array('error' => 0, 'message' => 'Dir not exists', 'object' => $params['expfname'])); self::saveLogData(); } } } } // записываем ошибки в лог self::saveLogData(); // удаляем файл из архива $zip->delete(PCLZIP_OPT_BY_NAME, 'update.xml'); self::$message = MESSAGE_UPDATES_UPDATE_DB_SUCCESS; return true; // распаковываем архив //return self::extractUpdate($file); } else { // если этого файла нет, то просто копируем файлы из архива self::clearLogData(); self::setLogData(array('error' => 0, 'message' => 'File update.xml not exists (not required partial update)', 'object' => $file)); self::saveLogData(); self::$message = MESSAGE_UPDATES_UPDATE_DB_NOT_REQUIRED; return true; //return self::extractUpdate($file); } }
/** * функция удаления выбранных модов * @param (array) $arrMods - массив, содержащий id модов для удаления * @return bool * @deprecated не использовать эту фукнкцию, она устарела. * Для удаления мода нужно писать новую ф-ю */ protected function deleteMods($arrMods) { if (empty($arrMods)) { return false; } // получаем список модов из файла БД $dbData = $this->getMods(); // устанавливаем необходимые токены foreach ($arrMods as $value) { unset($dbData[$value]); filesys::removeDir($this->modsPath . $value); } return filesys::putSerializedData($this->dbFile, $dbData); }