function AdminConfigAdd() { global $cl_plugins, $cs_plugins; if (isset($_GET['id'])) { // Редактирование $id = SafeEnv($_GET['id'], 11, int); System::database()->Select(AdminConfigConfigTable(), "`id`='{$id}'"); $ret = System::database()->FetchRow(); $group = SafeDB($ret['group_id'], 11, int); $name = SafeDB($ret['name'], 255, str); $hname = SafeDB($ret['hname'], 255, str); $description = SafeDB($ret['description'], 255, str); $value = SafeDB($ret['value'], 0, str, false); $control = explode(':', $ret['kind']); $control[0] = trim(strtolower($control[0])); $control = FormsParseParams($control); $values = SafeDB($ret['values'], 0, str); $vals = explode(':', $values); if (count($vals) == 2 && FormsConfigCheck2Func($vals[0], $vals[1])) { $valuesfunc = trim($vals[1]); $values = ''; } else { $valuesfunc = ''; } $savefunc = SafeDB($ret['savefunc'], 250, str); $type = SafeDB($ret['type'], 60, str); if ($type != '') { $type = explode(',', $type); settype($type[0], int); //maxlength settype($type[1], str); //type if ($type[2] == 'false') { $type[2] = false; } else { $type[2] = true; } } else { $type = array(255, str, false); } $visible = SafeDB($ret['visible'], 1, int); $autoload = SafeDB($ret['autoload'], 1, int); } else { // Добавление $group = 0; if (isset($_GET['group'])) { $group = SafeEnv($_GET['group'], 11, int); } $name = ''; $hname = ''; $description = ''; $value = ''; $control = array('cols' => 1, 'style' => '', 'control' => '', 'width' => '', 'height' => ''); $values = ''; $valuesfunc = ''; $savefunc = ''; $type = array(255, str, false); $visible = 1; $autoload = 1; } // Элемент управления $controls_array = array('edit', 'password', 'text', 'combo', 'list', 'check', 'radio'); $controls_array2 = array('Текстовое поле', 'Пароль', 'Область редактирования', 'Раскрывающийся список', 'Список (мультивыделение)', 'Флажки', 'Радиокнопки'); $controls = array(); foreach ($controls_array as $c => $contol_name) { System::site()->DataAdd($controls, $contol_name, $controls_array2[$c], $contol_name == $control['control']); } // Количество колонок $collsd = array(); for ($i = 1; $i < 11; $i++) { System::site()->DataAdd($collsd, $i, $i, $i == $control['cols']); } // Функция заполнения значений $getfuncdata = array(); System::site()->DataAdd($getfuncdata, '', ''); foreach ($cl_plugins as $pl) { System::site()->DataAdd($getfuncdata, $pl[0], $pl[0], $pl[0] == $valuesfunc); } // Функция обработки $savefuncdata = array(); System::site()->DataAdd($savefuncdata, '', ''); foreach ($cs_plugins as $pl) { System::site()->DataAdd($savefuncdata, $pl[0], $pl[0], $pl[0] == $savefunc); } // Тип данных $types_array = array('int', 'float', 'string', 'bool'); $types_array2 = array('Целочисленный', 'Вещественный', 'Текстовый', 'Логический'); $datatypes = array(); foreach ($types_array as $c => $type_name) { System::site()->DataAdd($datatypes, $type_name, $types_array2[$c], $type_name == $type[1]); } AddCenterBox('Добавить настройку'); FormRow('Группа', System::site()->Select('group', AdminConfigGetGroupsFormData($group), false, 'class="autofocus"')); FormRow('Имя', System::site()->Edit('name', $name, false, 'style="width:400px;" maxlength="255"')); FormRow('Заголовок', System::site()->Edit('hname', $hname, false, 'style="width:400px;" maxlength="255"')); FormRow('Описание', System::site()->Edit('description', $description, false, 'style="width:400px;" maxlength="255"')); FormRow('Значение', System::site()->TextArea('value', $value, 'style="width:400px;height:200px;"')); FormRow('Элемент управления<br /><small>Укажите единицу измерения<br />после ширины и высоты</small>', System::site()->Select('control', $controls) . '<table cellspacing="3" cellpadding="0" border="0">' . '<tr><td style="border:none">Ширина:</td><td style="border:none">' . System::site()->Edit('cwidth', $control['width'], false, 'style="width:200px;"') . '</td></tr>' . '<tr><td style="border:none">Высота:</td><td style="border:none">' . System::site()->Edit('cheight', $control['height'], false, 'style="width:200px;"') . '</td></tr>' . '<tr><td style="border:none">Колонок:</td><td style="border:none">' . System::site()->Select('ccols', $collsd) . '</td></tr>' . '</table>'); FormRow('Возможные значения<br /><small>Например:<br />name:имя, name:имя, ...<br />Только для элементов выбора.</small>', System::site()->TextArea('values', $values, 'style="width:400px;height:100px;"')); FormRow('Функция заполнения значений', System::site()->Select('valuesfunc', $getfuncdata)); FormRow('Функция обработчик', System::site()->Select('savefunc', $savefuncdata)); FormRow('Тип данных', System::site()->Select('datatype', $datatypes)); FormRow('Длина поля<br /><small>0 - не ограничено</small>', System::site()->Edit('maxlength', $type[0], false, 'style="width:200px;" maxlength="11"')); FormRow('Вырезать html-теги и<br />заменять спецсимволы<br />html-эквивалентами', System::site()->Check('striptags', '1', $type[2])); FormRow('Видимая', System::site()->Check('visible', '1', $visible)); FormRow('Автозагрузка', System::site()->Check('autoload', '1', $autoload)); $back = ''; if (isset($_REQUEST['back'])) { $back = '&back=' . SafeDB($_REQUEST['back'], 255, str); } AddForm(System::site()->FormOpen(ADMIN_FILE . '?exe=config_admin&a=save' . (AdminConfigPlugins() ? '&plugins=1' : '') . (isset($_GET['id']) ? '&id=' . $id : '') . $back), System::site()->Button('Отмена', 'onclick="history.go(-1)"') . System::site()->Submit(isset($_GET['id']) ? 'Сохранить' : 'Добавить')); }
function AdminFormsFieldEditor($action) { global $cl_plugins, $cs_plugins; if (!isset($_GET['id'])) { GO(ADMIN_FILE . '?exe=forms'); } $id = SafeEnv($_GET['id'], 11, int); $collsd = array(); for ($i = 1; $i < 11; $i++) { System::site()->DataAdd($collsd, $i, $i); } $getfuncdata = array(); System::site()->DataAdd($getfuncdata, '', ''); foreach ($cl_plugins as $pl) { System::site()->DataAdd($getfuncdata, $pl[0], $pl[0]); } $savefuncdata = array(); System::site()->DataAdd($savefuncdata, '', ''); foreach ($cs_plugins as $pl) { System::site()->DataAdd($savefuncdata, $pl[0], $pl[0]); } $controls = array(); System::site()->DataAdd($controls, 'edit', 'Текстовое поле'); System::site()->DataAdd($controls, 'text', 'Область редактирования'); System::site()->DataAdd($controls, 'combo', 'Раскрывающийся список'); System::site()->DataAdd($controls, 'list', 'Список (мультивыделение)'); System::site()->DataAdd($controls, 'check', 'Флажки'); System::site()->DataAdd($controls, 'radio', 'Радиокнопки'); System::site()->DataAdd($controls, 'file', 'Файл'); $datatypes = array(); System::site()->DataAdd($datatypes, 'int', 'Целочисленный'); System::site()->DataAdd($datatypes, 'float', 'Вещественный'); System::site()->DataAdd($datatypes, 'string', 'Текстовый'); System::site()->DataAdd($datatypes, 'bool', 'Логический'); System::site()->DataAdd($datatypes, 'file', 'Файл'); $required = false; if ($action == 'add') { $hname = ''; $name = ''; $width = ''; $height = ''; $length = '0'; $values = ''; $cp = 'Добавить'; $edit = false; System::admin()->FormTitleRow('Добавить поле'); } else { $index = SafeEnv($_GET['index'], 11, int); System::database()->Select('forms', "`id`='{$id}'"); $form = System::database()->FetchRow(); $fields = unserialize($form['form_data']); $field = $fields[$index]; $hname = $field['hname']; $name = $field['name']; $stype = FormsParseParams(explode(':', $field['kind'])); $width = $stype['width']; $height = $stype['height']; $cols = $stype['cols']; $required = $stype['required']; $controls['selected'] = $stype['control']; $collsd['selected'] = $cols; $vv = explode(':', $field['values']); if (count($vv) == 2 && FormsConfigCheck2Func($vv[0], $vv[1])) { $getfuncdata['selected'] = $vv[1]; $values = ''; } else { $values = $field['values']; } if (function_exists($field['savefunc'])) { $savefuncdata['selected'] = $field['savefunc']; } $type = explode(',', $field['type']); $datatypes['selected'] = $type[1]; $length = $type[0]; $cp = 'Сохранить изменения'; $edit = true; } FormRow('Название', System::site()->Edit('hname', $hname, false, 'maxlength="250" style="width:400px;" class="autofocus"')); FormRow('Имя HTML (уникальное для всех полей)', System::site()->Edit('name', $name, false, 'maxlength="250" style="width:400px;"')); FormRow('Элемент управления (укажите единицу измерения после ширины и высоты: %, px)', '<table>' . '<tr><td colspan="2" style="border:none; padding: 2px;">' . System::site()->Select('control', $controls) . '<td></tr>' . '<tr><td style="border:none; padding: 2px;">Ширина:</td>' . '<td style="border:none; padding: 2px;">' . System::site()->Edit('cwidth', $width, false, 'style="width:100px;"') . '</td></tr>' . '<tr><td style="border:none; padding: 2px;">Высота:</td>' . '<td style="border:none; padding: 2px;">' . System::site()->Edit('cheight', $height, false, 'style="width:100px;"') . '</td></tr>' . '<tr><td style="border:none; padding: 2px;">Колонок:</td>' . '<td style="border:none; padding: 2px;">' . System::site()->Select('ccols', $collsd) . '</td></tr>' . '</table>'); FormTextRow('Возможные значения (Например: name:имя,name:имя, .... Только для элементов выбора.)', System::site()->TextArea('values', $values, 'style="width:600px;height:100px;"')); FormRow('Функция заполнения значений', System::site()->Select('valuesfunc', $getfuncdata)); FormRow('Функция обработчик', System::site()->Select('savefunc', $savefuncdata)); FormRow('Тип данных', System::site()->Select('datatype', $datatypes)); FormRow('Длина поля (Размер файла Кб., 0 - неограниченно)', System::site()->Edit('maxlength', $length, false, 'style="width:60px;" maxlength="11"')); FormRow('Обязательное для заполнения', System::site()->Select('required', GetEnData($required, 'Да', 'Нет'))); AddForm(System::site()->FormOpen(ADMIN_FILE . '?exe=forms&a=addfield&id=' . $id . ($edit ? '&index=' . $index : '')), ($edit ? System::site()->Button('Отмена', 'onclick="history.go(-1);"') : '') . System::site()->Submit($cp)); }
function IndexFormSave($form) { // Проверяем капчу if (!System::user()->Auth || !System::user()->isAdmin() && System::config('forms/show_captcha')) { if (!isset($_POST['keystr']) || !System::user()->isDef('captcha_keystring') || System::user()->Get('captcha_keystring') != $_POST['keystr']) { $text = '<p align="center">Вы ошиблись при вводе кода с картинки. Форма не отправлена.</p>'; $text .= '<p align="center"><input type="button" value="Назад" onclick="history.back();"></p>'; System::site()->AddTextBox('', $text); return; } } $errors = array(); $controls = unserialize($form['form_data']); $post_data = array(); foreach ($controls as $control) { $error = ''; $name = $control['name']; $hname = $control['hname']; $kind = FormsParseParams($control['kind']); $savefunc = trim($control['savefunc']); $type = trim($control['type']); if ($type != '') { $type = explode(',', $type); } else { $type = array(255, str, false); } switch ($kind['control']) { case 'edit': if (FormsConfigCheck2Func('function', $savefunc, 'save')) { $value = CONF_SAVE_PREFIX . $savefunc(FormsCheckType($_POST[$name], $type)); } else { $value = FormsCheckType($_POST[$name], $type); } if ($kind['required'] && $value == '') { $errors[] = 'Обязательное поле "' . SafeDB($hname, 255, str) . '" не заполнено.'; } break; //case 'radio' : //case 'radio' : case 'combo': $vals = IndexFormGetValues($name, $control['values']); if (FormsConfigCheck2Func('function', $savefunc, 'save')) { $value = CONF_SAVE_PREFIX . $savefunc(FormsCheckType($_POST[$name], $type)); } else { $value = $vals[$_POST[$name]]; } if ($kind['required'] && $value == '') { $errors[] = 'Значение в поле "' . SafeDB($hname, 255, str) . '" не выбрано.'; } break; case 'text': if (FormsConfigCheck2Func('function', $savefunc, 'save')) { $value = CONF_SAVE_PREFIX . $savefunc(FormsCheckType($_POST[$name], $type)); } else { $value = FormsCheckType($_POST[$name], $type); } if ($kind['required'] && $value == '') { $errors[] = 'Обязательное поле "' . SafeDB($hname, 255, str) . '" не заполнено.'; } break; case 'check': case 'list': $vals = IndexFormGetValues($name, $control['values']); if (FormsConfigCheck2Func('function', $savefunc, 'save')) { $value = CONF_SAVE_PREFIX . $savefunc(FormsCheckType($_POST[$name], $type)); } else { if (isset($_POST[$name])) { $c = count($_POST[$name]); } else { $c = 0; } $value = ''; for ($k = 0; $k < $c; $k++) { $value .= ','; $value .= $vals[$_POST[$name][$k]]; } $value = substr($value, 1); } if ($kind['required'] && $value == '') { $errors[] = 'Значение в поле "' . SafeDB($hname, 255, str) . '" не выбрано.'; } break; case 'file': if (FormsConfigCheck2Func('function', $savefunc, 'save')) { $value = CONF_SAVE_PREFIX . $savefunc(FormsCheckType($_POST[$name], $type)); } else { $value = FormsCheckType($_FILES[$name], $type, $error, $filename); } if ($error != '') { $errors[] = $error; } elseif ($kind['required'] && $value == '') { $errors[] = 'Файл в поле "' . SafeDB($hname, 255, str) . '" не выбран.'; } break; default: if (FormsConfigCheck2Func('function', $savefunc, 'save')) { $value = CONF_SAVE_PREFIX . $savefunc(FormsCheckType($_POST[$name], $type)); } else { $value = FormsCheckType($_POST[$name], $type); } } if ($type[1] == 'file') { $post_data[] = array($hname, $value, $type[1], $filename); } else { $post_data[] = array($hname, $value, $type[1]); } } /* * Вывод ошибок. */ if (count($errors) > 0) { $text = '<p>Произошли ошибки при потправке формы:</p><ul>'; foreach ($errors as $error) { $text .= '<li>' . $error . '</li>'; } $text .= '</ul>'; $text .= '<p align="center"><input type="button" value="Назад" onclick="history.back();"></p>'; System::site()->AddTextBox('', $text); return; } $form_id = SafeEnv($form['id'], 11, int); if (System::user()->Auth) { $user_id = System::user()->Get('u_id'); } else { $user_id = 0; } $time = time(); $ip = getip(); if ($form['email'] != '') { IndexFormSendMail($form['email'], $form['hname'], $time, $user_id, $ip, $post_data); } $data = serialize($post_data); $data = SafeEnv($data, 0, str); System::database()->Insert('forms_data', "'','{$form_id}','{$user_id}','{$time}','{$data}','0','{$ip}'"); $new = $form['new_answ'] + 1; $cnt = $form['answ'] + 1; System::database()->Update('forms', "`answ`='{$cnt}',`new_answ`='{$new}'", "`id`='{$form_id}'"); if ($form['send_ok_msg'] != '') { $msg = SafeDB($form['send_ok_msg'], 0, str, false, false); } else { $msg = 'Ваша форма отправлена успешно.'; } System::site()->AddTextBox('', '<p align="center">' . $msg . '</p>'); }
function FormsGetControl($name, $value, $kind, $type, $values, $other = '') { //values = array(val1,val2,val3,...) //kind = (Edit,Password,Text,Check,Radio,List,Combo) $kind = explode(':', $kind); $control = ''; $kind[0] = trim(strtolower($kind[0])); if ($type != '') { $type = explode(',', $type); settype($type[0], int); //maxlength settype($type[1], str); //type settype($type[2], bool); //strip tags/special chars } else { $type = array(255, str, false); } $params = FormsParseParams($kind); switch ($kind[0]) { case 'edit': $otherParams = ($type[0] != 0 ? 'maxlength="' . $type[0] . '" ' : '') . $params['style'] . ' ' . ($params['required'] ? 'required ' : '') . $other; $control = System::site()->Edit($name, HtmlChars($value), false, $otherParams); break; case 'password': $otherParams = ($type[0] != 0 ? 'maxlength="' . $type[0] . '" ' : '') . $params['style'] . ' ' . ($params['required'] ? 'required ' : '') . $other; $control = System::site()->Edit($name, HtmlChars($value), true, $otherParams); break; case 'text': $control = System::site()->TextArea($name, HtmlChars($value), $params['style'] . ' ' . ($params['required'] ? 'required ' : '') . $other); break; case 'check': $vals = explode(':', $values); if (count($vals) == 2 && FormsConfigCheck2Func($vals[0], $vals[1])) { $func = CONF_GET_PREFIX . trim($vals[1]); $vals = $func($name); $usefunc = true; } else { $vals = explode(',', $values); $usefunc = false; } $value = explode(',', $value); $control = '<table cellspacing="0" cellpadding="0" align="center">'; $col = 0; $cols = $params['cols']; for ($i = 0; $i < count($vals); $i++) { if (!$usefunc) { $s = explode(':', $vals[$i]); } else { $s = $vals[$i]; } if ($col == 0) { $control .= '<tr>'; } $col++; $control .= '<td nowrap class="rightc">' . System::site()->Check($name . '[]', $s[0], in_array($s[0], $value)) . $s[1] . '</td>'; if ($col == $cols) { $control .= '</tr>'; $col = 0; } } if ($col < $cols) { $control .= '</tr>'; } $control .= '</table>'; break; case 'radio': $vals = explode(':', $values); if (count($vals) == 2 && FormsConfigCheck2Func($vals[0], $vals[1])) { $func = CONF_GET_PREFIX . trim($vals[1]); $vals = $func($name); $usefunc = true; } else { $vals = explode(',', $values); $usefunc = false; } $control = '<table cellspacing="0" cellpadding="0" align="center">'; $col = 0; $cols = $params['cols']; for ($i = 0; $i < count($vals); $i++) { if (!$usefunc) { $s = explode(':', $vals[$i]); } else { $s = $vals[$i]; } if ($col == 0) { $control .= '<tr>'; } $col++; $control .= '<td nowrap class="rightc">' . System::site()->Radio($name, $s[0], $value == $s[0]) . $s[1] . '</td>'; if ($col == $cols) { $control .= '</tr>'; $col = 0; } } if ($col < $cols) { $control .= '</tr>'; } $control .= '</table>'; break; case 'list': case 'combo': $vals = explode(':', $values); if (count($vals) == 2 && FormsConfigCheck2Func($vals[0], $vals[1])) { $func = CONF_GET_PREFIX . trim($vals[1]); $vals = $func($name); $usefunc = true; } else { $vals = explode(',', $values); $usefunc = false; } $cdata = array(); for ($i = 0; $i < count($vals); $i++) { if (!$usefunc) { $s = explode(':', $vals[$i]); } else { $s = $vals[$i]; } if (count($s) == 2) { System::site()->DataAdd($cdata, $s[0], $s[1], $value == $s[0]); } } $control = System::site()->Select($name . ($kind[0] == 'list' ? '[]' : ''), $cdata, $kind[0] == 'list', $params['style'] . ' ' . $other); break; case 'file': ////////////////////////////////////////////////////////////////// $control = System::site()->FFile($name, ($params['required'] ? 'required ' : '') . $other); break; default: $control = $value; } return $control; }