first commit

This commit is contained in:
2024-07-31 13:12:38 +07:00
commit b4e8cbe182
10213 changed files with 3125839 additions and 0 deletions

View File

@@ -0,0 +1,19 @@
<?php
namespace Elementor\Modules\Home\Transformations\Base;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
abstract class Transformations_Abstract {
protected $wordpress_adapter;
protected $plugin_status_adapter;
public function __construct( $args ) {
$this->wordpress_adapter = $args['wordpress_adapter'] ?? null;
$this->plugin_status_adapter = $args['plugin_status_adapter'] ?? null;
}
abstract public function transform( array $home_screen_data ): array;
}

View File

@@ -0,0 +1,18 @@
<?php
namespace Elementor\Modules\Home\Transformations;
use Elementor\Modules\Home\Transformations\Base\Transformations_Abstract;
use Elementor\Plugin;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
class Create_New_Page_Url extends Transformations_Abstract {
public function transform( array $home_screen_data ): array {
$home_screen_data['create_new_page_url'] = Plugin::$instance->documents->get_create_new_post_url( 'page' );
return $home_screen_data;
}
}

View File

@@ -0,0 +1,101 @@
<?php
namespace Elementor\Modules\Home\Transformations;
use Elementor\Core\Base\Document;
use Elementor\Plugin;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
class Create_Site_Settings_Url extends Base\Transformations_Abstract {
const URL_TYPE = 'site_settings';
const SITE_SETTINGS_ITEMS = [ 'Site Settings', 'Site Logo', 'Global Colors', 'Global Fonts' ];
public function transform( array $home_screen_data ): array {
if ( empty( $home_screen_data['get_started'] ) ) {
return $home_screen_data;
}
$site_settings_url_config = $this->get_site_settings_url_config();
$home_screen_data['get_started']['repeater'] = array_map( function( $repeater_item ) use ( $site_settings_url_config ) {
if ( ! in_array( $repeater_item['title'], static::SITE_SETTINGS_ITEMS, true ) ) {
return $repeater_item;
}
if ( ! empty( $repeater_item['tab_id'] ) ) {
$site_settings_url_config['url'] = add_query_arg( [ 'active-tab' => $repeater_item['tab_id'] ], $site_settings_url_config['url'] );
}
return array_merge( $repeater_item, $site_settings_url_config );
}, $home_screen_data['get_started']['repeater'] );
return $home_screen_data;
}
private function get_site_settings_url_config(): array {
$existing_elementor_page = $this->get_elementor_page();
$site_settings_url = ! empty( $existing_elementor_page )
? $this->get_elementor_edit_url( $existing_elementor_page->ID )
: $this->get_elementor_create_new_page_url();
return [
'new_page' => empty( $existing_elementor_page ),
'url' => $site_settings_url,
'type' => static::URL_TYPE,
];
}
private function get_elementor_create_new_page_url(): string {
$active_kit_id = Plugin::$instance->kits_manager->get_active_id();
if ( empty( $active_kit_id ) ) {
return Plugin::$instance->documents->get_create_new_post_url( 'page' );
}
return add_query_arg( [ 'active-document' => $active_kit_id ], Plugin::$instance->documents->get_create_new_post_url( 'page' ) );
}
private function get_elementor_edit_url( int $post_id ): string {
$active_kit_id = Plugin::$instance->kits_manager->get_active_id();
$document = Plugin::$instance->documents->get( $post_id );
if ( ! $document ) {
return '';
}
return add_query_arg( [ 'active-document' => $active_kit_id ], $document->get_edit_url() );
}
private function get_elementor_page() {
$args = [
'meta_key' => Document::BUILT_WITH_ELEMENTOR_META_KEY,
'sort_order' => 'asc',
'sort_column' => 'post_date',
];
$pages = get_pages( $args );
if ( empty( $pages ) ) {
return null;
}
$show_page_on_front = 'page' === get_option( 'show_on_front' );
if ( ! $show_page_on_front ) {
return $pages[0];
}
$home_page_id = get_option( 'page_on_front' );
foreach ( $pages as $page ) {
if ( (string) $page->ID === $home_page_id ) {
return $page;
}
}
return $pages[0];
}
}

View File

@@ -0,0 +1,67 @@
<?php
namespace Elementor\Modules\Home\Transformations;
use Elementor\Modules\Home\Transformations\Base\Transformations_Abstract;
use Elementor\User;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
class Filter_Condition_Introduction_Meta extends Transformations_Abstract {
public array $introduction_meta_data;
public function __construct( $args ) {
parent::__construct( $args );
$this->introduction_meta_data = User::get_introduction_meta() ?? [];
}
public function transform( array $home_screen_data ): array {
$introduction_meta_conditions = $this->get_introduction_meta_conditions( $home_screen_data );
$active_addons = $this->get_activated_addons( $introduction_meta_conditions );
$home_screen_data['add_ons']['repeater'] = $this->get_inactive_addons( $home_screen_data, $active_addons );
return $home_screen_data;
}
private function get_introduction_meta_conditions( $home_screen_data ): array {
$add_ons = $home_screen_data['add_ons']['repeater'];
$conditions = [];
foreach ( $add_ons as $add_on ) {
if ( array_key_exists( 'condition', $add_on ) && 'introduction_meta' === $add_on['condition']['key'] ) {
$conditions[ $add_on['title'] ] = $add_on['condition']['value'];
}
}
return $conditions;
}
private function get_activated_addons( $conditions ): array {
$active_addons = [];
foreach ( $conditions as $add_on_title => $introduction_meta_value ) {
if ( ! empty( $this->introduction_meta_data[ $introduction_meta_value ] ) ) {
$active_addons[] = $add_on_title;
}
}
return $active_addons;
}
private function get_inactive_addons( $home_screen_data, $active_addons ): array {
$add_ons = $home_screen_data['add_ons']['repeater'];
$inactive_add_ons = [];
foreach ( $add_ons as $add_on ) {
if ( ! in_array( $add_on['title'], $active_addons ) ) {
$inactive_add_ons[] = $add_on;
}
}
return $inactive_add_ons;
}
}

View File

@@ -0,0 +1,39 @@
<?php
namespace Elementor\Modules\Home\Transformations;
use Elementor\Modules\Home\Transformations\Base\Transformations_Abstract;
use Elementor\Utils;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
class Filter_Get_Started_By_License extends Transformations_Abstract {
public bool $has_pro;
public function __construct( $args ) {
parent::__construct( $args );
$this->has_pro = Utils::has_pro();
}
private function is_valid_item( $item ) {
$has_pro_json_not_free = $this->has_pro && 'pro' === $item['license'][0];
$is_not_pro_json_not_pro = ! $this->has_pro && 'free' === $item['license'][0];
return $has_pro_json_not_free || $is_not_pro_json_not_pro;
}
public function transform( array $home_screen_data ): array {
$new_get_started = [];
foreach ( $home_screen_data['get_started'] as $index => $item ) {
if ( $this->is_valid_item( $item ) ) {
$new_get_started[] = $item;
}
}
$home_screen_data['get_started'] = reset( $new_get_started );
return $home_screen_data;
}
}

View File

@@ -0,0 +1,89 @@
<?php
namespace Elementor\Modules\Home\Transformations;
use Elementor\Modules\Home\Transformations\Base\Transformations_Abstract;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
class Filter_Plugins extends Transformations_Abstract {
const PLUGIN_IS_NOT_INSTALLED_FROM_WPORG = 'not-installed-wporg';
const PLUGIN_IS_NOT_INSTALLED_NOT_FROM_WPORG = 'not-installed-not-wporg';
const PLUGIN_IS_INSTALLED_NOT_ACTIVATED = 'installed-not-activated';
const PLUGIN_IS_ACTIVATED = 'activated';
public function transform( array $home_screen_data ): array {
$home_screen_data['add_ons']['repeater'] = $this->get_add_ons_installation_status( $home_screen_data['add_ons']['repeater'] );
return $home_screen_data;
}
private function is_plugin( $add_on ): bool {
return 'link' !== $add_on['type'];
}
private function get_add_ons_installation_status( array $add_ons ): array {
$transformed_add_ons = [];
foreach ( $add_ons as $add_on ) {
if ( $this->is_plugin( $add_on ) ) {
$this->handle_plugin_add_on( $add_on, $transformed_add_ons );
} else {
$transformed_add_ons[] = $add_on;
}
}
return $transformed_add_ons;
}
private function get_plugin_installation_status( $add_on ): string {
$plugin_path = $add_on['file_path'];
if ( ! $this->plugin_status_adapter->is_plugin_installed( $plugin_path ) ) {
if ( 'wporg' === $add_on['type'] ) {
return self::PLUGIN_IS_NOT_INSTALLED_FROM_WPORG;
}
return self::PLUGIN_IS_NOT_INSTALLED_NOT_FROM_WPORG;
}
if ( $this->wordpress_adapter->is_plugin_active( $plugin_path ) ) {
return self::PLUGIN_IS_ACTIVATED;
}
return self::PLUGIN_IS_INSTALLED_NOT_ACTIVATED;
}
private function handle_plugin_add_on( array $add_on, array &$transformed_add_ons ): void {
$installation_status = $this->get_plugin_installation_status( $add_on );
if ( self::PLUGIN_IS_ACTIVATED === $installation_status ) {
return;
}
switch ( $this->get_plugin_installation_status( $add_on ) ) {
case self::PLUGIN_IS_NOT_INSTALLED_NOT_FROM_WPORG:
break;
case self::PLUGIN_IS_NOT_INSTALLED_FROM_WPORG:
$installation_url = $this->plugin_status_adapter->get_install_plugin_url( $add_on['file_path'] );
$add_on['url'] = html_entity_decode( $installation_url );
$add_on['target'] = '_self';
break;
case self::PLUGIN_IS_INSTALLED_NOT_ACTIVATED:
$activation_url = $this->plugin_status_adapter->get_activate_plugin_url( $add_on['file_path'] );
$add_on['url'] = html_entity_decode( $activation_url );
$add_on['button_label'] = esc_html__( 'Activate', 'elementor' );
$add_on['target'] = '_self';
break;
}
$transformed_add_ons[] = $add_on;
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace elementor\modules\home\transformations;
use Elementor\Modules\Home\Transformations\Base\Transformations_Abstract;
use Elementor\Utils;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
class Filter_Sidebar_Upgrade_By_License extends Transformations_Abstract {
public bool $has_pro;
public function __construct( $args ) {
parent::__construct( $args );
$this->has_pro = Utils::has_pro();
}
private function is_valid_item( $item ) {
$has_pro_json_not_free = $this->has_pro && 'pro' === $item['license'][0];
$is_not_pro_json_not_pro = ! $this->has_pro && 'free' === $item['license'][0];
$should_show = ! isset( $item['show'] ) || 'true' === $item['show'];
return $has_pro_json_not_free && $should_show || $is_not_pro_json_not_pro && $should_show;
}
public function transform( array $home_screen_data ): array {
$new_sidebar_upgrade = [];
foreach ( $home_screen_data['sidebar_upgrade'] as $index => $item ) {
if ( $this->is_valid_item( $item ) ) {
$new_sidebar_upgrade[] = $item;
}
}
if ( empty( $new_sidebar_upgrade ) ) {
unset( $home_screen_data['sidebar_upgrade'] );
return $home_screen_data;
}
$home_screen_data['sidebar_upgrade'] = reset( $new_sidebar_upgrade );
return $home_screen_data;
}
}

View File

@@ -0,0 +1,40 @@
<?php
namespace elementor\modules\home\transformations;
use Elementor\Modules\Home\Transformations\Base\Transformations_Abstract;
use Elementor\Utils;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
class Filter_Top_Section_By_License extends Transformations_Abstract {
public bool $has_pro;
public function __construct( $args ) {
parent::__construct( $args );
$this->has_pro = Utils::has_pro();
}
private function is_valid_item( $item ) {
if ( isset( $item['license'] ) ) {
$has_pro_json_not_free = $this->has_pro && 'pro' === $item['license'][0];
$is_not_pro_json_not_pro = ! $this->has_pro && 'free' === $item['license'][0];
return $has_pro_json_not_free || $is_not_pro_json_not_pro;
}
}
public function transform( array $home_screen_data ): array {
foreach ( $home_screen_data['top_with_licences'] as $index => $item ) {
if ( $this->is_valid_item( $item ) ) {
$new_top[] = $item;
}
}
$home_screen_data['top_with_licences'] = reset( $new_top );
unset( $home_screen_data['top'] );
return $home_screen_data;
}
}