function apply() { $settings['site_language'] = JArrayHelper::getValue($_REQUEST, 'site_language', "en"); $settings['map_lang'] = JArrayHelper::getValue($_REQUEST, 'map_lang', "en"); $settings['cache_map'] = JArrayHelper::getValue($_REQUEST, 'cache_map', "0"); $settings['translator'] = JArrayHelper::getValue($_REQUEST, 'translator', "bing"); $settings['api_google_translate_key'] = JArrayHelper::getValue($_REQUEST, 'api_google_translate_key', ""); $settings['api_bing_client_secret'] = JArrayHelper::getValue($_REQUEST, 'api_bing_client_secret', ""); $settings['api_bing_client_id'] = JArrayHelper::getValue($_REQUEST, 'api_bing_client_id', ""); setParams($settings); }
"> <a class="gird-box-image" href="javascript:void(0)" onclick="removeImg(this)"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span></a> </div> </div> <div class="row col-md-12"> <div class="form-group"> <?php $options = array('Defaults', 'Repeat', 'No repeat'); ?> <select class="form-control input-sm" name="params[background][style]"> <?php for ($i = 0; $i < 3; $i++) { ?> <?php $background_style = setParams($params, 'background', 'style'); if ($background_style == $options[$i]) { $check = 'selected=""'; } else { $check = ''; } ?> <option value="<?php echo $options[$i]; ?> " <?php echo $check; ?> ><?php echo $options[$i]; ?>
/** * Функция отправляет письма */ function sendMail() { // Явное указание на использование глобальных переменных global $localhostPath, $dbConnect, $prefix, $maxMailSend, $maxMailSendInDay, $log, $timeout; // Устанавливаем значение "по умолчанию" переменной статуса завершения функции $status = false; // Формирвоание текста сообщения о наличии файла "stop.txt" $stopFileExistlogMessage = date('d.m.Y H:i:s') . ": Выполнение предыдущей версии скрипта еще не завершено!"; // Формирвоание текста сообщения о наличии файла "gotLimit.txt" $gotlimitFileExistlogMessage = date('d.m.Y H:i:s') . ": Достигнут суточный лимит отправляемых писем. Рассылку необходимо возобновить вручную через 24 часа!"; // Если файла "gotLimit.txt" на сервере нет // Если файла "stop.txt" на сервере нет // Если соединение с БД установлено // И параметры скрипта переопределены // И максимальное количество отправляемых за раз писем не равно 0 if (!checkFileExists('gotLimit.txt', $gotlimitFileExistlogMessage) && !checkFileExists('stop.txt', $stopFileExistlogMessage) && dbConnect() && setParams() && $maxMailSend !== 0) { // Создаем файл "stop.txt" createFile('stop.txt', 'stop'); // Если есть активные почтовые рассылки, получаем параметры первой активной рассылки if ($mail = getMailingGroup()) { // Добавляем сообщение о начале работы скрипта в массив лога $log[] = date('d.m.Y H:i:s') . ": Начало работы скрипта!"; // Получение списка адресатов, кому были отправлены письма $whoSent = $mail['whoSent'] ? explode(',', $mail['whoSent']) : array(); // Получаем массив категорий материалов рассылки $categories = $mail['categories'] ? array_diff(explode(',', $mail['categories']), array('', ' ', null)) : array(); // Получаем количество отправленных писем из отчера за предыдущий день $sendedYesterday = getYesterdayReportData(); // Определение количества отправленных писем $sendedInAllTime = $mail['log'] > count($whoSent) ? $mail['log'] : count($whoSent); // Подсчитываем, сколько еще можно отправить писем за этот день, не превышая лимитов хостинга $needToSend = $maxMailSendInDay + $sendedYesterday - $sendedInAllTime; // Переопределение максимального количества отправляемых за раз писем $maxMailSend = $needToSend >= $maxMailSend ? $maxMailSend : $needToSend; // Если не достигнут суточный лимит количества отправляемых писем if ($needToSend > 0) { // Получение списка подписчиков активной рассылки $subscribers = getSubscribers($categories, $mail['log']); // Если массив подписчиков не пуст if (!empty($subscribers)) { // Закрываем текущее соединение с БД, во избежание зазрыва соединения по таймауту mysql_close($dbConnect); // Обход массива подписчиков foreach ($subscribers as $subscriber) { // Если количество отправленных писем меньше максимального количества отправляемых писем за раз // И подписчику еще не отправлялось письмо if ($countMailSend < $maxMailSend && !in_array($subscriber['email'], $whoSent)) { // Установка временного интервала между отправками писем в 10 секунд sleep($timeout); // Определение значения по умолчанию сгенерированной строки, добавляемой к телу письма $generatorStr = ''; // Если параметр "Подключать словарь генерации случайного текста?" рассылки установлен в позицию "Да" if ($mail['generator'] == 1) { // Получение сгенерированной строки случайного текста $generator = generator(); // Если строка не сгенерирована if (!$generator) { // Переход к следующей итерации цикла continue; } // Добавляем сгенерированную строчку случайного текста $generatorStr = $generator; } /* --------- Генерация письма -------- */ // Тема письма $subject = $mail['subject']; // Формируем тело письма для отправки // Подставляем Имя пльзователя в тело в шаблон письма если есть маркер -{fio}- $body = str_replace('-{fio}-', $subscriber['fio'], $mail['textemail']); // Подставляем Email пльзователя в тело в шаблон письма если есть маркер -{fio}- $body = str_replace('-{email}-', $subscriber['email'], $body); // Добавление сгенерированной строки к телу письма $body .= $generatorStr; // Формируем заголовок письма $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=utf-8\r\n"; $headers .= "From: " . $mail['myemail'] . "\r\n"; $headers .= "Reply-To: " . $mail['myemail'] . "\r\n"; /* --------- Отправка письма -------- */ // Отправка письма адресату $sendingMail = mail($subscriber['email'], $subject, $body, $headers); /* --------- Проверка результата операции отправки -------- */ // Если письмо успешно отправлено if ($sendingMail) { // Добавляем E-mail адрес подписчика в массив адресатов, кому уже отправлены письма $whoSent[] = $subscriber['email']; // Формируем запрос на обновление списка отправленных у подписчика $updateSubscriberInfo[] = "(" . $subscriber['id'] . ", '" . addslashes($subscriber['downloadedDocs'] . "\r\n" . $mail['id'] . ". " . $mail['subject'] . " (" . date('H:i:s d.m.y') . ")") . "')"; $log[] = 'Письмо c id=' . $mail['id'] . ' успешно отправлено адресату ' . $subscriber['email']; } else { // Добавляем сообщение об ошибке в массив лога ошибок $log[] = 'Письмо c id=' . $mail['id'] . ' не отправлено на е-mail ' . $subscriber['email']; } // Удаление переменных unset($body, $subject, $header); // Увеличиваем общий счетчик отправленных писем на единицу $countMailSend++; } else { // Переход к следующей итерации цикла continue; } } // Формируем запрос в БД на обновление информации о рассылке $query = "UPDATE `" . $prefix . "subscribers_emails` SET `log`=" . ($mail['log'] + $countMailSend) . ", `whoSent`='" . implode(',', $whoSent) . "', `noteMail`='" . $mail['noteMail'] . "\r\n" . date('H:i:s d.m.Y') . ":Отправлено всего на " . count($whoSent) . " e-mail адресов' WHERE `id`=" . $mail['id']; } else { // Формируем запрос в БД на обновление информации о рассылке $query = "UPDATE `" . $prefix . "subscribers_emails` SET `log`=0, `published`=-1, `send_date`='" . date('Y-m-d H:i:s') . "', `whoSent`='" . implode(',', $whoSent) . "', `noteMail`='" . $mail['noteMail'] . "\r\n" . date('H:i:s d.m.Y') . ":Отправлено всего на " . count($whoSent) . " e-mail адресов' WHERE `id`=" . $mail['id']; } // Восстанавливаем отключенное ранее соединение с БД dbConnect(); // Отправка запроса в БД и получение результата $resultToDb = mysql_query($query, $dbConnect); // Если последняя операция MySQL вернула сообщение об ошибке (не пустую строку) if (!$resultToDb) { // Добавленеи сообщения об ошибках операции в MySQL в массив лога ошибок $log[] = "MySQL query error: " . mysql_error() . ' (' . $query . ')'; } // Если массив запросов на обновление списка отправленных материалов подписчику не пустой if ($updateSubscriberInfo) { // Преобразовываем массив в строку $updateSubscriberInfo = implode(',', $updateSubscriberInfo); // Формируем строку запроса в БД на внесение изменений в данные подписчиков в БД $updateSubscriberInfo = 'INSERT INTO `' . $prefix . 'subscribers` (`id`, `downloadedDocs`) VALUES' . $updateSubscriberInfo . ' ON DUPLICATE KEY UPDATE `downloadedDocs` = VALUES(`downloadedDocs`)'; // Отправка запроса в БД и получение результата $res = mysql_query($updateSubscriberInfo, $dbConnect); if (!$res) { // Добавленеи сообщения об ошибках операции в MySQL в массив лога ошибок $log[] = "MySQL query error: " . mysql_error() . ' (' . $query . ')'; } } } else { // Добавленеи сообщение о достижении суточного лимита в массив лога ошибок $log[] = "Достигнут суточный лимит отправляемых писем. Рассылка будет возобновлена завтра!"; // Проверяем, существует ли файл "dayReport.txt" на сервере if (file_exists($localhostPath . 'dayReport.txt')) { // Удаление файла "dayReport.txt" unlink($localhostPath . 'dayReport.txt'); } // Вызываем функцию создания файла отчета об общем количестве отправленных писем по текущей рассылке createFile('dayReport.txt', count($whoSent)); // Вызываем функцию создания файла createFile('gotLimit.txt', 'true'); } // Добавляем сообщение об окончании работы скрипта в массив лога $log[] = date('d.m.Y H:i:s') . ": Завершение работы скрипта!"; } else { // Добавляем сообщение об окончании работы скрипта в массив лога $log[] = date('d.m.Y H:i:s') . ": Рассылка не ведется! Нет активных почтовых рассылок!"; } // Удаление файла "stop" unlink($localhostPath . 'stop.txt'); // Устанавливаем значение переменной статуса завершения функции $status = true; } // Закрываем текущее соединение с БД mysql_close($dbConnect); // Записываем логи в файл writeToLog(); // Завершаем выполнение работы скрипта. Выходим из функции return $status; }
<?php define('ROOT_PATH', realpath(dirname(__FILE__) . '/../../') . '/'); require_once ROOT_PATH . 'lib/boot/bootstrap.php'; $method = $_SERVER['REQUEST_METHOD']; Debug::info($method); setParams(array('method' => $method)); if ($collection = getParam("admin")) { if (!strcmp($collection, "dbupdate")) { require_once ROOT_PATH . 'lib/core/dbupdate.php'; require_once ROOT_PATH . 'lib/core/dbchange.php'; $dbupdate = new Dbupdate(); $dbupdate->run(); } else { Debug::warning("Route: [admin] : No Element"); } } else { if ($collection = getParam("views")) { if (!strcmp($collection, "dbupdate")) { require_once ROOT_PATH . 'lib/core/dbupdate.php'; require_once ROOT_PATH . 'lib/core/dbchange.php'; $dbupdate = new Dbupdate(); $dbupdate->run(); } else { Debug::warning("Route: [views] : No Element"); } } else { if ($collection = getParam("assembla")) { if (!strcmp($collection, "query")) { require_once ROOT_PATH . 'lib/core/curl.php'; require_once ROOT_PATH . 'lib/rest/assembla.php';
$params = array(); function getParam($key, $default = false) { global $params; return isset($params[$key]) ? $params[$key] : $default; } function setParams($newParams) { if (is_array($newParams)) { global $params; $params = array_merge($params, $newParams); } else { Debug::error("No params."); } } setParams($_REQUEST); if (!file_exists(SETTINGS_FILE)) { echo "no settings"; Debug::error("No Settings File Found"); exit; } $environment = file_exists(IS_PRODUCTION) ? "production" : "development"; $iniSettings = parse_ini_file(SETTINGS_FILE, true); $configEnvironment = $iniSettings[$environment]; $configDefault = $iniSettings['default']; $config = array_merge($configDefault, $configEnvironment); function config($key, $default = false) { global $config; return isset($config[$key]) ? $config[$key] : $default; }