Files
old-experiments/backend/wordpress/wp-content/plugins/gravityflow-master/includes/fields/class-fields.php

254 lines
8.1 KiB
PHP
Raw Normal View History

2018-06-28 10:02:07 +02:00
<?php
/**
* Gravity Flow Fields Functions
*
* @package GravityFlow
* @copyright Copyright (c) 2015-2018, Steven Henty S.L.
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
* @since 1.4.2-dev
*/
if ( ! class_exists( 'GFForms' ) ) {
die();
}
/**
* Class Gravity_Flow_Fields
*/
class Gravity_Flow_Fields {
/**
* Class constructor; if the installed Gravity Forms version is supported initialize the hooks.
*/
function __construct() {
if ( ! gravity_flow()->is_gravityforms_supported() ) {
return;
}
add_action( 'init', array( $this, 'init_hooks' ) );
}
/**
* Add the hooks via the WordPress init action.
*/
public function init_hooks() {
add_filter( 'gform_tooltips', array( $this, 'add_tooltips' ) );
add_action( 'gform_field_standard_settings', array( $this, 'field_settings' ) );
add_action( 'gform_field_appearance_settings', array( $this, 'field_appearance_settings' ) );
add_action( 'gform_entry_detail', array( 'Gravity_Flow_Field_Discussion', 'delete_discussion_item_script' ) );
add_action( 'wp_ajax_rg_delete_file', array( 'RGForms', 'delete_file' ) );
add_action( 'wp_ajax_nopriv_rg_delete_file', array( 'RGForms', 'delete_file' ) );
add_action( 'wp_ajax_gravityflow_delete_discussion_item', array( 'Gravity_Flow_Field_Discussion', 'ajax_delete_discussion_item' ) );
}
/**
* Adds the Workflow Fields group to the form editor.
*
* @param array $field_groups The properties for the field groups.
*
* @return array
*/
public static function maybe_add_workflow_field_group( $field_groups ) {
foreach ( $field_groups as $field_group ) {
if ( $field_group['name'] == 'workflow_fields' ) {
return $field_groups;
}
}
$field_groups[] = array(
'name' => 'workflow_fields',
'label' => __( 'Workflow Fields', 'gravityflow' ),
'fields' => array()
);
return $field_groups;
}
/**
* Add the tooltips for the workflow fields group and any custom field settings.
*
* @param array $tooltips An associative array where the key is the tooltip name and the value is the tooltip.
*
* @return array
*/
public function add_tooltips( $tooltips ) {
$tooltips['form_workflow_fields'] = '<h6>' . __( 'Workflow Fields', 'gravityflow' ) . '</h6>' . __( 'Workflow Fields add advanced workflow functionality to your forms.', 'gravityflow' );
$tooltips['gravityflow_discussion_timestamp_format'] = '<h6>' . __( 'Custom Timestamp Format', 'gravityflow' ) . '</h6>' . sprintf( __( 'If you would like to override the default format used when displaying the comment timestamps, enter your %scustom format%s here.', 'gravityflow' ), '<a href="https://codex.wordpress.org/Formatting_Date_and_Time" target="_blank">', '</a>' );
return $tooltips;
}
/**
* Add the assignees and role settings to the general tab.
*
* @param int $position The setting position.
*/
public function field_settings( $position ) {
if ( $position == 20 ) {
// After Description setting.
$this->setting_assignees();
$this->setting_role();
}
}
/**
* Output the markup for the gravityflow_setting_assignees setting to the field general tab in the form editor.
*/
public function setting_assignees() {
?>
<li class="gravityflow_setting_assignees field_setting">
<span class="section_label"><?php esc_html_e( 'Assignees', 'gravityflow' ); ?></span>
<div>
<input type="checkbox" id="gravityflow-assignee-field-show-users" onclick="SetAssigneeFieldShowUsers();"/>
<label for="gravityflow-assignee-field-show-users" class="inline">
<?php esc_html_e( 'Show Users', 'gravityflow' ); ?>
<?php gform_tooltip( 'gravityflow_assignee_field_show_users' ) ?>
</label>
</div>
<div>
<input type="checkbox" id="gravityflow-assignee-field-show-roles"
onclick="var value = jQuery(this).is(':checked'); SetFieldProperty('gravityflowAssigneeFieldShowRoles', value);"/>
<label for="gravityflow-assignee-field-show-roles" class="inline">
<?php esc_html_e( 'Show Roles', 'gravityflow' ); ?>
<?php gform_tooltip( 'gravityflow_assignee_field_show_roles' ) ?>
</label>
</div>
<div>
<input type="checkbox" id="gravityflow-assignee-field-show-fields"
onclick="var value = jQuery(this).is(':checked'); SetFieldProperty('gravityflowAssigneeFieldShowFields', value);"/>
<label for="gravityflow-assignee-field-show-fields" class="inline">
<?php esc_html_e( 'Show Fields', 'gravityflow' ); ?>
<?php gform_tooltip( 'gravityflow_assignee_field_show_fields' ) ?>
</label>
</div>
</li>
<?php
}
/**
* Output the markup for the gravityflow_setting_users_role_filter setting to the field general tab in the form editor.
*/
public function setting_role() {
?>
<li class="gravityflow_setting_users_role_filter field_setting">
<label for="gravityflow_users_role_filter" class="section_label">
<?php esc_html_e( 'Users Role Filter', 'gravityflow' ); ?>
</label>
<?php $this->setting_role_select(); ?>
</li>
<?php
}
/**
* Output the markup for the role select element.
*/
public function setting_role_select() {
$choices = array(
array(
'value' => '',
'label' => esc_html__( 'Include users from all roles', 'gravityflow' )
)
);
$role_field = array(
'name' => 'gravityflow_users_role_filter',
'choices' => array_merge( $choices, Gravity_Flow_Common::get_roles_as_choices( false ) ),
'onchange' => "SetFieldProperty('gravityflowUsersRoleFilter',this.value);",
);
$html = gravity_flow()->settings_select( $role_field, false );
echo str_replace( sprintf( 'name="_gaddon_setting_%s"', esc_attr( $role_field['name'] ) ), '', $html );
}
/**
* Add the discussion fields custom timestamp format to the appearance tab.
*
* @param int $position The setting position.
*/
public function field_appearance_settings( $position ) {
if ( $position == 0 ) {
?>
<li class="gravityflow_setting_discussion_timestamp_format field_setting">
<label for="gravityflow_discussion_timestamp_format" class="section_label">
<?php esc_html_e( 'Custom Timestamp Format', 'gravityflow' ); ?>
<?php gform_tooltip( 'gravityflow_discussion_timestamp_format' ) ?>
</label>
<input id="gravityflow_discussion_timestamp_format" type="text" class="fieldwidth-4"
placeholder="d M Y g:i a" onkeyup="SetDiscussionTimestampFormat(jQuery(this).val());"
onchange="SetDiscussionTimestampFormat(jQuery(this).val());"/>
</li>
<?php
}
}
/**
* Retrieves the value of the specified user property/meta key for the specified user ID.
*
* @since 1.5.1-dev
*
* @param string|int $user_id The user ID.
* @param string $property The user property to return.
* @param bool $url_encode Indicates if the urlencode function should be applied.
* @param bool $esc_html Indicates if the esc_html function should be applied.
*
* @return string
*/
public static function get_user_variable( $user_id, $property, $url_encode = false, $esc_html = true ) {
$value = $user_id;
if ( $property != 'id' ) {
$user = get_user_by( 'id', $user_id );
if ( is_object( $user ) ) {
switch ( $property ) {
case 'email' :
$property = 'user_email';
break;
case '' :
$property = 'display_name';
}
if ( $property == 'roles' ) {
$value = implode( ', ', $user->roles );
} else {
$value = $user->get( $property );
}
}
}
return self::maybe_format_user_variable( $value, $url_encode, $esc_html );
}
/**
* Filters the value of invalid or special characters before output.
*
* @since 1.5.1-dev
*
* @param string|int $value The user ID or property to be filtered.
* @param bool $url_encode Indicates if the urlencode function should be applied.
* @param bool $esc_html Indicates if the esc_html function should be applied.
*
* @return string
*/
public static function maybe_format_user_variable( $value, $url_encode, $esc_html ) {
if ( $url_encode ) {
$value = urlencode( $value );
}
if ( $esc_html ) {
$value = esc_html( $value );
}
return $value;
}
}
new Gravity_Flow_Fields();