PageRenderTime 41ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/wp-content/plugins/wr-pagebuilder/core/addon.php

https://gitlab.com/hunt9310/ras
PHP | 401 lines | 169 code | 65 blank | 167 comment | 9 complexity | e48f0ae5c80d35c00d20b859c52825f9 MD5 | raw file
  1. <?php
  2. /**
  3. * Main class for add on
  4. *
  5. * Define properties & methods
  6. *
  7. * @author WooRockets Team <support@www.woorockets.com>
  8. * @package IGPGBLDR
  9. * @version $Id$
  10. */
  11. class WR_Pb_Addon {
  12. // prodiver name
  13. protected $provider;
  14. // register assets (js/css)
  15. protected $assets_register;
  16. // enqueue assets for Admin pages
  17. protected $assets_enqueue_admin;
  18. // enqueue assets for Modal setting iframe
  19. protected $assets_enqueue_modal;
  20. // enqueue assets for Frontend
  21. protected $assets_enqueue_frontend;
  22. /**
  23. * Get provider data
  24. *
  25. * @return type
  26. */
  27. public function get_provider() {
  28. return $this->provider;
  29. }
  30. /**
  31. * Get provider assets path & uri
  32. *
  33. * @return type
  34. */
  35. public function get_assets_register() {
  36. return $this->assets_register;
  37. }
  38. /**
  39. * Get custom enqueued assets for WP admin
  40. *
  41. * @return type
  42. */
  43. public function get_assets_enqueue_admin() {
  44. return $this->assets_enqueue_admin;
  45. }
  46. /**
  47. * Get custom enqueued assets for WR modal
  48. *
  49. * @return type
  50. */
  51. public function get_assets_enqueue_modal() {
  52. return $this->assets_enqueue_modal;
  53. }
  54. /**
  55. * Get custom enqueued assets for Front end
  56. *
  57. * @return type
  58. */
  59. public function get_assets_enqueue_frontend() {
  60. return $this->assets_enqueue_frontend;
  61. }
  62. /**
  63. * Set provider data
  64. *
  65. * @param array $provider
  66. */
  67. public function set_provider( $provider ) {
  68. $this->provider = $provider;
  69. }
  70. /**
  71. * Register custom assets
  72. *
  73. * @param array $assets
  74. */
  75. public function set_assets_register( $assets ) {
  76. $this->assets_register = $assets;
  77. }
  78. /**
  79. * Add custom assets for WP admin
  80. *
  81. * @param array $assets
  82. */
  83. public function set_assets_enqueue_admin( $assets ) {
  84. $this->assets_enqueue_admin = $assets;
  85. }
  86. /**
  87. * Add custom assets for WR modal
  88. *
  89. * @param array $assets
  90. */
  91. public function set_assets_enqueue_modal( $assets ) {
  92. $this->assets_enqueue_modal = $assets;
  93. }
  94. /**
  95. * Add custom assets for WP frontend
  96. *
  97. * @param array $assets
  98. */
  99. public function set_assets_enqueue_frontend( $assets ) {
  100. $this->assets_enqueue_frontend = $assets;
  101. }
  102. /**
  103. * Initialize addon
  104. */
  105. public function __construct() {
  106. add_filter( 'wr_pb_provider', array( &$this, 'get_provider_data' ) );
  107. add_filter( 'wr_pb_register_assets', array( &$this, 'register_assets_register' ) );
  108. add_filter( 'wr_pb_assets_enqueue_admin', array( &$this, 'enqueue_assets_admin' ) );
  109. add_filter( 'wr_pb_assets_enqueue_modal', array( &$this, 'enqueue_assets_modal' ) );
  110. add_filter( 'wr_pb_assets_enqueue_frontend', array( &$this, 'enqueue_assets_frontend' ) );
  111. }
  112. /**
  113. * Get provider data and return necessary information
  114. *
  115. * @param array $providers
  116. *
  117. * @return string
  118. */
  119. public function get_provider_data( $providers ) {
  120. // get provider data
  121. $provider = $this->get_provider();
  122. if ( empty ( $provider ) || empty ( $provider['file'] ) ) {
  123. return $providers;
  124. }
  125. // variables
  126. $file = $provider['file'];
  127. $path = plugin_dir_path( $file );
  128. $uri = plugin_dir_url( $file );
  129. $shortcode_dir = empty ( $provider['shortcode_dir'] ) ? 'shortcodes' : $provider['shortcode_dir'];
  130. $js_shortcode_dir = empty ( $provider['js_shortcode_dir'] ) ? 'assets/js/shortcodes' : $provider['js_shortcode_dir'];
  131. // Check if path is absolute
  132. if ( ! is_dir( $shortcode_dir ) ) {
  133. $shortcode_dir = $path . $shortcode_dir;
  134. }
  135. //get plugin name & main file
  136. $main_file = pathinfo( $file );
  137. $folder = basename( $main_file['dirname'] );
  138. $main_file = $folder . '/' . $main_file['basename'];
  139. $providers[$path] = array(
  140. 'path' => $path,
  141. 'uri' => $uri,
  142. 'file' => $main_file,
  143. 'file_path' => $file,
  144. 'folder' => $folder,
  145. 'name' => $provider['name'],
  146. 'shortcode_dir' => $shortcode_dir,
  147. 'js_shortcode_dir' => array( 'path' => $path . $js_shortcode_dir, 'uri' => $uri . $js_shortcode_dir ),
  148. );
  149. return $providers;
  150. }
  151. /**
  152. * Register custom assets
  153. *
  154. * @param array $assets
  155. *
  156. * @return array
  157. */
  158. public function register_assets_register( $assets ) {
  159. $this_asset = $this->get_assets_register();
  160. $assets = array_merge( $assets, empty ( $this_asset ) ? array() : $this_asset );
  161. return $assets;
  162. }
  163. /**
  164. * Register custom assets for WP admin
  165. *
  166. * @param array $assets
  167. *
  168. * @return array
  169. */
  170. public function enqueue_assets_admin( $assets ) {
  171. $this_asset = $this->get_assets_enqueue_admin();
  172. $assets = array_merge( $assets, empty ( $this_asset ) ? array() : $this_asset );
  173. return $assets;
  174. }
  175. /**
  176. * Register custom assets for WR modal
  177. *
  178. * @param array $assets
  179. *
  180. * @return array
  181. */
  182. public function enqueue_assets_modal( $assets ) {
  183. $this_asset = $this->get_assets_enqueue_modal();
  184. $assets = array_merge( $assets, empty ( $this_asset ) ? array() : $this_asset );
  185. return $assets;
  186. }
  187. /**
  188. * Register custom assets for WP frontend
  189. *
  190. * @param array $assets
  191. *
  192. * @return array
  193. */
  194. public function enqueue_assets_frontend( $assets ) {
  195. $this_asset = $this->get_assets_enqueue_frontend();
  196. $assets = array_merge( $assets, empty ( $this_asset ) ? array() : $this_asset );
  197. return $assets;
  198. }
  199. /**
  200. * Register Path to extended Parameter type
  201. *
  202. * @param string $path
  203. */
  204. public function register_extended_parameter_path( $path ) {
  205. WR_Pb_Loader::register( $path, 'WR_Pb_Helper_Html_' );
  206. }
  207. /**
  208. * Show admin notice
  209. *
  210. * @param string $addon_name
  211. * @param string $core_required
  212. *
  213. * @return string
  214. */
  215. static function show_notice( $data, $action, $type = 'error' ) {
  216. // show message
  217. ob_start();
  218. switch ( $action ) {
  219. // show message about core version required
  220. case 'core_required':
  221. extract( $data );
  222. ?>
  223. <div class="<?php echo esc_attr( $type ); ?>">
  224. <p>
  225. <?php _e( "You can not activate this WR PageBuilder's provider:", WR_PBL ); ?>
  226. <br> <b><?php echo esc_html( $addon_name ); ?> </b>
  227. </p>
  228. <p>
  229. <?php _e( "It requires WR PageBuilder's version:", WR_PBL ); ?>
  230. <br> <b><?php echo esc_html( $core_required ); ?> </b> <br>
  231. <?php echo esc_html( 'or above to work. Please update WR PageBuilder to newest version.' ); ?>
  232. <br>
  233. </p>
  234. </div>
  235. <!-- custom js to hide "Plugin actived" -->
  236. <?php
  237. $js_code = "$('#message.updated').hide();";
  238. echo balanceTags( WR_Pb_Helper_Functions::script_box( $js_code ) );
  239. break;
  240. default:
  241. break;
  242. }
  243. $message = ob_get_clean();
  244. return $message;
  245. }
  246. /**
  247. * Get Constant name defines core version required of this addon plugin
  248. *
  249. * @param string $addon_file
  250. */
  251. static function core_version_constant( $addon_file ) {
  252. $path_parts = pathinfo( $addon_file );
  253. if ( $path_parts ) {
  254. // get dir name of add on
  255. $dirname = basename( $path_parts['dirname'] );
  256. $dirname = str_replace( '-', '_', $dirname );
  257. // return the Constant defines core version required of this add on
  258. return strtoupper( $dirname ) . '_CORE_VERSION';
  259. }
  260. return '';
  261. }
  262. /**
  263. * Get Constant value of Constant defines core version required
  264. *
  265. * @param array $provider
  266. * @param string $addon_file
  267. *
  268. * @return string
  269. */
  270. static function core_version_requied_value( $provider, $addon_file ) {
  271. // include defines.php from provider plugin folder, where defines core version required by addon
  272. if ( file_exists( $provider['path'] . 'defines.php' ) ) {
  273. include_once $provider['path'] . 'defines.php';
  274. }
  275. // get constant name defines core version required
  276. $constant = WR_Pb_Addon::core_version_constant( $addon_file );
  277. // get value of core version required
  278. return ( defined( $constant ) ) ? constant( $constant ) : NULL;
  279. }
  280. /**
  281. * Check compatibility of this addon & WR core
  282. *
  283. * @param string $core_required
  284. * @param string $core_version
  285. * @param string $addon_file
  286. *
  287. * @return bool
  288. */
  289. static function compatibility_handle( $core_required, $core_version, $addon_file ) {
  290. // if current core version < core version required
  291. if ( version_compare( $core_required, $core_version, '>' ) ) {
  292. // deactivate addon
  293. deactivate_plugins( array( $addon_file ) );
  294. return FALSE;
  295. }
  296. return TRUE;
  297. }
  298. /**
  299. * Custom function when activate an Addon plugin
  300. */
  301. public static function activation_hook() {
  302. do_action( 'reload_wr_shortcodes' );
  303. }
  304. /**
  305. * Custom function when update an Addon plugin
  306. */
  307. public static function update_hook( $plugin_file ) {
  308. // Get plugin_directory/main_file
  309. $main_file = pathinfo( $plugin_file );
  310. $addon_folder = basename( $main_file['dirname'] );
  311. // Get current version of addon
  312. $addon_version = WR_Pb_Helper_Functions::get_plugin_info( $plugin_file, 'Version' );
  313. // Get stored version of addon
  314. $option_name = 'wr_addon_' . $addon_folder . '_version';
  315. $addon_version_old = get_option( $option_name );
  316. // If version is changed, updated
  317. if ( version_compare( $addon_version, $addon_version_old ) != 0 ) {
  318. do_action( 'reload_wr_shortcodes' );
  319. // Update version
  320. update_option( $option_name, $addon_version );
  321. }
  322. }
  323. /**
  324. * Custom function when deactivate an Addon plugin
  325. */
  326. public static function deactivation_hook() {
  327. do_action( 'reload_wr_shortcodes' );
  328. }
  329. /**
  330. * Custom function when uninstall an Addon plugin
  331. */
  332. public static function uninstall_hook() {
  333. do_action( 'reload_wr_shortcodes' );
  334. }
  335. }