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

346 lines 9.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 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', 'fl-assistant' ),
144 'image' => __( 'Photo', 'fl-assistant' ),
145 'document' => __( 'Document', 'fl-assistant' ),
146 'video' => __( 'Video', 'fl-assistant' ),
147 'audio' => __( 'Audio', 'fl-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 'isShowingAdminBar' => is_admin_bar_showing(),
158 'isAdmin' => is_admin(),
159 'isSiteAdmin' => is_super_admin(),
160 'isLocalhost' => $this->site->is_local(),
161 'mockup' => Mockup::get(),
162 'nonce' => [
163 'api' => wp_create_nonce( 'wp_rest' ),
164 'reply' => wp_create_nonce( 'replyto-comment' ),
165 'replyUnfiltered' => wp_create_nonce( 'unfiltered-html-comment' ),
166 'updates' => wp_create_nonce( 'updates' ),
167 ],
168 'pluginURL' => FL_ASSISTANT_URL,
169 'taxonomies' => $this->posts->get_taxononies(),
170 'userRoles' => $this->users->get_roles(),
171 'cloudConfig' => [
172 'apiUrl' => FL_ASSISTANT_CLOUD_URL,
173 'appUrl' => FL_ASSISTANT_CLOUD_APP_URL,
174 'pusherKey' => FL_ASSISTANT_PUSHER_KEY,
175 'pusherCluster' => FL_ASSISTANT_PUSHER_CLUSTER,
176 ],
177 'embedInBB' => FL_ASST_SUPPORTS_BB,
178 'themeSlug' => $theme['slug'],
179 'themeParentSlug' => $theme['parent'] ? $theme['parent']['slug'] : null,
180 ];
181 }
182
183 /**
184 * Check if the frontend scripts/styles should be enqueued
185 */
186 public function should_enqueue() {
187
188 // Users must be logged in.
189 if ( ! is_user_logged_in() ) {
190 return false;
191 }
192
193 // Don't show Assistant in customizer.
194 if ( is_customize_preview() ) {
195 return false;
196 }
197
198 // Don't show in admin iframes.
199 if ( defined( 'IFRAME_REQUEST' ) && IFRAME_REQUEST ) {
200 return false;
201 }
202
203 // Don't show in post previews.
204 if ( isset( $_GET['fl_asst_post_preview'] ) ) {
205 return false;
206 }
207
208 // Don't show in Oxygen.
209 if ( isset( $_GET['ct_builder'] ) ) {
210 return false;
211 }
212
213 // User is logged in, and the current request is not customizer or an iframe
214 $state = UserState::get();
215
216 // Don't show Assistant in the WP Admin if the user has turned it off.
217 if ( is_admin() && ! $state['shouldShowInAdmin'] ) {
218 return false;
219 }
220
221 // There is no read-only assistant (for now). Users must be able to edit.
222 if ( ! current_user_can( 'edit_others_posts' ) ) {
223 return false;
224 }
225
226 return apply_filters( 'fl_assistant_should_enqueue', true );
227 }
228
229 public function register_vendors() {
230
231 $url = FL_ASSISTANT_URL;
232 $ver = FL_ASSISTANT_VERSION;
233
234 // Bundled vendors
235 // These vendors are special in that they attache a global reference to themselves on the FL.vendors object.
236 // classnames
237 wp_register_script( 'classnames', $url . 'build/vendor-classnames.js', [], $ver, false );
238
239 // redux
240 wp_register_script( 'redux', $url . 'build/vendor-redux.js', [], $ver, false );
241
242 // react-router-dom
243 wp_register_script( 'react-router-dom', $url . 'build/vendor-react-router-dom.js', [ 'react' ], $ver, false );
244
245 // framer-motion
246 wp_register_script( 'framer-motion', $url . 'build/vendor-framer-motion.js', [ 'react' ], $ver, false );
247
248 // react-laag
249 wp_register_script( 'react-laag', $url . 'build/vendor-react-laag.js', [ 'react' ], $ver, false );
250
251 // HTML2Canvas
252 wp_register_script( 'html2canvas', $url . 'build/vendor-html2canvas.js', [], $ver, false );
253
254 // @beaverbuilder/app-core
255 wp_register_script( 'bb-app-core', $url . 'build/vendor-bb-app-core.js', [ 'react', 'redux' ], $ver, false );
256
257 // @beaverbuilder/cloud
258 wp_register_script( 'bb-cloud', $url . 'build/vendor-bb-cloud.js', [ 'react' ], $ver, false );
259
260 // @beaverbuilder/icons
261 wp_register_script( 'bb-icons', $url . 'build/vendor-bb-icons.js', [ 'react' ], $ver, false );
262
263 // @beaverbuilder/fluid
264 $fluid_deps = [
265 'react',
266 'react-dom',
267 'redux',
268 'react-router-dom',
269 'classnames',
270 'framer-motion',
271 'react-laag',
272 'wp-i18n',
273 'bb-icons'
274 ];
275 wp_register_script( 'bb-fluid', $url . 'build/vendor-bb-fluid.js', $fluid_deps, $ver, false );
276 wp_register_style( 'bb-fluid', $url . 'build/vendor-bb-fluid.css', [], $ver, null );
277
278 // @beaverbuilder/forms
279 wp_register_script( 'bb-forms', $url . 'build/vendor-bb-forms.js', [ 'bb-fluid' ], $ver, false );
280 wp_register_style( 'bb-forms', $url . 'build/vendor-bb-forms.css', [ 'bb-fluid' ], $ver, null );
281
282 }
283
284 /**
285 * Enqueue all scripts and styles
286 */
287 public function enqueue() {
288
289 $url = FL_ASSISTANT_URL;
290 $ver = FL_ASSISTANT_VERSION;
291
292 if ( $this->should_enqueue() ) {
293
294 self::register_vendors();
295
296 $config = $this->generate_frontend_config();
297 $state = $this->generate_initial_state();
298
299 // API - loaded in header
300 $js_deps = [
301 'wp-i18n',
302 'wp-keycodes',
303 'wp-dom-ready',
304 'wp-components',
305 'wp-date',
306 'bb-fluid',
307 'bb-forms',
308 'bb-app-core',
309 'bb-cloud',
310 'bb-icons'
311 ];
312 $css_deps = [
313 'bb-fluid',
314 'bb-forms',
315 'wp-components'
316 ];
317
318 // System - loaded in header
319 wp_enqueue_style( 'fl-assistant', $url . 'build/system.css', $css_deps, $ver, null );
320 wp_enqueue_script( 'fl-assistant', $url . 'build/system.js', $js_deps, $ver, false );
321
322 wp_localize_script( 'fl-assistant', 'FL_ASSISTANT_CONFIG', $config );
323 wp_localize_script( 'fl-assistant', 'FL_ASSISTANT_INITIAL_STATE', $state );
324
325 // Apps - loaded in footer
326 wp_enqueue_script( 'fl-assistant-apps', $url . 'build/apps.js', [ 'fl-assistant', 'html2canvas' ], $ver, true );
327
328 // Currently don't need apps stylesheet
329 //wp_enqueue_style( 'fl-assistant-apps', $url . 'build/apps.css', [ 'fl-assistant' ], $ver, null );
330
331 // Render - loaded in footer
332 wp_enqueue_script( 'fl-assistant-render', $url . 'build/render.js', [ 'fl-assistant' ], $ver, true );
333 wp_enqueue_style( 'fl-assistant-render', $url . 'build/render.css', [ 'fl-assistant' ], $ver, null );
334
335 // WordPress Media Uploader
336 wp_enqueue_media();
337
338 do_action( 'fl_assistant_enqueue' );
339 }
340 }
341
342 public function __invoke() {
343 $this->enqueue();
344 }
345 }
346