<?php

Goweb::loadClass('Cms_BaseComponent', ADMIN_PATH);
Goweb::loadClass('Goweb_Form');

/**
 * Goweb Sitemanager 5 Framework
 * @version    5.0.0
 * @category   Frontoffice
 * @package    Cms
 * @subpackage Component
 * @author     I&D <dev@goweb.pt>, Pedro Pinto <ppinto@goweb.pt>
 * @copyright  2009 (c) Goweb (http://www.goweb.pt)
 *
 * As classes _Component sao responsaveis pela interface backoffice x frontoffice
 * atraves da insercao de componentes via RTE.
 *
*/
class Cms_Component extends Cms_BaseComponent {
    
    /**
     * Este metodo informa ao sistema quais as accoes permitidas para este
     * modulo. Todas as acoes aqui definidas devem ser implementadas no
     * _Controller do modulo.
    */
    public function init() {
    	parent::init();
        $this->_actions = array('menu'     => array('title'  => translateAdmin('Menu'),
                                                    'helper' => translateAdmin('Inserir ramo da estrutura de p&aacute;ginas do site. O n&uacute;mero de n&iacute;veis do menu pode ser configurado.')),
                                'mapa'     => array('title' => translateAdmin('Mapa do Site'),
                                                    'helper' => translateAdmin('Inserir componente Mapa do Site')),
                                'pesquisa' => array('title'  => translateAdmin('Pesquisa'),
                                                    'helper' => translateAdmin('Inserir componente de pesquisa')));
    }
    
    /**
     * Componente para a insercao do menu
    */
    public function menuAction() {
        // "pai_id"
        Goweb::loadClass('Goweb_Js_Tree');
        Goweb::loadClass('Goweb_Js_Tree_Node');
        $tree = new Goweb_Js_Tree('pai_id');
        $tree->useLines = false;
        
        $paginaModel = Goweb::getModelInstance('Cms_Model_Pagina', 'db');
        $paginaModel->where($paginaModel->getTableName() . '.activo = 1');
        $paginaModel->where($paginaModel->getTableName() . '.sistema = 0');
        $paginaModel->where($paginaModel->getTableName() . '.menu = 1');
        $paginaModel->order(array('pai_id', 'ordem'));
        
        $node = new Goweb_Js_Tree_Node(0, -1, translateAdmin('Raiz'));
        $node->form_element = 'radio';
        
        $tree->addNode($node);
        $paginas = $paginaModel->fetchAll();
        if ($paginas) {
            foreach ($paginas as $pagina) {
                $node = new Goweb_Js_Tree_Node($pagina->id,
                                               $pagina->pai_id,
                                               $pagina->titulo);
                $node->form_element = 'radio';
                $tree->addNode($node);
            }
        }
        
        $form = new Goweb_Form('menu_list');
        $form->pai_id = $form->Tree();
        $form->pai_id->label = translateAdmin('Ramo da &Aacute;rvore');
        $form->pai_id->tree = $tree;
        $form->pai_id->expand = false;
        $form->pai_id->validators->Required(translateAdmin('O campo <b>{{campo}}</b> &eacute; de preenchimento obrigat&oacute;rio.', $form->pai_id->label));
        
        $form->nivel_max = $form->Text();
        $form->nivel_max->label = translateAdmin('N&uacute;mero de N&iacute;veis do menu:');
        
        $form->rows_per_page = $form->Text();
        $form->rows_per_page->label = translateAdmin('N&uacute;mero de linhas por p&aacute;gina');
        $form->rows_per_page->maxlength = 2;
        $form->rows_per_page->size = 2;
        $form->rows_per_page->value = '20';
        $form->rows_per_page->validators->Lesser(translateAdmin('No campo <b>{{campo}}</b> o valor n&atilde;o pode ser superior a 50.', $form->rows_per_page->label),
                                                 array('number' => 50));
        return $form;
    }
    
    /**
     * Componente para a insercao do mapa do site
    */
    public function mapaAction() {
        $form = new Goweb_Form('mapa_site');
        return $form;
    }
    
    /**
     * Componente para a insercao do formulario de pesquisa nos
     * conteudos do site
    */
    public function pesquisaAction() {
        $form = new Goweb_Form('pesquisa_list');
        return $form;
    }    
}
