forked from elementor/elementor
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
17 changed files
with
3,940 additions
and
182 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -27,6 +27,10 @@ | |
tbody td:first-child { | ||
width: 300px; | ||
} | ||
|
||
td { | ||
white-space: break-spaces; | ||
} | ||
} | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
<?php | ||
namespace Elementor\Modules\ElementManager; | ||
|
||
use Elementor\Core\Admin\Menu\Interfaces\Admin_Menu_Item_With_Page; | ||
use Elementor\Settings; | ||
|
||
if ( ! defined( 'ABSPATH' ) ) { | ||
exit; // Exit if accessed directly. | ||
} | ||
|
||
class Admin_Menu_App implements Admin_Menu_Item_With_Page { | ||
|
||
public function is_visible() { | ||
return true; | ||
} | ||
|
||
public function get_parent_slug() { | ||
return Settings::PAGE_ID; | ||
} | ||
|
||
public function get_label() { | ||
return esc_html__( 'Element Manager', 'elementor' ); | ||
} | ||
|
||
public function get_page_title() { | ||
return esc_html__( 'Element Manager', 'elementor' ); | ||
} | ||
|
||
public function get_capability() { | ||
return 'manage_options'; | ||
} | ||
|
||
public function render() { | ||
echo '<div class="wrap">'; | ||
echo '<h3 class="wp-heading-inline">' . esc_html__( 'Element Manager', 'elementor' ) . '</h3>'; | ||
echo '<div id="elementor-element-manager-wrap"></div>'; | ||
echo '</div>'; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
<?php | ||
namespace Elementor\Modules\ElementManager; | ||
|
||
use Elementor\Modules\Usage\Module as Usage_Module; | ||
use Elementor\Api; | ||
use Elementor\Plugin; | ||
use Elementor\Utils; | ||
|
||
if ( ! defined( 'ABSPATH' ) ) { | ||
exit; // Exit if accessed directly. | ||
} | ||
|
||
class Ajax { | ||
|
||
public function register_endpoints() { | ||
add_action( 'wp_ajax_elementor_element_manager_get_admin_app_data', [ $this, 'ajax_get_admin_page_data' ] ); | ||
add_action( 'wp_ajax_elementor_element_manager_save_disabled_elements', [ $this, 'ajax_save_disabled_elements' ] ); | ||
add_action( 'wp_ajax_elementor_element_manager_get_widgets_usage', [ $this, 'ajax_get_widgets_usage' ] ); | ||
} | ||
|
||
public function ajax_get_admin_page_data() { | ||
$this->verify_permission(); | ||
$this->force_enabled_all_elements(); | ||
|
||
$widgets = []; | ||
$plugins = []; | ||
|
||
foreach ( Plugin::$instance->widgets_manager->get_widget_types() as $widget ) { | ||
if ( ! $widget->show_in_panel() ) { | ||
continue; | ||
} | ||
|
||
$plugin_name = $this->get_plugin_name_from_widget_instance( $widget ); | ||
|
||
if ( ! in_array( $plugin_name, $plugins ) ) { | ||
$plugins[] = $plugin_name; | ||
} | ||
|
||
$widgets[] = [ | ||
'name' => $widget->get_name(), | ||
'plugin' => $plugin_name, | ||
'title' => $widget->get_title(), | ||
]; | ||
} | ||
|
||
$data = [ | ||
'disabled_elements' => Options::get_disabled_elements(), | ||
'promotion_widgets' => [], | ||
'widgets' => $widgets, | ||
'plugins' => $plugins, | ||
]; | ||
|
||
if ( ! Utils::has_pro() ) { | ||
$data['promotion_widgets'] = Api::get_promotion_widgets(); | ||
} | ||
|
||
wp_send_json_success( $data ); | ||
} | ||
|
||
private function verify_permission() { | ||
if ( ! current_user_can( 'manage_options' ) ) { | ||
wp_send_json_error( esc_html__( 'You do not have permission to edit these settings.', 'elementor' ) ); | ||
} | ||
|
||
$nonce = Utils::get_super_global_value( $_POST, 'nonce' ); // phpcs:ignore WordPress.Security.NonceVerification.Missing | ||
if ( empty( $nonce ) || ! wp_verify_nonce( $nonce, 'e-element-manager-app' ) ) { | ||
wp_send_json_error( esc_html__( 'Invalid nonce.', 'elementor' ) ); | ||
} | ||
} | ||
|
||
private function force_enabled_all_elements() { | ||
remove_all_filters( 'elementor/widgets/is_widget_enabled' ); | ||
} | ||
|
||
private function get_plugin_name_from_widget_instance( $widget ) { | ||
$class_reflection = new \ReflectionClass( $widget ); | ||
|
||
$plugin_basename = plugin_basename( $class_reflection->getFileName() ); | ||
|
||
$plugin_directory = strtok( $plugin_basename, '/' ); | ||
|
||
$plugins_data = get_plugins( '/' . $plugin_directory ); | ||
$plugin_data = array_shift( $plugins_data ); | ||
|
||
return $plugin_data['Name'] ?? esc_html__( 'Unknown', 'elementor' ); | ||
} | ||
|
||
public function ajax_save_disabled_elements() { | ||
$this->verify_permission(); | ||
|
||
$elements = Utils::get_super_global_value( $_POST, 'widgets' ); // phpcs:ignore WordPress.Security.NonceVerification.Missing | ||
|
||
if ( empty( $elements ) ) { | ||
wp_send_json_error( esc_html__( 'No elements to save.', 'elementor' ) ); | ||
} | ||
|
||
$disabled_elements = json_decode( $elements ); | ||
|
||
if ( ! is_array( $disabled_elements ) ) { | ||
wp_send_json_error( esc_html__( 'Unexpected elements data.', 'elementor' ) ); | ||
} | ||
|
||
Options::update_disabled_elements( $disabled_elements ); | ||
|
||
wp_send_json_success(); | ||
} | ||
|
||
public function ajax_get_widgets_usage() { | ||
$this->verify_permission(); | ||
|
||
/** @var Usage_Module $usage_module */ | ||
$usage_module = Usage_Module::instance(); | ||
$usage_module->recalc_usage(); | ||
|
||
$widgets_usage = []; | ||
foreach ( $usage_module->get_formatted_usage( 'raw' ) as $data ) { | ||
foreach ( $data['elements'] as $element => $count ) { | ||
if ( ! isset( $widgets_usage[ $element ] ) ) { | ||
$widgets_usage[ $element ] = 0; | ||
} | ||
|
||
$widgets_usage[ $element ] += $count; | ||
} | ||
} | ||
|
||
wp_send_json_success( $widgets_usage ); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
import { render } from '@wordpress/element'; | ||
import domReady from '@wordpress/dom-ready'; | ||
|
||
import { App } from './app'; | ||
|
||
domReady( () => { | ||
const htmlOutput = document.getElementById( 'elementor-element-manager-wrap' ); | ||
|
||
if ( htmlOutput ) { | ||
render( <App />, htmlOutput ); | ||
} | ||
} ); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
export const saveDisabledWidgets = async ( widgetsDisabled ) => { | ||
try { | ||
const response = await fetch( eElementManagerConfig.ajaxurl, { | ||
method: 'POST', | ||
headers: { | ||
'Content-Type': 'application/x-www-form-urlencoded', | ||
}, | ||
body: new URLSearchParams( { | ||
action: 'elementor_element_manager_save_disabled_elements', | ||
nonce: eElementManagerConfig.nonce, | ||
widgets: JSON.stringify( widgetsDisabled ), | ||
} ), | ||
} ); | ||
|
||
const data = await response.json(); | ||
} catch ( error ) { | ||
console.error( error ); | ||
} | ||
}; | ||
|
||
export const getAdminAppData = async () => { | ||
try { | ||
const response = await fetch( eElementManagerConfig.ajaxurl, { | ||
method: 'POST', | ||
headers: { | ||
'Content-Type': 'application/x-www-form-urlencoded', | ||
}, | ||
body: new URLSearchParams( { | ||
action: 'elementor_element_manager_get_admin_app_data', | ||
nonce: eElementManagerConfig.nonce, | ||
} ), | ||
} ); | ||
|
||
const data = await response.json(); | ||
if ( data.success ) { | ||
return data.data; | ||
} | ||
} catch ( error ) { | ||
console.error( error ); | ||
} | ||
}; | ||
|
||
export const getUsageWidgets = async () => { | ||
try { | ||
const response = await fetch( eElementManagerConfig.ajaxurl, { | ||
method: 'POST', | ||
headers: { | ||
'Content-Type': 'application/x-www-form-urlencoded', | ||
}, | ||
body: new URLSearchParams( { | ||
action: 'elementor_element_manager_get_widgets_usage', | ||
nonce: eElementManagerConfig.nonce, | ||
} ), | ||
} ); | ||
|
||
const data = await response.json(); | ||
if ( data.success ) { | ||
return data.data; | ||
} | ||
} catch ( error ) { | ||
console.error( error ); | ||
} | ||
}; |
Oops, something went wrong.