/** * Функция делает бекап БД * * @return bool */ static function backupDB() { // файл дампа $file = CONF_BACKUPS_PATH_TO_FILES . terms::currentDate() . '_database_revision_' . CONF_INFO_SCRIPT_REVISION . '.sql'; // создаем указатель на файл $fp = fopen($file, 'w'); // выбираем все таблицы $showTablesQuery = 'SHOW TABLES'; $showTablesId = db::dbQuery($showTablesQuery); // пробегаем по массиву всeх таблиц while ($showTablesRes = db::dbFetchRow($showTablesId)) { // запрос создания таблицы $showCreateTableQuery = 'SHOW CREATE TABLE `' . $showTablesRes[0] . '`'; $showCreateTableId = db::dbQuery($showCreateTableQuery); // пробегаем по массиву запроса создания таблиц while ($showCreateTableRes = db::dbFetchRow($showCreateTableId)) { // добавляем в дамп запрос удаления таблицы, если она уже существует $tableExistsQuery = 'DROP TABLE IF EXISTS `' . $showCreateTableRes[0] . '`;' . "\n\n"; $sqlCode = $showCreateTableRes[1]; // записываем запрос удаления таблицы fwrite($fp, $tableExistsQuery); // записываем запрос создания таблицы fwrite($fp, $sqlCode . ";\n\n"); $NumericColumn = array(); $field = 0; $showColumnsQuery = 'SHOW COLUMNS FROM `' . $showCreateTableRes[0] . '`'; $showColumnsRes = db::dbQuery($showColumnsQuery); while ($col = db::dbFetchRow($showColumnsRes)) { $NumericColumn[$field++] = preg_match("/^(\\w*int|year)/", $col[1]) ? 1 : 0; } $fields = $field; $i = 0; // запрос выбора всех данных из таблицы $dumpQuery = 'SELECT * FROM `' . $showCreateTableRes[0] . '`'; $dmpId = db::dbQuery($dumpQuery); // если есть данные для INSERT if (db::dbNumRows($dmpId) > 0) { $showInsertQuery = 'INSERT INTO `' . $showCreateTableRes[0] . '` VALUES'; // записваем запрос Insert fwrite($fp, $showInsertQuery); // проходим по результату и формируем строки для записи в файл while ($row = db::dbFetchRow($dmpId)) { $i++; for ($k = 0; $k < $fields; $k++) { $row[$k] = $NumericColumn[$k] ? isset($row[$k]) ? $row[$k] : 'NULL' : (isset($row[$k]) ? "'" . mysql_escape_string($row[$k]) . "'" : 'NULL'); } fwrite($fp, ($i == 1 ? '' : ',') . "\n(" . implode(', ', $row) . ')'); } fwrite($fp, ";\n\n"); } } } return fclose($fp); }
/** * Функция логирует платежи * * @param (array) $arrData - массив данных, для записи в лог (array('field name' => field value)) * @param (string) $status - статус платежа. (SUCCESS - успешно, FAIL - ошибка, WRONG PARAMS - оплата прошла, но от сервера получены неверные параметры) * @param (string or false) $mod - название мода, которым производилась оплата. По умолчанию false * * @return string (сгенерированную лог-строку) */ static function logPaymentData($arrData, $status, $mod = false) { $mess = "\n" . '================== ' . strtoupper($status) . ' (' . terms::currentDateTime() . ') ==================' . "\n"; $mod ? $mess .= 'MOD: ' . $mod . "\n" : null; foreach ($arrData as $key => $value) { $mess .= strtoupper($key) . ': ' . $value . "\n"; } $mess .= "\n" . 'USER IP: ' . $_SERVER['REMOTE_ADDR'] . "\n" . '============================================================================' . "\n\n"; $file = $mod ? $mod . '_' . terms::currentDate() . '_payment.log' : terms::currentDate() . '_payment.log'; @error_log($mess, 3, 'core/data/log/' . $file); return $mess; }
static function saveLogData() { if (!empty(self::$logData)) { $logData = filesys::getSerializedData(CONF_UPDATES_PATH_TO_LOG_FILES . terms::currentDate() . '_update.log'); if (is_array($logData)) { self::$logData = array_merge($logData, self::$logData); } filesys::putSerializedData(CONF_UPDATES_PATH_TO_LOG_FILES . terms::currentDate() . '_update.log', self::$logData); self::clearLogData(); } }
echo ajax::sdgJSONencode(array('error' => updates::$errorMessage)); } else { // Если сообщения не пустые, значит ошибки были if (!empty(updates::$errorMessage)) { echo ajax::sdgJSONencode(array('success' => MESSAGE_WARNING_UPDATE_SETUP_BUT_ERRORS_OCCURRED)); } else { echo ajax::sdgJSONencode(array('success' => updates::$message)); } // удаляем файлы кеша caching::dropCache(); // удаляем файл обновлений unlink(CONF_UPDATES_PATH_TO_FILES . $_POST['setupUpdate']); // Переименовываем файл логов, вкючая в его имя номер сборки $logFile = CONF_UPDATES_PATH_TO_LOG_FILES . terms::currentDate() . '_update.log'; if (file_exists($logFile)) { rename($logFile, CONF_UPDATES_PATH_TO_LOG_FILES . terms::currentDate() . '_' . CONF_INFO_PRODUCT_ID . '_' . CONF_INFO_SCRIPT_REVISION . '_update.log'); } // отключаем техобслуживание сайта $data = "<?php\n\n" . "(!defined('SDG')) ? die ('Triple protection!') : null;\n\n" . 'define("CONF_SERVICE_ADMINISTRATION_MAINTENANCE", false);' . "\n"; tools::saveConfig('core/conf/const.config.service.php', $data, false); } } else { echo ajax::sdgJSONencode(array('error' => ERROR_UPDATES_REQUEST_UNDEFINED_ACTION)); } } elseif (!empty($_POST['maintenance'])) { $maintenance = $_POST['maintenance'] == 'on' ? 'true' : 'false'; $data = "<?php\n\n" . "(!defined('SDG')) ? die ('Triple protection!') : null;\n\n" . 'define("CONF_SERVICE_ADMINISTRATION_MAINTENANCE", ' . $maintenance . ');' . "\n"; echo !tools::saveConfig('core/conf/const.config.service.php', $data, false) ? 'false' : 'true'; } elseif (!empty($_POST['mailFile']) && !empty($_POST['mailText']) && !empty($_POST['pathMailTemplates'])) { $_POST['mailFile'] = $_POST['pathMailTemplates'] . str_replace('_', '.', $_POST['mailFile']) . '.txt'; // формируем имя файла
/** * protected функция выполняет рассылку, в ссответствии с полученными параметрами * * @param (array) $arrData - массив данных, необходимых для рассылки * * @return bool */ protected function runSubscription($arrData) { // проверяем наличие необходимых данных if (!$this->validateSubscriptionData($arrData)) { return false; } // формируем данные для рассылки if ($data = $this->createSubscriptionData($arrData)) { $mailer = new mailer(); // массив для замены в шаблоне $mailer->setAddReplace(array('%ANNOUNCE_TYPE%' => 'vacancy' === $arrData['type_subscription'] ? SITE_VACANCY : SITE_RESUME, '%DATA%' => $data)); if ($mailer->sendEmail(CONF_MAIL_ADMIN_EMAIL, false, false, $arrData['email'], $arrData['email'], CONF_SITE_NAME . MAIL_SUBJ_SUBSCRIPTION_SEND, 'announce.subscription.txt')) { $this->editEntrys(secure::escQuoteData(array('date_lastsend' => terms::currentDate())), "email IN (" . secure::escQuoteData($arrData['email']) . ") AND type_subscription IN (" . secure::escQuoteData($arrData['type_subscription']) . ") AND id_profession IN (" . secure::escQuoteData($arrData['id_profession']) . ") AND id_region IN (" . secure::escQuoteData($arrData['id_region']) . ") AND id_city IN (" . secure::escQuoteData($arrData['id_city']) . ") AND period IN (" . secure::escQuoteData($arrData['period']) . ") AND token IN ('active')"); return true; } else { return false; } } else { return false; } }