File "Permissions.php"
Full path: /home/dora/public_html/wp-content/plugins/bricksforge/includes/permissions/Permissions.php
File size: 6.7 KB
MIME-type: --
Charset: utf-8
<?php
namespace Bricksforge;
/**
* Permissions Handler
*/
class Permissions
{
public function __construct()
{
add_filter('bricks/builder/elements', [$this, 'render_elements_by_role']);
add_action('wp_ajax_create_user_role', [$this, 'create_user_role']);
add_action('wp_head', [$this, 'hide_tab_area']);
}
/**
* Render Elements By Role
*/
public function render_elements_by_role($elements)
{
if (!is_user_logged_in()) {
return $elements;
}
$user = wp_get_current_user();
$roles = get_option('brf_permissions_roles');
$rendered_elements = array();
$hide_only = false;
if (!isset($roles) || empty($roles)) {
return $elements;
}
foreach ($roles as $role) {
if (in_array($role->value, $user->roles)) {
$role->permissions->elements = array_filter($role->permissions->elements, function ($e) {
return $e->active === true;
});
if (isset($role->permissions->hideOnly) && $role->permissions->hideOnly == true) {
$hide_only = true;
}
$rendered_elements = array_map(function ($element) {
return $element->name;
}, $role->permissions->elements);
}
}
;
if ($hide_only === true) {
add_action('wp_head', [$this, 'hide_elements']);
return $elements;
}
return $rendered_elements ? $rendered_elements : $elements;
}
/**
* Create User Role
*/
public function create_user_role()
{
$role = $_REQUEST['role'];
$role = json_decode(stripslashes($role));
if (!isset($role) || !$role) {
die;
}
$cap_array = (array) $role->capabilities;
add_role($role->value, $role->label, $cap_array);
echo true;
die;
}
/**
* Only hide the elements
*/
public function hide_elements()
{
$user = wp_get_current_user();
$roles = get_option('brf_permissions_roles');
$rendered_elements = array();
if (!isset($roles) || empty($roles)) {
return;
}
foreach ($roles as $role) {
if (in_array($role->value, $user->roles)) {
$role->permissions->elements = array_filter($role->permissions->elements, function ($e) {
return $e->active === true;
});
$rendered_elements = array_map(function ($element) {
return $element->name;
}, $role->permissions->elements);
}
}
;
echo "<style>";
echo "#bricks-panel-elements-categories .category-layout .sortable-wrapper > li {display: none!important}";
echo "#bricks-panel-elements-categories .category-basic .sortable-wrapper > li {display: none!important}";
echo "#bricks-panel-elements-categories .category-general .sortable-wrapper > li {display: none!important}";
echo "#bricks-panel-elements-categories .category-media .sortable-wrapper > li {display: none!important}";
echo "#bricks-panel-elements-categories .category-wordpress .sortable-wrapper > li {display: none!important}";
echo "#bricks-panel-elements-categories .category-single .sortable-wrapper > li {display: none!important}";
foreach ($rendered_elements as $element) {
echo "#bricks-panel-elements-categories .category-layout li[data-element-name=" . $element . "] {display: block!important}";
echo "#bricks-panel-elements-categories .category-basic li[data-element-name=" . $element . "] {display: block!important}";
echo "#bricks-panel-elements-categories .category-general li[data-element-name=" . $element . "] {display: block!important}";
echo "#bricks-panel-elements-categories .category-media li[data-element-name=" . $element . "] {display: block!important}";
echo "#bricks-panel-elements-categories .category-wordpress li[data-element-name=" . $element . "] {display: block!important}";
echo "#bricks-panel-elements-categories .category-single li[data-element-name=" . $element . "] {display: block!important}";
}
echo "</style>";
}
/**
* Hide Tab Area
*/
public function hide_tab_area()
{
if (bricks_is_builder()) {
$role = $this->get_user_role();
if (!isset($role) || $role == false) {
return;
}
if ($role->permissions->hideTabs === true) {
?>
<style>
#bricks-panel-sticky {
display: none;
}
</style>
<?php
}
if ($role->permissions->hideStyleTab === true) {
?>
<style>
#bricks-panel-tabs {
display: none;
}
</style>
<?php
}
if ($role->permissions->cleanUpToolbar === true) {
?>
<style>
#bricks-toolbar li:not(.logo, [data-balloon="Edit in WordPress"], .new-tab, .preview, .save, .elements) {
display: none;
}
</style>
<?php
}
if ($role->permissions->hasCustomBuilderColor === true) {
?>
<style>
:root {
--builder-bg: <?php echo $role->permissions->builderColorPrimary ?>;
--builder-bg-2: <?php echo $role->permissions->builderColorSecondary ?>;
--builder-bg-3: <?php echo $role->permissions->builderColorSecondary ?>;
--builder-color-accent: <?php echo $role->permissions->builderColorAccent ?>;
--builder-color: <?php echo $role->permissions->builderColorText ?>;
}
#bricks-toolbar .logo {
background-color: <?php echo $role->permissions->builderColorAccent ?>;
}
[data-control=select] li.hover,
[data-control=select] li.selected,
[data-control=select] li:hover {
color: <?php echo $role->permissions->builderColorText ?>;
}
[data-control=select] li.hover:after,
[data-control=select] li.selected:after,
[data-control=select] li:hover:after {
background-color: <?php echo $role->permissions->builderColorPrimary ?>;
}
</style>
<?php
}
}
}
/**
* Check for user role
*/
public function get_user_role()
{
$user = wp_get_current_user();
$roles = get_option('brf_permissions_roles');
$user_role = null;
if (!isset($roles)) {
return false;
}
if ($roles && count($roles) > 0) {
foreach ($roles as $role) {
if (in_array($role->value, $user->roles)) {
$user_role = $role;
}
}
;
}
if (isset($user_role)) {
return $user_role;
}
}
}