<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    require_once "webService/funciones.php";
    require_once "funciones/misFunciones.php";
    
    class Main extends CI_Controller {
        
        
        var $ci;
        var $llaveActual;
        
        public function __construct()
        {
            parent::__construct();
            
            //$this->set_js_lib($this->default_javascript_path.'../assets/grocery_crud/js/jquery_plugins/jquery.noty.js');
            
            $this->output->set_header('Last-Modified: ' . gmdate("D, d M Y H:i:s") . ' GMT');
            $this->output->set_header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
            $this->output->set_header('Pragma: no-cache');
            $this->output->set_header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
            
            $this->load->database();
            $this->load->helper('url');
            $this->load->library(array('session','form_validation'));
            $this->load->helper(array('url','form', 'email', 'security'));
            
            $this->load->model('main_model');
            $this->load->model('login_model');
            
            $this->load->library('grocery_CRUD');
            
            $this->ci =& get_instance();
            $this->config->set_item('language', 'spanish');
        }
        
        public function index()
        {
            $this->_example_output((object)array('output' => ''));
        }
        
        public function _example_output($output=null, $titulo='', $view='', $plantilla='main.php')
        {
            if($this->session->userdata('perfil') == FALSE || $this->session->userdata('perfil') != 'administrador')
            {
                redirect(base_url().'login');
            }
            else
            {
                if ($view != '')
                {
                    $objeto = $this->ci->load->view($view, null, TRUE);
                    $output = array('output' => $objeto);
                }
                $output = integraEstilos($output, $titulo);
                $this->load->view($plantilla, $output);
            }
        }
        
        function callback_after_upload($uploader_response,$field_info, $files_to_upload)
        {
            $this->load->library('image_moo');
            
            //Is only one file uploaded so it ok to use it with $uploader_response[0].
            $file_uploaded = $field_info->upload_path.'/'.$uploader_response[0]->name;
            
            $this->image_moo->load($file_uploaded)->resize(800,600)->save($file_uploaded,true);
            
            return true;
        }
        
        //******** USUARIOS
        #pragma mark USUARIO
        public function administraUsuarios()
        {
            $crud = new grocery_CRUD();
            
            $crud->set_table('usuario');
            $crud->columns('correo','nombre', 'supervisor', 'verificador', 'fotografia');
            $crud->set_subject('Usuario');
            $crud->set_table_title("<a href=\"". base_url(). "index.php/main/\">Regresar a principal</a>");
            $crud->callback_edit_field('contrasena',array($this,'set_password_input_to_empty'));
            $crud->callback_add_field('contrasena',array($this,'set_password_input_to_empty'));
            $crud->display_as('contrasena','Contraseña');
            
            $crud->callback_before_insert(array($this,'encrypt_password'));
            $crud->callback_before_update(array($this,'encrypt_password_update'));
            $this->config->set_item('grocery_crud_file_upload_allow_file_types','gif|jpeg|jpg|png');
            $crud->set_field_upload('fotografia','assets/uploads/fotosContactos');
            
            $crud->add_action('Tokens', base_url().'assets/grocery_crud/themes/flexigrid/css/images/phone.png', '', '', array($this,'linkTokens'));
            
            $output = $crud->render();
            $this->_example_output($output, 'Administrar usuarios');
        }
        
        function encrypt_password($post_array, $primary_key = null)
        {
            $this->load->helper('security');
            $post_array['contrasena'] = do_hash($post_array['contrasena'], 'md5');
            return $post_array;
        }
        
        function encrypt_password_update($post_array, $primary_key = null)
        {
            $this->load->helper('security');
            if(!empty($post_array['contrasena']))
            {
                $post_array['contrasena'] = do_hash($post_array['contrasena'], 'md5');
            }
            else
            {
                unset($post_array['contrasena']);
            }
            return $post_array;
        }
        
        function set_password_input_to_empty() {
            return "<input type='password' name='contrasena' value='' />";
        }
        
        public function linkTokens ($primary_key , $row)
        {
            return base_url(). 'index.php/main/administraTokens/' . $row->id;
        }
        
        public function administraTokens($row)
        {
            $usuario = $this->main_model->traeUsuario($row);
            
            $crud = new grocery_CRUD();
            $crud->set_subject("Tokens de $usuario->nombre");
            $crud->set_table_title("<a href=\"". base_url(). "index.php/main/administraUsuarios/\">Regresar a usuarios</a>");
            $crud->set_table('token');
            $crud->columns('token');
            $crud->where("idUsuario=$row");
            $crud->set_subject('Token');
            $crud->unset_add();
            //$crud->unset_edit();
            //$crud->unset_delete();
            $crud->unset_read();
            
            $output = $crud->render();
            
            $this->_example_output($output, 'Administrar tokens de '. $usuario->nombre);
        }
        
        public function cambiaContrasena()
        {
            $this->_example_output(null, 'Cambiar contraseña', 'cambiarContrasena');
        }
        
        public function cambiar_contrasena()
        {
            $this->form_validation->set_rules('password', 'password', 'required|trim|min_length[5]|max_length[150]|xss_clean');
            $this->form_validation->set_rules('passwordNuevo', 'passwordNuevo', 'required|trim|min_length[5]|max_length[150]|xss_clean');
            $this->form_validation->set_rules('passwordNuevo2', 'passwordNuevo2', 'required|trim|min_length[5]|max_length[150]|xss_clean|matches[passwordNuevo]');
            if ($this->form_validation->run() == FALSE)
            {
                $this->cambiaContrasena();
            }
            else
            {
                $username = $this->session->userdata('correo');
                $password = md5($this->input->post('password'));
                $passwordNvo = md5($this->input->post('passwordNuevo'));
                if ($this->login_model->login_correcto($username,$password))
                {
                    $this->login_model->actualiza_login($username,$passwordNvo);
                    $this->session->set_flashdata('notySuccess','Se ha cambiado la contraseña.');
                    redirect(base_url());
                }
                else
                {
                    $this->session->set_flashdata('notyError','La contraseña actual es incorrecta');
                    $this->cambiaContrasena();
                }
            }
        }
        
        //******** SECCIONES
        #pragma mark SECCIONES
        public $seccionActual;
        public function administraSeccion()
        {
            $this->tipoCatalogo = $this->ci->uri->segment(3);
            
            $crud = new grocery_CRUD();
            
            $crud->set_table('seccion');
            $crud->columns('descripcion', 'orden');
            $crud->set_table_title("<a href=\"". base_url(). "index.php/main/\">Regresar a principal</a>");
            
            $crud->add_action('Items', base_url().'assets/grocery_crud/themes/flexigrid/css/images/config.png', '', '', array($this,'linkItems'));
            
            $crud->display_as('descripcion', 'Descripción');
            
            $output = $crud->render();
            $this->_example_output($output, 'Verificación');
        }
        
        public function linkItems ($primary_key , $row)
        {
            return base_url(). 'index.php/main/administraItems/' . $row->id;
        }

        public function administraItems($row)
        {
            $this->seccionActual = $row;
            $seccion = $this->main_model->traeSeccion($row);
            
            $crud = new grocery_CRUD();
            
            $crud->set_table('catalogo');
            $crud->where ("idSeccion={$this->seccionActual}");
            $crud->columns('descripcion', 'prefijo', 'orden', 'tipo');
            $crud->set_table_title("<a href=\"". base_url(). "index.php/main/administraSeccion\">Regresar a secciones</a>");
            
            if ($crud->getState() != 'insert')
            {
                $crud->unset_add_fields( 'idSeccion');
                $crud->unset_edit_fields('idSeccion');
            }
            
            $crud->add_action('Items', base_url().'assets/grocery_crud/themes/flexigrid/css/images/config.png', '', '', array($this,'linkCatalogo'));
            
            $crud->display_as('descripcion', 'Descripción');
            $crud->callback_before_insert(array($this,'agregaIdSeccion'));
            
            $output = $crud->render();
            $this->_example_output($output, "Items de {$seccion->descripcion}");
        }
        
        function agregaIdSeccion($post_array, $primary_key = null)
        {
            $post_array['idSeccion'] = $this->seccionActual;
            return $post_array;
        }
        
        public function linkCatalogo ($primary_key , $row)
        {
            return base_url(). "index.php/main/administraCatalogo/{$row->prefijo}/{$row->descripcion}";
        }
        
        //******** CATALOGOS
        #pragma mark CATALOGOS
        public $tipoCatalogo;
        public function administraCatalogo()
        {
            $idSeccion = '';
            
            $this->tipoCatalogo = $this->ci->uri->segment(3);
            
            $this->db->where ('prefijo', $this->tipoCatalogo);
            $query = $this->db->get ('catalogo');
            if ($query->num_rows() == 1)
            {
                $idSeccion = $query->row()->idSeccion;
            }
            
            $crud = new grocery_CRUD();
            
            $crud->set_table('catalogos');
            $crud->columns('descripcion', 'tipoLectura');
            $crud->where("catalogos.tipo=\"$this->tipoCatalogo\"");
            $crud->set_subject(urldecode($this->ci->uri->segment(4)));
            if ($idSeccion == '')
                $crud->set_table_title("<a href=\"". base_url(). "index.php/main\">Regresar a principal</a>");
            else
                $crud->set_table_title("<a href=\"". base_url(). "index.php/main/administraItems/{$idSeccion}\">Regresar a sección</a>");
            
            $crud->display_as('tipoLectura', 'Tipo lectura')->
            display_as('descripcion', 'Descripción');
            
            
            $crud->callback_before_insert(array($this,'agregaTipoCatalogo'));
            
            if ($crud->getState() != 'insert')
            {
                $crud->unset_add_fields( 'tipo');
                $crud->unset_edit_fields('tipo');
            }
            
            $output = $crud->render();
            $this->_example_output($output, 'Catálogo de '. urldecode($this->ci->uri->segment(4)));
            
        }
        
        function agregaTipoCatalogo($post_array, $primary_key = null)
        {
            $post_array['tipo'] = $this->tipoCatalogo;
            return $post_array;
        }
        
        //******** VERIFICADORES
        #pragma mark VERIFICADORES
        public function administraVerificadores()
        {
            $crud = new grocery_CRUD();
            
            $crud->set_table('usuario');
            $crud->where('verificador=1');
            $crud->columns('nombre');
            $crud->set_subject('Verificador');
            $crud->set_table_title("<a href=\"". base_url(). "index.php/main/\">Regresar a principal</a>");
            $crud->unset_add();
            $crud->unset_delete();
            $crud->unset_edit();
            $crud->unset_read();
            
            $crud->add_action('Rutas', base_url().'assets/grocery_crud/themes/flexigrid/css/images/ruta.png', '', '', array($this,'linkRutas'));
            
            $output = $crud->render();
            $this->_example_output($output, 'Administrar verificadores');
        }
        
        public function linkRutas ($primary_key , $row)
        {
            return base_url(). 'index.php/main/administraRutas/' . $row->id;
        }

        public function administraRutas($row)
        {
            $this->llaveActual = $row;
            $usuario = $this->main_model->traeUsuario($row);
            
            $crud = new grocery_CRUD();
            $crud->set_subject("Rutas diarias de $usuario->nombre");
            $crud->set_table_title("<a href=\"". base_url(). "index.php/main/administraVerificadores/\">Regresar a verificadores</a>");
            $crud->set_table('ruta');
            $crud->columns('fecha');
            $crud->where("idUsuario=$row");
            $crud->set_subject('Ruta');
            
            if ($crud->getState() == 'insert')
            {
                $crud->fields('fecha', 'idUsuario');
            }
            else
            {
                $crud->fields('fecha');
            }
            
            //$crud->unset_add();
            $crud->unset_edit();
            $crud->unset_delete();
            $crud->unset_read();
            
            $crud->add_action('Encuestas', base_url().'assets/grocery_crud/themes/flexigrid/css/images/encuesta.png', '', '', array($this,'linkEncuestas'));
            
            $crud->callback_before_insert(array($this,'agregaIdEmpleado'));
            
            $output = $crud->render();
            
            $this->_example_output($output, 'Administrar rutas de '. $usuario->nombre);
        }

        public function linkEncuestas ($primary_key , $row)
        {
            return base_url(). 'index.php/main/administraEncuestas/' . $row->id;
        }
        
        function agregaIdEmpleado($post_array, $primary_key = null)
        {
            $post_array['idUsuario'] = $this->llaveActual;
            return $post_array;
        }

        public function administraEncuestas($row)
        {
            $this->llaveActual = $row;
            
            $ruta = $this->main_model->traeRuta($row);
            $usuario = $this->main_model->traeUsuario($ruta->idUsuario);
            
            $crud = new grocery_CRUD();
            $crud->set_subject("Encuestas de $ruta->fecha");
            $crud->set_table_title("<a href=\"". base_url(). "index.php/main/administraRutas/$ruta->idUsuario\">Regresar a rutas del $ruta->fecha de $usuario->nombre</a>");
            $crud->set_table('encuesta');
            $crud->columns('fecha', 'encuestador', 'idEncuestado', 'nombreEncuestado', 'terminada');
            $crud->display_as('nombreEncuestado','Nombre');
            $crud->where("idRuta=$row");
            $crud->set_subject('Encuesta');
            
            if ($crud->getState() == 'insert')
            {
            }
            else
            {
                $crud->unset_add_fields( 'idRuta');
                $crud->unset_edit_fields( 'idRuta');
            }
            $crud->callback_before_insert(array($this,'agregaIdRuta'));
            //$crud->unset_add();
            //$crud->unset_edit();
            //$crud->unset_delete();
            //$crud->unset_read();
            
            $crud->add_action('Respuestas', base_url().'assets/grocery_crud/themes/flexigrid/css/images/respuestas.png', '', '', array($this,'linkRespuestas'));
             $crud->add_action('Fotografías', base_url().'assets/grocery_crud/themes/flexigrid/css/images/fotos.png', '', '', array($this,'linkFotos'));
            
            $crud->callback_column('encuestador', array($this,'_textoEncuestador'));
            $crud->callback_column('fecha', array($this,'_textoFecha'));
            
            $output = $crud->render();
            
            $this->_example_output($output, "Administrar encuestas del $ruta->fecha de $usuario->nombre" );
        }
        
        public function linkRespuestas ($primary_key , $row)
        {
            return base_url(). 'index.php/main/administraRespuestas/' . $row->id;
        }
        
        public function linkFotos ($primary_key , $row)
        {
            return base_url(). 'index.php/main/administraFotos/' . $row->id;
        }

        
        function agregaIdRuta($post_array, $primary_key = null)
        {
            $post_array['idRuta'] = $this->llaveActual;
            return $post_array;
        }

        public function administraRespuestas($row)
        {
            $this->llaveActual = $row;
            $encuesta = $this->main_model->traeEncuesta($row);
            $crud = new grocery_CRUD();
            $crud->set_subject("Respuestas");
            $crud->set_table_title("<a href=\"". base_url(). "index.php/main/\">Regresar a principal</a>");
            $crud->set_table('encuestaXcatalogo');
            $crud->where("idEncuesta=$row");
            
            $crud->columns('idCatalogo', 'valor');
            $crud->display_as('idCatalogo','Pregunta')->
            display_as('valor', 'Valor');
            $crud->set_relation('idCatalogo','catalogos','{tipo} {descripcion}');
//            $crud->unset_add();
//            $crud->unset_edit();
//            $crud->unset_delete();
            //$crud->unset_read();
            
            if ($crud->getState() == 'insert')
            {
            }
            else
            {
                $crud->unset_add_fields ('idEncuesta');
                $crud->unset_edit_fields ('idEncuesta');
            }
            $crud->callback_before_insert(array($this,'agregaIdEncuesta'));

            
            $crud->set_table_title("<a href=\"". base_url(). "index.php/main/administraEncuestas/$encuesta->idRuta\">Regresar a encuestas</a>");
            
            $output = $crud->render();
            
            $this->_example_output($output, "Respuestas" );
        }
        
        public function administraFotos($row)
        {
            $encuesta = $this->main_model->traeEncuesta($row);
            $crud = new grocery_CRUD();
            $crud->set_subject("Fotografías");
            $crud->set_table_title("<a href=\"". base_url(). "index.php/main/\">Regresar a principal</a>");
            $crud->set_table('encuestaXfoto');
            $crud->where("idEncuesta=$row");
            
            $crud->columns('fotografia');
            $crud->display_as('fotografia','Fotografía');
            $crud->unset_add();
            $crud->unset_edit();
            $crud->unset_delete();
            //$crud->unset_read();
            $crud->set_field_upload('fotografia','assets/uploads/fotosEncuestas');
            $crud->set_table_title("<a href=\"". base_url(). "index.php/main/administraEncuestas/$encuesta->idRuta\">Regresar a encuestas</a>");
            
            $output = $crud->render();
            
            $this->_example_output($output, "Fotografías" );
        }
        
        
        public function administraEncuestasTodas()
        {
            $crud = new grocery_CRUD();
            $crud->set_subject("Encuestas");
            $crud->set_table_title("<a href=\"". base_url(). "index.php/main/\">Regresar a principal</a>");
            $crud->set_table('encuesta');
            $crud->columns('fecha', 'encuestador', 'idEncuestado', 'nombreEncuestado', 'terminada');
            $crud->display_as('nombreEncuestado','Nombre');
            $crud->set_subject('Encuesta');
            $crud->unset_add();
            //$crud->unset_edit();
            $crud->unset_delete();
            //$crud->unset_read();
            
            $crud->add_action('Respuestas', base_url().'assets/grocery_crud/themes/flexigrid/css/images/respuestas.png', '', '', array($this,'linkRespuestasTodas'));
            $crud->add_action('Fotografías', base_url().'assets/grocery_crud/themes/flexigrid/css/images/fotos.png', '', '', array($this,'linkFotosTodas'));
            
            $crud->callback_column('encuestador', array($this,'_textoEncuestador'));
            $crud->callback_column('fecha', array($this,'_textoFecha'));
            
            $output = $crud->render();
            
            $this->_example_output($output, "Administrar encuestas" );
        }
        
        public function linkRespuestasTodas ($primary_key , $row)
        {
            return base_url(). 'index.php/main/administraRespuestasTodas/' . $row->id;
        }
        public function linkFotosTodas ($primary_key , $row)
        {
            return base_url(). 'index.php/main/administraFotosTodas/' . $row->id;
        }

        
        public function administraRespuestasTodas($row)
        {
            $this->llaveActual = $row;
            $crud = new grocery_CRUD();
            $crud->set_subject("Respuestas");
            $crud->set_table_title("<a href=\"". base_url(). "index.php/main/\">Regresar a principal</a>");
            $crud->set_table('encuestaXcatalogo');
            $crud->where("idEncuesta=$row");
            
            if ($crud->getState() == 'insert')
            {
            }
            else
            {
                $crud->unset_add_fields ('idEncuesta');
                $crud->unset_edit_fields ('idEncuesta');
            }
            
            $crud->callback_before_insert(array($this,'agregaIdEncuesta'));
            
            $crud->columns('idCatalogo', 'valor');
            $crud->display_as('idCatalogo','Pregunta')->
                   display_as('valor', 'Valor');
            $crud->set_relation('idCatalogo','catalogos','{tipo} {descripcion}');
            //$crud->unset_add();
            //$crud->unset_edit();
            //$crud->unset_delete();
            //$crud->unset_read();
            $crud->set_table_title("<a href=\"". base_url(). "index.php/main/administraEncuestasTodas\">Regresar a encuestas</a>");
            
            $output = $crud->render();
            
            $this->_example_output($output, "Respuestas" );
        }
        
        function agregaIdEncuesta($post_array, $primary_key = null)
        {
            $post_array['idEncuesta'] = $this->llaveActual;
            return $post_array;
        }

        public function administraFotosTodas($row)
        {
            $crud = new grocery_CRUD();
            $crud->set_subject("Fotografías");
            $crud->set_table_title("<a href=\"". base_url(). "index.php/main/\">Regresar a principal</a>");
            $crud->set_table('encuestaXfoto');
            $crud->where("idEncuesta=$row");
            
            $crud->columns('fotografía');
            $crud->display_as('fotografia','Fotografía');
            $crud->unset_add();
            $crud->unset_edit();
            $crud->unset_delete();
            //$crud->unset_read();
            $crud->set_field_upload('fotografia','assets/uploads/fotosEncuestas');
            $crud->set_table_title("<a href=\"". base_url(). "index.php/main/administraEncuestasTodas\">Regresar a encuestas</a>");
            
            $output = $crud->render();
            
            $this->_example_output($output, "Fotografías" );
        }
        
        
        public function _textoEncuestador($value, $row)
        {
            $ruta = $this->main_model->traeRuta($row->idRuta);
            $usuario = $this->main_model->traeUsuario($ruta->idUsuario);
            $texto = $usuario->nombre;
            return $texto;
        }

        public function _textoFecha($value, $row)
        {
            $ruta = $this->main_model->traeRuta($row->idRuta);
            $texto = $ruta->fecha;
            return $texto;
        }

        
    }
