/home/edulekha/heavenbuildpro.com/wp-content/plugins/extendify/app/Draft/Admin.php
<?php
/**
* Admin.
*/
namespace Extendify\Draft;
use Extendify\PartnerData;
use Extendify\Config;
/**
* This class handles any file loading for the admin area.
*/
class Admin
{
/**
* The instance
*
* @var $instance
*/
public static $instance = null;
/**
* Whether to show the Ask AI button.
*
* @var boolean
*/
public $showDraft = false;
/**
* Adds various actions to set up the page
*
* @return self|void
*/
public function __construct()
{
if (self::$instance) {
return self::$instance;
}
self::$instance = $this;
if (!defined('EXTENDIFY_PARTNER_ID')) {
return;
}
$draftData = $this->fetchDraftData();
if (! $draftData) {
return;
}
$this->showDraft = isset($draftData['showDraft']) ? $draftData['showDraft'] : false;
$this->loadScripts();
}
/**
* Adds scripts to the admin
*
* @return void
*/
public function loadScripts()
{
\add_action(
'admin_init',
function () {
if (!current_user_can(Config::$requiredCapability)) {
return;
}
// Don't show on Launch pages.
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
if (isset($_GET['page']) && $_GET['page'] === 'extendify-launch') {
return;
}
if (!$this->showDraft) {
return;
}
add_action('enqueue_block_editor_assets', [$this, 'enqueueGutenbergAssets']);
$version = Config::$environment === 'PRODUCTION' ? Config::$version : uniqid();
$cssColorVars = PartnerData::cssVariableMapping();
$cssString = implode('; ', array_map(function ($k, $v) {
return "$k: $v";
}, array_keys($cssColorVars), $cssColorVars));
wp_add_inline_style(Config::$slug . '-draft-styles', "body { $cssString; }");
\wp_enqueue_style(
Config::$slug . '-draft-styles',
EXTENDIFY_BASE_URL . 'public/build/' . Config::$assetManifest['extendify-draft.css'],
[],
Config::$version,
'all'
);
}
);
}
/**
* Fetch the data from the partner-data API endpoint.
*
* @return array
*/
private function fetchDraftData()
{
$draftData = get_transient('extendify_draft_data');
if ($draftData !== false) {
return $draftData;
}
if (!defined('EXTENDIFY_PARTNER_ID')) {
return [];
}
$apiUrl = Config::$config['api']['onboarding'];
$response = wp_remote_get(
add_query_arg(
['partner' => EXTENDIFY_PARTNER_ID],
$apiUrl . '/partner-data/'
),
['headers' => ['Accept' => 'application/json']]
);
if (is_wp_error($response)) {
return [];
}
$result = json_decode(wp_remote_retrieve_body($response), true);
$data = isset($result['data']) ? $result['data'] : [];
$draftData = [
'showDraft' => isset($data['showDraft']) ? $data['showDraft'] : false,
];
if (Config::$environment === 'DEVELOPMENT') {
$draftData['showDraft'] = true;
}
set_transient('extendify_draft_data', $draftData, DAY_IN_SECONDS);
return $draftData;
}
/**
* Enqueues Gutenberg stuff on a non-Gutenberg page.
*
* @return void
*/
public function enqueueGutenbergAssets()
{
$currentScreen = get_current_screen();
// Only load in the post editor.
if ($currentScreen->base !== 'post') {
return;
}
$version = Config::$environment === 'PRODUCTION' ? Config::$version : uniqid();
$scriptAssetPath = EXTENDIFY_PATH . 'public/build/' . Config::$assetManifest['extendify-draft.php'];
$fallback = [
'dependencies' => [],
'version' => $version,
];
$draftDependencies = file_exists($scriptAssetPath) ? require $scriptAssetPath : $fallback;
foreach ($draftDependencies['dependencies'] as $style) {
wp_enqueue_style($style);
}
\wp_enqueue_script(
Config::$slug . '-draft-scripts',
EXTENDIFY_BASE_URL . 'public/build/' . Config::$assetManifest['extendify-draft.js'],
$draftDependencies['dependencies'],
$draftDependencies['version'],
true
);
\wp_set_script_translations(Config::$slug . '-draft-scripts', 'extendify');
}
}