File "Bricksforge.php"
Full path: /home/dora/public_html/wp-content/plugins/bricksforge/includes/api/Bricksforge.php
File size: 20.36 KB
MIME-type: --
Charset: utf-8
<?php
namespace Bricksforge\Api;
use WP_REST_Controller;
/**
* REST_API Handler
*/
class Bricksforge extends WP_REST_Controller
{
/**
* [__construct description]
*/
public function __construct()
{
$this->namespace = 'bricksforge/v1';
}
/**
* Register the routes
*
* @return void
*/
public function register_routes()
{
register_rest_route(
$this->namespace,
'/get_shortcode_content',
array(
array(
'methods' => \WP_REST_Server::CREATABLE,
'callback' => array($this, 'get_shortcode_content'),
'permission_callback' => array($this, 'allowed'),
)
)
);
register_rest_route(
$this->namespace,
'/get_user_roles',
array(
array(
'methods' => \WP_REST_Server::READABLE,
'callback' => array($this, 'get_user_roles'),
'permission_callback' => array($this, 'allow_permission'),
)
)
);
register_rest_route(
$this->namespace,
'/get_permissions_roles',
array(
array(
'methods' => \WP_REST_Server::READABLE,
'callback' => array($this, 'get_permissions_roles'),
'permission_callback' => array($this, 'allow_permission'),
)
)
);
register_rest_route(
$this->namespace,
'/save_permissions_roles',
array(
array(
'methods' => \WP_REST_Server::CREATABLE,
'callback' => array($this, 'save_permissions_roles'),
'permission_callback' => array($this, 'allow_permission'),
)
)
);
register_rest_route(
$this->namespace,
'/remove_user_role',
array(
array(
'methods' => \WP_REST_Server::CREATABLE,
'callback' => array($this, 'remove_user_role'),
'permission_callback' => array($this, 'allow_permission'),
)
)
);
register_rest_route(
$this->namespace,
'/get_global_classes',
array(
array(
'methods' => \WP_REST_Server::READABLE,
'callback' => array($this, 'get_global_classes'),
'permission_callback' => array($this, 'allow_permission'),
)
)
);
register_rest_route(
$this->namespace,
'/save_global_classes',
array(
array(
'methods' => \WP_REST_Server::CREATABLE,
'callback' => array($this, 'save_global_classes'),
'permission_callback' => array($this, 'allow_permission'),
)
)
);
register_rest_route(
$this->namespace,
'/save_tools',
array(
array(
'methods' => \WP_REST_Server::CREATABLE,
'callback' => array($this, 'save_tools'),
'permission_callback' => array($this, 'allow_permission'),
)
)
);
register_rest_route(
$this->namespace,
'/save_elements',
array(
array(
'methods' => \WP_REST_Server::CREATABLE,
'callback' => array($this, 'save_elements'),
'permission_callback' => array($this, 'allow_permission'),
)
)
);
register_rest_route(
$this->namespace,
'/save_popups',
array(
array(
'methods' => \WP_REST_Server::CREATABLE,
'callback' => array($this, 'save_popups'),
'permission_callback' => array($this, 'allow_permission'),
)
)
);
register_rest_route(
$this->namespace,
'/save_maintenance',
array(
array(
'methods' => \WP_REST_Server::CREATABLE,
'callback' => array($this, 'save_maintenance'),
'permission_callback' => array($this, 'allow_permission'),
)
)
);
register_rest_route(
$this->namespace,
'/save_whitelabel',
array(
array(
'methods' => \WP_REST_Server::CREATABLE,
'callback' => array($this, 'save_whitelabel'),
'permission_callback' => array($this, 'allow_permission'),
)
)
);
register_rest_route(
$this->namespace,
'/save_panel',
array(
array(
'methods' => \WP_REST_Server::CREATABLE,
'callback' => array($this, 'save_panel'),
'permission_callback' => array($this, 'allow_permission'),
)
)
);
register_rest_route(
$this->namespace,
'/save_settings',
array(
array(
'methods' => \WP_REST_Server::CREATABLE,
'callback' => array($this, 'save_settings'),
'permission_callback' => array($this, 'allow_permission'),
)
)
);
register_rest_route(
$this->namespace,
'/save_option',
array(
array(
'methods' => \WP_REST_Server::CREATABLE,
'callback' => array($this, 'save_option'),
'permission_callback' => array($this, 'allow_permission'),
)
)
);
register_rest_route(
$this->namespace,
'/get_option',
array(
array(
'methods' => \WP_REST_Server::READABLE,
'callback' => array($this, 'get_option'),
'permission_callback' => array($this, 'allow_permission'),
)
)
);
register_rest_route(
$this->namespace,
'/reset_to_default',
array(
array(
'methods' => \WP_REST_Server::CREATABLE,
'callback' => array($this, 'reset_to_default'),
'permission_callback' => array($this, 'allow_permission'),
)
)
);
}
/**
* Get Shortcode Content
*
* @param WP_REST_Request $request Full details about the request.
*
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function get_shortcode_content($request)
{
$response = $request->get_body();
if (!$response) {
return;
}
$output = "";
$template_id = $response;
/**
* Workaround: Bricks currently does not load styles if the template is loaded outside.
*/
$elements = get_post_meta($template_id, BRICKS_DB_PAGE_CONTENT, true);
$inline_css = \Bricks\Templates::generate_inline_css($template_id, $elements);
$output .= "<style id=\"bricks-inline-css-template-{$template_id}\">{$inline_css}</style>";
$output .= do_shortcode("[bricks_template id=" . $template_id . "]");
return json_encode($output);
}
/**
* Get User Roles
*
* @param WP_REST_Request $request Full details about the request.
*
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function get_user_roles($request)
{
global $wp_roles;
$all_roles = $wp_roles->roles;
$editable_roles = apply_filters('editable_roles', $all_roles);
$response = rest_ensure_response($editable_roles);
return $response;
}
/**
* Get Permission Roles
*
* @param WP_REST_Request $request Full details about the request.
*
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function get_permissions_roles($request)
{
$response = rest_ensure_response(get_option('brf_permissions_roles'));
return $response;
}
/**
* Save Permission Roles
*
* @param WP_REST_Request $request Full details about the request.
*
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function save_permissions_roles($request)
{
global $wp_roles;
$data = $request->get_body();
$roles = json_decode($data);
if (!$roles || !is_array($roles)) {
return false;
}
update_option('brf_permissions_roles', $roles);
return true;
}
/**
* Removes a custom User Role
*
* @param WP_REST_Request $request Full details about the request.
*
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function remove_user_role($request)
{
$role = $request->get_body();
if ($role != 'administrator' && $role->value != 'editor' && $role->value != 'author' && $role->value != 'contributor' && $role->value != 'subscriber') {
remove_role(json_decode($role));
}
return true;
}
/**
* Get Global Classes
*
* @param WP_REST_Request $request Full details about the request.
*
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function get_global_classes($request)
{
$response = rest_ensure_response(get_option('brf_global_classes'));
return $response;
}
/**
* Save Global Classes
*
* @param WP_REST_Request $request Full details about the request.
*
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function save_global_classes($request)
{
$data = $request->get_body();
$categories = json_decode($data)[0];
$activated = json_decode($data)[1];
if (!isset($categories) || count($categories) == 0) {
return false;
}
if (!isset($activated)) {
return false;
}
if (!is_array($categories)) {
return false;
}
update_option('brf_global_classes_activated', $activated);
update_option('brf_global_classes', $categories);
$global_classes = get_option('bricks_global_classes') ? get_option('bricks_global_classes') : [];
$global_classes_locked = get_option('bricks_global_classes_locked') ? get_option('bricks_global_classes_locked') : [];
foreach ($categories as $category) {
foreach ($category->classes as $class) {
if (($key = array_search($class, $global_classes_locked)) !== false) {
unset($global_classes_locked[$key]);
}
foreach ($global_classes as $key => $row) {
if ($row["source"] === 'bricksforge') {
unset($global_classes[$key]);
}
}
}
}
$global_classes = array_values($global_classes);
$global_classes_locked = array_values($global_classes_locked);
foreach ($categories as $category) {
if ($category->classes && !empty($category->classes)) {
// Stop here if global classes are not activated
if (!get_option('brf_global_classes_activated') || get_option('brf_global_classes_activated') == false) {
update_option('bricks_global_classes', $global_classes);
update_option('bricks_global_classes_locked', $global_classes_locked);
return false;
}
foreach ($category->classes as $class) {
array_push($global_classes, [
"id" => $class,
"name" => $class,
"settings" => array(),
"source" => "bricksforge"
]);
array_push($global_classes_locked, $class);
}
}
}
$global_classes = array_map("unserialize", array_unique(array_map("serialize", $global_classes)));
$global_classes_locked = array_unique($global_classes_locked);
$global_classes = array_values($global_classes);
$global_classes_locked = array_values($global_classes_locked);
update_option('bricks_global_classes', $global_classes);
update_option('bricks_global_classes_locked', $global_classes_locked);
$success = $this->render_css_files($categories);
return $success === true;
}
/**
* Save Tools
*
* @param WP_REST_Request $request Full details about the request.
*
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function save_tools($request)
{
global $wp_roles;
$data = $request->get_body();
$tools = json_decode($data);
if (!isset($tools) || !is_array($tools)) {
return false;
}
update_option('brf_activated_tools', $tools);
return true;
}
/**
* Save Elements
*
* @param WP_REST_Request $request Full details about the request.
*
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function save_elements($request)
{
global $wp_roles;
$data = $request->get_body();
$elements = json_decode($data);
if (!isset($elements) || !is_array($elements)) {
return false;
}
update_option('brf_activated_elements', $elements);
return true;
}
/**
* Save Popups
*
* @param WP_REST_Request $request Full details about the request.
*
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function save_popups($request)
{
global $wp_roles;
$data = $request->get_body();
$elements = json_decode($data);
if (is_null($elements) || !is_array($elements)) {
return false;
}
update_option('brf_popups', $elements);
return true;
}
/**
* Save Maintenance Settings
*
* @param WP_REST_Request $request Full details about the request.
*
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function save_maintenance($request)
{
global $wp_roles;
$data = $request->get_body();
$settings = json_decode($data);
if (!$settings || !is_array($settings)) {
return false;
}
update_option('brf_maintenance', $settings);
return true;
}
/**
* Save White Label Settings
*
* @param WP_REST_Request $request Full details about the request.
*
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function save_whitelabel($request)
{
global $wp_roles;
$data = $request->get_body();
$settings = json_decode($data);
if (!$settings || !is_array($settings)) {
return false;
}
update_option('brf_whitelabel', $settings);
return true;
}
/**
* Save Panel Settings
*
* @param WP_REST_Request $request Full details about the request.
*
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function save_panel($request)
{
global $wp_roles;
$data = $request->get_body();
$settings = json_decode($data);
if (is_null($settings) || !is_array($settings)) {
return false;
}
update_option('brf_panel', $settings);
return true;
}
/**
* Save Settings
*
* @param WP_REST_Request $request Full details about the request.
*
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function save_settings($request)
{
$data = $request->get_body();
$settings = json_decode($data);
update_option('brf_settings', $settings);
return $settings;
}
/**
* Save Option
*
* @param WP_REST_Request $request Full details about the request.
*
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function save_option($request)
{
$data = $request->get_body();
$key = json_decode($data)[0];
$value = json_decode($data)[1];
update_option($key, $value);
}
/**
* Get Option
*
* @param WP_REST_Request $request Full details about the request.
*
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function get_option($request)
{
$key = $request->get_param('_key');
return get_option($key);
}
/**
* Reset to default
*
* @param WP_REST_Request $request Full details about the request.
*
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function reset_to_default($request)
{
delete_option('brf_permissions_roles');
delete_option('brf_global_classes_activated');
delete_option('brf_global_classes');
delete_option('brf_activated_tools');
delete_option('brf_activated_elements');
delete_option('brf_popups');
delete_option('brf_maintenance');
delete_option('brf_whitelabel');
delete_option('brf_panel');
delete_option('brf_tool_settings');
}
/**
* Checks if a given request has access to read the data.
*
* @param WP_REST_Request $request Full details about the request.
*
* @return true|WP_Error True if the request has read access, WP_Error object otherwise.
*/
public function allow_permission($request)
{
return is_user_logged_in();
}
/**
* Allow Permission
*
* @param WP_REST_Request $request Full details about the request.
*
* @return true|WP_Error True if the request has read access, WP_Error object otherwise.
*/
public function allowed($request)
{
return true;
}
/**
* Render CSS files for the global classes
*/
public function render_css_files($categories)
{
clearstatcache();
if (!file_exists(BRICKSFORGE_CUSTOM_STYLES_FILE) || !is_readable(BRICKSFORGE_CUSTOM_STYLES_FILE)) {
return false;
}
if (!$categories || empty($categories)) {
return false;
}
file_put_contents(BRICKSFORGE_CUSTOM_STYLES_FILE, ' ');
$css_content = file_get_contents(BRICKSFORGE_CUSTOM_STYLES_FILE);
$pattern = '/(?:[\.]{1})([a-zA-Z_]+[\w_]*)(?:[\s\.\,\{\>#\:]{0})/im';
foreach ($categories as $category) {
$prefix = $category->prefix;
if (is_null($prefix)) {
$css_content .= PHP_EOL . $category->code;
}
else {
$category->code = preg_replace($pattern, '.' . $prefix . '-${1}', $category->code);
$css_content .= PHP_EOL . $category->code;
}
}
$result = file_put_contents(BRICKSFORGE_CUSTOM_STYLES_FILE, $css_content);
return $result;
}
}