// если все ок, отправляем $preferences = array(); if ($post['f_files']) { $fn = getinfo('uploads_dir') . $post['f_files']; if (file_exists($fn)) { $preferences['attach'] = $fn; } } $list = explode("\n", $post['f_list']); foreach ($list as $email) { $res = true; // проверяем валидность email // если ок, то отправляем // если возврат false, всё рубим - проблема с почтой if (mso_valid_email($email)) { $res = mso_mail($email, $post['f_subject'], $post['f_message'], $post['f_from'], $preferences); if ($res) { echo '<div class="update">' . t('Отправлено: ') . $email . '</div>'; } else { echo '<div class="error">' . t('Ошибка отправки почты на сервере.') . '</div>'; break; } } else { echo '<div class="error">' . t('Неверный адрес: ') . $email . '</div>'; } } } } } ?> <h1><?php
$ins_data['guestbook_' . $key] = $post['f_fields_guestbook'][$key]; $text_email .= $key . ': ' . $post['f_fields_guestbook'][$key] . "\n"; } } // pr($ins_data); $res = $CI->db->insert('guestbook', $ins_data) ? '1' : '0'; if ($res) { echo '<div class="mso-message-ok">' . t('Ваш отзыв добавлен!'); if ($options['moderation']) { echo ' ' . t('Он будет опубликован после одобрения модератором.'); } echo '</div>'; $text_email = t("Новая запись в гостевой книге") . ": \n" . $text_email; $text_email .= "\n" . t("Редактировать") . ": " . getinfo('siteurl') . 'admin/guestbook/editone/' . $CI->db->insert_id() . "\n"; if ($options['email'] and mso_valid_email($options['email'])) { mso_mail($options['email'], t('Новая запись в гостевой книге'), $text_email); } } else { echo '<div class="mso-message-error">' . t('Ошибка добавления в базу данных...') . '</div>'; } mso_flush_cache(); // тут бы редирект, но мы просто убиваем сессию $CI->session->sess_destroy(); } } else { // тут форма, если не было post echo '<div class="mso-guestbook"><form method="post">' . mso_form_session('f_session_id'); foreach ($options['fields_arr'] as $key => $val) { echo '<p><label><span>' . t($val) . '</span>'; if ($key != 'text') { echo '<input name="f_fields_guestbook[' . $key . ']" type="text"></label></p>';
?> </h2> <?php echo $res; ?> <br><p class="res"><a href="<?php echo getinfo('siteurl'); ?> "><?php echo t('Переход к сайту', 'install'); ?> </a></p> <p class="res"><?php echo t('Не забудьте открыть файл «application/maxsite/mso_config.php» и измените', 'install'); ?> <em>$mso_install = true;</em></p> <?php // поскольку это инсталяция, то отправитель - тот же email @mso_mail($useremail, t('Новый сайт на MaxSite CMS', 'install'), $text, $useremail); } else { // if (isset($res)) echo '<h2 class="error">' . t('Ошибка установки', 'install') . '</h2> <p style="text-align: center;"><a href="' . getinfo('siteurl') . '">' . t('Вернитесь в начало', 'install') . '</a></p>'; } // if (isset($res)) } // конец третьего шага ?> </div><!-- div id="container" --> </body> </html>
function forms_content_callback($matches) { $text = $matches[1]; $text = str_replace("\r", "", $text); $text = str_replace(' ', ' ', $text); $text = str_replace("\t", ' ', $text); $text = str_replace('<br />', "<br>", $text); $text = str_replace('<br>', "\n", $text); $text = str_replace("\n\n", "\n", $text); $text = str_replace(' ', ' ', $text); $text = str_replace(' ', ' ', $text); $text = str_replace(' ', ' ', $text); $text = str_replace(' ', ' ', $text); $text = str_replace("\n ", "\n", $text); $text = str_replace("\n\n", "\n", $text); $text = trim($text); $out = ''; // убиваем исходный текст формы //$r = preg_match_all('!\[email=(.*?)\]|\[redirect=(.*?)\]\[subject=(.*?)\]|\[field\](.*?)\[\/field\]|\[ushka=(.*?)\]!is', $text, $all); // на какой email отправляем $r = preg_match_all('!\\[email=(.*?)\\]!is', $text, $all); if ($r) { $email = trim(implode(' ', $all[1])); } else { $email = mso_get_option('admin_email', 'general', '*****@*****.**'); } // тема письма $r = preg_match_all('!\\[subject=(.*?)\\]!is', $text, $all); if ($r) { $subject = trim(implode(' ', $all[1])); } else { $subject = tf('Обратная связь'); } // куда редиректить после отправки $r = preg_match_all('!\\[redirect=(.*?)\\]!is', $text, $all); if ($r) { $redirect = trim(implode(' ', $all[1])); } else { $redirect = ''; } // eirf к форме $r = preg_match_all('!\\[ushka=(.*?)\\]!is', $text, $all); if ($r) { $ushka = trim(implode(' ', $all[1])); } else { $ushka = ''; } // отправить копию на ваш email $r = preg_match_all('!\\[nocopy\\]!is', $text, $all); if ($r) { $forms_subscribe = false; } else { $forms_subscribe = true; } // кнопка Сброс формы $r = preg_match_all('!\\[noreset\\]!is', $text, $all); if ($r) { $reset = false; } else { $reset = true; } // pr($all); // поля формы $r = preg_match_all('!\\[field\\](.*?)\\[\\/field\\]!is', $text, $all); $f = array(); // массив для полей if ($r) { $fields = $all[1]; /* pr($fields); pr($email); pr($redirect); pr($subject); pr($ushka); */ if ($subject) { // поле тема письма делаем в виде обязательнного поля select. // формируем массив для формы $subject_f['require'] = 1; //$subject_f['type'] = 'select'; $subject_f['type'] = mb_strpos($subject, '#') === false ? 'text' : 'select'; // если это одиночное поле, но при этом текст сабжа начинается // с _ то ставим тип hidden if ($subject_f['type'] == 'text' and mb_strpos($subject, '_') === 0) { $subject = mb_substr($subject . ' ', 1, -1, 'UTF-8'); $subject_f['type'] = 'hidden'; } $subject_f['description'] = tf('Тема письма'); //$subject_f['tip'] = t('Выберите тему письма'); $subject_f['values'] = $subject; $subject_f['value'] = $subject; $subject_f['default'] = ''; // преобразования, чтобы сделать ключ для поля $f1['subject'] = $subject_f; // у поля тема будет ключ subject foreach ($f as $key => $val) { $f1[$key] = $val; } $f = $f1; } $i = 0; foreach ($fields as $val) { $val = trim($val); if (!$val) { continue; } $val = str_replace(' = ', '=', $val); $val = str_replace('= ', '=', $val); $val = str_replace(' =', '=', $val); $val = explode("\n", $val); // разделим на строки $ar_val = array(); foreach ($val as $pole) { $pole = preg_replace('!=!', '_VAL_', $pole, 1); $ar_val = explode('_VAL_', $pole); // строки разделены = type = select if (isset($ar_val[0]) and isset($ar_val[1])) { $f[$i][$ar_val[0]] = $ar_val[1]; } } $i++; } if (!$f) { return ''; } // нет полей - выходим // теперь по-идее у нас есть вся необходимая информация по полям и по форме // смотрим есть ли POST. Если есть, то проверяем введенные поля и если они корректные, // то выполняем отправку почты, выводим сообщение и редиректимся // если POST нет, то выводим обычную форму // pr($f); if ($_POST) { $_POST = mso_clean_post(array('forms_antispam1' => 'integer', 'forms_antispam2' => 'integer', 'forms_antispam' => 'integer', 'forms_name' => 'base', 'forms_email' => 'email', 'forms_session' => 'base')); } if ($post = mso_check_post(array('forms_session', 'forms_antispam1', 'forms_antispam2', 'forms_antispam', 'forms_name', 'forms_email', 'forms_submit'))) { mso_checkreferer(); $out .= '<div class="forms-post">'; // верный email? if (!($ok = mso_valid_email($post['forms_email']))) { $out .= '<div class="message error small">' . tf('Неверный email!') . '</div>'; } // антиспам if ($ok) { $antispam1s = (int) $post['forms_antispam1']; $antispam2s = (int) $post['forms_antispam2']; $antispam3s = (int) $post['forms_antispam']; if ($antispam1s / 984 + $antispam2s / 765 != $antispam3s) { // неверный код $ok = false; $out .= '<div class="message error small">' . tf('Неверная сумма антиспама') . '</div>'; } } if ($ok) { foreach ($f as $key => $val) { if ($ok and isset($val['require']) and $val['require'] == 1) { if (!isset($post['forms_fields'][$key]) or !$post['forms_fields'][$key]) { $ok = false; $out .= '<div class="message error small">' . tf('Заполните все необходимые поля!') . '</div>'; } } if (!$ok) { break; } } } // всё ок if ($ok) { //pr($post); // pr($f); // pr($redirect); // pr($email); // pr($subject); // формируем письмо и отправляем его if (!mso_valid_email($email)) { $email = mso_get_option('admin_email', 'general', '*****@*****.**'); } // куда приходят письма $message = t('Имя: ') . $post['forms_name'] . "\n"; $message .= t('Email: ') . $post['forms_email'] . "\n"; foreach ($post['forms_fields'] as $key => $val) { //pr($key); if ($key === 'subject' and $val) { $subject = $val; //pr($subject); continue; } $message .= $f[$key]['description'] . ': ' . $val . "\n\n"; } if ($_SERVER['REMOTE_ADDR'] and $_SERVER['HTTP_REFERER'] and $_SERVER['HTTP_USER_AGENT']) { $message .= "\n" . tf('IP-адрес: ') . $_SERVER['REMOTE_ADDR'] . "\n"; $message .= tf('Отправлено со страницы: ') . $_SERVER['HTTP_REFERER'] . "\n"; $message .= tf('Браузер: ') . $_SERVER['HTTP_USER_AGENT'] . "\n"; } // pr($message); $form_hide = mso_mail($email, $subject, $message, $post['forms_email']); if ($forms_subscribe and isset($post['forms_subscribe'])) { mso_mail($post['forms_email'], tf('Вами отправлено сообщение:') . ' ' . $subject, $message); } $out .= '<div class="message ok small">' . tf('Ваше сообщение отправлено!') . '</div><p>' . str_replace("\n", '<br>', htmlspecialchars($subject . "\n" . $message)) . '</p>'; if ($redirect) { mso_redirect($redirect, true); } } else { $out .= forms_show_form($f, $ushka, $forms_subscribe, $reset, $subject); } $out .= '</div>'; $out .= mso_load_jquery('jquery.scrollto.js'); $out .= '<script>$(document).ready(function(){$.scrollTo("div.forms-post", 500);})</script>'; } else { $out .= forms_show_form($f, $ushka, $forms_subscribe, $reset, $subject); } } return $out; }
function mso_email_message_new_comment_subscribe($data) { /* Array ( [comments_page_id] => 153 - id страницы [comments_content] => sdafsadfsdaf - текст комментария [comments_approved] => - если 0, то отправки нет [page_title] => тест - заголовок страницы [id] => 607 - id комментария -- [comments_comusers_id] => 1 - номер комюзера - пока не используется -- [comments_date] => 2009-12-10 20:45:39 - дата - пока не используется -- [comments_author_ip] => 127.0.0.1 - ip - пока не используется ) */ # Опция не рассылать подписку. if (!mso_get_option('allow_comments_subscribe', 'general', 1)) { return; } // комментарий не одобрен, не отсылаем if ($data['comments_approved'] == 0) { return; } // разослать нужно всем комюзерам у которых стоит получение уведомления о новом комментарии $CI =& get_instance(); $comusers_all = mso_get_comusers_all(); // все комюзеры $from = mso_get_option('admin_email_server', 'general', ''); $subject = '[' . getinfo('name_site') . '] ' . tf('Новый комментарий к') . ' "' . $data['page_title'] . '"'; $message = tf('Новый комментарий к') . ' "' . $data['page_title'] . '"' . NR . NR; $message .= tf('Текст:') . NR . mso_xss_clean($data['comments_content']); $message .= NR . NR . tf('Перейти к комментарию на сайте:') . NR . mso_get_permalink_page($data['comments_page_id']) . '#comment-' . $data['id'] . NR; foreach ($comusers_all as $comuser) { // отправлять на все комментарии сайта $subscribe_other_comments = (isset($comuser['meta']['subscribe_other_comments']) and $comuser['meta']['subscribe_other_comments']) ? true : false; // только на свой $subscribe_my_comments = (isset($comuser['meta']['subscribe_my_comments']) and $comuser['meta']['subscribe_my_comments']) ? true : false; if ($subscribe_other_comments or $subscribe_my_comments and isset($comuser['comments_pages_id'][$data['comments_page_id']])) { // можно отправлять if (mso_valid_email($comuser['comusers_email'])) { $data = array_merge($data, array('subscription' => true)); //А здесь для smtp_mail важно знать, чтобы запретить сохранять мыло в файл. $res = mso_mail($comuser['comusers_email'], $subject, $message, $from, $data); if (!$res) { break; } // ошибка отправки почты - рубим цикл } } } }
function forms_content_post($options, $files, $fields, $format) { $result['show_error'] = array(); // каждый элемент сообщение об ошибке $result['show_form'] = false; $result['show_ok'] = false; $result['fields'] = array(); // массив полей в случае ошибок $out = ''; // принимаем post if ($post = mso_check_post(array('forms_session', 'forms_fields'))) { mso_checkreferer(); $subject_key = false; // если у поля отмечен subject, то ставим номер поля $from_key = false; // если у поля отмечен from, то ставим номер поля // добавляем в массив $field полученные значения и сразу их чистим через mso_clean_str() foreach ($fields as $key => $field) { if (isset($fields[$key]['post_value'])) { unset($fields[$key]['post_value']); } $field = array_map('trim', $field); if (isset($post['forms_fields'][$key])) { $p_v = mso_clean_str($post['forms_fields'][$key], $field['clean']); $fields[$key]['post_value'] = $p_v; // обязательное поле и не получены данные (браузер должен был это сам отсеить) if ($field['require'] and !$p_v) { $result['show_error'][] = tf('Неверно заполнено поле: ') . $field['description']; } } if ($field['subject']) { $subject_key = $key; } if ($field['from']) { $from_key = $key; } } // если есть ошибки то выходим if ($result['show_error']) { $result['show_form'] = true; $result['fields'] = $fields; return $result; } // если были ошибки, то уже вышли из функции $prefs = ''; // дополнительные опции для mso_mail // если есть вложения if ($file_attaches = forms_files_post($files)) { // формируем вложения к письму $prefs['attach'] = $file_attaches; } // формируем само письмо // куда приходят письма $email = $options['email']; if (!mso_valid_email($email)) { $email = mso_get_option('admin_email', 'general', '*****@*****.**'); } // тема письма может быть в опциях $subject = $options['subject']; if (!$subject) { // нет, значит ищем в полях $subject = $fields[$subject_key]['post_value']; } // тема письма может быть в опциях $from = $options['from']; if (!$from) { // нет, значит ищем в полях $from = $fields[$from_key]['post_value']; } // pr($fields); $message = ''; foreach ($fields as $field) { $description = $field['description']; $post_value = $field['post_value']; $m = $format['mail_field']; $m = str_replace('[description]', $description, $m); $m = str_replace('[post_value]', $post_value, $m); $m = str_replace('[NR]', NR, $m); $message .= $m; } // добавляем служебную информацию $message .= tf('IP: ') . $_SERVER['REMOTE_ADDR'] . NR; $message .= tf('Браузер: ') . $_SERVER['HTTP_USER_AGENT'] . NR; mso_hook('forms_send', $post); // pr($email); // pr($subject); // pr($from); // pr($message); // pr($prefs); // тут отправка почты mso_mail($email, $subject, $message, $from, $prefs); // удаляем временные файлы вложений if ($files) { mso_flush_cache(false, 'forms_attaches/'); } $result['show_ok'] = true; } else { $result['show_error'][] = tf('Ошибка сессии'); } return $result; }