<?php

/**
 * slot actions.
 *
 * @package    sirevih
 * @subpackage slot
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 2692 2006-11-15 21:03:55Z fabien $
 */
class slotComponents extends sfComponents
{

  public function executeNav()
  {

    // Constantes YML
    $constantes = sfYaml::load(sfConfig::get('sf_root_dir').'/config/const.yml');

    //Objeto Usuario
    $usuario = UsuarioPeer::retrieveByPk($this->getUser()->getAttribute('id'));

    $c = new Criteria();

    // $menu_id => Array con todos los id de menu
    $menu_ids = array();

    if ($usuario) {

      // Lista de roles para este usuario
      $c->add(UsuarioHasRolPeer::USUARIO_ID, $usuario->getId());

      $usuario_has_rol = UsuarioHasRolPeer::doSelect($c);

      $c->clear();

      foreach ($usuario_has_rol as $has_rol) {

        // Se verifica que este rol pertenezca a esta aplicación
        $rol = RolPeer::retrieveByPk($has_rol->getRolId());

        if ($rol->getSysAppId() == $constantes["app_solicitud"]) {

          // Se buscan los menú a los que puede acceder este rol
          $c->add(RolMenuPeer::ROL_ID, $has_rol->getRolId());

          $rol_menu = RolMenuPeer::doSelect($c);

          $c->clear();

          foreach ($rol_menu as $menu) {

            // Se compara cada id del menu con los que ya existen en menu_id

            // $ne => Cantidad de veces que no coincide este id de opcion_menu con los de la lista de menu_ids
            $ne = 0;

            foreach ($menu_ids as $menu_id) {

              if ($menu_id == $menu->getOpcionMenuId()) {

                // ya está en la lista, y se nos salimos del foreach
                break;

              }
              else {

                $ne++;

              }

            }

            if ($ne == count($menu_ids)) {

              // Nuevo menu_id
              array_push($menu_ids,$menu->getOpcionMenuId());

            }

          }

        }

      }

    }

    // Finalmente se buscan las opciones_menu para mostrar a este usuario
    $c->add(OpcionMenuPeer::ID, $menu_ids, Criteria::IN);

    $opcion_menu = OpcionMenuPeer::doSelect($c);

    $c->clear();

    $this->usuario = $usuario;

    $this->opcion_menu = $opcion_menu;

  }

}
