File "wpaicg_editor.php"

Full Path: /home/digimqhe/flashdigi.uk/comment-content/plugins/gpt3-ai-content-generator/classes/wpaicg_editor.php
File size: 8.69 KB
MIME-type: text/x-php
Charset: utf-8

<?php
namespace WPAICG;
if ( ! defined( 'ABSPATH' ) ) exit;
if(!class_exists('\\WPAICG\\WPAICG_Editor')) {
    class WPAICG_Editor
    {
        private static $instance = null;
        public $wpaicg_edit_default_menus = array(
            array('name' => 'Write a paragraph about this', 'prompt' => ' Write a paragraph about this: [text]'),
            array('name' => 'Summarize', 'prompt' => 'Summarize this: [text]'),
            array('name' => 'Expand', 'prompt' => 'Expand this: [text]'),
            array('name' => 'Rewrite', 'prompt' => 'Rewrite this: [text]'),
            array('name' => 'Generate ideas about this', 'prompt' => 'Generate ideas about this: [text]'),
            array('name' => 'Make a bulleted list', 'prompt' => 'Make a bulleted list: [text]'),
            array('name' => 'Paraphrase', 'prompt' => 'Paraphrase this: [text]'),
            array('name' => 'Generate a call to action', 'prompt' => 'Generate a call to action about this: [text]'),
            array('name' => 'Correct grammar', 'prompt' => 'Correct grammar in this: [text]'),
            array('name' => 'Generate a question', 'prompt' => 'Generate a question about this: [text]'),
            array('name' => 'Suggest a title', 'prompt' => 'Suggest a title for this: [text]'),
            array('name' => 'Convert to active voice', 'prompt' => 'Convert this to active voice: [text]'),
            array('name' => 'Write a conclusion', 'prompt' => 'Write a conclusion for this: [text]'),
            array('name' => 'Generate a quote', 'prompt' => 'Generate a quote related to this: [text]'),
            array('name' => 'Translate to Spanish', 'prompt' => 'Translate this to Spanish: [text]')
        );

        public static function get_instance()
        {
            if (is_null(self::$instance)) {
                self::$instance = new self();
            }
            return self::$instance;
        }

        public function __construct()
        {
            add_action( 'enqueue_block_editor_assets', array($this,'wpaicg_block_editor'), 9 );
            add_action('admin_head',array($this,'wpaicg_ai_buttons'));
            add_action('wp_ajax_wpaicg_editor_prompt', array($this,'wpaicg_editor_prompt'));
        }

        public function wpaicg_block_editor()
        {
            if(is_admin() && current_user_can('wpaicg_ai_assistant')) {
                wp_enqueue_script(
                    'wpaicg-gutenberg-custom-button',
                    WPAICG_PLUGIN_URL . 'admin/js/wpaicg_gutenberg.js',
                    ['wp-editor', 'wp-i18n', 'wp-element', 'wp-compose', 'wp-components'],
                    '1.0.0',
                    true
                );
                $wpaicg_editor_button_menus = get_option('wpaicg_editor_button_menus', []);
                if (!is_array($wpaicg_editor_button_menus) || count($wpaicg_editor_button_menus) == 0) {
                    $wpaicg_editor_button_menus = $this->wpaicg_edit_default_menus;
                }
                wp_localize_script('wpaicg-gutenberg-custom-button', 'wpaicg_gutenberg_editor', array(
                    'plugin_url' => WPAICG_PLUGIN_URL,
                    'editor_ajax_url' => admin_url('admin-ajax.php'),
                    'editor_menus' => $wpaicg_editor_button_menus,
                    'change_action' => get_option('wpaicg_editor_change_action', 'below')
                ));
            }
        }

        public function wpaicg_ai_buttons()
        {
            if(is_admin() && current_user_can('wpaicg_ai_assistant')) {
                ?>
                <script>
                    var wpaicg_editor_wp_nonce = '<?php echo esc_js( wp_create_nonce( 'wpaicg-ajax-nonce' ) ); ?>';
                </script>
                <?php
                if ( ! current_user_can( 'edit_posts' ) && ! current_user_can( 'edit_pages' ) ) {
                    return;
                }
                if ( 'true' == get_user_option( 'rich_editing' ) ) {
                    $wpaicg_editor_button_menus = get_option('wpaicg_editor_button_menus', []);
                    if(!is_array($wpaicg_editor_button_menus) || count($wpaicg_editor_button_menus) == 0){
                        $wpaicg_editor_button_menus = $this->wpaicg_edit_default_menus;
                    }
                    ?>
                    <script>
                        var wpaicg_plugin_url = '<?php echo esc_html(WPAICG_PLUGIN_URL)?>';
                        var wpaicg_editor_ajax_url = '<?php echo esc_html(admin_url('admin-ajax.php'))?>';
                        var wpaicgTinymceEditorMenus = <?php echo wp_json_encode($wpaicg_editor_button_menus, JSON_UNESCAPED_UNICODE) ?>;
                        var wpaicgEditorChangeAction = '<?php echo esc_js( get_option( 'wpaicg_editor_change_action', 'replace' ) ); ?>';
                    </script>
                    <?php
                    add_filter('mce_external_plugins', array($this, 'wpaicg_add_buttons'));
                    add_filter('mce_buttons', array($this, 'wpaicg_register_buttons'));
                    add_filter('mce_css', array($this,'wpaicg_classic_mce_css'));
                }
            }
        }

        public function wpaicg_classic_mce_css($mce_css)
        {
            if (! empty($mce_css)) {
                $mce_css .= ',';
            }
            $mce_css .= WPAICG_PLUGIN_URL.'admin/css/wpaicg_tinymce.css';

            return $mce_css;

        }

        public function wpaicg_add_buttons($plugins)
        {
            if(current_user_can('wpaicg_ai_assistant')) {
                $plugins['wpaicgeditor'] = WPAICG_PLUGIN_URL . 'admin/js/wpaicg_tinymce.js';
            }
            return $plugins;
        }

        public function wpaicg_register_buttons($buttons)
        {
            array_push( $buttons, 'wpaicgeditor' );
            return $buttons;
        }

        public function wpaicg_editor_prompt()
        {
            $wpaicg_result = array('status' => 'error', 'msg' => esc_html__('Missing request parameters','gpt3-ai-content-generator'));
            if(!current_user_can('wpaicg_ai_assistant')){
                $wpaicg_result['status'] = 'error';
                $wpaicg_result['msg'] = esc_html__('You do not have permission for this action.','gpt3-ai-content-generator');
                wp_send_json($wpaicg_result);
            }
            if ( ! wp_verify_nonce( $_POST['nonce'], 'wpaicg-ajax-nonce' ) ) {
                $wpaicg_result['status'] = 'error';
                $wpaicg_result['msg'] = esc_html__('Nonce verification failed','gpt3-ai-content-generator');
                wp_send_json($wpaicg_result);
            }
            if(isset($_REQUEST['prompt']) && !empty($_REQUEST['prompt'])){
                $prompt = sanitize_text_field($_REQUEST['prompt']);

                // Get the AI engine.
                try {
                    $ai_engine = WPAICG_Util::get_instance()->initialize_ai_engine();
                } catch (\Exception $e) {
                    $wpaicg_result['msg'] = $e->getMessage();
                    wp_send_json($wpaicg_result);
                }

                $ai_provider_info = \WPAICG\WPAICG_Util::get_instance()->get_default_ai_provider();
                $wpaicg_provider = $ai_provider_info['provider'];
                $wpaicg_ai_model = $ai_provider_info['model'];

                if ($wpaicg_provider == 'Google') {

                    $temperature = 0.7;
                    $top_p = 1;
                    $max_tokens = 2000;
                    $result = $ai_engine->send_google_request($prompt, $wpaicg_ai_model, $temperature, $top_p, $max_tokens,'editor');

                    if (!empty($result['status']) && $result['status'] === 'error') {
                        wp_send_json(['msg' => $result['msg'], 'status' => 'error']);
                    } else {
                        $wpaicg_result = $result;
                    }

                }  else {
                    $wpaicg_generator = WPAICG_Generator::get_instance();
                    $wpaicg_generator->openai($ai_engine);

                    $result = $wpaicg_generator->wpaicg_request(array(
                        'model' => $wpaicg_ai_model,
                        'prompt' => $prompt,
                        'temperature' => 0.7,
                        'max_tokens' => 2000,
                        'frequency_penalty' => 0.01,
                        'presence_penalty' => 0.01
                    ));
                 }

                if($result['status'] == 'error'){
                    $wpaicg_result['msg'] = $result['msg'];
                }
                else {
                    $wpaicg_result['status'] = 'success';
                    $wpaicg_result['data'] = str_replace("\n",'<br>',$result['data']);
                }
            }
            wp_send_json($wpaicg_result);
        }
    }
    WPAICG_Editor::get_instance();
}