GravityView  1.22.6
The best, easiest way to display Gravity Forms entries on your website.
class-gravityview-change-entry-creator.php
Go to the documentation of this file.
1 <?php
2 
3 /**
4  * @since 1.2
5  */
7 
8  function __construct() {
9 
10  /**
11  * @since 1.5.1
12  */
13  add_action('gform_user_registered', array( $this, 'assign_new_user_to_lead'), 10, 4 );
14 
15  // ONLY ADMIN FROM HERE ON.
16  if( !is_admin() ) { return; }
17 
18  /**
19  * @filter `gravityview_disable_change_entry_creator` Disable the Change Entry Creator functionality
20  * @since 1.7.4
21  * @param boolean $disable Disable the Change Entry Creator functionality. Default: false.
22  */
23  if( apply_filters('gravityview_disable_change_entry_creator', false ) ) {
24  return;
25  }
26 
27  /**
28  * Use `init` to fix bbPress warning
29  * @see https://bbpress.trac.wordpress.org/ticket/2309
30  */
31  add_action('init', array( $this, 'load'), 100 );
32 
33  add_action('plugins_loaded', array( $this, 'prevent_conflicts') );
34 
35  }
36 
37  /**
38  * When an user is created using the User Registration add-on, assign the entry to them
39  *
40  * @since 1.5.1
41  * @uses RGFormsModel::update_lead_property() Modify the entry `created_by` field
42  * @param int $user_id WordPress User ID
43  * @param array $config User registration feed configuration
44  * @param array $entry GF Entry array
45  * @param string $password User password
46  * @return void
47  */
48  function assign_new_user_to_lead( $user_id, $config, $entry = array(), $password = '' ) {
49 
50  /**
51  * Disable assigning the new user to the entry by returning false.
52  * @param int $user_id WordPress User ID
53  * @param array $config User registration feed configuration
54  * @param array $entry GF Entry array
55  */
56  $assign_to_lead = apply_filters( 'gravityview_assign_new_user_to_entry', true, $user_id, $config, $entry );
57 
58  // If filter returns false, do not process
59  if( empty( $assign_to_lead ) ) {
60  return;
61  }
62 
63  // Update the entry. The `false` prevents checking Akismet; `true` disables the user updated hook from firing
64  $result = RGFormsModel::update_lead_property( $entry['id'], 'created_by', $user_id, false, true );
65 
66  if( empty( $result ) ) {
67  $status = __('Error', 'gravityview');
68  } else {
69  $status = __('Success', 'gravityview');
70  }
71 
72  $note = sprintf( _x('%s: Assigned User ID #%d as the entry creator.', 'First parameter: Success or error of the action. Second: User ID number', 'gravityview'), $status, $user_id );
73 
74  do_action( 'gravityview_log_debug', 'GravityView_Change_Entry_Creator[assign_new_user_to_lead] - '.$note );
75 
76  /**
77  * @filter `gravityview_disable_change_entry_creator_note` Disable adding a note when changing the entry creator
78  * @since 1.21.5
79  * @param boolean $disable Disable the Change Entry Creator note. Default: false.
80  */
81  if( apply_filters('gravityview_disable_change_entry_creator_note', false ) ) {
82  return;
83  }
84 
85  GravityView_Entry_Notes::add_note( $entry['id'], -1, 'GravityView', $note, 'gravityview' );
86 
87  }
88 
89  /**
90  * Disable previous functionality; use this one as the canonical.
91  * @return void
92  */
93  function prevent_conflicts() {
94 
95  // Plugin that was provided here:
96  // @link https://gravityview.co/support/documentation/201991205/
97  remove_action("gform_entry_info", 'gravityview_change_entry_creator_form', 10 );
98  remove_action("gform_after_update_entry", 'gravityview_update_entry_creator', 10 );
99 
100  // Disable for Gravity Forms Add-ons 3.6.2 and lower
101  if( class_exists( 'KWS_GF_Change_Lead_Creator' ) ) {
102 
103  $Old_Lead_Creator = new KWS_GF_Change_Lead_Creator;
104 
105  // Now, no validation is required in the methods; let's hook in.
106  remove_action('admin_init', array( $Old_Lead_Creator, 'set_screen_mode' ) );
107 
108  remove_action("gform_entry_info", array( $Old_Lead_Creator, 'add_select' ), 10 );
109 
110  remove_action("gform_after_update_entry", array( $Old_Lead_Creator, 'update_entry_creator' ), 10 );
111  }
112 
113  }
114 
115  /**
116  * @since 3.6.3
117  * @return void
118  */
119  function load() {
120 
121  // Does GF exist?
122  if( !class_exists('GFCommon') ) {
123  return;
124  }
125 
126  // Can the user edit entries?
127  if( ! GVCommon::has_cap( array( 'gravityforms_edit_entries', 'gravityview_edit_entries' ) ) ) {
128  return;
129  }
130 
131  // If screen mode isn't set, then we're in the wrong place.
132  if( empty( $_REQUEST['screen_mode'] ) ) {
133  return;
134  }
135 
136  // Now, no validation is required in the methods; let's hook in.
137  add_action('admin_init', array( &$this, 'set_screen_mode' ) );
138 
139  add_action("gform_entry_info", array( &$this, 'add_select' ), 10, 2);
140 
141  add_action("gform_after_update_entry", array( &$this, 'update_entry_creator' ), 10, 2);
142 
143  }
144 
145  /**
146  * Allows for edit links to work with a link instead of a form (GET instead of POST)
147  * @return void
148  */
149  function set_screen_mode() {
150 
151  // If $_GET['screen_mode'] is set to edit, set $_POST value
152  if( rgget('screen_mode') === 'edit' ) {
153  $_POST["screen_mode"] = 'edit';
154  }
155 
156  }
157 
158  /**
159  * When the entry creator is changed, add a note to the entry
160  * @param array $form GF entry array
161  * @param int $entry_id Entry ID
162  * @return void
163  */
164  function update_entry_creator($form, $entry_id) {
165  global $current_user;
166 
167  // Update the entry
168  $created_by = absint( rgpost('created_by') );
169 
170  RGFormsModel::update_lead_property( $entry_id, 'created_by', $created_by );
171 
172  // If the creator has changed, let's add a note about who it used to be.
173  $originally_created_by = rgpost('originally_created_by');
174 
175  // If there's no owner and there didn't used to be, keep going
176  if( empty( $originally_created_by ) && empty( $created_by ) ) {
177  return;
178  }
179 
180  // If the values have changed
181  if( absint( $originally_created_by ) !== absint( $created_by ) ) {
182 
183  $user_data = get_userdata($current_user->ID);
184 
185  $user_format = _x('%s (ID #%d)', 'The name and the ID of users who initiated changes to entry ownership', 'gravityview');
186 
187  $original_name = $created_by_name = esc_attr_x( 'No User', 'To show that the entry was unassigned from an actual user to no user.', 'gravityview');
188 
189  if( !empty( $originally_created_by ) ) {
190  $originally_created_by_user_data = get_userdata($originally_created_by);
191  $original_name = sprintf( $user_format, $originally_created_by_user_data->display_name, $originally_created_by_user_data->ID );
192  }
193 
194  if( !empty( $created_by ) ) {
195  $created_by_user_data = get_userdata($created_by);
196  $created_by_name = sprintf( $user_format, $created_by_user_data->display_name, $created_by_user_data->ID );
197  }
198 
199  GravityView_Entry_Notes::add_note( $entry_id, $current_user->ID, $user_data->display_name, sprintf( __('Changed entry creator from %s to %s', 'gravityview'), $original_name, $created_by_name ), 'note' );
200  }
201 
202  }
203 
204  /**
205  * Output the select to change the entry creator
206  * @param int $form_id GF Form ID
207  * @param array $entry GF entry array
208  * @return void
209  */
210  function add_select($form_id, $entry ) {
211 
212  if( rgpost('screen_mode') !== 'edit' ) {
213  return;
214  }
215 
216  $created_by_id = rgar( $entry, 'created_by' );
217 
218  $users = GVCommon::get_users( 'change_entry_creator' );
219 
220  $is_created_by_in_users = wp_list_filter( $users, array( 'ID' => $created_by_id ) );
221 
222  // Make sure that the entry creator is included in the users list. If not, add them.
223  if ( ! empty( $created_by_id ) && empty( $is_created_by_in_users ) ) {
224 
225  if ( $created_by_user = GVCommon::get_users( 'change_entry_creator', array( 'include' => $created_by_id ) ) ) {
226  $users = array_merge( $users, $created_by_user );
227  }
228  }
229 
230  $output = '<label for="change_created_by">';
231  $output .= esc_html__('Change Entry Creator:', 'gravityview');
232  $output .= '</label>';
233 
234  // If there are users who are not being shown, show a warning.
235  // TODO: Use AJAX instead of <select>
236  $count_users = count_users();
237  if( sizeof( $users ) < $count_users['total_users'] ) {
238  $output .= '<p><i class="dashicons dashicons-warning"></i> ' . sprintf( esc_html__( 'The displayed list of users has been trimmed due to the large number of users. %sLearn how to remove this limit%s.', 'gravityview' ), '<a href="https://docs.gravityview.co/article/251-i-only-see-some-users-in-the-change-entry-creator-dropdown" rel="external">', '</a>' ) . '</p>';
239  }
240 
241  $output .= '<select name="created_by" id="change_created_by" class="widefat">';
242  $output .= '<option value="' . selected( $entry['created_by'], '0', false ) . '"> &mdash; '.esc_attr_x( 'No User', 'No user assigned to the entry', 'gravityview').' &mdash; </option>';
243  foreach($users as $user) {
244  $output .= '<option value="'. $user->ID .'"'. selected( $entry['created_by'], $user->ID, false ).'>'.esc_attr( $user->display_name.' ('.$user->user_nicename.')' ).'</option>';
245  }
246  $output .= '</select>';
247  $output .= '<input name="originally_created_by" value="'.esc_attr( $entry['created_by'] ).'" type="hidden" />';
248 
249  unset( $is_created_by_in_users, $created_by_user, $users, $created_by_id, $count_users );
250 
251  echo $output;
252  }
253 
254 }
255 
__construct()
set_screen_mode()
Allows for edit links to work with a link instead of a form (GET instead of POST) ...
static get_users( $context='change_entry_creator', $args=array())
Get WordPress users with reasonable limits set.
assign_new_user_to_lead( $user_id, $config, $entry=array(), $password='')
When an user is created using the User Registration add-on, assign the entry to them.
update_entry_creator($form, $entry_id)
When the entry creator is changed, add a note to the entry.
$created_by
load()
if(empty( $created_by)) $form_id
add_select($form_id, $entry)
Output the select to change the entry creator.
static add_note( $lead_id, $user_id, $user_name, $note='', $note_type='gravityview')
Alias for GFFormsModel::add_note() with default note_type of &#39;gravityview&#39;.
new GravityView_Change_Entry_Creator
static has_cap( $caps='', $object_id=null, $user_id=null)
Alias of GravityView_Roles_Capabilities::has_cap()
$entry
Definition: notes.php:27
prevent_conflicts()
Disable previous functionality; use this one as the canonical.