gravityview /
GravityView
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | |||
| 3 | /** |
||
| 4 | * @since 1.2 |
||
| 5 | */ |
||
| 6 | class GravityView_Change_Entry_Creator { |
||
| 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 ) ) { |
||
|
0 ignored issues
–
show
Coding Style
introduced
by
Loading history...
|
|||
| 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 | $users = GVCommon::get_users( 'change_entry_creator' ); |
||
| 217 | |||
| 218 | $output = '<label for="change_created_by">'; |
||
| 219 | $output .= esc_html__('Change Entry Creator:', 'gravityview'); |
||
| 220 | $output .= '</label> |
||
| 221 | <select name="created_by" id="change_created_by" class="widefat">'; |
||
| 222 | $output .= '<option value=""> — '.esc_attr_x( 'No User', 'No user assigned to the entry', 'gravityview').' — </option>'; |
||
| 223 | foreach($users as $user) { |
||
| 224 | $output .= '<option value="'. $user->ID .'"'. selected( $entry['created_by'], $user->ID, false ).'>'.esc_attr( $user->display_name.' ('.$user->user_nicename.')' ).'</option>'; |
||
| 225 | } |
||
| 226 | $output .= '</select>'; |
||
| 227 | $output .= '<input name="originally_created_by" value="'.esc_attr( $entry['created_by'] ).'" type="hidden" />'; |
||
| 228 | echo $output; |
||
| 229 | |||
| 230 | } |
||
| 231 | |||
| 232 | } |
||
| 233 | |||
| 234 | new GravityView_Change_Entry_Creator; |
||
| 235 |