PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.19.4
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.19.4
4.7.2 4.7.1 4.7.0 4.6.6 4.6.5 4.6.4 4.6.3 4.6.2 4.6.1 4.6.0 4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / WordPress / Admin / Menus / AdminMenuPageService.php
surecart / app / src / WordPress / Admin / Menus Last commit date
AdminMenuPageService.php 2 years ago AdminMenuPageServiceProvider.php 2 years ago ProductCollectionsMenuService.php 2 years ago
AdminMenuPageService.php
278 lines
1 <?php
2
3 namespace SureCart\WordPress\Admin\Menus;
4
5 use SureCart\Models\ApiToken;
6
7 /**
8 * Handles creation and enqueueing of admin menu pages and assets.
9 */
10 class AdminMenuPageService {
11 /**
12 * Top level menu slug.
13 *
14 * @var string
15 */
16 protected $slug = 'sc-dashboard';
17
18 /**
19 * Pages
20 *
21 * @var array
22 */
23 protected $pages = [];
24
25 /**
26 * Essential SureCart Pages
27 *
28 * @var array
29 */
30 const ESSENTIAL_PAGES = [
31 'shop',
32 'checkout',
33 'dashboard',
34 ];
35
36 /**
37 * Add menu items.
38 */
39 public function bootstrap() {
40 add_action( 'admin_menu', [ $this, 'registerAdminPages' ] );
41 add_action( 'admin_head', [ $this, 'adminMenuCSS' ] );
42 add_filter( 'parent_file', [ $this, 'forceSelect' ] );
43
44 // Admin bar menus.
45 if ( apply_filters( 'surecart_show_admin_bar_visit_store', true ) ) {
46 add_action( 'admin_bar_menu', array( $this, 'adminBarMenu' ), 31 );
47 }
48 }
49
50 /**
51 * Add the "Visit Store" link in admin bar main menu.
52 *
53 * @since 2.4.0
54 * @param WP_Admin_Bar $wp_admin_bar Admin bar instance.
55 */
56 public function adminBarMenu( $wp_admin_bar ) {
57 if ( ! is_admin() || ! is_admin_bar_showing() ) {
58 return;
59 }
60
61 // Show only when the user is a member of this site, or they're a super admin.
62 if ( ! is_user_member_of_blog() && ! is_super_admin() ) {
63 return;
64 }
65
66 // Don't display when shop page is the same of the page on front.
67 if ( intval( get_option( 'page_on_front' ) ) === \SureCart::pages()->getId( 'shop' ) ) {
68 return;
69 }
70
71 // Add an option to visit the store.
72 $wp_admin_bar->add_node(
73 array(
74 'parent' => 'site-name',
75 'id' => 'view-sc-store',
76 'title' => class_exists( 'WooCommerce' ) ? __( 'Visit SureCart Store', 'surecart' ) : __( 'Visit Store', 'surecart' ),
77 'href' => \SureCart::pages()->url( 'shop' ),
78 )
79 );
80 }
81
82 /**
83 * Make sure these menu items get selected.
84 *
85 * @param string $file The file string.
86 *
87 * @return string
88 */
89 public function forceSelect( $file ) {
90 global $submenu_file;
91 global $post;
92
93 if ( ! empty( $post->ID ) && in_array(
94 $post->ID,
95 [
96 \SureCart::pages()->getId( 'cart', 'sc_cart' ),
97 \SureCart::pages()->getId( 'checkout' ),
98 \SureCart::pages()->getId( 'shop' ),
99 \SureCart::pages()->getId( 'dashboard' ),
100 ]
101 ) ) {
102 $file = 'sc-dashboard';
103 // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
104 $submenu_file = 'post.php?post=' . (int) $post->ID . '&action=edit';
105 }
106
107 return $file;
108 }
109
110 /**
111 * Add some divider css.
112 *
113 * @return void
114 */
115 public function adminMenuCSS(): void {
116 echo '<style>
117 #toplevel_page_sc-dashboard li {
118 clear: both;
119 }
120 #toplevel_page_sc-dashboard li:not(:last-child) a[href^="admin.php?page=sc-customers"]:after {
121 border-bottom: 1px solid hsla(0,0%,100%,.2);
122 display: block;
123 float: left;
124 margin: 13px -15px 8px;
125 content: "";
126 width: calc(100% + 26px);
127 }
128 #toplevel_page_sc-dashboard li:not(:last-child) a[href^="admin.php?page=sc-dashboard"]:after {
129 border-bottom: 1px solid hsla(0,0%,100%,.2);
130 display: block;
131 float: left;
132 margin: 13px -15px 8px;
133 content: "";
134 width: calc(100% + 26px);
135 }
136 #toplevel_page_sc-dashboard li:not(:last-child) a[href^="edit.php?post_type=sc_form"]:after {
137 border-bottom: 1px solid hsla(0,0%,100%,.2);
138 display: block;
139 float: left;
140 margin: 13px -15px 8px;
141 content: "";
142 width: calc(100% + 26px);
143 }
144 </style>';
145 }
146
147 /**
148 * Register admin pages.
149 *
150 * @return void
151 */
152 public function registerAdminPages() {
153 $entitlements = \SureCart::account()->entitlements;
154 if ( ! ApiToken::get() ) {
155 $this->slug = 'sc-getting-started';
156 }
157
158 $logo = file_get_contents( plugin_dir_path( SURECART_PLUGIN_FILE ) . 'images/icon.svg' );
159 \add_menu_page( __( 'Dashboard', 'surecart' ), __( 'SureCart', 'surecart' ), 'manage_sc_shop_settings', $this->slug, '__return_false', 'data:image/svg+xml;base64,' . base64_encode( $logo ), 30.6001 );
160
161 // not yet installed.
162 if ( ! ApiToken::get() ) {
163 $this->pages = [
164 'get-started' => \add_submenu_page( $this->slug, __( 'Get Started', 'surecart' ), __( 'Get Started', 'surecart' ), 'manage_options', $this->slug, '__return_false' ),
165 'complete-signup' => \add_submenu_page( '', __( 'Complete Signup', 'surecart' ), __( 'Complete Signup', 'surecart' ), 'manage_options', 'sc-complete-signup', '__return_false' ),
166 'settings' => \add_submenu_page( $this->slug, __( 'Settings', 'surecart' ), __( 'Settings', 'surecart' ), 'manage_options', 'sc-settings', '__return_false' ),
167 ];
168 return;
169 }
170
171 $this->pages = [
172 'get-started' => \add_submenu_page( $this->slug, __( 'Dashboard', 'surecart' ), __( 'Dashboard', 'surecart' ), 'manage_sc_shop_settings', $this->slug, '__return_false' ),
173 'complete-signup' => \add_submenu_page( '', __( 'Complete Signup', 'surecart' ), __( 'Complete Signup', 'surecart' ), 'manage_options', 'sc-complete-signup', '__return_false' ),
174 'claim-account' => \add_submenu_page( '', __( 'Claim Account', 'surecart' ), __( 'Claim Account', 'surecart' ), 'manage_options', 'sc-claim-account', '__return_false' ),
175 'orders' => \add_submenu_page( $this->slug, __( 'Orders', 'surecart' ), __( 'Orders', 'surecart' ), 'edit_sc_orders', 'sc-orders', '__return_false' ),
176 'checkouts' => in_array( $_GET['page'] ?? '', [ 'sc-checkouts' ] ) ? \add_submenu_page( $this->slug, __( 'Checkouts', 'surecart' ), '' . __( 'Add New', 'surecart' ), 'edit_sc_orders', 'sc-checkouts', '__return_false' ) : null,
177 'abandoned' => in_array( $_GET['page'] ?? '', [ 'sc-orders', 'sc-abandoned-checkouts', 'sc-checkouts' ], true ) ? \add_submenu_page( $this->slug, __( 'Abandoned', 'surecart' ), '' . __( 'Abandoned', 'surecart' ), 'edit_sc_orders', 'sc-abandoned-checkouts', '__return_false' ) : null,
178 'products' => \add_submenu_page( $this->slug, __( 'Products', 'surecart' ), __( 'Products', 'surecart' ), 'edit_sc_products', 'sc-products', '__return_false' ),
179 'product-collections' => in_array( $_GET['page'] ?? '', [ 'sc-products', 'sc-product-groups', 'sc-bumps', 'sc-upsell-funnels', 'sc-product-collections' ], true ) ? \add_submenu_page( $this->slug, __( 'Collections', 'surecart' ), '' . __( 'Collections', 'surecart' ), 'edit_sc_products', 'sc-product-collections', '__return_false' ) : null,
180 'bumps' => ! empty( $entitlements->bumps ) && in_array( $_GET['page'] ?? '', [ 'sc-products', 'sc-product-groups', 'sc-bumps', 'sc-upsell-funnels', 'sc-product-collections' ] ) ? \add_submenu_page( $this->slug, __( 'Order Bumps', 'surecart' ), '' . __( 'Order Bumps', 'surecart' ), 'edit_sc_products', 'sc-bumps', '__return_false' ) : null,
181 'upsells' => in_array( $_GET['page'] ?? '', [ 'sc-products', 'sc-product-groups', 'sc-bumps', 'sc-upsell-funnels', 'sc-product-collections' ] ) ? \add_submenu_page( $this->slug, __( 'Upsells', 'surecart' ), '' . __( 'Upsells', 'surecart' ) . '<span class="awaiting-mod" style="background-color: rgba(255,255,255,0.1);">' . esc_html__( 'Beta', 'surecart' ) . '</span>', 'edit_sc_products', 'sc-upsell-funnels', '__return_false' ) : null,
182 'product-groups' => ! empty( $entitlements->product_groups ) && in_array( $_GET['page'] ?? '', [ 'sc-products', 'sc-product-groups', 'sc-bumps', 'sc-upsell-funnels', 'sc-product-collections' ] ) ? \add_submenu_page( $this->slug, __( 'Upgrade Groups', 'surecart' ), '' . __( 'Upgrade Groups', 'surecart' ), 'edit_sc_products', 'sc-product-groups', '__return_false' ) : null,
183 'coupons' => \add_submenu_page( $this->slug, __( 'Coupons', 'surecart' ), __( 'Coupons', 'surecart' ), 'edit_sc_coupons', 'sc-coupons', '__return_false' ),
184 'licenses' => ! empty( $entitlements->licensing ) ? \add_submenu_page( $this->slug, __( 'Licenses', 'surecart' ), __( 'Licenses', 'surecart' ), 'edit_sc_products', 'sc-licenses', '__return_false' ) : null,
185 'subscriptions' => \add_submenu_page( $this->slug, __( 'Subscriptions', 'surecart' ), __( 'Subscriptions', 'surecart' ), 'edit_sc_subscriptions', 'sc-subscriptions', '__return_false' ),
186 'cancellations' => in_array( $_GET['page'] ?? '', [ 'sc-subscriptions', 'sc-cancellation-insights' ] ) ? \add_submenu_page( $this->slug, __( 'Cancellation Insights', 'surecart' ), '' . __( 'Cancellations', 'surecart' ), 'edit_sc_subscriptions', 'sc-cancellation-insights', '__return_false' ) : null,
187 'customers' => \add_submenu_page( $this->slug, __( 'Customers', 'surecart' ), __( 'Customers', 'surecart' ), 'edit_sc_customers', 'sc-customers', '__return_false' ),
188 'restore' => 'sc-restore' === ( $_GET['page'] ?? '' ) ? \add_submenu_page( null, __( 'Restore', 'surecart' ), __( 'Restore', 'surecart' ), 'manage_options', 'sc-restore', '__return_false' ) : null,
189 'shop' => $this->getPage( 'shop', __( 'Shop', 'surecart' ) ),
190 'checkout' => $this->getPage( 'checkout', __( 'Checkout', 'surecart' ) ),
191 'cart' => $this->addTemplateSubMenuPage( 'cart', __( 'Cart', 'surecart' ), 'surecart/surecart//cart' ),
192 'dashboard' => $this->getPage( 'dashboard', __( 'Customer Area', 'surecart' ) ),
193 'forms' => \add_submenu_page( $this->slug, __( 'Forms', 'surecart' ), __( 'Custom Forms', 'surecart' ), 'edit_posts', 'edit.php?post_type=sc_form', '' ),
194 'settings' => \add_submenu_page( $this->slug, __( 'Settings', 'surecart' ), __( 'Settings', 'surecart' ), 'manage_options', 'sc-settings', '__return_false' ),
195 ];
196 }
197
198 /**
199 * Get the page link.
200 *
201 * @param string $slug The slug.
202 * @param string $name The name.
203 * @param string $post_type The post type.
204 *
205 * @return void
206 */
207 public function getPage( $slug, $name, $post_type = 'page' ) {
208 // add filter to disable shop page menu item.
209 if ( ! get_option( 'surecart_' . $slug . '_admin_menu', true ) ) {
210 return;
211 }
212
213 $page_id = \SureCart::pages()->getId( $slug, $post_type );
214
215 $status = '';
216
217 $post_status = get_post_status( $page_id );
218 if ( 'publish' !== $post_status ) {
219 $status = '<span class="awaiting-mod">' . ( get_post_status_object( $post_status )->label ?? esc_html__( 'Deleted', 'surecart' ) ) . '</span>';
220 }
221
222 return \add_submenu_page( $this->slug, $name, $name . $status, 'manage_options', $this->getSubMenuPageSlug( $slug, $page_id ), '' );
223 }
224
225 /**
226 * Get the page menu slug.
227 *
228 * @param string $slug The slug.
229 * @param int $page_id The page id.
230 */
231 public function getSubMenuPageSlug( $slug, $page_id ) {
232 // check if it is not an essential page.
233 if ( ! in_array( $slug, self::ESSENTIAL_PAGES, true ) ) {
234 return 'post.php?post=' . $page_id . '&action=edit';
235 }
236
237 $post_status = get_post_status( $page_id );
238
239 // check if the page is published.
240 if ( 'publish' === $post_status ) {
241 return 'post.php?post=' . $page_id . '&action=edit';
242 }
243
244 return 'admin.php?page=sc-restore&restore=' . $slug;
245 }
246
247 /**
248 * Add a submenu page for a template.
249 *
250 * @param string $slug The slug.
251 * @param string $name The name.
252 * @param string $template_slug The template slug.
253 *
254 * @return null|string|false
255 */
256 public function addTemplateSubMenuPage( $slug, $name, $template_slug ) {
257 // add filter to disable shop page menu item.
258 if ( ! get_option( 'surecart_' . $slug . '_admin_menu', true ) ) {
259 return;
260 }
261
262 return \add_submenu_page(
263 $this->slug,
264 $name,
265 $name,
266 'manage_options',
267 add_query_arg(
268 [
269 'postId' => rawurlencode( $template_slug ),
270 'postType' => 'wp_template_part',
271 ],
272 'site-editor.php'
273 ),
274 ''
275 );
276 }
277 }
278