\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";
$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() {
?>