<?php

class CandidatoController extends Controller
{
        /**
	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
	 * using two-column layout. See 'protected/views/layouts/column2.php'.
	 */
	public $layout='//layouts/default';

	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
            return array(
                array('allow', // allow authenticated user to perform 'create' and 'update' actions
                        'actions'=>array('index','view','create','update','delete'),
                        'users'=>array('@'),
                ),
                array('allow', // allow admin user to perform 'admin' and 'delete' actions
                        'actions'=>array('admin'),
                        'users'=>array('admin'),
                ),
                array('deny',  // deny all users
                        'users'=>array('*'),
                ),
            );
	}

	/**
	 * Displays a particular model.
	 * @param integer $id the ID of the model to be displayed
	 */
	public function actionView($id)
	{
		$this->render('view',array(
			'model'=>$this->loadModel($id),
		));
	}

	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
	public function actionCreate()
	{
            Yii::import('ext.multimodelform.MultiModelForm');
            
            $model = new Candidato;            
            $idioma = new CandidatoIdioma();
            $titulacion = new CandidatoTitulacion();
            
            $idiomasValidos = array();
            $titulacionesValidas = array();
            
            // Uncomment the following line if AJAX validation is needed
            //$this->performAjaxValidation($model);

            /*if(isset($_POST['Candidato'])) 
            {
                $model->attributes=$_POST['Candidato'];
                $foto=CUploadedFile::getInstance($model,'foto');

                if ($model->validate()) 
                {
                    $foundInvalidChild = false;
                    $arrayIdiomas = array();
                    if(isset($_POST['CandidatoIdioma'])) 
                    {
                        foreach ($_POST['CandidatoIdioma'] as $idioma) 
                        {
                            $CandidatoIdioma = new CandidatoIdioma;
                            $CandidatoIdioma->attributes = $idioma;

                            if ($model->id)
                                $CandidatoIdioma->candidato_id = $model->id;

                            if (!$CandidatoIdioma->validate())
                                $foundInvalidChild = true;

                            $arrayIdiomas[] = $CandidatoIdioma;
                        }
                    }
                }

                if (!$foundInvalidChild && $model->save()) {
                    $this->guardarFoto($model->id, $foto);

                    // Guardar los idiomas
                    foreach($arrayIdiomas as $CandidatoIdioma)
                    {
                        $CandidatoIdioma->candidato_id = $model->id;
                        $CandidatoIdioma->save();
                    }

                    Yii::app()->user->setFlash('success', "Candidato dado de alta correctamente.");
                    $this->redirect(array('index'));
                }
            }*/
            
            if (isset($_POST['Candidato'])) {
                $model->attributes=$_POST['Candidato'];
                $foto=CUploadedFile::getInstance($model,'foto');

                if ($model->validate()) {
                    $foundInvalidChild = false;
                    
                    if (!MultiModelForm::validate($model, $idiomasValidos, $idiomasBorrados))
                            $foundInvalidChild = true;
                    
                    if (!MultiModelForm::validate($model, $titulacionesValidas, $titulacionesBorradas))
                            $foundInvalidChild = true;                    
                }
                                
                if (!$foundInvalidChild && $model->save() ) {                    
                    $masterValues = array ('candidato_id'=>$model->id);
                    
                    if (MultiModelForm::save($model, $idiomasValidos, $idiomasBorrados, $masterValues) &&
                        MultiModelForm::save($model, $titulacionesValidas, $titulacionesBorradas, $masterValues)) 
                    {
                        $this->guardarFoto($model->id, $foto);
                        Yii::app()->user->setFlash('success', "Candidato dado de alta correctamente.");
                        $this->redirect(array('index'));
                    }
                }                
            }
            
            $this->render('create',array(
                'model'=>$model,
                'idioma'=>$idioma,
                'titulacion'=>$titulacion,
                'idiomasValidos'=>$idiomasValidos,
                'titulacionesValidas'=>$titulacionesValidas,
            ));
	}

	/**
	 * Updates a particular model.
	 * If update is successful, the browser will be redirected to the 'view' page.
	 * @param integer $id the ID of the model to be updated
	 */
	public function actionUpdate($id)
	{
            Yii::import('ext.multimodelform.MultiModelForm');	
            
            $model=$this->loadModel($id);
            $idioma=new CandidatoIdioma();
            $titulacion = new CandidatoTitulacion();
            
            $idiomasValidos = array();
            $titulacionesValidas = array();

            // Uncomment the following line if AJAX validation is needed
            //$this->performAjaxValidation($model);

            /*if(isset($_POST['Candidato']))
            {   
                $foto=CUploadedFile::getInstance($model,'foto');                    
                $model->attributes=$_POST['Candidato'];

                if ($model->validate()) 
                {
                    $foundInvalidChild = false;
                    $arrayIdiomas = array();
                    if(isset($_POST['CandidatoIdioma'])) 
                    {
                        foreach ($_POST['CandidatoIdioma'] as $idioma)
                        {
                            //$CandidatoIdioma = CandidatoIdioma::model()->findB;
                            //CandidatoIdioma::model()->deleteAllByAttributes($arrayIdiomas)

                            $CandidatoIdioma->attributes = $idioma;


                            if ($model->id)
                                $CandidatoIdioma->candidato_id = $model->id;

                            if (!$CandidatoIdioma->validate())
                                $foundInvalidChild = true;

                            $arrayIdiomas[] = $CandidatoIdioma;
                        }
                    }
                }

                if (!$foundInvalidChild && $model->save()) {
                    $this->guardarFoto($model->id, $foto);

                    // Guardar los idiomas
                    foreach($arrayIdiomas as $CandidatoIdioma)
                    {
                        $CandidatoIdioma->candidato_id = $model->id;
                        $CandidatoIdioma->save();
                    }

                    Yii::app()->user->setFlash('success', "Candidato actualizado correctamente.");
                    //$this->redirect(array('view','id'=>$model->id));
                }
            }*/

            if(isset($_POST['Candidato'])) {   
                $foto=CUploadedFile::getInstance($model,'foto');                    
                $model->attributes=$_POST['Candidato'];

                //the value for the foreign key 'candidato_id'
                $masterValues = array ('candidato_id'=>$model->id);

                //Save the master model after saving valid members
                if (MultiModelForm::save($idioma, $validatedIdiomas, $deleteIdiomas, $masterValues) && $model->save() ) {
                    $this->guardarFoto($model->id, $foto);
                    Yii::app()->user->setFlash('success', "Candidato actualizado correctamente.");        
                    //$this->redirect(array('view','id'=>$model->id));
                }
            }
            
            $this->render('update',array(
                'model'=>$model,
                'idioma'=>$idioma,
                'validatedIdiomas'=>$validatedIdiomas,
            ));
	}

	/**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'admin' page.
	 * @param integer $id the ID of the model to be deleted
	 */
	public function actionDelete($id)
	{
		if(Yii::app()->request->isPostRequest)
		{
			// we only allow deletion via POST request
			$this->loadModel($id)->delete();
                        $this->borrarFoto($id);

			// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
			if(!isset($_GET['ajax']))
				$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('index'));
		}
		else
			throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
	}

	/**
	 * Lists all models.
	 */
	public function actionIndex()
	{
            $model=new Candidato('search');
            $model->unsetAttributes();  // clear any default values
                /*$columns = array(            
        array(
            'type' => 'html',
            'name' => 'nombreApellidos',
            'value' => 'CHtml::link(CHtml::encode($data->nombreApellidos), array("update", "id"=>$data->id));',
            'headerHtmlOptions'=>array(
                'class' => 'head0 sorting', 
            ),
        ),
        array(
            'type' => 'html',
            'name' => 'estado',
            'value' => 'CHtml::link(CHtml::encode($data->estado), "#", array("class" => $data->cssClassEstado));',
            'headerHtmlOptions'=>array(
                'class' => 'head1 sorting', 
            ),
        ),

        array(
            'name' => 'id',
            'headerHtmlOptions'=>array(
                'class' => 'head0 sorting', 
            ),
        ),
        array(
            'name' => 'fecha_modificacion',
            'headerHtmlOptions'=>array(
                'class' => 'head1 sorting', 
            ),
        ),
    );

                $sortableColumnNamesArray = array('estado', 'id', 'nombre');
                
$criteria = new CDbCriteria;
// bro-tip: $_REQUEST is like $_GET and $_POST combined
if (isset($_REQUEST['sSearch']) && isset($_REQUEST['sSearch']{0})) {
    // use operator ILIKE if using PostgreSQL to get case insensitive search
    $criteria->addSearchCondition('nombre', $_REQUEST['sSearch'], true, 'AND', 'LIKE');
}
 
$sort = new EDTSort('Candidato', $sortableColumnNamesArray);
$sort->defaultOrder = 'id';
$pagination = new EDTPagination();
 
$dataProvider = new CActiveDataProvider('Candidato', array(
    'criteria'      => $criteria,
    'pagination'    => $pagination,
    'sort'          => $sort,
))                ;
                
            $widget=$this->createWidget('ext.EDataTables.EDataTables', array(
                'id'            => 'candidato-grid',
                'dataProvider'  => $dataProvider,
                'cssFile'       => Yii::app()->baseUrl . '/css/gridview.css',
                'ajaxUrl'       => Yii::app()->createUrl('/candidato/index'),
                'filter'        => Candidato::model(),
                'filterPosition'=> 'footer',
                'columns' => $columns,
            ));           */ 
            
            /*if(isset($_GET['Candidato']))
                    $model->attributes=$_GET['Candidato'];

            if (!Yii::app()->getRequest()->getIsAjaxRequest()) {
                $this->render('index',array(
                        'model'=>$model,
                        'widget' => $widget,
                ));
                return;
            } else {
                echo json_encode($widget->getFormattedData(intval($_REQUEST['sEcho'])));
                Yii::app()->end();
            }*/                
            
            $this->render('index',array(
                    'model'=>$model));
        }

	/**
	 * Manages all models.
	 */
	public function actionAdmin()
	{
		$model=new Candidato('search');
		$model->unsetAttributes();  // clear any default values
		if(isset($_GET['Candidato']))
			$model->attributes=$_GET['Candidato'];

		$this->render('admin',array(
			'model'=>$model,
		));
	}

	/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer the ID of the model to be loaded
	 */
	public function loadModel($id)
	{
		$model=Candidato::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
                
                $model->foto = $this->buscarFoto($id);                
		return $model;
	}

	/**
	 * Performs the AJAX validation.
	 * @param CModel the model to be validated
	 */
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='candidato-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
        
        private function guardarFoto($id, $foto) {
            if (!is_null($foto)) {
                $path = Yii::app()->basePath.'/../fotos/';
                $fichero = $id.'.jpg';
                $foto->saveAs($path.$fichero);
            }
        }
        
        private function borrarFoto($id) {
            $path = Yii::app()->basePath.'/../fotos/';
            $fichero = $id.'.jpg';
            if (file_exists($path.$fichero))
                unlink($path.$fichero);
        }
        
        private function buscarFoto($id) {
            $path = Yii::app()->basePath.'/../fotos/';
            $fichero = $id.'.jpg';
            $url = Yii::app()->request->baseUrl.'/fotos/';
            return file_exists($path.$fichero) ? $url.$fichero : $url.'no_avatar.png';
        }
}
