PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.22.3
GiveWP – Donation Plugin and Fundraising Platform v2.22.3
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 4 years ago class-metabox-form-data.php 4 years ago dashboard-columns.php 4 years ago metabox.php 6 years ago
class-give-form-duplicator.php
185 lines
1 <?php
2 /**
3 * The class contains logic to clone a donation form.
4 *
5 * @package Give
6 * @subpackage Admin/Forms
7 * @copyright Copyright (c) 2018, GiveWP
8 * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
9 * @since 2.2.0
10 */
11
12 /**
13 * Give_Form_Duplicator class
14 */
15 class Give_Form_Duplicator {
16
17 /**
18 * Clones the Form
19 *
20 * @since 2.2.0
21 *
22 * @return void
23 */
24 static function handler($form_id) {
25 $form_id = give_clean( $form_id ); // @codingStandardsIgnoreLine
26 if( !is_numeric($form_id) || (int)$form_id <= 0)
27 {
28 return false;
29 }
30 $post_data = get_post( $form_id );
31 $current_user = wp_get_current_user();
32
33 if ( isset( $post_data ) && null !== $post_data ) {
34
35 $args = array(
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
77 } else {
78 return false;
79 }
80 }
81
82
83 /**
84 * Clone taxonomies
85 *
86 * @since 2.2.0
87 * @access private
88 *
89 * @param int $new_form_id New form ID.
90 * @param WP_Post $old_form Old form object.
91 */
92 static function duplicate_taxonomies( $new_form_id, $old_form ) {
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
98 $post_terms = wp_get_object_terms(
99 $old_form->ID,
100 $taxonomy,
101 array(
102 'fields' => 'slugs',
103 )
104 );
105
106 wp_set_object_terms(
107 $new_form_id,
108 $post_terms,
109 $taxonomy,
110 false
111 );
112 }
113 }
114
115
116 /**
117 * Clone meta data
118 *
119 * @since 2.2.0
120 * @access private
121 *
122 * @param int $new_form_id New Form ID.
123 * @param WP_Post $old_form Old form object.
124 */
125 static function duplicate_meta_data( $new_form_id, $old_form ) {
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", $old_form->ID );
130
131 $post_meta_data = $wpdb->get_results( $post_meta_query ); // WPCS: db call ok. WPCS: cache ok. WPCS: unprepared SQL OK.
132
133 if ( ! empty( $post_meta_data ) ) {
134
135 $duplicate_query = "INSERT INTO {$wpdb->formmeta} (form_id, meta_key, meta_value) ";
136 $duplicate_query_select = array();
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 global $wpdb;
160
161 $meta_keys = array( '_give_form_sales', '_give_form_earnings' );
162
163 /**
164 * Fire the filter
165 *
166 * @since 2.2.0
167 */
168 $meta_keys = apply_filters( 'give_duplicate_form_reset_stat_meta_keys', $meta_keys );
169 $meta_keys = 'meta_key=\'' . implode( '\' OR meta_key=\'', $meta_keys ) . '\'';
170
171 $wpdb->query(
172 $wpdb->prepare(
173 "
174 UPDATE $wpdb->formmeta
175 SET meta_value=0
176 WHERE form_id=%d
177 AND ({$meta_keys})
178 ",
179 $new_form_id
180 )
181 );
182 }
183 }
184
185