git-svn-id: https://192.168.0.254/svn/Proyectos.Incam_PROFIND_Web/trunk@76 3fe1ab16-cfe0-e34b-8c9f-7d8c168d430d
410 lines
17 KiB
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;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
?>
|