website/wp-content/plugins/gravityforms/select_columns.php

301 lines
8.7 KiB
PHP

<?php
// For backwards compatibility, load WordPress if it hasn't been loaded yet
// Will be used if this file is being called directly
if ( ! class_exists( 'RGForms' ) ) {
for ( $i = 0; $i < $depth = 10; $i ++ ) {
$wp_root_path = str_repeat( '../', $i );
if ( file_exists( "{$wp_root_path}wp-load.php" ) ) {
require_once( "{$wp_root_path}wp-load.php" );
require_once( "{$wp_root_path}wp-admin/includes/admin.php" );
break;
}
}
auth_redirect();
}
/**
* Class GFSelectColumns
*
* Handles the changing of what columns are shown on the Entry page
*
* @since Unknown
*/
class GFSelectColumns {
/**
* Renders the column selection page.
*
* @since Unknown
* @access public
*
* @uses GFFormsModel::get_form_meta()
* @uses GFFormsModel::get_grid_columns()
* @uses GFSelectColumns::get_selectable_entry_meta()
* @uses GFFormsModel::convert_field_objects()
* @uses GFFormsModel::get_input_type()
* @uses GF_Field::get_entry_inputs()
* @uses GFCommon::get_label()
*
* @return void
*/
public static function select_columns_page() {
$form_id = absint( $_GET['id'] );
if ( empty( $form_id ) ) {
echo __( 'Oops! We could not locate your form. Please try again.', 'gravityforms' );
exit;
}
?>
<html>
<head>
<?php
wp_print_styles( array( 'wp-admin', 'colors-fresh' ) );
wp_print_scripts( array( 'jquery-ui-sortable' ) );
//adds touchscreen support on mobile devices
if ( wp_is_mobile() ) {
wp_print_scripts( array( 'jquery-touch-punch' ) );
}
?>
<style type="text/css">
body {
font-family: "Lucida Grande", Verdana, Arial, sans-serif;
}
#sortable_available, #sortable_selected {
list-style-type: none;
margin: 0;
padding: 2px;
height: 250px;
border: 1px solid #eaeaea;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
background-color: #FFF;
overflow: auto;
}
#sortable_available li, #sortable_selected li {
margin: 0 2px 2px 2px;
padding: 2px;
width: 96%;
border: 1px solid white;
cursor: pointer;
font-size: 13px;
}
.field_hover {
border: 1px dashed #2175A9 !important;
}
.placeholder {
background-color: #FFF0A5;
height: 20px;
}
.gcolumn_wrapper {
height: 290px;
padding: 0 20px;
}
.gcolumn_container_left, .gcolumn_container_right {
width: 46%;
}
.gcolumn_container_left {
float: left;
}
.gcolumn_container_right {
float: right;
}
.gform_select_column_heading {
font-weight: bold;
padding-bottom: 7px;
font-size: 13px;
}
.column-arrow-mid {
float: left;
width: 45px;
height: 250px;
background-image: url(<?php echo GFCommon::get_base_url(); ?>/images/arrow-rightleft.png);
background-repeat: no-repeat;
background-position: center center;
margin-top: 26px;
}
.panel-instructions {
border-bottom: 1px solid #dfdfdf;
color: #555;
font-size: 11px;
padding: 10px 20px;
margin-bottom: 6px
}
div.panel-buttons {
margin-top: 8px;
padding: 0 20px;
}
div.panel-buttons {
*margin-top: 0px
}
/* ie specific */
</style>
<script type="text/javascript">
jQuery(document).ready(function () {
jQuery("#sortable_available, #sortable_selected").sortable({connectWith: '.sortable_connected', placeholder: 'placeholder'});
jQuery(".sortable_connected li").hover(
function () {
jQuery(this).addClass("field_hover");
},
function () {
jQuery(this).removeClass("field_hover");
}
);
});
var columns = new Array();
function SelectColumns() {
jQuery("#sortable_selected li").each(function () {
columns.push(this.id);
});
self.parent.parent.ChangeColumns(columns);
}
</script>
</head>
<body>
<?php
$columns = RGFormsModel::get_grid_columns( $form_id );
$field_ids = array_keys( $columns );
$form = RGFormsModel::get_form_meta( $form_id );
array_push( $form['fields'], array( 'id' => 'id', 'label' => __( 'Entry Id', 'gravityforms' ) ) );
array_push( $form['fields'], array( 'id' => 'date_created', 'label' => __( 'Entry Date', 'gravityforms' ) ) );
array_push( $form['fields'], array( 'id' => 'ip', 'label' => __( 'User IP', 'gravityforms' ) ) );
array_push( $form['fields'], array( 'id' => 'source_url', 'label' => __( 'Source Url', 'gravityforms' ) ) );
array_push( $form['fields'], array( 'id' => 'payment_status', 'label' => __( 'Payment Status', 'gravityforms' ) ) );
array_push( $form['fields'], array( 'id' => 'transaction_id', 'label' => __( 'Transaction Id', 'gravityforms' ) ) );
array_push( $form['fields'], array( 'id' => 'payment_amount', 'label' => __( 'Payment Amount', 'gravityforms' ) ) );
array_push( $form['fields'], array( 'id' => 'payment_date', 'label' => __( 'Payment Date', 'gravityforms' ) ) );
array_push( $form['fields'], array( 'id' => 'created_by', 'label' => __( 'User', 'gravityforms' ) ) );
$form = self::get_selectable_entry_meta( $form );
$form = GFFormsModel::convert_field_objects( $form );
?>
<div class="panel-instructions"><?php esc_html_e( 'Drag & drop to order and select which columns are displayed in the entries table.', 'gravityforms' ) ?></div>
<div class="gcolumn_wrapper">
<div class="gcolumn_container_left">
<div class="gform_select_column_heading"><?php esc_html_e( 'Active Columns', 'gravityforms' ); ?></div>
<ul id="sortable_selected" class="sortable_connected">
<?php
foreach ( $columns as $field_id => $field_info ) {
?>
<li id="<?php echo esc_attr( $field_id ) ?>"><?php echo esc_html( $field_info['label'] ) ?></li>
<?php
}
?>
</ul>
</div>
<div class="column-arrow-mid"></div>
<div class="gcolumn_container_right" id="available_column">
<div class="gform_select_column_heading"> <?php esc_html_e( 'Inactive Columns', 'gravityforms' ); ?></div>
<ul id="sortable_available" class="sortable_connected">
<?php
foreach ( $form['fields'] as $field ) {
/* @var GF_Field $field */
if ( RGFormsModel::get_input_type( $field ) == 'checkbox' && ! in_array( $field->id, $field_ids ) ) {
?>
<li id="<?php echo esc_attr( $field->id ); ?>"><?php echo esc_html( GFCommon::get_label( $field ) ) ?></li>
<?php
}
$inputs = $field->get_entry_inputs();
$input_type = GFFormsModel::get_input_type( $field );
$display = ! in_array( $input_type, array( 'list', 'repeater' ) );
/**
* Allows fields to be added or removed from the select columns UI on the entry list.
*
* @since 2.4
*
* @param bool $display Whether the field will be available for selection.
* @param GF_Field $field
* @param array $form
*/
$display = gf_apply_filters( array( 'gform_display_field_select_columns_entry_list', $form_id, $field->id ), $display, $field, $form );
if ( is_array( $inputs ) ) {
foreach ( $inputs as $input ) {
if ( rgar( $input, 'isHidden' ) ) {
continue;
}
if ( ! in_array( $input['id'], $field_ids ) && ! ( $field->type == 'creditcard' && in_array( $input['id'], array( floatval( "{$field->id}.2" ), floatval( "{$field->id}.3" ), floatval( "{$field->id}.5" ) ) ) ) ) {
?>
<li id="<?php echo esc_attr( $input['id'] ); ?>"><?php echo esc_html( GFCommon::get_label( $field, $input['id'] ) ); ?></li>
<?php
}
}
} else if ( ! $field->displayOnly && ! in_array( $field->id, $field_ids ) && $display ) {
?>
<li id="<?php echo $field->id ?>"><?php echo esc_html( GFCommon::get_label( $field ) ); ?></li>
<?php
}
}
?>
</ul>
</div>
</div>
<div class="panel-buttons">
<input type="button" value=" <?php esc_attr_e( 'Save', 'gravityforms' ); ?> " class="button-primary" onclick="SelectColumns();" onkeypress="SelectColumns();" />&nbsp;
<input type="button" value="<?php esc_attr_e( 'Cancel', 'gravityforms' ); ?>" class="button" onclick="self.parent.tb_remove();" onkeypress="self.parent.tb_remove();" />
</div>
</body>
</html>
<?php
}
/**
* Adds the entry meta to the Form object.
*
* @since Unknown
* @access public
*
* @uses GFFormsModel::get_entry_meta()
*
* @param array $form The Form object.
*
* @return array $form The Form object.
*/
public static function get_selectable_entry_meta( $form ) {
$entry_meta = GFFormsModel::get_entry_meta( $form['id'] );
$keys = array_keys( $entry_meta );
foreach ( $keys as $key ) {
array_push( $form['fields'], array( 'id' => $key, 'label' => $entry_meta[ $key ]['label'] ) );
}
return $form;
}
}
GFSelectColumns::select_columns_page();