GravityView  1.22.6
The best, easiest way to display Gravity Forms entries on your website.
class-gravityview-field-approval.php
Go to the documentation of this file.
1 <?php
2 
3 /**
4  * Add custom options for address fields
5  * @since 1.19
6  */
8 
9  var $name = 'entry_approval';
10 
11  var $is_searchable = true;
12 
13  public $search_operators = array( 'is', 'isnot' );
14 
15  var $is_sortable = true;
16 
17  var $is_numeric = true;
18 
19  var $group = 'gravityview';
20 
21  var $contexts = array( 'single', 'multiple' );
22 
23  public function __construct() {
24 
25  $this->label = esc_attr__( 'Approve Entries', 'gravityview' );
26 
27  $this->description = esc_attr__( 'Approve and reject entries from the View.', 'gravityview' );
28 
29  $this->add_hooks();
30 
31  parent::__construct();
32  }
33 
34  /**
35  * Remove unused settings for the approval field
36  *
37  * @since 1.19
38  *
39  * @param array $field_options
40  * @param string $template_id
41  * @param string $field_id
42  * @param string $context
43  * @param string $input_type
44  *
45  * @return array
46  */
47  function field_options( $field_options, $template_id = '', $field_id = '', $context = '', $input_type = '' ) {
48 
49  unset( $field_options['only_loggedin'] );
50 
51  unset( $field_options['new_window'] );
52 
53  unset( $field_options['show_as_link'] );
54 
55  return $field_options;
56  }
57 
58  /**
59  * Add filters and actions for the field
60  *
61  * @since 1.19
62  *
63  * @return void
64  */
65  private function add_hooks() {
66 
67  add_filter( 'gravityview_entry_default_fields', array( $this, 'filter_gravityview_entry_default_field' ), 10, 3 );
68 
69  add_action( 'wp_enqueue_scripts', array( $this, 'register_scripts_and_styles' ) );
70 
71  add_action( 'gravityview/field/approval/load_scripts', array( $this, 'enqueue_and_localize_script' ) );
72 
73  add_action( 'gravityview_datatables_scripts_styles', array( $this, 'enqueue_and_localize_script' ) );
74 
75  add_filter( 'gravityview_get_entries', array( $this, 'modify_search_parameters' ), 1000 );
76 
77  add_filter( 'gravityview/field_output/html', array( $this, 'maybe_prevent_field_render' ), 10, 2 );
78  }
79 
80  /**
81  * @filter `gravityview/template/field_label` Modify field label output
82  *
83  * @since 1.19
84  *
85  * @param string $html Existing HTML output
86  * @param array $args Arguments passed to the function
87  *
88  * @return string Empty string if user doesn't have the `gravityview_moderate_entries` cap; field HTML otherwise
89  */
90  public function maybe_prevent_field_render( $html, $args ) {
91 
92  // If the field is `entry_approval` type but the user doesn't have the moderate entries cap, don't render.
93  if( $this->name === rgar( $args['field'], 'id' ) && ! GVCommon::has_cap('gravityview_moderate_entries') ) {
94  return '';
95  }
96 
97  return $html;
98  }
99 
100  /**
101  * Modify search to use `is_approved` meta key to sort, instead of `entry_approval`
102  *
103  * @param array $parameters Search parameters used to generate GF search
104  *
105  * @return array Same parameters, but if sorting by `entry_approval`, changed to `is_approved`
106  */
107  public function modify_search_parameters( $parameters ) {
108 
109  if( $this->name === rgars( $parameters, 'sorting/key' ) ) {
110  $parameters['sorting']['key'] = 'is_approved';
111  }
112 
113  return $parameters;
114  }
115 
116  /**
117  * Register the field approval script and style
118  *
119  * @since 1.19
120  *
121  * @return void
122  */
124  $script_debug = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
125 
126  wp_register_script( 'gravityview-field-approval', GRAVITYVIEW_URL . 'assets/js/field-approval'.$script_debug.'.js', array( 'jquery' ), GravityView_Plugin::version, true );
127 
128  $style_path = GRAVITYVIEW_DIR . 'templates/css/field-approval.css';
129 
130  if( class_exists( 'GravityView_View' ) ) {
131  /**
132  * Override CSS file by placing in your theme's /gravityview/css/ sub-directory.
133  */
134  $style_path = GravityView_View::getInstance()->locate_template( 'css/field-approval.css', false );
135  }
136 
137  $style_url = plugins_url( 'css/field-approval.css', trailingslashit( dirname( $style_path ) ) );
138 
139  /**
140  * @filter `gravityview/field/approval/css_url` URL to the Approval field CSS file.
141  * @since 1.19
142  * @param string $style_url Override to use your own CSS file, or return empty string to disable loading.
143  */
144  $style_url = apply_filters( 'gravityview/field/approval/css_url', $style_url );
145 
146  if( ! empty( $style_url ) ) {
147  wp_register_style( 'gravityview-field-approval', $style_url, array( 'dashicons' ), GravityView_Plugin::version, 'screen' );
148  }
149 
150  unset( $style_path, $style_url );
151  }
152 
153  /**
154  * Register the field approval script and output the localized text JS variables
155  * @since 1.19
156  * @return void
157  */
158  public function enqueue_and_localize_script() {
159 
160  // The script is already registered and enqueued
161  if( wp_script_is( 'gravityview-field-approval', 'enqueued' ) ) {
162  return;
163  }
164 
165  wp_enqueue_style( 'gravityview-field-approval' );
166 
167  wp_enqueue_script( 'gravityview-field-approval' );
168 
169  wp_localize_script( 'gravityview-field-approval', 'gvApproval', array(
170  'ajaxurl' => admin_url( 'admin-ajax.php' ),
171  'nonce' => wp_create_nonce('gravityview_entry_approval'),
173  ));
174 
175  }
176 
177  /**
178  * Add Fields to the field list
179  *
180  * @since 1.19
181  *
182  * @param array $entry_default_fields Array of fields shown by default
183  * @param string|array $form form_ID or form object
184  * @param string $context Either 'single', 'directory', 'header', 'footer'
185  *
186  * @return array
187  */
188  public function filter_gravityview_entry_default_field( $entry_default_fields, $form, $context ) {
189 
190  if ( ! isset( $entry_default_fields["{$this->name}"] ) && 'edit' !== $context ) {
191  $entry_default_fields["{$this->name}"] = array(
192  'label' => $this->label,
193  'desc' => $this->description,
194  'type' => $this->name,
195  );
196  }
197 
198  return $entry_default_fields;
199  }
200 
201  /**
202  * Get the anchor text for a link, based on the current status
203  *
204  * @since 1.19
205  * @uses GravityView_Entry_Approval_Status::get_string()
206  *
207  * @param string $approved_status Status string or key
208  *
209  * @return false|string False if string doesn't exist, otherwise the "label" for the status
210  */
211  public static function get_anchor_text( $approved_status = '' ) {
212  return GravityView_Entry_Approval_Status::get_string( $approved_status, 'label' );
213  }
214 
215  /**
216  * Get the title attribute for a link, based on the current status
217  *
218  * @since 1.19
219  * @uses GravityView_Entry_Approval_Status::get_string()
220  *
221  * @param int|string $approved_status Status string or key
222  *
223  * @return false|string
224  */
225  public static function get_title_attr( $approved_status ) {
226  return GravityView_Entry_Approval_Status::get_string( $approved_status, 'title' );
227  }
228 
229  /**
230  * Get the CSS class for a link, based on the current status
231  *
232  * @param int|string $approved_status Status string or key
233  *
234  * @return string CSS class, sanitized using esc_attr()
235  */
236  public static function get_css_class( $approved_status ) {
237 
238  $approved_key = GravityView_Entry_Approval_Status::get_key( $approved_status );
239 
240  return esc_attr( "gv-approval-{$approved_key}" );
241  }
242 }
243 
const GRAVITYVIEW_DIR
"GRAVITYVIEW_DIR" "./" The absolute path to the plugin directory, with trailing slash ...
Definition: gravityview.php:35
Modify field settings by extending this class.
enqueue_and_localize_script()
Register the field approval script and output the localized text JS variables.
static getInstance( $passed_post=NULL)
new GravityView_Field_Entry_Approval
$name
$contexts
const GRAVITYVIEW_URL
The URL to this file, with trailing slash.
Definition: gravityview.php:31
static get_title_attr( $approved_status)
Get the title attribute for a link, based on the current status.
__construct()
modify_search_parameters( $parameters)
Modify search to use is_approved meta key to sort, instead of entry_approval
$is_sortable
static get_css_class( $approved_status)
Get the CSS class for a link, based on the current status.
$group
field_options( $field_options, $template_id='', $field_id='', $context='', $input_type='')
Remove unused settings for the approval field.
static get_key( $value)
Get the status key for a value.
$is_searchable
scale description p description
$search_operators
add_hooks()
Add filters and actions for the field.
register_scripts_and_styles()
Register the field approval script and style.
static get_anchor_text( $approved_status='')
Get the anchor text for a link, based on the current status.
$field_id
Definition: time.php:17
Add custom options for address fields.
$is_numeric
filter_gravityview_entry_default_field( $entry_default_fields, $form, $context)
Add Fields to the field list.
static get_string( $value_or_key, $string_key='')
Get the label for a specific approval value.
static get_all()
Return array of status options.
static has_cap( $caps='', $object_id=null, $user_id=null)
Alias of GravityView_Roles_Capabilities::has_cap()
maybe_prevent_field_render( $html, $args)