Files
2026-04-13 15:50:16 +02:00

604 lines
18 KiB
PHP

<?php
if (!defined('ABSPATH')) die('No direct access allowed');
/**
* All commands that are intended to be available for calling from any sort of control interface (e.g. wp-admin, UpdraftCentral) go in here. All public methods should either return the data to be returned, or a WP_Error with associated error code, message and error data.
*/
class MPSUM_Commands {
/**
* Holds instance of MPSUM_Admin_Ajax class
*
* @var object
*/
private $admin_ajax;
/**
* Holds instance of MPSUM_Premium_Admin_Ajax class
*
* @var object
*/
private $premium_admin_ajax;
/**
* MPSUM_Commands class constructor.
*/
public function __construct() {
$this->admin_ajax = MPSUM_Admin_Ajax::get_instance();
if (Easy_Updates_Manager()->is_premium()) {
$this->premium_admin_ajax = MPSUM_Premium_Admin_Ajax::get_instance();
}
}
/**
* Retrieve and return version of the plugin
*
* @return string Version of the plugin
*/
public function get_version() {
return EASY_UPDATES_MANAGER_VERSION;
}
/**
* Retrieves core options and returns to construct general tab content
*
* @return array|string An array of core options or error message
*/
public function get_general_contents() {
$options = MPSUM_Updates_Manager::get_options('core', true);
if (empty($options)) {
$options = MPSUM_Admin_Core::get_defaults();
} elseif (is_array($options)) {
$options = wp_parse_args($options, MPSUM_Admin_Core::get_defaults());
}
return $options;
}
/**
* Saves core options and return updated core options
*
* @param array $data - Data from the remote call
*
* @return array|string An array of core options or an error message
*/
public function save_general_options($data) {
$options = $data['data']['data'];
$decoded_options = $this->_get_decoded_options($options);
$core_options = MPSUM_Updates_Manager::get_options('core', true);
$decoded_options['email_addresses'] = $core_options['email_addresses'];
MPSUM_Updates_Manager::update_options($decoded_options, 'core');
return MPSUM_Updates_Manager::get_options('core');
}
/**
* Saves email notification emails
*
* @param string $email_addresses Email addresses (may be comma separated)
*
* @return string A success or error message.
*/
public function save_notification_emails($email_addresses) {
$email_addresses = trim($email_addresses);
// Check for empty amail addresses and save empty email options.
if (empty($email_addresses)) {
$options = MPSUM_Updates_Manager::get_options('core', true);
$options['email_addresses'] = '';
MPSUM_Updates_Manager::update_options($options, 'core');
return __('Your e-mail addresses have been saved.', 'stops-core-theme-and-plugin-updates');
}
// Check for valid emails.
$email_validation = MPSUM_Utils::validate_emails($email_addresses); // $email_addresses holds a string of email addresses. May be comma separated.
// Save emails if valid.
if (! $email_validation['errors']) {
$options = MPSUM_Updates_Manager::get_options('core', true);
$options['email_addresses'] = $email_validation['emails'];
MPSUM_Updates_Manager::update_options($options, 'core');
return __('Your e-mail addresses have been saved.', 'stops-core-theme-and-plugin-updates');
}
return __('One or more of the e-mail addresses is invalid.', 'stops-core-theme-and-plugin-updates');
}
/**
* UC Sends `id`s of button elements which is converted to option key here
*
* @param array $options An array of updated options from remote call
*
* @return array An array of decoded options
*/
private function _get_decoded_options($options) {
$decoded_options = array();
foreach ($options as $option) {
$pos = strrpos($option, '-');
$value = substr($option, $pos+1);
$key = substr($option, 0, strlen($option) - (strlen($value) + 1));
$key = str_replace('-', '_', $key);
$decoded_options[$key] = $value;
}
return $decoded_options;
}
/**
* Plugin tab content template
*
* @param array $data - Data from the remote call
*
* @return string Returns plugin tab content as HTML string
*/
public function get_plugins_contents($data) {
if (!current_user_can('update_plugins')) {
return __('User has insufficient capability to update plugins', 'stops-core-theme-and-plugin-updates');
}
$args = $this->_get_paged_view_status($data);
if (! isset($args['slug'])) {
$args['slug'] = 'mpsum-update-options';
}
return Easy_Updates_Manager()->include_template('admin-tab-plugins.php', true, $args);
}
/**
* Saves plugin update options
*
* @param array $data - Data from the remote call
*
* @return string Returns plugin tab content as HTML string
*/
public function save_plugins_update_options($data) {
$args = $this->_get_paged_view_status($data);
parse_str($data['data']['data'], $updated_options);
$this->admin_ajax->save_plugins_update_options($updated_options);
return Easy_Updates_Manager()->include_template('admin-tab-plugins.php', true, $args);
}
/**
* Saves plugin options performed via bulk actions
*
* @param array $data - Data from the remote call
*
* @return string Returns plugin tab content as HTML string
*/
public function bulk_action_plugins_update_options($data) {
$args = $this->_get_paged_view_status($data);
parse_str($data['data']['data'], $updated_options);
$this->admin_ajax->bulk_action_plugins_update_options($updated_options);
return Easy_Updates_Manager()->include_template('admin-tab-plugins.php', true, $args);
}
/**
* Theme tab content template
*
* @param array $data - Data from the remote call
*
* @return string Returns theme tab content as HTML string
*/
public function get_themes_contents($data) {
if (!current_user_can('update_themes')) {
return __('User has insufficient capability to update themes', 'stops-core-theme-and-plugin-updates');
}
$args = $this->_get_paged_view_status($data);
if (! isset($args['slug'])) {
$args['slug'] = 'mpsum-update-options';
}
return Easy_Updates_Manager()->include_template('admin-tab-themes.php', true, $args);
}
/**
* Saves theme update options
*
* @param array $data - Data from the remote call
*
* @return string Returns theme tab content as HTML string
*/
public function save_themes_update_options($data) {
$args = $this->_get_paged_view_status($data);
parse_str($data['data']['data'], $updated_options);
$this->admin_ajax->save_themes_update_options($updated_options);
return Easy_Updates_Manager()->include_template('admin-tab-themes.php', true, $args);
}
/**
* Saves theme options performed via bulk actions
*
* @param array $data - Data from the remote call
*
* @return string Returns theme tab content as HTML string
*/
public function bulk_action_themes_update_options($data) {
$args = $this->_get_paged_view_status($data);
parse_str($data['data']['data'], $updated_options);
$this->admin_ajax->bulk_action_themes_update_options($updated_options);
return Easy_Updates_Manager()->include_template('admin-tab-themes.php', true, $args);
}
/**
* Logs tab content template
*
* @param array $data - Data from the remote call
*
* @return string Returns logs tab content as HTML string
*/
public function get_logs_contents($data) {
$paged = isset($data['data']['paged']) ? $data['data']['paged'] : '1';
$view = isset($data['data']['view']) ? $data['data']['view'] : 'all';
$m = isset($data['data']['m']) ? $data['data']['m'] : 'all';
$status = isset($data['data']['status']) ? $data['data']['status'] : 'all';
$action_type = isset($data['data']['action_type']) ? $data['data']['action_type'] : 'all';
$type = isset($data['data']['type']) ? $data['data']['type'] : 'all';
$order = isset($data['data']['order']) ? $data['data']['order'] : 'DESC';
$is_search = isset($data['data']['is_search']) ? $data['data']['is_search'] : false;
$search_term = isset($data['data']['search_term']) ? $data['data']['search_term'] : '';
$args = array('paged' => $paged, 'view' => $view, 'status' => $status, 'action_type' => $action_type, 'type' => $type, 'm' => $m, 'is_search' => $is_search, 'search_term' => $search_term, 'order' => $order);
if (! isset($args['slug'])) {
$args['slug'] = 'mpsum-update-options';
}
return Easy_Updates_Manager()->include_template('admin-tab-logs.php', true, $args);
}
/**
* Advanced tab content template
*
* @param array $data - Data from the remote call
*
* @return string Returns advanced tab content as HTML string
*/
public function get_advanced_contents() {
new MPSUM_Admin_Advanced();
if (Easy_Updates_Manager()->is_premium()) {
new MPSUM_Premium();
}
return Easy_Updates_Manager()->include_template('admin-tab-advanced.php', true);
}
/**
* Checks whether logging is enabled or not
*
* @return bool Return true if logging is enabled, otherwise false
*/
public function is_logs_enabled() {
$options = MPSUM_Updates_Manager::get_options('core');
if (isset($options['logs']) && 'on' == $options['logs']) {
return true;
}
return false;
}
/**
* Forces updates immediately
*
* @return string Confirmation message of forced updates
*/
public function force_updates() {
return $this->admin_ajax->force_updates();
}
/**
* Saves logs settings
*
* @param array $data - Data from the remote call
*
* @return string Confirmation message of saved log option
*/
public function save_logs_settings($data) {
if (!current_user_can('manage_options')) {
return __('User has insufficient capability to save options', 'stops-core-theme-and-plugin-updates');
}
return $this->premium_admin_ajax->save_logs_settings($data);
}
/**
* Export settings as json file
*
* @return string Confirmation message
*/
public function export_settings() {
if (!$this->user_can_update()) {
return __('User has insufficient capability to manage options', 'stops-core-theme-and-plugin-updates');
}
return $this->premium_admin_ajax->export_settings();
}
/**
* Export settings as json file
*
* @param array $data - Data from the remote call
*
* @return string Confirmation message
*/
public function import_settings($data) {
if (!$this->user_can_update()) {
return __('User has insufficient capability to manage options', 'stops-core-theme-and-plugin-updates');
}
return $this->premium_admin_ajax->import_settings($data['data']);
}
/**
* Saves excluded users option
*
* @param array $data - Data from the remote call
*
* @return string Confirmation message of saved users
*/
public function save_excluded_users($data) {
if (!current_user_can('promote_users')) {
return __('User has insufficient capability to promote users', 'stops-core-theme-and-plugin-updates');
}
return $this->admin_ajax->save_excluded_users($data);
}
/**
* Enable auto back
*
* @return string Confirmation message of enabling auto backup
*/
public function enable_auto_backup() {
if (!current_user_can('manage_options')) {
return __('User has insufficient capability to take backups', 'stops-core-theme-and-plugin-updates');
}
return $this->premium_admin_ajax->enable_auto_backup();
}
/**
* Disable auto back
*
* @return string Confirmation message of enabling auto backup
*/
public function disable_auto_backup() {
if (!current_user_can('manage_options')) {
return __('User has insufficient capability to take backups', 'stops-core-theme-and-plugin-updates');
}
return $this->premium_admin_ajax->disable_auto_backup();
}
/**
* Save update cron schedule
*
* @param array $data - Data from the remote call
*
* @return string Returns next schedule message
*/
public function save_cron_schedule($data) {
if (!current_user_can('manage_options')) {
return __('User has insufficient capability to take backups', 'stops-core-theme-and-plugin-updates');
}
return $this->premium_admin_ajax->save_cron_schedule($data);
}
/**
* Save delayed update duration
*
* @param array $data - Data from the remote call
*
* @return string Returns success message
*/
public function save_delay_updates($data) {
if (!current_user_can('manage_options')) {
return __('User has insufficient capability to manage options', 'stops-core-theme-and-plugin-updates');
}
return $this->premium_admin_ajax->save_delay_updates($data);
}
/**
* Save anonymize update options
*
* @param array $data - Data from the remote call
*
* @return string Returns success message
*/
public function save_anonymize_updates($data) {
if (!current_user_can('manage_options')) {
return __('User has insufficient capability to manage options', 'stops-core-theme-and-plugin-updates');
}
return $this->premium_admin_ajax->save_anonymize_updates($data);
}
/**
* Enables logging
*
* @return string Confirmation message
*/
public function enable_logs() {
return $this->admin_ajax->enable_logs();
}
/**
* Checks to see if plugins are in the WordPress Directory
*
* @param array $data An array of updated options
*
* @return string|array Result of ajax call
*/
public function check_plugins($data) {
if (!current_user_can('manage_options')) {
return __('User has insufficient capability to manage options', 'stops-core-theme-and-plugin-updates');
}
return $this->premium_admin_ajax->check_plugins($data);
}
/**
* Enables White-list
*
* @param array $data An array of updated options
*
* @return string Confirmation message
*/
public function whitelist_save($data) {
if (!current_user_can('manage_options')) {
return __('User has insufficient capability to manage options', 'stops-core-theme-and-plugin-updates');
}
return $this->premium_admin_ajax->whitelist_save($data['data']);
}
/**
* Reset White-list
*
* @param array $data An array of updated options
*
* @return string Confirmation message
*/
public function whitelist_reset($data) {
if (!current_user_can('manage_options')) {
return __('User has insufficient capability to manage options', 'stops-core-theme-and-plugin-updates');
}
return $this->premium_admin_ajax->whitelist_reset($data);
}
/**
* Enables webhook
*
* @param array $data An array of updated options
*
* @return string Confirmation message
*/
public function enable_webhook($data) {
if (!current_user_can('manage_options')) {
return __('User has insufficient capability to manage options', 'stops-core-theme-and-plugin-updates');
}
return $this->premium_admin_ajax->enable_webhook($data);
}
/**
* Disables webhook
*
* @param array $data An array of updated options
*
* @return string Confirmation message
*/
public function disable_webhook($data) {
if (!current_user_can('manage_options')) {
return __('User has insufficient capability to manage options', 'stops-core-theme-and-plugin-updates');
}
return $this->premium_admin_ajax->disable_webhook($data);
}
/**
* Enables safe mode
*
* @param array $data An array of updated options
*
* @return string Confirmation message
*/
public function enable_safe_mode($data) {
if (!current_user_can('manage_options')) {
return __('User has insufficient capability to manage options', 'stops-core-theme-and-plugin-updates');
}
return $this->premium_admin_ajax->enable_safe_mode($data);
}
/**
* Disables safe mode
*
* @param array $data An array of updated options
*
* @return string Confirmation message
*/
public function disable_safe_mode($data) {
if (!current_user_can('manage_options')) {
return __('User has insufficient capability to manage options', 'stops-core-theme-and-plugin-updates');
}
return $this->premium_admin_ajax->disable_safe_mode($data);
}
/**
* Enables Version Control Protection
*
* @param array $data An array of updated options
*
* @return string Confirmation message
*/
public function enable_version_control($data) {
if (!current_user_can('manage_options')) {
return __('User has insufficient capability to manage options', 'stops-core-theme-and-plugin-updates');
}
return $this->premium_admin_ajax->enable_version_control_protection($data);
}
/**
* Disables Version Control Protection
*
* @param array $data An array of updated options
*
* @return string Confirmation message
*/
public function disable_version_control($data) {
if (!current_user_can('manage_options')) {
return __('User has insufficient capability to manage options', 'stops-core-theme-and-plugin-updates');
}
return $this->premium_admin_ajax->disable_version_control_protection($data);
}
/**
* Enables Unmaintained Plugin Check
*
* @param array $data An array of updated options
*
* @return string Confirmation message
*/
public function enable_unmaintained_plugins_check($data) {
if (!current_user_can('manage_options')) {
return __('User has insufficient capability to manage options', 'stops-core-theme-and-plugin-updates');
}
return $this->premium_admin_ajax->enable_unmaintained_plugins($data);
}
/**
* Disables Unmaintained Plugin Check
*
* @param array $data An array of updated options
*
* @return string Confirmation message
*/
public function disable_unmaintained_plugins_check($data) {
if (!current_user_can('manage_options')) {
return __('User has insufficient capability to manage options', 'stops-core-theme-and-plugin-updates');
}
return $this->premium_admin_ajax->disable_unmaintained_plugins($data);
}
/**
* Clears logs
*
* @return string Confirmation message
*/
public function clear_logs() {
return $this->admin_ajax->clear_logs();
}
/**
* Resets all options
*
* @return string Confirmation message
*/
public function reset_options() {
return $this->admin_ajax->reset_options();
}
/**
* Returns paged argument and view filter argument
*
* @param array $data - Data from the remote call
*
* @return array
*/
private function _get_paged_view_status($data) {
$paged = isset($data['data']['paged']) ? $data['data']['paged'] : '1';
$view = isset($data['data']['view']) ? $data['data']['view'] : 'all';
return array('paged' => $paged, 'view' => $view);
}
/**
* Checks whether you can do updates to core, plugins and themes
*
* @return bool True if user can do updates, false otherwise
*/
private function user_can_update() {
if (current_user_can('update_themes') && current_user_can('update_plugins') && current_user_can('update_core')) return true;
return false;
}
}