335 lines
No EOL
8.4 KiB
PHP
335 lines
No EOL
8.4 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Deprecated !!!!
|
|
*/
|
|
|
|
require_once 'core/adapter.php';
|
|
|
|
/**
|
|
* Íîâîå API äëÿ Ôîðì
|
|
* $form = new Form ();
|
|
* $form->render () -> html,
|
|
* $form->adjust ($scheme);
|
|
* $form->input ($name, $type, $label, );
|
|
* $form->set($name, $value);
|
|
* $form->get($name); -> value
|
|
* $form->parse ($request),
|
|
* $form->validate () -> boolean,
|
|
* $form->values () -> pair[key] = value
|
|
*/
|
|
|
|
/**
|
|
* Ýëåìåíò ôîðìû
|
|
* @package core
|
|
*/
|
|
class TField {
|
|
protected $_value; // Ôîðìàòèðîâàííîå çíà÷åíèå ïîëÿ
|
|
|
|
var $label; // Ìåòêà ïîëÿ
|
|
var $rule = array ();// Ïðàâèëà äëÿ ïðîâåðêè ïîëÿ
|
|
var $value; // Ôîðìàòèðîâàííîå Çíà÷åíèå ïîëÿ
|
|
// var $default; // Çíà÷åíèå ïî óìîë÷àíèþ
|
|
var $error = false; // â XRule Ïðàâèëà äëÿ ïðîâåðêè çíà÷åíèé
|
|
var $error_msg = "Ïîëå íå ìîæåò áûòü ïóñòûì";
|
|
var $type; // Êàæäîìó òèïó ýëåìåíòà ñîîòâåòñòâóåò ìàêðîñ TAL
|
|
|
|
public function __construct ($input) {
|
|
// $this->deafult = null;
|
|
$this->require = false;
|
|
// Èíèöèàëèçàöèÿ ñâîéñò îáüåòêà
|
|
foreach ($input as $key => $value) {
|
|
$this->$key = $value;
|
|
}
|
|
}
|
|
|
|
public function __toString () {
|
|
return $this->value;
|
|
}
|
|
|
|
public function isValid ($name) {
|
|
if ($this->require == true && empty($this->value)) {
|
|
$this->error = true;
|
|
return false;
|
|
}
|
|
$this->setValue ($this->value);
|
|
return true;
|
|
}
|
|
|
|
// Äîáàâèòü ìåòîäû getString, setString ??
|
|
|
|
function setValue ($value) {
|
|
$this->_value = $value;
|
|
$this->value = $value;
|
|
}
|
|
|
|
function getValue () {
|
|
return $this->_value;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Ïîëå ââîäà Input
|
|
* @package core
|
|
*/
|
|
class TInput extends TField {
|
|
public function __construct ($input) {
|
|
parent::__construct ($input);
|
|
$this->setValue ("");
|
|
}
|
|
}
|
|
|
|
// checkbox
|
|
class TCheckbox extends TField {
|
|
public $checked = false;
|
|
public function __construct ($input) {
|
|
parent::__construct ($input);
|
|
$this->setValue (1);
|
|
}
|
|
|
|
function setValue ($value) {
|
|
$this->_value = intval ($value);
|
|
$this->value = 1;
|
|
if ($this->_value == 1) $this->checked = true; else $this->checked = false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Âûáîð èç îäíîãî ýëåìåíòà
|
|
*/
|
|
class TSelect1 extends TField {
|
|
var $options = array ();
|
|
|
|
public function __construct ($input) {
|
|
parent::__construct ($input);
|
|
$this->setValue (0);
|
|
}
|
|
|
|
function setValue ($value) {
|
|
$this->_value = $value;
|
|
$this->value = $value;
|
|
foreach ($this->options as $key => $o) {
|
|
$this->options[$key]['selected'] = ($this->options[$key]['value'] == $this->_value);
|
|
}
|
|
}
|
|
}
|
|
|
|
class TSelectGroup extends TField {
|
|
var $groups = array ();
|
|
|
|
public function __construct ($input) {
|
|
parent::__construct ($input);
|
|
$this->setValue (0);
|
|
}
|
|
|
|
function setValue ($value) {
|
|
$this->_value = $value;
|
|
$this->value = $value;
|
|
foreach ($this->groups as $gkey => $o) {
|
|
foreach ($this->groups[$gkey]['options'] as $key => $v) {
|
|
$this->groups[$gkey]['options'][$key]['selected'] = ($this->groups[$gkey]['options'][$key]['value'] == $this->_value);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Ïîëå ñ äàòîé
|
|
* @package core
|
|
*/
|
|
class TDate extends TField {
|
|
var $error_msg = "Íåâåðíûé ôîðìàò äàòû";
|
|
var $separator = ".";
|
|
|
|
public function __construct ($input) {
|
|
parent::__construct ($input);
|
|
$this->setValue (time ());
|
|
}
|
|
|
|
function isValid ($name) {
|
|
$value = $this->value;
|
|
if ($tmp = explode(".", $value, 3)) {
|
|
if ($tmp[1] && $tmp[0] && $tmp[2]) {
|
|
if (checkdate ($tmp[1], $tmp[0], $tmp[2])) {
|
|
$this->setValue (mktime (0, 0, 0, $tmp[1], $tmp[0], $tmp[2]));
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
$this->error = true;
|
|
return false;
|
|
}
|
|
|
|
function setValue ($value) {
|
|
$this->_value = $value;
|
|
$this->value = date ("d.m.Y", $value);
|
|
}
|
|
}
|
|
|
|
class TTime extends TField {
|
|
var $error_msg = "Íåâåðíûé ôîðìàò âðåìåíè";
|
|
|
|
public function __construct ($input) {
|
|
parent::__construct ($input);
|
|
$this->setValue (mktime(0, 0, 0, 11, 30, 1999));
|
|
}
|
|
|
|
function isValid ($name) {
|
|
$value = $this->value;
|
|
if ($tmp = explode(":", $value, 2)) {
|
|
if ($this->checktime ($tmp[0], $tmp[1])) {
|
|
$this->setValue (mktime ($tmp[0], $tmp[1], 0, 0, 0, 0));
|
|
return true;
|
|
}
|
|
}
|
|
$this->error = true;
|
|
return false;
|
|
}
|
|
|
|
function checktime($hour, $minute) {
|
|
if ($hour > -1 && $hour < 24 && $minute > -1 && $minute < 60) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
function setValue ($value) {
|
|
$this->_value = $value;
|
|
$this->value = date ("H:i", $value);
|
|
}
|
|
}
|
|
|
|
|
|
/* *
|
|
* Òåêñòîâîå ïîëå
|
|
* @package core
|
|
*/
|
|
class TTextArea extends TField {
|
|
public function __construct ($input) {
|
|
parent::__construct ($input);
|
|
$this->setValue ("");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Ïîëå äëÿ ââîäà ïàðîëÿ
|
|
* @package core
|
|
*/
|
|
class TSecret extends TField {
|
|
public function __construct ($input) {
|
|
parent::__construct ($input);
|
|
$this->setValue ("");
|
|
}
|
|
}
|
|
|
|
class TUpload extends TField {
|
|
public $types = array ();
|
|
public function __construct ($input) {
|
|
parent::__construct ($input);
|
|
$this->setValue ("");
|
|
}
|
|
|
|
public function setValue ($value) {
|
|
$this->_value = basename ($value);
|
|
$this->value = $value;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Ôîðìà äëÿ ââîäà
|
|
* @package core
|
|
*/
|
|
class TForm {
|
|
var $field = array ();
|
|
var $action = "";
|
|
var $method = 'post';
|
|
var $request;
|
|
var $replace;
|
|
|
|
public function __construct ($request) {
|
|
$this->uid = get_form_uid ();
|
|
$this->constructor = array (
|
|
'input' => 'TInput',
|
|
'checkbox' => 'TCheckbox',
|
|
'date' => 'TDate',
|
|
'time' => 'TTime',
|
|
'textarea' => 'TTextArea',
|
|
'select' => 'TSelect',
|
|
'select1' => 'TSelect1',
|
|
'selgroup' => 'TSelectGroup',
|
|
'secret' => 'TSecret',
|
|
'upload' => 'TUpload'
|
|
);
|
|
$this->request = $request;
|
|
}
|
|
|
|
function get ($name) {
|
|
return $this->field [$name]->getValue ();
|
|
}
|
|
|
|
function addFieldObject ($name, $el) {
|
|
$this->field [$name] = $el;
|
|
}
|
|
|
|
/**
|
|
* Ìåòîä äîëæåí ïðîâåðÿòü çíà÷åíèÿ ïîëåé ôîðìû ïîëñëå çàïîëíåíèÿ
|
|
* Ïðîâåðêà ïðàâèëüíîñòè çàïîëíåíèÿ ôîðìû è óñòàíîâêà çíà÷åíèé
|
|
*/
|
|
function isValid () {
|
|
$haveErrors = false;
|
|
foreach ($this->field as $name => $el) { // ññûëêà
|
|
if ($this->field [$name] instanceof TUpload) {
|
|
// print_r ($_POST);
|
|
$filename = $this->request->getRawData ('files', $name);
|
|
if ((bool) $filename['name']) {
|
|
$this->field [$name]->value = $filename['name'];
|
|
} else {
|
|
$this->field [$name]->value = $this->request->getRawData ($this->method, $name."_file");
|
|
}
|
|
} else {
|
|
$this->field [$name]->value = $this->request->getRawData ($this->method, $name);
|
|
}
|
|
if (!$this->field [$name]->isValid($name)) {
|
|
$haveErrors = true;
|
|
}
|
|
}
|
|
return !$haveErrors;
|
|
}
|
|
|
|
/**
|
|
* Äîáàâëÿåò îäíî ïîëå ââîäà íà ôîðìó
|
|
*/
|
|
public function addField ($init) {
|
|
assert ($init['type']);
|
|
assert ($init['name']);
|
|
$constructor = $this->constructor[$init['type']];
|
|
$el = new $constructor ($init);
|
|
$el->type = $init['type'];
|
|
|
|
$this->addFieldObject ($init['name'], $el);
|
|
return $el;
|
|
}
|
|
|
|
/**
|
|
* Äîáàâëÿåò ñïñîê ïîëåé äëÿ ôîðìû
|
|
* @param array $list
|
|
*/
|
|
public function addFieldList ($list) {
|
|
foreach ($list as $init) {
|
|
$this->addField ($init);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Çàïîëíÿåò ôîðìó äàííûìè èç êîëëåêöèè
|
|
* Äëÿ îáüåêòîâ è ìàññèâîâ ìîæíî èñïîëüçîâàòü Adapter pattern
|
|
* @param object $data
|
|
* @param array $schema Ñâÿçü ìåæäó ýëåìåíòàìè ôîðìû è ñâîéñòâàìè îáüåêòà
|
|
*/
|
|
public function fill ($data) {
|
|
foreach ($this->field as $name => $el) {
|
|
$this->field [$name]->setValue ($data->get ($name));
|
|
}
|
|
}
|
|
}
|
|
|
|
?>
|