174 lines
3.2 KiB
PHP
174 lines
3.2 KiB
PHP
<?php
|
|
/**
|
|
* Plugin controller.
|
|
*
|
|
* @package PopupMaker
|
|
* @copyright Copyright (c) 2024, Code Atlantic LLC
|
|
*/
|
|
|
|
namespace PopupMaker\Base;
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
use Closure;
|
|
use stdClass;
|
|
|
|
/**
|
|
* Base Upgrade class.
|
|
*/
|
|
abstract class Upgrade implements \PopupMaker\Interfaces\Upgrade {
|
|
|
|
/**
|
|
* Type.
|
|
*
|
|
* @var string Uses data versioning types.
|
|
*/
|
|
const TYPE = '';
|
|
|
|
/**
|
|
* Version.
|
|
*
|
|
* @var int
|
|
*/
|
|
const VERSION = 1;
|
|
|
|
/**
|
|
* Stream.
|
|
*
|
|
* @var \PopupMaker\Services\UpgradeStream|null
|
|
*/
|
|
public $stream;
|
|
|
|
/**
|
|
* Upgrade constructor.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct() {
|
|
}
|
|
|
|
/**
|
|
* Upgrade label
|
|
*
|
|
* @return string
|
|
*/
|
|
abstract public function label();
|
|
|
|
/**
|
|
* Return full description for this upgrade.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function description() {
|
|
return '';
|
|
}
|
|
|
|
/**
|
|
* Check if the upgrade is required.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function is_required() {
|
|
$current_version = \PopupMaker\get_data_version( static::TYPE );
|
|
return $current_version && $current_version < static::VERSION;
|
|
}
|
|
|
|
/**
|
|
* Get the type of upgrade.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_type() {
|
|
return static::TYPE;
|
|
}
|
|
|
|
/**
|
|
* Check if the prerequisites are met.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function prerequisites_met() {
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Get the dependencies for this upgrade.
|
|
*
|
|
* @return string[]
|
|
*/
|
|
public function get_dependencies() {
|
|
return [];
|
|
}
|
|
|
|
/**
|
|
* Run the upgrade.
|
|
*
|
|
* @return void|\WP_Error|false
|
|
*/
|
|
abstract public function run();
|
|
|
|
/**
|
|
* Run the upgrade with stream support.
|
|
*
|
|
* @param \PopupMaker\Services\UpgradeStream $stream Stream for progress reporting and communication.
|
|
*
|
|
* @return bool|\WP_Error True on success, WP_Error on failure.
|
|
*/
|
|
public function stream_run( $stream ) {
|
|
$this->stream = $stream;
|
|
|
|
$return = $this->run();
|
|
|
|
$this->stream = null;
|
|
|
|
if ( is_bool( $return ) || is_wp_error( $return ) ) {
|
|
return $return;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Return the stream.
|
|
*
|
|
* If no stream is available it returns a mock object with no-op methods to prevent errors.
|
|
*
|
|
* @return \PopupMaker\Services\UpgradeStream|(object{
|
|
* send_event: Closure,
|
|
* send_error: Closure,
|
|
* send_data: Closure,
|
|
* update_status: Closure,
|
|
* update_task_status: Closure,
|
|
* start_upgrades: Closure,
|
|
* complete_upgrades: Closure,
|
|
* start_task: Closure,
|
|
* update_task_progress: Closure,
|
|
* complete_task: Closure
|
|
* }&\stdClass) Stream instance or mock object with no-op methods.
|
|
*/
|
|
public function stream() {
|
|
$noop =
|
|
/**
|
|
* No-op function for mock stream methods.
|
|
*
|
|
* @param mixed ...$args Variable arguments (ignored).
|
|
*
|
|
* @return void
|
|
*/
|
|
function () {};
|
|
|
|
return is_a( $this->stream, '\PopupMaker\Services\UpgradeStream' ) ? $this->stream : (object) [
|
|
'send_event' => $noop,
|
|
'send_error' => $noop,
|
|
'send_data' => $noop,
|
|
'update_status' => $noop,
|
|
'update_task_status' => $noop,
|
|
'start_upgrades' => $noop,
|
|
'complete_upgrades' => $noop,
|
|
'start_task' => $noop,
|
|
'update_task_progress' => $noop,
|
|
'complete_task' => $noop,
|
|
];
|
|
}
|
|
}
|