balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

plugin.php (17446B)


      1 <?php
      2 namespace Elementor;
      3 
      4 use Elementor\Core\Wp_Api;
      5 use Elementor\Core\Admin\Admin;
      6 use Elementor\Core\Breakpoints\Manager as Breakpoints_Manager;
      7 use Elementor\Core\Common\Modules\Ajax\Module as Ajax;
      8 use Elementor\Core\Common\App as CommonApp;
      9 use Elementor\Core\Debug\Inspector;
     10 use Elementor\Core\Documents_Manager;
     11 use Elementor\Core\Experiments\Manager as Experiments_Manager;
     12 use Elementor\Core\Kits\Manager as Kits_Manager;
     13 use Elementor\Core\Editor\Editor;
     14 use Elementor\Core\Files\Manager as Files_Manager;
     15 use Elementor\Core\Files\Assets\Manager as Assets_Manager;
     16 use Elementor\Core\Modules_Manager;
     17 use Elementor\Core\Schemes\Manager as Schemes_Manager;
     18 use Elementor\Core\Settings\Manager as Settings_Manager;
     19 use Elementor\Core\Settings\Page\Manager as Page_Settings_Manager;
     20 use Elementor\Core\Upgrade\Elementor_3_Re_Migrate_Globals;
     21 use Elementor\Modules\History\Revisions_Manager;
     22 use Elementor\Core\DynamicTags\Manager as Dynamic_Tags_Manager;
     23 use Elementor\Core\Logger\Manager as Log_Manager;
     24 use Elementor\Core\Page_Assets\Loader as Assets_Loader;
     25 use Elementor\Modules\System_Info\Module as System_Info_Module;
     26 use Elementor\Data\Manager as Data_Manager;
     27 use Elementor\Core\Common\Modules\DevTools\Module as Dev_Tools;
     28 use Elementor\Core\Files\Uploads_Manager as Uploads_Manager;
     29 
     30 if ( ! defined( 'ABSPATH' ) ) {
     31 	exit;
     32 }
     33 
     34 /**
     35  * Elementor plugin.
     36  *
     37  * The main plugin handler class is responsible for initializing Elementor. The
     38  * class registers and all the components required to run the plugin.
     39  *
     40  * @since 1.0.0
     41  */
     42 class Plugin {
     43 	const ELEMENTOR_DEFAULT_POST_TYPES = [ 'page', 'post' ];
     44 
     45 	/**
     46 	 * Instance.
     47 	 *
     48 	 * Holds the plugin instance.
     49 	 *
     50 	 * @since 1.0.0
     51 	 * @access public
     52 	 * @static
     53 	 *
     54 	 * @var Plugin
     55 	 */
     56 	public static $instance = null;
     57 
     58 	/**
     59 	 * Database.
     60 	 *
     61 	 * Holds the plugin database handler which is responsible for communicating
     62 	 * with the database.
     63 	 *
     64 	 * @since 1.0.0
     65 	 * @access public
     66 	 *
     67 	 * @var DB
     68 	 */
     69 	public $db;
     70 
     71 	/**
     72 	 * Ajax Manager.
     73 	 *
     74 	 * Holds the plugin ajax handlers which are responsible for ajax requests
     75 	 * and responses.
     76 	 *
     77 	 * @since 1.9.0
     78 	 * @deprecated 2.3.0 Use `Plugin::$instance->common->get_component( 'ajax' )` instead.
     79 	 * @access public
     80 	 *
     81 	 * @var Ajax
     82 	 */
     83 	public $ajax;
     84 
     85 	/**
     86 	 * Controls manager.
     87 	 *
     88 	 * Holds the plugin controls manager handler is responsible for registering
     89 	 * and initializing controls.
     90 	 *
     91 	 * @since 1.0.0
     92 	 * @access public
     93 	 *
     94 	 * @var Controls_Manager
     95 	 */
     96 	public $controls_manager;
     97 
     98 	/**
     99 	 * Documents manager.
    100 	 *
    101 	 * Holds the documents manager.
    102 	 *
    103 	 * @since 2.0.0
    104 	 * @access public
    105 	 *
    106 	 * @var Documents_Manager
    107 	 */
    108 	public $documents;
    109 
    110 	/**
    111 	 * Schemes manager.
    112 	 *
    113 	 * Holds the plugin schemes manager.
    114 	 *
    115 	 * @since 1.0.0
    116 	 * @access public
    117 	 *
    118 	 * @var Schemes_Manager
    119 	 */
    120 	public $schemes_manager;
    121 
    122 	/**
    123 	 * Elements manager.
    124 	 *
    125 	 * Holds the plugin elements manager.
    126 	 *
    127 	 * @since 1.0.0
    128 	 * @access public
    129 	 *
    130 	 * @var Elements_Manager
    131 	 */
    132 	public $elements_manager;
    133 
    134 	/**
    135 	 * Widgets manager.
    136 	 *
    137 	 * Holds the plugin widgets manager which is responsible for registering and
    138 	 * initializing widgets.
    139 	 *
    140 	 * @since 1.0.0
    141 	 * @access public
    142 	 *
    143 	 * @var Widgets_Manager
    144 	 */
    145 	public $widgets_manager;
    146 
    147 	/**
    148 	 * Revisions manager.
    149 	 *
    150 	 * Holds the plugin revisions manager which handles history and revisions
    151 	 * functionality.
    152 	 *
    153 	 * @since 1.0.0
    154 	 * @access public
    155 	 *
    156 	 * @var Revisions_Manager
    157 	 */
    158 	public $revisions_manager;
    159 
    160 	/**
    161 	 * Images manager.
    162 	 *
    163 	 * Holds the plugin images manager which is responsible for retrieving image
    164 	 * details.
    165 	 *
    166 	 * @since 2.9.0
    167 	 * @access public
    168 	 *
    169 	 * @var Images_Manager
    170 	 */
    171 	public $images_manager;
    172 
    173 	/**
    174 	 * Maintenance mode.
    175 	 *
    176 	 * Holds the maintenance mode manager responsible for the "Maintenance Mode"
    177 	 * and the "Coming Soon" features.
    178 	 *
    179 	 * @since 1.0.0
    180 	 * @access public
    181 	 *
    182 	 * @var Maintenance_Mode
    183 	 */
    184 	public $maintenance_mode;
    185 
    186 	/**
    187 	 * Page settings manager.
    188 	 *
    189 	 * Holds the page settings manager.
    190 	 *
    191 	 * @since 1.0.0
    192 	 * @access public
    193 	 *
    194 	 * @var Page_Settings_Manager
    195 	 */
    196 	public $page_settings_manager;
    197 
    198 	/**
    199 	 * Dynamic tags manager.
    200 	 *
    201 	 * Holds the dynamic tags manager.
    202 	 *
    203 	 * @since 1.0.0
    204 	 * @access public
    205 	 *
    206 	 * @var Dynamic_Tags_Manager
    207 	 */
    208 	public $dynamic_tags;
    209 
    210 	/**
    211 	 * Settings.
    212 	 *
    213 	 * Holds the plugin settings.
    214 	 *
    215 	 * @since 1.0.0
    216 	 * @access public
    217 	 *
    218 	 * @var Settings
    219 	 */
    220 	public $settings;
    221 
    222 	/**
    223 	 * Role Manager.
    224 	 *
    225 	 * Holds the plugin role manager.
    226 	 *
    227 	 * @since 2.0.0
    228 	 * @access public
    229 	 *
    230 	 * @var Core\RoleManager\Role_Manager
    231 	 */
    232 	public $role_manager;
    233 
    234 	/**
    235 	 * Admin.
    236 	 *
    237 	 * Holds the plugin admin.
    238 	 *
    239 	 * @since 1.0.0
    240 	 * @access public
    241 	 *
    242 	 * @var Admin
    243 	 */
    244 	public $admin;
    245 
    246 	/**
    247 	 * Tools.
    248 	 *
    249 	 * Holds the plugin tools.
    250 	 *
    251 	 * @since 1.0.0
    252 	 * @access public
    253 	 *
    254 	 * @var Tools
    255 	 */
    256 	public $tools;
    257 
    258 	/**
    259 	 * Preview.
    260 	 *
    261 	 * Holds the plugin preview.
    262 	 *
    263 	 * @since 1.0.0
    264 	 * @access public
    265 	 *
    266 	 * @var Preview
    267 	 */
    268 	public $preview;
    269 
    270 	/**
    271 	 * Editor.
    272 	 *
    273 	 * Holds the plugin editor.
    274 	 *
    275 	 * @since 1.0.0
    276 	 * @access public
    277 	 *
    278 	 * @var Editor
    279 	 */
    280 	public $editor;
    281 
    282 	/**
    283 	 * Frontend.
    284 	 *
    285 	 * Holds the plugin frontend.
    286 	 *
    287 	 * @since 1.0.0
    288 	 * @access public
    289 	 *
    290 	 * @var Frontend
    291 	 */
    292 	public $frontend;
    293 
    294 	/**
    295 	 * Heartbeat.
    296 	 *
    297 	 * Holds the plugin heartbeat.
    298 	 *
    299 	 * @since 1.0.0
    300 	 * @access public
    301 	 *
    302 	 * @var Heartbeat
    303 	 */
    304 	public $heartbeat;
    305 
    306 	/**
    307 	 * System info.
    308 	 *
    309 	 * Holds the system info data.
    310 	 *
    311 	 * @since 1.0.0
    312 	 * @access public
    313 	 *
    314 	 * @var System_Info_Module
    315 	 */
    316 	public $system_info;
    317 
    318 	/**
    319 	 * Template library manager.
    320 	 *
    321 	 * Holds the template library manager.
    322 	 *
    323 	 * @since 1.0.0
    324 	 * @access public
    325 	 *
    326 	 * @var TemplateLibrary\Manager
    327 	 */
    328 	public $templates_manager;
    329 
    330 	/**
    331 	 * Skins manager.
    332 	 *
    333 	 * Holds the skins manager.
    334 	 *
    335 	 * @since 1.0.0
    336 	 * @access public
    337 	 *
    338 	 * @var Skins_Manager
    339 	 */
    340 	public $skins_manager;
    341 
    342 	/**
    343 	 * Files manager.
    344 	 *
    345 	 * Holds the plugin files manager.
    346 	 *
    347 	 * @since 2.1.0
    348 	 * @access public
    349 	 *
    350 	 * @var Files_Manager
    351 	 */
    352 	public $files_manager;
    353 
    354 	/**
    355 	 * Assets manager.
    356 	 *
    357 	 * Holds the plugin assets manager.
    358 	 *
    359 	 * @since 2.6.0
    360 	 * @access public
    361 	 *
    362 	 * @var Assets_Manager
    363 	 */
    364 	public $assets_manager;
    365 
    366 	/**
    367 	 * Icons Manager.
    368 	 *
    369 	 * Holds the plugin icons manager.
    370 	 *
    371 	 * @access public
    372 	 *
    373 	 * @var Icons_Manager
    374 	 */
    375 	public $icons_manager;
    376 
    377 	/**
    378 	 * Files Manager.
    379 	 *
    380 	 * Holds the plugin files manager.
    381 	 *
    382 	 * @since 1.0.0
    383 	 * @deprecated 2.1.0 Use `Plugin::$files_manager` instead.
    384 	 * @access public
    385 	 *
    386 	 * @var Files_Manager
    387 	 */
    388 	private $posts_css_manager;
    389 
    390 	/**
    391 	 * WordPress widgets manager.
    392 	 *
    393 	 * Holds the WordPress widgets manager.
    394 	 *
    395 	 * @since 1.0.0
    396 	 * @access public
    397 	 *
    398 	 * @var WordPress_Widgets_Manager
    399 	 */
    400 	public $wordpress_widgets_manager;
    401 
    402 	/**
    403 	 * Modules manager.
    404 	 *
    405 	 * Holds the plugin modules manager.
    406 	 *
    407 	 * @since 1.0.0
    408 	 * @access public
    409 	 *
    410 	 * @var Modules_Manager
    411 	 */
    412 	public $modules_manager;
    413 
    414 	/**
    415 	 * Beta testers.
    416 	 *
    417 	 * Holds the plugin beta testers.
    418 	 *
    419 	 * @since 1.0.0
    420 	 * @access public
    421 	 *
    422 	 * @var Beta_Testers
    423 	 */
    424 	public $beta_testers;
    425 
    426 	/**
    427 	 * Debugger.
    428 	 *
    429 	 * Holds the plugin debugger data.
    430 	 *
    431 	 * @deprecated 2.1.2 Use `Plugin::$inspector` instead.
    432 	 * @access public
    433 	 *
    434 	 * @var Inspector
    435 	 */
    436 	public $debugger;
    437 
    438 	/**
    439 	 * Inspector.
    440 	 *
    441 	 * Holds the plugin inspector data.
    442 	 *
    443 	 * @since 2.1.2
    444 	 * @access public
    445 	 *
    446 	 * @var Inspector
    447 	 */
    448 	public $inspector;
    449 
    450 	/**
    451 	 * Common functionality.
    452 	 *
    453 	 * Holds the plugin common functionality.
    454 	 *
    455 	 * @since 2.3.0
    456 	 * @access public
    457 	 *
    458 	 * @var CommonApp
    459 	 */
    460 	public $common;
    461 
    462 	/**
    463 	 * Log manager.
    464 	 *
    465 	 * Holds the plugin log manager.
    466 	 *
    467 	 * @access public
    468 	 *
    469 	 * @var Log_Manager
    470 	 */
    471 	public $logger;
    472 
    473 	/**
    474 	 * Dev tools.
    475 	 *
    476 	 * Holds the plugin dev tools.
    477 	 *
    478 	 * @access private
    479 	 *
    480 	 * @var Dev_Tools
    481 	 */
    482 	private $dev_tools;
    483 
    484 	/**
    485 	 * Upgrade manager.
    486 	 *
    487 	 * Holds the plugin upgrade manager.
    488 	 *
    489 	 * @access public
    490 	 *
    491 	 * @var Core\Upgrade\Manager
    492 	 */
    493 	public $upgrade;
    494 
    495 	/**
    496 	 * Kits manager.
    497 	 *
    498 	 * Holds the plugin kits manager.
    499 	 *
    500 	 * @access public
    501 	 *
    502 	 * @var Core\Kits\Manager
    503 	 */
    504 	public $kits_manager;
    505 
    506 	/**
    507 	 * Data manager.
    508 	 *
    509 	 * Holds the plugin data manager.
    510 	 *
    511 	 * @access public
    512 	 *
    513 	 * @var \Core\Data\Manager
    514 	 */
    515 	public $data_manager;
    516 
    517 	/**
    518 	 * Legacy mode.
    519 	 *
    520 	 * Holds the plugin legacy mode data.
    521 	 *
    522 	 * @access public
    523 	 *
    524 	 * @var array
    525 	 */
    526 	public $legacy_mode;
    527 
    528 	/**
    529 	 * App.
    530 	 *
    531 	 * Holds the plugin app data.
    532 	 *
    533 	 * @since 3.0.0
    534 	 * @access public
    535 	 *
    536 	 * @var Core\App\App
    537 	 */
    538 	public $app;
    539 
    540 	/**
    541 	 * WordPress API.
    542 	 *
    543 	 * Holds the methods that interact with WordPress Core API.
    544 	 *
    545 	 * @since 3.0.0
    546 	 * @access public
    547 	 *
    548 	 * @var Wp_Api
    549 	 */
    550 	public $wp;
    551 
    552 	/**
    553 	 * Experiments manager.
    554 	 *
    555 	 * Holds the plugin experiments manager.
    556 	 *
    557 	 * @since 3.1.0
    558 	 * @access public
    559 	 *
    560 	 * @var Experiments_Manager
    561 	 */
    562 	public $experiments;
    563 
    564 	/**
    565 	 * Uploads manager.
    566 	 *
    567 	 * Holds the plugin uploads manager responsible for handling file uploads
    568 	 * that are not done with WordPress Media.
    569 	 *
    570 	 * @since 3.3.0
    571 	 * @access public
    572 	 *
    573 	 * @var Uploads_Manager
    574 	 */
    575 	public $uploads_manager;
    576 
    577 	/**
    578 	 * Breakpoints manager.
    579 	 *
    580 	 * Holds the plugin breakpoints manager.
    581 	 *
    582 	 * @since 3.2.0
    583 	 * @access public
    584 	 *
    585 	 * @var Breakpoints_Manager
    586 	 */
    587 	public $breakpoints;
    588 
    589 	/**
    590 	 * Assets loader.
    591 	 *
    592 	 * Holds the plugin assets loader responsible for conditionally enqueuing
    593 	 * styles and script assets that were pre-enabled.
    594 	 *
    595 	 * @since 3.3.0
    596 	 * @access public
    597 	 *
    598 	 * @var Assets_Loader
    599 	 */
    600 	public $assets_loader;
    601 
    602 	/**
    603 	 * Clone.
    604 	 *
    605 	 * Disable class cloning and throw an error on object clone.
    606 	 *
    607 	 * The whole idea of the singleton design pattern is that there is a single
    608 	 * object. Therefore, we don't want the object to be cloned.
    609 	 *
    610 	 * @access public
    611 	 * @since 1.0.0
    612 	 */
    613 	public function __clone() {
    614 		// Cloning instances of the class is forbidden.
    615 		_doing_it_wrong( __FUNCTION__, esc_html__( 'Something went wrong.', 'elementor' ), '1.0.0' );
    616 	}
    617 
    618 	/**
    619 	 * Wakeup.
    620 	 *
    621 	 * Disable unserializing of the class.
    622 	 *
    623 	 * @access public
    624 	 * @since 1.0.0
    625 	 */
    626 	public function __wakeup() {
    627 		// Unserializing instances of the class is forbidden.
    628 		_doing_it_wrong( __FUNCTION__, esc_html__( 'Something went wrong.', 'elementor' ), '1.0.0' );
    629 	}
    630 
    631 	/**
    632 	 * Instance.
    633 	 *
    634 	 * Ensures only one instance of the plugin class is loaded or can be loaded.
    635 	 *
    636 	 * @since 1.0.0
    637 	 * @access public
    638 	 * @static
    639 	 *
    640 	 * @return Plugin An instance of the class.
    641 	 */
    642 	public static function instance() {
    643 		if ( is_null( self::$instance ) ) {
    644 			self::$instance = new self();
    645 
    646 			/**
    647 			 * Elementor loaded.
    648 			 *
    649 			 * Fires when Elementor was fully loaded and instantiated.
    650 			 *
    651 			 * @since 1.0.0
    652 			 */
    653 			do_action( 'elementor/loaded' );
    654 		}
    655 
    656 		return self::$instance;
    657 	}
    658 
    659 	/**
    660 	 * Init.
    661 	 *
    662 	 * Initialize Elementor Plugin. Register Elementor support for all the
    663 	 * supported post types and initialize Elementor components.
    664 	 *
    665 	 * @since 1.0.0
    666 	 * @access public
    667 	 */
    668 	public function init() {
    669 		$this->add_cpt_support();
    670 
    671 		$this->init_components();
    672 
    673 		/**
    674 		 * Elementor init.
    675 		 *
    676 		 * Fires when Elementor components are initialized.
    677 		 *
    678 		 * After Elementor finished loading but before any headers are sent.
    679 		 *
    680 		 * @since 1.0.0
    681 		 */
    682 		do_action( 'elementor/init' );
    683 	}
    684 
    685 	/**
    686 	 * Get install time.
    687 	 *
    688 	 * Retrieve the time when Elementor was installed.
    689 	 *
    690 	 * @since 2.6.0
    691 	 * @access public
    692 	 * @static
    693 	 *
    694 	 * @return int Unix timestamp when Elementor was installed.
    695 	 */
    696 	public function get_install_time() {
    697 		$installed_time = get_option( '_elementor_installed_time' );
    698 
    699 		if ( ! $installed_time ) {
    700 			$installed_time = time();
    701 
    702 			update_option( '_elementor_installed_time', $installed_time );
    703 		}
    704 
    705 		return $installed_time;
    706 	}
    707 
    708 	/**
    709 	 * @since 2.3.0
    710 	 * @access public
    711 	 */
    712 	public function on_rest_api_init() {
    713 		// On admin/frontend sometimes the rest API is initialized after the common is initialized.
    714 		if ( ! $this->common ) {
    715 			$this->init_common();
    716 		}
    717 	}
    718 
    719 	/**
    720 	 * Init components.
    721 	 *
    722 	 * Initialize Elementor components. Register actions, run setting manager,
    723 	 * initialize all the components that run elementor, and if in admin page
    724 	 * initialize admin components.
    725 	 *
    726 	 * @since 1.0.0
    727 	 * @access private
    728 	 */
    729 	private function init_components() {
    730 		$this->experiments = new Experiments_Manager();
    731 		$this->breakpoints = new Breakpoints_Manager();
    732 		$this->inspector = new Inspector();
    733 		$this->debugger = $this->inspector;
    734 
    735 		Settings_Manager::run();
    736 
    737 		$this->db = new DB();
    738 		$this->controls_manager = new Controls_Manager();
    739 		$this->documents = new Documents_Manager();
    740 		$this->kits_manager = new Kits_Manager();
    741 		$this->schemes_manager = new Schemes_Manager();
    742 		$this->elements_manager = new Elements_Manager();
    743 		$this->widgets_manager = new Widgets_Manager();
    744 		$this->skins_manager = new Skins_Manager();
    745 		$this->files_manager = new Files_Manager();
    746 		$this->assets_manager = new Assets_Manager();
    747 		$this->icons_manager = new Icons_Manager();
    748 		$this->settings = new Settings();
    749 		$this->tools = new Tools();
    750 		$this->editor = new Editor();
    751 		$this->preview = new Preview();
    752 		$this->frontend = new Frontend();
    753 		$this->maintenance_mode = new Maintenance_Mode();
    754 		$this->dynamic_tags = new Dynamic_Tags_Manager();
    755 		$this->modules_manager = new Modules_Manager();
    756 		$this->templates_manager = new TemplateLibrary\Manager();
    757 		$this->role_manager = new Core\RoleManager\Role_Manager();
    758 		$this->system_info = new System_Info_Module();
    759 		$this->revisions_manager = new Revisions_Manager();
    760 		$this->images_manager = new Images_Manager();
    761 		$this->wp = new Wp_Api();
    762 		$this->assets_loader = new Assets_Loader();
    763 		$this->uploads_manager = new Uploads_Manager();
    764 
    765 		User::init();
    766 		Api::init();
    767 		Tracker::init();
    768 
    769 		$this->upgrade = new Core\Upgrade\Manager();
    770 
    771 		$this->app = new Core\App\App();
    772 
    773 		if ( is_admin() ) {
    774 			$this->heartbeat = new Heartbeat();
    775 			$this->wordpress_widgets_manager = new WordPress_Widgets_Manager();
    776 			$this->admin = new Admin();
    777 			$this->beta_testers = new Beta_Testers();
    778 			new Elementor_3_Re_Migrate_Globals();
    779 		}
    780 	}
    781 
    782 	/**
    783 	 * @since 2.3.0
    784 	 * @access public
    785 	 */
    786 	public function init_common() {
    787 		$this->common = new CommonApp();
    788 
    789 		$this->common->init_components();
    790 
    791 		$this->ajax = $this->common->get_component( 'ajax' );
    792 	}
    793 
    794 	/**
    795 	 * Get Legacy Mode
    796 	 *
    797 	 * @since 3.0.0
    798 	 * @deprecated 3.1.0 Use `Plugin::$instance->experiments->is_feature_active()` instead
    799 	 *
    800 	 * @param string $mode_name Optional. Default is null
    801 	 *
    802 	 * @return bool|bool[]
    803 	 */
    804 	public function get_legacy_mode( $mode_name = null ) {
    805 		self::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation
    806 			->deprecated_function( __METHOD__, '3.1.0', 'Plugin::$instance->experiments->is_feature_active()' );
    807 
    808 		$legacy_mode = [
    809 			'elementWrappers' => ! self::$instance->experiments->is_feature_active( 'e_dom_optimization' ),
    810 		];
    811 
    812 		if ( ! $mode_name ) {
    813 			return $legacy_mode;
    814 		}
    815 
    816 		if ( isset( $legacy_mode[ $mode_name ] ) ) {
    817 			return $legacy_mode[ $mode_name ];
    818 		}
    819 
    820 		// If there is no legacy mode with the given mode name;
    821 		return false;
    822 	}
    823 
    824 	/**
    825 	 * Add custom post type support.
    826 	 *
    827 	 * Register Elementor support for all the supported post types defined by
    828 	 * the user in the admin screen and saved as `elementor_cpt_support` option
    829 	 * in WordPress `$wpdb->options` table.
    830 	 *
    831 	 * If no custom post type selected, usually in new installs, this method
    832 	 * will return the two default post types: `page` and `post`.
    833 	 *
    834 	 * @since 1.0.0
    835 	 * @access private
    836 	 */
    837 	private function add_cpt_support() {
    838 		$cpt_support = get_option( 'elementor_cpt_support', self::ELEMENTOR_DEFAULT_POST_TYPES );
    839 
    840 		foreach ( $cpt_support as $cpt_slug ) {
    841 			add_post_type_support( $cpt_slug, 'elementor' );
    842 		}
    843 	}
    844 
    845 	/**
    846 	 * Register autoloader.
    847 	 *
    848 	 * Elementor autoloader loads all the classes needed to run the plugin.
    849 	 *
    850 	 * @since 1.6.0
    851 	 * @access private
    852 	 */
    853 	private function register_autoloader() {
    854 		require_once ELEMENTOR_PATH . '/includes/autoloader.php';
    855 
    856 		Autoloader::run();
    857 	}
    858 
    859 	/**
    860 	 * Plugin Magic Getter
    861 	 *
    862 	 * @since 3.1.0
    863 	 * @access public
    864 	 *
    865 	 * @param $property
    866 	 * @return mixed
    867 	 * @throws \Exception
    868 	 */
    869 	public function __get( $property ) {
    870 		if ( 'posts_css_manager' === $property ) {
    871 			self::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_argument( 'Plugin::$instance->posts_css_manager', '2.7.0', 'Plugin::$instance->files_manager' );
    872 
    873 			return $this->files_manager;
    874 		}
    875 
    876 		if ( property_exists( $this, $property ) ) {
    877 			throw new \Exception( 'Cannot access private property' );
    878 		}
    879 
    880 		return null;
    881 	}
    882 
    883 	/**
    884 	 * Plugin constructor.
    885 	 *
    886 	 * Initializing Elementor plugin.
    887 	 *
    888 	 * @since 1.0.0
    889 	 * @access private
    890 	 */
    891 	private function __construct() {
    892 		$this->register_autoloader();
    893 
    894 		$this->logger = Log_Manager::instance();
    895 		$this->data_manager = Data_Manager::instance();
    896 
    897 		Maintenance::init();
    898 		Compatibility::register_actions();
    899 
    900 		add_action( 'init', [ $this, 'init' ], 0 );
    901 		add_action( 'rest_api_init', [ $this, 'on_rest_api_init' ] );
    902 	}
    903 
    904 	final public static function get_title() {
    905 		return esc_html__( 'Elementor', 'elementor' );
    906 	}
    907 }
    908 
    909 if ( ! defined( 'ELEMENTOR_TESTS' ) ) {
    910 	// In tests we run the instance manually.
    911 	Plugin::instance();
    912 }