<?php
/**
 * Created by JetBrains PhpStorm.
 * User: Luis
 * Date: 16/12/13
 * Time: 20:55
 * To change this template use File | Settings | File Templates.
 */

use Auth\Model_Auth_User;
use Auth\Model_Auth_Group;
use Fuel\Core\Response;
use \Parser\View;
use Auth\Auth;

class Controller_Administracion_Usuarios_Index extends \Controller_App{

    //Variable para guardar las migas de pan que van a aparecer en las vistas
    private $_bc = array();

    //Array con los elementos del menu que se deben marcar con la clase "active" para que esten seleccionados en el menu.
    private $_option_menu=array('maestras','usuarios');

    public function before(){

        //Se cargan funciones de javascript especificas de esta funcionalidad
        Casset::js('administracion/usuarios/index.js');

        //Se marca la navegación en forma de migas de pan. Cada miga de pan la forman dos variables:
        //  ds  : String a mostrar
        //  url : url del enlace en modo absoluto
        $this->_bc[] = array('ds'=>'Inicio','url'=>'/dashboard');
        $this->_bc[] = array('ds'=>'Maestras','url'=>'/dashboard');
        $this->_bc[] = array('ds'=>'Usuarios','url'=>'/usuarios','class'=>'active');

        parent::before();
    }

    public function get_index()
    {
        $view = View::forge('administracion/usuarios/index.twig');

        $view->usuarios = Model_Auth_User::query()->get();
        $view->grupos   = Model_Auth_Group::query()->where('id','!=',1)->get();

        //Titulo de la vista
        $view->title = "Gestión de Usuarios";

        //Paso de las migas de pan a la vista
        $view->bc = $this->_bc;

        //Paso de las opciones de menu que deben aparecer seleccionadas
        $view->option_menu = $this->_option_menu;

        return Response::forge($view);
    }

    public function get_update($id){
        //Se recuperan los datos a mostrar en la vista que peuden cambair en función de como se llame a esa vista
        $usuario = Model_Auth_User::query()->where('id',$id)->get_one();

        //  A : Alta || M : Modificacion
        if($id == 0){
            return $this->load_form($usuario, 'A');
        }else{
            return $this->load_form($usuario, 'M');
        }
    }

    public function get_profile()
    {
        $view = View::forge('administracion/usuarios/profile.twig');

        $user_logged = Auth::get_user_id();
        $auth_user = \Auth\Model_Auth_User::query()->where('id',$user_logged)->get_one();
        $view->usuario = $auth_user;

        //Titulo de la vista
        $view->title = "My profile";

        //Paso de las opciones de menu que deben aparecer seleccionadas
        $view->option_menu = $this->_option_menu;

        return Response::forge($view);
    }



    public function post_update(){

        $usuario = Model_Auth_User::forge();

        if(Input::post('id','')!=''){
            $usuario = Model_Auth_User::query()->where('id',Input::post('id',''))->get_one();
        }

        $usuario->nombre    = Input::post('nombre','');
        $usuario->apellidos = Input::post('apellidos','');
        $usuario->email     = Input::post('email','');
        $usuario->username  = Input::post('user','');

        if(Input::post('grupo','')!=''){
            $usuario->group_id  = Input::post('grupo','');
        }

        if(Input::post('id','')!='' and Input::post('password','') != ''){
            $usuario->set_password(Input::post('password',''));
        }else if(Input::post('id','')==''){
            $usuario->set_password(Input::post('password',''));
        }

        //Comprobamos si ya existe en la BBDD un usuario con el mismo codigo y si es así, devolvemos un error.
        $found = Model_Auth_User::query()->where('username' , $usuario->username )->get_one();

        //no existe username o existe pero es del propio usuario
        if ((is_null($found) || $found == "") || ($found != "" and $usuario->id != '' and $found->id == $usuario->id)){
            try{
                $usuario->save();
                Session::set_flash('message',array('type'=>'success','text'=>'Grabación realizada con éxito.'));
                return $this->load_form($usuario,'M');
            }
            catch(Exception $e){
                Log::error('administracion/usuarios/controller/index/post_update--->'.$e->getMessage());
                Session::set_flash('message',array('type'=>'error','text'=>'No se ha podido realizar la grabación.'));
            }
        }
        else{
            Session::set_flash('message',array('type'=>'error','text'=>'No se ha podido realizar la grabación. El nombre de usuario ya está en uso.'));
        }

        //  A : Alta de usuario || M : Modificacion de usuario
        return $this->load_form($usuario,'M');


    }

    public function load_form($usuario, $tipo){

        //Se selecciona la vista a devolver
        $view = View::forge('administracion/usuarios/form.twig');

        //En funcion del tipo, cambia el titulo
        $view->title = (($tipo=='A')?"Alta":"Modificación")." de Usuarios";

        //Se recuperan los datos de los desplegables de la vista
        $view->grupos = Model_Auth_Group::query()->where('is_assignable','S')->get();

        //Se añaden los datos a la vista
        $view->usuario = $usuario;

        //Se añade una miga de pan a la vista
        $this->_bc[] = array('ds'=>$view->title,'url'=>'','class'=>'active');

        //Paso de las migas de pan a la vista
        $view->bc = $this->_bc;

        //Paso de las opciones de menu que deben aparecer seleccionadas
        $view->option_menu = $this->_option_menu;

        return Response::forge($view);
    }

    public function post_active(){

        $id = Input::post('id','');

        $usuario = Model_Auth_User::query()->where('id',$id)->get_one();

        if ($usuario){

            try{
                $usuario->is_active = $usuario->is_active=="S"?"N":"S";
                $usuario->save();
                Session::set_flash('message',array('type'=>'success','text'=>'Modificaciones realizadas con éxito.'));
                return true;

            }
            catch(Exception $e){
                Log::error('administracion/controller/index/post_update--->'.$e->getMessage());
            }
        }

        Session::set_flash('message',array('type'=>'error','text'=>'No se ha podido realizar la grabación.'));
        return false;
    }
}