Пример #1
0
function test($_html)
{
    $num = 10;
    $ob = new HTML_FormPersister();
    $_time = getTime();
    for ($i = 0; $i < $num; $i++) {
        $_result = $ob->process($_html);
    }
    $_time = (getTime() - $_time) / $num;
    printf("%.6fs - <tt>%s</tt><br>", $_time, htmlspecialchars($_html));
}
 function process($s, $sign = false)
 {
     if ($sign) {
         $s = HTML_FormPersister::ob_formPersisterHandler($s);
     }
     return parent::process($s);
 }
 static function signHtmlForm($s, $substitute_values = false)
 {
     if ($substitute_values) {
         $s = HTML_FormPersister::ob_formPersisterHandler($s);
     }
     return self::getSigner()->process($s);
 }
Пример #4
0
 public static function fillFromArray($htmlForm, $array = array())
 {
     $savedPOST = $_POST;
     $_POST = $array;
     $data = HTML_FormPersister::ob_formPersisterHandler($htmlForm);
     $_POST = $savedPOST;
     return $data;
 }
Пример #5
0
 /**
  * Fetch an element of $arr array using "complex" key $name.
  *
  * $name can be in form of "zzz[aaa][bbb]", 
  * it means $arr[zzz][aaa][bbb].
  *
  * If $name contain auto-indexed parts (e.g. a[b][]), replace
  * it by corresponding indexes.
  * 
  * $name may be scalar name or array (already splitted name,
  * see _splitMultiArray() method).
  * 
  * @param array &$arr          Array to fetch from.
  * @param mixed &$name         Complex form-field name.
  * @param array &$autoindexes  Container to hold auto-indexes
  * @return found value, or false if $name is not found.
  */
 function _deepFetch(&$arr, &$name, &$autoindexes)
 {
     if (is_scalar($name) && strpos($name, '[') === false) {
         // Fast fetch.
         return isset($arr[$name]) ? $arr[$name] : false;
     }
     // Else search into deep.
     $parts = HTML_FormPersister::_splitMultiArray($name);
     $leftPrefix = '';
     foreach ($parts as $i => $k) {
         if (!strlen($k)) {
             // Perform auto-indexing.
             if (!isset($autoindexes[$leftPrefix])) {
                 $autoindexes[$leftPrefix] = 0;
             }
             $parts[$i] = $k = $autoindexes[$leftPrefix]++;
         }
         if (!is_array($arr)) {
             // Current container is not array.
             return false;
         }
         if (!array_key_exists($k, $arr)) {
             // No such element.
             return false;
         }
         $arr =& $arr[$k];
         $leftPrefix = strlen($leftPrefix) ? $leftPrefix . "[{$k}]" : $k;
     }
     if (!is_scalar($name)) {
         $name = $parts;
     } else {
         $name = $leftPrefix;
     }
     return $arr;
 }
Пример #6
0
 /**
  * Convert plain metadata to multidimension array (as in $_GET and $_POST).
  * Used for forms with complex field names: a[b][c][] etc.
  * Called usually ONLY on POST form processing, not each time page loaded.
  * Also check if field values are consistent with metadata (e.g. hidden 
  * field is unchanged manually and "select" value is present in <option>'s).
  * Each resulting elements will have the following structure:
  * elementName => array(
  *   'type'      => text | action | single | multiple,
  *   'label'     => corresponding <label>...</label> content
  *   'value'     => entered value (if MF_USE_VALUES is true)
  *   'name'      => full name of form element (e.g. field[key1][key2])
  *   'original'  => original value of the element (for hidden fields and forms)
  *   'items'     => array(items of selects, checkboxes etc.)
  * );
  */
 function _decodeFormMeta($metas, $valuesArray)
 {
     require_once 'HTML/FormPersister.php';
     // Second pass: make meta tree.
     $flatMetas = $metas['items'];
     $treeMetas = $autoindexes = $values = array();
     foreach ($flatMetas as $k => $meta) {
         // Get name structure.
         $name = $meta['name'];
         $nameParts = HTML_FormPersister::_splitMultiArray($name);
         // may be modified later!
         // Set values.
         if ($this->MF_USE_VALUES) {
             $value = null;
             // Fetch the value.
             if ($meta['type'] == "action" && count($nameParts) == 1) {
                 // This is possibly <input type="image" name="aaa"> field. E.g.,
                 // $_GET contains "aaa_x" and "aaa_y" fieds.
                 if (is_numeric($x = @$valuesArray["{$name}_x"]) && is_numeric($y = @$valuesArray["{$name}_y"])) {
                     $value = array($x, $y);
                 }
             }
             if ($value === null) {
                 // This is not "image" field, or "image" with [] parts
                 // (PHP always ignores .x and .y after [] part, so - remain only "y" coord).
                 if (($v = HTML_FormPersister::_deepFetch($valuesArray, $nameParts, $autoindexes)) !== false) {
                     $value = $v;
                 }
             }
             // For multi-selects value is ALWAYS array.
             if ($value === null && $meta['type'] == "multiple") {
                 $value = array();
             }
             // Single select with size>1 and set of radio-buttons without
             // checked item ALSO could generate NULL in value. But we must
             // process such cases via meta:dynamic attribute.
             // Flag-based checkbox may need correction.
             if ($meta['type'] == 'flag') {
                 if ($meta['key'] === null) {
                     // If checkbox has no 'value' attribute - completely
                     // boolean element (browser sends "on").
                     $value = intval(!!$value);
                 }
                 unset($meta['key']);
             }
             // Make values array ("trusted $_POST").
             $curValue =& $values;
             foreach ($nameParts as $part) {
                 $curValue =& $curValue[$part];
             }
             $curValue = $value;
             // Save new value back to meta.
             $meta['value'] = $value;
         }
         // Make deep (tree-like) array.
         $curTree =& $treeMetas;
         foreach ($nameParts as $part) {
             if (!strlen($part)) {
                 break;
             }
             $curTree =& $curTree[$part];
         }
         $curTree = $meta;
         // Save modified meta back to array.
         $flatMetas[$k] = $meta;
     }
     // Create resulting metadata.
     $metas['items'] = $flatMetas;
     $metas['tree'] = $treeMetas;
     if ($this->MF_USE_VALUES) {
         $metas['value'] = $values;
     }
     // Return full meta-information.
     return $metas;
 }
Пример #7
0
<?php

include_once "../../lib/config.php";
include_once "HTML/FormPersister.php";
$ob = new HTML_FormPersister();
$options['some']['key'] = array('one' => 'From 1d array', 'two' => 'Other from 1d');
$options['other']['key'] = array('Group1' => array('one' => 'From 2d array', 'two' => 'Another from 2d'), 'Group2' => array('three' => 'Again from 2d array', 'four' => '2d vah-vah!'));
$code = trim(str_replace("\t", "", '
  <br><form>
  <select name=sel-1>
    options[some][key]
  </select>
  <select name=sel0>
    <option value="0">0000</option>
    $options[some][key]
    <option value="1">1111</option>
  </select>
  <select name=sel1>
    <optgroup label="aaa">
      <option value="0">rrrrr</option>
      options[some][key]
    </optgroup>
    options[other][key]
  </select>
  <select name=sel2 size="1">
    <optgroup label="First">
      <option value=a>aaaaaaaaaaaaa
      <option value=b>bbbbbbbbbbbbb
    </optgroup>
    <optgroup label="Second">
      <option value=c>ccccccccccccc
Пример #8
0
        } else {
            $_POST['sex'] = 'default';
            $BreadCrumbs->addBreadCrumbs($sKey, 'Регистрация аккаунта');
            $tpl->assign('title', 'Регистрация аккаунта');
            $tplForm->assign('content', 'Регистрация на этом сайте даст вам возможность оставлять комментарии в блоге.');
            $tplForm->assign('act', 'register');
            $tplForm->assign('submit', 'Зарегистрироваться');
            $tplForm->assign('validation_login', $tplForm->fetchBlock('validation_login'));
        }
        $tplForm->assign('validator_login', 'Только английские строчные буквы, цифры, тире и знак подчеркивания');
        $tplForm->assign('validator_name', 'Любые буквы, цифры, тире и знак подчеркивания');
        $tplForm->assign('validator_password', 'Любые буквы, цифры, тире и знак подчеркивания');
        $tplForm->assign('validator_age', 'Число полных лет (в пределах от 4 до <a  target="_blank" href="http://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%BB%D1%8C%D0%BC%D0%B0%D0%BD,_%D0%96%D0%B0%D0%BD%D0%BD%D0%B0">122</a>)');
        $tplForm->assign('validator_email', 'Правильный email (используется для уведомлений, на сайте не отображается)');
        $tplForm->assign('validator_kcaptcha', 'Защита от автоматических регистраций - введите символы, изображенные на картинке');
        $sForm = $tplForm->get();
        $sForm = HTML_FormPersister::ob_formpersisterhandler($sForm);
        $sForm = $metaForm->process($sForm);
        $tpl->assign('content', $sForm);
        break;
}
$_t->assign('ContentBlock', $tpl);
$tpl->reset();
// BREADCRUMBS
$_t->assign('BreadCrumbs', $BreadCrumbs->getBreadCrumbs());
// HEAD_TITLE
$_t->assign('head_title', $sTitle);
// SEO
$_t->assign('seo_title', $sSeoTitle);
$_t->assign('seo_keywords', $sSeoKeywords);
$_t->assign('seo_description', $sSeoDescription);
Пример #9
0
<?php

include_once "../../lib/config.php";
include_once "HTML/FormPersister.php";
ob_start();
?>
<form method="get">
	<input type="submit" value="&nbsp;&nbsp;Submit - must NOT contain plain &amp;nbsp; on the left!">
</form>
<?
$c = ob_get_contents(); ob_end_clean();
echo HTML_FormPersister::ob_formPersisterHandler($c);
?>
Пример #10
0
function ShowTask()
{
    global $_t;
    global $tpl;
    global $metaForm;
    // Строим запрос
    //dbg($_POST);
    $sql = "SELECT * FROM `" . DB_PREFIX . DB_TBL_TASKS . "` WHERE (\r\n";
    if (isset($_POST['complete'])) {
        $sql .= "(`status` = 'complete') OR \r\n";
    }
    if (isset($_POST['uncomplete'])) {
        $sql .= "(`status` = '') OR \r\n";
    }
    if (isset($_POST['error'])) {
        $sql .= "(`status` = 'error') OR \r\n";
    }
    if (isset($_POST['other'])) {
        $sql .= "((`status` != 'error') AND (`status` != '') AND (`status` != 'complete')) OR \r\n";
    }
    $sql = substr($sql, 0, strlen($sql) - 5) . "\r\n";
    $sql .= ") ORDER BY `" . $_POST['sort'] . "` ";
    if (isset($_POST['desc'])) {
        $sql .= "DESC";
    }
    //dbg($sql);
    // Получаем задачи
    //$sql = "SELECT * FROM `".DB_PREFIX.DB_TBL_TASKS."` WHERE 1 ORDER BY `t_start` ";
    $sql = mysql_query($sql);
    if (false == $sql) {
        my_die();
    }
    $aList = array();
    while ($row = mysql_fetch_assoc($sql)) {
        $aList[] = $row;
    }
    //dbg($aList);
    // Выводим задачи
    if (empty($aList)) {
        $tpl->assign('TaskList', 'Нет задач');
    } else {
        $tplTaskList = $tpl->fetchBlock('TaskList');
        foreach ($aList as $k => $v) {
            $tplTaskElt = $tplTaskList->fetchBlock('TaskElt');
            $tplTaskElt->assign($v);
            $tplTaskElt->assign('color', substr(md5($v['status']), 0, 6));
            $tplTaskList->assign('TaskElt', $tplTaskElt);
            $tplTaskElt->reset();
        }
        $tpl->assign('TaskList', $tplTaskList);
        $tplTaskList->reset();
    }
    $sql = "SELECT COUNT(*) FROM `" . DB_PREFIX . DB_TBL_TASKS . "` WHERE `status` = 'complete'";
    $sql = mysql_query($sql);
    if (false == $sql) {
        my_die();
    }
    $tpl->assign('task_complete', current(mysql_fetch_assoc($sql)));
    $sql = "SELECT COUNT(*) FROM `" . DB_PREFIX . DB_TBL_TASKS . "` WHERE `status` = ''";
    $sql = mysql_query($sql);
    if (false == $sql) {
        my_die();
    }
    $tpl->assign('task_uncomplete', current(mysql_fetch_assoc($sql)));
    $sql = "SELECT COUNT(*) FROM `" . DB_PREFIX . DB_TBL_TASKS . "` WHERE `status` = 'error'";
    $sql = mysql_query($sql);
    if (false == $sql) {
        my_die();
    }
    $tpl->assign('task_error', current(mysql_fetch_assoc($sql)));
    $sql = "SELECT COUNT(*) FROM `" . DB_PREFIX . DB_TBL_TASKS . "` WHERE ((`status` != 'error') AND (`status` != '') AND (`status` != 'complete'))";
    $sql = mysql_query($sql);
    if (false == $sql) {
        my_die();
    }
    $tpl->assign('task_other', current(mysql_fetch_assoc($sql)));
    $sql = "SELECT COUNT(*) FROM `" . DB_PREFIX . DB_TBL_TASKS . "` WHERE 1";
    $sql = mysql_query($sql);
    if (false == $sql) {
        my_die();
    }
    $tpl->assign('task_all', current(mysql_fetch_assoc($sql)));
    $sTpl = $tpl->get();
    $sTpl = HTML_FormPersister::ob_formpersisterhandler($sTpl);
    $sTpl = $metaForm->process($sTpl);
    $_t->assign('content', $sTpl);
    $tpl->reset();
}