| Current Path : /home/x/b/o/xbodynamge/namtation/wp-content/ |
| Current File : /home/x/b/o/xbodynamge/namtation/wp-content/WritingAssistant.php.tar |
namtation/wp-content/plugins/all-in-one-seo-pack/app/Common/WritingAssistant/WritingAssistant.php 0000644 00000001102 15111424054 0032320 0 ustar 00 home/xbodynamge <?php
namespace AIOSEO\Plugin\Common\WritingAssistant;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Main class.
*
* @since 4.7.4
*/
class WritingAssistant {
/**
* Helpers.
*
* @since 4.7.4
*
* @var Utils\Helpers
*/
public $helpers;
/**
* SeoBoost.
*
* @since 4.7.4
*
* @var SeoBoost\SeoBoost
*/
public $seoBoost;
/**
* Load our classes.
*
* @since 4.7.4
*
* @return void
*/
public function __construct() {
$this->helpers = new Utils\Helpers();
$this->seoBoost = new SeoBoost\SeoBoost();
}
} home/xbodynamge/namtation/wp-content/plugins/all-in-one-seo-pack/app/Common/Api/WritingAssistant.php0000644 00000021163 15113700475 0027612 0 ustar 00 <?php
namespace AIOSEO\Plugin\Common\Api;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
use AIOSEO\Plugin\Common\Models;
/**
* WritingAssistant class for the API.
*
* @since 4.7.4
*/
class WritingAssistant {
/**
* Process the keyword.
*
* @since 4.7.4
*
* @param \WP_REST_Request $request The REST Request
* @return \WP_REST_Response The response.
*/
public static function processKeyword( $request ) {
$body = $request->get_json_params();
$postId = absint( $body['postId'] );
$keywordText = sanitize_text_field( $body['keyword'] );
$country = sanitize_text_field( $body['country'] );
$language = sanitize_text_field( strtolower( $body['language'] ) );
if ( empty( $keywordText ) || empty( $country ) || empty( $language ) ) {
return new \WP_REST_Response( [
'success' => false,
'error' => __( 'Missing data to generate a report', 'all-in-one-seo-pack' )
] );
}
$keyword = Models\WritingAssistantKeyword::getKeyword( $keywordText, $country, $language );
$writingAssistantPost = Models\WritingAssistantPost::getPost( $postId );
if ( $keyword->exists() ) {
$writingAssistantPost->attachKeyword( $keyword->id );
// Returning early will let the UI code start polling the keyword.
return new \WP_REST_Response( [
'success' => true,
'progress' => $keyword->progress
], 200 );
}
// Start a new keyword process.
$processResult = aioseo()->writingAssistant->seoBoost->service->processKeyword( $keywordText, $country, $language );
if ( is_wp_error( $processResult ) ) {
return new \WP_REST_Response( [
'success' => false,
'error' => $processResult->get_error_message()
] );
}
// Store the new keyword.
$keyword->uuid = $processResult['slug'];
$keyword->progress = 0;
$keyword->save();
// Update the writing assistant post with the current keyword.
$writingAssistantPost->attachKeyword( $keyword->id );
return new \WP_REST_Response( [ 'success' => true ], 200 );
}
/**
* Get current keyword for a Post.
*
* @since 4.7.4
*
* @param \WP_REST_Request $request The REST Request
* @return \WP_REST_Response The response.
*/
public static function getPostKeyword( $request ) {
$postId = $request->get_param( 'postId' );
if ( empty( $postId ) ) {
return new \WP_REST_Response( [
'success' => false,
'message' => __( 'Empty Post ID', 'all-in-one-seo-pack' )
], 404 );
}
$keyword = Models\WritingAssistantPost::getKeyword( $postId );
if ( $keyword && 100 !== $keyword->progress ) {
// Update progress.
$newProgress = aioseo()->writingAssistant->seoBoost->service->getProgressAndResult( $keyword->uuid );
if ( is_wp_error( $newProgress ) ) {
return new \WP_REST_Response( [
'success' => false,
'error' => $newProgress->get_error_message()
], 200 );
}
if ( 'success' !== $newProgress['status'] ) {
return new \WP_REST_Response( [
'success' => false,
'error' => $newProgress['msg']
], 200 );
}
$keyword->progress = ! empty( $newProgress['report']['progress'] ) ? $newProgress['report']['progress'] : $keyword->progress;
if ( ! empty( $newProgress['report']['keywords'] ) ) {
$keyword->keywords = $newProgress['report']['keywords'];
}
if ( ! empty( $newProgress['report']['competitors'] ) ) {
$keyword->competitors = [
'competitors' => $newProgress['report']['competitors'],
'summary' => $newProgress['report']['competitors_summary']
];
}
$keyword->save();
}
// Return a refreshed keyword here because we need some parsed data.
$keyword = Models\WritingAssistantPost::getKeyword( $postId );
return new \WP_REST_Response( $keyword, 200 );
}
/**
* Get the content analysis for a post.
*
* @since 4.7.4
*
* @param \WP_REST_Request $request The REST Request
* @return \WP_REST_Response The response.
*/
public static function getContentAnalysis( $request ) {
$title = $request->get_param( 'title' );
$description = $request->get_param( 'description' );
$content = apply_filters( 'the_content', $request->get_param( 'content' ) );
$postId = $request->get_param( 'postId' );
if ( empty( $content ) || empty( $postId ) ) {
return new \WP_REST_Response( [
'success' => false,
'message' => __( 'Empty Content or Post ID', 'all-in-one-seo-pack' )
], 200 );
}
$keyword = Models\WritingAssistantPost::getKeyword( $postId );
if (
! $keyword ||
! $keyword->exists() ||
100 !== $keyword->progress
) {
return new \WP_REST_Response( [
'success' => false,
'error' => __( 'Keyword not found or not ready', 'all-in-one-seo-pack' )
], 200 );
}
$writingAssistantPost = Models\WritingAssistantPost::getPost( $postId );
// Make sure we're not analysing the same content again.
$contentHash = sha1( $content );
if (
! empty( $writingAssistantPost->content_analysis ) &&
$writingAssistantPost->content_analysis_hash === $contentHash
) {
return new \WP_REST_Response( $writingAssistantPost->content_analysis, 200 );
}
// Call SEOBoost service to get the content analysis.
$contentAnalysis = aioseo()->writingAssistant->seoBoost->service->getContentAnalysis( $title, $description, $content, $keyword->uuid );
if ( is_wp_error( $contentAnalysis ) ) {
return new \WP_REST_Response( [
'success' => false,
'error' => $contentAnalysis->get_error_message()
], 200 );
}
if ( empty( $contentAnalysis['result'] ) ) {
return new \WP_REST_Response( [
'success' => false,
'error' => __( 'Empty response from service', 'all-in-one-seo-pack' )
], 200 );
}
// Update the post with the content analysis.
$writingAssistantPost->content_analysis = $contentAnalysis['result'];
$writingAssistantPost->content_analysis_hash = $contentHash;
$writingAssistantPost->save();
return new \WP_REST_Response( $contentAnalysis['result'], 200 );
}
/**
* Get the user info.
*
* @since 4.7.4
*
* @return \WP_REST_Response The response.
*/
public static function getUserInfo() {
$userInfo = aioseo()->writingAssistant->seoBoost->service->getUserInfo();
if ( is_wp_error( $userInfo ) ) {
return new \WP_REST_Response( [
'success' => false,
'error' => $userInfo->get_error_message()
], 200 );
}
if ( empty( $userInfo['status'] ) ) {
return new \WP_REST_Response( [
'success' => false,
'error' => __( 'Empty response from service', 'all-in-one-seo-pack' )
], 200 );
}
if ( 'success' !== $userInfo['status'] ) {
return new \WP_REST_Response( [
'success' => false,
'error' => $userInfo['msg']
], 200 );
}
return new \WP_REST_Response( $userInfo, 200 );
}
/**
* Get the user info.
*
* @since 4.7.4
*
* @return \WP_REST_Response The response.
*/
public static function getUserOptions() {
$userOptions = aioseo()->writingAssistant->seoBoost->getUserOptions();
return new \WP_REST_Response( $userOptions, 200 );
}
/**
* Get the report history.
*
* @since 4.7.4
*
* @return \WP_REST_Response The response.
*/
public static function getReportHistory() {
$reportHistory = aioseo()->writingAssistant->seoBoost->getReportHistory();
if ( is_wp_error( $reportHistory ) ) {
return new \WP_REST_Response( [
'success' => false,
'error' => $reportHistory->get_error_message()
], 200 );
}
return new \WP_REST_Response( $reportHistory, 200 );
}
/**
* Disconnect the user.
*
* @since 4.7.4
*
* @return \WP_REST_Response The response.
*/
public static function disconnect() {
aioseo()->writingAssistant->seoBoost->setAccessToken( '' );
return new \WP_REST_Response( [ 'success' => true ], 200 );
}
/**
* Save user options.
*
* @since 4.7.4
*
* @param \WP_REST_Request $request The REST Request
* @return \WP_REST_Response The response.
*/
public static function saveUserOptions( $request ) {
$body = $request->get_json_params();
$userOptions = [
'country' => $body['country'],
'language' => $body['language'],
];
aioseo()->writingAssistant->seoBoost->setUserOptions( $userOptions );
return new \WP_REST_Response( [ 'success' => true ], 200 );
}
/**
* Set the report progress.
*
* @since 4.7.4
*
* @param \WP_REST_Request $request The REST Request
* @return \WP_REST_Response The response.
*/
public static function setReportProgress( $request ) {
$body = $request->get_json_params();
$keyword = Models\WritingAssistantPost::getKeyword( (int) $body['postId'] );
$keyword->progress = (int) $body['progress'];
$keyword->save();
return new \WP_REST_Response( [ 'success' => true ], 200 );
}
} home/xbodynamge/dev/wp-content/plugins/all-in-one-seo-pack/app/Common/Admin/WritingAssistant.php 0000644 00000005005 15113701047 0026706 0 ustar 00 <?php
namespace AIOSEO\Plugin\Common\Admin;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
use AIOSEO\Plugin\Common\Models;
/**
* The Admin class.
*
* @since 4.7.4
*/
class WritingAssistant {
/**
* Class constructor.
*
* @since 4.7.4
*/
public function __construct() {
add_action( 'add_meta_boxes', [ $this, 'addMetabox' ] );
add_action( 'delete_post', [ $this, 'deletePost' ] );
}
/**
* Deletes the writing assistant post.
*
* @since 4.7.4
*
* @param int $postId The post id.
* @return void
*/
public function deletePost( $postId ) {
Models\WritingAssistantPost::getPost( $postId )->delete();
}
/**
* Adds a meta box to the page/posts screens.
*
* @since 4.7.4
*
* @return void
*/
public function addMetabox() {
if ( ! aioseo()->access->hasCapability( 'aioseo_page_writing_assistant_settings' ) ) {
return;
}
$postType = get_post_type();
if (
(
! aioseo()->options->writingAssistant->postTypes->all &&
! in_array( $postType, aioseo()->options->writingAssistant->postTypes->included, true )
) ||
! in_array( $postType, aioseo()->helpers->getPublicPostTypes( true ), true )
) {
return;
}
// Skip post types that do not support an editor.
if ( ! post_type_supports( $postType, 'editor' ) ) {
return;
}
// Ignore certain plugins.
if (
aioseo()->thirdParty->webStories->isPluginActive() &&
'web-story' === $postType
) {
return;
}
add_action( 'admin_enqueue_scripts', [ $this, 'enqueueAssets' ] );
// Translators: 1 - The plugin short name ("AIOSEO").
$aioseoMetaboxTitle = sprintf( esc_html__( '%1$s Writing Assistant', 'all-in-one-seo-pack' ), AIOSEO_PLUGIN_SHORT_NAME );
add_meta_box(
'aioseo-writing-assistant-metabox',
$aioseoMetaboxTitle,
[ $this, 'renderMetabox' ],
null,
'normal',
'low'
);
}
/**
* Render the on-page settings metabox with the Vue App wrapper.
*
* @since 4.7.4
*
* @return void
*/
public function renderMetabox() {
?>
<div id="aioseo-writing-assistant-metabox-app">
<?php aioseo()->templates->getTemplate( 'parts/loader.php' ); ?>
</div>
<?php
}
/**
* Enqueues the JS/CSS for the standalone.
*
* @since 4.7.4
*
* @return void
*/
public function enqueueAssets() {
if ( ! aioseo()->helpers->isScreenBase( 'post' ) ) {
return;
}
aioseo()->core->assets->load(
'src/vue/standalone/writing-assistant/main.js',
[],
aioseo()->writingAssistant->helpers->getStandaloneVueData(),
'aioseoWritingAssistant'
);
}
} dev/wp-content/plugins/all-in-one-seo-pack/app/Common/WritingAssistant/WritingAssistant.php 0000644 00000001102 15114321163 0031104 0 ustar 00 home/xbodynamge <?php
namespace AIOSEO\Plugin\Common\WritingAssistant;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Main class.
*
* @since 4.7.4
*/
class WritingAssistant {
/**
* Helpers.
*
* @since 4.7.4
*
* @var Utils\Helpers
*/
public $helpers;
/**
* SeoBoost.
*
* @since 4.7.4
*
* @var SeoBoost\SeoBoost
*/
public $seoBoost;
/**
* Load our classes.
*
* @since 4.7.4
*
* @return void
*/
public function __construct() {
$this->helpers = new Utils\Helpers();
$this->seoBoost = new SeoBoost\SeoBoost();
}
} home/xbodynamge/dev/wp-content/plugins/all-in-one-seo-pack/app/Common/Api/WritingAssistant.php 0000644 00000021163 15114332721 0026372 0 ustar 00 <?php
namespace AIOSEO\Plugin\Common\Api;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
use AIOSEO\Plugin\Common\Models;
/**
* WritingAssistant class for the API.
*
* @since 4.7.4
*/
class WritingAssistant {
/**
* Process the keyword.
*
* @since 4.7.4
*
* @param \WP_REST_Request $request The REST Request
* @return \WP_REST_Response The response.
*/
public static function processKeyword( $request ) {
$body = $request->get_json_params();
$postId = absint( $body['postId'] );
$keywordText = sanitize_text_field( $body['keyword'] );
$country = sanitize_text_field( $body['country'] );
$language = sanitize_text_field( strtolower( $body['language'] ) );
if ( empty( $keywordText ) || empty( $country ) || empty( $language ) ) {
return new \WP_REST_Response( [
'success' => false,
'error' => __( 'Missing data to generate a report', 'all-in-one-seo-pack' )
] );
}
$keyword = Models\WritingAssistantKeyword::getKeyword( $keywordText, $country, $language );
$writingAssistantPost = Models\WritingAssistantPost::getPost( $postId );
if ( $keyword->exists() ) {
$writingAssistantPost->attachKeyword( $keyword->id );
// Returning early will let the UI code start polling the keyword.
return new \WP_REST_Response( [
'success' => true,
'progress' => $keyword->progress
], 200 );
}
// Start a new keyword process.
$processResult = aioseo()->writingAssistant->seoBoost->service->processKeyword( $keywordText, $country, $language );
if ( is_wp_error( $processResult ) ) {
return new \WP_REST_Response( [
'success' => false,
'error' => $processResult->get_error_message()
] );
}
// Store the new keyword.
$keyword->uuid = $processResult['slug'];
$keyword->progress = 0;
$keyword->save();
// Update the writing assistant post with the current keyword.
$writingAssistantPost->attachKeyword( $keyword->id );
return new \WP_REST_Response( [ 'success' => true ], 200 );
}
/**
* Get current keyword for a Post.
*
* @since 4.7.4
*
* @param \WP_REST_Request $request The REST Request
* @return \WP_REST_Response The response.
*/
public static function getPostKeyword( $request ) {
$postId = $request->get_param( 'postId' );
if ( empty( $postId ) ) {
return new \WP_REST_Response( [
'success' => false,
'message' => __( 'Empty Post ID', 'all-in-one-seo-pack' )
], 404 );
}
$keyword = Models\WritingAssistantPost::getKeyword( $postId );
if ( $keyword && 100 !== $keyword->progress ) {
// Update progress.
$newProgress = aioseo()->writingAssistant->seoBoost->service->getProgressAndResult( $keyword->uuid );
if ( is_wp_error( $newProgress ) ) {
return new \WP_REST_Response( [
'success' => false,
'error' => $newProgress->get_error_message()
], 200 );
}
if ( 'success' !== $newProgress['status'] ) {
return new \WP_REST_Response( [
'success' => false,
'error' => $newProgress['msg']
], 200 );
}
$keyword->progress = ! empty( $newProgress['report']['progress'] ) ? $newProgress['report']['progress'] : $keyword->progress;
if ( ! empty( $newProgress['report']['keywords'] ) ) {
$keyword->keywords = $newProgress['report']['keywords'];
}
if ( ! empty( $newProgress['report']['competitors'] ) ) {
$keyword->competitors = [
'competitors' => $newProgress['report']['competitors'],
'summary' => $newProgress['report']['competitors_summary']
];
}
$keyword->save();
}
// Return a refreshed keyword here because we need some parsed data.
$keyword = Models\WritingAssistantPost::getKeyword( $postId );
return new \WP_REST_Response( $keyword, 200 );
}
/**
* Get the content analysis for a post.
*
* @since 4.7.4
*
* @param \WP_REST_Request $request The REST Request
* @return \WP_REST_Response The response.
*/
public static function getContentAnalysis( $request ) {
$title = $request->get_param( 'title' );
$description = $request->get_param( 'description' );
$content = apply_filters( 'the_content', $request->get_param( 'content' ) );
$postId = $request->get_param( 'postId' );
if ( empty( $content ) || empty( $postId ) ) {
return new \WP_REST_Response( [
'success' => false,
'message' => __( 'Empty Content or Post ID', 'all-in-one-seo-pack' )
], 200 );
}
$keyword = Models\WritingAssistantPost::getKeyword( $postId );
if (
! $keyword ||
! $keyword->exists() ||
100 !== $keyword->progress
) {
return new \WP_REST_Response( [
'success' => false,
'error' => __( 'Keyword not found or not ready', 'all-in-one-seo-pack' )
], 200 );
}
$writingAssistantPost = Models\WritingAssistantPost::getPost( $postId );
// Make sure we're not analysing the same content again.
$contentHash = sha1( $content );
if (
! empty( $writingAssistantPost->content_analysis ) &&
$writingAssistantPost->content_analysis_hash === $contentHash
) {
return new \WP_REST_Response( $writingAssistantPost->content_analysis, 200 );
}
// Call SEOBoost service to get the content analysis.
$contentAnalysis = aioseo()->writingAssistant->seoBoost->service->getContentAnalysis( $title, $description, $content, $keyword->uuid );
if ( is_wp_error( $contentAnalysis ) ) {
return new \WP_REST_Response( [
'success' => false,
'error' => $contentAnalysis->get_error_message()
], 200 );
}
if ( empty( $contentAnalysis['result'] ) ) {
return new \WP_REST_Response( [
'success' => false,
'error' => __( 'Empty response from service', 'all-in-one-seo-pack' )
], 200 );
}
// Update the post with the content analysis.
$writingAssistantPost->content_analysis = $contentAnalysis['result'];
$writingAssistantPost->content_analysis_hash = $contentHash;
$writingAssistantPost->save();
return new \WP_REST_Response( $contentAnalysis['result'], 200 );
}
/**
* Get the user info.
*
* @since 4.7.4
*
* @return \WP_REST_Response The response.
*/
public static function getUserInfo() {
$userInfo = aioseo()->writingAssistant->seoBoost->service->getUserInfo();
if ( is_wp_error( $userInfo ) ) {
return new \WP_REST_Response( [
'success' => false,
'error' => $userInfo->get_error_message()
], 200 );
}
if ( empty( $userInfo['status'] ) ) {
return new \WP_REST_Response( [
'success' => false,
'error' => __( 'Empty response from service', 'all-in-one-seo-pack' )
], 200 );
}
if ( 'success' !== $userInfo['status'] ) {
return new \WP_REST_Response( [
'success' => false,
'error' => $userInfo['msg']
], 200 );
}
return new \WP_REST_Response( $userInfo, 200 );
}
/**
* Get the user info.
*
* @since 4.7.4
*
* @return \WP_REST_Response The response.
*/
public static function getUserOptions() {
$userOptions = aioseo()->writingAssistant->seoBoost->getUserOptions();
return new \WP_REST_Response( $userOptions, 200 );
}
/**
* Get the report history.
*
* @since 4.7.4
*
* @return \WP_REST_Response The response.
*/
public static function getReportHistory() {
$reportHistory = aioseo()->writingAssistant->seoBoost->getReportHistory();
if ( is_wp_error( $reportHistory ) ) {
return new \WP_REST_Response( [
'success' => false,
'error' => $reportHistory->get_error_message()
], 200 );
}
return new \WP_REST_Response( $reportHistory, 200 );
}
/**
* Disconnect the user.
*
* @since 4.7.4
*
* @return \WP_REST_Response The response.
*/
public static function disconnect() {
aioseo()->writingAssistant->seoBoost->setAccessToken( '' );
return new \WP_REST_Response( [ 'success' => true ], 200 );
}
/**
* Save user options.
*
* @since 4.7.4
*
* @param \WP_REST_Request $request The REST Request
* @return \WP_REST_Response The response.
*/
public static function saveUserOptions( $request ) {
$body = $request->get_json_params();
$userOptions = [
'country' => $body['country'],
'language' => $body['language'],
];
aioseo()->writingAssistant->seoBoost->setUserOptions( $userOptions );
return new \WP_REST_Response( [ 'success' => true ], 200 );
}
/**
* Set the report progress.
*
* @since 4.7.4
*
* @param \WP_REST_Request $request The REST Request
* @return \WP_REST_Response The response.
*/
public static function setReportProgress( $request ) {
$body = $request->get_json_params();
$keyword = Models\WritingAssistantPost::getKeyword( (int) $body['postId'] );
$keyword->progress = (int) $body['progress'];
$keyword->save();
return new \WP_REST_Response( [ 'success' => true ], 200 );
}
}