<?php

class Agro_Plugin_Security extends Zend_Controller_Plugin_Abstract {

    public function preDispatch(Zend_Controller_Request_Abstract $Request) {
        $module = $Request->getModuleName();
        $controller = $Request->getControllerName();
        $action = $Request->getActionName();

        if (!$Request->isXmlHttpRequest()) {
            if (Zend_Auth::getInstance()->hasIdentity()) {
                if ($action != 'excel') {
                    if ($module != 'default' && $module != 'agronet') {
                        $resource = '';
                        if ($module && $controller && $action) {
                            $resource = "$module:$controller:$action";
                        } else if ($module && $controller && !$action) {
                            $resource = "$module:$controller";
                        } else if ($module && !$controller && !$action) {
                            $resource = "$module";
                        }

                        if (Agro_Util::checkPermission($resource) && $module != 'default') {
                            if ($Request->getParam('menu')) {
                                $Filtro = new Zend_Session_Namespace('filtro');
                                $Filtro->unsetAll();
                            }
                        } else {
                            Zend_Layout::getMvcInstance()->getView()->title = 'Erro de Permissão';
                            Zend_Layout::getMvcInstance()->getView()->error = 'Você não tem permissão para acessar esta tela. Contate o administrador.';

                            $Request->setModuleName('default');
                            $Request->setControllerName('error');
                            $Request->setActionName('privileges');
                        }
                    }
                }
            } else {
                if ($Request->getControllerName() != 'login' && 
                    ($Request->getModuleName() == 'default' && $Request->getControllerName() != 'corretor')) {
                    $this->getResponse()->setRedirect('/login');
                }
            }
        }
    }

    public function routeShutdown(Zend_Controller_Request_Abstract $request) {
        $User = Zend_Auth::getInstance()->getIdentity();
        $View = Zend_Layout::getMvcInstance()->getView();
        $View->moduleName = $request->getModuleName();
        $View->controllerName = $request->getControllerName();
        $View->actionName = $request->getActionName();
        $View->user = $User;

        if ($request->getModuleName() != 'default') {
            if (strtolower($request->getControllerName()) != 'login' && !Zend_Auth::getInstance()->hasIdentity()) {
                $this->getResponse()->setRedirect('/login');
            }
        }
    }

}