Ejemplo n.º 1
0
     } 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';
Ejemplo n.º 2
0
 /**
  * Функция установки обновления
  * @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);
     }
 }
Ejemplo n.º 3
0
 /**
  * функция удаления выбранных модов
  * @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);
 }