GravityView  2.9.2
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  public function field_options( $field_options, $template_id, $field_id, $context, $input_type, $form_id ) {
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  wp_register_script( 'gravityview-field-approval-popper', GRAVITYVIEW_URL . 'assets/lib/tippy/popper.min.js', array(), GravityView_Plugin::version, true );
144  wp_register_script( 'gravityview-field-approval-tippy', GRAVITYVIEW_URL . 'assets/lib/tippy/tippy.min.js', array(), GravityView_Plugin::version, true );
145  wp_register_style( 'gravityview-field-approval-tippy', GRAVITYVIEW_URL . 'assets/lib/tippy/tippy.css', array(), GravityView_Plugin::version, 'screen' );
146 
147  $style_path = GRAVITYVIEW_DIR . 'templates/css/field-approval.css';
148 
149  if( class_exists( 'GravityView_View' ) ) {
150  /**
151  * Override CSS file by placing in your theme's /gravityview/css/ sub-directory.
152  */
153  $style_path = GravityView_View::getInstance()->locate_template( 'css/field-approval.css', false );
154  }
155 
156  $style_url = plugins_url( 'css/field-approval.css', trailingslashit( dirname( $style_path ) ) );
157 
158  /**
159  * @filter `gravityview/field/approval/css_url` URL to the Approval field CSS file.
160  * @since 1.19
161  * @param string $style_url Override to use your own CSS file, or return empty string to disable loading.
162  */
163  $style_url = apply_filters( 'gravityview/field/approval/css_url', $style_url );
164 
165  if( ! empty( $style_url ) ) {
166  wp_register_style( 'gravityview-field-approval', $style_url, array( 'dashicons' ), GravityView_Plugin::version, 'screen' );
167  }
168 
169  unset( $style_path, $style_url );
170  }
171 
172  /**
173  * Register the field approval script and output the localized text JS variables
174  * @since 1.19
175  * @return void
176  */
177  public function enqueue_and_localize_script() {
178 
179  // The script is already registered and enqueued
180  if( wp_script_is( 'gravityview-field-approval', 'enqueued' ) ) {
181  return;
182  }
183 
184  wp_enqueue_style( 'gravityview-field-approval' );
185 
186  wp_enqueue_script( 'gravityview-field-approval' );
187  wp_enqueue_script( 'gravityview-field-approval-tippy' );
188  wp_enqueue_script( 'gravityview-field-approval-popper' );
189  wp_enqueue_style( 'gravityview-field-approval-tippy' );
190 
191  wp_localize_script( 'gravityview-field-approval', 'gvApproval', array(
192  'ajaxurl' => admin_url( 'admin-ajax.php' ),
193  'nonce' => wp_create_nonce('gravityview_entry_approval'),
195  'status_popover_template' => GravityView_Entry_Approval::get_popover_template(),
196  'status_popover_placement' => GravityView_Entry_Approval::get_popover_placement(),
197  ));
198 
199  }
200 
201  /**
202  * Add Fields to the field list
203  *
204  * @since 1.19
205  *
206  * @param array $entry_default_fields Array of fields shown by default
207  * @param string|array $form form_ID or form object
208  * @param string $context Either 'single', 'directory', 'header', 'footer'
209  *
210  * @return array
211  */
212  public function filter_gravityview_entry_default_field( $entry_default_fields, $form, $context ) {
213 
214  if ( ! isset( $entry_default_fields["{$this->name}"] ) && 'edit' !== $context ) {
215  $entry_default_fields["{$this->name}"] = array(
216  'label' => $this->label,
217  'desc' => $this->description,
218  'type' => $this->name,
219  );
220  }
221 
222  return $entry_default_fields;
223  }
224 
225  /**
226  * Get the anchor text for a link, based on the current status
227  *
228  * @since 1.19
229  * @uses GravityView_Entry_Approval_Status::get_string()
230  *
231  * @param string $approved_status Status string or key
232  *
233  * @return false|string False if string doesn't exist, otherwise the "label" for the status
234  */
235  public static function get_anchor_text( $approved_status = '' ) {
236  return GravityView_Entry_Approval_Status::get_string( $approved_status, 'label' );
237  }
238 
239  /**
240  * Get the title attribute for a link, based on the current status
241  *
242  * @since 1.19
243  * @uses GravityView_Entry_Approval_Status::get_string()
244  *
245  * @param int|string $approved_status Status string or key
246  *
247  * @return false|string
248  */
249  public static function get_title_attr( $approved_status ) {
250  return GravityView_Entry_Approval_Status::get_string( $approved_status, 'title' );
251  }
252 
253  /**
254  * Get the CSS class for a link, based on the current status
255  *
256  * @param int|string $approved_status Status string or key
257  *
258  * @return string CSS class, sanitized using esc_attr()
259  */
260  public static function get_css_class( $approved_status ) {
261 
262  $approved_key = GravityView_Entry_Approval_Status::get_key( $approved_status );
263 
264  return esc_attr( "gv-approval-{$approved_key}" );
265  }
266 }
267 
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.
static get_popover_placement()
Where should the popover be placed?
__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
static get_key( $value)
Get the status key for a value.
field_options( $field_options, $template_id, $field_id, $context, $input_type, $form_id)
Remove unused settings for the approval field.
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.
if(empty( $created_by)) $form_id
static get_popover_template()
Get HTML template for a popover used to display approval statuses.
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