public function ejecutar(Etapa $etapa) { $r = new Regla($this->extra->url); $url = $r->getExpresionParaOutput($etapa->id); //Hacemos encoding a la url $url = preg_replace_callback('/([\\?&][^=]+=)([^&]+)/', function ($matches) { $key = $matches[1]; $value = $matches[2]; return $key . urlencode($value); }, $url); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); $json = json_decode($result); foreach ($json as $key => $value) { $dato = Doctrine::getTable('DatoSeguimiento')->findOneByNombreAndEtapaId($key, $etapa->id); if (!$dato) { $dato = new DatoSeguimiento(); } $dato->nombre = $key; $dato->valor = $value; $dato->etapa_id = $etapa->id; $dato->save(); } }
public function ejecutar(Etapa $etapa) { $regla = new Regla($this->extra->expresion); $valor = $regla->evaluar($etapa->id); $dato = Doctrine::getTable('DatoSeguimiento')->findOneByNombreAndEtapaId($this->extra->variable, $etapa->id); if (!$dato) { $dato = new DatoSeguimiento(); } $dato->nombre = $this->extra->variable; $dato->valor = $valor; $dato->etapa_id = $etapa->id; $dato->save(); }
public function cerrar() { //Si ya fue cerrada, retornamos inmediatamente. if (!$this->pendiente) { return; } if ($this->Tarea->almacenar_usuario) { $dato = Doctrine::getTable('DatoSeguimiento')->findOneByNombreAndEtapaId($this->Tarea->almacenar_usuario_variable, $this->id); if (!$dato) { $dato = new DatoSeguimiento(); } $dato->nombre = $this->Tarea->almacenar_usuario_variable; $dato->valor = UsuarioSesion::usuario()->id; $dato->etapa_id = $this->id; $dato->save(); } //Ejecutamos los eventos $eventos = Doctrine_Query::create()->from('Evento e')->where('e.tarea_id = ? AND e.instante = ? AND e.paso_id IS NULL', array($this->Tarea->id, 'despues'))->execute(); foreach ($eventos as $e) { $r = new Regla($e->regla); if ($r->evaluar($this->id)) { $e->Accion->ejecutar($this); } } //Cerramos la etapa $this->pendiente = 0; $this->ended_at = date('Y-m-d H:i:s'); $this->save(); }
public function ejecutar_form($etapa_id, $secuencia) { $etapa = Doctrine::getTable('Etapa')->find($etapa_id); if ($etapa->usuario_id != UsuarioSesion::usuario()->id) { echo 'Usuario no tiene permisos para ejecutar esta etapa.'; exit; } if (!$etapa->pendiente) { echo 'Esta etapa ya fue completada'; exit; } if (!$etapa->Tarea->activa()) { echo 'Esta etapa no se encuentra activa'; exit; } if ($etapa->vencida()) { echo 'Esta etapa se encuentra vencida'; exit; } $paso = $etapa->getPasoEjecutable($secuencia); $formulario = $paso->Formulario; $modo = $paso->modo; $respuesta = new stdClass(); if ($modo == 'edicion') { $validar_formulario = FALSE; foreach ($formulario->Campos as $c) { //Validamos los campos que no sean readonly y que esten disponibles (que su campo dependiente se cumpla) if ($c->isEditableWithCurrentPOST($etapa_id)) { $c->formValidate($etapa->id); $validar_formulario = TRUE; } } if (!$validar_formulario || $this->form_validation->run() == TRUE) { //Almacenamos los campos foreach ($formulario->Campos as $c) { //Almacenamos los campos que no sean readonly y que esten disponibles (que su campo dependiente se cumpla) if ($c->isEditableWithCurrentPOST($etapa_id)) { $dato = Doctrine::getTable('DatoSeguimiento')->findOneByNombreAndEtapaId($c->nombre, $etapa->id); if (!$dato) { $dato = new DatoSeguimiento(); } $dato->nombre = $c->nombre; $dato->valor = $this->input->post($c->nombre) === false ? '' : $this->input->post($c->nombre); if (!is_object($dato->valor) && !is_array($dato->valor)) { if (preg_match('/^\\d{4}[\\/\\-]\\d{2}[\\/\\-]\\d{2}$/', $dato->valor)) { $dato->valor = preg_replace("/^(\\d{4})[\\/\\-](\\d{2})[\\/\\-](\\d{2})/i", "\$3-\$2-\$1", $dato->valor); } } $dato->etapa_id = $etapa->id; $dato->save(); } } $etapa->save(); $etapa->finalizarPaso($paso); $respuesta->validacion = TRUE; $qs = $this->input->server('QUERY_STRING'); $prox_paso = $etapa->getPasoEjecutable($secuencia + 1); if (!$prox_paso) { $respuesta->redirect = site_url('etapas/ejecutar_fin/' . $etapa_id) . ($qs ? '?' . $qs : ''); } else { if ($etapa->Tarea->final && $prox_paso->getReadonly() && end($etapa->getPasosEjecutables()) == $prox_paso) { //Cerrado automatico $etapa->iniciarPaso($prox_paso); $etapa->finalizarPaso($prox_paso); $etapa->avanzar(); $respuesta->redirect = site_url('etapas/ver/' . $etapa->id . '/' . (count($etapa->getPasosEjecutables()) - 1)); } else { $respuesta->redirect = site_url('etapas/ejecutar/' . $etapa_id . '/' . ($secuencia + 1)) . ($qs ? '?' . $qs : ''); } } } else { $respuesta->validacion = FALSE; $respuesta->errores = validation_errors(); } } else { if ($modo == 'visualizacion') { $respuesta->validacion = TRUE; $qs = $this->input->server('QUERY_STRING'); $prox_paso = $etapa->getPasoEjecutable($secuencia + 1); if (!$prox_paso) { $respuesta->redirect = site_url('etapas/ejecutar_fin/' . $etapa_id) . ($qs ? '?' . $qs : ''); } else { if ($etapa->Tarea->final && $prox_paso->getReadonly() && end($etapa->getPasosEjecutables()) == $prox_paso) { //Cerrado automatico $etapa->iniciarPaso($prox_paso); $etapa->finalizarPaso($prox_paso); $etapa->avanzar(); $respuesta->redirect = site_url('etapas/ver/' . $etapa->id . '/' . (count($etapa->getPasosEjecutables()) - 1)); } else { $respuesta->redirect = site_url('etapas/ejecutar/' . $etapa_id . '/' . ($secuencia + 1)) . ($qs ? '?' . $qs : ''); } } } } echo json_encode($respuesta); }
private function displayFirmador($modo, $dato, $etapa_id) { if (!$etapa_id) { return '<p>' . $this->etiqueta . '</p>'; } $etapa = Doctrine::getTable('Etapa')->find($etapa_id); if (!$dato) { //Generamos el documento, ya que no se ha generado $file = $this->Documento->generar($etapa->id); $dato = new DatoSeguimiento(); $dato->nombre = $this->nombre; $dato->valor = $file->filename; $dato->etapa_id = $etapa->id; $dato->save(); } else { $file = Doctrine::getTable('File')->findOneByTipoAndFilename('documento', $dato->valor); if ($etapa->pendiente && isset($this->extra->regenerar) && $this->extra->regenerar) { $file->delete(); $file = $this->Documento->generar($etapa->id); $dato->valor = $file->filename; $dato->save(); } } $display = '<p>' . $this->etiqueta . '</p>'; $display .= '<div id="exito" class="alert alert-success" style="display: none;">Documento fue firmado con éxito.</div>'; $display .= '<p><a class="btn btn-info" href="' . site_url('documentos/get/' . $dato->valor) . '?id=' . $file->id . '&token=' . $file->llave . '"><i class="icon-search icon-white"></i> Previsualizar el documento</a></p>'; $isMac = stripos($_SERVER['HTTP_USER_AGENT'], 'macintosh') !== false; if ($isMac) { $display .= ' <script> function checkPasswordToken(){ var passwordToken = $("#passwordTokenValue").val(); var value = document.SignerApplet.hasPK(passwordToken); if (value === "true") { } else { alert("No se ha detectado Token, por favor inserte su Token de firma o la password ingresada es la incorrecta"); } } </script> <div id="password"> <label>Contraseña del Token:</label> <input id="passwordTokenValue" type="password" /> <button type="button" class="btn" onclick="checkPasswordToken()">Desbloquear Token</button> </div><br />'; } $display .= ' <script> function firmarConToken(){ var resultadoApplet = document.SignerApplet.signDocuments(); var status=$(resultadoApplet).find("documento").attr("RESULTADO"); if (status==="true") { $("#exito").show(); $("#password").hide(); $("#firmaDiv").hide(); alert("Documento firmado con éxito."); }else{ alert("Hubo un error al intentar firmar el documento."); } } function progreso(tot, eje, documento){ } </script> <div id="firmaDiv"> <label>Seleccione la firma</label> <div style="float: left;"> <applet code="' . ($isMac ? 'cl.agile.pdf.applet.SignerAppletMinSegPressMAC' : 'cl.agile.pdf.applet.SignerAppletMinSegPress') . '" width="350" height="25" name="SignerApplet"> <param name="jnlp_href" value="' . base_url() . 'assets/applets/signer/' . ($isMac ? 'SignerApplet_0_7_mac.jnlp' : 'SignerApplet_0_9_win.jnlp') . '" /> <param name="documentosPdf" value="' . htmlspecialchars('<PorFirmar><documento id=\'' . $file->id . '\' token=\'' . $file->llave_firma . '\' comentario=\'Firmado Digitalmente\' lugar=\'Santiago\' tipoFirma=\'TIPO_DOC\'/></PorFirmar>') . '" /> <param name="urlBaseGet" value="' . site_url('documentos/firma_get') . '" /> <param name="urlBasePost" value="' . site_url('documentos/firma_post') . '" /> <param name="cLetra" value="000000" /> <param name="cFondo" value="FFFFFF" /> </applet> </div> <div><button type="button" class="btn btn-success" onclick="firmarConToken()"><i class="icon-pencil icon-white"></i> Firmar Documento</button></div> </div>'; return $display; }