Файл: DESURE-dcms-f12de01ac63e/sys/plugins/classes/form.class.php
Строк: 214
<?php
/**
* Генератор форм
*/
class form extends ui
{
/**
* Создание формы
* @param string|url $url Путь (атрибут action в форме)
* @param boolean $post true-отправлять post`ом, false - get`ом
*/
public function __construct($url = '', $post = true)
{
parent::__construct();
$this->_tpl_file = 'input.form.tpl';
$this->_data['el'] = array();
$this->set_url($url);
$this->set_method($post ? 'post' : 'get');
}
/**
* URL для обновления формы
* @param string $url
*/
function refresh_url($url)
{
$this->_data['refresh_url'] = $url;
}
/**
* Вставка HTML блока
* @param string $html
* @param boolean $br
*/
function html($html, $br = false)
{
$this->_data['el'][] = array(
'type' => 'text',
'br' => (bool)$br,
'value' => $html
);
}
/**
* Вставка текстового блока, который будет обработан BBCODE
* @param string $bbcode
* @param boolean $br
*/
function bbcode($bbcode, $br = true)
{
$this->html(text::toOutput($bbcode), $br);
}
/**
* Чекбокс
* @param string $name аттрибут name
* @param string $title текст к чекбоксу
* @param boolean $checked значение, установлена ли галочка
* @param boolean $br перенос строки
* @param string $value аттрибут value
*/
function checkbox($name, $title, $checked = false, $br = true, $value = '1')
{
$this->_data['el'][] = array(
'type' => 'checkbox',
'br' => (bool)$br,
'info' => array(
'name' => text::toValue($name),
'checked' => (bool)$checked,
'value' => text::toValue($value),
'text' => text::toValue($title)
)
);
}
/**
* Поле "select"
* @param string $name
* @param string $title
* @param array $options
* @param boolean $br
*/
function select($name, $title, $options, $br = true)
{
$this->_data['el'][] = array(
'type' => 'select',
'title' => text::toValue($title),
'br' => (bool)$br,
'info' => array(
'name' => text::toValue($name),
'options' => (array)$options
)
);
}
/**
* Кнопка
* @param string $text Отображаемое название кнопки
* @param string $name аттрибут name
* @param boolean $br перенос
*/
function button($text, $name = '', $br = true)
{
$this->input($name, '', $text, 'submit', $br);
}
/**
* Поде для выбора файла
* @param string $name аттрибут name
* @param string $title Заголовок к полю выбора файла
* @param boolean $br перенос строки
*/
function file($name, $title, $br = true)
{
$this->input($name, $title, false, 'file', $br);
}
function fileMultiple($name, $title, $br = true){
$input = array();
$this->set_is_files();
$input['type'] = 'file';
$input['title'] = text::toOutput($title);
$input['br'] = (bool)$br;
$info = array();
$info['name'] = text::toValue($name);
$info['multiple'] = true;
$input['info'] = $info;
$this->_data['el'][] = $input;
return true;
}
/**
* Капча
* @param boolean $br перенос строки
*/
function captcha($br = true)
{
$this->_data['el'][] = array('type' => 'captcha', 'br' => $br, 'session' => captcha::gen());
}
/**
* Поле ввода пароля
* @param string $name аттрибут name
* @param string $title Заголовок к полю ввода
* @param string $value введенное значение в поле
* @param boolean $br перенос строки
* @param bool|int $size ширина поля ввода в символах
*/
function password($name, $title, $value = '', $br = true, $size = false)
{
$this->input($name, $title, $value, 'password', $br, $size);
}
/**
* Текстовое поле ввода
* @param string $name аттрибут name
* @param string $title Заголовок поля ввода
* @param string $value значение в поле ввода
* @param boolean $br перенос строки
* @param bool|int $size ширина поля ввода в символах
* @param boolean $disabled запретить изменение
*/
function text($name, $title, $value = '', $br = true, $size = false, $disabled = false)
{
$this->input($name, $title, $value, 'text', $br, $size, $disabled);
}
/**
* Скрытое поле формы
* @param string $name аттрибут name
* @param string $value значение
*/
function hidden($name, $value)
{
$this->input($name, '', $value, 'hidden', false);
}
/**
* Поле ввода для сообщения
* @param string $name аттрибут name
* @param string $title заголовок поля ввода
* @param string $value введенный текст
* @param bool $submit_ctrl_enter отправка формы по Ctrl + Enter
* @param boolean $br перенос
* @param boolean $disabled запретить изменение
*/
function textarea($name, $title, $value = '', $submit_ctrl_enter = false, $br = true, $disabled = false)
{
$this->_data['el'][] = array(
'type' => 'textarea',
'title' => text::toOutput($title),
'br' => (bool)$br,
'submit_ctrl_enter' => (bool)$submit_ctrl_enter,
'info' => array(
'name' => text::toValue($name),
'value' => $value, // фильтрация в шаблоне
'disabled' => (bool)$disabled
));
}
/**
* Добавление input`a
* @param string $name аттрибут name
* @param string $title заголовок
* @param string $value значение по-умолчанию
* @param string $type тип (аттрибут type)
* @param boolean $br вставка переноса строки после input`a
* @param bool|int $size ширина поля ввода в символах
* @param boolean $disabled блокировать изменения
* @param bool|int $maxlength максимальная вместимость в символах
* @return boolean
*/
function input($name, $title, $value = '', $type = 'text', $br = true, $size = false, $disabled = false, $maxlength = false)
{
if (!in_array($type, array('text', 'input_text', 'password', 'hidden', 'textarea', 'submit', 'file')))
return false;
$input = array();
if ($type == 'file')
$this->set_is_files();
if ($type == 'text')
$type = 'input_text'; // так уж изначально было задумано. Избавляться будем постепенно
$input['type'] = $type;
$input['title'] = text::toOutput($title);
$input['br'] = (bool)$br;
$info = array();
$info['name'] = text::toValue($name);
$info['value'] = $value;
$info['disabled'] = (bool)$disabled;
if ($size)
$info['size'] = (int)$size;
if ($maxlength)
$info['maxlength'] = (int)$maxlength;
$input['info'] = $info;
$this->_data['el'][] = $input;
return true;
}
/**
* Установка метода передачи формы на сервер (post, get)
* @param string $method
*/
function set_method($method)
{
if (in_array($method, array('get', 'post')))
$this->_data['method'] = $method;
}
/**
* Установка URL (атрибут action формы)
* @param string|url $url
*/
function set_url($url)
{
$this->_data['action'] = (string)$url;
}
/**
* Будут передаваться файлы
*/
function set_is_files()
{
$this->_data['method'] = 'post';
$this->_data['files'] = true;
$this->_data['limit_files'] = ini_get('max_file_uploads');
$upload_max_filesize = misc::returnBytes(ini_get('upload_max_filesize'));
$post_max_size = misc::returnBytes(ini_get('post_max_size'));
$memory_limit = misc::returnBytes(ini_get('memory_limit'));
if ($memory_limit > 0) {
$limit_size = min($upload_max_filesize, $post_max_size, $memory_limit);
} else { // локально может отсутствовать лимит по памяти
$limit_size = min($upload_max_filesize, $post_max_size);
}
$this->_data['limit_size'] = $limit_size;
}
}