/** * 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; } }