/**
* Exclui um conteúdo gerado
*
* @param int $content_id ID do conteúdo a ser excluído
* @return bool True se a exclusão foi bem-sucedida, false caso contrário
*/
function adbloom_delete_content($content_id) {
global $wpdb;
$table_name = $wpdb->prefix . 'adbloom_generated_content';
// Obter informações do conteúdo antes de excluir
$content = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$table_name} WHERE id = %d", $content_id));
if (!$content) {
return false;
}
// Se o conteúdo estiver associado a um post, excluir o post também
if (!empty($content->post_id)) {
wp_delete_post($content->post_id, true);
}
// Excluir imagens associadas
if (!empty($content->images)) {
$images = maybe_unserialize($content->images);
if (is_array($images)) {
foreach ($images as $image_id) {
if (is_numeric($image_id)) {
wp_delete_attachment($image_id, true);
}
}
}
}
// Excluir o conteúdo do banco de dados
$result = $wpdb->delete(
$table_name,
['id' => $content_id],
['%d']
);
return $result !== false;
}
/**
* Adiciona uma notificação administrativa
*
* @param string $type Tipo de notificação (success, error, warning, info)
* @param string $message Mensagem a ser exibida
* @param bool $dismissible Se a notificação pode ser descartada
*/
function adbloom_add_admin_notice($type, $message, $dismissible = true) {
$notices = get_option('adbloom_admin_notices', []);
$notices[] = [
'type' => $type,
'message' => $message,
'dismissible' => $dismissible
];
update_option('adbloom_admin_notices', $notices);
}
/**
* Exibe notificações administrativas
*/
function adbloom_display_admin_notices() {
$notices = get_option('adbloom_admin_notices', []);
if (empty($notices)) {
return;
}
foreach ($notices as $notice) {
$dismissible = !empty($notice['dismissible']) ? 'is-dismissible' : '';
printf(
'',
esc_attr($notice['type']),
esc_attr($dismissible),
wp_kses_post($notice['message'])
);
}
// Limpar notificações após exibi-las
update_option('adbloom_admin_notices', []);
}
add_action('admin_notices', 'adbloom_display_admin_notices');
/**
* Verificar se o usuário atual tem permissão para acessar o plugin
*
* @return bool
*/
function adbloom_current_user_can_access() {
return current_user_can('edit_posts');
}
/**
* Verificar se a API do OpenAI está configurada
*
* @return bool
*/
function adbloom_is_openai_api_configured() {
$api_key = get_option('adbloom_openai_api_key', '');
return !empty($api_key);
}
/**
* Registra erros em um arquivo de log
*
* @param string $message Mensagem de erro
* @param mixed $data Dados adicionais para o log
*/
function adbloom_log_error($message, $data = null) {
$log_entry = date('[Y-m-d H:i:s]') . ' ' . $message;
if ($data !== null) {
if (is_array($data) || is_object($data)) {
$log_entry .= ' - ' . print_r($data, true);
} else {
$log_entry .= ' - ' . $data;
}
}
// Criar pasta de logs se não existir
$upload_dir = wp_upload_dir();
$log_dir = trailingslashit($upload_dir['basedir']) . 'adbloom-logs';
if (!file_exists($log_dir)) {
wp_mkdir_p($log_dir);
}
$log_file = $log_dir . '/error.log';
// Adicionar entrada ao log
file_put_contents($log_file, $log_entry . PHP_EOL, FILE_APPEND);
}
/**
* Processa dados de teste para a API
*
* @param string $test_data Dados de teste
* @return array|WP_Error Resultado do processamento ou objeto de erro
*/
function adbloom_process_test_data($test_data) {
// Instanciar a classe OpenAI
$openai = adbloom_get_openai_instance();
// Verificar se a API está configurada
if (!$openai->is_configured()) {
return new WP_Error('api_not_configured', __('API não configurada. Por favor, configure a API nas configurações.', 'adbloom'));
}
// Tentar fazer uma requisição simples para testar a API
$data = array(
'model' => adbloom_get_default_openai_model(),
'messages' => array(
array(
'role' => 'system',
'content' => 'Você é um assistente útil.'
),
array(
'role' => 'user',
'content' => 'Olá! Este é um teste de conexão. Por favor, responda apenas com "Conexão estabelecida com sucesso!"'
)
),
'temperature' => 0.7,
'max_tokens' => 50
);
// Fazer a requisição
$response = $openai->make_api_request('chat/completions', $data);
// Verificar se houve erro
if (is_wp_error($response)) {
return $response;
}
// Retornar resultado do processamento
return array(
'status' => 'success',
'message' => __('Conexão com a API estabelecida com sucesso!', 'adbloom')
);
}
/**
* Obter modelos OpenAI disponíveis
*
* @return array Lista de modelos disponíveis
*/
function adbloom_get_openai_models() {
$models = array(
'gpt-3.5-turbo' => __('GPT-3.5 Turbo', 'adbloom'),
'gpt-4' => __('GPT-4', 'adbloom'),
'gpt-4-turbo' => __('GPT-4 Turbo', 'adbloom')
);
return apply_filters('adbloom_openai_models', $models);
}
/**
* Obter modelos de imagem disponíveis
*
* @return array Lista de modelos disponíveis
*/
function adbloom_get_image_models() {
$models = array(
'dall-e-2' => __('DALL-E 2', 'adbloom'),
'dall-e-3' => __('DALL-E 3', 'adbloom')
);
return apply_filters('adbloom_image_models', $models);
}
/**
* Obter nichos predefinidos
*
* @return array Lista de nichos predefinidos
*/
function adbloom_get_predefined_niches() {
$niches = array(
'tecnologia' => __('Tecnologia', 'adbloom'),
'saude' => __('Saúde e Bem-estar', 'adbloom'),
'financas' => __('Finanças Pessoais', 'adbloom'),
'marketing' => __('Marketing Digital', 'adbloom'),
'educacao' => __('Educação', 'adbloom'),
'viagens' => __('Viagens', 'adbloom'),
'gastronomia' => __('Gastronomia', 'adbloom'),
'entretenimento' => __('Entretenimento', 'adbloom'),
'esportes' => __('Esportes', 'adbloom'),
'moda' => __('Moda e Beleza', 'adbloom')
);
return apply_filters('adbloom_predefined_niches', $niches);
}
/**
* Obter o modelo de imagem padrão
*
* @return string Nome do modelo
*/
function adbloom_get_default_image_model() {
$model = get_option('adbloom_image_model', 'dall-e-2');
return $model;
}