File "Widgets.php"
Full Path: /home/rubycabfbt/www/wp-content/plugins/advanced-access-manager/application/Framework/Service/Widgets.php
File size: 5.55 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* ======================================================================
* LICENSE: This file is subject to the terms and conditions defined in *
* file 'license.txt', which is part of this source code package. *
* ======================================================================
*/
/**
* AAM service for widgets
*
* Widgets are functional block that are rendered on the admin dashboard and frontend
* areas
*
* @package AAM
* @version 7.0.0
*/
class AAM_Framework_Service_Widgets
{
use AAM_Framework_Service_BaseTrait;
/**
* Restrict/hide widget
*
* @param mixed $widget
*
* @return bool|WP_Error
* @access public
*
* @version 7.0.0
*/
public function deny($widget)
{
try {
$result = $this->_update_item_permission($widget, 'deny');
} catch (Exception $e) {
$result = $this->_handle_error($e);
}
return $result;
}
/**
* Allow widget
*
* @param mixed $widget
*
* @return bool|WP_Error
* @access public
*
* @version 7.0.0
*/
public function allow($widget)
{
try {
$result = $this->_update_item_permission($widget, 'allow');
} catch (Exception $e) {
$result = $this->_handle_error($e);
}
return $result;
}
/**
* Reset permissions
*
* Resets all permissions if no $widget is provided. Otherwise, try to reset
* permissions for a given widget or trigger a filter that invokes third-party
* implementation.
*
* @param mixed $widget [Optional]
*
* @return bool
* @access public
*
* @version 7.0.0
*/
public function reset($widget = null)
{
try {
$resource = $this->_get_resource();
if (empty($widget)) {
$result = $resource->reset();
} else {
$result = $resource->reset(
$this->_normalize_resource_identifier($widget)
);
}
} catch (Exception $e) {
$result = $this->_handle_error($e);
}
return $result;
}
/**
* Determine if metabox is restricted/hidden
*
* @param mixed $widget
*
* @return bool|WP_Error
* @access public
*
* @version 7.0.0
*/
public function is_denied($widget)
{
try {
$result = $this->_is_denied($widget);
} catch (Exception $e) {
$result = $this->_handle_error($e);
}
return $result;
}
/**
* Determine if metabox is allowed
*
* @param mixed $widget
*
* @return bool|WP_Error
* @access public
*
* @version 7.0.0
*/
public function is_allowed($widget)
{
$result = $this->is_denied($widget);
return is_bool($result) ? !$result : $result;
}
/**
* Get widget resource
*
* @return AAM_Framework_Resource_Widget
* @access private
*
* @version 7.0.0
*/
private function _get_resource()
{
return $this->_get_access_level()->get_resource(
AAM_Framework_Type_Resource::WIDGET
);
}
/**
* Check if metabox is restricted
*
* @param string $metabox
*
* @return bool
* @access private
*
* @version 7.0.0
*/
private function _is_denied($widget)
{
$result = null;
$resource = $this->_get_resource();
$identifier = $this->_normalize_resource_identifier($widget);
$permission = $resource->get_permission($identifier, 'list');
if (!empty($permission)) {
$result = $permission['effect'] !== 'allow';
}
// Allow third-party implementations to integrate with the
// decision making process
$result = apply_filters(
'aam_widget_is_denied_filter',
$result,
$identifier,
$resource,
is_array($widget) && isset($widget['area']) ? $widget['area'] : null
);
// Prepare the final answer
return is_bool($result) ? $result : false;
}
/**
* Update existing widget permission
*
* @param mixed $widget
* @param bool $is_denied
*
* @return array
* @access private
*
* @version 7.0.0
*/
private function _update_item_permission($widget, $effect)
{
try {
$resource = $this->_get_resource();
$identifier = $this->_normalize_resource_identifier($widget);
// Prepare array of new permissions and save them
$result = $resource->set_permission($identifier, 'list', $effect);
} catch (Exception $e) {
$result = $this->_handle_error($e);
}
return $result;
}
/**
* @inheritDoc
*
* @return string
*/
private function _normalize_resource_identifier($widget)
{
// Determining metabox slug
if (is_array($widget) && isset($widget['callback'])) {
$result = $this->misc->callable_to_slug($widget['callback']);
} elseif (is_a($widget, WP_Widget::class)) {
$result = $this->misc->callable_to_slug($widget);
} elseif (is_string($widget)) {
$result = $this->misc->sanitize_slug($widget);
} elseif (is_array($widget) && isset($widget['slug'])) {
$result = $widget['slug'];
} else {
throw new InvalidArgumentException('Invalid widget provided');
}
return $result;
}
}