<commit_before><?php

/**
 * SowerPHP: Minimalist Framework for PHP
 * Copyright (C) SowerPHP (http://sowerphp.org)
 *
 * Este programa es software libre: usted puede redistribuirlo y/o
 * modificarlo bajo los términos de la Licencia Pública General GNU
 * publicada por la Fundación para el Software Libre, ya sea la versión
 * 3 de la Licencia, o (a su elección) cualquier versión posterior de la
 * misma.
 *
 * Este programa se distribuye con la esperanza de que sea útil, pero
 * SIN GARANTÍA ALGUNA; ni siquiera la garantía implícita
 * MERCANTIL o de APTITUD PARA UN PROPÓSITO DETERMINADO.
 * Consulte los detalles de la Licencia Pública General GNU para obtener
 * una información más detallada.
 *
 * Debería haber recibido una copia de la Licencia Pública General GNU
 * junto a este programa.
 * En caso contrario, consulte <http://www.gnu.org/licenses/gpl.html>.
 */

namespace sowerphp\general;

/**
 * Helper para la creación de formularios en HTML
 * @author <NAME>, DeLaF (esteban[at]delaf.cl)
 * @version 2014-10-28
 */
class View_Helper_Form
{

    private $_id; ///< Identificador para el formulario
    private $_style; ///< Formato del formulario que se renderizará (mantenedor u false)

    /**
     * Método que inicia el código del formulario
     * @param style Estilo del formulario que se renderizará
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)
     * @version 2014-05-10
     */
    public function __construct ($style = 'mantenedor')
    {
        $this->_style = $style;
    }

    /**
     * Método para asignar el estilo del formulario una vez ya se creo el objeto
     * @param style Estilo del formulario que se renderizará
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)
     * @version 2014-08-21
     */
    public function setStyle($style = false)
    {
        $this->_style = $style;
    }

    /**
     * Método que inicia el código del formulario
     * @param config Arreglo con la configuración para el formulario
     * @return String Código HTML de lo solicitado
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)
     * @version 2014-09-20
     */
    public function begin ($config = array())
    {
        // transformar a arreglo en caso que no lo sea
        if (!is_array($config)) {
            $config = array('action'=>$config);
        }
        // asignar configuración
        $config = array_merge(
            array(
                'id' => 'id',
                'action' => $_SERVER['REQUEST_URI'],
                'method'=> 'post',
                'onsubmit' => null,
                'focus' => null,
                'attr' => '',
            ), $config
        );
        // crear onsubmit
        if ($config['onsubmit']) {
            $config['onsubmit'] = ' onsubmit="return '.$config['onsubmit'].'"';
        }
        // crear buffer
        $buffer = '';
        // si hay focus se usa
        if ($config['focus']) {
            $buffer .= '<script type="text/javascript"> $(function() { $("#'.$config['focus'].'Field").focus(); }); </script>'."\n";
        }
        // agregar formulario
        $buffer .= '<form action="'.$config['action'].'" method="'.$config['method'].'" enctype="multipart/form-data"'.$config['onsubmit'].' id="'.$config['id'].'" '.$config['attr'].'>'."\n";
        // retornar
        return $buffer;
    }

    /**
     * Método que termina el código del formulario
     * @param config Arreglo con la configuración para el botón submit
     * @return String Código HTML de lo solicitado
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)
     * @version 2014-05-10
     */
    public function end ($config = array())
    {
        // solo se procesa la configuración si no es falsa
        if ($config!==false) {
            // transformar a arreglo en caso que no lo sea
            if (!is_array($config))
                $config = array('value'=>$config);
            // asignar configuración
            $config['type'] = 'submit';
            $config = array_merge(
                array(
                    'type' => 'submit',
                    'name' => 'submit',
                    'value' => 'Enviar',
                    'label' => '',
                ), $config
            );
            // generar fin del formulario
            return $this->input($config).'</form>'."\n";
        } else {
            return '</form>'."\n";
        }
    }

    /**
     * Método que aplica o no un diseño al campo
     * @param field Campo que se desea formatear
     * @param config Arreglo con la configuración para el elemento
     * @return String Código HTML de lo solicitado
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)
     * @version 2014-10-28
     */
    private function _formatear ($field, $config)
    {
        // si se debe aplicar estilo de mantenedor
        if (!in_array($config['type'], array('hidden')) && $config['style']=='mantenedor') {
            $buffer = '';
            // generar ayuda
            if ($config['help']!='') {
                $actions = 'onmouseover="$(\'#'.$config['name'].'FieldHelp\').dialog()" onmouseout="$(\'#'.$config['name'].'FieldHelp\').dialog(\'close\')"';
                $config['help'] =
                    ' <a href="#" class="helpIcon" onclick="return false" '.$actions.'>'.
                    '<img src="'._BASE.'/img/icons/16x16/actions/help.png" alt="" /></a>'.
                    '<div id="'.$config['name'].'FieldHelp" title="'.$config['label'].'" style="display:none" '.$actions.'>'.$config['help'].'</div>'
                ;
            }
            // generar campo
            $buffer .= '<div>'."\n";
            if (!empty($config['label'])) {
                $ast = $config['notempty'] ? '<span style="color:red">*</span> ' : '';
                if (!empty($config['name'])) {
                    $buffer .= '<div class="label"><label for="'.$config['name'].'Field">'.$ast.$config['label'].'</label></div>'."\n";
                } else {
                    $buffer .= '<div class="label"><label>'.$ast.$config['label'].'</label></div>'."\n";
                }
            } else {
                $buffer .= '<div class="label">&nbsp;</div>'."\n";
            }
            $buffer .= '<div class="field">'.$field.$config['help'].'</div>'."\n";
            $buffer .= '</div>'."\n";
        }
        // si se debe alinear
        else if (isset($config['align'])) {
            $buffer = '<div style="text-align:'.$config['align'].'">'.$field.'</div>'."\n";
        }
        // si no se debe aplicar ningún formato solo agregar el campo dentro de un div y el EOL
        else {
            $buffer = '<div>'.$field.'</div>'."\n";
        }
        // retornar código formateado
        return $buffer;
    }

    /**
     * Método para crear una nuevo campo para que un usuario ingrese
     * datos a través del formulario, ya sea un tag: input, select, etc
     * @param config Arreglo con la configuración para el elemento
     * @return String Código HTML de lo solicitado
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)<commit_msg>Se agrega estilo 'inline'<commit_after><?php

/**
 * SowerPHP: Minimalist Framework for PHP
 * Copyright (C) SowerPHP (http://sowerphp.org)
 *
 * Este programa es software libre: usted puede redistribuirlo y/o
 * modificarlo bajo los términos de la Licencia Pública General GNU
 * publicada por la Fundación para el Software Libre, ya sea la versión
 * 3 de la Licencia, o (a su elección) cualquier versión posterior de la
 * misma.
 *
 * Este programa se distribuye con la esperanza de que sea útil, pero
 * SIN GARANTÍA ALGUNA; ni siquiera la garantía implícita
 * MERCANTIL o de APTITUD PARA UN PROPÓSITO DETERMINADO.
 * Consulte los detalles de la Licencia Pública General GNU para obtener
 * una información más detallada.
 *
 * Debería haber recibido una copia de la Licencia Pública General GNU
 * junto a este programa.
 * En caso contrario, consulte <http://www.gnu.org/licenses/gpl.html>.
 */

namespace sowerphp\general;

/**
 * Helper para la creación de formularios en HTML
 * @author <NAME>, DeLaF (esteban[at]delaf.cl)
 * @version 2014-10-28
 */
class View_Helper_Form
{

    private $_id; ///< Identificador para el formulario
    private $_style; ///< Formato del formulario que se renderizará (mantenedor u false)

    /**
     * Método que inicia el código del formulario
     * @param style Estilo del formulario que se renderizará
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)
     * @version 2014-05-10
     */
    public function __construct ($style = 'mantenedor')
    {
        $this->_style = $style;
    }

    /**
     * Método para asignar el estilo del formulario una vez ya se creo el objeto
     * @param style Estilo del formulario que se renderizará
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)
     * @version 2014-08-21
     */
    public function setStyle($style = false)
    {
        $this->_style = $style;
    }

    /**
     * Método que inicia el código del formulario
     * @param config Arreglo con la configuración para el formulario
     * @return String Código HTML de lo solicitado
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)
     * @version 2014-09-20
     */
    public function begin ($config = array())
    {
        // transformar a arreglo en caso que no lo sea
        if (!is_array($config)) {
            $config = array('action'=>$config);
        }
        // asignar configuración
        $config = array_merge(
            array(
                'id' => 'id',
                'action' => $_SERVER['REQUEST_URI'],
                'method'=> 'post',
                'onsubmit' => null,
                'focus' => null,
                'attr' => '',
            ), $config
        );
        // crear onsubmit
        if ($config['onsubmit']) {
            $config['onsubmit'] = ' onsubmit="return '.$config['onsubmit'].'"';
        }
        // crear buffer
        $buffer = '';
        // si hay focus se usa
        if ($config['focus']) {
            $buffer .= '<script type="text/javascript"> $(function() { $("#'.$config['focus'].'Field").focus(); }); </script>'."\n";
        }
        // agregar formulario
        $buffer .= '<form action="'.$config['action'].'" method="'.$config['method'].'" enctype="multipart/form-data"'.$config['onsubmit'].' id="'.$config['id'].'" '.$config['attr'].'>'."\n";
        // retornar
        return $buffer;
    }

    /**
     * Método que termina el código del formulario
     * @param config Arreglo con la configuración para el botón submit
     * @return String Código HTML de lo solicitado
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)
     * @version 2014-05-10
     */
    public function end ($config = array())
    {
        // solo se procesa la configuración si no es falsa
        if ($config!==false) {
            // transformar a arreglo en caso que no lo sea
            if (!is_array($config))
                $config = array('value'=>$config);
            // asignar configuración
            $config['type'] = 'submit';
            $config = array_merge(
                array(
                    'type' => 'submit',
                    'name' => 'submit',
                    'value' => 'Enviar',
                    'label' => '',
                ), $config
            );
            // generar fin del formulario
            return $this->input($config).'</form>'."\n";
        } else {
            return '</form>'."\n";
        }
    }

    /**
     * Método que aplica o no un diseño al campo
     * @param field Campo que se desea formatear
     * @param config Arreglo con la configuración para el elemento
     * @return String Código HTML de lo solicitado
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)
     * @version 2014-11-09
     */
    private function _formatear ($field, $config)
    {
        // si es campo oculto no se aplica ningún estilo
        if ($config['type'] == 'hidden') {
            $buffer = $field."\n";
        }
        // si se debe aplicar estilo de mantenedor
        else if ($config['style']=='mantenedor') {
            $buffer = '';
            // generar ayuda
            if ($config['help']!='') {
                $actions = 'onmouseover="$(\'#'.$config['name'].'FieldHelp\').dialog()" onmouseout="$(\'#'.$config['name'].'FieldHelp\').dialog(\'close\')"';
                $config['help'] =
                    ' <a href="#" class="helpIcon" onclick="return false" '.$actions.'>'.
                    '<img src="'._BASE.'/img/icons/16x16/actions/help.png" alt="" /></a>'.
                    '<div id="'.$config['name'].'FieldHelp" title="'.$config['label'].'" style="display:none" '.$actions.'>'.$config['help'].'</div>'
                ;
            }
            // generar campo
            $buffer .= '<div>'."\n";
            if (!empty($config['label'])) {
                $ast = $config['notempty'] ? '<span style="color:red">*</span> ' : '';
                if (!empty($config['name'])) {
                    $buffer .= '<div class="label"><label for="'.$config['name'].'Field">'.$ast.$config['label'].'</label></div>'."\n";
                } else {
                    $buffer .= '<div class="label"><label>'.$ast.$config['label'].'</label></div>'."\n";
                }
            } else {
                $buffer .= '<div class="label">&nbsp;</div>'."\n";
            }
            $buffer .= '<div class="field">'.$field.$config['help'].'</div>'."\n";
            $buffer .= '</div>'."\n";
        }
        // si se debe alinear
        else if (isset($config['align'])) {
            $buffer = '<div style="text-align:'.$config['align'].'">'.$field.'</div>'."\n";
        }
        // si se debe usar estilo inline
        else if ($config['style']=='inline') {
            $buffer = '<div style="display:inline">'.$field.'</div>'."\n";
        }
        // si no se debe aplicar ningún formato solo agregar el campo dentro de un div y el EOL
        else {
            $buffer = '<div>'.$field.'</div>'."\n";
        }
        // retornar código formateado
        return $buffer;
    }

    /**
     * Método para crear una nuevo campo para que un usuario ingrese
     * datos a través del formulario, ya sea un tag: input, select, etc
     * @param config Arreglo con la configuración para el elemento
     * @return String Código HTML de lo solicitado
     * @author <NAME>, DeLaF (esteban[at]delaf.cl)
{'fraction_non_alphanumeric': 0.16032873659284022, 'fraction_numerical': 0.007382643822259368, 'mean_word_length': 2.01786464901219, 'pattern_counts': {'":': 0, '<': 87, '<?xml version=': 0, '>': 111, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3907038', 'n_tokens_mistral': 4521, 'n_tokens_neox': 4394, 'n_words': 1193}