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