admin.php
3 years ago
core.php
3 years ago
init.php
3 years ago
openai.php
3 years ago
rest.php
3 years ago
ui.php
3 years ago
core.php
157 lines
| 1 | <?php |
| 2 | |
| 3 | class Meow_MWAI_Core |
| 4 | { |
| 5 | public $admin = null; |
| 6 | public $is_rest = false; |
| 7 | public $is_cli = false; |
| 8 | public $site_url = null; |
| 9 | private $option_name = 'mwai_options'; |
| 10 | |
| 11 | public function __construct() { |
| 12 | $this->site_url = get_site_url(); |
| 13 | $this->is_rest = MeowCommon_Helpers::is_rest(); |
| 14 | $this->is_cli = defined( 'WP_CLI' ) && WP_CLI; |
| 15 | add_action( 'plugins_loaded', array( $this, 'init' ) ); |
| 16 | } |
| 17 | |
| 18 | function init() { |
| 19 | // Part of the core, settings and stuff |
| 20 | $this->admin = new Meow_MWAI_Admin( $this ); |
| 21 | |
| 22 | // Only for REST |
| 23 | if ( $this->is_rest ) { |
| 24 | new Meow_MWAI_Rest( $this, $this->admin ); |
| 25 | } |
| 26 | |
| 27 | // Dashboard |
| 28 | if ( is_admin() ) { |
| 29 | new Meow_MWAI_UI( $this, $this->admin ); |
| 30 | } |
| 31 | } |
| 32 | |
| 33 | #region Helpers |
| 34 | function can_access_settings() { |
| 35 | return apply_filters( 'mwai_allow_setup', current_user_can( 'manage_options' ) ); |
| 36 | } |
| 37 | |
| 38 | function can_access_features() { |
| 39 | return apply_filters( 'mwai_allow_usage', current_user_can( 'administrator' ) ); |
| 40 | } |
| 41 | |
| 42 | function get_text_from_postId( $postId ) { |
| 43 | $post = get_post( $postId ); |
| 44 | if ( !$post ) { |
| 45 | return false; |
| 46 | } |
| 47 | $post->post_content = apply_filters( 'the_content', $post->post_content ); |
| 48 | $text = strip_tags( $post->post_content ); |
| 49 | $text = preg_replace( '/^\h*\v+/m', '', $text ); |
| 50 | $text = html_entity_decode( $text ); |
| 51 | return $text; |
| 52 | } |
| 53 | #endregion |
| 54 | |
| 55 | #region Options |
| 56 | |
| 57 | function get_option( $option, $default = null ) { |
| 58 | $options = $this->get_all_options(); |
| 59 | return $options[$option] ?? $default; |
| 60 | } |
| 61 | |
| 62 | function list_options() { |
| 63 | return array( |
| 64 | 'module_titles' => true, |
| 65 | 'module_excerpts' => true, |
| 66 | 'module_blocks' => false, |
| 67 | 'openai_apikey' => false, |
| 68 | 'openai_usage' => [] |
| 69 | ); |
| 70 | } |
| 71 | |
| 72 | function get_all_options() { |
| 73 | $options = get_option( $this->option_name, null ); |
| 74 | return $options; |
| 75 | } |
| 76 | |
| 77 | function update_options( $options ) { |
| 78 | if ( !update_option( $this->option_name, $options, false ) ) { |
| 79 | return false; |
| 80 | } |
| 81 | $options = $this->sanitize_options(); |
| 82 | return $options; |
| 83 | } |
| 84 | |
| 85 | function update_option( $option, $value ) { |
| 86 | $options = $this->get_all_options(); |
| 87 | $options[$option] = $value; |
| 88 | return $this->update_options( $options ); |
| 89 | } |
| 90 | |
| 91 | // Validate and keep the options clean and logical. |
| 92 | function sanitize_options() { |
| 93 | $options = $this->get_all_options(); |
| 94 | $needs_update = false; |
| 95 | // We can sanitize our future options here, let's always remember it. |
| 96 | |
| 97 | if ( $needs_update ) { |
| 98 | update_option( $this->option_name, $options, false ); |
| 99 | } |
| 100 | return $options; |
| 101 | } |
| 102 | |
| 103 | #endregion |
| 104 | |
| 105 | #region AI |
| 106 | |
| 107 | function generate_titles( $postId ) { |
| 108 | $text = $this->get_text_from_postId( $postId ); |
| 109 | if ( empty( $text ) ) { |
| 110 | throw new Exception( 'There is no content for this post.' ); |
| 111 | } |
| 112 | $openai = new Meow_MWAI_OpenAI( $this ); |
| 113 | $recommendedTitles = $openai->getRecommendedTitles( $text ); |
| 114 | return $recommendedTitles; |
| 115 | } |
| 116 | |
| 117 | function generate_excerpts( $postId ) { |
| 118 | $text = $this->get_text_from_postId( $postId ); |
| 119 | if ( empty( $text ) ) { |
| 120 | throw new Exception( 'There is no content for this post.' ); |
| 121 | } |
| 122 | $openai = new Meow_MWAI_OpenAI( $this ); |
| 123 | $recommendedExcerpts = $openai->getRecommendedExcerpts( $text ); |
| 124 | return $recommendedExcerpts; |
| 125 | } |
| 126 | |
| 127 | function get_completions( $text, $maxTokens = 100, $temperature = 0.5, $topP = 1, |
| 128 | $frequencyPenalty = 0, $presencePenalty = 0, $bestOf = 1 ) { |
| 129 | $openai = new Meow_MWAI_OpenAI( $this ); |
| 130 | $res = $openai->getCompletions( $text ); |
| 131 | return $res; |
| 132 | } |
| 133 | |
| 134 | function update_post_title( $postId, $title ) { |
| 135 | $post = get_post( $postId ); |
| 136 | if ( !$post ) { |
| 137 | throw new Exception( 'There is no post with this ID.' ); |
| 138 | } |
| 139 | $post->post_title = $title; |
| 140 | //$post->post_name = sanitize_title( $title ); |
| 141 | wp_update_post( $post ); |
| 142 | } |
| 143 | |
| 144 | function update_post_excerpt( $postId, $excerpt ) { |
| 145 | $post = get_post( $postId ); |
| 146 | if ( !$post ) { |
| 147 | throw new Exception( 'There is no post with this ID.' ); |
| 148 | } |
| 149 | $post->post_excerpt = $excerpt; |
| 150 | wp_update_post( $post ); |
| 151 | } |
| 152 | |
| 153 | #endregion |
| 154 | |
| 155 | } |
| 156 | |
| 157 | ?> |