array('index', 'view', 'create', 'update', 'delete', 'admin', 'updateEstado'), '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')); } /** * @brief Lista todos los candidatos * */ public function actionIndex() { $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 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)); // Candidato $candidato->attributes = $_POST['Candidato']; $ficheroFotografia = CUploadedFile::getInstance($candidato, 'ficheroFotografia'); $quitarFotografia = Yii::app()->request->getParam('quitar_fotografia', '0'); // 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; } // 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); } // 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'); } } } $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; } } } ?>