function theme_switch_init($args = array()) { global $MSO; // если есть get ?theme=шаблон , то выставляем новую куку по этому значению // идея nicothin (Николай Громов) - http://forum.max-3000.com/viewtopic.php?p=9943#p9943 $get = mso_parse_url_get(mso_url_get()); $get = (isset($get['theme']) and $get['theme']) ? mso_xss_clean($get['theme']) : false; // проверяем есть ли post if ($post = mso_check_post(array('f_session_id', 'f_theme_switch_submit', 'theme_switch_radio')) or $get) { if (!$get) { mso_checkreferer(); $dir = $post['theme_switch_radio'][0]; // каталог шаблона } else { $dir = $get; } // если он есть - проверяем, то пишем куку и редиректимся if (file_exists(getinfo('templates_dir') . $dir . '/index.php')) { $opt = mso_get_option('theme_switch', 'plugins', array()); if (isset($opt['templates'][$dir])) { // 30 дней = 2592000 секунд 60 * 60 * 24 * 30 mso_add_to_cookie('theme_switch', $dir, time() + 2592000, true); } } } // проверяем существование куки theme_switch if (isset($_COOKIE['theme_switch'])) { $dir = $_COOKIE['theme_switch']; // значение текущего кука if (file_exists(getinfo('templates_dir') . $dir . '/index.php')) { $opt = mso_get_option('theme_switch', 'plugins', array()); if (isset($opt['templates'][$dir])) { $MSO->config['template'] = $dir; $functions_file = $MSO->config['templates_dir'] . $dir . '/functions.php'; if (file_exists($functions_file)) { require_once $functions_file; } } else { @setcookie('theme_switch', '', time()); } // сбросили куку } else { @setcookie('theme_switch', '', time()); } // сбросили куку } return $args; }
function mso_check_post_ini() { $CI =& get_instance(); // проверяем входящие данные - поля всегда одни if ($post = mso_check_post(array('f_session_id', 'f_options', 'f_submit', 'f_ini'))) { # защита рефера mso_checkreferer(); $options = $post['f_options']; if (isset($post['f_all_checkbox'])) { $all_checkbox = $post['f_all_checkbox']; } else { $all_checkbox = array(); } // добавим к $options $all_checkbox если их нет // и сразу заменим on на 1 // pr($options); foreach ($all_checkbox as $key => $val) { if (!isset($options[$key])) { $options[$key] = '0'; } else { if (!is_array($options[$key])) { $options[$key] = '1'; } else { $options[$key] = array_map('trim', $options[$key]); } } } // pr($options); // pr($all_checkbox); foreach ($options as $key_type => $val) { // разделим имя опции на ключ и группу $key_type = explode('_m_s_o_', $key_type); $key = $key_type[0]; $type = $key_type[1]; // pr($key . ' ' . $val . ' ' . $type, 1); // добавляем опцию без mso_refresh_options(); mso_add_option($key, $val, $type, false); } mso_refresh_options(); mso_flush_cache(); // посколько у нас всегда true, то результат не анализируем return true; } return false; }
<?php if (!defined('BASEPATH')) { exit('No direct script access allowed'); } /** * MaxSite CMS * (c) http://max-3000.com/ */ $CI =& get_instance(); $options_key = 'mail_send'; if ($post = mso_check_post(array('f_session_id', 'f_subject', 'f_from', 'f_files', 'f_message', 'f_list'))) { mso_checkreferer(); $options = array(); $options['maillist'] = $post['f_list']; $options['subject'] = $post['f_subject']; $options['files'] = $post['f_files']; $options['message'] = $post['f_message']; $options['from'] = $post['f_from']; mso_add_option($options_key, $options, 'plugins'); // сохраним в опциях введенные данные if (isset($post['f_submit_send'])) { $error = ''; if (!$post['f_subject']) { $error .= 'Нужно указать тему письма. '; } if (!$post['f_message']) { $error .= 'Нужно указать текст письма. '; } if (!$post['f_list']) { $error .= 'Список рассылки пуст. ';
function mso_page_content($page_content = '', $use_password = true, $message = 'Данная запись защищена паролем.') { global $page; mso_hook('content_start'); # хук на начало блока if ($use_password and $page['page_password']) { $form = '<p><strong>' . tf($message) . '</strong></p>'; $form .= '<form action="' . getinfo('siteurl') . 'page/' . $page['page_slug'] . '" method="post">' . mso_form_session('f_session_id'); $form .= '<input type="hidden" name="f_page_id" value="' . $page['page_id'] . '">'; $form .= '<p>' . tf('Пароль:') . ' <input type="text" name="f_password" value=""> '; $form .= '<input type="submit" name="f_submit" value="ОК"></p>'; $form .= '</form>'; // возможно пароль уже был отправлен if ($post = mso_check_post(array('f_session_id', 'f_submit', 'f_page_id', 'f_password'))) { mso_checkreferer(); $f_page_id = (int) $post['f_page_id']; // номер записи $f_password = $post['f_password']; // пароль if ($f_page_id == $page['page_id'] and $f_password == $page['page_password']) { // верный пароль $page['page_password_ok'] = true; echo mso_hook('content_content', $page_content); } else { echo '<p style="color: red;">' . tf('<strong>Ошибочный пароль!</strong> Повторите ввод.') . '</p>' . $form; } } else { echo $form; } } else { echo mso_hook('content_content', $page_content); } }
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_comuser_lost($args = array()) { global $MSO; if (!isset($args['css_ok'])) { $args['css_ok'] = 'comment-ok'; } if (!isset($args['css_error'])) { $args['css_error'] = 'comment-error'; } // если нет опции password_recovery, значит восстанавливаем с учетом номера комюзера во втором сегмента адреса // если опция есть, значит восстанавливаем без учета id комюзера if (!isset($args['password_recovery'])) { $password_recovery = false; } else { $password_recovery = true; } # id комюзера, который в сессии - какой комюзер # если комюзер залогинен, то будет $id_session # если нет, то залогиненности нет if (isset($MSO->data['session']['comuser']) and $MSO->data['session']['comuser']) { $id_session = $MSO->data['session']['comuser']['comusers_id']; } else { $id_session = false; } if ($post = mso_check_post(array('f_session_id', 'f_submit', 'f_comusers_email'))) { # защита рефера mso_checkreferer(); # защита сессии - если не нужно закомментировать строчку! if ($MSO->data['session']['session_id'] != $post['f_session_id']) { mso_redirect(); } if (!$password_recovery) { // получаем номер юзера id из f_submit[] $id = (int) mso_array_get_key($post['f_submit']); if (!$id) { return '<div class="' . $args['css_error'] . '">' . tf('Ошибочный номер пользователя') . '!</div>'; } # проверяем id в сессии с сабмитом if ($id_session and $id != $id_session) { return '<div class="' . $args['css_error'] . '">' . tf('Ошибочный номер пользователя2') . '</div>'; } } $comusers_email = trim($post['f_comusers_email']); if (!$comusers_email) { return '<div class="' . $args['css_error'] . '">' . tf('Нужно указать email') . '</div>'; } if (!mso_valid_email($comusers_email)) { return '<div class="' . $args['css_error'] . '">' . tf('Ошибочный email') . '</div>'; } $CI =& get_instance(); // проверим есть ли вообще такой юзер $CI->db->select('comusers_id'); if (!$password_recovery) { $CI->db->where('comusers_id', $id); } // если явно указан id, то ищем по нему $CI->db->where('comusers_email', $comusers_email); $query = $CI->db->get('comusers'); if ($query->num_rows() == 0) { // нет такого комментатора return '<div class="' . $args['css_error'] . '">' . tf('Неверный email или номер пользователя') . '!</div>'; } if ($password_recovery) { // получим id этого комюзера $res = $query->result_array(); $id = $res[0]['comusers_id']; } $comusers_new_password = trim($post['f_comusers_password']); $comusers_activate_key = trim($post['f_comusers_activate_key']); if ($comusers_email and !$comusers_activate_key and !$comusers_new_password) { // проверим есть ли активация $CI->db->select('comusers_id, comusers_activate_key'); $CI->db->where('comusers_id', $id); $CI->db->where('comusers_activate_string=comusers_activate_key', '', false); $CI->db->where('comusers_email', $comusers_email); $CI->db->limit(1); $query = $CI->db->get('comusers'); if ($query->num_rows() > 0) { $comuser = $query->result_array(); // данные комюзера mso_email_message_new_comuser($id, array('comusers_email' => $comusers_email, 'comusers_activate_key' => $comuser[0]['comusers_activate_key'])); return '<div class="' . $args['css_ok'] . '">' . tf('Код активации отправлен на ваш email') . '!</div>'; } else { return '<div class="' . $args['css_error'] . '">' . tf('Данный email не зарегистрирован или не активирован') . '</div>'; } } elseif ($comusers_email and $comusers_new_password and !$comusers_activate_key) { return '<div class="' . $args['css_error'] . '">' . tf('Для установки нового пароля нужно заполнить все поля!') . '</div>'; } elseif ($comusers_email and !$comusers_new_password and $comusers_activate_key) { // указан email и код активации, но не указан новый пароль return '<div class="' . $args['css_error'] . '">' . tf('Для установки нового пароля нужно заполнить все поля!') . '</div>'; } // если указано поле активации и новый пароль, то сверяем код активации с базой + email + id и если все верно, // то обновляем пароль // если же поле активации не указано, то высылаем его на указанный email $CI->db->select('comusers_id'); $CI->db->where('comusers_id', $id); $CI->db->where('comusers_activate_key', $comusers_activate_key); $CI->db->where('comusers_activate_string', $comusers_activate_key); $CI->db->where('comusers_email', $comusers_email); $CI->db->limit(1); $query = $CI->db->get('comusers'); if ($query->num_rows() > 0) { $CI->db->where('comusers_id', $id); $CI->db->where('comusers_email', $comusers_email); $res = $CI->db->update('comusers', array('comusers_password' => mso_md5($comusers_new_password))) ? '1' : '0'; $CI->db->cache_delete_all(); if ($res) { // сразу логиним и редиректим на страницу комюзера $data = array('email' => $comusers_email, 'password' => $comusers_new_password, 'redirect' => getinfo('siteurl') . 'users/' . $id, 'allow_create_new_comuser' => false); mso_comuser_auth($data); exit; // return '<div class="' . $args['css_ok']. '">'. t('Новый пароль установлен!'). '</div>'; } else { return '<div class="' . $args['css_error'] . '">' . tf('Ошибка БД при смене пароля...') . '</div>'; } } else { return '<div class="' . $args['css_error'] . '">' . tf('Данные указаны неверно!') . '</div>'; } } }
function mso_admin_plugin_options($key, $type, $ar, $title = '', $info = '', $text_other = '', $show_goto_plugins = false) { if ($show_goto_plugins) { echo '<p><a href="' . getinfo('site_admin_url') . 'plugins" class="i plugins">' . t('Плагины') . '</a></p>'; } if ($title) { echo '<h1><a href="">' . $title . '</a></h1>'; } else { echo '<h1><a href="">' . t('Опции плагина') . '</a></h1>'; } if ($info) { echo '<p class="info">' . $info . '</p>'; } else { echo '<p class="info">' . t('Укажите необходимые опции плагина.') . '</p>'; } if ($text_other) { echo '<p>' . $text_other . '</p>'; } # тут получаем текущие опции $options = mso_get_option($key, $type, array()); // получаем опции # здесь смотрим post # в post должен быть $key . '-' . $type if ($post = mso_check_post(array('f_session_id', 'f_submit', $key . '-' . $type))) { # защита рефера mso_checkreferer(); # наши опции $in = $post[$key . '-' . $type]; if (isset($in['_mso_checkboxs'])) { $ch_names = array_keys($in['_mso_checkboxs']); // получили все чекбоксы $t = array(); // временный массив foreach ($ch_names as $val) { if (isset($in[$val])) { $t[$val] = '1'; } // если есть, значит отмечен } $t = array_merge($in['_mso_checkboxs'], $t); // объединим с чекбоксамии unset($in['_mso_checkboxs']); // удалим _mso_checkboxs $in = array_merge($in, $t); // объединим с $in // теперь в $in все чекбоксы } # перед проверкой удалим из $ar все типы info $ar1 = $ar; foreach ($ar1 as $m => $val) { if ($val['type'] == 'info') { unset($ar1[$m]); } } # проверяем их с входящим $ar - ключи должны совпадать # финт ушами: смотрим разность ключей массивов - красиво? # если будет разность, значит неверные входящие данные, все рубим if (array_diff(array_keys($ar1), array_keys($in))) { die('Error key. :-('); } $newoptions = array_merge($options, $in); // объединим if ($options != $newoptions) { mso_add_option($key, $newoptions, $type); // обновим $options = $newoptions; // сразу обновим переменную на новые опции mso_flush_cache(); // сбросим кэш } echo '<div class="update">' . t('Обновлено!') . '</div>'; } if ($ar) { # тут генерируем форму $form = ''; foreach ($ar as $m => $val) { if ($val['type'] == 'info') { if (isset($val['id'])) { $tag_id = ' id="' . $val['id'] . '"'; } else { $tag_id = ''; } if (isset($val['class'])) { $tag_class = ' ' . $val['class']; } else { $tag_class = ''; } $form .= '<div class="admin_plugin_options_info' . $tag_class . '"' . $tag_id . '>'; if (isset($val['title'])) { $form .= '<h3>' . $val['title'] . '</h3>'; } if (isset($val['text'])) { $form .= '<p>' . $val['text'] . '</p>'; } $form .= '</div>'; continue; } if (!isset($options[$m])) { $options[$m] = $val['default']; } $group_start = isset($val['group_start']) ? $val['group_start'] : ''; $group_end = isset($val['group_end']) ? $val['group_end'] : ''; /* // обрамление группы опций if (isset($val['group_start'])) { if ($val['group_start']) $group_start = '<div class="admin_plugin_options">'; else $group_start = ''; } else $group_start = '<div class="admin_plugin_options">'; if (isset($val['group_end'])) { if ($val['group_end']) $group_end = '</div>'; else $group_end = '<br>'; } else $group_end = '</div>'; */ if ($val['description']) { $val['description'] = '<span class="hint-options">' . $val['description'] . '</span>'; } if ($val['type'] == 'text') { if (isset($val['itype'])) { $itype = $val['itype']; } else { $itype = 'text'; } if ($itype == 'hidden') { $form .= $group_start . '<p><span>' . $val['name'] . '</span>' . '<input type="' . $itype . '" value="' . htmlspecialchars($options[$m]) . '" name="' . $key . '-' . $type . '[' . $m . ']' . '">' . $val['description'] . '</p>' . $group_end . NR; } else { $form .= $group_start . '<p><label><span>' . $val['name'] . '</span>' . '<input type="' . $itype . '" value="' . htmlspecialchars($options[$m]) . '" name="' . $key . '-' . $type . '[' . $m . ']' . '"></label>' . $val['description'] . '</p>' . $group_end . NR; } } elseif ($val['type'] == 'textarea') { if (isset($val['rows'])) { $rows = (int) $val['rows']; } else { $rows = 10; } $form .= $group_start . '<p><label><span>' . t($val['name']) . '</span>' . '<textarea rows="' . $rows . '" name="' . $key . '-' . $type . '[' . $m . ']' . '">' . htmlspecialchars($options[$m]) . '</textarea></label>' . $val['description'] . '</p>' . $group_end . NR; } elseif ($val['type'] == 'checkbox') { $ch_val = $options[$m]; if ($ch_val) { $checked = 'checked="checked"'; } else { $checked = ''; } $form .= $group_start . '<p><label><input class="checkbox" type="checkbox" value="' . $ch_val . '"' . ' name="' . $key . '-' . $type . '[' . $m . ']' . '" ' . $checked . '> <span>' . $val['name'] . '</span></label>' . $val['description'] . '</p>' . $group_end . NR; # поскольку не отмеченные чекбоксы не передаются в POST, сделаем массив чекбоксов в hidden $form .= '<input type="hidden" name="' . $key . '-' . $type . '[_mso_checkboxs][' . $m . ']" value="0">'; } elseif ($val['type'] == 'select') { $form .= $group_start . '<p><label><span>' . $val['name'] . '</span>' . '<select name="' . $key . '-' . $type . '[' . $m . ']' . '">'; // если есть values, то выводим - правила задания, как в ini-файлах if (isset($val['values'])) { $values = explode('#', $val['values']); foreach ($values as $v) { $v = trim($v); $v_t = $v; $ar = explode('||', $v); if (isset($ar[0])) { $v = trim($ar[0]); } if (isset($ar[1])) { $v_t = trim($ar[1]); } if (htmlspecialchars($options[$m]) == $v) { $checked = 'selected="selected"'; } else { $checked = ''; } $form .= NR . '<option value="' . $v . '" ' . $checked . '>' . $v_t . '</option>'; } } $form .= '</select></label>' . $val['description'] . '</p>' . $group_end . NR; } elseif ($val['type'] == 'radio') { $form .= $group_start . '<p><span>' . $val['name'] . '</span></p><p>'; if (!isset($val['delimer'])) { $delimer = '<br>'; } else { $delimer = stripslashes($val['delimer']); } // если есть values, то выводим - правила задания, как в ini-файлах if (isset($val['values'])) { $values = explode('#', $val['values']); foreach ($values as $v) { $v = trim($v); $v_t = $v; $ar = explode('||', $v); if (isset($ar[0])) { $v = trim($ar[0]); } if (isset($ar[1])) { $v_t = trim($ar[1]); } if (htmlspecialchars($options[$m]) == $v) { $checked = 'checked="checked"'; } else { $checked = ''; } $form .= NR . '<label><input type="radio" value="' . $v . '" ' . $checked . ' name="' . $key . '-' . $type . '[' . $m . ']' . '"> ' . $v_t . '</label>' . $delimer; } } $form .= $val['description'] . '</p><hr>' . $group_end . NR; } } # выводим форму echo NR . '<form method="post" class="mso_admin_plugin_options">' . mso_form_session('f_session_id'); echo $form; echo NR . '<button type="submit" name="f_submit" class="i save">' . t('Сохранить') . '</button>'; echo '</form>' . NR; } else { echo t('<p>Опции не определены.</p>') . NR; } }
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; }