Untitled
unknown
php
4 years ago
6.1 kB
9
Indexable
<?php
namespace DevOwl\RealCategoryLibrary\Vendor\DevOwl\RealProductManagerWpClient\view;
use DevOwl\RealCategoryLibrary\Vendor\DevOwl\RealProductManagerWpClient\Core;
use DevOwl\RealCategoryLibrary\Vendor\DevOwl\RealProductManagerWpClient\PluginUpdate;
use DevOwl\RealCategoryLibrary\Vendor\DevOwl\RealProductManagerWpClient\UtilsProvider;
use DevOwl\RealCategoryLibrary\Vendor\MatthiasWeb\Utils\Service;
// @codeCoverageIgnoreStart
\defined('ABSPATH') or die('No script kiddies please!');
// Avoid direct file request
// @codeCoverageIgnoreEnd
/**
* Plugin update view handling. E. g. add links to the plugins row in plugins list.
*/
class PluginUpdateView {
use UtilsProvider;
const OPTION_NAME_ADMIN_NOTICE_LICENSE_DISMISSED_DAY_PREFIX =
RPM_WP_CLIENT_OPT_PREFIX . '-noticeLicenseDismissDay_';
const CLICK_HANDLER_ATTRIBUTE = 'data-rpm-wp-client-plugin-update';
const CLICK_NOTICE_LICENSE_DISMISS_HANDLER_ATTRIBUTE = 'data-rpm-wp-client-plugin-update-license-notice-dismiss';
const HASH_HANDLER_PREFIX = 'rpm-wp-client-plugin-update-';
/**
* Plugin update instance.
*
* @var PluginUpdate
*/
private $pluginUpdate;
/**
* C'tor.
*
* @param PluginUpdate $pluginUpdate
* @codeCoverageIgnore
*/
private function __construct($pluginUpdate) {
$this->pluginUpdate = $pluginUpdate;
}
/**
* Show a notice when the plugin is not fully licensed.
*/
public function admin_notices_not_licensed() {
}
/**
* Show the notice of the license hint, if a license got disabled e.g. through remote or a new hostname (migration).
*/
public function admin_notices_license_hint() {
}
/**
* Show a notice in the plugins list that the plugin is not activated, yet.
*/
public function after_plugin_row() {
}
/**
* Generate a `<a` link to open the license form for a given plugin.
*
* @param string $text
*/
public function generateLicenseLink($text) {
return \sprintf(
'<a href="#" %s="%s">%s</a>',
self::CLICK_HANDLER_ATTRIBUTE,
$this->getPluginUpdate()
->getInitiator()
->getPluginSlug(),
$text
);
}
/**
* Add a "Enter License" link to the plugins actions.
*
* @param array $actions The plugin actions
* @return array The updated actions.
*/
public function plugin_action_links($actions) {
// Free version should never show a license button in plugins list
if (
!$this->getPluginUpdate()
->getInitiator()
->isExternalUpdateEnabled()
) {
return $actions;
}
$link = $this->generateLicenseLink(__('License', RPM_WP_CLIENT_TD));
$actions[RPM_WP_CLIENT_SLUG] = $this->getPluginUpdate()->isLicensed()
? $link
: \sprintf('<span style="font-weight:bold;">%s</span>', $link);
return $actions;
}
/**
* Dismiss the license admin notice for the current day.
*/
public function dismissLicenseAdminNotice() {
$day = $this->getPluginUpdate()->getDaysSinceFirstInitialization();
return update_option(
self::OPTION_NAME_ADMIN_NOTICE_LICENSE_DISMISSED_DAY_PREFIX .
$this->getPluginUpdate()
->getInitiator()
->getPluginSlug(),
$day
);
}
/**
* Get the admin notice text for not-fully licensed plugins. Returns `false` if the admin
* notice should not be shown. Returns `[true, 'text']` if a notice should be shown and is dismissible.
* Returns `[false, 'text']` for a permanent notice.
*
* @param boolean $allowFirstDays If `true`, the first and second day also shows a notice. Useful for `update-core` page
*/
protected function getAdminNoticeLicenseText($allowFirstDays = \false) {
}
/**
* Get the "Activate now" link for the current plugin.
*
* @param boolean $onlyHref
*/
public function getActivateLink($onlyHref = \false) {
$initiator = $this->getPluginUpdate()->getInitiator();
$href = admin_url('plugins.php#' . self::HASH_HANDLER_PREFIX . $initiator->getPluginSlug());
return $onlyHref
? $href
: \sprintf(
// Force to reload the page so the hash works always (also in Plugins list)
'<a href="%1$s" onclick="window.location.href=\'%1$s\';window.location.reload();">%2$s</a>',
$href,
__('Activate now', RPM_WP_CLIENT_TD)
);
}
/**
* Dismiss-functionality is handled through a inline-onclick handler because we
* do not need to enqueue an extra script on each page.
*
* @param string $slug
*/
protected function dismissOnClickHandler($slug) {
return \join('', [
'jQuery(this).parents(".notice").remove();',
\sprintf(
'window.fetch("%s");',
add_query_arg(
['_method' => 'DELETE', '_wpnonce' => wp_create_nonce('wp_rest')],
\sprintf(
'%splugin-update/%s/license-notice',
\DevOwl\RealCategoryLibrary\Vendor\MatthiasWeb\Utils\Service::getUrl(
\DevOwl\RealCategoryLibrary\Vendor\DevOwl\RealProductManagerWpClient\Core::getInstance()
),
$slug
)
)
)
]);
}
/**
* Get plugin update instance.
*
* @codeCoverageIgnore
*/
public function getPluginUpdate() {
return $this->pluginUpdate;
}
/**
* New instance.
*
* @param PluginUpdate $pluginUpdate
* @codeCoverageIgnore
*/
public static function instance($pluginUpdate) {
return new \DevOwl\RealCategoryLibrary\Vendor\DevOwl\RealProductManagerWpClient\view\PluginUpdateView(
$pluginUpdate
);
}
}
Editor is loading...