Пример #1
0
 /**
  * Edita, actualiza o borrar un registro
  *
  * Si viene por GET es editar
  * Si viene por POST puede ser actualizar o borrar
  * según el valor de $this->request['accion']
  *
  * @return array con el template y valores a renderizar
  */
 public function editAction()
 {
     switch ($this->request["METHOD"]) {
         case 'GET':
             if ($this->values['permisos']['permisosModulo']['CO']) {
                 //SI EN LA POSICION 3 DEL REQUEST VIENE ALGO,
                 //SE ENTIENDE QUE ES EL VALOR DE LA CLAVE PARA LINKAR CON LA ENTIDAD PADRE
                 //ESTO SE UTILIZA PARA LOS FORMULARIOS PADRE->HIJO
                 if ($this->request['3'] != '') {
                     $this->values['linkBy']['value'] = $this->request['3'];
                 }
                 //MOSTRAR DATOS. El ID viene en la posicion 2 del request
                 $datos = new $this->entity();
                 $datos = $datos->find('PrimaryKeyMD5', $this->request[2]);
                 if ($datos->getStatus()) {
                     $this->values['datos'] = $datos;
                     $this->values['metadatos'] = $datos->getMetaDatas();
                     $this->values['errores'] = $datos->getErrores();
                 } else {
                     $this->values['errores'] = array("Valor no encontrado. El objeto que busca no existe. Es posible que haya sido eliminado por otro usuario.");
                 }
                 $template = $this->entity . '/edit.html.twig';
             } else {
                 $template = '_global/forbiden.html.twig';
             }
             return array('template' => $template, 'values' => $this->values);
             break;
         case 'POST':
             //COGER DEL REQUEST EL LINK A LA ENTIDAD PADRE
             if ($this->values['linkBy']['id'] != '') {
                 $this->values['linkBy']['value'] = $this->request[$this->entity][$this->values['linkBy']['id']];
             }
             switch ($this->request['accion']) {
                 case 'Guardar':
                     //GUARDAR DATOS
                     if ($this->values['permisos']['permisosModulo']['UP']) {
                         // Cargo la entidad
                         $datos = new $this->entity($this->request[$this->entity][$this->form->getPrimaryKey()]);
                         // Vuelco los datos del request
                         $datos->bind($this->request[$this->entity]);
                         $metaDatos = $this->request['metaDato'];
                         $rules = $this->form->getRules();
                         if ($datos->valida($rules)) {
                             $this->values['alertas'] = $datos->getAlertas();
                             if ($datos->save()) {
                                 if (count($metaDatos)) {
                                     $this->saveMetaDatos($datos->getPrimaryKeyValue(), $metaDatos);
                                 }
                                 if ($datos->getUrlTarget() == '') {
                                     $this->gestionUrlMeta($datos);
                                     // Salvar los campos Controller, action, template y parameters
                                     // del objeto CpanUrlAmigables asociado
                                     if ($this->request['objetoUrlAmigable']['Id'] != '') {
                                         $arrayUrlAmigable = $this->request['objetoUrlAmigable'];
                                         $objetoUrl = new CpanUrlAmigables($arrayUrlAmigable['Id']);
                                         $objetoUrl->setController($arrayUrlAmigable['Controller']);
                                         $objetoUrl->setAction($arrayUrlAmigable['Action']);
                                         $objetoUrl->setTemplate($arrayUrlAmigable['Template']);
                                         $objetoUrl->setParameters($arrayUrlAmigable['Parameters']);
                                         if (!$objetoUrl->save()) {
                                             $this->values['errores'] = $objetoUrl->getErrores();
                                         }
                                         unset($objetoUrl);
                                     }
                                 }
                                 // Si estoy en el idioma principal y el módulo es traducible, tengo que
                                 // repercutir los cambios a los demás idiomas
                                 if ($_SESSION['idiomas']['actual'] == '0' && $this->varEnvMod['translatable'] == '1') {
                                     $this->ActualizaIdiomas($datos->getPrimaryKeyValue());
                                 }
                                 // Si ex buscable, actualizar la tabla de búsquedas
                                 if ($this->varEnvMod['searchable'] == '1') {
                                     $this->ActualizaBusquedas($datos);
                                 }
                             } else {
                                 $this->values['errores'] = $datos->getErrores();
                             }
                             //Recargo el objeto para refrescar las propiedas que
                             //hayan podido ser objeto de algun calculo durante el proceso
                             //de guardado.
                             $datos = new $this->entity($this->request[$this->entity][$datos->getPrimaryKeyName()]);
                         } else {
                             $this->values['errores'] = $datos->getErrores();
                             $this->values['alertas'] = $datos->getAlertas();
                         }
                         $this->values['datos'] = $datos;
                         $this->values['metadatos'] = $datos->getMetaDatas();
                         return array('template' => $this->entity . '/edit.html.twig', 'values' => $this->values);
                     } else {
                         return array('template' => '_global/forbiden.html.twig', 'values' => $this->values);
                     }
                     break;
                 case 'Borrar':
                     //MARCA EL OBJETO COMO BORRADO, PERO NO BORRA FÍSICAMENTE
                     if ($this->values['permisos']['permisosModulo']['DE']) {
                         $datos = new $this->entity($this->request[$this->entity][$this->form->getPrimaryKey()]);
                         $primaryKey = $datos->getPrimaryKeyValue();
                         if ($datos->erase()) {
                             $this->borraMetaDatos($this->entity, $primaryKey);
                             // Si ex buscable, actualizar la tabla de búsquedas
                             if ($this->varEnvMod['searchable'] == '1') {
                                 $this->ActualizaBusquedas($datos);
                             }
                             $datos = new $this->entity();
                             $this->values['datos'] = $datos;
                             $this->values['metadatos'] = $datos->getMetaDatas();
                             $this->values['errores'] = array();
                             unset($datos);
                             return array('template' => $this->entity . '/new.html.twig', 'values' => $this->values);
                         } else {
                             $this->values['datos'] = $datos;
                             $this->values['metadatos'] = $datos->getMetaDatas();
                             $this->values['errores'] = $datos->getErrores();
                             $this->values['alertas'] = $datos->getAlertas();
                             unset($datos);
                             return array('template' => $this->entity . '/edit.html.twig', 'values' => $this->values);
                         }
                     } else {
                         return array('template' => '_global/forbiden.html.twig', 'values' => $this->values);
                     }
                     break;
             }
             break;
     }
 }