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

341 lines 9.6 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 // User is logged in, and the current request is not customizer or an iframe
209 $state = UserState::get();
210
211 // Don't show Assistant in the WP Admin if the user has turned it off.
212 if ( is_admin() && ! $state['shouldShowInAdmin'] ) {
213 return false;
214 }
215
216 // There is no read-only assistant (for now). Users must be able to edit.
217 if ( ! current_user_can( 'edit_others_posts' ) ) {
218 return false;
219 }
220
221 return true;
222 }
223
224 public function register_vendors() {
225
226 $url = FL_ASSISTANT_URL;
227 $ver = FL_ASSISTANT_VERSION;
228
229 // Bundled vendors
230 // These vendors are special in that they attache a global reference to themselves on the FL.vendors object.
231 // classnames
232 wp_register_script( 'classnames', $url . 'build/vendor-classnames.js', [], $ver, false );
233
234 // redux
235 wp_register_script( 'redux', $url . 'build/vendor-redux.js', [], $ver, false );
236
237 // react-router-dom
238 wp_register_script( 'react-router-dom', $url . 'build/vendor-react-router-dom.js', [ 'react' ], $ver, false );
239
240 // framer-motion
241 wp_register_script( 'framer-motion', $url . 'build/vendor-framer-motion.js', [ 'react' ], $ver, false );
242
243 // react-laag
244 wp_register_script( 'react-laag', $url . 'build/vendor-react-laag.js', [ 'react' ], $ver, false );
245
246 // HTML2Canvas
247 wp_register_script( 'html2canvas', $url . 'build/vendor-html2canvas.js', [], $ver, false );
248
249 // @beaverbuilder/app-core
250 wp_register_script( 'bb-app-core', $url . 'build/vendor-bb-app-core.js', [ 'react', 'redux' ], $ver, false );
251
252 // @beaverbuilder/cloud
253 wp_register_script( 'bb-cloud', $url . 'build/vendor-bb-cloud.js', [ 'react' ], $ver, false );
254
255 // @beaverbuilder/icons
256 wp_register_script( 'bb-icons', $url . 'build/vendor-bb-icons.js', [ 'react' ], $ver, false );
257
258 // @beaverbuilder/fluid
259 $fluid_deps = [
260 'react',
261 'react-dom',
262 'redux',
263 'react-router-dom',
264 'classnames',
265 'framer-motion',
266 'react-laag',
267 'wp-i18n',
268 'bb-icons'
269 ];
270 wp_register_script( 'bb-fluid', $url . 'build/vendor-bb-fluid.js', $fluid_deps, $ver, false );
271 wp_register_style( 'bb-fluid', $url . 'build/vendor-bb-fluid.css', [], $ver, null );
272
273 // @beaverbuilder/forms
274 wp_register_script( 'bb-forms', $url . 'build/vendor-bb-forms.js', [ 'bb-fluid' ], $ver, false );
275 wp_register_style( 'bb-forms', $url . 'build/vendor-bb-forms.css', [ 'bb-fluid' ], $ver, null );
276
277 }
278
279 /**
280 * Enqueue all scripts and styles
281 */
282 public function enqueue() {
283
284 $url = FL_ASSISTANT_URL;
285 $ver = FL_ASSISTANT_VERSION;
286
287 if ( $this->should_enqueue() ) {
288
289 self::register_vendors();
290
291 $config = $this->generate_frontend_config();
292 $state = $this->generate_initial_state();
293
294 // API - loaded in header
295 $js_deps = [
296 'wp-i18n',
297 'wp-keycodes',
298 'wp-dom-ready',
299 'wp-components',
300 'wp-date',
301 'bb-fluid',
302 'bb-forms',
303 'bb-app-core',
304 'bb-cloud',
305 'bb-icons'
306 ];
307 $css_deps = [
308 'bb-fluid',
309 'bb-forms',
310 'wp-components'
311 ];
312
313 // System - loaded in header
314 wp_enqueue_style( 'fl-assistant', $url . 'build/system.css', $css_deps, $ver, null );
315 wp_enqueue_script( 'fl-assistant', $url . 'build/system.js', $js_deps, $ver, false );
316
317 wp_localize_script( 'fl-assistant', 'FL_ASSISTANT_CONFIG', $config );
318 wp_localize_script( 'fl-assistant', 'FL_ASSISTANT_INITIAL_STATE', $state );
319
320 // Apps - loaded in footer
321 wp_enqueue_script( 'fl-assistant-apps', $url . 'build/apps.js', [ 'fl-assistant', 'html2canvas' ], $ver, true );
322
323 // Currently don't need apps stylesheet
324 //wp_enqueue_style( 'fl-assistant-apps', $url . 'build/apps.css', [ 'fl-assistant' ], $ver, null );
325
326 // Render - loaded in footer
327 wp_enqueue_script( 'fl-assistant-render', $url . 'build/render.js', [ 'fl-assistant' ], $ver, true );
328 wp_enqueue_style( 'fl-assistant-render', $url . 'build/render.css', [ 'fl-assistant' ], $ver, null );
329
330 // WordPress Media Uploader
331 wp_enqueue_media();
332
333 do_action( 'fl_assistant_enqueue' );
334 }
335 }
336
337 public function __invoke() {
338 $this->enqueue();
339 }
340 }
341