PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 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.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / includes / admin / forms / class-give-form-duplicator.php
give / includes / admin / forms Last commit date
class-give-form-duplicator.php 3 years ago class-metabox-form-data.php 1 day ago dashboard-columns.php 1 year ago metabox.php 6 years ago
class-give-form-duplicator.php
186 lines
1 <?php
2 /**
3 * The class contains logic to clone a donation form.
4 *
5 * @package Give
6 * @since 2.2.0
7 * @copyright Copyright (c) 2018, GiveWP
8 * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9 * @subpackage Admin/Forms
10 */
11
12 /**
13 * Give_Form_Duplicator class
14 */
15 class Give_Form_Duplicator
16 {
17
18 /**
19 * Clones the Form
20 *
21 * @since 2.2.0
22 *
23 * @return bool|int|WP_Error
24 */
25 static function handler($form_id)
26 {
27 $form_id = give_clean($form_id); // @codingStandardsIgnoreLine
28 if ( ! is_numeric($form_id) || (int)$form_id <= 0) {
29 return false;
30 }
31 $post_data = get_post($form_id);
32 $current_user = wp_get_current_user();
33
34 if (isset($post_data) && null !== $post_data) {
35 $args = [
36 'comment_status' => $post_data->comment_status,
37 'ping_status' => $post_data->ping_status,
38 'post_author' => $current_user->ID,
39 'post_content' => $post_data->post_content,
40 'post_date_gmt' => current_time('mysql', true),
41 'post_excerpt' => $post_data->post_excerpt,
42 'post_name' => $post_data->post_name,
43 'post_parent' => $post_data->post_parent,
44 'post_password' => $post_data->post_password,
45 'post_status' => 'draft',
46 'post_title' => $post_data->post_title,
47 'post_type' => $post_data->post_type,
48 'to_ping' => $post_data->to_ping,
49 'menu_order' => $post_data->menu_order,
50 ];
51
52 // Get the ID of the cloned post.
53 $duplicate_form_id = wp_insert_post($args);
54
55 Give_Form_Duplicator::duplicate_taxonomies($duplicate_form_id, $post_data);
56 Give_Form_Duplicator::duplicate_meta_data($duplicate_form_id, $post_data);
57 Give_Form_Duplicator::reset_stats($duplicate_form_id);
58
59 /**
60 * Fire the action
61 *
62 * @since 2.2.0
63 *
64 * @param int $duplicate_form_id Duplicated form ID.
65 * @param int $form_id Form ID.
66 */
67 do_action('give_form_duplicated', $duplicate_form_id, $form_id);
68
69 if ( ! is_wp_error($duplicate_form_id)) {
70 return $duplicate_form_id;
71 } else {
72 return false;
73 }
74
75 exit;
76 } else {
77 return false;
78 }
79 }
80
81
82 /**
83 * Clone taxonomies
84 *
85 * @since 2.2.0
86 * @access private
87 *
88 * @param int $new_form_id New form ID.
89 * @param WP_Post $old_form Old form object.
90 */
91 static function duplicate_taxonomies($new_form_id, $old_form)
92 {
93 // Get the taxonomies of the post type `give_forms`.
94 $taxonomies = get_object_taxonomies($old_form->post_type);
95
96 foreach ($taxonomies as $taxonomy) {
97 $post_terms = wp_get_object_terms(
98 $old_form->ID,
99 $taxonomy,
100 [
101 'fields' => 'slugs',
102 ]
103 );
104
105 wp_set_object_terms(
106 $new_form_id,
107 $post_terms,
108 $taxonomy,
109 false
110 );
111 }
112 }
113
114
115 /**
116 * Clone meta data
117 *
118 * @since 2.2.0
119 * @access private
120 *
121 * @param int $new_form_id New Form ID.
122 * @param WP_Post $old_form Old form object.
123 */
124 static function duplicate_meta_data($new_form_id, $old_form)
125 {
126 global $wpdb;
127
128 // Clone the metadata of the form.
129 $post_meta_query = $wpdb->prepare("SELECT meta_key, meta_value FROM {$wpdb->formmeta} WHERE form_id=%s",
130 $old_form->ID);
131
132 $post_meta_data = $wpdb->get_results($post_meta_query); // WPCS: db call ok. WPCS: cache ok. WPCS: unprepared SQL OK.
133
134 if ( ! empty($post_meta_data)) {
135 $duplicate_query = "INSERT INTO {$wpdb->formmeta} (form_id, meta_key, meta_value) ";
136 $duplicate_query_select = [];
137
138 foreach ($post_meta_data as $meta_data) {
139 $meta_key = $meta_data->meta_key;
140 $meta_value = $meta_data->meta_value;
141 $duplicate_query_select[] = $wpdb->prepare('SELECT %s, %s, %s', $new_form_id, $meta_key, $meta_value);
142 }
143
144 $duplicate_query .= implode(' UNION ALL ', $duplicate_query_select);
145
146 $wpdb->query($duplicate_query); // WPCS: db call ok. WPCS: cache ok. WPCS: unprepared SQL OK.
147 }
148 }
149
150 /**
151 * Reset stats for cloned form
152 *
153 * @since 2.2.0
154 * @access private
155 *
156 * @param int $new_form_id New Form ID.
157 */
158 static function reset_stats($new_form_id)
159 {
160 global $wpdb;
161
162 $meta_keys = ['_give_form_sales', '_give_form_earnings'];
163
164 /**
165 * Fire the filter
166 *
167 * @since 2.2.0
168 */
169 $meta_keys = apply_filters('give_duplicate_form_reset_stat_meta_keys', $meta_keys);
170 $meta_keys = 'meta_key=\'' . implode('\' OR meta_key=\'', $meta_keys) . '\'';
171
172 $wpdb->query(
173 $wpdb->prepare(
174 "
175 UPDATE $wpdb->formmeta
176 SET meta_value=0
177 WHERE form_id=%d
178 AND ({$meta_keys})
179 ",
180 $new_form_id
181 )
182 );
183 }
184 }
185
186