Файл: sys/inc/classes/class.Forms.php
Строк: 177
<?php 
class Forms
{
    private $fields = array(); 
    private $fields_default = array(
        'field_title'         => '', 
        'field_type'          => '', 
        'field_name'          => '', 
        'field_desc'          => '', 
        'field_value'         => '', 
        'field_after'         => '', 
        'field_before'        => '', 
        'field_placeholder'   => '', 
        'field_attr'          => array(), 
    );
    
    private $attr = array(); 
    
    public function __construct($action = '', $method = 'post') {
        $this->attr = array(
            'action' => $action, 
            'method' => $method, 
        ); 
    }
    public function get_form_array() 
    {
        $attr = array(); 
        $attr['action'] = $this->attr['action'];
        $attr['method'] = $this->attr['method'];
        return array(
            'attr' => $this->get_attributes($attr), 
            'fields' => $this->fields, 
        ); 
    }
    public function get_attributes($attributes) {
        $attrHtml = array(); 
        if (is_array($attributes)) {
            foreach($attributes AS $key => $value) {
                $attrHtml[] = $key . '="' . $value . '"';
            }
        }
        return join(' ', $attrHtml); 
    }
    public function add_field($args, $section_id = 'auto') {
        if (!isset($args['field_type'])) {
            $args['field_type'] = 'text';
        }
        if (preg_match('/^(text|password|tel|email|number)$/i', $args['field_type'])) {
            $field = $this->input($args); 
        } elseif ($args['field_type'] == 'hidden') {
            $field = $this->hidden($args); 
        } elseif ($args['field_type'] == 'select') {
            $field = $this->select($args); 
        } elseif ($args['field_type'] == 'textarea') {
            $field = $this->textarea($args); 
        } elseif ($args['field_type'] == 'editor') {
            $field = $this->editor($args); 
        } elseif ($args['field_type'] == 'checkbox') {
            $field = $this->checkbox($args); 
        } elseif ($args['field_type'] == 'radio') {
            $field = $this->radio($args); 
        } elseif ($args['field_type'] == 'submit') {
            return $this->button($args); 
        } elseif ($args['field_type'] == 'date') {
            $field = $this->date($args); 
        }
        
        $this->fields[$section_id][] = $field;
    }
    public function get_field($args) {
        if (!isset($args['field_type'])) {
            $args['field_type'] = 'text';
        }
        if (preg_match('/^(text|password|tel|email|number)$/i', $args['field_type'])) {
            return $this->input($args); 
        } elseif ($args['field_type'] == 'hidden') {
            return $this->hidden($args); 
        } elseif ($args['field_type'] == 'select') {
            return $this->select($args); 
        } elseif ($args['field_type'] == 'textarea') {
            return $this->textarea($args); 
        } elseif ($args['field_type'] == 'editor') {
            return $this->editor($args); 
        } elseif ($args['field_type'] == 'checkbox') {
            return $this->checkbox($args); 
        } elseif ($args['field_type'] == 'submit') {
            return $this->button($args); 
        } elseif ($args['field_type'] == 'date') {
            return $this->date($args); 
        }
    }
    public function checkbox($attr) 
    {
        $attr = array_merge($this->fields_default, $attr);
        
        $html = '<div class="form-group">'; 
        $html .= '<div class="form-control form-checkbox-group">'; 
        $html .= '<label class="d-block"><input type="checkbox" value="' . $attr['field_value'] . '" name="' . $attr['field_name'] . '"' 
                      . ($attr['field_checked'] != 0 ? 'checked' : '') . ' ' . $this->get_attributes($attr['field_attr']) . ' /> ' 
                      . $attr['field_title'] . '</label>';
        $html .= '</div>';
        if ($attr['field_desc']) {
             $html .= '<small class="form-text text-muted">' . $attr['field_desc'] . '</small>';
        }
        $html .= '</div>';
        
        return $html;
    }
    
    public function radio($attr) 
    {
        $attr = array_merge($this->fields_default, $attr);
        
        $html = '<div class="form-group">'; 
        if (!empty($attr['field_title'])) {
            $html .= '<label class="label-title" for="Radio' . $attr['field_name'] . '">' . $attr['field_title'] . '</label>'; 
        }
        $html .= '<div class="input-group mb-3">'; 
        if (is_array($attr['field_values'])) {
            foreach($attr['field_values'] AS $value) {
                $html .= '<label class="d-block"><input type="radio" value="' . $value['value'] . '" name="' . $attr['field_name'] . '"' 
                      . ($attr['field_value'] == $value['value'] ? 'checked' : '') . ' ' . $this->get_attributes($attr['field_attr']) . ' /> ' 
                      . $value['title'] . '</label>';
            }
        }
        $html .= '</div>';
        if ($attr['field_desc']) {
             $html .= '<small class="form-text text-muted">' . $attr['field_desc'] . '</small>';
        }
        $html .= '</div>';
        
        return $html;
    }
    
    public function select($attr) 
    {
        $attr = array_merge($this->fields_default, $attr);
        
        $html = '<div class="form-group">'; 
        if (!empty($attr['field_title'])) {
            $html .= '<label class="label-title" for="Select' . $attr['field_name'] . '">' . $attr['field_title'] . '</label>'; 
        }
        $html .= '<div class="input-group mb-3"><select class="form-control" id="Select' . $attr['field_name'] . '" name="' . $attr['field_name'] . '" ' . $this->get_attributes($attr['field_attr']) . ' >'; 
        if (is_array($attr['field_values'])) {
            foreach($attr['field_values'] AS $value) {
                $html .= '<option value="' . $value['value'] . '" ' . ($attr['field_value'] == $value['value'] ? 'selected' : '') . '>' . $value['title'] . '</option>';
            }
        }
        $html .= '</select></div>';
        if ($attr['field_desc']) {
             $html .= '<small class="form-text text-muted">' . $attr['field_desc'] . '</small>';
        }
        $html .= '</div>';
        
        return $html;
    }
    
    public function date($attr) 
    {
        $attr = array_merge($this->fields_default, $attr);
        $html = '<div class="form-group">';
        
        if (!empty($attr['field_title'])) {
            $html .= '<label class="label-title" for="Input' . $attr['field_name'] . '">' . $attr['field_title'] . '</label>'; 
        }
        $html .= '<div class="input-group mb-3">'; 
        if (!empty($attr['field_before'])) {
            $html .= '<div class="input-group-prepend"><span class="input-group-text">' . $attr['field_before'] . '</span></div>';
        }
        
        $html .= '<input class="form-control" id="Input' . $attr['field_name'] . '" type="' . $attr['field_type'] . '" name="' . $attr['field_name'] . '" value="' . $attr['field_value'] . '" placeholder="' . (!empty($attr['field_placeholder']) ? $attr['field_placeholder'] : '') . '" ' . $this->get_attributes($attr['field_attr']) . '  />'; 
        if (!empty($attr['field_after'])) {
            $html .= '<div class="input-group-append"><span class="input-group-text">' . $attr['field_after'] . '</span></div>';
        }
        if ($attr['field_desc']) {
             $html .= '<small class="form-text text-muted">' . $attr['field_desc'] . '</small>';
        }
        $html .= '</div>';
        $html .= '</div>';
        return $html;
    }
        
    public function input($attr) 
    {
        $attr = array_merge($this->fields_default, $attr);
        $html = '<div class="form-group">';
        
        if (!empty($attr['field_title'])) {
            $html .= '<label class="label-title" for="Input' . $attr['field_name'] . '">' . $attr['field_title'] . '</label>'; 
        }
        $html .= '<div class="input-group mb-3">'; 
        if (!empty($attr['field_before'])) {
            $html .= '<div class="input-group-prepend"><span class="input-group-text">' . $attr['field_before'] . '</span></div>';
        }
        $html .= '<input class="form-control" id="Input' . $attr['field_name'] . '" type="' . $attr['field_type'] . '" name="' . $attr['field_name'] . '" value="' . $attr['field_value'] . '" placeholder="' . (!empty($attr['field_placeholder']) ? $attr['field_placeholder'] : '') . '" ' . $this->get_attributes($attr['field_attr']) . '  />'; 
        if (!empty($attr['field_after'])) {
            $html .= '<div class="input-group-append"><span class="input-group-text">' . $attr['field_after'] . '</span></div>';
        }
        if ($attr['field_desc']) {
             $html .= '<small class="form-text text-muted">' . $attr['field_desc'] . '</small>';
        }
        $html .= '</div>';
        $html .= '</div>';
        
        return $html;
    }
        
    public function hidden($attr) 
    {
        $attr = array_merge($this->fields_default, $attr);
        $html = '<input id="Input' . $attr['field_name'] . '" type="hidden" name="' . $attr['field_name'] . '" value="' . $attr['field_value'] . '" ' . $this->get_attributes($attr['field_attr']) . ' />'; 
        return $html;
    }
    
    public function textarea($attr) 
    {
        $attr = array_merge($this->fields_default, $attr);
        
        $html = '<div class="form-group">'; 
        if (!empty($attr['field_title'])) {
            $html .= '<label class="label-title" for="Textarea' . $attr['field_name'] . '">' . $attr['field_title'] . '</label>'; 
        }
        $html .= '<div class="input-group mb-3">'; 
        $html .= '<textarea rows="5" class="form-control" id="Textarea' . $attr['field_name'] . '" name="' . $attr['field_name'] . '" placeholder="' . (!empty($attr['field_placeholder']) ? $attr['field_placeholder'] : '') . '" ' . $this->get_attributes($attr['field_attr']) . '>' . $attr['field_value'] . '</textarea>'; 
        $html .= '</div>';
        if ($attr['field_desc']) {
             $html .= '<small class="form-text text-muted">' . $attr['field_desc'] . '</small>';
        }
        $html .= '</div>';
        
        return $html;
    }
    
    public function editor($attr) 
    {
        $attr = array_merge($this->fields_default, $attr);
        
        $html = '<div class="form-group">'; 
        if (!empty($attr['field_title'])) {
            $html .= '<label class="label-title" for="Textarea' . $attr['field_name'] . '">' . $attr['field_title'] . '</label>'; 
        }
        $html .= '<div class="input-group mb-3">'; 
        //$html .= '<textarea rows="5" class="form-control" id="Textarea' . $attr['field_name'] . '" name="' . $attr['field_name'] . '" placeholder="' . (!empty($attr['field_placeholder']) ? $attr['field_placeholder'] : '') . '" ' . $this->get_attributes($attr['field_attr']) . '>' . $attr['field_value'] . '</textarea>'; 
        $html .= get_editor($attr['field_name'], $attr['field_value'], array(
            'placeholder' => (!empty($attr['field_placeholder']) ? $attr['field_placeholder'] : ''), 
        )); 
        $html .= '</div>';
        if ($attr['field_desc']) {
             $html .= '<small class="form-text text-muted">' . $attr['field_desc'] . '</small>';
        }
        $html .= '</div>';
        
        return $html;
    }
    
    public function button($atts = array(), $options = array(), $section_id = 'auto') 
    {
        $html = '<div class="form-group">'; 
        if (!empty($options['before'])) {
            $html .= $options['before'];
        }
        if (is_string($atts)) {
            $html .= '<button type="submit" class="button button-primary">' . $atts . '</button>';
        } else {
            $html .= '<button type="submit" class="button button-primary" ' . ($atts['field_name'] ? 'name="' . $atts['field_name'] . '"' : '') . '>' . $atts['field_title'] . '</button>';
        }
        
        if (!empty($options['after'])) {
            $html .= $options['after'];
        }
        $html .= '</div>';
        $this->fields[$section_id][] = $html;
        return $html;
    }
    
    public function display($options = array(), $section_id = 'auto') 
    {
        $attr = array(); 
        $attr['action'] = $this->attr['action'];
        $attr['method'] = $this->attr['method'];
        if (is_array($options)) {
            $attr = array_merge($attr, $options);
        }
        
        $attrHtml = array(); 
        foreach($attr AS $key => $value) {
            $attrHtml[] = $key . '="' . $value . '"';
        }
        $html = implode('', $this->fields[$section_id]); 
        if ($attr['action'] && $attr['method']) {
            $html = '<form ' . join(' ', $attrHtml) . '>' . $html . '</form>';
        }
        
        return $html; 
    }
}