PluginProbe
Assistant – Every Day Productivity Apps / 1.5.3
Assistant – Every Day Productivity Apps v1.5.3
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 1.5.3, at backend/src/Hooks/Actions/OnEnqueueScripts.php

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