class-fl-builder-loader.php 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php
  2. if ( ! class_exists( 'FLBuilderLoader' ) ) {
  3. /**
  4. * Responsible for setting up builder constants, classes and includes.
  5. *
  6. * @since 1.8
  7. */
  8. final class FLBuilderLoader {
  9. /**
  10. * Load the builder if it's not already loaded, otherwise
  11. * show an admin notice.
  12. *
  13. * @since 1.8
  14. * @return void
  15. */
  16. static public function init() {
  17. if ( ! function_exists( 'is_plugin_active' ) ) {
  18. include_once ABSPATH . 'wp-admin/includes/plugin.php';
  19. }
  20. $lite_dirname = 'beaver-builder-lite-version';
  21. $lite_active = is_plugin_active( $lite_dirname . '/fl-builder.php' );
  22. $plugin_dirname = basename( dirname( dirname( __FILE__ ) ) );
  23. if ( $lite_active && $plugin_dirname != $lite_dirname ) {
  24. deactivate_plugins( array( $lite_dirname . '/fl-builder.php' ), false, is_network_admin() );
  25. return;
  26. } elseif ( class_exists( 'FLBuilder' ) ) {
  27. add_action( 'admin_notices', __CLASS__ . '::double_install_admin_notice' );
  28. add_action( 'network_admin_notices', __CLASS__ . '::double_install_admin_notice' );
  29. return;
  30. }
  31. self::define_constants();
  32. self::load_files();
  33. self::check_permissions();
  34. }
  35. /**
  36. * Define builder constants.
  37. *
  38. * @since 1.8
  39. * @return void
  40. */
  41. static private function define_constants() {
  42. define( 'FL_BUILDER_VERSION', '2.1.4.5' );
  43. define( 'FL_BUILDER_FILE', trailingslashit( dirname( dirname( __FILE__ ) ) ) . 'fl-builder.php' );
  44. define( 'FL_BUILDER_DIR', plugin_dir_path( FL_BUILDER_FILE ) );
  45. define( 'FL_BUILDER_URL', plugins_url( '/', FL_BUILDER_FILE ) );
  46. define( 'FL_BUILDER_LITE', true );
  47. define( 'FL_BUILDER_SUPPORT_URL', 'https://www.wpbeaverbuilder.com/support/' ); // Deprecated, do not use.
  48. define( 'FL_BUILDER_UPGRADE_URL', 'https://www.wpbeaverbuilder.com/' ); // Deprecated, do not use.
  49. define( 'FL_BUILDER_STORE_URL', 'https://www.wpbeaverbuilder.com/' );
  50. define( 'FL_BUILDER_DEMO_URL', 'http://demos.wpbeaverbuilder.com' );
  51. define( 'FL_BUILDER_OLD_DEMO_URL', 'http://demos.fastlinemedia.com' );
  52. define( 'FL_BUILDER_DEMO_CACHE_URL', 'http://demos.wpbeaverbuilder.com/wp-content/uploads/bb-plugin/cache/' );
  53. }
  54. /**
  55. * Loads classes and includes.
  56. *
  57. * @since 1.8
  58. * @return void
  59. */
  60. static private function load_files() {
  61. /* Classes */
  62. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-filesystem.php';
  63. require_once FL_BUILDER_DIR . 'classes/class-fl-builder.php';
  64. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-admin.php';
  65. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-admin-pointers.php';
  66. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-admin-posts.php';
  67. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-admin-settings.php';
  68. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-ajax.php';
  69. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-ajax-layout.php';
  70. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-auto-suggest.php';
  71. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-color.php';
  72. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-export.php';
  73. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-extensions.php';
  74. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-fonts.php';
  75. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-debug.php';
  76. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-usage.php';
  77. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-icons.php';
  78. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-iframe-preview.php';
  79. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-import.php';
  80. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-loop.php';
  81. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-model.php';
  82. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-module.php';
  83. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-photo.php';
  84. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-revisions.php';
  85. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-services.php';
  86. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-shortcodes.php';
  87. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-timezones.php';
  88. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-ui-content-panel.php';
  89. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-ui-settings-forms.php';
  90. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-notifications.php';
  91. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-update.php';
  92. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-user-access.php';
  93. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-user-settings.php';
  94. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-utils.php';
  95. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-wpml.php';
  96. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-privacy.php';
  97. /* WP CLI Commands */
  98. if ( defined( 'WP_CLI' ) ) {
  99. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-wpcli-command.php';
  100. }
  101. /* WP Blocks Support */
  102. require_once FL_BUILDER_DIR . 'classes/class-fl-builder-wp-blocks.php';
  103. /* Includes */
  104. require_once FL_BUILDER_DIR . 'includes/compatibility.php';
  105. /* Updater */
  106. if ( file_exists( FL_BUILDER_DIR . 'includes/updater/updater.php' ) ) {
  107. require_once FL_BUILDER_DIR . 'includes/updater/updater.php';
  108. }
  109. }
  110. /**
  111. * Checks to see if we can write to files and shows
  112. * an admin notice if we can't.
  113. *
  114. * @since 1.8.2
  115. * @access private
  116. * @return void
  117. */
  118. static private function check_permissions() {
  119. if ( isset( $_REQUEST['page'] ) && in_array( $_REQUEST['page'], array( 'fl-builder-settings', 'fl-builder-multisite-settings' ) ) ) {
  120. $wp_upload_dir = wp_upload_dir( null, false );
  121. $bb_upload_dir = FLBuilderModel::get_upload_dir();
  122. if ( ! fl_builder_filesystem()->is_writable( $wp_upload_dir['basedir'] ) || ! fl_builder_filesystem()->is_writable( $bb_upload_dir['path'] ) ) {
  123. add_action( 'admin_notices', __CLASS__ . '::permissions_admin_notice' );
  124. add_action( 'network_admin_notices', __CLASS__ . '::permissions_admin_notice' );
  125. }
  126. }
  127. }
  128. /**
  129. * Shows an admin notice if we can't write to files.
  130. *
  131. * @since 1.8.2
  132. * @return void
  133. */
  134. static public function permissions_admin_notice() {
  135. $message = __( 'Beaver Builder may not be functioning correctly as it does not have permission to write files to the WordPress uploads directory on your server. Please update the WordPress uploads directory permissions before continuing or contact your host for assistance.', 'fl-builder' );
  136. self::render_admin_notice( $message, 'error' );
  137. }
  138. /**
  139. * Shows an admin notice if another version of the builder
  140. * has already been loaded before this one.
  141. *
  142. * @since 1.8
  143. * @return void
  144. */
  145. static public function double_install_admin_notice() {
  146. $message = __( 'You currently have two versions of Beaver Builder active on this site. Please <a href="%s">deactivate one</a> before continuing.', 'fl-builder' );
  147. self::render_admin_notice( sprintf( $message, admin_url( 'plugins.php' ) ), 'error' );
  148. }
  149. /**
  150. * Renders an admin notice.
  151. *
  152. * @since 1.8.2
  153. * @access private
  154. * @param string $message
  155. * @param string $type
  156. * @return void
  157. */
  158. static private function render_admin_notice( $message, $type = 'update' ) {
  159. if ( ! is_admin() ) {
  160. return;
  161. } elseif ( ! is_user_logged_in() ) {
  162. return;
  163. } elseif ( ! current_user_can( 'update_plugins' ) ) {
  164. return;
  165. }
  166. echo '<div class="' . $type . '">';
  167. echo '<p>' . $message . '</p>';
  168. echo '</div>';
  169. }
  170. }
  171. }
  172. FLBuilderLoader::init();