<?php

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

/**
 * Classe de geracao de interfaces Admin
 *
 * @version    5.0.0
 * @category   Goweb
 * @package    Goweb_Admin
 * @author     I&D <dev@goweb.pt>, Pedro Pinto <ppinto@goweb.pt>
 * @copyright  2009 (c) Goweb (http://www.goweb.pt)
 */
class Goweb_Admin {
    
    /**
     * Titulo da administracao
     *
     * @var string
    */
    protected $_title = null;
    
    /**
     * Seccoes do Modulo
     *
     * @var array
    */
    protected $_sections = array();
    
    /**
     * Seccao default
     *
     * @var string
    */
    protected $_defaultSection = null;
    
    /**
     * Configuracao
     *
     * @var Goweb_Config
    */
    protected $_moduleConfig = null;
    
    public function __construct() {
        $this->_setup();
    }

    /**
     * Devolve o titulo
     *
     * @return string
    */
    public function getTitle() {
        if (!$this->_title) {
            $this->_title = str_replace('_admin', '', strtolower(get_class($this)));
            $this->_title = str_replace(array('-', '_', '.'), ' ', $this->_title);
            $this->_title = preg_replace('[^a-z0-9 ]', '', $this->_title);
            $this->_title = ucwords($this->_title);
        }
        return $this->_title;
    }
    
    /**
     * Devolve as seccoes do modulo
     *
     * @return array
    */
    public function getSections() {
        return $this->_sections;
    }

    /**
     * Devolve a seccao
     *
     * @param string
     *
     * @return Goweb_Admin_Section
    */
    public function getSection($actionName) {
        if (strlen($actionName) && array_key_exists($actionName, $this->_sections)) {
            return $this->_sections[$actionName];
        }
        return null;
    }

    /**
     * Devolve a seccao default da administracao
     *
     * @return string
    */
    public function getDefaultSection() {        
        return $this->getSection($this->_defaultSection);
    }

    /**
     * Devolve a seccao default do modulo
     *
     * @return string
    */
    public function getDefaultSectionName() {
        return $this->_defaultSection;
    }

    /**
     * Verifica se a seccao existe
     *
     * @param string
     *
     * @return boolean
    */
    public function sectionExists($section) {
        if (array_key_exists($section, $this->_sections)) {
            return true;
        }
        return false;
    }
    
    /**
     * Adiciona uma nova seccao ao array de seccoes
     *
     * @param string
     * @param Goweb_Admin_Section
    */
    public function _addSection($actionName, Goweb_Admin_Section $section) {
        $section->checkLabels();
        $this->_sections[$actionName] = $section;
        
        if (!$this->_defaultSection) {           
            $this->_defaultSection = $actionName;
        }
    }

    /**
     * Este metodo deve ser implementado nas classes que herdam da Goweb_Admin
    */
    
    /**
     * Metodo obrigatorio. Informa a definicao da tabela
     * referente ao Model em questao.
    */
    protected function _setup() {
        throw new Goweb_Exception('E necessario implementar o metodo "Goweb_Admin::_setup()".');
    }
}