125 lines
2.5 KiB
PHP
125 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace Blocksy;
|
|
|
|
class ExtensionsManagerApi {
|
|
public function __construct() {
|
|
$this->attach_ajax_actions();
|
|
}
|
|
|
|
protected $ajax_actions = [
|
|
'blocksy_extensions_status',
|
|
'blocksy_extension_activate',
|
|
'blocksy_extension_deactivate',
|
|
'blocksy_flush_permalinks'
|
|
];
|
|
|
|
public function blocksy_flush_permalinks() {
|
|
if (! check_ajax_referer('ct-dashboard', 'nonce', false)) {
|
|
wp_send_json_error('nonce');
|
|
}
|
|
|
|
$this->check_capability('edit_theme_options');
|
|
|
|
flush_rewrite_rules();
|
|
|
|
wp_send_json_success();
|
|
}
|
|
|
|
public function blocksy_extensions_status() {
|
|
if (! check_ajax_referer('ct-dashboard', 'nonce', false)) {
|
|
wp_send_json_error('nonce');
|
|
}
|
|
|
|
$this->check_capability('edit_theme_options');
|
|
|
|
$manager = Plugin::instance()->extensions;
|
|
|
|
$maybe_input = json_decode(file_get_contents('php://input'), true);
|
|
|
|
$data = $manager->get_extensions([
|
|
'require_config' => true
|
|
]);
|
|
|
|
if (
|
|
$maybe_input
|
|
&&
|
|
isset($maybe_input['extension'])
|
|
&&
|
|
isset($maybe_input['extAction'])
|
|
) {
|
|
$ext_preboot = $manager->get($maybe_input['extension'], [
|
|
'type' => 'preboot'
|
|
]);
|
|
|
|
if (method_exists(
|
|
$ext_preboot, 'ext_action'
|
|
)) {
|
|
$result = $ext_preboot->ext_action($maybe_input['extAction']);
|
|
|
|
if ($result) {
|
|
$data[$maybe_input['extension']]['data'] = $result;
|
|
}
|
|
}
|
|
}
|
|
|
|
wp_send_json_success($data);
|
|
}
|
|
|
|
public function blocksy_extension_activate() {
|
|
if (! check_ajax_referer('ct-dashboard', 'nonce', false)) {
|
|
wp_send_json_error('nonce');
|
|
}
|
|
|
|
$this->check_capability('edit_theme_options');
|
|
|
|
$manager = Plugin::instance()->extensions;
|
|
|
|
$manager->activate_extension($this->get_extension_from_request());
|
|
|
|
wp_send_json_success();
|
|
}
|
|
|
|
public function blocksy_extension_deactivate() {
|
|
if (! check_ajax_referer('ct-dashboard', 'nonce', false)) {
|
|
wp_send_json_error('nonce');
|
|
}
|
|
|
|
$this->check_capability('edit_theme_options');
|
|
|
|
$manager = Plugin::instance()->extensions;
|
|
|
|
$manager->deactivate_extension($this->get_extension_from_request());
|
|
|
|
wp_send_json_success();
|
|
}
|
|
|
|
public function check_capability($cap = 'install_plugins') {
|
|
$manager = Plugin::instance()->extensions;
|
|
|
|
if (! $manager->can($cap)) {
|
|
wp_send_json_error();
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public function get_extension_from_request() {
|
|
if ( ! isset( $_POST['ext'] ) ) {
|
|
wp_send_json_error();
|
|
}
|
|
|
|
return addslashes($_POST['ext']);
|
|
}
|
|
|
|
public function attach_ajax_actions() {
|
|
foreach ($this->ajax_actions as $action) {
|
|
add_action(
|
|
'wp_ajax_' . $action,
|
|
[$this, $action]
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|