' . "\n"; aicc_mostrar_cabecera_pagina_admin(); echo '

'; esc_html_e( 'Create article', 'ai-content-creator' ); echo "

\n"; // Determina si falta acceso a la generación. $deshabilitado = ''; if ( ! aicc_puede_generar_contenido_ai() ) { $mensaje = __( 'No AI text generation provider is available yet. Configure a WordPress AI provider or add a legacy OpenAI API key.', 'ai-content-creator' ); $mensaje .= '
'; /* translators: %1$s: HTML link start, %2$s: HTML link end. */ $mensaje .= sprintf( __( 'Go to %1$shelp section%2$s and follow the procedure to create one.', 'ai-content-creator' ), '', '' ); aicc_mostrar_notificacion( $mensaje, 'error' ); $deshabilitado = ' disabled'; } $generar = false; $regenerar = false; $titulo = ''; $contexto = ''; $directrices_adicionales = ''; // Generar es el proceso completo con creación de la AI. // Regenerar es solamente mostrar el formulario para poder luego pulsar y generar. if ( isset( $_POST['generar'] ) ) { // Verificar el nonce. if ( ! isset( $_POST['aicc_nonce'] ) || ! check_admin_referer( 'aicc_crear_articulo_nonce', 'aicc_nonce' ) ) { wp_die( 'Acceso a crear artículo no autorizado.' ); } $generar = true; } elseif ( isset( $_GET['accion'] ) ) { if ( 'regenerar' === $_GET['accion'] ) { $regenerar = true; } } // Commas, quotes and symbols are welcome, will use wp_unslash to allow them. // Database usage. // Tanto al generar como al regenerar, hay datos previos considerable para cargar en el form. if ( $generar ) { if ( isset( $_POST['titulo'] ) ) { // Aquí perdemos la posibilidad de títulos como "¿Debo utilizar o ?". // Revertir las magic_quotes, que siempre actúan en WP. $titulo = sanitize_text_field( wp_unslash( $_POST['titulo'] ) ); // Sanea y valida el título para determinar que la generación es válida. $titulo = aicc_sanea_titulo( $titulo ); if ( ! aicc_valida_titulo( $titulo ) ) { $generar = false; } } if ( isset( $_POST['contexto'] ) ) { $contexto = sanitize_textarea_field( wp_unslash( $_POST['contexto'] ) ); $contexto = aicc_sanea_contexto( $contexto ); } if ( isset( $_POST['directrices_adicionales'] ) ) { $directrices_adicionales = sanitize_textarea_field( wp_unslash( $_POST['directrices_adicionales'] ) ); $directrices_adicionales = aicc_sanea_directrices_adicionales( $directrices_adicionales ); } } if ( $regenerar ) { /* Cargar ID o indicar error. Cargar cada campo que exista. */ if ( isset( $_GET['id'] ) ) { $id_articulo = sanitize_text_field( wp_unslash( $_GET['id'] ) ); $id_articulo = aicc_valida_id_articulo( $id_articulo ); $aicc_generacion_anterior = new AICC_Generacion(); if ( $aicc_generacion_anterior->cargar( $id_articulo ) ) { $titulo = $aicc_generacion_anterior->titulo(); $contexto = $aicc_generacion_anterior->contexto(); $directrices_adicionales = $aicc_generacion_anterior->directrices_adicionales(); } else { aicc_mostrar_notificacion( __( 'Unable to load the specified article.', 'ai-content-creator' ), 'error' ); } } else { aicc_mostrar_notificacion( __( 'You have not specified based on which article you want to create another one.', 'ai-content-creator' ), 'error' ); } } echo wp_kses( aicc_formulario_crear_html( $titulo, $contexto, $directrices_adicionales, $deshabilitado ), aicc_permitidos_kses_formulario() ); aicc_mostrar_imagen_espera_html(); ?>
'; $aicc_generacion = aicc_generar_articulo( array( 'titulo' => $titulo, 'contexto' => $contexto, 'directrices_adicionales' => $directrices_adicionales, ) ); // Al terminar de generar, oculta la animación de nuevo. ?> get_error_message(), 'error' ); } else { $aicc_generacion->mostrar_errores_html(); } if ( is_wp_error( $aicc_generacion ) || ! $aicc_generacion->contenido() ) { aicc_mostrar_notificacion( __( 'Something went wrong while trying to generate the content.', 'ai-content-creator' ), 'warning' ); } else { esc_html_e( 'Content', 'ai-content-creator' ); echo ":\n"; $aicc_generacion->mostrar_iframe_contenido_html(); echo wp_kses( $aicc_generacion->bloque_operaciones_html(), $aicc_generacion->aicc_permitidos_kses_operaciones() ); } echo '
'; } ?>
' . "\n"; // Agregar el nonce al formulario. $html .= wp_nonce_field( 'aicc_crear_articulo_nonce', 'aicc_nonce' ); $html .= '' . "\n"; $html .= '
' . "\n"; $html .= '
' . "\n"; $html .= "
\n"; $html .= '' . "\n"; $html .= "
\n"; $html .= '' . "\n"; $html .= '
' . "\n"; $html .= '' . "\n"; $html .= '
' . "\n"; $html .= '' . "\n"; $html .= '
' . "\n"; $html .= '' . "\n"; $html .= '
' . "\n"; $html .= '' . "\n"; $html .= '
' . "\n"; $html .= '' . "\n"; return $html; } /** * Muestra el HTML de la imagen de espera y el script asociado para manejar su visibilidad. * * Esta función genera y muestra el código HTML necesario para mostrar una imagen de espera * (por ejemplo, un spinner o un indicador de carga) y un script de JavaScript que controla * la visibilidad de la imagen y otros elementos relacionados. * * El contenedor de la imagen (`
`) está oculto inicialmente (`display: none;`), * y el script `mostrarEspera()` se encarga de mostrarlo y ocultar otros elementos cuando sea necesario. * * @since 1.0.0 * * @return void Esta función no devuelve ningún valor, ya que imprime directamente el HTML y el script. */ function aicc_mostrar_imagen_espera_html() { ?>