PluginProbe
Assistant – Every Day Productivity Apps / trunk
Assistant – Every Day Productivity Apps vtrunk
1.5.5 trunk 0.1.0 0.2.0 0.2.1 0.2.2 0.3.0 0.3.1 0.4 0.4.1 0.4.2 0.5.0 0.5.1 0.6.0 0.7.0 0.7.0.2 0.7.0.3 0.7.0.4 0.7.0.5 0.7.0.6 0.7.0.7 0.7.0.8 0.7.0.9 0.7.1 1.0 All 71 releases
assistant / backend / src / Hooks / Actions / OnEnqueueScripts.php

OnEnqueueScripts.php in Assistant – Every Day Productivity Apps trunk, at backend/src/Hooks/Actions/OnEnqueueScripts.php

359 lines 10.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FL\Assistant\Hooks\Actions;
4
5 use FL\Assistant\Data\Repository\PostsRepository;
6 use FL\Assistant\Data\Repository\UsersRepository;
7 use FL\Assistant\Data\Site;
8 use FL\Assistant\Data\Transformers\UserTransformer;
9 use FL\Assistant\Data\UserState;
10 use FL\Assistant\Data\Mockup;
11 use FL\Assistant\Services\ThemeService;
12 use FL\Assistant\Helpers\BeaverBuilderHelper;
13 use FL\Assistant\System\Integrations\BeaverBuilder;
14 use FLBuilderModel;
15
16 /**
17 * Class OnEnqueueScripts
18 * @package FL\Assistant\Hooks\Actions
19 *
20 */
21 class OnEnqueueScripts {
22
23 /**
24 * @var UsersRepository
25 */
26 protected $users;
27 /**
28 * @var PostsRepository
29 */
30 protected $posts;
31
32 protected $beaver_builder;
33
34 /**
35 * @var Site
36 */
37 protected $site;
38
39 /**
40 * @var UserTransformer
41 */
42 protected $user_transform;
43
44
45 /**
46 * OnEnqueueScripts constructor.
47 *
48 * @param UsersRepository $users
49 * @param PostsRepository $posts
50 * @param Site $site
51 * @param UserTransformer $user_transform
52 */
53 public function __construct(
54 UsersRepository $users,
55 PostsRepository $posts,
56 Site $site,
57 UserTransformer $user_transform,
58 BeaverBuilder $beaver_builder
59 ) {
60
61 $this->users = $users;
62 $this->posts = $posts;
63 $this->site = $site;
64 $this->user_transform = $user_transform;
65 $this->beaver_builder = $beaver_builder;
66 }
67
68 /**
69 * @return array
70 * @throws \Exception
71 */
72 public function generate_initial_state() {
73 if ( ! is_user_logged_in() ) {
74 return [];
75 }
76
77 $user_state = UserState::get();
78 $config = self::generate_frontend_config();
79 $frame = $config[ 'frameDefaults' ];
80
81
82 // Ensure shape of window property
83 $window = $user_state['window'];
84 // Ensure is set
85 if ( ! isset( $window['width'] ) || null === $window['width'] ) {
86 $window['width'] = $frame[ 'defaultWidth' ];
87 }
88 // Respect min and max width
89 if ( $frame[ 'minWidth' ] > $window['width'] ) {
90 $window['width'] = $frame[ 'minWidth' ];
91 } else if ( $frame[ 'maxWidth' ] < $window[ 'width' ] ) {
92 $window['width'] = $frame[ 'maxWidth' ];
93 }
94
95 // Set frame origin to top/right if not set.
96 if ( ! isset( $window['origin'] ) || ! is_array( $window['origin'] ) ) {
97 $window['origin'] = $frame[ 'defaultOrigin' ];
98 }
99
100 // Remove Deprecated properties
101 if ( isset( $window['size'] ) ) {
102 unset( $window['size'] );
103 }
104 if ( isset( $window['overlayToolbar'] ) ) {
105 unset( $window['overlayToolbar'] );
106 }
107
108 // Always show in admin bar and hidden in wp-admin.
109 if ( is_admin() ) {
110 $window['isHidden'] = true;
111 // $window['hiddenAppearance'] = 'admin_bar';
112 }
113
114 $user_state['window'] = $window;
115
116 return [
117 'shouldShowLabels' => false, /* Disabled */
118 'appOrder' => $user_state['appOrder'],
119 'appearance' => $user_state['appearance'],
120 'history' => $user_state['history'],
121 'searchHistory' => $user_state['searchHistory'],
122 'window' => $user_state['window'],
123 'isAppHidden' => $user_state['isAppHidden'] ? true : false,
124 'hasSubscribed' => isset( $user_state['hasSubscribed'] ) && $user_state['hasSubscribed'] ? true : false,
125 ];
126 }
127
128 /**
129 *
130 * Compiles an array of all assistant data.
131 *
132 * NOTE: Kept in alphabetical order.
133 *
134 * @return array
135 * @throws \Exception
136 */
137 public function generate_frontend_config() {
138
139 $current_user = $this->users->current( $this->user_transform );
140 $theme_service = new ThemeService();
141 $theme = $theme_service->get_current_theme_data();
142
143 return [
144 'adminURLs' => $this->site->get_admin_urls(),
145 'ajaxUrl' => admin_url( 'admin-ajax.php' ),
146 'apiRoot' => esc_url_raw( get_rest_url() ),
147 'attachmentTypes' => [
148 'all' => __( 'All', 'assistant' ),
149 'image' => __( 'Photo', 'assistant' ),
150 'document' => __( 'Document', 'assistant' ),
151 'video' => __( 'Video', 'assistant' ),
152 'audio' => __( 'Audio', 'assistant' ),
153 ],
154 'contentTypes' => $this->posts->get_types(),
155 'contentStatus' => $this->posts->get_stati(),
156 'currentPageView' => $this->site->get_current_view(),
157 'currentUser' => $current_user,
158 'defaultAppName' => 'fl-home',
159 'emptyTrashDays' => EMPTY_TRASH_DAYS,
160 'frameDefaults' => UserState::getFrameDefaults(),
161 'homeUrl' => home_url(),
162 'baseUrl' => get_bloginfo( 'url' ),
163 'isShowingAdminBar' => is_admin_bar_showing(),
164 'isAdmin' => is_admin(),
165 'isSiteAdmin' => is_super_admin(),
166 'isLocalhost' => $this->site->is_local(),
167 'isBBInstalled' => $this->beaver_builder->is_installed(),
168 'mockup' => Mockup::get(),
169 'nonce' => [
170 'api' => wp_create_nonce( 'wp_rest' ),
171 'reply' => wp_create_nonce( 'replyto-comment' ),
172 'replyUnfiltered' => wp_create_nonce( 'unfiltered-html-comment' ),
173 'updates' => wp_create_nonce( 'updates' ),
174 ],
175 'name' => 'Assistant Plugin',
176 'version' => FL_ASSISTANT_VERSION,
177 'pluginURL' => FL_ASSISTANT_URL,
178 'taxonomies' => $this->posts->get_taxononies(),
179 'userRoles' => $this->users->get_roles(),
180 'cloudConfig' => [
181 'apiUrl' => FL_ASSISTANT_CLOUD_URL,
182 'appUrl' => FL_ASSISTANT_CLOUD_APP_URL,
183 'pusherKey' => FL_ASSISTANT_PUSHER_KEY,
184 'pusherCluster' => FL_ASSISTANT_PUSHER_CLUSTER,
185 ],
186 'embedInBB' => FL_ASST_SUPPORTS_BB,
187 'isBBExtension' => BeaverBuilderHelper::is_assistant_extension(),
188 'themeSlug' => $theme['slug'],
189 'themeParentSlug' => $theme['parent'] ? $theme['parent']['slug'] : null,
190 ];
191 }
192
193 /**
194 * Check if the frontend scripts/styles should be enqueued
195 */
196 public function should_enqueue() {
197
198 // Don't enqueue outside of BB if in extension mode.
199 if ( BeaverBuilderHelper::is_assistant_extension() && class_exists( 'FLBuilder' ) && ! FLBuilderModel::is_builder_active() ) {
200 return false;
201 }
202
203 // Users must be logged in.
204 if ( ! is_user_logged_in() ) {
205 return false;
206 }
207
208 // Don't show Assistant in customizer.
209 if ( is_customize_preview() ) {
210 return false;
211 }
212
213 // Don't show in iframes.
214 if ( defined( 'IFRAME_REQUEST' ) && IFRAME_REQUEST && ! isset( $_GET['fl_builder_ui'] ) ) {
215 return false;
216 }
217
218 // Don't show in post previews.
219 if ( isset( $_GET['fl_asst_post_preview'] ) ) {
220 return false;
221 }
222
223 // Don't show in Oxygen.
224 if ( isset( $_GET['ct_builder'] ) ) {
225 return false;
226 }
227
228 // User is logged in, and the current request is not customizer or an iframe
229 $state = UserState::get();
230
231 // Don't show Assistant in the WP Admin if the user has turned it off.
232 if ( is_admin() && ! $state['shouldShowInAdmin'] ) {
233 return false;
234 }
235
236 // There is no read-only assistant (for now). Users must be able to edit.
237 if ( ! current_user_can( 'edit_others_posts' ) ) {
238 return false;
239 }
240
241 return apply_filters( 'fl_assistant_should_enqueue', true );
242 }
243
244 public function register_vendors() {
245
246 $url = FL_ASSISTANT_URL;
247 $ver = FL_ASSISTANT_VERSION;
248
249 // Bundled vendors
250 // These vendors are special in that they attache a global reference to themselves on the FL.vendors object.
251 // classnames
252 wp_register_script( 'classnames', $url . 'build/vendor-classnames.js', [], $ver, false );
253
254 // redux
255 wp_register_script( 'redux', $url . 'build/vendor-redux.js', [], $ver, false );
256
257 // react-router-dom
258 wp_register_script( 'react-router-dom', $url . 'build/vendor-react-router-dom.js', [ 'react' ], $ver, false );
259
260 // framer-motion
261 wp_register_script( 'framer-motion', $url . 'build/vendor-framer-motion.js', [ 'react' ], $ver, false );
262
263 // react-laag
264 wp_register_script( 'react-laag', $url . 'build/vendor-react-laag.js', [ 'react' ], $ver, false );
265
266 // HTML2Canvas
267 wp_register_script( 'html2canvas', $url . 'build/vendor-html2canvas.js', [], $ver, false );
268
269 // @beaverbuilder/app-core
270 wp_register_script( 'bb-app-core', $url . 'build/vendor-bb-app-core.js', [ 'react', 'redux' ], $ver, false );
271
272 // @beaverbuilder/cloud
273 wp_register_script( 'bb-cloud', $url . 'build/vendor-bb-cloud.js', [ 'react' ], $ver, false );
274
275 // @beaverbuilder/icons
276 wp_register_script( 'bb-icons', $url . 'build/vendor-bb-icons.js', [ 'react' ], $ver, false );
277
278 // @beaverbuilder/fluid
279 $fluid_deps = [
280 'react',
281 'react-dom',
282 'redux',
283 'react-router-dom',
284 'classnames',
285 'framer-motion',
286 'react-laag',
287 'wp-i18n',
288 'bb-icons'
289 ];
290 wp_register_script( 'bb-fluid', $url . 'build/vendor-bb-fluid.js', $fluid_deps, $ver, false );
291 wp_register_style( 'bb-fluid', $url . 'build/vendor-bb-fluid.css', [], $ver, null );
292
293 // @beaverbuilder/forms
294 wp_register_script( 'bb-forms', $url . 'build/vendor-bb-forms.js', [ 'bb-fluid' ], $ver, false );
295 wp_register_style( 'bb-forms', $url . 'build/vendor-bb-forms.css', [ 'bb-fluid' ], $ver, null );
296
297 }
298
299 /**
300 * Enqueue all scripts and styles
301 */
302 public function enqueue() {
303
304 $url = FL_ASSISTANT_URL;
305 $ver = FL_ASSISTANT_VERSION;
306
307 if ( $this->should_enqueue() ) {
308
309 self::register_vendors();
310
311 $config = $this->generate_frontend_config();
312 $state = $this->generate_initial_state();
313
314 // API - loaded in header
315 $js_deps = [
316 'wp-i18n',
317 'wp-keycodes',
318 'wp-dom-ready',
319 'wp-components',
320 'wp-date',
321 'bb-fluid',
322 'bb-forms',
323 'bb-app-core',
324 'bb-cloud',
325 'bb-icons'
326 ];
327 $css_deps = [
328 'bb-fluid',
329 'bb-forms',
330 'wp-components'
331 ];
332
333 // System - loaded in header
334 wp_enqueue_style( 'fl-assistant', $url . 'build/system.css', $css_deps, $ver, null );
335 wp_enqueue_script( 'fl-assistant', $url . 'build/system.js', $js_deps, $ver, false );
336
337 wp_localize_script( 'fl-assistant', 'FL_ASSISTANT_CONFIG', $config );
338 wp_localize_script( 'fl-assistant', 'FL_ASSISTANT_INITIAL_STATE', $state );
339
340 // Apps - loaded in footer
341 $apps = BeaverBuilderHelper::is_assistant_extension() ? 'apps-cloud.js' : 'apps.js';
342 wp_enqueue_script( 'fl-assistant-apps', $url . "build/$apps", [ 'fl-assistant', 'html2canvas' ], $ver, true );
343
344 // Render - loaded in footer
345 wp_enqueue_script( 'fl-assistant-render', $url . 'build/render.js', [ 'fl-assistant' ], $ver, true );
346 wp_enqueue_style( 'fl-assistant-render', $url . 'build/render.css', [ 'fl-assistant' ], $ver, null );
347
348 // WordPress Media Uploader
349 wp_enqueue_media();
350
351 do_action( 'fl_assistant_enqueue' );
352 }
353 }
354
355 public function __invoke() {
356 $this->enqueue();
357 }
358 }
359