'', 'tope_diario' => 40, 'borrar_al_desinstalar' => false, ) ); } /** * Correo al que van los avisos. * * @return string */ public static function destinatario() { $ajustes = self::ajustes(); $correo = is_email( $ajustes['correo_avisos'] ) ? $ajustes['correo_avisos'] : get_option( 'admin_email' ); return (string) $correo; } /** * ¿El envío viene de un formulario? Solo esos avisan al administrador por firmante (D-26, D-32). * * @param array $envio Envío. * @return bool */ public static function es_de_formulario( array $envio ) { return in_array( $envio['origen'], apply_filters( 'validafirma_origenes_de_formulario', array( 'wpforms', 'elementor' ) ), true ); } /** * Fecha de hoy en Chile (Y-m-d). * * @return string */ public static function hoy_en_chile() { $ahora = new DateTime( 'now', new DateTimeZone( 'America/Santiago' ) ); return $ahora->format( 'Y-m-d' ); } /** * Textos de cada causa. * * @param string $causa Código de la causa. * @return array{titulo:string, accion:string} */ private static function textos_de( $causa ) { $lista = Validafirma_Envios::motivos(); if ( 0 === strpos( $causa, 'sin_enviar:' ) ) { $motivo = substr( $causa, 11 ); $etiqueta = isset( $lista[ $motivo ] ) ? $lista[ $motivo ] : $motivo; $acciones = array( 'saldo' => sprintf( /* translators: %s: dirección para recargar. */ __( 'Recarga tu saldo en %s y envía a mano desde la lista los envíos que quedaron sin enviar.', 'validafirma' ), Validafirma_Conexion::url_recarga() ), 'plan' => __( 'Revisa tu plan de REDCUMBRE y envía a mano desde la lista los envíos que quedaron sin enviar.', 'validafirma' ), 'tope_dia' => __( 'Si quieres cambiar el tope, está en Ajustes. Los envíos que quedaron sin enviar los puedes enviar a mano desde la lista.', 'validafirma' ), 'desconectado' => __( 'Vuelve a conectar tu cuenta desde Ajustes. Los envíos que quedaron sin enviar los puedes enviar a mano desde la lista.', 'validafirma' ), 'falta_firmante_empresa' => __( 'Crea el firmante de la empresa del modo en que está el sitio y configúralo en el formulario.', 'validafirma' ), ); return array( /* translators: %s: motivo, por ejemplo «saldo». */ 'titulo' => sprintf( __( 'Un envío a firma quedó sin enviar (%s).', 'validafirma' ), $etiqueta ), 'accion' => isset( $acciones[ $motivo ] ) ? $acciones[ $motivo ] : __( 'Revisa el motivo en la lista y envíalo a mano cuando lo hayas resuelto.', 'validafirma' ), ); } $otras = array( 'invitacion_no_entregada' => __( 'La invitación a firmar de un envío no llegó a su destino.', 'validafirma' ), 'bloqueado' => __( 'Un firmante quedó bloqueado.', 'validafirma' ), 'identidad_no_coincide' => __( 'La identidad verificada de un firmante no coincide con la esperada.', 'validafirma' ), 'no_emitido' => __( 'Un documento quedó no emitido.', 'validafirma' ), ); return array( 'titulo' => isset( $otras[ $causa ] ) ? $otras[ $causa ] : __( 'Hay un aviso de ValidaFirma que revisar.', 'validafirma' ), 'accion' => __( 'Revisa el detalle en la lista de ValidaFirma de tu sitio.', 'validafirma' ), ); } /** * Avisa una causa con el primer caso del día; los siguientes del mismo día no envían otro correo y la lista lleva la cuenta. * * @param string $causa Código de la causa (por ejemplo `sin_enviar:saldo` o `bloqueado`). * @param array $envio Envío que la causó. * @return bool Verdadero si se envió un correo. */ public static function por_causa( $causa, array $envio ) { $hoy = self::hoy_en_chile(); $dia = get_option( self::OPCION_DEL_DIA, array() ); if ( ! is_array( $dia ) || ! isset( $dia['fecha'] ) || $dia['fecha'] !== $hoy ) { $dia = array( 'fecha' => $hoy, 'causas' => array(), ); } $ya = isset( $dia['causas'][ $causa ] ) ? (int) $dia['causas'][ $causa ] : 0; $dia['causas'][ $causa ] = $ya + 1; update_option( self::OPCION_DEL_DIA, $dia, false ); if ( $ya > 0 ) { return false; } $textos = self::textos_de( $causa ); $cuerpo = $textos['titulo'] . "\n\n" . self::linea_de_origen( $envio ) . "\n" . $textos['accion'] . "\n\n" . __( 'Los siguientes casos de esta misma causa que ocurran hoy no te enviarán otro correo: quedan en la lista de ValidaFirma de tu sitio, que lleva la cuenta.', 'validafirma' ) . "\n" . admin_url( 'admin.php?page=validafirma' ) . "\n\n" . 'ValidaFirma, de REDCUMBRE'; return self::enviar( $textos['titulo'], $cuerpo ); } /** * Correo de documento firmado: uno por documento (D-35). * * @param array $envio Envío firmado. * @return bool */ public static function firmado( array $envio ) { $cuerpo = __( 'Un documento enviado desde un formulario de tu sitio quedó firmado.', 'validafirma' ) . "\n\n" . self::linea_de_origen( $envio ) . "\n" . __( 'El PDF firmado está en la lista de ValidaFirma de tu sitio, para descargarlo:', 'validafirma' ) . "\n" . admin_url( 'admin.php?page=validafirma' ) . "\n\n" . 'ValidaFirma, de REDCUMBRE'; return self::enviar( __( 'Un documento quedó firmado', 'validafirma' ), $cuerpo ); } /** * Línea que dice de qué formulario y documento se trata. * * @param array $envio Envío. * @return string */ private static function linea_de_origen( array $envio ) { $nombre = apply_filters( 'validafirma_nombre_del_formulario', '', $envio['origen'], $envio['origen_ref'] ); $origen = '' !== $nombre ? $nombre : $envio['origen_ref']; $linea = ''; if ( '' !== (string) $origen ) { /* translators: %s: nombre o número del formulario. */ $linea .= sprintf( __( 'Formulario: %s', 'validafirma' ), $origen ) . "\n"; } if ( '' !== (string) $envio['titulo'] ) { /* translators: %s: nombre del documento. */ $linea .= sprintf( __( 'Documento: %s', 'validafirma' ), $envio['titulo'] ) . "\n"; } return $linea; } /** * Envía un correo de texto plano al administrador. * * @param string $asunto Asunto sin prefijo. * @param string $cuerpo Cuerpo de texto plano. * @return bool */ private static function enviar( $asunto, $cuerpo ) { $prefijo = '[' . wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ) . '] '; return wp_mail( self::destinatario(), $prefijo . $asunto, $cuerpo ); } }