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

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