Post and Page Builder by BoldGrid – Visual Drag and Drop Editor - Version 1.11.1

Version Description

Release Date: September 5th, 2019

  • Update: Update BoldGrid Library - Dashboard Updates.
Download this release

Release Info

Developer rramo012
Plugin Icon 128x128 Post and Page Builder by BoldGrid – Visual Drag and Drop Editor
Version 1.11.1
Comparing to
See all releases

Code changes from version 1.11.0 to 1.11.1

Files changed (30) hide show
  1. includes/class-boldgrid-editor-premium.php +81 -28
  2. includes/class-boldgrid-editor.php +3 -0
  3. post-and-page-builder.php +1 -1
  4. readme.txt +7 -1
  5. vendor/autoload.php +1 -1
  6. vendor/boldgrid/library/.travis.yml +2 -0
  7. vendor/boldgrid/library/README.md +15 -0
  8. vendor/boldgrid/library/src/Library/Configs.php +54 -0
  9. vendor/boldgrid/library/src/Library/Dashboard.php +37 -0
  10. vendor/boldgrid/library/src/Library/Dashboard/SortWidgets.php +189 -0
  11. vendor/boldgrid/library/src/Library/Key/PostNewKey.php +14 -6
  12. vendor/boldgrid/library/src/Library/License.php +1 -0
  13. vendor/boldgrid/library/src/Library/NewsWidget.php +226 -0
  14. vendor/boldgrid/library/src/Library/Notifications/DashboardWidget.php +211 -0
  15. vendor/boldgrid/library/src/Library/Plugin/Plugin.php +309 -2
  16. vendor/boldgrid/library/src/Library/Plugin/Plugins.php +47 -0
  17. vendor/boldgrid/library/src/Library/Rss.php +0 -137
  18. vendor/boldgrid/library/src/Library/Start.php +10 -3
  19. vendor/boldgrid/library/src/Library/Ui/Card.php +124 -0
  20. vendor/boldgrid/library/src/Library/Ui/Dashboard.php +55 -0
  21. vendor/boldgrid/library/src/Library/Ui/Feature.php +80 -0
  22. vendor/boldgrid/library/src/assets/css/admin.css +10 -0
  23. vendor/boldgrid/library/src/assets/css/dashboard.css +138 -0
  24. vendor/boldgrid/library/src/assets/css/news-widget.css +28 -0
  25. vendor/boldgrid/library/src/assets/css/ui.css +1 -1
  26. vendor/boldgrid/library/src/library.global.php +62 -6
  27. vendor/boldgrid/library/tests/bootstrap.php +1 -0
  28. vendor/composer/autoload_real.php +4 -4
  29. vendor/composer/autoload_static.php +3 -3
  30. vendor/composer/installed.json +12 -12
includes/class-boldgrid-editor-premium.php CHANGED
@@ -24,52 +24,50 @@ class Boldgrid_Editor_Premium {
24
  * Add Premium Hooks.
25
  *
26
  * @since 1.0.0
 
 
27
  */
28
  public function init() {
29
- // "Upgrade to premium" notices. Notice class instantiated to trigger required hooks.
 
 
 
 
 
 
 
 
 
30
  $notice_class = '\Boldgrid\Library\Library\Notice';
31
- if ( class_exists( $notice_class ) ) {
32
  new $notice_class( 'Static Notice' );
33
  add_action( 'admin_notices', [ $this, 'admin_notice_setup' ] );
34
  }
35
  }
36
 
37
  /**
38
- * Get the plugins premium url.
39
- *
40
- * @since 1.10.0
41
  *
42
- * @return string URL.
43
- */
44
- public function get_premium_url() {
45
- $url = 'https://www.boldgrid.com/central/plugins';
46
- if ( class_exists( '\Boldgrid\Library\Library\Plugin\Plugin' ) ) {
47
- $premium_plugin = new \Boldgrid\Library\Library\Plugin\Plugin( 'post-and-page-builder-premium' );
48
- $url = $premium_plugin->getDownloadUrl();
49
- }
50
-
51
- return $url;
52
- }
53
-
54
- /**
55
- * Display "setup" admin notices.
56
- *
57
- * This method is currently used to display admin notices to help guide the
58
  * user to getting a premium key and getting / activating the premium extension.
59
  *
60
- * @since 1.0.0
 
 
61
  */
62
- public function admin_notice_setup() {
 
 
63
  $config = Boldgrid_Editor_Service::get( 'config' );
64
 
65
  // If the premium plugin is installed and all is good, abort!
66
  if ( $config['premium']['is_premium_done'] ) {
67
- return;
68
  }
69
 
70
  // Check user role.
71
  if ( ! current_user_can( 'update_plugins' ) ) {
72
- return;
73
  }
74
 
75
  $notices = array(
@@ -81,9 +79,10 @@ class Boldgrid_Editor_Premium {
81
  __(
82
  'You have a <strong>Premium BoldGrid Connect Key</strong> and <strong>Post and Page Builder Premium</strong> installed. Please go to your <a href="%1$s">plugins page</a> and activate your premium extension!',
83
  'boldgrid-editor'
84
- ),
85
  admin_url( 'plugins.php' )
86
  ) . '</p>',
 
87
  ),
88
  array(
89
  'id' => 'BGPPB_upgrade_premium',
@@ -94,6 +93,7 @@ class Boldgrid_Editor_Premium {
94
  admin_url( 'options-general.php?page=boldgrid-connect.php' ),
95
  $config['urls']['premium_key'] . '?source=ppbp-installed'
96
  ) . '</p>',
 
97
  ),
98
  array(
99
  'id' => 'BGPPB_download_premium',
@@ -103,17 +103,70 @@ class Boldgrid_Editor_Premium {
103
  __(
104
  'Hello there! We see that you have a <strong>Premium BoldGrid Connect Key</strong> and you have the <strong>Post & Page Builder</strong> activated! Be sure to download the <a href="%1$s">Post and Page Builder Premium Extension</a> to gain access to more features!',
105
  'boldgrid-editor'
106
- ),
107
  $this->get_premium_url()
108
  ) . '</p>',
 
109
  ),
110
  );
111
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  foreach ( $notices as $notice ) {
113
  if ( $notice['show'] ) {
114
- \Boldgrid\Library\Library\Notice::show( $notice['message'], $notice['id'] );
115
  break;
116
  }
117
  }
118
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
119
  }
24
  * Add Premium Hooks.
25
  *
26
  * @since 1.0.0
27
+ *
28
+ * @global string $pagenow
29
  */
30
  public function init() {
31
+ global $pagenow;
32
+
33
+ /*
34
+ * "Upgrade to premium" notices.
35
+ *
36
+ * Notice class instantiated to trigger required hooks.
37
+ *
38
+ * Do not show on the dashboard (index.php) as the notices will instead by placed in the
39
+ * "BoldGrid Notifications" widget.
40
+ */
41
  $notice_class = '\Boldgrid\Library\Library\Notice';
42
+ if ( 'index.php' !== $pagenow && class_exists( $notice_class ) ) {
43
  new $notice_class( 'Static Notice' );
44
  add_action( 'admin_notices', [ $this, 'admin_notice_setup' ] );
45
  }
46
  }
47
 
48
  /**
49
+ * Get "setup" admin notices.
 
 
50
  *
51
+ * This method is currently used to get the admin notices that help guide the
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  * user to getting a premium key and getting / activating the premium extension.
53
  *
54
+ * @since 1.11.1
55
+ *
56
+ * @return array
57
  */
58
+ public function get_admin_notices() {
59
+ $notices = array();
60
+
61
  $config = Boldgrid_Editor_Service::get( 'config' );
62
 
63
  // If the premium plugin is installed and all is good, abort!
64
  if ( $config['premium']['is_premium_done'] ) {
65
+ return $notices;
66
  }
67
 
68
  // Check user role.
69
  if ( ! current_user_can( 'update_plugins' ) ) {
70
+ return $notices;
71
  }
72
 
73
  $notices = array(
79
  __(
80
  'You have a <strong>Premium BoldGrid Connect Key</strong> and <strong>Post and Page Builder Premium</strong> installed. Please go to your <a href="%1$s">plugins page</a> and activate your premium extension!',
81
  'boldgrid-editor'
82
+ ),
83
  admin_url( 'plugins.php' )
84
  ) . '</p>',
85
+ 'class' => 'notice notice-warning',
86
  ),
87
  array(
88
  'id' => 'BGPPB_upgrade_premium',
93
  admin_url( 'options-general.php?page=boldgrid-connect.php' ),
94
  $config['urls']['premium_key'] . '?source=ppbp-installed'
95
  ) . '</p>',
96
+ 'class' => 'notice notice-warning',
97
  ),
98
  array(
99
  'id' => 'BGPPB_download_premium',
103
  __(
104
  'Hello there! We see that you have a <strong>Premium BoldGrid Connect Key</strong> and you have the <strong>Post & Page Builder</strong> activated! Be sure to download the <a href="%1$s">Post and Page Builder Premium Extension</a> to gain access to more features!',
105
  'boldgrid-editor'
106
+ ),
107
  $this->get_premium_url()
108
  ) . '</p>',
109
+ 'class' => 'notice notice-warning',
110
  ),
111
  );
112
 
113
+ return $notices;
114
+ }
115
+
116
+ /**
117
+ * Get the plugins premium url.
118
+ *
119
+ * @since 1.10.0
120
+ *
121
+ * @return string URL.
122
+ */
123
+ public function get_premium_url() {
124
+ $url = 'https://www.boldgrid.com/central/plugins';
125
+ if ( class_exists( '\Boldgrid\Library\Library\Plugin\Plugin' ) ) {
126
+ $premium_plugin = new \Boldgrid\Library\Library\Plugin\Plugin( 'post-and-page-builder-premium' );
127
+ $url = $premium_plugin->getDownloadUrl();
128
+ }
129
+
130
+ return $url;
131
+ }
132
+
133
+ /**
134
+ * Display "setup" admin notices.
135
+ *
136
+ * This method is currently used to display admin notices to help guide the
137
+ * user to getting a premium key and getting / activating the premium extension.
138
+ *
139
+ * @since 1.0.0
140
+ */
141
+ public function admin_notice_setup() {
142
+ $notices = $this->get_admin_notices();
143
+
144
  foreach ( $notices as $notice ) {
145
  if ( $notice['show'] ) {
146
+ \Boldgrid\Library\Library\Notice::show( $notice['message'], $notice['id'], $notice['class'] );
147
  break;
148
  }
149
  }
150
  }
151
+
152
+ /**
153
+ * Filter the P&PB feature within the "BoldGrid Notifications" card on the WordPress dashboard.
154
+ *
155
+ * @since 1.11.1
156
+ *
157
+ * @param \Boldgrid\Library\Library\Ui\Feature The feature object.
158
+ * @param \Boldgrid\Library\Library\Plugin\Plugin The plugin object.
159
+ * @return \Boldgrid\Library\Library\Ui\Feature
160
+ */
161
+ public function filter_feature( Boldgrid\Library\Library\Ui\Feature $feature, \Boldgrid\Library\Library\Plugin\Plugin $plugin ) {
162
+ $notices = $this->get_admin_notices();
163
+
164
+ foreach ( $notices as $notice ) {
165
+ if ( $notice['show'] ) {
166
+ $feature->content .= '<div class="' . $notice['class'] . ' inline">' . $notice['message'] . '</div>';
167
+ }
168
+ }
169
+
170
+ return $feature;
171
+ }
172
  }
includes/class-boldgrid-editor.php CHANGED
@@ -306,6 +306,9 @@ class Boldgrid_Editor {
306
 
307
  // Save a users selection for enabling draggable.
308
  add_action( 'wp_ajax_boldgrid_draggable_enabled', array( $boldgrid_editor_ajax, 'ajax_draggable_enabled' ) );
 
 
 
309
  }
310
 
311
  /**
306
 
307
  // Save a users selection for enabling draggable.
308
  add_action( 'wp_ajax_boldgrid_draggable_enabled', array( $boldgrid_editor_ajax, 'ajax_draggable_enabled' ) );
309
+
310
+ // Filter "BoldGrid Notifications" on the WordPress Dashboard.
311
+ add_filter( 'Boldgrid\Library\Notifications\DashboardWidget\getFeaturePlugin\post-and-page-builder', array( $boldgrid_editor_premium, 'filter_feature' ), 10, 2 );
312
  }
313
 
314
  /**
post-and-page-builder.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Post and Page Builder
4
  * Plugin URI: https://www.boldgrid.com/boldgrid-editor/
5
  * Description: Customized drag and drop editing for posts and pages. The Post and Page Builder adds functionality to the existing TinyMCE Editor to give you easier control over your content.
6
- * Version: 1.11.0
7
  * Author: BoldGrid <support@boldgrid.com>
8
  * Author URI: https://www.boldgrid.com/
9
  * Text Domain: boldgrid-editor
3
  * Plugin Name: Post and Page Builder
4
  * Plugin URI: https://www.boldgrid.com/boldgrid-editor/
5
  * Description: Customized drag and drop editing for posts and pages. The Post and Page Builder adds functionality to the existing TinyMCE Editor to give you easier control over your content.
6
+ * Version: 1.11.1
7
  * Author: BoldGrid <support@boldgrid.com>
8
  * Author URI: https://www.boldgrid.com/
9
  * Text Domain: boldgrid-editor
readme.txt CHANGED
@@ -4,7 +4,7 @@ Tags: boldgrid, page builder, drag and drop, tinymce, editor, landing page
4
  Requires at least: 4.7
5
  Tested up to: 5.2
6
  Requires PHP: 5.4
7
- Stable tag: 1.11.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -134,6 +134,12 @@ WordPress Editor.
134
 
135
  == Changelog ==
136
 
 
 
 
 
 
 
137
  = 1.11.0 =
138
 
139
  Release Date: August 22nd, 2019
4
  Requires at least: 4.7
5
  Tested up to: 5.2
6
  Requires PHP: 5.4
7
+ Stable tag: 1.11.1
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
134
 
135
  == Changelog ==
136
 
137
+ = 1.11.1 =
138
+
139
+ Release Date: September 5th, 2019
140
+
141
+ * Update: Update BoldGrid Library - Dashboard Updates.
142
+
143
  = 1.11.0 =
144
 
145
  Release Date: August 22nd, 2019
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInitb48b9314034d9e74a66cd45ea4bb6286::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit54b1a8ac4b72f1d0df93795d5673078d::getLoader();
vendor/boldgrid/library/.travis.yml CHANGED
@@ -1,5 +1,7 @@
1
  language: php
2
 
 
 
3
  notifications:
4
  email:
5
  on_success: never
1
  language: php
2
 
3
+ dist: trusty
4
+
5
  notifications:
6
  email:
7
  on_success: never
vendor/boldgrid/library/README.md CHANGED
@@ -11,6 +11,21 @@ composer require boldgrid/library
11
 
12
  ## Changelog ##
13
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  ### 2.9.2 ###
15
 
16
  Release date: August 1st, 2019
11
 
12
  ## Changelog ##
13
 
14
+ ### 2.10.1 ###
15
+
16
+ Release date: September 5th, 2019
17
+
18
+ * Update: Recommend W3 Total Cache in Plugins > Add New
19
+ * Update: Removing BoldGrid Staging from Plugins > Add New
20
+
21
+ ### 2.10.0 ###
22
+
23
+ Release date: August 29th, 2019
24
+
25
+ * New feature: Show BoldGrid News widget in the dashboard.
26
+ * New feature: Show BoldGrid Notifications widget in the dashboard.
27
+ * New feature: New dashboard pages, can be utilized by plugins.
28
+
29
  ### 2.9.2 ###
30
 
31
  Release date: August 1st, 2019
vendor/boldgrid/library/src/Library/Configs.php CHANGED
@@ -11,6 +11,8 @@
11
 
12
  namespace Boldgrid\Library\Library;
13
 
 
 
14
  /**
15
  * BoldGrid Library Configs Class.
16
  *
@@ -103,6 +105,58 @@ class Configs {
103
  return $configs;
104
  }
105
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  /**
107
  * Set a new configuration item
108
  *
11
 
12
  namespace Boldgrid\Library\Library;
13
 
14
+ use Boldgrid\Library\Library\Plugin\Plugin;
15
+
16
  /**
17
  * BoldGrid Library Configs Class.
18
  *
105
  return $configs;
106
  }
107
 
108
+ /**
109
+ * Get the slug of the product that is loading the library.
110
+ *
111
+ * The configs include a "file" setting, which indicate which product is actually loading the
112
+ * library. If the file is "boldgrid-backup/boldgrid-backup.php" for example, this method will
113
+ * return "boldgrid-backup".
114
+ *
115
+ * @since 2.9.0
116
+ *
117
+ * @return string
118
+ */
119
+ public static function getFileSlug() {
120
+ $file = explode( '/', self::get('file') );
121
+
122
+ return $file[0];
123
+ }
124
+
125
+ /**
126
+ * Get plugins from our configs.
127
+ *
128
+ * @since 2.9.0
129
+ *
130
+ * @param array $filters An optional array of filters to help get a specific type of plugin.
131
+ * @return array
132
+ */
133
+ public static function getPlugins( $filters = array() ) {
134
+ $plugins = array();
135
+
136
+ foreach( self::get( 'plugins' ) as $plugin ) {
137
+ $slug = Plugin::getFileSlug( $plugin['file'] );
138
+
139
+ // If no filters, add the plugin. Else, only add the plugin if all filters match.
140
+ if ( empty( $filters ) ) {
141
+ $plugins[] = new Plugin( $slug );
142
+ } else {
143
+ $addPlugin = true;
144
+
145
+ foreach( $filters as $key => $value ) {
146
+ if ( ! isset( $plugin[ $key ] ) || $value !== $plugin[ $key ] ) {
147
+ $addPlugin = false;
148
+ }
149
+ }
150
+
151
+ if ( $addPlugin ) {
152
+ $plugins[] = new Plugin( $slug );
153
+ }
154
+ }
155
+ }
156
+
157
+ return $plugins;
158
+ }
159
+
160
  /**
161
  * Set a new configuration item
162
  *
vendor/boldgrid/library/src/Library/Dashboard.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * BoldGrid Library Dashboard Class
4
+ *
5
+ * @package Boldgrid\Library
6
+ * @subpackage \Library\License
7
+ *
8
+ * @version 2.9.0
9
+ * @author BoldGrid <wpb@boldgrid.com>
10
+ */
11
+
12
+ namespace Boldgrid\Library\Library;
13
+
14
+ /**
15
+ * BoldGrid Library Dashboard Class.
16
+ *
17
+ * This is a generic class used for managing the WordPress Dashboard.
18
+ *
19
+ * @since 2.9.0
20
+ */
21
+ class Dashboard {
22
+ /**
23
+ * Init.
24
+ *
25
+ * @since 2.9.0
26
+ */
27
+ public function init() {
28
+ /*
29
+ * Move BoldGrid Widgets to the top of the WordPress dashboard.
30
+ *
31
+ * This is not permanent. The user can move BoldGrid widgets elsewhere after the first load.
32
+ *
33
+ * sortWidgets class runs Filter::add($this) in __construct.
34
+ */
35
+ $sortWidgets = new Dashboard\SortWidgets();
36
+ }
37
+ }
vendor/boldgrid/library/src/Library/Dashboard/SortWidgets.php ADDED
@@ -0,0 +1,189 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * BoldGrid Library Dashboard Sort Widgets Class
4
+ *
5
+ * @package Boldgrid\Library
6
+ * @subpackage \Library\License
7
+ *
8
+ * @version 2.9.0
9
+ * @author BoldGrid <wpb@boldgrid.com>
10
+ */
11
+
12
+ namespace Boldgrid\Library\Library\Dashboard;
13
+
14
+ use BoldGrid\Library\Library;
15
+
16
+ /**
17
+ * BoldGrid Library Dashboard Sort Widgets Class.
18
+ *
19
+ * @since 2.9.0
20
+ */
21
+ class SortWidgets {
22
+ /**
23
+ * Constructor.
24
+ *
25
+ * @since 2.9.0
26
+ */
27
+ public function __construct() {
28
+ Library\Filter::add( $this );
29
+ }
30
+
31
+ /**
32
+ * Get configs.
33
+ *
34
+ * Configs are stored in library.global.php. They're an array of widgets, along with which
35
+ * container and priorty they should go.
36
+ *
37
+ * @since 2.9.0
38
+ *
39
+ * @return array
40
+ */
41
+ public function getConfigs() {
42
+ return Library\Configs::get( 'dashboardWidgetOrder' );
43
+ }
44
+
45
+ /**
46
+ * Get a widget from the global $wp_meta_boxes.
47
+ *
48
+ * As we loop through the global $wp_meta_boxes, we keep track of where within it our widget is.
49
+ * That locaion info includes the container (normal, side, etc) and priority (high, core, etc).
50
+ *
51
+ * This method is primarily used to find a widget within the global array so we can remove it.
52
+ *
53
+ * @since 2.9.0
54
+ *
55
+ * @global array $wp_meta_boxes
56
+ *
57
+ * @param string $id The id of the widget to find.
58
+ * @return array
59
+ */
60
+ public function getWidget( $id ) {
61
+ $widget = array();
62
+
63
+ // Example structure of $wp_meta_boxes - https://pastebin.com/uYqDEZgm
64
+ global $wp_meta_boxes;
65
+
66
+ // We're only interested in dashboard widgets.
67
+ if ( empty( $wp_meta_boxes['dashboard'] ) ) {
68
+ return $widget;
69
+ }
70
+
71
+ // Complicated looping below because of $wp_meta_boxes structure. See example above.
72
+ foreach ( $wp_meta_boxes['dashboard'] as $container => $priorities ) {
73
+ foreach ( $priorities as $priority => $widgets ) {
74
+ foreach ( $widgets as $widget ) {
75
+ if ( $id === $widget['id'] ) {
76
+ $widget = array(
77
+ 'container' => $container,
78
+ 'priority' => $priority,
79
+ 'widget' => $widget,
80
+ );
81
+
82
+ break 3;
83
+ }
84
+ }
85
+ }
86
+ }
87
+
88
+ return $widget;
89
+ }
90
+
91
+ /**
92
+ * Sort the widgets as contained in the user's "meta-box-order_dashboard" meta.
93
+ *
94
+ * We are deleting our widgets, and then adding them back in.
95
+ *
96
+ * @since 2.9.0
97
+ */
98
+ public function sortCustomOrder() {
99
+ $userId = get_current_user_id();
100
+
101
+ $userWidgetOrder = get_user_meta( $userId, 'meta-box-order_dashboard', true );
102
+
103
+ $widgetConfigs = $this->getConfigs();
104
+
105
+ // First, delete all of our widgets.
106
+ foreach ( $userWidgetOrder as $container => $widgets ) {
107
+ $widgets = explode( ',', $widgets );
108
+
109
+ foreach ( array_keys( $widgetConfigs ) as $id ) {
110
+ if ( ( $key = array_search( $id, $widgets ) ) !== false ) {
111
+ unset( $widgets[ $key ] );
112
+ }
113
+ }
114
+
115
+ $userWidgetOrder[ $container ] = implode( ',', $widgets );
116
+ }
117
+
118
+ // Then, add them back in.
119
+ foreach ( $widgetConfigs as $id => $configs ) {
120
+ switch( empty( $userWidgetOrder[ $configs['container'] ] ) ) {
121
+ case true:
122
+ $userWidgetOrder[ $configs['container'] ] = $id;
123
+ break;
124
+ case false:
125
+ $userWidgetOrder[ $configs['container'] ] = $id . ',' . $userWidgetOrder[ $configs['container'] ];
126
+ break;
127
+ }
128
+ }
129
+ update_user_meta( $userId, 'meta-box-order_dashboard', $userWidgetOrder );
130
+ }
131
+
132
+ /**
133
+ * Sort the widgets as containted in the global $wp_meta_boxes.
134
+ *
135
+ * @since 2.9.0
136
+ */
137
+ public function sortGlobal() {
138
+ global $wp_meta_boxes;
139
+
140
+ foreach ( $this->getConfigs() as $id => $configs ) {
141
+ $widget = $this->getWidget( $id );
142
+
143
+ $invalidData = empty( $widget['container'] ) || empty( $widget['priority'] );
144
+ if ( $invalidData ) {
145
+ continue;
146
+ }
147
+
148
+ // First, remove the widget from where it is now.
149
+ unset( $wp_meta_boxes['dashboard'][$widget['container']][$widget['priority']][$id] );
150
+
151
+ // Then, add it to the correct location.
152
+ $wp_meta_boxes['dashboard'][ $configs['container'] ][ $configs['priority'] ] =
153
+ array( $id => $widget['widget'] ) +
154
+ $wp_meta_boxes['dashboard'][ $configs['container'] ][ $configs['priority'] ];
155
+ }
156
+ }
157
+
158
+ /**
159
+ * Filter the display order of widgets on the dashboard.
160
+ *
161
+ * Primary objective is to place BoldGrid widgets at the top.
162
+ *
163
+ * If the user has a custom display order (IE they've dragged things around), we'll force our
164
+ * widgets to the top only once. This way, we can force our widgets to the top, but if they want
165
+ * to move them lower, they are free to do so.
166
+ *
167
+ * @priority 20
168
+ */
169
+ public function wp_dashboard_setup() {
170
+ $userId = get_current_user_id();
171
+
172
+ // Debug.
173
+ // delete_user_meta( $userId, 'meta-box-order_dashboard' );
174
+ // delete_user_meta( $userId, 'bglibDashboardOrder' );
175
+
176
+ // Whether the user has dragged widgets around on their dashboard and changed the order.
177
+ $userChangedOrder = get_user_meta( get_current_user_id(), 'meta-box-order_dashboard', true );
178
+ $userChangedOrder = ! empty( $userChangedOrder );
179
+
180
+ // Whether bglib has already changed the user's own custom dashboard widget order.
181
+ $hasChangedLibrary = get_user_meta( $userId, 'bglibDashboardOrder', true );
182
+ $hasChangedLibrary = ! empty( $hasChangedLibrary );
183
+
184
+ $userChangedOrder && ! $hasChangedLibrary ? $this->sortCustomOrder() : $this->sortGlobal();
185
+
186
+ // Flag that we have updated the user's dashboard widget sort order.
187
+ update_user_meta( $userId, 'bglibDashboardOrder', 1 );
188
+ }
189
+ }
vendor/boldgrid/library/src/Library/Key/PostNewKey.php CHANGED
@@ -80,21 +80,29 @@ class PostNewKey {
80
  *
81
  * @return string
82
  */
83
- public static function getCentralUrl() {
84
- /**
85
- * Allow the return url to be filtered.
86
  *
87
  * The return url is the url that BoldGrid Central will link the user to after they received
88
  * their new BoldGrid Connect Key.
89
  *
90
- * By default, we will link them to Dashboard > Settings > BoldGrid Connect. However,
91
- * with this filter plugins can change this url.
 
 
 
 
 
 
 
 
92
  *
93
  * @since 2.8.0
94
  *
95
  * @param string URL to the BoldGrid Connect settings page.
96
  */
97
- $returnUrl = apply_filters( 'Boldgrid\Library\Key\returnUrl', admin_url( 'options-general.php?page=boldgrid-connect.php' ) );
98
 
99
  $returnUrl = add_query_arg( 'nonce', wp_create_nonce( 'bglib-key-prompt' ), $returnUrl );
100
 
80
  *
81
  * @return string
82
  */
83
+ public static function getCentralUrl( $returnUrl = '' ) {
84
+ /*
85
+ * Configure our return url.
86
  *
87
  * The return url is the url that BoldGrid Central will link the user to after they received
88
  * their new BoldGrid Connect Key.
89
  *
90
+ * In the initial version of this method, the return url linked to
91
+ * Dashboard > Settings > BoldGrid Connect
92
+ * and we allowed the filter below to be used to change the url. As plugins began to use
93
+ * this method more, it's became easier to simply allow a return url to be passed in, rather
94
+ * than require the filter to be used.
95
+ */
96
+ $returnUrl = ! empty( $returnUrl ) ? $returnUrl : admin_url( 'options-general.php?page=boldgrid-connect.php' );
97
+
98
+ /**
99
+ * Allow the return url to be filtered.
100
  *
101
  * @since 2.8.0
102
  *
103
  * @param string URL to the BoldGrid Connect settings page.
104
  */
105
+ $returnUrl = apply_filters( 'Boldgrid\Library\Key\returnUrl', $returnUrl );
106
 
107
  $returnUrl = add_query_arg( 'nonce', wp_create_nonce( 'bglib-key-prompt' ), $returnUrl );
108
 
vendor/boldgrid/library/src/Library/License.php CHANGED
@@ -390,6 +390,7 @@ class License {
390
  *
391
  * @hook Boldgrid\Library\License\isPremium
392
  *
 
393
  * @return bool
394
  */
395
  public function isPremium( $product ) {
390
  *
391
  * @hook Boldgrid\Library\License\isPremium
392
  *
393
+ * @param string $product Such as "boldgrid-backup" or "post-and-page-builder".
394
  * @return bool
395
  */
396
  public function isPremium( $product ) {
vendor/boldgrid/library/src/Library/NewsWidget.php ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * BoldGrid Library News Widget Class
4
+ *
5
+ * @package Boldgrid\Library
6
+ * @subpackage \Library\License
7
+ *
8
+ * @version 2.9.0
9
+ * @author BoldGrid <wpb@boldgrid.com>
10
+ */
11
+
12
+ namespace Boldgrid\Library\Library;
13
+
14
+ /**
15
+ * BoldGrid Library News Widget Class.
16
+ *
17
+ * This class is responsible for rendering the "BoldGrid News" widget on the WordPress dashboard.
18
+ *
19
+ * @since 2.9.0
20
+ */
21
+ class NewsWidget {
22
+ /**
23
+ * An array of errors.
24
+ *
25
+ * @since 2.10.0
26
+ * @var array
27
+ */
28
+ public $errors = [];
29
+
30
+ /**
31
+ * Constructor.
32
+ *
33
+ * @since 2.9.0
34
+ */
35
+ public function __construct() {
36
+ Filter::add( $this );
37
+ }
38
+
39
+ /**
40
+ * Enqueue scripts.
41
+ *
42
+ * @since 2.9.0
43
+ *
44
+ * @param string $hook Hook.
45
+ */
46
+ public function admin_enqueue_scripts( $hook ) {
47
+ wp_register_style(
48
+ 'bglib-news-widget-css',
49
+ Configs::get( 'libraryUrl' ) . 'src/assets/css/news-widget.css'
50
+ );
51
+
52
+ switch( $hook ) {
53
+ case 'index.php':
54
+ wp_enqueue_style( 'bglib-news-widget-css' );
55
+ break;
56
+ }
57
+ }
58
+
59
+ /**
60
+ * Display the inner contents of our news widgget.
61
+ *
62
+ * @since 2.9.0
63
+ */
64
+ public function display() {
65
+ // Get 2 posts.
66
+ $posts = $this->getPosts( 2 );
67
+
68
+ // If there are errors, abort.
69
+ if ( ! empty( $this->errors ) ) {
70
+ echo '<p>' . implode( $this->errors, '</p></p>' ) . '</p>';
71
+ return;
72
+ }
73
+
74
+ // If we have no news posts, abort.
75
+ if( empty( $posts ) ) {
76
+ echo '<p>' . esc_html__( 'There are no updates to show right now.', 'boldgrid-library' ) . '</p>';
77
+ return;
78
+ }
79
+
80
+ // Finally, display the posts.
81
+ echo '<ul>';
82
+ foreach ( $posts as $post ) {
83
+ // Get the url to the featured image.
84
+ $featuredImage = '';
85
+ if ( ! empty( $post->_embedded->{'wp:featuredmedia'}[0]->media_details->sizes->medium->source_url ) ) {
86
+ $featuredImage = $post->_embedded->{'wp:featuredmedia'}[0]->media_details->sizes->medium->source_url;
87
+ }
88
+
89
+ ?> <li title="<?php echo esc_attr( $post->excerpt->rendered ); ?>">
90
+ <?php if ( ! empty( $featuredImage ) ) {
91
+ echo '<img class="bglib-featured" src="' . esc_url( $featuredImage ) . '" />';
92
+ } ?>
93
+ <p class="bglib-date">
94
+ <?php echo date( 'M jS, Y', strtotime( $post->date ) ); ?>
95
+ </p>
96
+ <p class="bglib-title">
97
+ <a href='<?php echo $post->link; ?>' target='_blank'><?php echo $post->title->rendered; ?></a>
98
+ </p>
99
+ </li>
100
+ <?php
101
+ }
102
+ echo '</ul><div style="clear:both;"></div>';
103
+ }
104
+
105
+ /**
106
+ * Get the id of a tag.
107
+ *
108
+ * @since 2.9.0
109
+ *
110
+ * @param string $tag The tag name.
111
+ * @return int
112
+ */
113
+ public function getTagId( $tag ) {
114
+ $id = 0;
115
+
116
+ $request = wp_remote_get( 'https://www.boldgrid.com/wp-json/wp/v2/tags/?slug=' . $tag );
117
+
118
+ if( is_wp_error( $request ) ) {
119
+ return $id;
120
+ }
121
+
122
+ $body = wp_remote_retrieve_body( $request );
123
+ $body = json_decode( $body );
124
+
125
+ $id = ! empty( $body[0]->id ) ? $body[0]->id : $id;
126
+
127
+ return $id;
128
+ }
129
+
130
+ /**
131
+ * Get rss posts.
132
+ *
133
+ * @since 2.10.0
134
+ *
135
+ * @param string $limit The number of posts to return.
136
+ * @return array An array of posts.
137
+ */
138
+ public function getPosts( $limit ) {
139
+ // Get all posts tagged, "dashboard".
140
+ $request = wp_remote_get( $this->getRssUrl() );
141
+
142
+ // If we have an error, abort.
143
+ if( is_wp_error( $request ) ) {
144
+ if ( is_admin() || current_user_can( 'manage_options' ) ) {
145
+ $this->errors[] = sprintf(
146
+ // translators: An RSS error message.
147
+ __( '<strong>RSS Error</strong>: %s', 'boldgrid-inspirations' ),
148
+ esc_html__( $request->get_error_message() )
149
+ );
150
+ }
151
+
152
+ return;
153
+ }
154
+
155
+ // Get our "dashboard" posts.
156
+ $body = wp_remote_retrieve_body( $request );
157
+ $posts = json_decode( $body );
158
+
159
+ if ( $limit ) {
160
+ $posts = array_slice( $posts, 0, $limit );
161
+ }
162
+
163
+ return $posts;
164
+ }
165
+
166
+ /**
167
+ * Get the URL for our rss feed.
168
+ *
169
+ * @since 2.10.0
170
+ *
171
+ * @return string
172
+ */
173
+ public function getRssUrl() {
174
+ // Adding _embed includes the featured image urls, without the need to make another call.
175
+ $url = 'https://www.boldgrid.com/wp-json/wp/v2/posts/?_embed&tags=' . $this->getTagId( 'dashboard' );
176
+
177
+ $url .= '&key=' . Configs::get('key');
178
+
179
+ $plugins = [];
180
+ $bgPlugins = array_merge(
181
+ array_keys( Configs::get('pluginInstaller')['plugins'] ),
182
+ array_keys( Configs::get('pluginInstaller')['wporgPlugins'] )
183
+ );
184
+
185
+ // Get data for only BoldGrid plugins.
186
+ foreach ( get_plugins() as $slug => $info ) {
187
+ if ( preg_grep('~' . strtok($slug, '/') . '~', $bgPlugins) ) {
188
+ $plugins[] = [
189
+ 'slug' => $slug,
190
+ 'version' => $info['Version'],
191
+ 'active' => is_plugin_active( $slug ),
192
+ ];
193
+ }
194
+ }
195
+
196
+ $url .= '&data=' . rawurlencode( gzdeflate( wp_json_encode(
197
+ [
198
+ 'locale' => get_locale(),
199
+ 'plugins' => $plugins,
200
+ ]
201
+ ) ) );
202
+
203
+ return $url;
204
+ }
205
+
206
+ /**
207
+ * Add our news widget to the dashboard.
208
+ *
209
+ * Priority 5 given for backwards compatibility with BoldGrid Inspirations. If Inspirations is
210
+ * trying to add the news widget, this method will go first and take precedence.
211
+ *
212
+ * @since 2.9.0
213
+ *
214
+ * @priority 5
215
+ */
216
+ public function wp_dashboard_setup() {
217
+ wp_add_dashboard_widget(
218
+ 'boldgrid_news_widget',
219
+ esc_html__( 'BoldGrid News', 'boldgrid-library' ),
220
+ [
221
+ $this,
222
+ 'display',
223
+ ]
224
+ );
225
+ }
226
+ }
vendor/boldgrid/library/src/Library/Notifications/DashboardWidget.php ADDED
@@ -0,0 +1,211 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * BoldGrid Library Notifications Dashboard Widget Class
4
+ *
5
+ * @package Boldgrid\Library
6
+ * @subpackage \Library\License
7
+ *
8
+ * @version 2.9.0
9
+ * @author BoldGrid <wpb@boldgrid.com>
10
+ */
11
+
12
+ namespace Boldgrid\Library\Library\Notifications;
13
+
14
+ use Boldgrid\Library\Library;
15
+
16
+ /**
17
+ * BoldGrid Library Notifications Dashboard Widget Class.
18
+ *
19
+ * This class is responsible for rendering the "BoldGrid Notifications" widget on the WordPress
20
+ * dashboard.
21
+ *
22
+ * @since 2.10.0
23
+ */
24
+ class DashboardWidget {
25
+ /**
26
+ * Initialize class and set class properties.
27
+ *
28
+ * @since 2.10.0
29
+ */
30
+ public function __construct() {
31
+ Library\Filter::add( $this );
32
+ }
33
+
34
+ /**
35
+ * Load scripts on the admin_enqueue_scripts hook.
36
+ *
37
+ * @since 2.10.0
38
+ */
39
+ public function admin_enqueue_scripts() {
40
+ Library\Ui\Dashboard::enqueueScripts();
41
+ }
42
+
43
+ /**
44
+ * Print the "BoldGrid Notifications" WordPress Dashboard widget.
45
+ *
46
+ * @since 2.10.0
47
+ */
48
+ public function printWidget() {
49
+ $card = new \Boldgrid\Library\Library\Ui\Card();
50
+
51
+ // Add all of our active plugins.
52
+ $activePlugins = Library\Plugin\Plugins::getActive();
53
+ foreach( $activePlugins as $plugin ) {
54
+ $card->features[] = $this->getFeaturePlugin( $plugin );
55
+ }
56
+
57
+ // Add a "feature" for free / premium.
58
+ $card->features[] = $this->getFeatureKey();
59
+
60
+ $card->printCard();
61
+ }
62
+
63
+ /**
64
+ * Get the "feature" for our BoldGrid Connect Key.
65
+ *
66
+ * @since 2.10.0
67
+ *
68
+ * @return \Boldgrid\Library\Library\Ui\Feature
69
+ */
70
+ public function getFeatureKey() {
71
+ $feature = new Library\Ui\Feature();
72
+
73
+ /*
74
+ * Get our license string: "None", "Free", "Premium".
75
+ *
76
+ * Be default, the license string is based on a single product's license. Instead of using
77
+ * this logic, below we are trying to figure out a key's license (and not a product's license).
78
+ *
79
+ * To get the license, we need to check if a particular product is premium. To do that, we
80
+ * will set our product to be the plugin that is loading the library.
81
+ */
82
+ $license = new Library\License();
83
+ $key = $license->getApiKey();
84
+ if ( empty( $key ) ) {
85
+ $licenseString = 'None';
86
+ } else {
87
+ $product = Library\Configs::getFileSlug();
88
+ // Call isPermium(), which sets the license string.
89
+ $license->isPremium( $product );
90
+ $licenseString = $license->getLicenseString();
91
+ }
92
+
93
+ $feature->title = esc_html__( 'BoldGrid Connect Key', 'boldgrid-backup' );
94
+
95
+ switch( $licenseString ) {
96
+ case 'None':
97
+ $feature->icon = '<span class="dashicons dashicons-admin-network"></span>';
98
+ $feature->content = '<div class="notice notice-warning inline">
99
+ <p>
100
+ <a href="' . admin_url( 'options-general.php?page=boldgrid-connect.php' ) . '">' .
101
+ esc_html__( 'Please install your Connect Key', 'boldgrid-library' ) .
102
+ '</a>
103
+ </p>
104
+ </div>';
105
+ break;
106
+ case 'Free':
107
+ $feature->icon = '<span class="dashicons dashicons-admin-network boldgrid-orange"></span>';
108
+ $feature->content = '<div class="notice notice-warning inline">
109
+ <p>
110
+ <a href="' . esc_url( Library\Configs::get( 'learnMore' ) ) . '">' .
111
+ esc_html__( 'Learn about the advanced features of a Premium Key.', 'boldgrid-library' ) .
112
+ '</a>
113
+ </p>
114
+ </div>';
115
+ break;
116
+ case 'Premium':
117
+ $feature->icon = '<span class="dashicons dashicons-admin-network boldgrid-orange"></span>';
118
+ $feature->content = esc_html__( 'Premium Connect Key Installed!', 'boldgrid-library' );
119
+ break;
120
+ }
121
+
122
+ return $feature;
123
+ }
124
+
125
+ /**
126
+ * Get the "feature" for a plugin.
127
+ *
128
+ * @since 2.10.0
129
+ *
130
+ * @param \Boldgrid\Library\Library\Plugin\Plugin A plugin object.
131
+ * @param \Boldgrid\Library\Library\Plugin\Plugin The plugin's parent plugin (optional).
132
+ * @return \Boldgrid\Library\Library\Ui\Feature A feature object.
133
+ */
134
+ public function getFeaturePlugin( Library\Plugin\Plugin $plugin, $parentPlugin = null ) {
135
+ $isParentPlugin = is_null( $parentPlugin );
136
+
137
+ // Get the markup for the plugin's icon.
138
+ $icons = $plugin->getIcons();
139
+ if ( empty( $icons ) ) {
140
+ $icon = '<span class="dashicons dashicons-admin-plugins"></span>';
141
+ } else {
142
+ $iconUrl = ! empty( $icons['1x'] ) ? $icons['1x'] : reset( $icons );
143
+ $icon = '<img src="' . esc_url( $iconUrl ) . '" />';
144
+ }
145
+
146
+ $feature = new Library\Ui\Feature();
147
+
148
+ $feature->title = $plugin->getData( 'Name' );
149
+
150
+ $feature->icon = $icon;
151
+
152
+ if ( $plugin->hasUpdate() ) {
153
+ $feature->content = '<div class="notice notice-warning inline"><p>' . wp_kses(
154
+ sprintf(
155
+ __( '%1$s is out of date. %2$sFix this%3$s.', 'boldgrid-backup' ),
156
+ $plugin->getData( 'Name' ),
157
+ '<a href="' . esc_url( admin_url( 'update-core.php' ) ) . '">',
158
+ '</a>'
159
+ ),
160
+ [ 'a' => [ 'href' => [] ] ]
161
+ ) . '</p></div>';
162
+ }
163
+
164
+ /**
165
+ * Allow items to be filtered.
166
+ *
167
+ * @since 2.10.0
168
+ *
169
+ * @param \Boldgrid\Library\Library\Ui\Feature The feature object.
170
+ * @param \Boldgrid\Library\Library\Plugin\Plugin The plugin object.
171
+ */
172
+ $feature = apply_filters( 'Boldgrid\Library\Notifications\DashboardWidget\getFeaturePlugin\\' . $plugin->getSlug(), $feature, $plugin );
173
+
174
+ /*
175
+ * If this plugin has child plugins (IE a premium plugin), then allow those children to add
176
+ * notices to the parent.
177
+ */
178
+ $childPlugins = $plugin->getChildPlugins();
179
+ foreach ( $childPlugins as $childPlugin ) {
180
+ if ( ! $childPlugin->getIsInstalled() ) {
181
+ continue;
182
+ }
183
+
184
+ $childFeature = $this->getFeaturePlugin( $childPlugin, $plugin );
185
+ $feature->content .= $childFeature->content;
186
+ }
187
+
188
+ // The parent plugin makes the final call, as in whether or not there are issues to report.
189
+ if ( $isParentPlugin && empty( $feature->content ) ) {
190
+ $feature->content = '<p>' . __( 'No issues to report!', 'boldgrid-library' ) . '</p>';
191
+ }
192
+
193
+ return $feature;
194
+ }
195
+
196
+
197
+ /**
198
+ * Setup our dashboard widget.
199
+ *
200
+ * @since 2.10.0
201
+ *
202
+ * @link https://codex.wordpress.org/Dashboard_Widgets_API
203
+ */
204
+ public function wp_dashboard_setup() {
205
+ wp_add_dashboard_widget(
206
+ 'boldgrid-notifications',
207
+ __( 'BoldGrid Notifications', 'boldgrid-library' ),
208
+ array( $this, 'printWidget' )
209
+ );
210
+ }
211
+ }
vendor/boldgrid/library/src/Library/Plugin/Plugin.php CHANGED
@@ -20,24 +20,160 @@ use Boldgrid\Library\Library\Configs;
20
  * @since 2.7.7
21
  */
22
  class Plugin {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
 
24
  /**
25
  * Plugin slug.
26
  *
27
  * Examples: boldgrid-backup, boldgrid-backup-premium, etc.
28
  *
29
- * @var string
30
  * @since 2.7.7
 
31
  */
32
- private $slug;
33
 
34
  /**
35
  * Constructor.
36
  *
37
  * @since 2.7.7
 
 
38
  */
39
  public function __construct( $slug ) {
40
  $this->slug = $slug;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  }
42
 
43
  /**
@@ -45,6 +181,8 @@ class Plugin {
45
  *
46
  * @since 2.7.7
47
  *
 
 
48
  * @return string
49
  */
50
  public function getDownloadUrl() {
@@ -54,4 +192,173 @@ class Plugin {
54
 
55
  return $url;
56
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  }
20
  * @since 2.7.7
21
  */
22
  class Plugin {
23
+ /**
24
+ * An array of children plugins.
25
+ *
26
+ * Elements of this array are of this class, Plugin (recursion).
27
+ *
28
+ * @since 2.10.0
29
+ * @var array
30
+ * @access protected
31
+ */
32
+ protected $childPlugins = [];
33
+
34
+ /**
35
+ * Plugin file.
36
+ *
37
+ * For example: plugin/plugin.php
38
+ *
39
+ * @since 2.9.0
40
+ * @var string
41
+ * @access protected
42
+ */
43
+ protected $file;
44
+
45
+ /**
46
+ * Whether or not this plugin is installed.
47
+ *
48
+ * @since 2.10.0
49
+ * @var bool
50
+ * @access protected
51
+ */
52
+ protected $isInstalled;
53
+
54
+ /**
55
+ * Path to the plugin.
56
+ *
57
+ * For example, ABSPATH/wp-content/plugins/plugin/plugin.php.
58
+ *
59
+ * @since 2.10.0
60
+ */
61
+ protected $path;
62
+
63
+ /**
64
+ * Plugin data, as retrieved from get_plugin_data().
65
+ *
66
+ * @since 2.9.0
67
+ * @var array
68
+ * @access protected
69
+ */
70
+ protected $pluginData = [];
71
+
72
+ /**
73
+ * Update plugin data, as retrieved from 'update_plugins' site transient.
74
+ *
75
+ * @since 2.9.0
76
+ * @var array
77
+ * @access protected
78
+ */
79
+ protected $updatePlugins;
80
 
81
  /**
82
  * Plugin slug.
83
  *
84
  * Examples: boldgrid-backup, boldgrid-backup-premium, etc.
85
  *
86
+ * @var string
87
  * @since 2.7.7
88
+ * @access protected
89
  */
90
+ protected $slug;
91
 
92
  /**
93
  * Constructor.
94
  *
95
  * @since 2.7.7
96
+ *
97
+ * @param string $slug For example: "plugin" from plugin/plugin.php
98
  */
99
  public function __construct( $slug ) {
100
  $this->slug = $slug;
101
+
102
+ $this->setFile();
103
+
104
+ $this->setPath();
105
+
106
+ $this->setIsInstalled();
107
+
108
+ $this->setChildPlugins();
109
+ }
110
+
111
+ /**
112
+ * Get an array of the plugin's icons.
113
+ *
114
+ * @since 2.9.0
115
+ *
116
+ * @return array
117
+ */
118
+ public function getIcons() {
119
+ $updates = $this->getUpdatePlugins();
120
+
121
+ $icons = array();
122
+ $icons = ! empty( $updates->response[ $this->file ]->icons ) ? $updates->response[ $this->file ]->icons : $icons;
123
+ $icons = ! empty( $updates->no_update[ $this->file ]->icons ) ? $updates->no_update[ $this->file ]->icons : $icons;
124
+
125
+ return $icons;
126
+ }
127
+
128
+ /**
129
+ * Get the child plugins array.
130
+ *
131
+ * @since 2.10.0
132
+ *
133
+ * @return array
134
+ */
135
+ public function getChildPlugins() {
136
+ return $this->childPlugins;
137
+ }
138
+
139
+ /**
140
+ * Get config for this particular plugin.
141
+ *
142
+ * Within library.global.php, there is a config option called "plugins". This method loops through
143
+ * those plugins and returns the configs for this particular plugin.
144
+ *
145
+ * @since 2.10.0
146
+ *
147
+ * @return array
148
+ */
149
+ public function getConfig() {
150
+ $config = [];
151
+
152
+ $plugins = Configs::get( 'plugins' );
153
+
154
+ foreach ( $plugins as $plugin ) {
155
+ if ( $plugin['file'] === $this->file ) {
156
+ $config = $plugin;
157
+ }
158
+ }
159
+
160
+ return $config;
161
+ }
162
+
163
+ /**
164
+ * Get data via the get_plugin_data() function.
165
+ *
166
+ * If a $key is passed in, return that key, otherwise return all data.
167
+ *
168
+ * @since 2.9.0
169
+ *
170
+ * @param string $key The data key to return.
171
+ * @return mixed
172
+ */
173
+ public function getData( $key = null ) {
174
+ $data = $this->getPluginData();
175
+
176
+ return empty( $key ) ? $data : $data[ $key ];
177
  }
178
 
179
  /**
181
  *
182
  * @since 2.7.7
183
  *
184
+ * @todo This method only works for plugins hosted at the BoldGrid api server.
185
+ *
186
  * @return string
187
  */
188
  public function getDownloadUrl() {
192
 
193
  return $url;
194
  }
195
+
196
+ /**
197
+ * Get isInstalled.
198
+ *
199
+ * @since 2.10.0
200
+ *
201
+ * @return bool
202
+ */
203
+ public function getIsInstalled() {
204
+ return $this->isInstalled;
205
+ }
206
+
207
+ /**
208
+ * Get file.
209
+ *
210
+ * @since 2.9.0
211
+ *
212
+ * @return string
213
+ */
214
+ public function getFile() {
215
+ return $this->file;
216
+ }
217
+
218
+ /**
219
+ * Get a plugin's slug from its file.
220
+ *
221
+ * For example, if the plugin's file is:
222
+ * boldgrid-backup-premium/boldgrid-backup-premium.php
223
+ * The plugin's slug is:
224
+ * boldgrid-backup-premium
225
+ *
226
+ * @since 2.10.0
227
+ *
228
+ * @param string $file The plugin's file, as in plugin/plugin.php
229
+ * @return string
230
+ */
231
+ public static function getFileSlug( $file ) {
232
+ $slug = explode( '/', $file );
233
+
234
+ return $slug[0];
235
+ }
236
+
237
+ /**
238
+ * If a new version of a plugin is available, return the new version.
239
+ *
240
+ * @since 2.9.0
241
+ *
242
+ * @return string
243
+ */
244
+ public function getNewVersion() {
245
+ $updates = $this->getUpdatePlugins();
246
+
247
+ return ! empty( $updates->response[ $this->file ]->new_version ) ? $updates->response[ $this->file ]->new_version : '0';
248
+ }
249
+
250
+ /**
251
+ * Get plugin data.
252
+ *
253
+ * @since 2.9.0
254
+ *
255
+ * @return array
256
+ */
257
+ public function getPluginData() {
258
+ if ( empty( $this->pluginData ) && $this->isInstalled ) {
259
+ $this->pluginData = get_plugin_data( $this->path );
260
+ }
261
+
262
+ return $this->pluginData;
263
+ }
264
+
265
+ /**
266
+ * Get slug.
267
+ *
268
+ * @since 2.9.0
269
+ *
270
+ * @return string
271
+ */
272
+ public function getSlug() {
273
+ return $this->slug;
274
+ }
275
+
276
+ /**
277
+ * Set our child plugins.
278
+ *
279
+ * @since 2.10.0
280
+ */
281
+ public function setChildPlugins() {
282
+ $config = $this->getConfig();
283
+
284
+ if ( empty( $config['childPlugins'] ) ) {
285
+ return;
286
+ }
287
+
288
+ foreach ( $config['childPlugins'] as $file ) {
289
+ $slug = $this->getFileSlug( $file );
290
+
291
+ $this->childPlugins[] = new Plugin( $slug );
292
+ }
293
+ }
294
+
295
+ /**
296
+ * Set file.
297
+ *
298
+ * @since 2.9.0
299
+ *
300
+ * @param string $file A plugin's file.
301
+ */
302
+ public function setFile( $file = null ) {
303
+ $this->file = ! empty( $file ) ? $file : $this->slug . '/' . $this->slug . '.php';
304
+ }
305
+
306
+ /**
307
+ * Set whether or not the plugin is installed (different from activated).
308
+ *
309
+ * @since 2.10.0
310
+ */
311
+ public function setIsInstalled() {
312
+ $wp_filesystem = \Boldgrid\Library\Util\Version::getWpFilesystem();
313
+
314
+ $this->isInstalled = $wp_filesystem->exists( $this->path );
315
+ }
316
+
317
+ /**
318
+ * Set the plugin's path.
319
+ *
320
+ * @since 2.10.0
321
+ */
322
+ public function setPath() {
323
+ $this->path = ABSPATH . 'wp-content/plugins/' . $this->file;
324
+ }
325
+
326
+ /**
327
+ * Get updatePlugins data.
328
+ *
329
+ * @since 2.9.0
330
+ *
331
+ * @return object
332
+ */
333
+ public function getUpdatePlugins() {
334
+ if ( empty( $this->updatePlugins ) ) {
335
+ $this->updatePlugins = get_site_transient( 'update_plugins' );
336
+ }
337
+
338
+ return $this->updatePlugins;
339
+ }
340
+
341
+ /**
342
+ * Whether or not a plugin has an update available.
343
+ *
344
+ * @since 2.9.0
345
+ *
346
+ * @return bool
347
+ */
348
+ public function hasUpdate() {
349
+ $updates = $this->getUpdatePlugins();
350
+
351
+ return ! empty( $updates->response[ $this->file ] );
352
+ }
353
+
354
+ /**
355
+ * Whether or not this plugin is active.
356
+ *
357
+ * @since 2.9.0
358
+ *
359
+ * @return bool
360
+ */
361
+ public function isActive() {
362
+ return is_plugin_active( $this->file );
363
+ }
364
  }
vendor/boldgrid/library/src/Library/Plugin/Plugins.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * BoldGrid Library Plugin Plugins.
4
+ *
5
+ * @package Boldgrid\Plugin
6
+ *
7
+ * @since 2.10.0
8
+ * @author BoldGrid <wpb@boldgrid.com>
9
+ */
10
+
11
+ namespace Boldgrid\Library\Library\Plugin;
12
+
13
+ use Boldgrid\Library\Library\Configs;
14
+
15
+ /**
16
+ * Generic plugins class.
17
+ *
18
+ * Unlike the Plugin class, Plugins is a generic class for "plugins" related methods.
19
+ *
20
+ * @since 2.10.0
21
+ */
22
+ class Plugins {