PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.6.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.6.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 / Sync / ContentSyncService.php
surecart / app / src / Sync Last commit date
Concerns 6 months ago Jobs 1 year ago Tasks 1 year ago WooCommerce 3 weeks ago BatchCheckService.php 6 months ago ContentSyncService.php 6 months ago CustomerSyncService.php 1 year ago ImportState.php 2 months ago PostSyncService.php 1 week ago ProductSyncService.php 1 year ago ProductsSyncService.php 1 year ago StoreSyncService.php 1 year ago SyncService.php 2 months ago SyncServiceProvider.php 4 days ago
ContentSyncService.php
172 lines
1 <?php
2
3 namespace SureCart\Sync;
4
5 use SureCart\Models\Import;
6
7 /**
8 * Syncs the content for a given sync key.
9 */
10 class ContentSyncService {
11 /**
12 * The application container.
13 *
14 * @var \SureCart\Application
15 */
16 protected $app;
17
18 /**
19 * The sync key.
20 *
21 * @var string
22 */
23 protected const SYNC_KEY = 'surecart_import_content_sync';
24
25 /**
26 * Constructor.
27 *
28 * @param \SureCart\Application $app The application.
29 */
30 public function __construct( $app ) {
31 $this->app = $app;
32 }
33
34 /**
35 * Bootstrap the service.
36 */
37 public function bootstrap() {
38 // set the content when the product is first synced.
39 add_filter( 'surecart/product/sync/created/props', [ $this, 'setContent' ], 10, 2 );
40 // when the import is created, set a check to make sure products are synced.
41 add_action( 'surecart/models/productimport/created', [ $this, 'setContentBatch' ], 10 );
42 // check the batch, if there is content to sync, sync those products.
43 add_action( 'admin_init', [ $this, 'maybeCheckImport' ] );
44 }
45
46 /**
47 * Get the batch service.
48 *
49 * @return BatchCheckService
50 */
51 protected function batch() {
52 return $this->app->resolve( 'surecart.sync.batch' );
53 }
54
55 /**
56 * Get the sync service.
57 *
58 * @return ProductsSyncService
59 */
60 protected function sync() {
61 return $this->app->resolve( 'surecart.sync.products' );
62 }
63
64 /**
65 * Check if there are any imports to check.
66 *
67 * @return array|bool|\WP_Error
68 */
69 public function maybeCheckImport() {
70 $imports = $this->batch()->getByPrefix( self::SYNC_KEY );
71
72 // there are no imports to check.
73 if ( empty( $imports ) ) {
74 return false;
75 }
76
77 foreach ( $imports as $import_id ) {
78 // find the import.
79 $import = Import::find( $import_id );
80
81 // There was an error.
82 if ( is_wp_error( $import ) ) {
83 return false;
84 }
85
86 // The import is still processing.
87 if ( 'processing' === $import->status ) {
88 \SureCart::notices()->add(
89 [
90 'type' => 'info',
91 'title' => esc_html__( 'SureCart: Getting things ready...', 'surecart' ),
92 'text' => '<p>' . esc_html__( 'We are creating your products and collections in the background. This may take a few minutes.', 'surecart' ) . '</p>',
93 ]
94 );
95 // don't start sync.
96 return false;
97 }
98
99 if ( 'invalid' === $import->status ) {
100 \SureCart::notices()->add(
101 [
102 'type' => 'info',
103 'title' => esc_html__( 'SureCart: There was an issue creating your products.', 'surecart' ),
104 'text' => '<p>' . esc_html__( 'Please try again.', 'surecart' ) . '</p>',
105 ]
106 );
107 }
108
109 // If the import is not invalid or completed, don't start sync.
110 if ( ! in_array( $import->status, [ 'invalid', 'completed' ], true ) ) {
111 // don't start sync.
112 return false;
113 }
114
115 // Remove the batch check.
116 $this->removeContentBatch( $import );
117
118 // already syncing.
119 if ( $this->sync()->isActive() ) {
120 return false;
121 }
122
123 // dispatch the sync.
124 return $this->sync()->dispatch();
125 }
126
127 return false;
128 }
129
130 /**
131 * Set the content.
132 *
133 * @param array $props The props.
134 * @param \SureCart\Models\Model $model The model.
135 *
136 * @return array
137 */
138 public function setContent( $props, \SureCart\Models\Model $model ) {
139 if ( ! isset( $model->metadata->sc_initial_sync_pattern ) ) {
140 return $props;
141 }
142
143 $post = get_post( $model->metadata->sc_initial_sync_pattern );
144
145 // We no longer need the pattern.
146 if ( isset( $post->ID ) ) {
147 wp_delete_post( $post->ID, true );
148 }
149
150 // Return the props with the post content.
151 return array_merge( $props, [ 'post_content' => $post->post_content ?? '' ] );
152 }
153
154 /**
155 * Set a check to make sure products are synced.
156 *
157 * @param \SureCart\Models\Import $import The import.
158 */
159 public function setContentBatch( $import ) {
160 $this->batch()->set( self::SYNC_KEY . $import->id, $import->id );
161 }
162
163 /**
164 * Remove the check to make sure products are synced.
165 *
166 * @param \SureCart\Models\Import $import The import.
167 */
168 public function removeContentBatch( $import ) {
169 $this->batch()->remove( self::SYNC_KEY . $import->id );
170 }
171 }
172