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 | * @file class-admin-approve-entries.php |
||
| 4 | * @package GravityView |
||
| 5 | * @license GPL2+ |
||
| 6 | * @author Katz Web Services, Inc. |
||
| 7 | * @link http://gravityview.co |
||
| 8 | * @copyright Copyright 2014, Katz Web Services, Inc. |
||
| 9 | * |
||
| 10 | * @since 1.0.0 |
||
| 11 | */ |
||
| 12 | |||
| 13 | |||
| 14 | |||
| 15 | class GravityView_Admin_ApproveEntries { |
||
| 16 | |||
| 17 | // hold notification messages |
||
| 18 | public $bulk_update_message = ''; |
||
| 19 | |||
| 20 | /** |
||
| 21 | * @var array Set the prefixes here instead of spread across the class |
||
| 22 | * @since 1.17 |
||
| 23 | */ |
||
| 24 | private $bulk_action_prefixes = array( |
||
| 25 | 'approve' => 'gvapprove', |
||
| 26 | 'disapprove' => 'gvdisapprove', |
||
| 27 | 'unapprove' => 'gvunapprove', |
||
| 28 | ); |
||
| 29 | |||
| 30 | function __construct() { |
||
| 31 | |||
| 32 | $this->add_hooks(); |
||
| 33 | |||
| 34 | } |
||
| 35 | |||
| 36 | private function add_hooks() { |
||
| 37 | /** Edit Gravity Form page */ |
||
| 38 | |||
| 39 | // Add button to left menu |
||
| 40 | add_filter( 'gform_add_field_buttons', array( $this, 'add_field_buttons' ) ); |
||
| 41 | // Set defaults |
||
| 42 | add_action( 'gform_editor_js_set_default_values', array( $this, 'set_defaults' ) ); |
||
| 43 | |||
| 44 | /** gf_entries page - entries table screen */ |
||
| 45 | |||
| 46 | // capture bulk actions |
||
| 47 | add_action( 'gform_loaded', array( $this, 'process_bulk_action') ); |
||
| 48 | |||
| 49 | // add hidden field with approve status |
||
| 50 | add_action( 'gform_entries_first_column_actions', array( $this, 'add_entry_approved_hidden_input' ), 1, 5 ); |
||
| 51 | |||
| 52 | add_filter( 'gravityview_tooltips', array( $this, 'tooltips' ) ); |
||
| 53 | |||
| 54 | // adding styles and scripts |
||
| 55 | add_action( 'admin_enqueue_scripts', array( $this, 'add_scripts_and_styles') ); |
||
| 56 | // bypass Gravity Forms no-conflict mode |
||
| 57 | add_filter( 'gform_noconflict_scripts', array( $this, 'register_gform_noconflict_script' ) ); |
||
| 58 | add_filter( 'gform_noconflict_styles', array( $this, 'register_gform_noconflict_style' ) ); |
||
| 59 | |||
| 60 | add_filter( 'gform_filter_links_entry_list', array( $this, 'filter_links_entry_list' ), 10, 3 ); |
||
| 61 | } |
||
| 62 | |||
| 63 | /** |
||
| 64 | * Add filter links to the Entries page |
||
| 65 | * |
||
| 66 | * Can be disabled by returning false on the `gravityview/approve_entries/show_filter_links_entry_list` filter |
||
| 67 | * |
||
| 68 | * @since 1.17.1 |
||
| 69 | * |
||
| 70 | * @param array $filter_links Array of links to include in the subsubsub filter list. Includes `id`, `field_filters`, `count`, and `label` keys |
||
| 71 | * @param array $form GF Form object of current form |
||
| 72 | * @param bool $include_counts Whether to include counts in the output |
||
| 73 | * |
||
| 74 | * @return array Filter links, with GravityView approved/disapproved links added |
||
| 75 | */ |
||
| 76 | public function filter_links_entry_list( $filter_links = array(), $form = array(), $include_counts = true ) { |
||
| 77 | |||
| 78 | /** |
||
| 79 | * @filter `gravityview/approve_entries/show_filter_links_entry_list` Disable filter links |
||
| 80 | * @since 1.17.1 |
||
| 81 | * @param bool $show_filter_links True: show the "approved"/"disapproved" filter links. False: hide them. |
||
| 82 | * @param array $form GF Form object of current form |
||
| 83 | */ |
||
| 84 | if( false === apply_filters( 'gravityview/approve_entries/show_filter_links_entry_list', true, $form ) ) { |
||
| 85 | return $filter_links; |
||
| 86 | } |
||
| 87 | |||
| 88 | $field_filters_approved = array( |
||
| 89 | array( |
||
| 90 | 'key' => GravityView_Entry_Approval::meta_key, |
||
| 91 | 'value' => GravityView_Entry_Approval_Status::APPROVED |
||
|
0 ignored issues
–
show
introduced
by
Loading history...
|
|||
| 92 | ), |
||
| 93 | ); |
||
| 94 | |||
| 95 | $field_filters_disapproved = array( |
||
| 96 | array( |
||
| 97 | 'key' => GravityView_Entry_Approval::meta_key, |
||
| 98 | 'value' => GravityView_Entry_Approval_Status::DISAPPROVED, |
||
| 99 | ), |
||
| 100 | ); |
||
| 101 | |||
| 102 | $approved_count = $disapproved_count = 0; |
||
| 103 | |||
| 104 | // Only count if necessary |
||
| 105 | if( $include_counts ) { |
||
| 106 | $approved_count = count( gravityview_get_entry_ids( $form['id'], array( 'status' => 'active', 'field_filters' => $field_filters_approved ) ) ); |
||
| 107 | $disapproved_count = count( gravityview_get_entry_ids( $form['id'], array( 'status' => 'active', 'field_filters' => $field_filters_disapproved ) ) ); |
||
| 108 | } |
||
| 109 | |||
| 110 | $filter_links[] = array( |
||
| 111 | 'id' => 'gv_approved', |
||
| 112 | 'field_filters' => $field_filters_approved, |
||
| 113 | 'count' => $approved_count, |
||
| 114 | 'label' => GravityView_Entry_Approval_Status::get_label( GravityView_Entry_Approval_Status::APPROVED ), |
||
| 115 | ); |
||
| 116 | |||
| 117 | $filter_links[] = array( |
||
| 118 | 'id' => 'gv_disapproved', |
||
| 119 | 'field_filters' => $field_filters_disapproved, |
||
| 120 | 'count' => $disapproved_count, |
||
| 121 | 'label' => GravityView_Entry_Approval_Status::get_label( GravityView_Entry_Approval_Status::DISAPPROVED ), |
||
| 122 | ); |
||
| 123 | |||
| 124 | return $filter_links; |
||
| 125 | } |
||
| 126 | |||
| 127 | /** |
||
| 128 | * Add the GravityView Fields group tooltip |
||
| 129 | * |
||
| 130 | * @param $tooltips |
||
| 131 | * |
||
| 132 | * @return array Tooltips array with GravityView fields tooltip |
||
| 133 | */ |
||
| 134 | function tooltips( $tooltips ) { |
||
| 135 | |||
| 136 | $tooltips['form_gravityview_fields'] = array( |
||
| 137 | 'title' => __('GravityView Fields', 'gravityview'), |
||
| 138 | 'value' => __( 'Allow administrators to approve or reject entries and users to opt-in or opt-out of their entries being displayed.', 'gravityview'), |
||
| 139 | ); |
||
| 140 | |||
| 141 | return $tooltips; |
||
| 142 | } |
||
| 143 | |||
| 144 | |||
| 145 | /** |
||
| 146 | * Inject new add field buttons in the gravity form editor page |
||
| 147 | * |
||
| 148 | * @access public |
||
| 149 | * @param mixed $field_groups |
||
| 150 | * @return array Array of fields |
||
| 151 | */ |
||
| 152 | function add_field_buttons( $field_groups ) { |
||
| 153 | |||
| 154 | $gravityview_fields = array( |
||
| 155 | 'name' => 'gravityview_fields', |
||
| 156 | 'label' => 'GravityView', |
||
| 157 | 'fields' => array( |
||
| 158 | array( |
||
| 159 | 'class' => 'button', |
||
| 160 | 'value' => __( 'Approve/Reject', 'gravityview' ), |
||
| 161 | 'onclick' => "StartAddField('gravityviewapproved_admin');", |
||
| 162 | 'data-type' => 'gravityviewapproved_admin' |
||
| 163 | ), |
||
| 164 | array( |
||
| 165 | 'class' => 'button', |
||
| 166 | 'value' => __( 'User Opt-In', 'gravityview' ), |
||
| 167 | 'onclick' => "StartAddField('gravityviewapproved');", |
||
| 168 | 'data-type' => 'gravityviewapproved' |
||
| 169 | ), |
||
| 170 | ) |
||
| 171 | ); |
||
| 172 | |||
| 173 | array_push( $field_groups, $gravityview_fields ); |
||
| 174 | |||
| 175 | return $field_groups; |
||
| 176 | } |
||
| 177 | |||
| 178 | |||
| 179 | |||
| 180 | /** |
||
| 181 | * At edit form page, set the field Approve defaults |
||
| 182 | * |
||
| 183 | * @todo Convert to a partial include file |
||
| 184 | * @access public |
||
| 185 | * @return void |
||
| 186 | */ |
||
| 187 | function set_defaults() { |
||
| 188 | ?> |
||
| 189 | case 'gravityviewapproved_admin': |
||
| 190 | field.label = "<?php echo esc_js( __( 'Approved? (Admin-only)', 'gravityview' ) ); ?>"; |
||
| 191 | |||
| 192 | field.adminLabel = "<?php echo esc_js( __( 'Approved?', 'gravityview' ) ); ?>"; |
||
| 193 | field.adminOnly = true; |
||
| 194 | |||
| 195 | field.choices = null; |
||
| 196 | field.inputs = null; |
||
| 197 | |||
| 198 | if( !field.choices ) { |
||
| 199 | field.choices = new Array( new Choice("<?php echo esc_js( GravityView_Entry_Approval_Status::get_label( GravityView_Entry_Approval_Status::APPROVED ) ); ?>") ); |
||
| 200 | } |
||
| 201 | |||
| 202 | field.inputs = new Array(); |
||
| 203 | for( var i=1; i<=field.choices.length; i++ ) { |
||
| 204 | field.inputs.push(new Input(field.id + (i/10), field.choices[i-1].text)); |
||
| 205 | } |
||
| 206 | |||
| 207 | field.type = 'checkbox'; |
||
| 208 | field.gravityview_approved = 1; |
||
| 209 | |||
| 210 | break; |
||
| 211 | case 'gravityviewapproved': |
||
| 212 | field.label = "<?php echo esc_js( __( 'Show Entry on Website', 'gravityview' ) ); ?>"; |
||
| 213 | |||
| 214 | field.adminLabel = "<?php echo esc_js( __( 'Opt-In', 'gravityview' ) ); ?>"; |
||
| 215 | field.adminOnly = false; |
||
| 216 | |||
| 217 | field.choices = null; |
||
| 218 | field.inputs = null; |
||
| 219 | |||
| 220 | if( !field.choices ) { |
||
| 221 | field.choices = new Array( |
||
| 222 | new Choice("<?php echo esc_js( __( 'Yes, display my entry on the website', 'gravityview' ) ); ?>") |
||
| 223 | ); |
||
| 224 | } |
||
| 225 | |||
| 226 | field.inputs = new Array(); |
||
| 227 | for( var i=1; i<=field.choices.length; i++ ) { |
||
| 228 | field.inputs.push(new Input(field.id + (i/10), field.choices[i-1].text)); |
||
| 229 | } |
||
| 230 | |||
| 231 | field.type = 'checkbox'; |
||
| 232 | field.gravityview_approved = 1; |
||
| 233 | |||
| 234 | break; |
||
| 235 | <?php |
||
| 236 | } |
||
| 237 | |||
| 238 | /** |
||
| 239 | * Get the Bulk Action submitted value if it is a GravityView Approve/Unapprove action |
||
| 240 | * |
||
| 241 | * @since 1.17.1 |
||
| 242 | * |
||
| 243 | * @return string|false If the bulk action was GravityView Approve/Unapprove, return the full string (gvapprove-16, gvunapprove-16). Otherwise, return false. |
||
| 244 | */ |
||
| 245 | private function get_gv_bulk_action() { |
||
| 246 | |||
| 247 | $gv_bulk_action = false; |
||
| 248 | |||
| 249 | if( version_compare( GFForms::$version, '2.0', '>=' ) ) { |
||
| 250 | $bulk_action = ( '-1' !== rgpost('action') ) ? rgpost('action') : rgpost('action2'); |
||
| 251 | } else { |
||
| 252 | // GF 1.9.x - Bulk action 2 is the bottom bulk action select form. |
||
| 253 | $bulk_action = rgpost('bulk_action') ? rgpost('bulk_action') : rgpost('bulk_action2'); |
||
| 254 | } |
||
| 255 | |||
| 256 | // Check the $bulk_action value against GV actions, see if they're the same. I hate strpos(). |
||
| 257 | if( ! empty( $bulk_action ) && preg_match( '/^('. implode( '|', $this->bulk_action_prefixes ) .')/ism', $bulk_action ) ) { |
||
| 258 | $gv_bulk_action = $bulk_action; |
||
| 259 | } |
||
| 260 | |||
| 261 | return $gv_bulk_action; |
||
| 262 | } |
||
| 263 | |||
| 264 | /** |
||
| 265 | * Capture bulk actions - gf_entries table |
||
| 266 | * |
||
| 267 | * @uses GravityView_frontend::get_search_criteria() Convert the $_POST search request into a properly formatted request. |
||
| 268 | * @access public |
||
| 269 | * @return void|boolean |
||
| 270 | */ |
||
| 271 | public function process_bulk_action() { |
||
| 272 | |||
| 273 | if ( ! is_admin() || ! class_exists( 'GFForms' ) || empty( $_POST ) ) { |
||
| 274 | return false; |
||
| 275 | } |
||
| 276 | |||
| 277 | // The action is formatted like: gvapprove-16 or gvunapprove-16, where the first word is the name of the action and the second is the ID of the form. |
||
| 278 | $bulk_action = $this->get_gv_bulk_action(); |
||
| 279 | |||
| 280 | // gforms_entry_list is the nonce that confirms we're on the right page |
||
| 281 | // gforms_update_note is sent when bulk editing entry notes. We don't want to process then. |
||
| 282 | if ( $bulk_action && rgpost('gforms_entry_list') && empty( $_POST['gforms_update_note'] ) ) { |
||
| 283 | |||
| 284 | check_admin_referer( 'gforms_entry_list', 'gforms_entry_list' ); |
||
| 285 | |||
| 286 | /** |
||
| 287 | * The extra '-' is to make sure that there are at *least* two items in array. |
||
| 288 | * @see https://github.com/katzwebservices/GravityView/issues/370 |
||
| 289 | */ |
||
| 290 | $bulk_action .= '-'; |
||
| 291 | |||
| 292 | list( $approved_status, $form_id ) = explode( '-', $bulk_action ); |
||
| 293 | |||
| 294 | if ( empty( $form_id ) ) { |
||
| 295 | do_action( 'gravityview_log_error', '[process_bulk_action] Form ID is empty from parsing bulk action.', $bulk_action ); |
||
| 296 | return false; |
||
| 297 | } |
||
| 298 | |||
| 299 | // All entries are set to be updated, not just the visible ones |
||
| 300 | if ( ! empty( $_POST['all_entries'] ) ) { |
||
| 301 | |||
| 302 | // Convert the current entry search into GF-formatted search criteria |
||
| 303 | $search = array( |
||
| 304 | 'search_field' => isset( $_POST['f'] ) ? $_POST['f'][0] : 0, |
||
| 305 | 'search_value' => isset( $_POST['v'][0] ) ? $_POST['v'][0] : '', |
||
| 306 | 'search_operator' => isset( $_POST['o'][0] ) ? $_POST['o'][0] : 'contains', |
||
| 307 | ); |
||
| 308 | |||
| 309 | $search_criteria = GravityView_frontend::get_search_criteria( $search, $form_id ); |
||
| 310 | |||
| 311 | // Get all the entry IDs for the form |
||
| 312 | $entries = gravityview_get_entry_ids( $form_id, $search_criteria ); |
||
| 313 | |||
| 314 | } else { |
||
| 315 | |||
| 316 | // Changed from 'lead' to 'entry' in 2.0 |
||
| 317 | $entries = isset( $_POST['lead'] ) ? $_POST['lead'] : $_POST['entry']; |
||
| 318 | |||
| 319 | } |
||
| 320 | |||
| 321 | if ( empty( $entries ) ) { |
||
| 322 | do_action( 'gravityview_log_error', '[process_bulk_action] Entries are empty' ); |
||
| 323 | return false; |
||
| 324 | } |
||
| 325 | |||
| 326 | $entry_count = count( $entries ) > 1 ? sprintf( __( '%d entries', 'gravityview' ), count( $entries ) ) : __( '1 entry', 'gravityview' ); |
||
| 327 | |||
| 328 | switch ( $approved_status ) { |
||
| 329 | case $this->bulk_action_prefixes['approve']: |
||
| 330 | GravityView_Entry_Approval::update_bulk( $entries, GravityView_Entry_Approval_Status::APPROVED, $form_id ); |
||
| 331 | $this->bulk_update_message = sprintf( __( '%s approved.', 'gravityview' ), $entry_count ); |
||
| 332 | break; |
||
| 333 | case $this->bulk_action_prefixes['unapprove']: |
||
| 334 | GravityView_Entry_Approval::update_bulk( $entries, GravityView_Entry_Approval_Status::UNAPPROVED, $form_id ); |
||
| 335 | $this->bulk_update_message = sprintf( __( '%s unapproved.', 'gravityview' ), $entry_count ); |
||
| 336 | break; |
||
| 337 | case $this->bulk_action_prefixes['disapprove']: |
||
| 338 | GravityView_Entry_Approval::update_bulk( $entries, GravityView_Entry_Approval_Status::DISAPPROVED, $form_id ); |
||
| 339 | $this->bulk_update_message = sprintf( __( '%s disapproved.', 'gravityview' ), $entry_count ); |
||
| 340 | break; |
||
| 341 | } |
||
| 342 | } |
||
| 343 | } |
||
| 344 | |||
| 345 | |||
| 346 | /** |
||
| 347 | * update_approved function. |
||
| 348 | * |
||
| 349 | * @since 1.18 Moved to GravityView_Entry_Approval::update_approved |
||
| 350 | * @see GravityView_Entry_Approval::update_approved |
||
| 351 | * |
||
| 352 | * @param int $entry_id (default: 0) |
||
| 353 | * @param int $approved (default: 0) |
||
| 354 | * @param int $form_id (default: 0) |
||
| 355 | * @param int $approvedcolumn (default: 0) |
||
| 356 | * |
||
| 357 | * @return boolean True: It worked; False: it failed |
||
| 358 | */ |
||
| 359 | public static function update_approved( $entry_id = 0, $approved = 0, $form_id = 0, $approvedcolumn = 0) { |
||
| 360 | return GravityView_Entry_Approval::update_approved( $entry_id, $approved, $form_id, $approvedcolumn ); |
||
| 361 | } |
||
| 362 | |||
| 363 | /** |
||
| 364 | * Calculate the approve field.input id |
||
| 365 | * |
||
| 366 | * @since 1.18 Moved to GravityView_Entry_Approval::get_approved_column |
||
| 367 | * @see GravityView_Entry_Approval::get_approved_column |
||
| 368 | * |
||
| 369 | * @param mixed $form GF Form or Form ID |
||
| 370 | * @return false|null|string Returns the input ID of the approved field. Returns NULL if no approved fields were found. Returns false if $form_id wasn't set. |
||
| 371 | */ |
||
| 372 | static public function get_approved_column( $form ) { |
||
| 373 | return GravityView_Entry_Approval::get_approved_column( $form ); |
||
| 374 | } |
||
| 375 | |||
| 376 | /** |
||
| 377 | * Add a hidden input that is used in the Javascript to show approved/disapproved entries checkbox |
||
| 378 | * |
||
| 379 | * See the /assets/js/admin-entries-list.js setInitialApprovedEntries method |
||
| 380 | * |
||
| 381 | * @param $form_id |
||
| 382 | * @param $field_id |
||
| 383 | * @param $value |
||
| 384 | * @param $entry |
||
| 385 | * @param $query_string |
||
| 386 | * |
||
| 387 | * @return void |
||
| 388 | */ |
||
| 389 | static public function add_entry_approved_hidden_input( $form_id, $field_id, $value, $entry, $query_string ) { |
||
| 390 | |||
| 391 | if( ! GVCommon::has_cap( 'gravityview_moderate_entries', $entry['id'] ) ) { |
||
| 392 | return; |
||
| 393 | } |
||
| 394 | |||
| 395 | if( empty( $entry['id'] ) ) { |
||
| 396 | return; |
||
| 397 | } |
||
| 398 | |||
| 399 | $status_value = GravityView_Entry_Approval::get_entry_status( $entry, 'value' ); |
||
| 400 | |||
| 401 | if( $status_value ) { |
||
| 402 | echo '<input type="hidden" class="entry_approval" id="entry_approved_'. $entry['id'] .'" value="' . esc_attr( $status_value ) . '" />'; |
||
| 403 | } |
||
| 404 | } |
||
| 405 | |||
| 406 | /** |
||
| 407 | * Get the form ID of the form currently being displayed |
||
| 408 | * |
||
| 409 | * @since 1.17.1 |
||
| 410 | * |
||
| 411 | * @return int ID of the current form being displayed. `0` is returned if no forms are found. |
||
| 412 | */ |
||
| 413 | private function get_form_id() { |
||
| 414 | |||
| 415 | $form_id = GFForms::get('id'); |
||
| 416 | |||
| 417 | // If there are no forms identified, use the first form. That's how GF does it. |
||
| 418 | if( empty( $form_id ) && class_exists('RGFormsModel') ) { |
||
| 419 | $form_id = $this->get_first_form_id(); |
||
| 420 | } |
||
| 421 | |||
| 422 | return absint( $form_id ); |
||
| 423 | } |
||
| 424 | |||
| 425 | /** |
||
| 426 | * Get the first form ID from Gravity Forms, sorted in the same order as in the All Forms page |
||
| 427 | * |
||
| 428 | * @see GFEntryList::all_entries_page() This method is based on the form-selecting code here |
||
| 429 | * |
||
| 430 | * @since 1.17.2 |
||
| 431 | * |
||
| 432 | * @return int ID of the first form, sorted by title. `0` if no forms were found. |
||
| 433 | */ |
||
| 434 | private function get_first_form_id() { |
||
| 435 | |||
| 436 | $forms = RGFormsModel::get_forms( null, 'title' ); |
||
| 437 | |||
| 438 | if( ! isset( $forms[0] ) ) { |
||
| 439 | do_action( 'gravityview_log_error', __METHOD__ . ': No forms were found' ); |
||
| 440 | return 0; |
||
| 441 | } |
||
| 442 | |||
| 443 | $first_form = $forms[0]; |
||
| 444 | |||
| 445 | $form_id = is_object( $forms[0] ) ? $first_form->id : $first_form['id']; |
||
| 446 | |||
| 447 | return intval( $form_id ); |
||
| 448 | } |
||
| 449 | |||
| 450 | |||
| 451 | function add_scripts_and_styles( $hook ) { |
||
| 452 | |||
| 453 | if( ! class_exists( 'RGForms' ) ) { |
||
| 454 | |||
| 455 | do_action( 'gravityview_log_error', 'GravityView_Admin_ApproveEntries[add_scripts_and_styles] RGForms does not exist.' ); |
||
| 456 | |||
| 457 | return; |
||
| 458 | } |
||
| 459 | |||
| 460 | // enqueue styles & scripts gf_entries |
||
| 461 | // But only if we're on the main Entries page, not on reports pages |
||
| 462 | if( GFForms::get_page() !== 'entry_list' ) { |
||
| 463 | return; |
||
| 464 | } |
||
| 465 | |||
| 466 | $form_id = $this->get_form_id(); |
||
| 467 | |||
| 468 | // Things are broken; no forms were found |
||
| 469 | if( empty( $form_id ) ) { |
||
| 470 | return; |
||
| 471 | } |
||
| 472 | |||
| 473 | wp_enqueue_style( 'gravityview_entries_list', plugins_url('assets/css/admin-entries-list.css', GRAVITYVIEW_FILE), array(), GravityView_Plugin::version ); |
||
| 474 | |||
| 475 | $script_debug = (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) ? '' : '.min'; |
||
| 476 | |||
| 477 | wp_enqueue_script( 'gravityview_gf_entries_scripts', plugins_url('assets/js/admin-entries-list'.$script_debug.'.js', GRAVITYVIEW_FILE), array( 'jquery' ), GravityView_Plugin::version ); |
||
| 478 | |||
| 479 | wp_localize_script( 'gravityview_gf_entries_scripts', 'gvGlobals', array( |
||
| 480 | 'nonce' => wp_create_nonce( 'gravityview_entry_approval'), |
||
|
0 ignored issues
–
show
|
|||
| 481 | 'form_id' => $form_id, |
||
| 482 | 'show_column' => (int)$this->show_approve_entry_column( $form_id ), |
||
| 483 | 'add_bulk_action' => (int)GVCommon::has_cap( 'gravityview_moderate_entries' ), |
||
| 484 | 'status_approved' => GravityView_Entry_Approval_Status::APPROVED, |
||
| 485 | 'status_disapproved' => GravityView_Entry_Approval_Status::DISAPPROVED, |
||
| 486 | 'status_unapproved' => GravityView_Entry_Approval_Status::UNAPPROVED, |
||
| 487 | 'bulk_actions' => $this->get_bulk_actions( $form_id ), |
||
| 488 | 'bulk_message' => $this->bulk_update_message, |
||
| 489 | 'unapprove_title' => GravityView_Entry_Approval_Status::get_title_attr('unapproved'), |
||
|
0 ignored issues
–
show
|
|||
| 490 | 'approve_title' => GravityView_Entry_Approval_Status::get_title_attr('disapproved'), |
||
|
0 ignored issues
–
show
|
|||
| 491 | 'disapprove_title' => GravityView_Entry_Approval_Status::get_title_attr('approved'), |
||
|
0 ignored issues
–
show
|
|||
| 492 | 'column_title' => __( 'Show entry in directory view?', 'gravityview'), |
||
| 493 | 'column_link' => esc_url( $this->get_sort_link( $form_id ) ), |
||
| 494 | ) ); |
||
| 495 | |||
| 496 | } |
||
| 497 | |||
| 498 | /** |
||
| 499 | * Generate a link to sort by approval status (if there is an Approve/Disapprove field) |
||
| 500 | * |
||
| 501 | * Note: Sorting by approval will never be great because it's not possible currently to declare the sorting as |
||
| 502 | * numeric, but it does group the approved entries together. |
||
| 503 | * |
||
| 504 | * @param int $form_id |
||
| 505 | * |
||
| 506 | * @return string Sorting link |
||
| 507 | */ |
||
| 508 | private function get_sort_link( $form_id = 0 ) { |
||
| 509 | |||
| 510 | $approved_column_id = self::get_approved_column( $form_id ); |
||
| 511 | |||
| 512 | if( ! $approved_column_id ) { |
||
| 513 | return ''; |
||
| 514 | } |
||
| 515 | |||
| 516 | $order = ( 'desc' === rgget('order') ) ? 'asc' : 'desc'; |
||
|
0 ignored issues
–
show
|
|||
| 517 | |||
| 518 | $args = array( |
||
| 519 | 'orderby' => $approved_column_id, |
||
| 520 | 'order' => $order, |
||
| 521 | ); |
||
| 522 | |||
| 523 | $link = add_query_arg( $args ); |
||
| 524 | |||
| 525 | return $link; |
||
| 526 | } |
||
| 527 | |||
| 528 | /** |
||
| 529 | * Get an array of options to be added to the Gravity Forms "Bulk action" dropdown in a "GravityView" option group |
||
| 530 | * |
||
| 531 | * @since 1.16.3 |
||
| 532 | * |
||
| 533 | * @param int $form_id ID of the form currently being displayed |
||
| 534 | * |
||
| 535 | * @return array Array of actions to be added to the GravityView option group |
||
| 536 | */ |
||
| 537 | private function get_bulk_actions( $form_id ) { |
||
| 538 | |||
| 539 | $bulk_actions = array( |
||
| 540 | 'GravityView' => array( |
||
| 541 | array( |
||
| 542 | 'label' => GravityView_Entry_Approval_Status::get_string('approved', 'action'), |
||
|
0 ignored issues
–
show
|
|||
| 543 | 'value' => sprintf( '%s-%d', $this->bulk_action_prefixes['approve'], $form_id ), |
||
| 544 | ), |
||
| 545 | array( |
||
| 546 | 'label' => GravityView_Entry_Approval_Status::get_string('disapproved', 'action'), |
||
|
0 ignored issues
–
show
|
|||
| 547 | 'value' => sprintf( '%s-%d', $this->bulk_action_prefixes['disapprove'], $form_id ), |
||
| 548 | ), |
||
| 549 | array( |
||
| 550 | 'label' => GravityView_Entry_Approval_Status::get_string('unapproved', 'action'), |
||
|
0 ignored issues
–
show
|
|||
| 551 | 'value' => sprintf( '%s-%d', $this->bulk_action_prefixes['unapprove'], $form_id ), |
||
| 552 | ), |
||
| 553 | ), |
||
| 554 | ); |
||
| 555 | |||
| 556 | /** |
||
| 557 | * @filter `gravityview/approve_entries/bulk_actions` Modify the GravityView "Bulk action" dropdown list. Return an empty array to hide. |
||
| 558 | * @see https://gist.github.com/zackkatz/82785402c996b51b4dc9 for an example of how to use this filter |
||
| 559 | * @since 1.16.3 |
||
| 560 | * @param array $bulk_actions Associative array of actions to be added to "Bulk action" dropdown inside GravityView `<optgroup>`. Parent array key is the `<optgroup>` label, then each child array must have `label` (displayed text) and `value` (input value) keys |
||
| 561 | * @param int $form_id ID of the form currently being displayed |
||
| 562 | */ |
||
| 563 | $bulk_actions = apply_filters( 'gravityview/approve_entries/bulk_actions', $bulk_actions, $form_id ); |
||
| 564 | |||
| 565 | // Sanitize the values, just to be sure. |
||
| 566 | foreach ( $bulk_actions as $key => $group ) { |
||
| 567 | foreach ( $group as $i => $action ) { |
||
| 568 | $bulk_actions[ $key ][ $i ]['label'] = esc_html( $bulk_actions[ $key ][ $i ]['label'] ); |
||
| 569 | $bulk_actions[ $key ][ $i ]['value'] = esc_attr( $bulk_actions[ $key ][ $i ]['value'] ); |
||
| 570 | } |
||
| 571 | } |
||
| 572 | |||
| 573 | return $bulk_actions; |
||
| 574 | } |
||
| 575 | |||
| 576 | /** |
||
| 577 | * Should the Approve/Reject Entry column be shown in the GF Entries page? |
||
| 578 | * |
||
| 579 | * @since 1.7.2 |
||
| 580 | * |
||
| 581 | * @param int $form_id The ID of the Gravity Forms form for which entries are being shown |
||
| 582 | * |
||
| 583 | * @return bool True: Show column; False: hide column |
||
| 584 | */ |
||
| 585 | private function show_approve_entry_column( $form_id ) { |
||
| 586 | |||
| 587 | $show_approve_column = GVCommon::has_cap( 'gravityview_moderate_entries' ); |
||
| 588 | |||
| 589 | /** |
||
| 590 | * @filter `gravityview/approve_entries/hide-if-no-connections` Return true to hide reject/approve if there are no connected Views |
||
| 591 | * @since 1.7.2 |
||
| 592 | * @param boolean $hide_if_no_connections |
||
| 593 | */ |
||
| 594 | $hide_if_no_connections = apply_filters('gravityview/approve_entries/hide-if-no-connections', false ); |
||
| 595 | |||
| 596 | if( $hide_if_no_connections ) { |
||
| 597 | |||
| 598 | $connected_views = gravityview_get_connected_views( $form_id ); |
||
| 599 | |||
| 600 | if( empty( $connected_views ) ) { |
||
| 601 | $show_approve_column = false; |
||
| 602 | } |
||
| 603 | } |
||
| 604 | |||
| 605 | /** |
||
| 606 | * @filter `gravityview/approve_entries/show-column` Override whether the column is shown |
||
| 607 | * @param boolean $show_approve_column Whether the column will be shown |
||
| 608 | * @param int $form_id The ID of the Gravity Forms form for which entries are being shown |
||
| 609 | */ |
||
| 610 | $show_approve_column = apply_filters('gravityview/approve_entries/show-column', $show_approve_column, $form_id ); |
||
| 611 | |||
| 612 | return $show_approve_column; |
||
| 613 | } |
||
| 614 | |||
| 615 | function register_gform_noconflict_script( $scripts ) { |
||
| 616 | $scripts[] = 'gravityview_gf_entries_scripts'; |
||
| 617 | return $scripts; |
||
| 618 | } |
||
| 619 | |||
| 620 | function register_gform_noconflict_style( $styles ) { |
||
| 621 | $styles[] = 'gravityview_entries_list'; |
||
| 622 | return $styles; |
||
| 623 | } |
||
| 624 | |||
| 625 | } |
||
| 626 | |||
| 627 | new GravityView_Admin_ApproveEntries; |
||
| 628 |