/** * Преобразует строки объекта или массива в кодировку UTF-8 * @param $var * @return array|string * @since 1.3.5 */ function ObjectCp1251ToUtf8(&$var) { if (is_array($var)) { foreach ($var as &$v) { $v = ObjectCp1251ToUtf8($v); } } elseif (is_object($var)) { $vars = get_object_vars($var); foreach ($vars as $f => &$v) { $var->{$f} = ObjectCp1251ToUtf8($v); } } elseif (is_string($var)) { $var = Cp1251ToUtf8($var); } return $var; }
/** * Отправляет E-mail * @param $ToName * @param $ToEmail * @param $Subject * @param $Text * @param bool $Html * @param string $From * @param string $FromEmail */ function SendMail($ToName, $ToEmail, $Subject, $Text, $Html = false, $From = '', $FromEmail = '') { $mail = LmEmailExtended::Instance(); if ($From == '' && $FromEmail == '') { $mail->SetFrom(System::config('general/site_email'), Cp1251ToUtf8(System::config('general/site_name'))); } else { $mail->SetFrom($FromEmail, Cp1251ToUtf8($From)); } $mail->SetSubject(Cp1251ToUtf8($Subject)); if (!$Html) { $mail->AddTextPart(Cp1251ToUtf8($Text)); } else { $mail->AddHtmlPart(Cp1251ToUtf8($Text)); } $mail->AddTo($ToEmail, Cp1251ToUtf8($ToName)); if (!$mail->Send()) { ErrorHandler(USER_ERROR, 'Проблема при отправке E-mail "' . $Subject . '".', __FILE__); } }
public function ToString($EncodeQuery = true) { $url = ''; if ($this->Protocol != '') { $url .= $this->Protocol . '://'; } if ($this->User != '') { $url .= rawurlencode($this->User); if ($this->Password != '') { $url .= ':' . rawurlencode($this->Password); } $url .= '@'; } if ($this->Host != '') { $url .= $this->Host; } if ($this->Port != '') { $url .= ':' . $this->Port; } $url .= $this->Path . $this->Document; if (count($this) > 0) { $url .= '?'; foreach ($this as $key => $value) { if ($EncodeQuery) { $url .= $key . '=' . rawurlencode(Cp1251ToUtf8($value)) . '&'; } else { $url .= $key . '=' . $value . '&'; } } $url = rtrim($url, '&'); } if ($this->Anchor != '') { $url .= '#' . $this->Anchor; } return $url; }
function IndexFeedBackSend() { $err = array(); if (!isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['subject']) || !isset($_POST['department']) || !isset($_POST['message']) || !isset($_POST['feedback_form'])) { GO(Ufu('index.php')); } else { if ($_POST['name'] != '') { $name = SafeDB($_POST['name'], 250, str); } else { $err[] = 'Пожалуйста, укажите Ваше имя!'; } if ($_POST['email'] != '') { $email = SafeDB($_POST['email'], 50, str); } else { $err[] = 'Пожалуйста, укажите Ваш действительный адрес E-mail!'; } if ($_POST['subject'] != '') { $subject = SafeDB($_POST['subject'], 250, str, false, false, false); } else { $err[] = 'Пожалуйста, введите тему сообщения!'; } // Проверяем капчу if (!System::user()->isDef('captcha_keystring') || System::user()->Get('captcha_keystring') != $_POST['keystr']) { $err[] = 'Вы ошиблись при вводе кода с картинки.'; } if ($_POST['department'] != '') { $department = SafeEnv($_POST['department'], 11, int); System::database()->Select('feedback', "`active`='1' and `id`='{$department}'"); if (System::database()->NumRows() > 0) { $dep = System::database()->FetchRow(); $dep_email = SafeDB($dep['email'], 255, str); $department = SafeDB($dep['name'], 255, str); } else { $err[] = 'Департамент больше не существует или обратная связь с этим департаментом отключена.'; } } else { $err[] = 'Пожалуйста, выберите департамент!'; } if ($_POST['message'] != '') { $message = SafeDB($_POST['message'], 65535, str, false, false, false); } else { $err[] = 'Пожалуйста, введите сообщение!'; } } $size = $_FILES['attach']['size']; // / 1024; if ($_FILES['attach']['error'] == UPLOAD_ERR_OK && $size >= System::config('feedback/max_filesize')) { $err[] = 'Слишком большой размер файла.'; } if (count($err) == 0) { $mail = LmEmailExtended::Instance(); $mail->SetTo($dep_email, Cp1251ToUtf8($department)); $mail->SetFrom($email, Cp1251ToUtf8($name)); $mail->SetSubject(Cp1251ToUtf8($subject)); $text = Indent("\n\t\t\tЗдравствуйте!\n\n\t\t\tС помощью формы обратной связи на сайте \"" . System::config('general/site_name') . "\"\n\t\t\tвам было отправлено сообщение.\n\n\t\t\tДепартамент: {$department}\n\t\t\tИмя: {$name}\n\t\t\tE-mail: {$email}\n\t\t\tТема сообщения: {$subject}\n\t\t\tДата отправки: " . TimeRender(time(), true, false) . "\n\t\t\tСообщение: {$message}\n\t\t"); $mail->AddTextPart(Cp1251ToUtf8($text)); if ($_FILES['attach']['error'] == UPLOAD_ERR_OK) { $mail->AddAttachmentPart(file_get_contents($_FILES['attach']['tmp_name']), $_FILES['attach']['name']); } if ($mail->Send()) { System::site()->AddTextBox('Обратная связь', '<div style="text-align: center;">Ваше сообщение успешно отправлено!</div>'); } else { System::site()->AddTextBox('Обратная связь', '<div style="text-align: center;">При отправке вашего сообщения произошла ошибка, повторите попытку или обратитесь к администратору.</div>'); } } else { $text = 'Сообщение не отправлено:<br /><ul>'; foreach ($err as $error) { $text .= '<li>' . $error . '</li>'; } $text .= '</ul>'; System::site()->AddTextBox('Ошибка', $text); IndexFeedBackForm(); } }
/** * Безопасная функция для вывода ЧПУ ссылок. * @param $Url * @param string $Ufu * @param string|bool $NavLink * @param string $NavParam * @param int $MinOrder * @return string * @examples * Ufu('index.php?name=news&topic=5', 'news/{topic}/'); * Ufu('index.php?name=news&topic=5', 'news:show-topics'); */ function Ufu($Url, $Ufu = '', $NavLink = null, $NavParam = null, $MinOrder = 10000) { if (System::config('general/ufu')) { if ($Url == 'index.php') { return GetSiteUrl() . 'index.html'; } // Вытаскиваем параметры ссылки $p = strpos($Url, '?'); if ($p !== false) { $Url = substr($Url, $p + 1); } $p = strrpos($Url, '#'); if ($p !== false) { $anchor = substr($Url, $p); $Url = substr($Url, 0, $p); } else { $anchor = ''; } parse_str($Url, $params); // NavLink if (isset($NavLink) && !is_string($NavLink)) { if ($NavLink === true) { if (isset($NavParam)) { $NavLink = $NavParam; } else { $NavLink = 'page'; } } else { $NavLink = null; } } // Параметры для замены ключей в ufu шаблоне $replace = array(); foreach ($params as $key => $val) { $replace['{' . $key . '}'] = rawurlencode(Cp1251ToUtf8($val)); } // Получаем правило $rule = UfuGetRules($Ufu); if (!isset($rule)) { if (isset($NavLink)) { $params[$NavLink] = '1'; } $rule = UfuAddRewriteRule($Ufu, $params, $MinOrder); } // Парсим шаблон ссылки заменяя ключи return strtr($rule['ufu'], $replace) . $anchor; } else { if ($Url == 'index.php') { return GetSiteUrl() . $Url; } else { $Url = new Url($Url); return $Url->ToString(); } } }
function AdminMailSend() { $topic_id = SafeEnv($_POST['topic'], 11, int); $subject = SafeEnv($_POST['subject'], 255, str); $from = SafeEnv($_POST['from'], 255, str); $from_email = SafeEnv($_POST['from_email'], 255, str); $text = SafeEnv($_POST['text'], 0, str); $text_html = SafeEnv($_POST['html'], 0, str); if (isset($_POST['auto_br'])) { $auto_br = '1'; } else { $auto_br = '0'; } if (!isset($_GET['id'])) { System::admin()->AddCenterBox('Рассылка'); System::database()->Select('mail_topics', "`id`='{$topic_id}'"); $topic = System::database()->FetchRow(); $list = System::database()->Select('mail_list', "`topic_id`='{$topic_id}'"); // Сохраняем письмо $vals = Values('', $topic_id, $subject, time(), $from, $from_email, $text, $text_html, $auto_br, count($list)); System::database()->Insert('mail_history', $vals); Audit('Рассылки: Произведена рассылка писем по теме "' . $topic['title'] . '"'); // Отправка $mail = LmEmailExtended::Instance(); $mail->SetSubject(Cp1251ToUtf8($subject)); $mail->SetFrom($from_email, Cp1251ToUtf8($from)); if (trim($text) != '') { $mail->AddTextPart($text); } if (trim(strip_tags($text_html))) { $mail->AddHtmlPart(Cp1251ToUtf8($text_html)); } $result = true; foreach ($list as $row) { $mail->SetTo($row['email']); if (!$mail->Send()) { System::admin()->HighlightError('Ошибка ' . SafeDB($row['email'], 255, str) . ': письмо отправить не удалось.'); // todo нужно выводить ошибку почему письмо не отправилось $result = false; } } if ($result) { System::admin()->Highlight('Все письма успешно отправлены.'); } else { System::admin()->HighlightError('При рассылке произошли ошибки. Письмо сохранено в истории.'); } CalcMailCounter($topic_id, true); } else { $id = SafeEnv($_GET['id'], 11, int); $set = "topic_id='{$topic_id}',subject='{$subject}',from='{$from}',from_email='{$from_email}',plain_text='{$text}',text_html='{$text_html}',auto_br='{$auto_br}'"; System::database()->Update('mail_history', $set, "`id`='{$id}'"); GO(ADMIN_FILE . '?exe=mail&a=history&topic_id=' . $topic_id); } }
function IndexFormSendMail($email, $form_name, $time, $user, $ip, $data_rows) { if ($user != 0) { $user_info = GetUserInfo($user); $user = SafeDB($user_info['name'], 255, str) . ' ( id:' . SafeDB($user_info['id'], 11, int) . ' )'; $from = $user_info['name']; $from_email = $user_info['email']; } else { $user = '******'; $from = System::config('general/site_name'); $from_email = System::config('general/site_email'); } $subject = 'Веб форма "' . SafeDB($form_name, 255, str) . '"'; $mail = LmEmailExtended::Instance(); $mail->SetSubject(Cp1251ToUtf8($subject)); $mail->SetFrom($from_email, Cp1251ToUtf8($from)); $mail->AddTo($email, Cp1251ToUtf8('Администратор')); $post_text = ''; foreach ($data_rows as $row) { if ($row[2] == 'file') { $mail->AddAttachmentPart(file_get_contents($row[1]), $row[3]); } else { $post_text .= '<b>' . SafeDB($row[0], 255, str) . ':</b><br />' . SafeDB($row[1], 0, str) . '<br />'; } } $text = Indent(' <html> <head> <title>Форма</title> </head> <body> <table cellspacing="2" cellpadding="10" border="1"> <tr> <th>Дата: ' . TimeRender($time, true, false) . '</th> <th>Пользователь: ' . $user . '</th> <th>IP: ' . $ip . '</th> </tr> <tr> <td colspan="3" style="text-align: left;">' . $post_text . '</td> </tr> </table> </body> </html> '); $mail->AddHtmlPart(Cp1251ToUtf8($text)); if (!$mail->Send()) { ErrorHandler(USER_ERROR, 'Проблема при отправке E-mail "' . $subject . '".', __FILE__); } }