|
<?php |
|
/** |
|
* Registra objeto Zend_Navigation e disponibiliza para uso em: |
|
* - Menus |
|
* - Sitemap |
|
* - Breadcrumbs |
|
* Ja aplica as regras de ACLs |
|
* |
|
* @author Domingos Teruel <[email protected]> |
|
* |
|
*/ |
|
class Zpf_Controller_Plugin_ModuleBasedNavigation extends Zend_Controller_Plugin_Abstract |
|
{ |
|
public function preDispatch (Zend_Controller_Request_Abstract $request) |
|
{ |
|
/** Recupera o Modulo corrente **/ |
|
$module = $request->getModuleName(); |
|
/** Verifica se o modulo e vazio, setamos o modulo padrao (portal) **/ |
|
if(empty($module)) $module = "portal"; |
|
/** Sem usuario autenticado e modulo admin na ha acesso a nada. **/ |
|
if(!Zend_Auth::getInstance()->hasIdentity() && $module == 'admin') { |
|
return; |
|
} |
|
/** Recuperamos o objeto View Corrente **/ |
|
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); |
|
$viewRenderer->initView(); |
|
$view = $viewRenderer->view; |
|
if($module == 'portal') { |
|
if(file_exists(APPLICATION_PATH . DS . 'config/navigation' . DS . strtolower($module) . '.ini')) { |
|
$config = new Zend_Config_Ini( APPLICATION_PATH . DS . 'config/navigation' . DS . strtolower($module) . '.ini'); |
|
$navigation = new Zend_Navigation($config); |
|
$view->navigation($navigation); |
|
}else { |
|
throw new Zend_Controller_Exception('Arquivo de navegação necessário.'); |
|
} |
|
}else { |
|
/** Recuperamos o objeto ACL **/ |
|
$registry = Zend_Registry::getInstance(); |
|
$acl = $registry->get('acl'); |
|
/** Dados do Usuario Logado **/ |
|
$auth = Zend_Auth::getInstance()->getIdentity(); |
|
if(file_exists(APPLICATION_PATH . DS . 'config/navigation' . DS . strtolower($module) . '.xml')) { |
|
$config = new Zend_Config_Xml( APPLICATION_PATH . DS . 'config/navigation' . DS . strtolower($module) . '.xml'); |
|
$navigation = new Zend_Navigation($config); |
|
if (false !== ($navItem = $navigation->findOneBy('id','documentos-internos-cat')) ) { |
|
$navItem->addPages($this->getCategoriasArquivosInternos()); |
|
} |
|
$view->navigation($navigation) |
|
->setAcl($acl) |
|
->setRole($auth->usuario->getRoleId()); |
|
}else { |
|
throw new Zend_Application_Exception('Falta arquivo de Configuração da Navegação.'); |
|
} |
|
} |
|
} |
|
protected function getCategoriasArquivosInternos() |
|
{ |
|
$model = new Model_TipoArquivo(); |
|
$recordSet = $model->fetchAll(); |
|
$options = array(); |
|
foreach($recordSet as $record) { |
|
array_push($options, array( |
|
'module' => 'admin', |
|
'controller' => 'documentos-internos', |
|
'action' => 'listar', |
|
'label' => $record->nome, |
|
'title' => "Exibir todos os arquivos em {$record->nome}", |
|
'params' => array('categoria' => $record->id) |
|
)); |
|
} |
|
return $options; |
|
} |
|
} |