<?php

/**
 * Goweb Sitemanager 5 Framework
 *
 * @version    5.0.0
 * @category   Goweb
 * @package    Goweb_Validate
 * @author     I&D <dev@goweb.pt>, Pedro Pinto <ppinto@goweb.pt>
 * @copyright  2009 (c) Goweb (http://www.goweb.pt)
 */

/**
 * Classe abstracta para a instalacao dos medulos
 *
 * @version    5.0.0
 * @category   Goweb
 * @package    Goweb_Setup
 * @author     I&D <dev@goweb.pt>, Pedro Pinto <ppinto@goweb.pt>
 * @copyright  2009 (c) Goweb (http://www.goweb.pt)
 */
abstract class Goweb_Setup {

    /**
     * Nome do medulo
     *
     * @var  string
     */
    protected $_nome = '';

    /**
     * Tetulo do medulo
     *
     * @var  string
     */
    protected $_titulo = '';

    /**
     * Se e para ser listado no menu do CMS
     *
     * @var  bool
     */
    protected $_menu = true;

    /**
     * Se e componente
     *
     * @var  bool
     */
    protected $_componente = true;

    /**
     * Se e pesquisivel
     *
     * @var  bool
     */
    protected $_pesquisa = true;

    /**
     * Se pertence ao sistema de permiss&otilde;es
     *
     * @var  bool
     */
    protected $_permissao = true;

    /**
     * Lista dos models
     *
     * @var  array
     */
    protected $_models = array();

    /**
     * Metodo para adicionar o models.
     *
     * @throws  Goweb_Exception  Se o metodo n&atilde;o for implementado
     */
    public function initModels() {
        throw new Goweb_Exception('e necess&aacute;rio implementar metodo initModels() na classe ' . get_class($this));
    }

    /**
     * Instancia um model e acrescenta-o e lista.
     *
     * @param  string  $model  Nome do model a adicionar
     */
    public function addModel($model) {
        if (!array_key_exists($model, $this->_models)) {
            $this->_models[$model] = Goweb::getModelInstance($model, 'db');
        }
    }

    /**
     * Retorna a lista dos models.
     *
     * @return  array
     */
    public function getModels() {
        return $this->_models;
    }

    /**
     * Retorna o nome do medulo.
     *
     * @return  string
     */
    public function getNome() {
        if (strlen($this->_nome) == 0) {
            throw new Goweb_Exception('e necess&aacute;rio definir o nome do medulo atraves do atributo Goweb_Setup::$_nome');
        }
        return $this->_nome;
    }

    /**
     * Retorna o tetulo do medulo.
     *
     * @return  string
     */
    public function getTitulo() {
        if (strlen($this->_titulo) == 0) {
            throw new Goweb_Exception('e necess&aacute;rio definir o tetulo do medulo atraves do atributo Goweb_Setup::$_titulo');
        }
        return $this->_titulo;
    }

    /**
     * Retorna se e para ser listado no menu do CMS.
     *
     * @return  bool
     */
    public function getMenu() {
        return $this->_menu;
    }

    /**
     * Retorna se e componente.
     *
     * @return  bool
     */
    public function getComponente() {
        return $this->_componente;
    }

    /**
     * Retorna se e pesquisivel.
     *
     * @return  bool
     */
    public function getPesquisa() {
        return $this->_pesquisa;
    }

    /**
     * Retorna se faz parte do sistema de permiss&otilde;es
     *
     * @return  bool
     */
    public function getPermissao() {
        return $this->_permissao;
    }

    /**
     * Insere os dados iniciais.
     *
     */
    public function initDefaultData() {}
}