GravityView  2.1.1
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  add_filter( 'gravityview/field/is_visible', array( $this, 'maybe_not_visible' ), 10, 2 );
80  }
81 
82  /**
83  * @filter `gravityview/template/field_label` Modify field label output
84  *
85  * @since 1.19
86  *
87  * @param string $html Existing HTML output
88  * @param array $args Arguments passed to the function
89  *
90  * @return string Empty string if user doesn't have the `gravityview_moderate_entries` cap; field HTML otherwise
91  */
92  public function maybe_prevent_field_render( $html, $args ) {
93 
94  // If the field is `entry_approval` type but the user doesn't have the moderate entries cap, don't render.
95  if( $this->name === \GV\Utils::get( $args['field'], 'id' ) && ! GVCommon::has_cap('gravityview_moderate_entries') ) {
96  return '';
97  }
98 
99  return $html;
100  }
101 
102  /**
103  * Do not show this field if `gravityview_moderate_entries` capability is absent.
104  *
105  * @return boolean Whether this field is visible or not.
106  */
107  public function maybe_not_visible( $visible, $field ) {
108  if ( $this->name !== $field->ID ) {
109  return $visible;
110  }
111 
112  return GVCommon::has_cap( 'gravityview_moderate_entries' );
113  }
114 
115  /**
116  * Modify search to use `is_approved` meta key to sort, instead of `entry_approval`
117  *
118  * @param array $parameters Search parameters used to generate GF search
119  *
120  * @return array Same parameters, but if sorting by `entry_approval`, changed to `is_approved`
121  */
122  public function modify_search_parameters( $parameters ) {
123 
124  if ( $this->name === \GV\Utils::get( $parameters, 'sorting/key' ) ) {
125  $parameters['sorting']['key'] = 'is_approved';
126  }
127 
128  return $parameters;
129  }
130 
131  /**
132  * Register the field approval script and style
133  *
134  * @since 1.19
135  *
136  * @return void
137  */
139  $script_debug = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
140 
141  wp_register_script( 'gravityview-field-approval', GRAVITYVIEW_URL . 'assets/js/field-approval'.$script_debug.'.js', array( 'jquery' ), GravityView_Plugin::version, true );
142 
143  $style_path = GRAVITYVIEW_DIR . 'templates/css/field-approval.css';
144 
145  if( class_exists( 'GravityView_View' ) ) {
146  /**
147  * Override CSS file by placing in your theme's /gravityview/css/ sub-directory.
148  */
149  $style_path = GravityView_View::getInstance()->locate_template( 'css/field-approval.css', false );
150  }
151 
152  $style_url = plugins_url( 'css/field-approval.css', trailingslashit( dirname( $style_path ) ) );
153 
154  /**
155  * @filter `gravityview/field/approval/css_url` URL to the Approval field CSS file.
156  * @since 1.19
157  * @param string $style_url Override to use your own CSS file, or return empty string to disable loading.
158  */
159  $style_url = apply_filters( 'gravityview/field/approval/css_url', $style_url );
160 
161  if( ! empty( $style_url ) ) {
162  wp_register_style( 'gravityview-field-approval', $style_url, array( 'dashicons' ), GravityView_Plugin::version, 'screen' );
163  }
164 
165  unset( $style_path, $style_url );
166  }
167 
168  /**
169  * Register the field approval script and output the localized text JS variables
170  * @since 1.19
171  * @return void
172  */
173  public function enqueue_and_localize_script() {
174 
175  // The script is already registered and enqueued
176  if( wp_script_is( 'gravityview-field-approval', 'enqueued' ) ) {
177  return;
178  }
179 
180  wp_enqueue_style( 'gravityview-field-approval' );
181 
182  wp_enqueue_script( 'gravityview-field-approval' );
183 
184  wp_localize_script( 'gravityview-field-approval', 'gvApproval', array(
185  'ajaxurl' => admin_url( 'admin-ajax.php' ),
186  'nonce' => wp_create_nonce('gravityview_entry_approval'),
188  ));
189 
190  }
191 
192  /**
193  * Add Fields to the field list
194  *
195  * @since 1.19
196  *
197  * @param array $entry_default_fields Array of fields shown by default
198  * @param string|array $form form_ID or form object
199  * @param string $context Either 'single', 'directory', 'header', 'footer'
200  *
201  * @return array
202  */
203  public function filter_gravityview_entry_default_field( $entry_default_fields, $form, $context ) {
204 
205  if ( ! isset( $entry_default_fields["{$this->name}"] ) && 'edit' !== $context ) {
206  $entry_default_fields["{$this->name}"] = array(
207  'label' => $this->label,
208  'desc' => $this->description,
209  'type' => $this->name,
210  );
211  }
212 
213  return $entry_default_fields;
214  }
215 
216  /**
217  * Get the anchor text for a link, based on the current status
218  *
219  * @since 1.19
220  * @uses GravityView_Entry_Approval_Status::get_string()
221  *
222  * @param string $approved_status Status string or key
223  *
224  * @return false|string False if string doesn't exist, otherwise the "label" for the status
225  */
226  public static function get_anchor_text( $approved_status = '' ) {
227  return GravityView_Entry_Approval_Status::get_string( $approved_status, 'label' );
228  }
229 
230  /**
231  * Get the title attribute for a link, based on the current status
232  *
233  * @since 1.19
234  * @uses GravityView_Entry_Approval_Status::get_string()
235  *
236  * @param int|string $approved_status Status string or key
237  *
238  * @return false|string
239  */
240  public static function get_title_attr( $approved_status ) {
241  return GravityView_Entry_Approval_Status::get_string( $approved_status, 'title' );
242  }
243 
244  /**
245  * Get the CSS class for a link, based on the current status
246  *
247  * @param int|string $approved_status Status string or key
248  *
249  * @return string CSS class, sanitized using esc_attr()
250  */
251  public static function get_css_class( $approved_status ) {
252 
253  $approved_key = GravityView_Entry_Approval_Status::get_key( $approved_status );
254 
255  return esc_attr( "gv-approval-{$approved_key}" );
256  }
257 }
258 
const GRAVITYVIEW_DIR
"GRAVITYVIEW_DIR" "./" The absolute path to the plugin directory, with trailing slash ...
Definition: gravityview.php:40
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:36
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.
get( $key, $default=null)
Retrieve a setting.
$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
maybe_not_visible( $visible, $field)
Do not show this field if gravityview_moderate_entries capability is absent.
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)
$field
Definition: gquiz_grade.php:11