<?php

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

/**
 * Goweb Sitemanager 5 Framework
 * @version    5.0.0
 * @category   Frontoffice
 * @package    Catalogo
 * @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 Catalogo_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('list'           => array('title'  => translateAdmin('Listagem de Cat&aacute;logo'),
                                                          'helper' => translateAdmin('Inserir listagem de produtos e categorias.')),
                                'listCategorias' => array('title'  => translateAdmin('Listagem das Categorias'),
                                                          'helper' => translateAdmin('Inserir a listagem de todas as categorias de produtos.')),
                                'detail'         => array('title'  => translateAdmin('Detalhe de produto'),
                                                          'helper' => translateAdmin('Inserir detalhe do produto seleccionado.')),
                                'destaques'      => array('title'  => translateAdmin('Produtos em Destaque'),
                                                          'helper' => translateAdmin('Inserir componente para os produtos em destaque.')),
                                'novidades'      => array('title'  => translateAdmin('Produtos em Novidade'),
                                                          'helper' => translateAdmin('Inserir componente para os produtos em novidade.')),
                                'menu'           => array('title'  => translateAdmin('Cat&aacute;logo Menu'),
                                                          'helper' => translateAdmin('Inserir o menu das categorias de produtos.')));
    }
    
    /**
     * Listagem de produtos
    */
 
	    public function listAction() {
        // "categoria_id" - Categoria a ser mostrada
        Goweb::loadClass('Goweb_Js_Tree');
        Goweb::loadClass('Goweb_Js_Tree_Node');
        $tree = new Goweb_Js_Tree('categoria_id');
        $tree->useLines = false;
        
        $categoriaModel = Goweb::getModelInstance('Catalogo_Model_Categoria', 'db', false);
        $categorias = array();
        
        $node = new Goweb_Js_Tree_Node(0, -1, translateAdmin('Todas'));
        $node->form_element = 'radio';

        $request = Goweb::registry('request');
        $selected = $request->categoria_id ? $request->categoria_id : '0';
        if ($selected == '0') {
            $node->form_checked = true;
        }
        
        $tree->addNode($node);
        $categoriasRowset = $categoriaModel->fetchAll();        
        
        if ($categoriasRowset) {
            foreach ($categoriasRowset as $categoria) {
                $node = new Goweb_Js_Tree_Node($categoria->id,
                                               $categoria->pai_id,
                                               htmlentities($categoria->titulo));
                $node->form_element = 'radio';
                if ($categoria->id === $selected) {
                    $node->form_checked = true;
                }
                $tree->addNode($node);
            }
        }

        $form = new Goweb_Form('catalogo_list');
        $form->categoria_id = $form->Tree();
        $form->categoria_id->label = translateAdmin('Categoria');
        $form->categoria_id->tree = $tree;
        $form->categoria_id->expand = true;
        $form->categoria_id->validators->Required(translateAdmin('O campo <b>{{campo}}</b> &eacute; de preenchimento obrigat&oacute;rio.', $form->categoria_id->label));
        
        // "rows" - N�mero de linhas a ser mostradas na listagem
        $form->rows = $form->Text();
        $form->rows->label = 'N&uacute;mero de linhas por p&aacute;gina';
        $form->rows->maxlength = 2;
        $form->rows->size = 2;
        $form->rows->value = '20';
        $form->rows->validators->Integer(translateAdmin('No campo <b>{{campo}}</b>  o valor dever&aacute; ser inteiro.', $form->rows->label));
        $form->rows->validators->Lesser(translateAdmin('No campo <b>{{campo}}</b> o valor n&atilde;o pode ser superior a 50.', $form->rows->label),
                                        array('number' => 50));                            
        return $form;
    }
    /**
     * Listagem das Categorias
    */
    public function listCategoriasAction() {
        $form = new Goweb_Form('list_categorias');
        return $form;
    }
    
    /**
     * Inserir detalhe de um produto
    */
    public function detailAction() {
        // "id" - ID do produto
        $form = new Goweb_Form('produtos_list');
        $form->id = $form->Select();
        $form->id->label = translateAdmin('Produto a ser mostrado');
        $form->id->size = 10;

        $produtoModel = Goweb::getModelInstance('Catalogo_Model_Produto', 'db');
        $produtoModel->loadForeigns(false);
        $produtos = $produtoModel->fetchAll(array('id', 'titulo', 'referencia'));
        $options = array();
        foreach ($produtos as $produto) {
            $options[$produto->id] = $produto->titulo . (strlen($produto->referencia) ? ' - '. $produto->referencia : '');
        }
        $form->id->options = $options;
        $form->id->validators->Required(translateAdmin('O campo <b>{{campo}}</b> &eacute; de preenchimento obrigat&oacute;rio.', $form->id->label));
        
        return $form;
    }
    
    /**
     * Listar produtos em destaque
    */
    public function destaquesAction() {
    	// "categoria_id" - Categoria a ser mostrada
        Goweb::loadClass('Goweb_Js_Tree');
        Goweb::loadClass('Goweb_Js_Tree_Node');
        $tree = new Goweb_Js_Tree('categoria_id');
        $tree->useLines = false;
        
        $categoriaModel = Goweb::getModelInstance('Catalogo_Model_Categoria', 'db', false);
        $categorias = array();
        
        $node = new Goweb_Js_Tree_Node(0, -1, 'Todas');
        $node->form_element = 'radio';

        $request = Goweb::registry('request');
        $selected = $request->categoria_id ? $request->categoria_id : '0';
        if ($selected == '0') {
            $node->form_checked = true;
        }
        
        $tree->addNode($node);
        $categoriasRowset = $categoriaModel->fetchAll();        
        
        if ($categoriasRowset) {
            foreach ($categoriasRowset as $categoria) {
                $node = new Goweb_Js_Tree_Node($categoria->id,
                                               $categoria->pai_id,
                                               htmlentities($categoria->titulo));
                $node->form_element = 'radio';
                if ($categoria->id === $selected) {
                    $node->form_checked = true;
                }
                $tree->addNode($node);
            }
        }

       	$form = new Goweb_Form('destaque_produto');
        $form->categoria_id = $form->Tree();
        $form->categoria_id->label = translateAdmin('Categoria');
        $form->categoria_id->tree = $tree;
        $form->categoria_id->expand = true;
        $form->categoria_id->validators->Required(translateAdmin('O campo <b>{{campo}}</b> &eacute; de preenchimento obrigat&oacute;rio.', $form->categoria_id->label));
        
        $form->nro_produtos = $form->Text();
        $form->nro_produtos->label = translateAdmin('N&uacute;mero de Produtos em Destaque');
        $form->nro_produtos->setValue('1');
        $form->nro_produtos->size = 10;
        
        return $form;
    } 
     
    /**
     * Listar produtos em novidade
    */
    public function novidadesAction() {
        $form = new Goweb_Form('novidade_produto');
        
        $form->nro_produtos = $form->Text();
        $form->nro_produtos->label = translateAdmin('N&uacute;mero de Produtos em Novidade');
        $form->nro_produtos->setValue('1');
        $form->nro_produtos->size = 10;
        
        return $form;
    }
   
    /**
     * Inserir menu do catalogo de produtos.
    */
    public function menuAction() {
        $form = new Goweb_Form('menu_catalogo');
        return $form;
    }
}