load->model("idiomas_model"); $this->load->model("usuario_model"); if($this->router->class == 'multi') $this->brm_lib->set_default_options_multi(); else $this->brm_lib->set_default_options(); if($this->router->class == 'multi' && !isset($_SESSION['id_lang'])){ echo "error_session"; die(); } $this->load_defaults(); if(isset($_SESSION['referer_permisos'])){ $this->data["fin_overlay"] = 1; $this->data["fin_overlay_url"] = "/".$_SESSION["iso_lang"]."/multi/cambio_nivel_cuenta"; $this->data["fin_overlay_params"] = ""; } if(isset($_SESSION['referer_invalid'])){ $this->data["fin_overlay"] = 1; $this->data["fin_overlay_url"] = "/".$_SESSION["iso_lang"]."/multi/invalid_info"; $this->data["fin_overlay_params"] = ""; } // Get the logo $subdomain = $this->brm_lib->get_subdomain(); $default_logo = '' .$this->lang->line('comun_alt_logo') . ''; if( $subdomain ){ // Get the submain info $where = array(); $where['ASubdominio'] = $subdomain; $asocioacion = $this->asociaciones_model->get_asociaciones($where, '0,1'); if( sizeof($asocioacion) > 0){ $this->data['logo'] = '' . $asocioacion[0]->ANombre . ' ' . $this->lang->line('comun_asociacion_logo') . ''; }else{ $this->data['logo'] = $default_logo; } }else{ $this->data['logo'] = $default_logo; } } function load_defaults() { $this->load->language('comun', $_SESSION["iso_lang"]); $this->load->language('meta', $_SESSION["iso_lang"]); $this->load->language('val', $_SESSION["iso_lang"]); $this->load->model("tarifas_model"); $this->load->model("proyectos_model"); $this->load->model("sectores_model"); $this->load->model("zona_geografica_model"); $this->load->model("actividades_model"); $this->load->model("asociaciones_model"); $this->load->model("idiomas_model"); $parametro_web = $this->proyectos_model->get_records("parametros_web", "PWIdenfiticador = 'dias_limite_color'"); $this->data["dias_limite_color"] = $parametro_web[0]->PWValor; if(isset($_SESSION['id_user'])){ $this->data["historial"] = $this->usuario_model->get_records("usuarios_historial", "UHIdUsuario = ".$_SESSION['id_user'], '', 'UHFecha DESC', '0,5'); $usuario = $this->usuario_model->get_usuarios('UId = '.$_SESSION['id_user']); if($this->router->directory != '' && $this->router->class != 'multi' && $this->router->method != 'datos_previos' && $this->router->method != 'datos_previos_action' && $usuario[0]->UDatosPrevios == 0){ redirect("/".$_SESSION['iso_lang']."/portal/home/datos_previos"); die(); } } $this->data["idiomas_web"] = $this->idiomas_model->get_idiomas_web("IWActivado = 1 AND IWLIdIdioma = ".$_SESSION["id_lang"]); } } /** * @property CI_Loader $load * @property App_Form_validation $form_validation * @property CI_Input $input * @property CI_Output $output * @property CI_Email $email * @property CI_DB_active_record $db * @property CI_DB_forge $dbforge * @property CI_Table $table * @property App_Session $session * @property CI_FTP $ftp * @property CI_Pagination $pagination * @property CI_Calendar $calendar * @property CI_Config $config * @property CI_HtmlTable $table * @property CI_Language $lang * @property CI_Uri $uri * @property CI_Upload $upload * @property CI_Encryption $encrypt * @property idioma_model $idioma_model * @property App_model $main_model * @property menu_model $menu_model * @property pagina_model $pagina_model * @property usuario_admin_model $usuario_admin_model * @property credencial_model $credencial_model * @property app_lib $app_lib */ abstract class Main_Controller extends CI_Controller{ protected $_USER; function __construct() { parent::__construct(); $this->load->library("session"); $this->load->model("usuario_admin_model"); $this->load->library("app_lib"); // LOAD LOGGED USER $user=$this->usuario_admin_model->get (array($this->usuario_admin_model->_IDENTIFICADOR => $this->session->userdata(USER_ID))); $this->_USER = count($user)>0?$user[0]:false; if (!$this->_USER || $this->session->userdata(USER_TYPE) != ROOT_USER_GROUP) $this->config->set_item(HIDE_SUPERUSER,true); else $this->config->set_item(HIDE_SUPERUSER,false); if ($this->_USER) { $this->_USER->USER_TYPE = $this->session->userdata(USER_TYPE); $this->_USER->USER_ZONE = $this->session->userdata(USER_ZONE); } } protected function auth_user() { $this->session->auth_user(); } } abstract class App_Controller extends Main_Controller { private $_DATOS = array(); protected $_VIEWDATA = array(); protected $_SEO; protected $_IDENTIFICADOR; protected $load_model = false; protected $main_model; protected $_TRANSLATIONS; protected $_SELECTOR_IDIOMA; protected $_OBJECT; protected $obj_name = ''; protected $disableRowChecks = false; protected $UseLanguages; protected $LoadActions = true; protected $loadDefaultJS = true; protected $loadLanguageFile = true; protected $loadEditor = false; protected $loadBuscador = false; protected $_JS_FILE = false; protected $loadJSDates = array(); // loadJSDates is NOT INCLUDED in view data by default protected $_LANGUAGE_FILE = 'default'; protected $defaultSorting = false; protected $RequiredCredentials; public $_LANGUAGE; public $_TRANSLATE_LANGUAGE; public $_CURRENT_LANGUAGE; protected $_CURRENT_LANGUAGE_ID; protected $_FILEDATA; function __construct($front = false) { parent::__construct(); $this->load_defaults($front); } protected function _view_admin($view, $autoload = false){ if(!$autoload) return config_item('admin_folder').$view; else return $this->load->view(config_item('admin_folder').$view); } private function load_defaults($front) { // LOAD CONFIG VALUES $this->UseLanguages = config_item('USE_LANGUAGES'); if ($front) { // // MANAGE LANGUAGES // if ($this->UseLanguages) { // $this->load->model('idioma_model'); // $lang = $this->uri->segment(1, ''); // if (english($lang)) { // $uriLang = ''; // $this->_CURRENT_LANGUAGE = $lang; // } else { // $uriLang = english().'/'; // $this->_CURRENT_LANGUAGE = config_item('default_language'); // } // $this->_LANGUAGE = $this->idioma_model->get(); // $this->_TRANSLATE_LANGUAGE = english($this->_CURRENT_LANGUAGE)?spanish():english(); // $this->_CURRENT_LANGUAGE_ID = $this->_LANGUAGE[$this->_CURRENT_LANGUAGE]; // $this->_VIEWDATA['current_lang'] = $this->_CURRENT_LANGUAGE; // // // HANDLE URI // $uri = ''; // $start = english($lang) ? 2 : 1; // for ($i = $start; $i <= $this->uri->total_segments(); $i++) // $uri .= $this->uri->segment($i, '') . '/'; // $uri = chop($uri, '/'); // // // TRANSLATE LINK FOR CURRENT PAGE // $this->_VIEWDATA['translate_link'] = base_url() . $this->app_lib->translateURL($uri, $this->_TRANSLATE_LANGUAGE); // } // else // $this->_CURRENT_LANGUAGE = config_item('default_language'); } else { if ($this->UseLanguages) { $this->load->model('idioma_model'); $this->_LANGUAGE = $this->idioma_model->get(); $this->_CURRENT_LANGUAGE = $this->_LANGUAGE[config_item('default_language')]; } else $this->_CURRENT_LANGUAGE = config_item('default_language'); } // LANGUAGE DEFAULTS $this->load->language('base'); } protected function require_credentials($redirect = true) { $grupo = $this->session->userdata(USER_TYPE); $this->load->model('credencial_model'); $credentials = $this->credencial_model->checkPermisos( $grupo, $this->RequiredCredentials ); if (count($credentials) == 0) { if ($redirect) { $this->mostrarError($this->lang->line('sin_permisos')); redirect($this->app_lib->INICIO['admin']); } return false; } return true; } protected function initialize() { // CREDENTIALS if (config_item('USE_CREDENTIALS') && !empty($this->RequiredCredentials)) $this->require_credentials(); // MODELS if ($this->load_model) { $this->load->model($this->load_model); $this->main_model = $this->{$this->main_model}; $this->_IDENTIFICADOR = $this->main_model->_IDENTIFICADOR; } $this->_VIEWDATA['_IDENTIFICADOR'] = $this->_IDENTIFICADOR; $this->_VIEWDATA['objectName'] = $this->obj_name; // LANGUAGES if ($this->UseLanguages) $this->_SELECTOR_IDIOMA = $this->main_model->_SELECTOR_IDIOMA; if ($this->loadLanguageFile) { if ($this->_LANGUAGE_FILE == 'default') $this->load->language($this->router->class,$this->_CURRENT_LANGUAGE); else $this->load->language(_LANGUAGE_FILE,$this->_CURRENT_LANGUAGE); } if ($this->LoadActions) $this->_ACCIONES = array( $this->app_lib->LISTAR => array( 'estandar' => true, 'destino' => config_item('admin_folder')."/".$this->router->class.'/paginar', 'ajax' => true), $this->app_lib->EDITAR => array( 'estandar' => true, 'destino' => config_item('admin_folder')."/".$this->router->class.'/editar', 'ajax' => true, 'multiple' => false, 'type' => $this->app_lib->HTML, 'success' => 'nuevo'), $this->app_lib->NUEVO => array( 'estandar' => true, 'destino' => config_item('admin_folder')."/".$this->router->class.'/editar', 'ajax' => true, 'multiple' => false, 'type' => $this->app_lib->HTML, 'success' => 'nuevo'), $this->app_lib->ELIMINAR => array( 'estandar' => true, 'destino' => config_item('admin_folder')."/".$this->router->class.'/borrar', 'multiple' => true, 'ajax' => false) ); if ($this->_JS_FILE) $this->_VIEWDATA['contentJS'] = $this->_JS_FILE; $this->_VIEWDATA['loadDefaultJS'] = $this->loadDefaultJS; $this->_VIEWDATA['loadBuscador'] = $this->loadBuscador; $this->_VIEWDATA['loadEditor'] = $this->loadEditor; $this->_VIEWDATA['disableRowChecks'] = $this->disableRowChecks; $this->_VIEWDATA['defaultSorting'] = $this->defaultSorting; } protected function guardarDatos($datos) { $this->session->set_flashdata($this->app_lib->_DATOS, $datos); } protected function guardarDatosIdioma($datos, $traducciones) { foreach ($traducciones as $idioma => $textos) $data[] = $this->app_lib->array_to_object(array_merge($datos, $textos, array($this->_SELECTOR_IDIOMA => $idioma))); $this->session->set_flashdata($this->app_lib->_DATOS, $data); } protected function datos() { return $this->session->flashdata($this->app_lib->_DATOS); } protected function mostrarMensaje($mensaje = false) { if ($mensaje === false) $mensaje = $this->lang->line($this->app_lib->EXITO); $mensaje = mb_convert_encoding($mensaje, 'HTML-ENTITIES', 'UTF-8'); $this->session->set_flashdata($this->app_lib->_MENSAJES, $mensaje); } protected function mostrarError($error) { $error = mb_convert_encoding($error, 'HTML-ENTITIES', 'UTF-8'); $this->session->set_flashdata($this->app_lib->_ERRORES, $error); } protected function auth_user() { parent::auth_user(); } // ADDITIONAL DATA protected function _datosAdicionales() { } // ACCESIBLE DATA public function index(){ $this->_VIEWDATA['cabeceras'] = $this->_NOMBRES_COLUMNAS; $this->_VIEWDATA['idFila'] = $this->_IDENTIFICADOR; $this->_VIEWDATA['acciones'] = $this->_ACCIONES; $this->_VIEWDATA['content'] = config_item('admin_folder').'/listado'; // ESTABAMOS EDITANDO Y HUBO ERROR if ($datos = $this->datos()) { $this->_VIEWDATA['object'] = $datos; $this->loadFormPresets(); } // DATOS PARA EL BUSCADOR if ($this->loadBuscador) $this->_buscador (); $this->load->language('datatables',$this->_CURRENT_LANGUAGE); $this->buildMenu(); $this->load->view(config_item('admin_folder').'/main', $this->_VIEWDATA); } private function loadFormPresets(){ $this->load->language('forms'); $this->_datosAdicionales(); } // SAVE NEW OBJECT public function crear(){ if ($this->_validar()) $this->guardar(); else { $this->guardarDatos($this->_OBJECT); redirect(config_item('admin_folder').'/'.$this->router->class); } } // LOAD DATA FOR EDITION public function editar() { if ($this->input->post('currentId')) { $where[$this->main_model->_IDENTIFICADOR] = $this->input->post('currentId'); $this->_OBJECT = $this->main_model->get($where); $this->_VIEWDATA['object'] = $this->_OBJECT[0]; } $this->loadFormPresets(); $this->load->view(config_item('admin_folder').'/'.$this->router->class.'/editar', $this->_VIEWDATA); } // IF ALL, MOSTRAR TODO EL MENU INDEPENDIENTEMENTE DE LOS ACCESOS // EL MENU SE ASIGNARA A LA VARIABLE DE VISTA ${$MENUNAME} Y $($PAGSNAME) protected function buildMenu($all = false,$menuName = 'menu',$pagsName = 'paginas') { // LOAD MODELS $this->load->model('menu_model'); $this->load->model('pagina_model'); $this->load->model('acceso_model'); // FILTER MENU ITEMS PER USER TYPE $whereIn = array(); if (!$all) { $allowed = $this->acceso_model->get(array($this->acceso_model->_IDENTIFICADOR.'Grupo' => $this->_USER->USER_TYPE)); foreach ($allowed as $acceso) $whereIn[] = $acceso->{$this->acceso_model->_IDENTIFICADOR.'Menu'}; if (count($whereIn)>0) $menu = $this->menu_model->get('',array($this->menu_model->_IDENTIFICADOR => $whereIn)); else $menu = $this->menu_model->get(); } else $menu = $this->menu_model->get(); // PREPARE MENU $paginas = $level0 = $level1 = array(); foreach ($menu as $itemMenu) { switch ($itemMenu->MNivel) { case 0: $level0[] = $itemMenu; break; case 1: $level1[$itemMenu->MPadre][$itemMenu->MPosicion] = $itemMenu; break; default: break; } if (isset($itemMenu->{$this->menu_model->_IDENTIFICADOR.'Pagina'})) $paginas[] = $itemMenu->{$this->menu_model->_IDENTIFICADOR.'Pagina'}; } // SORT CHILDREN MENU foreach ($level1 as $k => $p) { ksort ($p); $level1[$k] = $p; } // LOAD PAGES $paginas = $this->pagina_model->get('',array($this->pagina_model->_IDENTIFICADOR => $paginas)); $this->_VIEWDATA["$menuName"] = array( MENU_LEVEL0 => $level0, MENU_LEVEL1 => $level1 ); $pags = array(); foreach ($paginas as $pagina) $pags[$pagina->{$this->pagina_model->_IDENTIFICADOR}] = $pagina; $this->_VIEWDATA["$pagsName"] = $pags; } // DDBB INSERTION/UPDATE MESSAGE CONTROL public function guardar($id = ''){ if (!$id && !$this->_OBJECT) { $this->mostrarError($this->lang->line('datos_vacios')); redirect(config_item('admin_folder')."/".$this->router->class); } // ACTUALIZAR else if ($id) { if ($this->_validar($id)) { // UPDATE OBJECT $where = array(); $where[$this->_IDENTIFICADOR] = $id; $this->main_model->update($this->_OBJECT, $where); $this->mostrarMensaje(); redirect(config_item('admin_folder')."/".$this->router->class); } else { $this->guardarDatos($this->_OBJECT); redirect(config_item('admin_folder')."/".$this->router->class); } } // CREAR else if ($this->_OBJECT) { $id = $this->main_model->insert($this->_OBJECT); if (!$id) { $this->guardarDatos($this->_OBJECT); $this->mostrarError($this->lang->line('error_bbdd')); redirect(config_item('admin_folder')."/".$this->router->class); } else { $this->mostrarMensaje(); redirect(config_item('admin_folder')."/".$this->router->class); } } } // REMOVE 1 OR MORE ROWS FROM DATABASE public function borrar() { $sLike = ''; $sWhereIn = ''; $data = $this->input->post(); $incluidos = $noIncluidos = array(); if (!$data) { $this->mostrarError ($this->lang->line('SIN_SELECCION')); redirect(config_item('admin_folder')."/".$this->router->class); } // SWEEP OUT UNCHECKED foreach ($data as $k => $v) { if (substr($k, 0, 4) == 'chk_') if ($v == 'false') $noIncluidos[] = substr($k,4); else if ($v == 'true') $incluidos[] = substr($k,4); } if ($this->input->post('allRows') == 'true'){ // SELECT ROWS $this->_filtrar($sLike, $sWhereIn); $this->_filtroBusqueda(); if (count($noIncluidos)>0) $this->main_model->db->restriction('', array($this->_IDENTIFICADOR.' NOT' => $noIncluidos)); } else { $filas = $this->input->post('filas'); $filas = array_unique(array_merge($filas,$incluidos)); $sWhereIn = array($this->_IDENTIFICADOR => $filas); } $total = $this->main_model->total('',$sWhereIn, $sLike); if ($total > 0) $this->main_model->delete($sWhereIn,$sLike); $this->mostrarMensaje(); redirect(config_item('admin_folder')."/".$this->router->class); } // TO BE OVERWRITTEN FOR ALL SUBCLASSES; EVEN IF IT'S NOT USED abstract protected function _validar(); // LIST OBJECTS public function paginar() { // IN CASE YOU DONT NEED DEBUG FOR AJAX FILE; // $this->output->enable_profiler(false); foreach ($this->_CAMPOS as $field) if (is_array($field) && isset($field['model']) && !in_array($field['model'], $this->load_model)) $this->load->model($field['model']); /* * Paging */ $sLimit = ''; if ($this->input->post('iDisplayLength') != '-1' ) $sLimit = intval($this->input->post('iDisplayStart')).", ".intval($this->input->post('iDisplayLength')); /* * Ordering */ $sOrder = ''; if ($this->input->post('iSortCol_0')) { for ($i=0 ; $iinput->post('iSortingCols')) ; $i++ ) if ( $this->input->post('bSortable_'.intval($this->input->post('iSortCol_'.$i))) == "true" ) $sOrder .= $this->_COLUMNAS[ intval( $this->input->post('iSortCol_'.$i) )-1 ].' '.$this->input->post('sSortDir_'.$i).', '; if ($sOrder) $sOrder = substr_replace( $sOrder, "", -2 ); } /* * Filtering */ $sLike = ''; // comprobar la condicion final si se cambia el valor inicial $sWhereIn = ''; // comprobar la condicion final si se cambia el valor inicial $sNotFound = false; $calcularTotal = true; $this->_filtrar($sLike, $sWhereIn, $sNotFound, $calcularTotal); // SPECIFIC CRITERIA $sWhere = $this->_filtroBusqueda(); // SE HAN INTRODUCIDO CRITERIOS POR LOS QUE FILTRAR PERO NO SE HAN ENCONTRADO DATOS if ($sNotFound&&!$sWhere) { $calcularTotal = false; $resultados = array(); } else $resultados = $this->main_model->get('', $sWhereIn, $sLike, $sOrder,$sLimit); //$this->main_model->debug(); $rows = array(); //echo '
';
//var_dump($resultados);
//exit();
        foreach ($resultados as $k => $row) {
            if ($this->disableRowChecks)
                $rows[$k][] = $this->app_lib->rowhidden($row->{$this->_IDENTIFICADOR});
            else
                $rows[$k][] = $this->app_lib->rowcheck($row->{$this->_IDENTIFICADOR});

            foreach ($this->_COLUMNAS as $columna)
                if (isset($this->_CAMPOS[$columna]) && $this->_CAMPOS[$columna] != '' && !is_array($this->_CAMPOS[$columna]))
                    $rows[$k][] = $this->app_lib->{$this->_CAMPOS[$columna]}($row->{$columna});
                else if (is_array($this->_CAMPOS[$columna])) {
                    if (isset($this->_CAMPOS[$columna]['funcion']))
                        $rows[$k][] = $this->{$this->_CAMPOS[$columna]['funcion']}($row);
                    else {
                        if (!isset($this->{$this->_CAMPOS[$columna]['model']}))
                            $this->load->model($this->_CAMPOS[$columna]['model']);
                        $translate = isset($this->_CAMPOS[$columna]['translate'])? $this->_CURRENT_LANGUAGE:false;
                        $alias = isset($this->_CAMPOS[$columna]['alias'])? $this->_CAMPOS[$columna]['alias']:false;
                        $origin = isset($this->_CAMPOS[$columna]['origin'])? $row->{$this->_CAMPOS[$columna]['origin']}:$row->{$columna};
                        $rows[$k][] = $this->{$this->_CAMPOS[$columna]['model']}->referencia($this->_CAMPOS[$columna]['table'],$this->_CAMPOS[$columna]['key'], $origin, $this->_CAMPOS[$columna]['field'],$translate,$alias);
                    }
                }
                else
                    $rows[$k][] = $row->{$columna};
        }

        // COUNT ROWS
        $this->_filtroBusqueda($sWhereIn);
        $total = $this->main_model->total();
        $this->_filtroBusqueda($sWhereIn);
        $displayTotal = $calcularTotal?$this->main_model->total('', $sWhereIn, $sLike):0;

        /*
	 * Output
	 */
	$output = array(
		'sEcho' => intval($this->input->post('sEcho')),
		'iTotalRecords' => $total,
		'iTotalDisplayRecords' => $displayTotal,
		'aaData' => $rows
	);
        echo json_encode($output);
        
    }

    /*
     * Filtering
     */
    protected function _filtrar(&$sLike='',&$sWhereIn='',&$sNotFound = false,&$calcularTotal = true) {
        if ($this->input->post('sSearch') != "") {
            for ( $i=0 ; $i_COLUMNAS) ; $i++ ) {
                // ENLAZADO CON OTRA TABLA
                if (is_array($this->_CAMPOS[$this->_COLUMNAS[$i]])) {
                    // FUNCION DEFINIDA POR EL PROGRAMADOR
                    if (isset($this->_CAMPOS[$this->_COLUMNAS[$i]]['reverse'])) {
                        $result = $this->{$this->_CAMPOS[$this->_COLUMNAS[$i]]['reverse']}($this->input->post('sSearch'));
                        
                        if ($result !== FALSE) {                            
                            $origin = isset($this->_CAMPOS[$this->_COLUMNAS[$i]]['origin'])? $this->_CAMPOS[$this->_COLUMNAS[$i]]['origin'] : $this->_COLUMNAS[$i];
                            
                            if (isset($this->_CAMPOS[$this->_COLUMNAS[$i]]['reverseTipo']) && $this->_CAMPOS[$this->_COLUMNAS[$i]]['reverseTipo'] == 'like')
                                $sLike[$origin] = $result;
                            else{
                                $sWhereIn[$origin] = $result;
                                //print_r($result);
                            }
                        }
                    }
                    else {
                        // CAMPOS COMBINADOS
                        if (is_array($this->_CAMPOS[$this->_COLUMNAS[$i]]['field'])) {
                            $tSelect = array_merge(array($this->_CAMPOS[$this->_COLUMNAS[$i]]['key']),$this->_CAMPOS[$this->_COLUMNAS[$i]]['field']);
                            $tWhere = '';
                            $tHaving = array($this->_CAMPOS[$this->_COLUMNAS[$i]]['alias'].' LIKE "%'.$this->input->post('sSearch').'%"' => NULL);
                        }
                        // CAMPOS NORMALES
                        else {
                            $tSelect = '';
                            $tHaving = '';
                            $tWhere = array($this->_CAMPOS[$this->_COLUMNAS[$i]]['field'] => $this->input->post('sSearch'));
                        }
                        if (!isset($this->{$this->_CAMPOS[$this->_COLUMNAS[$i]]['model']}))
                            $this->load->model ($this->_CAMPOS[$this->_COLUMNAS[$i]]['model']);
                        $_values = $this->{$this->_CAMPOS[$this->_COLUMNAS[$i]]['model']}->filter($this->_CURRENT_LANGUAGE,$tWhere,$tSelect,$tHaving,$this->_CAMPOS[$this->_COLUMNAS[$i]]['table']);
                        if (!empty($_values)) {
                            foreach ($_values as $k => $row)
                                $values[] = $row->{$this->_CAMPOS[$this->_COLUMNAS[$i]]['key']};
                            $sWhereIn[$this->_COLUMNAS[$i]]  = $values;
                        }
                    }
                }
                else if ($this->_CAMPOS[$this->_COLUMNAS[$i]] == 'SiNo')
                    $sLike[$this->_COLUMNAS[$i]] = $this->app_lib->{"reverse{$this->_CAMPOS[$this->_COLUMNAS[$i]]}"}($this->input->post('sSearch'));
                else
                    $sLike[$this->_COLUMNAS[$i]] = $this->input->post('sSearch');
            }
            if ($sWhereIn == '' && $sLike == '')
                $sNotFound = true;
        }
    }

    // DEFAULT BEHAVIOUR: DON'T FILTER
    protected function _filtroBusqueda() {       
        $this->main_model->db->connectorOR();
        return false;
    }

    protected function _buscador() {
        // DO NOTHING
    }
}
?>load->language('colaborador', $_SESSION["iso_lang"]);
		$this->load->language('micuenta', $_SESSION["iso_lang"]);	
		$this->load->language('emprendedor', $_SESSION["iso_lang"]);
		$this->load->language('actividades', $_SESSION["iso_lang"]);
                
                // Loading helpers
                $this->load->helper(array('form', 'url', 'text'));
		
		/* Listado Proyectos Publico Footer */
		
		$this->data['tipos_de_proyectos_footer'] = $this->proyectos_model->get_tipos_proyectos('proyectos_tipos_lang.PTLIdIdioma ='.$_SESSION["id_lang"]);
		
	}
	
	
	function buscar_action ($id_filtro = '', $page = 1, $campo_listado = ''){	
		
		// funciona tanto para recibir el POST de un formulario de busqueda , como tambien para cargar una busqueda almacenada en BD y listados
		$sql = array();
		$sql_objetivos = array();
		$order_by = array();
		if ($id_filtro) {
			// vemos si es un listado
			if ($id_filtro == 'tipos') {
				$filtro = array();
				$filtro["CFTiposProyecto"] = $campo_listado;
			} else if ($id_filtro == 'usuario') {
				$filtro = array();
				$filtro["CFPIdUsuario"] = $campo_listado;
			} else if ($id_filtro == 'colaboraciones') {
				$filtro = array();
				$filtro["CFPIdUsuarioColaborador"] = $campo_listado;
			} else  {
				$filtro = $this->proyectos_model->get_records("colaboradores_filtros", "CFIdUsuario = ".$_SESSION['id_user']." AND CFId = ".$id_filtro);
				// pasamos el registro a array para manejarlo como un POST
				if ($filtro) $filtro = $this->brm_lib->object_to_array($filtro[0]);
			}
		} else {
			if (isset($_POST['filtro'])) $filtro = $_POST['filtro'];
		}
		if (isset($filtro) && $filtro) { 
		
			$filtro['CFIdUsuario'] = 0;
			if (isset($filtro['CFTags']) && $filtro['CFTags']) {
				array_push($sql, "(proyectos.PTitulo LIKE '%".$filtro['CFTags']."%' or proyectos.PDescripcion LIKE '%".$filtro['CFTags']."%' or proyectos.PDescripcionAmpliada LIKE '%".$filtro['CFTags']."%' or proyectos_objetivos.POTitulo LIKE '%".$filtro['CFTags']."%' or proyectos_objetivos.PODescripcion LIKE '%".$filtro['CFTags']."%' or proyectos_objetivos.POIdOficio LIKE '%".$filtro['CFTags']."%' or proyectos_objetivos.PODescripcionAmpliada LIKE '%".$filtro['CFTags']."%' or proyectos_objetivos_tags.PTATag LIKE '%".$filtro['CFTags']."%')");
			}
			if (isset($filtro['CFTiposProyecto']) && $filtro['CFTiposProyecto']) {
				// si viene de POST es array y si no viene de filtro y ya esta listo
				$filtro['CFTiposProyecto'] = is_array($filtro['CFTiposProyecto']) ? join(",", $filtro['CFTiposProyecto']) : $filtro['CFTiposProyecto'];
				array_push($sql, "proyectos.PTipoProyecto IN (".$filtro['CFTiposProyecto'].")");
			} else {
				$filtro['CFTiposProyecto'] = '';
			}	
			if (isset($filtro['CFTiposObjetivo']) && $filtro['CFTiposObjetivo']) {
				// si viene de POST es array y si no viene de filtro y ya esta listo
				$filtro['CFTiposObjetivo'] = is_array($filtro['CFTiposObjetivo']) ? join(",", $filtro['CFTiposObjetivo']) : $filtro['CFTiposObjetivo'];
				array_push($sql, "proyectos_objetivos.POIdTipoObjetivo IN (".$filtro['CFTiposObjetivo'].")");
				array_push($sql_objetivos, "proyectos_objetivos.POIdTipoObjetivo IN (".$filtro['CFTiposObjetivo'].")");
			} else {
				$filtro['CFTiposObjetivo'] = '';
			}
			if (isset($filtro['CFSectores']) && $filtro['CFSectores']) {
				// si viene de POST es array y si no viene de filtro y ya esta listo
				$filtro['CFSectores'] = is_array($filtro['CFSectores']) ? join(",", $filtro['CFSectores']) : $filtro['CFSectores'];
				array_push($sql, "proyectos_objetivos_sectores.POSIdSector IN (".$filtro['CFSectores'].")");
				array_push($sql_objetivos, "proyectos_objetivos_sectores.POSIdSector IN (".$filtro['CFSectores'].")");
			} else {
				$filtro['CFSectores'] = '';
			}
			if (isset($filtro['CFOcultarMios']) && $filtro['CFOcultarMios'] == 1) {
				array_push($sql, "proyectos.PIdUsuario <> ".$_SESSION['id_user']);
			}
			if (isset($filtro['CFOcultarColaboro']) && $filtro['CFOcultarColaboro'] == 1) {
				$having = "(select count(actividades.AId) from proyectos RIGHT JOIN proyectos_objetivos on proyectos_objetivos.POIdProyecto=proyectos.PId LEFT JOIN actividades on actividades.AIdObjetivo = proyectos_objetivos.POId  where actividades.AIdUsuarioReceptor = ".$_SESSION['id_user']." and proyectos.PId = myid) = 0";
			} else {
				$having = "";
			}
			if (isset($filtro['CFOcultarFinalizados']) && $filtro['CFOcultarFinalizados'] == 1) {
				array_push($sql, "proyectos.PEstado <> 3");
			}
			if (isset($filtro['CFIdProvincia']) && $filtro['CFIdProvincia']) {
				array_push($sql, "zonas_geograficas.ZGIdProvincia = ".$filtro['CFIdProvincia']);
			} else if (isset($filtro['CFIdPais']) && $filtro['CFIdPais']) {
				array_push($sql, "zonas_geograficas.ZGIdPais = ".$filtro['CFIdPais']);
			} else if (isset($filtro['CFIdContinente']) && $filtro['CFIdContinente']) {
				array_push($sql, "(zonas_geograficas.ZGIdContinente = ".$filtro['CFIdContinente']." OR zonas_geograficas.ZGIdContinente IS NULL)");
			}
			// para el listado de proyectos de usuario
			if (isset($filtro['CFPIdUsuario'])) {
				array_push($sql, "proyectos.PIdUsuario = ".$filtro['CFPIdUsuario']);
			}
			// para el listado de colaboraciones aceptadas
			if (isset($filtro['CFPIdUsuarioColaborador'])) {
				array_push($sql, "(actividades.AIdUsuarioReceptor = ".$filtro['CFPIdUsuarioColaborador']." AND actividades.AIdTipoActividad = 1 AND actividades.AEstado = 2)");
			}
			
			// orden:
			if (isset($filtro['CFOrdenado']) && $filtro['CFOrdenado']) {
				if ($filtro['CFOrdenado'] == 'tipo') array_push($order_by, "proyectos.PTipoProyecto");
				if ($filtro['CFOrdenado'] == 'zona') {
					array_push($order_by, "zonas_geograficas.ZGIdContinente");
					array_push($order_by, "zonas_geograficas.ZGIdPais");
					array_push($order_by, "zonas_geograficas.ZGIdProvincia");
				}
				if ($filtro['CFOrdenado'] == 'sector') {
					array_push($order_by, "proyectos_objetivos_sectores.POSIdSector");
				}
			}
	
			array_push($sql, "proyectos.PEstado <> 1 AND proyectos.PEstado <> 4 AND proyectos.PEstado <> 5");
			//array_push($sql, "proyectos_objetivos.POEstado > 2"); // Almenos debe tener algun objetivo con estado = 3
			array_push($sql_objetivos, "proyectos_objetivos.POEstado > 2");
			array_push($order_by, "total_objetivos desc");
			
			$sql = join(" AND ", $sql);
			$sql_objetivos = join(" AND ", $sql_objetivos);
			$sql_order_by = join(", ", $order_by);

			// si viene de formulario busqueda actualizo filtro
			if (isset($_POST['filtro'])) {
				// actualizamos o creamos filtro default en BD
				if (isset($_POST['id_filtro'])) {
					$filtro['CFOcultarMios'] = (isset($filtro['CFOcultarMios'])) ? 1 : 0;
					$filtro['CFOcultarColaboro'] = (isset($filtro['CFOcultarColaboro'])) ? 1 : 0;
					$filtro['CFOcultarFinalizados'] = (isset($filtro['CFOcultarFinalizados'])) ? 1 : 0;
					$filtro['CFOrdenado'] = (isset($filtro['CFOrdenado'])) ? $filtro['CFOrdenado'] : '';
					$this->proyectos_model->update_record("colaboradores_filtros", "CFIdUsuario = ".$_SESSION['id_user']." AND CFId = ".$_POST['id_filtro'], $filtro);
					$id_filtro = $_POST['id_filtro'];
				} else {
					$this->proyectos_model->delete_record("colaboradores_filtros", "CFIdUsuario = ".$_SESSION['id_user']." AND (CFCodigoFiltro = '' OR CFCodigoFiltro IS NULL)");
					$id_filtro = $this->proyectos_model->insert_record("colaboradores_filtros", $filtro);
                    redirect("/".$_SESSION['iso_lang']."/portal/colaborador/buscar_action/".$id_filtro);
                    die();
				}
			}
			
			if ($id_filtro == 'tipos') {
				$this->data["CFCodigoFiltro"] = '';
				$my_tipo = $this->proyectos_model->get_tipos_proyectos("PTId = ".$campo_listado . " AND PTLIdIdioma = ".$_SESSION['id_lang']);
                                
                $this->data["NombreListado"] = $this->lang->line('listado_proyectos_text_1_registrar_title').': '.(sizeof($my_tipo) ? $my_tipo[0]->PTNombre : "");
                                
				$campo_listado_var = "/".$campo_listado;
			} else if ($id_filtro == 'usuario' ) {
				$this->data["CFCodigoFiltro"] = '';
				$my_user = $this->proyectos_model->get_records("usuarios", "UId = ".$campo_listado);
				$this->data["NombreListado"] = $this->lang->line('listado_proyectos_text_2').': '.$my_user[0]->UUsuario;
				$campo_listado_var = "/".$campo_listado;
			} else if ($id_filtro == 'colaboraciones' ) {
				$this->data["CFCodigoFiltro"] = '';
				$my_user = $this->proyectos_model->get_records("usuarios", "UId = ".$campo_listado);
				$this->data["NombreListado"] = $this->lang->line('listado_proyectos_text_3').' '.$my_user[0]->UUsuario;
				$campo_listado_var = "/".$campo_listado;
			} else {
				$filtro = $this->proyectos_model->get_records("colaboradores_filtros", "CFIdUsuario = ".$_SESSION['id_user']." AND CFId = ".$id_filtro);
				$this->data["CFCodigoFiltro"] = $filtro[0]->CFCodigoFiltro;	
				$campo_listado_var = "";
			}
			$this->data["filter_id"] = $id_filtro;
			 
			// para paginacion:
			
			if(!isset($_SESSION['paginacion'])){ $_SESSION['paginacion'] = 30; }
	
			$per_page = $_SESSION['paginacion'];
			$inicio = ($page - 1) * $per_page;
			$records_size = $this->proyectos_model->get_proyectos($sql, '', 'proyectos.*, proyectos.PId as myid', '', 'proyectos.PId', $having);
			$records_total = ($records_size) ? sizeof($records_size) : 0;
			$this->data["total_pages"] = ceil($records_total / $per_page);
			$this->data["page"] = $page;
			$this->data["total_recs"] = $records_total;
					
			$slug = "";
			if(sizeof($my_tipo)){
		     if ($this->brm_lib->my_urlencode($my_tipo[0]->PTNombreInterno) == "apertura-negocio") {
		     		  $slug = $this->lang->line('oportunidades-de-negocio');  
	           }elseif ($this->brm_lib->my_urlencode($my_tipo[0]->PTNombreInterno) == "busqueda-de-personal") { 
	           		$slug = $this->lang->line('ofertas-de-empleo-trabajo');
	            }elseif ($this->brm_lib->my_urlencode($my_tipo[0]->PTNombreInterno) == "construccion"){
	            	$slug = $this->lang->line('proyectos-de-construccion');
	            }elseif ($this->brm_lib->my_urlencode($my_tipo[0]->PTNombreInterno) == "franquicia") {
	            	$slug = $this->lang->line('franquicia-rentables');
	            }elseif ($this->brm_lib->my_urlencode($my_tipo[0]->PTNombreInterno) == "otros")  {    
	            	$slug = $this->lang->line('proyectos-rentables');
	            }else{     
	            	$slug = $this->brm_lib->my_urlencode($my_tipo[0]->PTNombre);
	           }
	        }
		     
			
			$this->data["url"] = "/".$_SESSION["iso_lang"]."/".$this->lang->line('routes_proyectos_01')."/".$slug."/::pagina::".$campo_listado_var;			
			
                        //PROJECT NAME IN UNICODE
                        //$linkURL = my_urlencode($data['name']);
                        
			// actual records with limit
			$proyectos = $this->proyectos_model->get_proyectos($sql, $sql_order_by, 'proyectos.*, proyectos.PId as myid, count(DISTINCT POId) as total_objetivos', $inicio.','.$per_page, 'proyectos.PId', $having);
			
                        foreach ($proyectos as $proyecto) {
                                $proyecto->colaboro = "no";
                                
				$this->brm_info_helper->get_datos_proyecto_resumen($proyecto, $_SESSION['id_lang'], $sql_objetivos);
				
                                $proyecto->url = $this->brm_lib->my_urlencode($proyecto->PTitulo);
                                
				if(isset($_SESSION['id_user'])){
                                    foreach ($proyecto->objetivos as $objetivo){
					$objetivo->actividad = $this->actividades_model->get_actividades_objetivos("AIdTipoActividad = 1 AND ATIdIdioma = ".$_SESSION['id_lang']." AND AIdUsuarioEmisor = ".$_SESSION['id_user']." AND AIdObjetivo = ".$objetivo->POId);
					
					if(sizeof($objetivo->actividad) == 0){
						$objetivo->interes = 0;
					}else{
                                            $objetivo->interes = 1;
                                            $objetivo->actividad = $objetivo->actividad[0];
                                            
                                            if($proyecto->colaboro == "no" && $objetivo->actividad->AEstado == 4) $proyecto->colaboro  = "rechazada";
                                            else if($objetivo->actividad->AEstado == 2) $proyecto->colaboro  = "aceptada";
                                        }
                                    }
                                }else{
                                    foreach ($proyecto->objetivos as $objetivo){
					$objetivo->actividad = $this->actividades_model->get_actividades_objetivos("AIdTipoActividad = 1 AND ATIdIdioma = ".$_SESSION['id_lang']." AND AIdObjetivo = ".$objetivo->POId);
					
					if(sizeof($objetivo->actividad) == 0){
						$objetivo->interes = 0;
					}else{
                                            $objetivo->interes = 1;
                                            $objetivo->actividad = $objetivo->actividad[0];
                                            
                                            if($proyecto->colaboro == "no" && $objetivo->actividad->AEstado == 4) $proyecto->colaboro  = "rechazada";
                                            else if($objetivo->actividad->AEstado == 2) $proyecto->colaboro  = "aceptada";
                                        }
                                    }
                                }  
                                
			}
                        
                        $this->data["proyectos"] = $proyectos;		
			
                        
                        $curr_controller = $this->uri->segment(2); //docupen
                        $curr_method = $this->uri->segment(3);
                        $curr_secondlast_value = 1;
                        $curr_last_value = $this->uri->segment(5);
                        
                        
			$this->data["rel_link"] = base_url()."".$_SESSION["iso_lang"]."/".$curr_controller."/".$curr_method."/".$curr_secondlast_value."/".$curr_last_value;			
			$this->data["meta_title_lang"] =  sizeof($my_tipo) ? $my_tipo[0]->PMetaTitle : "";
                        $this->data["meta_description_lang"] =  sizeof($my_tipo) ? $my_tipo[0]->PMetaDescription : "";
                        $this->data["URL"] =  sizeof($my_tipo) ?  $my_tipo[0]->PTURL : "";
                        $this->data["HeaderTitle"] =  sizeof($my_tipo) ? $my_tipo[0]->PHeaderTitle : "";
                        $this->data["HeaderDescription"] =  sizeof($my_tipo) ? $my_tipo[0]->PHeaderDescription : "";
                        
                        //$this->data["meta_title_lang"] = $this->lang->line('proyectos_listados_publicos_01')." ".$my_tipo[0]->PTNombre." – Ofertas de Trabajo – ".$page;
			//$this->data['meta_description_lang'] = $this->lang->line('proyectos_listados_publicos_02').$my_tipo[0]->PTNombre.$this->lang->line('proyectos_listados_publicos_03').$page.".";
			
			$this->data["columnas_listado"] = array("datos_basicos", "fecha_publicacion", "fecha_limite", "zona_geografica", "emprendedor");
			$this->data["content"] = "/proyectos/buscar_resultados";
			$this->data["menu_interno"] = "menu_interno_emprendedor";
			$this->load->view('template_public', $this->data);			
			
			
		}
	}	
	
	  function cambiar_paginacion($paginacion) {
	        $_SESSION['paginacion'] = $paginacion;
	        redirect($_POST['url_destino']);
	    }
	    
	    
	    
	  function buscar_proyecto ($proyecto_id = ''){	
	    
	    	if($proyecto_id == ''){ redirect("/"); }

		$sql = array();
		$sql_objetivos = array();
		$order_by = array();
		
		$page = 1;
		$id_filtro = '';
		

			$this->data["filter_id"] = $id_filtro;
			$this->data["hide_paginacion"] = true;
			
			
			$sql['PId'] = $proyecto_id;
			 
			// para paginacion:
			
			if(!isset($_SESSION['paginacion'])){ $_SESSION['paginacion'] = 10; }
	
			$per_page = $_SESSION['paginacion'];
			$inicio = ($page - 1) * $per_page;
			$records_size = $this->proyectos_model->get_proyectos($sql, '', 'proyectos.*, proyectos.PId as myid', '', 'proyectos.PId');
			
			/* This project does not exists */			
			if(sizeof($records_size) == 0){ redirect("/"); }			
			
			$records_total = ($records_size) ? sizeof($records_size) : 0;
			$this->data["total_pages"] = ceil($records_total / $per_page);
			$this->data["page"] = $page;
			$this->data["total_recs"] = $records_total;
			$this->data["url"] = "/".$_SESSION["iso_lang"]."/proyectos/buscar_action/0/::pagina::";			
			
			// actual records with limit
			$proyectos = $this->proyectos_model->get_proyectos($sql, '', 'proyectos.*, proyectos.PId as myid, count(DISTINCT POId) as total_objetivos', $inicio.','.$per_page, 'proyectos.PId');
			foreach ($proyectos as $proyecto) {
                                $proyecto->colaboro = "no";
                                
				$this->brm_info_helper->get_datos_proyecto_resumen($proyecto, $_SESSION['id_lang'], $sql_objetivos);
				                               
			}
			$this->data["proyectos"] = $proyectos;		
			
			$this->data["meta_title_lang"] = $this->lang->line('title_lang_portal_colaborador_buscar_action').$page;
			$this->data["columnas_listado"] = array("datos_basicos", "fecha_publicacion", "fecha_limite", "zona_geografica", "emprendedor");
			$this->data["content"] = "/proyectos/buscar_resultados";
			$this->data["menu_interno"] = "menu_interno_emprendedor";
			$this->load->view('template_public', $this->data);			
		}
                
            function detalle_proyecto($id_proyecto=NULL){ 
                $this->load->language('emprendedor', $_SESSION["iso_lang"]);
                               
                $where['PId'] = $id_proyecto;
                $project = $this->proyectos_model->get_proyectos($where);
                if(empty($project)){
                   redirect("/");                 
                }
                
                $proyecto = $this->brm_info_helper->get_datos_proyecto_resumen($id_proyecto, $_SESSION['id_lang']);
                
                
                $this->data["proyecto"] = $proyecto;

                $notificaciones = $proyecto->notificaciones;
                $this->data["notificaciones"] = $notificaciones;

                $this->data["meta_title_lang"] = $proyecto->PTitulo.":".$this->lang->line('proyecto_meta_title');
                $this->data["menu_interno"] = "menu_interno_crear_proyecto";
                
                $this->data["meta_description_lang"] = word_limiter($proyecto->PDescripcion, 156);
                     
                $this->data["HeaderTitle"] =  $proyecto->PTitulo;
                
                $current_section = $this->uri->segment(3); 
               
                if($current_section == $this->lang->line('oportunidades-de-negocio')){
                    $this->data["HeaderDescription"] = $this->lang->line('proyecto_apetura_de_negocio_h2_title');
                    $this->data['section_key'] = 2;
                }elseif($current_section == $this->lang->line('ofertas-de-empleo-trabajo')){    
                    $this->data["HeaderDescription"] = $this->lang->line('proyecto_busqueda_de_personal_h2_title');
                    $this->data['section_key'] = 1;
                }elseif($current_section == $this->lang->line('proyectos-de-construccion')){    
                    $this->data["HeaderDescription"] = $this->lang->line('proyecto_construccion_h2_title');
                    $this->data['section_key'] = 4;
                }elseif($current_section == $this->lang->line('franquicia-rentables')){  
                    $this->data["HeaderDescription"] = $this->lang->line('proyecto_franquicias_h2_title');
                    $this->data['section_key'] = 3;
                }elseif($current_section == $this->lang->line('proyectos-rentables')){  
                    $this->data["HeaderDescription"] = $this->lang->line('proyecto_rentables_diversos_h2_title');
                    $this->data['section_key'] = 5;
                } 
                
                $this->data["key"] =  'external';
                $this->data["columnas_listado"] = array("datos_basicos", "fecha_publicacion", "fecha_limite", "zona_geografica", "emprendedor");
                $this->data["content"] = "/proyectos/info_proyecto";
                $this->data["menu_interno"] = "menu_interno_emprendedor";
                
                $this->data["hide_sugerencias"] = true;
           
                $this->load->view('template_public', $this->data);
            }
            
            // Overlay detalle objetivo
            function detalle_objetivo($id_objetivo) {
                $objetivo = $this->proyectos_model->get_records("proyectos_objetivos", "POId = " . $id_objetivo);
                $objetivo = sizeof($objetivo) > 0 ? $objetivo[0] : array();

                if (!empty($objetivo)) {
                    $proyecto = $this->brm_info_helper->get_datos_proyecto_completo($objetivo->POIdProyecto, $_SESSION['id_lang']);

                    if (!empty($proyecto)) {
                        $this->load->language('emprendedor', $_SESSION["iso_lang"]);

                        $tipo_objetivo = $this->proyectos_model->get_objetivos_tipos("OTLIdIdioma = " . $_SESSION['id_lang'] . " AND OTId = " . $objetivo->POIdTipoObjetivo);
                        $this->data["tipo_objetivo"] = $tipo_objetivo[0];

                        $objetivo_encontrado = "";
                        if ($this->data["tipo_objetivo"]->OTLIdTipoObjetivo == 8) {
                            foreach ($proyecto->objetivos[$objetivo->POIdTipoObjetivo]->lista as $objetivos_tipo_personalizado) {
                                foreach ($objetivos_tipo_personalizado as $objetivo)
                                    if ($objetivo->POId == $id_objetivo)
                                        $objetivo_encontrado = $objetivo;
                            }
                        }else {
                            foreach ($proyecto->objetivos[$objetivo->POIdTipoObjetivo]->lista as $objetivo) {
                                if ($objetivo->POId == $id_objetivo)
                                    $objetivo_encontrado = $objetivo;
                            }
                        }
                        $this->data["objetivo"] = $objetivo_encontrado;
                        $this->data["proyecto"] = $proyecto;

                        $notificaciones = $proyecto->notificaciones;
                        $this->data["notificaciones"] = $notificaciones;
                        
                        $this->data["content"] = "/portal/emprendedor/detalle_proyecto/objetivo";
                        $this->data["menu_interno"] = "menu_interno_emprendedor";
                        
                        $this->load->view('template_public', $this->data);
                    }
                }
            }

}
?>