Incam_PROFIND_Web/www/protected/controllers/CandidatoController.php

410 lines
17 KiB
PHP

<?php
/**
* @class CandidatoController
* @brief Controlador del modelo del candidato
*
* @package application.controllers
*/
class CandidatoController extends Controller {
/**
* @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',
'actions' => array('index', 'view', 'create', 'update', 'delete', 'admin', 'updateEstado', 'download'),
'users' => array('@'),
),
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() {
$candidato = new Candidato;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if (isset($_POST['Candidato'])) {
if ($this->saveModel($candidato))
$this->redirect(array('index'));
}
$this->render('create', array(
'candidato' => $candidato,
));
}
/**
* @brief Modificar un candidato.
* @param integer $id el ID del candidato a modificar
*/
public function actionUpdate($id) {
$candidato = $this->loadModel($id);
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($candidato);
if (isset($_POST['Candidato'])) {
if ($this->saveModel($candidato))
$this->redirect(array('index'));
}
$this->render('update', array(
'candidato' => $candidato,
));
}
public function actionUpdateEstado($id) {
$model = $this->loadModel($id);
// Uncomment the following line if AJAX validation is needed
$this->performAjaxValidation($model);
if (isset($_GET['ajax']))
var_dump($_GET['ajax']);
if (isset($_POST['Candidato'])) {
$model->id_estado = $_POST['Candidato']['id_estado'];
if ($model->save()) {
} else {
}
} else {
echo $this->renderPartial('_form_estado', array('model' => $model, false, true));
}
}
/**
* @brief Elimina un candidato.
* @param integer $id el ID del candidato a eliminar
*/
public function actionDelete($id) {
if (Yii::app()->request->isPostRequest) {
Yii::trace('Eliminar el candidato', 'application.controllers.CandidatoController');
$this->loadModel($id)->delete();
Yii::app()->user->setFlash('success', "Candidato eliminado correctamente.");
// 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, Yii::t('profind', 'Petición no válida'));
}
/**
* Descarga el documento
* @param integer $id el ID del documento
*/
public function actionDownload($id) {
$documento = CandidatoDocumento::model()->findByPk($id);
if ($documento === null)
throw new CHttpException(404, Yii::t('profind', 'La página solicitada no existe.'));
return $documento->download();
}
/**
* @brief Lista todos los candidatos
*
*/
public function actionIndex() {
Yii::trace(CVarDumper::dumpAsString($_GET));
$candidatos = new Candidato('search');
$candidatos->unsetAttributes(); // clear any default values
if (isset($_GET['Candidato']))
$candidatos->attributes = $_GET['Candidato'];
$this->render('index', array(
'candidatos' => $candidatos));
}
/**
* @brief
*
*/
public function darTotalCandidatos() {
$lista = array();
$lista['todos'] = Candidato::model()->count();
$lista['estado_disponibles'] = Candidato::model()->disponibles()->count();
$lista['estado_no_disponibles'] = Candidato::model()->no_disponibles()->count();
return $lista;
}
/**
* @brief Devuelve los datos del candidato con id $id.
* Si el candidato no existe, se lanza una excepción HTTP 404
* @param integer $id el ID del candidato a recuperar
*/
public function loadModel($id) {
Yii::trace('Cargar el modelo', 'application.controllers.CandidatoController');
$model = Candidato::model()->findByPk($id);
if ($model === null)
throw new CHttpException(404, Yii::t('profind', 'La página solicitada no existe.'));
return $model;
}
/**
* @brief Guarda los datos de un candidato $candidato a partir de $_POST
* @param Candidato $candidato instancia del candidato
* @return bool
*/
private function saveModel($candidato) {
if (!isset($_POST['Candidato'])) {
throw new CHttpException(405, Yii::t('profind', 'Método no permitido.'));
}
Yii::trace(CVarDumper::dumpAsString($_POST));
Yii::trace(CVarDumper::dumpAsString($_FILES));
// Candidato
$candidato->attributes = $_POST['Candidato'];
$ficheroFotografia = CUploadedFile::getInstance($candidato, 'ficheroFotografia');
$quitarFotografia = Yii::app()->request->getParam('quitar_fotografia', '0');
// Capacidades del candidato
$listaCapacidadesBorrar = array();
if (isset($_POST['CandidatoCapacidadProfesional'])) {
$listaCapacidades = array();
foreach ($_POST['CandidatoCapacidadProfesional'] as $key => $capacidad) {
if ($capacidad['id'])
$candidatoCapacidad = CandidatoCapacidadProfesional::model()->findByPk($capacidad['id']);
else
$candidatoCapacidad = new CandidatoCapacidadProfesional();
$candidatoCapacidad->attributes = $capacidad;
$candidatoCapacidad->id_candidato = $candidato->id;
if ($capacidad['_borrar'])
$listaCapacidadesBorrar[] = $candidatoCapacidad;
else
$listaCapacidades[] = $candidatoCapacidad;
}
$candidato->capacidadesProfesionales = $listaCapacidades;
}
// Titulaciones del candidato
$listaTitulacionesBorrar = $candidato->titulaciones;
if (isset($_POST['CandidatoTitulacion'])) {
$listaTitulaciones = array();
foreach ($_POST['CandidatoTitulacion'] as $titulacion) {
$candidatoTitulacion = new CandidatoTitulacion();
$candidatoTitulacion->titulacion = $titulacion;
$candidatoTitulacion->candidato_id = $candidato->id;
$listaTitulaciones[] = $candidatoTitulacion;
}
$candidato->titulaciones = $listaTitulaciones;
}
// Idiomas del candidato
$listaIdiomasBorrar = array();
if (isset($_POST['CandidatoIdioma'])) {
$listaIdiomas = array();
foreach ($_POST['CandidatoIdioma'] as $key => $idioma) {
if ($idioma['id'])
$candidatoIdioma = CandidatoIdioma::model()->findByPk($idioma['id']);
else
$candidatoIdioma = new CandidatoIdioma();
$candidatoIdioma->attributes = $idioma;
$candidatoIdioma->candidato_id = $candidato->id;
if ($idioma['_borrar'])
$listaIdiomasBorrar[] = $candidatoIdioma;
else
$listaIdiomas[] = $candidatoIdioma;
}
$candidato->idiomas = $listaIdiomas;
}
// Documentos del candidato
$listaDocumentosBorrar = array();
if (isset($_POST['CandidatoDocumento'])) {
$listaDocumentos = array();
foreach ($_POST['CandidatoDocumento'] as $key => $documento) {
if ($documento['id'])
$candidatoDocumento = CandidatoDocumento::model()->findByPk($documento['id']);
else {
$candidatoDocumento = new CandidatoDocumento();
$candidatoDocumento->ficheroDocumento = CUploadedFile::getInstance($candidatoDocumento, "[$key]nombre_fichero");
Yii::trace(CVarDumper::dumpAsString($candidatoDocumento->ficheroDocumento));
}
$candidatoDocumento->attributes = $documento;
$candidatoDocumento->fecha = CDateTimeParser::parse($documento['fecha'],'dd/MM/yyyy');
$candidatoDocumento->id_candidato = $candidato->id;
if ($documento['_borrar'])
$listaDocumentosBorrar[] = $candidatoDocumento;
else
$listaDocumentos[] = $candidatoDocumento;
}
$candidato->documentos = $listaDocumentos;
}
// Guardar los datos
$errores = array();
$transaccion = Yii::app()->db->beginTransaction();
try {
Yii::trace('Guardando el candidato', 'application.controllers.CandidatoController');
if (!$candidato->save()) {
$errores = array_merge($errores, $candidato->getErrors());
throw new CException('Error al guardar el candidato');
}
if (($quitarFotografia == '1') && ($candidato->fotografia->tieneFotografia())) {
Yii::trace('Eliminando la fotografía del candidato', 'application.controllers.CandidatoController');
$candidato->fotografia->eliminarFotografia();
}
if ($ficheroFotografia) {
Yii::trace('Guardando la fotografía del candidato', 'application.controllers.CandidatoController');
$candidato->fotografia->guardarFotografia($ficheroFotografia);
}
// Capacidades
if (!empty($listaCapacidadesBorrar)) {
Yii::trace('Eliminando capacidades marcadas para borrar', 'application.controllers.CandidatoController');
foreach ($listaCapacidadesBorrar as $candidatoCapacidad) {
Yii::trace('Eliminando capacidad... ', 'application.controllers.CandidatoController');
Yii::trace(CVarDumper::dumpAsString($candidatoCapacidad->attributes), 'application.controllers.CandidatoController');
if (!$candidatoCapacidad->delete()) {
$errores = array_merge($errores, $candidatoCapacidad->getErrors());
throw new CException('Error al eliminar una capacidad del candidato');
}
}
$listaCapacidadesBorrar = NULL;
}
if (!empty($candidato->capacidadesProfesionales)) {
Yii::trace('Guardando la lista de capacidades', 'application.controllers.CandidatoController');
foreach ($candidato->capacidadesProfesionales as $candidatoCapacidad) {
if (!$candidatoCapacidad->save()) {
$errores = array_merge($errores, $candidatoCapacidad->getErrors());
throw new CException('Error al guardar una capacidad del candidato');
}
}
}
// Titulaciones
if (!empty($listaTitulacionesBorrar)) {
Yii::trace('Eliminando titulaciones marcadas para borrar', 'application.controllers.CandidatoController');
foreach ($listaTitulacionesBorrar as $candidatoTitulacion) {
if (!$candidatoTitulacion->delete()) {
$errores = array_merge($errores, $candidatoTitulacion->getErrors());
throw new CException('Error al eliminar una titulación del candidato');
}
}
$listaTitulacionesBorrar = NULL;
}
if (!empty($candidato->titulaciones)) {
Yii::trace('Guardando la lista de titulaciones', 'application.controllers.CandidatoController');
foreach ($candidato->titulaciones as $candidatoTitulacion) {
if (!$candidatoTitulacion->save()) {
$errores = array_merge($errores, $candidatoTitulacion->getErrors());
throw new CException('Error al guardar una titulación del candidato');
}
}
}
// Idiomas
if (!empty($listaIdiomasBorrar)) {
Yii::trace('Eliminando idiomas marcados para borrar', 'application.controllers.CandidatoController');
foreach ($listaIdiomasBorrar as $candidatoIdioma) {
Yii::trace('Eliminando idioma... ', 'application.controllers.CandidatoController');
Yii::trace(CVarDumper::dumpAsString($candidatoIdioma->attributes), 'application.controllers.CandidatoController');
if (!$candidatoIdioma->delete()) {
$errores = array_merge($errores, $candidatoIdioma->getErrors());
throw new CException('Error al eliminar un idioma del candidato');
}
}
$listaIdiomasBorrar = NULL;
}
if (!empty($candidato->idiomas)) {
Yii::trace('Guardando la lista de idiomas', 'application.controllers.CandidatoController');
foreach ($candidato->idiomas as $candidatoIdioma) {
if (!$candidatoIdioma->save()) {
$errores = array_merge($errores, $candidatoIdioma->getErrors());
throw new CException('Error al guardar un idioma del candidato');
}
}
}
// Documentos
if (!empty($listaDocumentosBorrar)) {
Yii::trace('Eliminando documentos marcados para borrar', 'application.controllers.CandidatoController');
foreach ($listaDocumentosBorrar as $candidatoDocumento) {
Yii::trace('Eliminando documento... ', 'application.controllers.CandidatoController');
Yii::trace(CVarDumper::dumpAsString($candidatoDocumento->attributes), 'application.controllers.CandidatoController');
if (!$candidatoDocumento->delete()) {
$errores = array_merge($errores, $candidatoDocumento->getErrors());
throw new CException('Error al eliminar un documento del candidato');
}
}
$listaDocumentosBorrar = NULL;
}
if (!empty($candidato->documentos)) {
Yii::trace('Guardando la lista de documentos', 'application.controllers.CandidatoController');
foreach ($candidato->documentos as $candidatoDocumento) {
Yii::trace(CVarDumper::dumpAsString($candidatoDocumento->attributes), 'application.controllers.CandidatoController');
if (!$candidatoDocumento->save()) {
$errores = array_merge($errores, $candidatoDocumento->getErrors());
throw new CException('Error al guardar un documento del candidato');
}
}
}
$transaccion->commit();
Yii::trace('Candidato guardado', 'application.controllers.CandidatoController');
Yii::app()->user->setFlash('success', Yii::t('profind', 'Se ha actualizado el candidato'));
return TRUE;
} catch (Exception $e) {
Yii::trace($e->getMessage(), 'application.controllers.CandidatoController');
$transaccion->rollBack();
Yii::app()->user->setFlash('error', Yii::t('profind', 'Se ha producido un error al actualizar el candidato'));
if (YII_DEBUG) {
$resultado = array();
foreach ($errores as $campo => $mensaje)
$resultado[$campo] = $mensaje;
Yii::trace(CVarDumper::dumpAsString($resultado), 'application.controllers.CandidatoController');
}
return FALSE;
}
}
}
?>