Файл: core/classes/formgen.class.php
Строк: 212
<?php
/******************************************************************************/
// //
// InstantCMS v1.10 //
// http://www.instantcms.ru/ //
// //
// written by InstantCMS Team, 2007-2012 //
// produced by InstantSoft, (www.instantsoft.ru) //
// //
// LICENSED BY GNU/GPL v2 //
// //
/******************************************************************************/
class cmsFormGen {
private $xml;
private $html;
private $default_cfg;
private $params;
//============================================================================//
//============================================================================//
public function __construct($xml_file, $default_cfg) {
$this->xml = simplexml_load_file($xml_file);
$this->default_cfg = $default_cfg;
$this->parseParams();
}
//============================================================================//
//============================================================================//
private function parseParams(){
$inDB = cmsDatabase::getInstance();
foreach($this->xml->params->param as $param){
$param['hint'] = (string)$param['hint'];
//получаем значение параметра
$value = $this->getParamValue($param['name'], (isset($param['default']) ? $param['default'] : ''));
//если это массив, склеиваем в строку
if (is_array($value)){ $value = implode('|', $value); }
$param['value'] = $value;
$param['html'] = $this->getParamHTML($param);
$this->params[] = $param;
}
return;
}
//============================================================================//
//============================================================================//
private function getParamValue($param_name, $default){
$param_name = (string)$param_name;
$default = (string)$default;
$value = '';
if (isset($this->default_cfg[$param_name])){
$value = $this->default_cfg[$param_name];
} else {
$value = $default;
}
if ($value === 'on') { $value = 1; }
if ($value === 'off') { $value = 0; }
return $value;
}
//============================================================================//
//============================================================================//
public function getHTML(){
foreach($this->params as $key=>$param){
$this->params[$key]['title'] = $param['title'];
$this->params[$key]['html'] = $param['html'];
}
ob_start();
global $tpl_data;
$tpl_data['module'] = $this->xml->module;
$tpl_data['fields'] = $this->params;
cmsPage::includeTemplateFile('admin/autoform.php');
$this->html = ob_get_clean();
return $this->html;
}
//============================================================================//
//============================================================================//
private function getParamHTML($param) {
$type = (string)$param['type'];
switch ($type){
case 'number': return $this->renderNumber($param);
break;
case 'string': return $this->renderString($param);
break;
case 'flag': return $this->renderFlag($param);
break;
case 'list': return $this->renderList($param);
break;
case 'list_db': return $this->renderListDB($param);
break;
}
return;
}
//============================================================================//
//============================================================================//
private function renderNumber($param) {
$name = (string)$param['name'];
$value = (string)$param['value'];
$units = isset($param['units']) ? (string)$param['units'] : '';
return '<input type="text" id="'.$name.'" name="'.$name.'" value="'.$value.'" class="param-number" /> '. $units;
}
private function renderString($param) {
$name = (string)$param['name'];
$value = (string)$param['value'];
return '<input type="text" id="'.$name.'" name="'.$name.'" value="'.htmlspecialchars($value).'" class="param-string" /> ';
}
private function renderFlag($param) {
$html = '';
$name = (string)$param['name'];
$value = (string)$param['value'];
$html = '<input type="checkbox" '.($value==1 ? 'checked="checked"' : '').' onclick="$('#'.$name.'').val(1-$('#'.$name.'').val())" />' . "n" .
'<input type="hidden" id="'.$name.'" name="'.$name.'" value="'.$value.'" />';
return $html;
}
private function renderList($param){
$html = '';
$name = (string)$param['name'];
$value = (string)$param['value'];
$html = '<select id="'.$name.'" name="'.$name.'" class="param-list">' . "n";
foreach($param->option as $option){
$option['title'] = (string)$option['title'];
$option['value'] = (string)$option['value'];
$html .= "t" . '<option value="'.htmlspecialchars($option['value']).'" '.($value == $option['value'] ? 'selected="selected"' : '').'>'.$option['title'].'</option>' . "n";
}
$html .= '</select>' . "n";
return $html;
}
private function renderListDB($param) {
$inDB = cmsDatabase::getInstance();
$html = '';
$name = (string)$param['name'];
$value = (string)$param['value'];
$multiple = isset($param['multiple']) ? 1 : 0;
$src = (string)$param['src'];
$src_title = isset($param['src_title']) ? (string)$param['src_title'] : 'title';
$src_id = isset($param['src_value']) ? (string)$param['src_value'] : 'id';
$src_where = isset($param['src_where']) ? (string)$param['src_where'] : '';
$tree = isset($param['tree']) ? (int)$param['tree'] : 0;
$order_by = ($tree ? 'NSLeft' : $src_title);
$select = "{$src_id} as value, {$src_title} as title";
if ($tree) { $select .= ", NSLevel as level"; }
$where = ($src_where) ? "WHERE {$src_where}" : '';
$sql = "SELECT {$select}
FROM {$src}
{$where}
ORDER BY {$order_by}
LIMIT 100";
$result = $inDB->query($sql);
// ------------------------------------------------------------- //
// ------------------------------------------------------------- //
if (!$multiple){
$html = '<select id="'.$name.'" name="'.$name.'" class="param-list">' . "n";
if (isset($param->option)){
foreach($param->option as $option){
$option['title'] = (string)$option['title'];
$option['value'] = (string)$option['value'];
$html .= "t" . '<option value="'.htmlspecialchars($option['value']).'" '.($value == $option['value'] ? 'selected="selected"' : '').'>'.$option['title'].'</option>' . "n";
}
}
if ($inDB->num_rows($result)){
while($option = $inDB->fetch_assoc($result)){
if (isset($option['level']) && $option['level'] >= 1){
$option['title'] = str_repeat('--', $option['level']-1) . ' ' . $option['title'];
}
$html .= "t" . '<option value="'.htmlspecialchars($option['value']).'" '.($value == $option['value'] ? 'selected="selected"' : '').'>'.$option['title'].'</option>' . "n";
}
}
$html .= '</select>' . "n";
}
// ------------------------------------------------------------- //
// ------------------------------------------------------------- //
if ($multiple){
$values = explode('|', $value);
$html = '<table cellpadding="0" cellspacing="0">' . "n";
if ($inDB->num_rows($result)){
while($option = $inDB->fetch_assoc($result)){
$html .= '<tr>' . "n" .
"t" . '<td><input type="checkbox" id="'.$name.'_'.$option['value'].'" name="'.$name.'['.$option['value'].']" value="'.htmlspecialchars($option['value']).'" '.(in_array($option['value'], $values) ? 'checked="checked"' : '').' />' . "n" .
"t" . '<td><label for="'.$name.'_'.$option['value'].'">'.$option['title'].'</label></td>' . "n" .
'</tr>';
}
}
$html .= '</table>' . "n";
}
return $html;
}
//============================================================================//
//============================================================================//
}
?>