<?php

Goweb::loadClass('Goweb_Form');

/**
 * Goweb Sitemanager 5 Framework
 * @version    5.0.0
 * @category   Backoffice
 * @package    PainelGoweb
 * @subpackage Form
 * @author     I&D <dev@goweb.pt>, Pedro Pinto <ppinto@goweb.pt>
 * @copyright  2009 (c) Goweb (http://www.goweb.pt)
*/
class Form_Import extends Goweb_Form {
    
    /**
     * Formulario de pesquisa generica
    */
    protected function _setup() {
        
        $this->label_campos = $this->Checkbox(array('label' => translateAdmin('1&ordf; linha corresponde aos labels (ignorar)')));
        $this->convert_html = $this->Checkbox(array('label' => translateAdmin('Converter HTMLEntities')));
        $this->convert_newline = $this->Checkbox(array('label' => translateAdmin('Converter mudan&ccedil;a de linhas')));        
        
        $this->_getCampos();
        // ficheiro
        $this->ficheiro_upload = $this->File(array('label' => translateAdmin('Ficheiro a Importar')));
        $this->ficheiro_upload->size = 50;
        $this->ficheiro_upload->error_class = 'error';
        $this->ficheiro_upload->focus_class = 'focus';

        $this->submit = $this->Submit();
        $this->submit->value = translate('Importar');
        $this->submit->class = 'form_submit';
    }
    
    protected function _getCampos(){
        $catalogoModel = Goweb::getModelInstance('Catalogo_Model_Produto', 'db', false);
        $fichasModel = Goweb::getModelInstance('Catalogo_Model_Element', 'db', false);
        $fichaModel = Goweb::getModelInstance('Catalogo_Model_Ficha', 'db', false);
        $labels = $catalogoModel->getColsLabelsWithAliases();
        foreach ($catalogoModel->getCols() as $colName => $col ){
            if ($col->getParam('on_insert') || $col->getParam('on_update') ) continue;
            $this->{$colName} = $this->Text();
            $this->{$colName}->setBelongsTo('campos');
            $this->{$colName}->setName($colName);
            $this->{$colName}->setLabel(isset($labels[$colName]) && $labels[$colName] ? $labels[$colName] : $this->_formatNameForLabel($colName));
            $this->{$colName}->help = translateAdmin('Preencher a coluna correspondente a este campos no ficheiro XLS/CSV');
            if ($colName == $catalogoModel->getPrimary()) $this->{$colName}->help .= translateAdmin(' (Usar para actualiza&ccedil;&otilde;es)');
            if ($colName == 'referencia'){
                $this->referencia_as_key = $this->Checkbox(array('label' => translateAdmin('Usar {{campo}} como chave para actualiza&ccedil;&otilde;es', isset($labels[$colName]) && $labels[$colName] ? $labels[$colName] : $this->_formatNameForLabel($colName))));
            }
            
            
        }
        $fichasModel->order('ficha_id');
        $fichas = $fichasModel->fetchAll();
        if ($fichas){
            $numFicha = array();
            foreach ($fichas as $ficha){
                if (!in_array($ficha->ficha_id, $numFicha)){
                    $this->{'ficha_id'.$ficha->ficha_id} = $this->Separator();
                    if ($fichaModel->find($ficha->ficha_id)){
                        $this->{'ficha_id'.$ficha->ficha_id}->setLabel('Ficha '.$fichaModel->{$fichaModel->getToString()});
                    } else {
                        $this->{'ficha_id'.$ficha->ficha_id}->setLabel('Ficha '.$ficha->ficha_id);
                    }
                    $numFicha[] = $ficha->ficha_id;
                }

                $colName = 'ficha_id'.$ficha->ficha_id.'_element'.$ficha->id;
                $this->{$colName} = $this->Text();
                $this->{$colName}->setBelongsTo('campos');
                $this->{$colName}->setName($colName);
                $this->{$colName}->setLabel($ficha->label);
                $this->{$colName}->help = translateAdmin('Preencher a coluna correspondente a este campos no ficheiro XLS/CSV');
            }
            $this->{'ficha_id_last'} = $this->Separator();
            $this->{'ficha_id_last'}->setLabel('Fim fichas');
        }
        
    }

    /**
     * Formata uma string para se mostrada como label.
     *
     * Substitui palavras separadas por "-", "_", ou "." por maiusculas e
     * remove todos caracteres que n&atilde;o sejam alfanemericos.
     * 
     * @param   string
     * @return  string
     */
    protected function _formatNameForLabel($unformatted) {
        $unformatted = str_replace(array('-', '_', '.'), ' ', strtolower($unformatted));
        $unformatted = preg_replace('[^a-z0-9 ]', '', $unformatted);
        return ucwords($unformatted);
    }

}
