load();
session_start();
}
public function load()
{
// Add Javascript and CSS for admin screens
add_action('admin_enqueue_scripts', array($this, 'rgfb_enqueue_admin_styles_scripts'), 10);
//Add Admin Menu
add_action('admin_menu', array($this, 'rgfb_generate_form_builder_menu'), 20);
//Save Form Builder Structure
add_action('wp_ajax_save_rgfb_form_builder', array($this, 'rgfb_save_form_builder'), 30);
//Update Form Builder Sreucture
add_action('wp_ajax_update_rgfb_form_builder', array($this, 'rgfb_update_form_builder'), 30);
//Form List
add_filter('rgfb_form_builder_list', array($this, 'rgfb_form_list_callback'), 30);
//Settings Menu
add_filter('rgfb_form_builder_settings', array($this, 'rgfb_form_settings_callback'), 30);
//Save Settings Data
add_action('wp_ajax_rgfb_save_settings', array($this, 'rgfb_save_settings'), 30);
add_action('wp_ajax_rgfb_get_settings_screen',array($this, 'rgfb_get_settings_screen'), 30);
add_action('wp_ajax_nopriv_rgfb_get_settings_screen',array($this, 'rgfb_get_settings_screen'), 30);
//Save LLM Logs
add_action('wp_ajax_rgfb_save_llm_logs', array($this, 'rgfb_save_llm_logs'), 30);
add_action('wp_ajax_nopriv_rgfb_save_llm_logs', array($this, 'rgfb_save_llm_logs'), 30);
//List LLM Logs
add_filter('rgfb_llm_logs', array($this, 'rgfb_llm_logs_callback'), 30);
}
/**
* Admin Enqueue scripts and styles
*/
public function rgfb_enqueue_admin_styles_scripts()
{
wp_enqueue_style('bootstrap-css', plugins_url('/assets/css/bootstrap/bootstrap.min.css', __FILE__), array(), '5.3.2', false);
wp_enqueue_style('jquery-confirm-css', plugins_url('/assets/css/jquery-confirm/jquery-confirm.css', __FILE__), array(), '3.3.2', false);
wp_enqueue_style('rgfb-custom-style', plugins_url('/assets/css/style.css', __FILE__), array(), '1.0', false);
//Slick
wp_enqueue_style('slick', plugins_url('/assets/css/slick-carousel/slick.min.css', __FILE__), array(), '1.8.1', false);
wp_enqueue_style('slick-theme', plugins_url('/assets/css/slick-carousel/slick-theme.min.css', __FILE__), array(), '1.8.1', false);
wp_enqueue_script('slick', plugins_url('/assets/js/slick-carousel/slick.min.js', __FILE__), array('jquery'), '1.0', false);
//Jquery
wp_enqueue_script('jquery');
wp_enqueue_script('jquery-ui-core');
wp_enqueue_script('jquery-ui-datepicker');
// Jquery UI
wp_enqueue_script('jquery-ui', plugins_url('/assets/js/jquery-ui/jquery-ui.js', __FILE__), array(), '1.0', false);
//formbuilder
wp_enqueue_script('formbuilder-js', plugins_url('/assets/js/form-builder/form-builder.js', __FILE__), array('jquery', 'jquery-ui-core'), '1.0', false);
//alert-js
wp_enqueue_script('query-confirm-js', plugins_url('/assets/js/jquery-confirm/jquery-confirm.js', __FILE__), array('jquery'), '3.3.2', false);
wp_enqueue_script('rgfb-custom-script', plugins_url('/assets/js/script.js', __FILE__), array('jquery'), '1.0', false);
wp_enqueue_script('rgfb-custom-script-addform', plugins_url('/assets/js/add_form.js', __FILE__), array('jquery'), '1.0', false);
wp_enqueue_script('rgfb-custom-script-settings', plugins_url('/assets/js/settings.js', __FILE__), array('jquery'), '1.0', false);
wp_enqueue_script('rgfb-custom-script-logs', plugins_url('/assets/js/logs.js', __FILE__), array('jquery'), '1.0', false);
wp_localize_script('ai-enabler-ajax', 'rgFormBuilderAjax', array('ajaxurl' => admin_url('admin-ajax.php')));
//google font
wp_enqueue_style('google-fonts-roboto', 'https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap', array(), '1.0');
wp_enqueue_style('google-fonts-open-sans', 'https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap', array(), '1.0');
wp_enqueue_style('google-fonts-lato', 'https://fonts.googleapis.com/css2?family=Lato:wght@400;700&display=swap', array(), '1.0');
wp_enqueue_style('google-fonts-poppins', 'https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap', array(), '1.0');
//font-awesome
wp_enqueue_style('font-awesome', plugins_url('/assets/plugins/fontawesome/6.6.0/css/all.css', __FILE__), array(), '1.0');
}
/**
* Generate Menu
*/
public function rgfb_generate_form_builder_menu()
{
// Add a top-level menu item
add_menu_page(
'AI Enabler',
'AI Enabler',
'manage_options',
'ai-enabler',
array($this, 'rgfb_form_builder_rander'),
'dashicons-chart-pie',
);
// Add a submenu item under the top-level menu
add_submenu_page(
'ai-enabler',
'Form List',
'Form List',
'manage_options',
'rgfb_form_builder_list',
array($this, 'rgfb_form_list_callback')
);
// Add settings submenu item under the top-level menu
add_submenu_page(
'ai-enabler',
'Settings',
'Settings',
'manage_options',
'rgfb_form_builder_settings',
array($this, 'rgfb_form_settings_callback')
);
// Add logs submenu item under the top-level menu
add_submenu_page(
'ai-enabler',
'Logs',
'Logs',
'manage_options',
'rgfb_llm_logs',
array($this, 'rgfb_llm_logs_callback')
);
}
public function rgfb_form_builder_rander()
{
include(__DIR__ . '/templates/form.tpl.php');
wp_die();
}
//get setting screen
// Handle the AJAX request for getting the settings screen
function rgfb_get_settings_screen() {
// Verify the AJAX nonce for security
/* if (!check_ajax_referer('rgfb_get_settings_screen', 'nonce', false)) {
wp_send_json(['status' => false, 'msg' => 'Invalid nonce']);
wp_die();
} */
// Check if the required POST data exists
if (!isset($_POST['data'])) {
wp_send_json(['status' => false, 'msg' => 'No form data provided']);
wp_die();
}
// Parse and sanitize the form data
parse_str(wp_unslash($_POST['data']), $form_data);
if (empty($form_data['model'])) {
wp_send_json(['status' => false, 'msg' => 'Model name is missing']);
wp_die();
}
// Sanitize the model name
$model_name = sanitize_text_field($form_data['model']);
// Include the appropriate template based on the model name
ob_start();
if ($model_name === 'openai') {
include(__DIR__ . '/templates/setting-openai.tpl.php');
} else {
include(__DIR__ . '/templates/setting-default.tpl.php');
}
$ele = ob_get_clean();
if ($ele) {
wp_send_json(['status' => true, 'msg' => 'Settings loaded successfully', 'view' => $ele]);
} else {
wp_send_json(['status' => false, 'msg' => 'Failed to load settings']);
}
wp_die(); // Terminate execution
}
/* public function rgfb_get_settings_screen() {
//check_ajax_referer('nonce', 'nonce');
if (isset($_POST['data'])) {
parse_str(wp_unslash(sanitize_text_field($_POST['data'])), $form_data);
} else {
wp_send_json(['status' => false, 'msg' => 'No form data provided']);
wp_die();
}
$model_name = sanitize_text_field($form_data['model']);
//echo $model_name;die;
if ($model_name=='openai') {
$ele = include(__DIR__ . '/templates/setting-openai.tpl.php');
} else {
$ele = include(__DIR__ . '/templates/setting-claude-tpl.php');
}
$result = array('status' => true, 'view' => $ele);
wp_send_json($result);
wp_die();
} */
//Save Form Structures
public function rgfb_save_form_builder()
{
check_ajax_referer('save-form-nonce', 'nonce');
if (isset($_POST['formData'])) {
parse_str(wp_unslash(sanitize_text_field($_POST['formData'])), $form_data);
} else {
wp_send_json(['status' => false, 'msg' => 'No form data provided']);
wp_die();
}
$form_name = sanitize_text_field($form_data['formname']);
$style = sanitize_text_field($form_data['style']);
$custom_style = sanitize_text_field($form_data['custom_style']);
$custom_form_bgcolor = sanitize_text_field($form_data['custom_form_color']);
$custom_font_family = sanitize_text_field($form_data['custom_font_family']);
$custom_heading_font_size = sanitize_text_field($form_data['custom_heading_font_size']);
$custom_label_font_size = sanitize_text_field($form_data['custom_label_font_size']);
$custom_output_font_size = sanitize_text_field($form_data['custom_output_font_size']);
$custom_output_font_family = sanitize_text_field($form_data['custom_output_font_family']);
$custom_form_width = sanitize_text_field($form_data['custom_form_width']);
$is_load_response_on_page_load = sanitize_text_field($form_data['is_load_response_on_page_load']);
$dalle_image_size_select = sanitize_text_field($form_data['dalle_image_size_select']);
$include_post_or_page_title_in_the_prompt = sanitize_text_field($form_data['include_post_or_page_title_in_the_prompt']);
$form_data = sanitize_text_field($form_data['data']);
if ($form_name == "" || empty($form_name)) {
$result = array('status' => false, 'msg' => 'Form name is required');
wp_send_json($result);
}
if ($form_data == '' || empty($form_data)) {
$result = array('status' => false, 'msg' => 'No form elements');
wp_send_json($result);
}
$meta_data = array(
'structure' => $form_data,
'style' => $style,
'custom_style' => $custom_style,
'custom_form_bgcolor' => $custom_form_bgcolor,
'custom_font_family' => $custom_font_family,
'custom_heading_font_size' => $custom_heading_font_size,
'custom_label_font_size' => $custom_label_font_size,
'custom_output_font_size' => $custom_output_font_size,
'custom_output_font_family' => $custom_output_font_family,
'custom_form_width' => $custom_form_width,
'is_load_response_on_page_load' => $is_load_response_on_page_load,
'dalle_image_size_select' => $dalle_image_size_select,
'include_post_or_page_title_in_the_prompt' => $include_post_or_page_title_in_the_prompt,
);
$post_id = wp_insert_post(array(
'post_type' => 'rg_form_builder_post',
'post_title' => $form_name,
'post_status' => 'publish',
'meta_input' => $meta_data
));
if ($post_id) {
$sc = '[ai_enabler id="' . $post_id . '"]';
update_post_meta($post_id, 'shortcode', $sc);
$result = array('status' => true, 'msg' => 'Record has been added successfully.', 'redirect_url' => admin_url('admin.php?page=rgfb_form_builder_list'));
} else {
$result = array('status' => false, 'msg' => 'Unable to insert the record', 'redirect_url' => '');
}
wp_send_json($result);
wp_die(); // Always include this to terminate the script properly
}
/**
* Form List
*/
public function rgfb_form_list_callback()
{
$action = isset($_GET['action']) ? sanitize_text_field($_GET['action']) : '';
if ($action == '') {
require_once('includes/class-ai-enabler-list-table.php');
$deleted = isset($_SESSION['rgfb_deleted_record']) ? absint($_SESSION['rgfb_deleted_record']) : 0;
if ($deleted) {
echo '
Records has been deleted.
';
unset($_SESSION['rgfb_deleted_record']);
}
$my_list_table = new RGFB_Form_Builder_List_Table();
$my_list_table->prepare_items();
$my_list_table->display();
} else if ($action == 'edit') {
$item_id = isset($_GET['id']) ? intval($_GET['id']) : 0;
check_admin_referer('form-list-nonce-' . $item_id, 'nonce');
$post = get_post($item_id);
$post_meta = get_post_meta($item_id);
$default_formData = "[
{
type: 'header',
subtype: 'h1',
label: 'No records found',
},
]";
$structure = !empty($post_meta['structure']) ? $post_meta['structure'][0] : $default_formData;
$style = !empty($post_meta['style']) ? $post_meta['style'][0] : '';
$custom_style = !empty($post_meta['custom_style']) ? $post_meta['custom_style'][0] : "";
$custom_form_bgcolor = !empty($post_meta['custom_form_bgcolor']) ? $post_meta['custom_form_bgcolor'][0] : "";
$custom_font_family = !empty($post_meta['custom_font_family']) ? $post_meta['custom_font_family'][0] : "";
$custom_heading_font_size = !empty($post_meta['custom_heading_font_size']) ? $post_meta['custom_heading_font_size'][0] : "";
$custom_label_font_size = !empty($post_meta['custom_label_font_size']) ? $post_meta['custom_label_font_size'][0] : "";
$custom_output_font_size = !empty($post_meta['custom_output_font_size']) ? $post_meta['custom_output_font_size'][0] : "";
$custom_output_font_family = !empty($post_meta['custom_output_font_family']) ? $post_meta['custom_output_font_family'][0] : "";
$custom_form_width = !empty($post_meta['custom_form_width']) ? $post_meta['custom_form_width'][0] : "";
$is_load_response_on_page_load = !empty($post_meta['is_load_response_on_page_load']) ? $post_meta['is_load_response_on_page_load'][0] : "";
$dalle_image_size_select = !empty($post_meta['dalle_image_size_select']) ? $post_meta['dalle_image_size_select'][0] : "";
$include_post_or_page_title_in_the_prompt = !empty($post_meta['include_post_or_page_title_in_the_prompt']) ? $post_meta['include_post_or_page_title_in_the_prompt'][0] : "";
$formData = array(
"data" => $structure,
'style' => $style,
'custom_style' => $custom_style,
'custom_form_bgcolor' => $custom_form_bgcolor,
'custom_font_family' => $custom_font_family,
'custom_heading_font_size' => $custom_heading_font_size,
'custom_label_font_size' => $custom_label_font_size,
'custom_output_font_size' => $custom_output_font_size,
'custom_output_font_family' => $custom_output_font_family,
'custom_form_width' => $custom_form_width,
'is_load_response_on_page_load' => $is_load_response_on_page_load,
'dalle_image_size_select' => $dalle_image_size_select,
'include_post_or_page_title_in_the_prompt' => $include_post_or_page_title_in_the_prompt,
);
wp_enqueue_script('rgfb-from-edit-data-script', plugin_dir_url(__FILE__) . 'assets/js/form_edit.js', array('jquery'), '1.0', false);
wp_localize_script('rgfb-from-edit-data-script', 'formData', $formData);
echo '
' . wp_kses_post(wp_nonce_field('edit-form-nonce', 'edit_form_nonce')) . '
Edit Drag-and-Drop Form Builder
Please Select Form Style
';
} else if ($action == 'delete') {
$item_id = isset($_GET['id']) ? intval($_GET['id']) : 0;
check_admin_referer('form-list-nonce-' . $item_id, 'nonce');
wp_delete_post($item_id, true);
$_SESSION['rgfb_deleted_record'] = true;
echo '';
exit();
} else if ($action == 'copy') {
$post_id = isset($_GET['id']) ? intval($_GET['id']) : 0;
check_admin_referer('form-list-nonce-' . $post_id, 'nonce');
// Get the existing post by ID
$post = get_post($post_id);
// Check if the post exists
if (!empty($post)) {
// Create an array of post data
$post_data = array(
'post_title' => $post->post_title . ' - Copy',
'post_content' => $post->post_content,
'post_status' => $post->post_status,
'post_author' => $post->post_author,
'post_type' => $post->post_type,
);
// Insert the new post and get its ID
$new_post_id = wp_insert_post($post_data);
// Optionally, you can copy additional meta data from the old post to the new post
$post_meta = get_post_meta($post_id);
foreach ($post_meta as $key => $value) {
if ($key == 'shortcode') {
$shortcode = '[ai_enabler id="' . $new_post_id . '"]';
update_post_meta($new_post_id, $key, $shortcode);
} else {
update_post_meta($new_post_id, $key, $value[0]);
}
}
}
echo '';
exit();
}
}
//Update Form Structures
public function rgfb_update_form_builder()
{
check_ajax_referer('edit-form-nonce', 'nonce');
if (isset($_POST['formData'])) {
parse_str(wp_unslash(sanitize_text_field($_POST['formData'])), $form_data);
} else {
wp_send_json(['status' => false, 'msg' => 'No form data provided']);
wp_die();
}
$form_name = sanitize_text_field($form_data['formname']);
$style = sanitize_text_field($form_data['style']);
$item_id = sanitize_text_field(base64_decode($form_data['id']));
$custom_style = sanitize_text_field($form_data['custom_style']);
$custom_form_bgcolor = sanitize_text_field($form_data['custom_form_color']);
$custom_font_family = sanitize_text_field($form_data['custom_font_family']);
$custom_heading_font_size = sanitize_text_field($form_data['custom_heading_font_size']);
$custom_label_font_size = sanitize_text_field($form_data['custom_label_font_size']);
$custom_output_font_size = sanitize_text_field($form_data['custom_output_font_size']);
$custom_output_font_family = sanitize_text_field($form_data['custom_output_font_family']);
$custom_form_width = sanitize_text_field($form_data['custom_form_width']);
$is_load_response_on_page_load = sanitize_text_field($form_data['is_load_response_on_page_load']);
$dalle_image_size_select = sanitize_text_field($form_data['dalle_image_size_select']);
$include_post_or_page_title_in_the_prompt = sanitize_text_field($form_data['include_post_or_page_title_in_the_prompt']);
$form_data = wp_unslash($form_data['data']);
if ($item_id == "" || empty($item_id) || $item_id == 0) {
$result = array('status' => false, 'msg' => 'Undefined record');
wp_send_json($result);
}
if ($form_name == "" || empty($form_name)) {
$result = array('status' => false, 'msg' => 'Form name is required');
wp_send_json($result);
}
if ($form_data == '' || empty($form_data)) {
$result = array('status' => false, 'msg' => 'No form elements');
wp_send_json($result);
}
$post_id = wp_update_post(array(
'ID' => $item_id,
'post_title' => $form_name,
));
if ($post_id) {
//Update Structure
$meta_key1 = 'structure';
$meta_value1 = $form_data;
update_post_meta($post_id, $meta_key1, $meta_value1);
//Update Style
$meta_key2 = 'style';
$meta_value2 = $style;
update_post_meta($post_id, $meta_key2, $meta_value2);
//Update Custom Style
$meta_key3 = 'custom_style';
$meta_value3 = $custom_style;
update_post_meta($post_id, $meta_key3, $meta_value3);
//Update Custom Form BG Color
$meta_key4 = 'custom_form_bgcolor';
$meta_value4 = $custom_form_bgcolor;
update_post_meta($post_id, $meta_key4, $meta_value4);
//Update Custom Font family
$meta_key5 = 'custom_font_family';
$meta_value5 = $custom_font_family;
update_post_meta($post_id, $meta_key5, $meta_value5);
//Update Custom heading font size
$meta_key6 = 'custom_heading_font_size';
$meta_value6 = $custom_heading_font_size;
update_post_meta($post_id, $meta_key6, $meta_value6);
//Update Custom label font size
$meta_key7 = 'custom_label_font_size';
$meta_value7 = $custom_label_font_size;
update_post_meta($post_id, $meta_key7, $meta_value7);
//Update Custom output font size
$meta_key8 = 'custom_output_font_size';
$meta_value8 = $custom_output_font_size;
update_post_meta($post_id, $meta_key8, $meta_value8);
//Update Custom output font size
$meta_key9 = 'custom_output_font_family';
$meta_value9 = $custom_output_font_family;
update_post_meta($post_id, $meta_key9, $meta_value9);
//Update Custom form width
$meta_key10 = 'custom_form_width';
$meta_value10 = $custom_form_width;
update_post_meta($post_id, $meta_key10, $meta_value10);
//Update Custom form width
$meta_key11 = 'is_load_response_on_page_load';
$meta_value11 = $is_load_response_on_page_load;
update_post_meta($post_id, $meta_key11, $meta_value11);
//Update Custom form width
$meta_key12 = 'dalle_image_size_select';
$meta_value12 = $dalle_image_size_select;
update_post_meta($post_id, $meta_key12, $meta_value12);
//Update include post or page title in the prompt
$meta_key13 = 'include_post_or_page_title_in_the_prompt';
$meta_value13 = $include_post_or_page_title_in_the_prompt;
update_post_meta($post_id, $meta_key13, $meta_value13);
$result = array('status' => true, 'msg' => 'Record has been updated successfully.');
} else {
$result = array('status' => false, 'msg' => 'Unable to update the record');
}
wp_send_json($result);
wp_die(); // Always include this to terminate the script properly
}
public function rgfb_form_settings_callback()
{
include(__DIR__ . '/templates/settings.tpl.php');
wp_die();
}
//Save Settings
public function rgfb_save_settings()
{
// Verify nonce for security
check_ajax_referer('save-settings-nonce', 'nonce');
// Extract and sanitize input data
$formData = $_POST['formData'];
$settings = [
'rgfb_openai_model' => sanitize_text_field($formData[2]['value']),
'rgfb_image_generation_model' => sanitize_text_field($formData[3]['value']),
'rgfb_video_resolution' =>sanitize_text_field($formData[4]['value']),
'rgfb_openai_api_key' => sanitize_text_field($formData[5]['value']),
'rgfb_stability_key' => sanitize_text_field($formData[6]['value']),
'rgfb_fal_key' => sanitize_text_field($formData[7]['value']),
'rgfb_leonardo_key' => sanitize_text_field($formData[8]['value']),
'rgfb_claude_key' => sanitize_text_field($formData[9]['value']),
'rgfb_image_generation_strength' => sanitize_text_field($formData[10]['value']),
'rgfb_limit_image_requests_by_ip'=> sanitize_text_field($formData[11]['value']),
];
$selected_text_model = $settings['rgfb_openai_model'];
if ($selected_text_model==='') {
wp_send_json(['status' => false, 'msg' => 'Text generation model is required.']);
}
if ($selected_text_model=='claude-3-opus' || $selected_text_model=='sonnet-3.5' || $selected_text_model=='haiku-3.5') {
// Conditional key validation based on the selected text model
$conditional_keys_for_text_model = [
'claude-3-opus-20240229' => 'rgfb_claude_key',
'sonnet-3.5' => 'rgfb_claude_key',
'haiku-3.5' => 'rgfb_claude_key',
];
if (array_key_exists($selected_text_model, $conditional_keys_for_text_model) && empty($settings[$conditional_keys_for_text_model[$selected_text_model]])) {
wp_send_json(['status' => false, 'msg' => 'Claude key is required']);
}
} else {
// Required fields with specific messages
$required_fields = [
'rgfb_openai_api_key' => 'OpenAI API key is required',
'rgfb_openai_model' => 'Please select a text generation model',
'rgfb_image_generation_model' => 'Please select an image generation model',
'rgfb_image_generation_strength' => 'Please select an image generation strength',
];
// Validate required fields
foreach ($required_fields as $key => $message) {
if (empty($settings[$key])) {
wp_send_json(['status' => false, 'msg' => $message]);
}
}
// Conditional key validation based on the selected image model
$conditional_keys_for_image_model = [
'stabilityai' => 'rgfb_stability_key',
'fal' => 'rgfb_fal_key',
'leonardo' => 'rgfb_leonardo_key',
];
$selected_image_model = $settings['rgfb_image_generation_model'];
if (array_key_exists($selected_image_model, $conditional_keys_for_image_model) && empty($settings[$conditional_keys_for_image_model[$selected_image_model]])) {
wp_send_json(['status' => false, 'msg' => ucfirst($selected_image_model) . ' key is required']);
}
}
// Save settings (encoding sensitive keys for storage)
foreach ($settings as $key => $value) {
$encoded_value = in_array($key, ['rgfb_openai_api_key', 'rgfb_stability_key', 'rgfb_fal_key', 'rgfb_leonardo_key', 'rgfb_claude_key'])
? base64_encode($value)
: $value;
update_option($key, $encoded_value);
}
// Respond with success
wp_send_json(['status' => true, 'msg' => 'Settings saved successfully']);
wp_die();
}
//Save Form Structures
public function rgfb_save_llm_logs()
{
check_ajax_referer('rgfb-llm-logs-nonce', 'nonce');
if (isset($_POST['formData'])) {
parse_str(wp_unslash(sanitize_text_field($_POST['formData'])), $form_data);
} else {
wp_send_json(['status' => false, 'msg' => 'No form data provided']);
wp_die();
}
$openai_api_key = sanitize_text_field($form_data['openai_api_key']);
$openai_model = sanitize_text_field($form_data['openai_model']);
$completion_tokens = sanitize_text_field($form_data['completion_tokens']);
$prompt_tokens = sanitize_text_field($form_data['prompt_tokens']);
$total_cost = sanitize_text_field($form_data['total_cost']);
$total_tokens = sanitize_text_field($form_data['total_tokens']);
$prompt = sanitize_text_field($form_data['prompt']);
$answer = sanitize_text_field($form_data['answer']);
$image_url = esc_url($form_data['image_url']);
$output_type = sanitize_text_field($form_data['output_type']);
$image_url = $this->download_external_image($image_url);
$meta_data = array(
'rgfb_llm_logs' => array(
'openai_model' => $openai_model,
'completion_tokens' => $completion_tokens,
'prompt_tokens' => $prompt_tokens,
'total_cost' => $total_cost,
'total_tokens' => $total_tokens,
'prompt' => $prompt,
'answer' => $answer,
'image_url' => $image_url,
'user_ip' => filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP),
'output_type' => $output_type,
)
);
$post_id = wp_insert_post(array(
'post_type' => 'rgfb_llm_logs',
'post_title' => 'RGFB LLM Logs',
'post_status' => 'publish',
'meta_input' => $meta_data
));
if ($post_id) {
$sc = '[ai_enabler id="' . $post_id . '"]';
update_post_meta($post_id, 'shortcode', $sc);
$result = array('status' => true, 'msg' => 'Record has been added successfully.');
} else {
$result = array('status' => false, 'msg' => 'Unable to insert the record');
}
wp_send_json($result);
wp_die(); // Always include this to terminate the script properly
}
/**
* LLM Logs
*/
public function rgfb_llm_logs_callback()
{
include(__DIR__ . '/templates/logs.tpl.php');
wp_die();
}
function download_external_image($image_url) {
// Initialize the WordPress file system
global $wp_filesystem;
if (!is_object($wp_filesystem)) {
require_once ABSPATH . '/wp-admin/includes/file.php';
WP_Filesystem();
}
// If the file system could not be initialized, return
if (!$wp_filesystem) {
//echo "WP filesystem error";die;
error_log('File system could not be initialized');
return -1;
}
// Get the WordPress upload directory
$upload_dir = wp_upload_dir();
// Sanitize the URL
$image_url = esc_url($image_url);
// Fetch the remote image data
$response = wp_remote_get($image_url, array('timeout' => 30));
if (is_wp_error($response)) {
//echo "Response error line no 746";die;
error_log('No image response from url');
return -1;
}
// Extract the image body content
//$image_data = wp_remote_retrieve_body($response);
$image_data = $response['body'];
// If the image data is empty, return
if (empty($image_data)) {
//echo "Image Data error";die;
error_log('Empty response image body');
return -1;
}
//echo $image_data;die;
// Determine the file extension
$file_extension = pathinfo($image_url, PATHINFO_EXTENSION);
if (empty($file_extension)) {
$file_extension = 'png'; // Default to 'png' if no extension is found
}
// Generate a unique file name
$new_file_name = 'image_' . time() . '.' . $file_extension;
// Define the full path to save the image
$image_path = $upload_dir['path'] . '/' . $new_file_name;
if (!is_writable($upload_dir['path'])) {
//echo "Upload directory is not writeable";die;
error_log('Upload directory is not writable: ' . $upload_dir['path']);
return -1;
}
// Save the image data to the file
/* $success = $wp_filesystem->put_contents($image_path, $image_data, FS_CHMOD_FILE);
if (!$success) {
echo "Unable to put content";die;
} */
// Use native PHP function as a fallback
if (false === file_put_contents($image_path, $image_data)) {
error_log('Failed to save the image using file_put_contents.');
return -1;
}
// Generate the URL for the uploaded image
$image_url = $upload_dir['url'] . '/' . $new_file_name;
return $image_url; // Return the URL of the uploaded image
}
/* function download_external_image($image_url)
{
$image_url = esc_url($image_url);
$image_data = wp_remote_get($image_url, array('timeout' => 30));
//echo $image_data; die;
if (is_wp_error($image_data)) {
return;
}
$upload_dir = wp_upload_dir();
$file_extension = pathinfo($image_url, PATHINFO_EXTENSION);
if (empty($file_extension)) {
$file_extension = 'png';
}
$new_file_name = 'image_' . time() . '.' . $file_extension;
global $wp_filesystem;
if (!is_object($wp_filesystem)) {
require_once ABSPATH . '/wp-admin/includes/file.php';
WP_Filesystem();
}
if (!$wp_filesystem) {
return;
}
$image_path = $upload_dir['path'] . '/' . $new_file_name;
$image_data = $image_data['body'];
if (!$wp_filesystem->put_contents($image_path, $image_data, FS_CHMOD_FILE)) {
return;
}
$image_url = $upload_dir['url'] . '/' . $new_file_name;
return $image_url;
} */
}
global $rgfbAdminClass;
$rgfbAdminClass = new RGFBAdmin();