PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.0.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.0.0
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 / Controllers / Admin / Products / ProductsController.php
surecart / app / src / Controllers / Admin / Products Last commit date
ProductScriptsController.php 3 years ago ProductsController.php 3 years ago ProductsListTable.php 3 years ago
ProductsController.php
158 lines
1 <?php
2
3 namespace SureCart\Controllers\Admin\Products;
4
5 use SureCart\Controllers\Admin\AdminController;
6 use SureCart\Models\Product;
7 use SureCartCore\Responses\RedirectResponse;
8 use SureCart\Controllers\Admin\Products\ProductsListTable;
9
10 /**
11 * Handles product admin requests.
12 */
13 class ProductsController extends AdminController {
14 /**
15 * Products index.
16 */
17 public function index() {
18 $table = new ProductsListTable();
19 $table->prepare_items();
20 $this->withHeader(
21 [
22 'products' => [
23 'title' => __( 'Products', 'surecart' ),
24 ],
25 ]
26 );
27 return \SureCart::view( 'admin/products/index' )->with( [ 'table' => $table ] );
28 }
29
30
31 /**
32 * Preload API Requests
33 *
34 * @param \SureCart\Models\Product $product The product.
35 *
36 * @return void
37 */
38 public function preloadAPIRequests( $product ) {
39 $preload_paths = array(
40 array( '/wp/v2/templates', 'OPTIONS' ),
41 '/wp/v2/settings',
42 '/wp/v2/types/wp_template?context=edit',
43 '/wp/v2/types/wp_template-part?context=edit',
44 '/wp/v2/templates?context=edit&per_page=-1',
45 '/wp/v2/template-parts?context=edit&per_page=-1',
46 '/wp/v2/users/me',
47 '/wp/v2/types?context=view',
48 '/wp/v2/types?context=edit',
49 '/wp/v2/templates/' . $product->template_id . '?context=edit',
50 '/wp/v2/template-parts/' . $product->template_part_id . '?context=edit',
51 '/surecart/v1/products/' . $product->id . '?context=edit',
52 );
53
54 wp_add_inline_script(
55 'wp-api-fetch',
56 sprintf(
57 'wp.apiFetch.use( wp.apiFetch.createPreloadingMiddleware( %s ) );',
58 wp_json_encode(
59 array_reduce(
60 $preload_paths,
61 'rest_preload_api_request',
62 array()
63 )
64 )
65 ),
66 'after'
67 );
68 }
69
70 /**
71 * Edit a product.
72 */
73 public function edit( $request ) {
74 // enqueue needed script.
75 add_action( 'admin_enqueue_scripts', \SureCart::closure()->method( ProductScriptsController::class, 'enqueue' ) );
76
77 $product = null;
78
79 if ( $request->query( 'id' ) ) {
80 $product = Product::find( $request->query( 'id' ) );
81
82 if ( is_wp_error( $product ) ) {
83 wp_die( implode( ' ', array_map( 'esc_html', $product->get_error_messages() ) ) );
84 }
85 }
86
87 if ( ! empty( $product ) ) {
88 $this->preloadAPIRequests( $product );
89 }
90
91 // add product link.
92 add_action(
93 'admin_bar_menu',
94 function( $wp_admin_bar ) use ( $product ) {
95 $wp_admin_bar->add_node(
96 [
97 'id' => 'view-product-page',
98 'title' => __( 'View Product', 'surecart' ),
99 'href' => esc_url( $product->permalink ?? '#' ),
100 'meta' => [
101 'class' => empty( $product->permalink ) ? 'hidden' : '',
102 ],
103 ]
104 );
105 },
106 99
107 );
108
109 // return view.
110 return '<div id="app"></div>';
111 }
112
113 public function addInstantCheckoutLink( $wp_admin_bar ) {
114 $wp_admin_bar->add_node(
115 [
116 'id' => 'edit',
117 'title' => __( 'Edit Product', 'surecart' ),
118 'href' => '#',
119 ]
120 );
121 }
122
123 /**
124 * Change the archived attribute in the model
125 *
126 * @param \SureCartCore\Requests\RequestInterface $request Request.
127 * @return void
128 */
129 public function toggleArchive( $request ) {
130 $product = Product::find( $request->query( 'id' ) );
131
132 if ( is_wp_error( $product ) ) {
133 wp_die( implode( ' ', array_map( 'esc_html', $product->get_error_messages() ) ) );
134 }
135
136 $updated = $product->update(
137 [
138 'archived' => ! (bool) $product->archived,
139 ]
140 );
141
142 if ( is_wp_error( $updated ) ) {
143 wp_die( implode( ' ', array_map( 'esc_html', $updated->get_error_messages() ) ) );
144 }
145
146 \SureCart::flash()->add(
147 'success',
148 $updated->archived ? __( 'Product archived.', 'surecart' ) : __( 'Product restored.', 'surecart' )
149 );
150
151 return $this->redirectBack( $request );
152 }
153
154 public function redirectBack( $request ) {
155 return ( new RedirectResponse( $request ) )->back();
156 }
157 }
158