Completed
Branch CASC/base (8e91dc)
by
unknown
25:15 queued 14:16
created
core/libraries/batch/JobHandlers/PreviewEventDeletion.php 1 patch
Indentation   +122 added lines, -122 removed lines patch added patch discarded remove patch
@@ -26,130 +26,130 @@
 block discarded – undo
26 26
 class PreviewEventDeletion extends JobHandler
27 27
 {
28 28
 
29
-    // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
30
-    /**
31
-     *
32
-     * @param JobParameters $job_parameters
33
-     * @throws BatchRequestException
34
-     * @return JobStepResponse
35
-     */
36
-    public function create_job(JobParameters $job_parameters)
37
-    {
38
-        // Set the "root" model objects we will want to delete (record their ID and model)
39
-        $event_ids = $job_parameters->request_datum('EVT_IDs', array());
40
-        // Find all the root nodes to delete (this isn't just events, because there's other data, like related tickets,
41
-        // prices, message templates, etc, whose model definition doesn't make them dependent on events. But,
42
-        // we have no UI to access them independent of events, so they may as well get deleted too.)
43
-        $model_objects_to_delete = [];
44
-        foreach ($event_ids as $event_id) {
45
-            $event = EEM_Event::instance()->get_one_by_ID($event_id);
46
-            // Also, we want to delete their related, non-global, tickets, prices and message templates
47
-            $related_non_global_tickets = EEM_Ticket::instance()->get_all_deleted_and_undeleted(
48
-                [
49
-                    [
50
-                        'TKT_is_default' => false,
51
-                        'Datetime.EVT_ID' => $event_id
52
-                    ]
53
-                ]
54
-            );
55
-            $related_non_global_prices = EEM_Price::instance()->get_all_deleted_and_undeleted(
56
-                [
57
-                    [
58
-                        'PRC_is_default' => false,
59
-                        'Ticket.Datetime.EVT_ID' => $event_id
60
-                    ]
61
-                ]
62
-            );
63
-            $model_objects_to_delete = array_merge(
64
-                $model_objects_to_delete,
65
-                [$event],
66
-                $related_non_global_tickets,
67
-                $related_non_global_prices
68
-            );
69
-        }
70
-        $roots = [];
71
-        foreach ($model_objects_to_delete as $model_object) {
72
-            $roots[] = new ModelObjNode($model_object->ID(), $model_object->get_model());
73
-        }
74
-        $job_parameters->add_extra_data('roots', $roots);
75
-        // Set an estimate of how long this will take (we're discovering as we go, so it seems impossible to give
76
-        // an accurate count.)
77
-        $estimated_work_per_model_obj = 100;
78
-        $job_parameters->set_job_size(count($roots) * $estimated_work_per_model_obj);
79
-        return new JobStepResponse(
80
-            $job_parameters,
81
-            esc_html__('Generating preview of data to be deleted...', 'event_espresso')
82
-        );
83
-    }
29
+	// phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
30
+	/**
31
+	 *
32
+	 * @param JobParameters $job_parameters
33
+	 * @throws BatchRequestException
34
+	 * @return JobStepResponse
35
+	 */
36
+	public function create_job(JobParameters $job_parameters)
37
+	{
38
+		// Set the "root" model objects we will want to delete (record their ID and model)
39
+		$event_ids = $job_parameters->request_datum('EVT_IDs', array());
40
+		// Find all the root nodes to delete (this isn't just events, because there's other data, like related tickets,
41
+		// prices, message templates, etc, whose model definition doesn't make them dependent on events. But,
42
+		// we have no UI to access them independent of events, so they may as well get deleted too.)
43
+		$model_objects_to_delete = [];
44
+		foreach ($event_ids as $event_id) {
45
+			$event = EEM_Event::instance()->get_one_by_ID($event_id);
46
+			// Also, we want to delete their related, non-global, tickets, prices and message templates
47
+			$related_non_global_tickets = EEM_Ticket::instance()->get_all_deleted_and_undeleted(
48
+				[
49
+					[
50
+						'TKT_is_default' => false,
51
+						'Datetime.EVT_ID' => $event_id
52
+					]
53
+				]
54
+			);
55
+			$related_non_global_prices = EEM_Price::instance()->get_all_deleted_and_undeleted(
56
+				[
57
+					[
58
+						'PRC_is_default' => false,
59
+						'Ticket.Datetime.EVT_ID' => $event_id
60
+					]
61
+				]
62
+			);
63
+			$model_objects_to_delete = array_merge(
64
+				$model_objects_to_delete,
65
+				[$event],
66
+				$related_non_global_tickets,
67
+				$related_non_global_prices
68
+			);
69
+		}
70
+		$roots = [];
71
+		foreach ($model_objects_to_delete as $model_object) {
72
+			$roots[] = new ModelObjNode($model_object->ID(), $model_object->get_model());
73
+		}
74
+		$job_parameters->add_extra_data('roots', $roots);
75
+		// Set an estimate of how long this will take (we're discovering as we go, so it seems impossible to give
76
+		// an accurate count.)
77
+		$estimated_work_per_model_obj = 100;
78
+		$job_parameters->set_job_size(count($roots) * $estimated_work_per_model_obj);
79
+		return new JobStepResponse(
80
+			$job_parameters,
81
+			esc_html__('Generating preview of data to be deleted...', 'event_espresso')
82
+		);
83
+	}
84 84
 
85
-    /**
86
-     * Performs another step of the job
87
-     * @param JobParameters $job_parameters
88
-     * @param int $batch_size
89
-     * @return JobStepResponse
90
-     * @throws BatchRequestException
91
-     */
92
-    public function continue_job(JobParameters $job_parameters, $batch_size = 50)
93
-    {
94
-        // Serializing and unserializing is what really makes this drag on (eg on localhost, the ajax requests took
95
-        // about 4 seconds when the batch size was 250, but 3 seconds when the batch size was 50. So like
96
-        // 50% of the request is just serializing and unserializing.) So, make the batches much bigger.
97
-        $batch_size *= 3;
98
-        $units_processed = 0;
99
-        foreach ($job_parameters->extra_datum('roots', array()) as $root_node) {
100
-            if ($units_processed >= $batch_size) {
101
-                break;
102
-            }
103
-            if (! $root_node instanceof ModelObjNode) {
104
-                throw new InvalidClassException('ModelObjNode');
105
-            }
106
-            if ($root_node->isComplete()) {
107
-                continue;
108
-            }
109
-            $units_processed += $root_node->visit($batch_size - $units_processed);
110
-        }
111
-        $job_parameters->mark_processed($units_processed);
112
-        // If the most-recently processed root node is complete, we must be all done because we're doing them
113
-        // sequentially.
114
-        if (isset($root_node) && $root_node instanceof ModelObjNode && $root_node->isComplete()) {
115
-            $job_parameters->set_status(JobParameters::status_complete);
116
-            // Show a full progress bar.
117
-            $job_parameters->set_units_processed($job_parameters->job_size());
118
-            $deletion_job_code = $job_parameters->request_datum('deletion_job_code');
119
-            add_option('ee_deletion_' . $deletion_job_code, $job_parameters->extra_datum('roots'), null, 'no');
120
-            return new JobStepResponse(
121
-                $job_parameters,
122
-                esc_html__('Finished identifying items for deletion.', 'event_espresso'),
123
-                [
124
-                    'deletion_job_code' => $deletion_job_code
125
-                ]
126
-            );
127
-        } else {
128
-            // Because the job size was a guess, it may have likely been provden wrong. We don't want to show more work
129
-            // done than we originally said there would be. So adjust the estimate.
130
-            if (($job_parameters->units_processed() / $job_parameters->job_size()) > .8) {
131
-                $job_parameters->set_job_size($job_parameters->job_size() * 2);
132
-            }
133
-            return new JobStepResponse(
134
-                $job_parameters,
135
-                sprintf(
136
-                    esc_html__('Identified %d items for deletion.', 'event_espresso'),
137
-                    $units_processed
138
-                )
139
-            );
140
-        }
141
-    }
85
+	/**
86
+	 * Performs another step of the job
87
+	 * @param JobParameters $job_parameters
88
+	 * @param int $batch_size
89
+	 * @return JobStepResponse
90
+	 * @throws BatchRequestException
91
+	 */
92
+	public function continue_job(JobParameters $job_parameters, $batch_size = 50)
93
+	{
94
+		// Serializing and unserializing is what really makes this drag on (eg on localhost, the ajax requests took
95
+		// about 4 seconds when the batch size was 250, but 3 seconds when the batch size was 50. So like
96
+		// 50% of the request is just serializing and unserializing.) So, make the batches much bigger.
97
+		$batch_size *= 3;
98
+		$units_processed = 0;
99
+		foreach ($job_parameters->extra_datum('roots', array()) as $root_node) {
100
+			if ($units_processed >= $batch_size) {
101
+				break;
102
+			}
103
+			if (! $root_node instanceof ModelObjNode) {
104
+				throw new InvalidClassException('ModelObjNode');
105
+			}
106
+			if ($root_node->isComplete()) {
107
+				continue;
108
+			}
109
+			$units_processed += $root_node->visit($batch_size - $units_processed);
110
+		}
111
+		$job_parameters->mark_processed($units_processed);
112
+		// If the most-recently processed root node is complete, we must be all done because we're doing them
113
+		// sequentially.
114
+		if (isset($root_node) && $root_node instanceof ModelObjNode && $root_node->isComplete()) {
115
+			$job_parameters->set_status(JobParameters::status_complete);
116
+			// Show a full progress bar.
117
+			$job_parameters->set_units_processed($job_parameters->job_size());
118
+			$deletion_job_code = $job_parameters->request_datum('deletion_job_code');
119
+			add_option('ee_deletion_' . $deletion_job_code, $job_parameters->extra_datum('roots'), null, 'no');
120
+			return new JobStepResponse(
121
+				$job_parameters,
122
+				esc_html__('Finished identifying items for deletion.', 'event_espresso'),
123
+				[
124
+					'deletion_job_code' => $deletion_job_code
125
+				]
126
+			);
127
+		} else {
128
+			// Because the job size was a guess, it may have likely been provden wrong. We don't want to show more work
129
+			// done than we originally said there would be. So adjust the estimate.
130
+			if (($job_parameters->units_processed() / $job_parameters->job_size()) > .8) {
131
+				$job_parameters->set_job_size($job_parameters->job_size() * 2);
132
+			}
133
+			return new JobStepResponse(
134
+				$job_parameters,
135
+				sprintf(
136
+					esc_html__('Identified %d items for deletion.', 'event_espresso'),
137
+					$units_processed
138
+				)
139
+			);
140
+		}
141
+	}
142 142
 
143
-    /**
144
-     * Performs any clean-up logic when we know the job is completed
145
-     * @param JobParameters $job_parameters
146
-     * @return JobStepResponse
147
-     * @throws BatchRequestException
148
-     */
149
-    public function cleanup_job(JobParameters $job_parameters)
150
-    {
151
-        // Nothing much to do. We can't delete the option with the built tree because we may need it in a moment for the deletion
152
-    }
143
+	/**
144
+	 * Performs any clean-up logic when we know the job is completed
145
+	 * @param JobParameters $job_parameters
146
+	 * @return JobStepResponse
147
+	 * @throws BatchRequestException
148
+	 */
149
+	public function cleanup_job(JobParameters $job_parameters)
150
+	{
151
+		// Nothing much to do. We can't delete the option with the built tree because we may need it in a moment for the deletion
152
+	}
153 153
 }
154 154
 // End of file EventDeletion.php
155 155
 // Location: EventEspressoBatchRequest\JobHandlers/EventDeletion.php
Please login to merge, or discard this patch.
core/libraries/batch/JobHandlers/ExecuteBatchDeletion.php 1 patch
Indentation   +121 added lines, -121 removed lines patch added patch discarded remove patch
@@ -27,129 +27,129 @@
 block discarded – undo
27 27
 class ExecuteBatchDeletion extends JobHandler
28 28
 {
29 29
 
30
-    // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
31
-    /**
32
-     *
33
-     * @param JobParameters $job_parameters
34
-     * @throws BatchRequestException
35
-     * @return JobStepResponse
36
-     */
37
-    public function create_job(JobParameters $job_parameters)
38
-    {
39
-        $deletion_job_code = $job_parameters->request_datum('deletion_job_code', null);
40
-        $roots = get_option('ee_deletion_'  . $deletion_job_code, null);
41
-        if ($roots === null) {
42
-            throw new UnexpectedEntityException($roots, 'array', esc_html__('The job seems to be stale. Please press the back button in your browser twice.', 'event_espresso'));
43
-        }
44
-        $models_and_ids_to_delete = [];
45
-        foreach ($roots as $root) {
46
-            if (! $root instanceof ModelObjNode) {
47
-                throw new UnexpectedEntityException($root, 'ModelObjNode');
48
-            }
49
-            $models_and_ids_to_delete = array_replace_recursive($models_and_ids_to_delete, $root->getIds());
50
-        }
51
-        $job_parameters->set_extra_data(
52
-            [
53
-                'models_and_ids_to_delete' => $models_and_ids_to_delete
54
-            ]
55
-        );
56
-        // Find the job's actual size.
57
-        $job_size = 0;
58
-        foreach ($models_and_ids_to_delete as $model_name => $ids) {
59
-            $job_size += count($ids);
60
-        }
61
-        $job_parameters->set_job_size($job_size);
62
-        return new JobStepResponse(
63
-            $job_parameters,
64
-            esc_html__('Beginning to delete items...', 'event_espresso')
65
-        );
66
-    }
30
+	// phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
31
+	/**
32
+	 *
33
+	 * @param JobParameters $job_parameters
34
+	 * @throws BatchRequestException
35
+	 * @return JobStepResponse
36
+	 */
37
+	public function create_job(JobParameters $job_parameters)
38
+	{
39
+		$deletion_job_code = $job_parameters->request_datum('deletion_job_code', null);
40
+		$roots = get_option('ee_deletion_'  . $deletion_job_code, null);
41
+		if ($roots === null) {
42
+			throw new UnexpectedEntityException($roots, 'array', esc_html__('The job seems to be stale. Please press the back button in your browser twice.', 'event_espresso'));
43
+		}
44
+		$models_and_ids_to_delete = [];
45
+		foreach ($roots as $root) {
46
+			if (! $root instanceof ModelObjNode) {
47
+				throw new UnexpectedEntityException($root, 'ModelObjNode');
48
+			}
49
+			$models_and_ids_to_delete = array_replace_recursive($models_and_ids_to_delete, $root->getIds());
50
+		}
51
+		$job_parameters->set_extra_data(
52
+			[
53
+				'models_and_ids_to_delete' => $models_and_ids_to_delete
54
+			]
55
+		);
56
+		// Find the job's actual size.
57
+		$job_size = 0;
58
+		foreach ($models_and_ids_to_delete as $model_name => $ids) {
59
+			$job_size += count($ids);
60
+		}
61
+		$job_parameters->set_job_size($job_size);
62
+		return new JobStepResponse(
63
+			$job_parameters,
64
+			esc_html__('Beginning to delete items...', 'event_espresso')
65
+		);
66
+	}
67 67
 
68
-    /**
69
-     * Performs another step of the job
70
-     * @param JobParameters $job_parameters
71
-     * @param int $batch_size
72
-     * @return JobStepResponse
73
-     * @throws BatchRequestException
74
-     */
75
-    public function continue_job(JobParameters $job_parameters, $batch_size = 50)
76
-    {
77
-        // We already have the items IDs. So deleting is really fast. Let's speed it up.
78
-        $batch_size *= 10;
79
-        $units_processed = 0;
80
-        $models_and_ids_to_delete = $job_parameters->extra_datum('models_and_ids_to_delete', []);
81
-        // Build a new list of everything leftover after this request's of deletions.
82
-        $models_and_ids_remaining = [];
83
-        foreach ($models_and_ids_to_delete as $model_name => $ids_to_delete) {
84
-            if ($units_processed < $batch_size) {
85
-                $model = EE_Registry::instance()->load_model($model_name);
86
-                $ids_to_delete_this_query = array_slice($ids_to_delete, 0, $batch_size - $units_processed, true);
87
-                if ($model->has_primary_key_field()) {
88
-                    $where_conditions = [
89
-                        $model->primary_key_name() => [
90
-                            'IN',
91
-                            $ids_to_delete_this_query
92
-                        ]
93
-                    ];
94
-                } else {
95
-                    $where_conditions = [
96
-                        'OR' => []
97
-                    ];
98
-                    foreach ($ids_to_delete_this_query as $index_primary_key_string) {
99
-                        $keys_n_values = $model->parse_index_primary_key_string($index_primary_key_string);
100
-                        $where_conditions['OR'][ 'AND*' . $index_primary_key_string ] = $keys_n_values;
101
-                    }
102
-                }
103
-                // Deleting time!
104
-                // The model's deletion method reports every ROW deleted, and in the case of CPT models that will be
105
-                // two rows deleted for event CPT item. So don't rely on it for the count of items deleted.
106
-                $model->delete_permanently(
107
-                    [
108
-                        $where_conditions
109
-                    ],
110
-                    false
111
-                );
112
-                $units_processed += count($ids_to_delete_this_query);
113
-                $remaining_ids = array_diff_key($ids_to_delete, $ids_to_delete_this_query);
114
-                // If there's any more from this model, we'll do them next time.
115
-                if (count($remaining_ids) > 0) {
116
-                    $models_and_ids_remaining[ $model_name ] = $remaining_ids;
117
-                }
118
-            } else {
119
-                $models_and_ids_remaining[ $model_name ] = $models_and_ids_to_delete[ $model_name ];
120
-            }
121
-        }
122
-        $job_parameters->mark_processed($units_processed);
123
-        // All done deleting for this request. Is there anything to do next time?
124
-        if (empty($models_and_ids_remaining)) {
125
-            $job_parameters->set_status(JobParameters::status_complete);
126
-            return new JobStepResponse(
127
-                $job_parameters,
128
-                esc_html__('Deletion complete.', 'event_espresso')
129
-            );
130
-        }
131
-        $job_parameters->add_extra_data('models_and_ids_to_delete', $models_and_ids_remaining);
132
-        return new JobStepResponse(
133
-            $job_parameters,
134
-            sprintf(
135
-                esc_html__('Deleted %d items.', 'event_espresso'),
136
-                $units_processed
137
-            )
138
-        );
139
-    }
68
+	/**
69
+	 * Performs another step of the job
70
+	 * @param JobParameters $job_parameters
71
+	 * @param int $batch_size
72
+	 * @return JobStepResponse
73
+	 * @throws BatchRequestException
74
+	 */
75
+	public function continue_job(JobParameters $job_parameters, $batch_size = 50)
76
+	{
77
+		// We already have the items IDs. So deleting is really fast. Let's speed it up.
78
+		$batch_size *= 10;
79
+		$units_processed = 0;
80
+		$models_and_ids_to_delete = $job_parameters->extra_datum('models_and_ids_to_delete', []);
81
+		// Build a new list of everything leftover after this request's of deletions.
82
+		$models_and_ids_remaining = [];
83
+		foreach ($models_and_ids_to_delete as $model_name => $ids_to_delete) {
84
+			if ($units_processed < $batch_size) {
85
+				$model = EE_Registry::instance()->load_model($model_name);
86
+				$ids_to_delete_this_query = array_slice($ids_to_delete, 0, $batch_size - $units_processed, true);
87
+				if ($model->has_primary_key_field()) {
88
+					$where_conditions = [
89
+						$model->primary_key_name() => [
90
+							'IN',
91
+							$ids_to_delete_this_query
92
+						]
93
+					];
94
+				} else {
95
+					$where_conditions = [
96
+						'OR' => []
97
+					];
98
+					foreach ($ids_to_delete_this_query as $index_primary_key_string) {
99
+						$keys_n_values = $model->parse_index_primary_key_string($index_primary_key_string);
100
+						$where_conditions['OR'][ 'AND*' . $index_primary_key_string ] = $keys_n_values;
101
+					}
102
+				}
103
+				// Deleting time!
104
+				// The model's deletion method reports every ROW deleted, and in the case of CPT models that will be
105
+				// two rows deleted for event CPT item. So don't rely on it for the count of items deleted.
106
+				$model->delete_permanently(
107
+					[
108
+						$where_conditions
109
+					],
110
+					false
111
+				);
112
+				$units_processed += count($ids_to_delete_this_query);
113
+				$remaining_ids = array_diff_key($ids_to_delete, $ids_to_delete_this_query);
114
+				// If there's any more from this model, we'll do them next time.
115
+				if (count($remaining_ids) > 0) {
116
+					$models_and_ids_remaining[ $model_name ] = $remaining_ids;
117
+				}
118
+			} else {
119
+				$models_and_ids_remaining[ $model_name ] = $models_and_ids_to_delete[ $model_name ];
120
+			}
121
+		}
122
+		$job_parameters->mark_processed($units_processed);
123
+		// All done deleting for this request. Is there anything to do next time?
124
+		if (empty($models_and_ids_remaining)) {
125
+			$job_parameters->set_status(JobParameters::status_complete);
126
+			return new JobStepResponse(
127
+				$job_parameters,
128
+				esc_html__('Deletion complete.', 'event_espresso')
129
+			);
130
+		}
131
+		$job_parameters->add_extra_data('models_and_ids_to_delete', $models_and_ids_remaining);
132
+		return new JobStepResponse(
133
+			$job_parameters,
134
+			sprintf(
135
+				esc_html__('Deleted %d items.', 'event_espresso'),
136
+				$units_processed
137
+			)
138
+		);
139
+	}
140 140
 
141
-    /**
142
-     * Performs any clean-up logic when we know the job is completed
143
-     * @param JobParameters $job_parameters
144
-     * @return JobStepResponse
145
-     * @throws BatchRequestException
146
-     */
147
-    public function cleanup_job(JobParameters $job_parameters)
148
-    {
149
-        delete_option(
150
-            'EEBatchDeletion' . $job_parameters->request_datum('deletion_job_code')
151
-        );
152
-    }
141
+	/**
142
+	 * Performs any clean-up logic when we know the job is completed
143
+	 * @param JobParameters $job_parameters
144
+	 * @return JobStepResponse
145
+	 * @throws BatchRequestException
146
+	 */
147
+	public function cleanup_job(JobParameters $job_parameters)
148
+	{
149
+		delete_option(
150
+			'EEBatchDeletion' . $job_parameters->request_datum('deletion_job_code')
151
+		);
152
+	}
153 153
 }
154 154
 // End of file EventDeletion.php
155 155
 // Location: EventEspressoBatchRequest\JobHandlers/EventDeletion.php
Please login to merge, or discard this patch.