예제 #1
0
파일: list.php 프로젝트: kidaak/GravityView
 /**
  * Get the value of a Multiple Column List field for a specific column.
  *
  * @since 1.14
  *
  * @see GF_Field_List::get_value_entry_detail()
  *
  * @param GF_Field_List $field Gravity Forms field
  * @param string|array $field_value Serialized or unserialized array value for the field
  * @param int|string $column_id The numeric key of the column (0-index) or the label of the column
  * @param string $format If set to 'raw', return an array of values for the column. Otherwise, allow Gravity Forms to render using `html` or `text`
  *
  * @return array|string|null Returns null if the $field_value passed wasn't an array or serialized array
  */
 public static function column_value(GF_Field_List $field, $field_value, $column_id = 0, $format = 'html')
 {
     $list_rows = maybe_unserialize($field_value);
     if (!is_array($list_rows)) {
         do_action('gravityview_log_error', __METHOD__ . ' - $field_value did not unserialize', $field_value);
         return null;
     }
     $column_values = array();
     // Each list row
     foreach ($list_rows as $list_row) {
         $current_column = 0;
         foreach ($list_row as $column_key => $column_value) {
             // If the label of the column matches $column_id, or the numeric key value matches, add the value
             if ((string) $column_key === (string) $column_id || is_numeric($column_id) && (int) $column_id === $current_column) {
                 $column_values[] = $column_value;
             }
             $current_column++;
         }
     }
     // Return the array of values
     if ('raw' === $format) {
         return $column_values;
     } else {
         return $field->get_value_entry_detail(serialize($column_values), '', false, $format);
     }
 }
예제 #2
0
    public function get_field_input($form, $value = '', $entry = null)
    {
        $form_id = $form['id'];
        $is_entry_detail = $this->is_entry_detail();
        $is_form_editor = $this->is_form_editor();
        $disabled_text = $is_form_editor ? 'disabled="disabled"' : '';
        if (!empty($value)) {
            $value = maybe_unserialize($value);
        }
        if (!is_array($value)) {
            $value = array(array());
        }
        $has_columns = is_array($this->choices);
        $columns = $has_columns ? $this->choices : array(array());
        $shim_style = is_rtl() ? 'position:absolute;left:999em;' : 'position:absolute;left:-999em;';
        $label_target_shim = sprintf('<input type=\'text\' id=\'input_%1$s_%2$s_shim\' style=\'%3$s\' onfocus=\'jQuery( "#field_%1$s_%2$s table tr td:first-child input" ).focus();\' />', $form_id, $this->id, $shim_style);
        $list = '';
        if (!self::$_style_block_printed) {
            //This style block needs to be inline so that the list field continues to work even if the option to turn off CSS output is activated
            $list .= '<style type="text/css">

						body .ginput_container_list table.gfield_list tbody tr td.gfield_list_icons {
							vertical-align: middle !important;
						}

						body .ginput_container_list table.gfield_list tbody tr td.gfield_list_icons img.add_list_item,
						body .ginput_container_list table.gfield_list tbody tr td.gfield_list_icons img.delete_list_item {
							background-color: transparent !important;
							background-position: 0 0;
							background-size: 16px 16px !important;
							background-repeat: no-repeat;
							border: none !important;
							width: 16px !important;
							height: 16px !important;
							opacity: 0.5;
							transition: opacity .5s ease-out;
						    -moz-transition: opacity .5s ease-out;
						    -webkit-transition: opacity .5s ease-out;
						    -o-transition: opacity .5s ease-out;
						}

						body .ginput_container_list table.gfield_list tbody tr td.gfield_list_icons img.add_list_item:hover,
						body .ginput_container_list table.gfield_list tbody tr td.gfield_list_icons img.delete_list_item:hover {
							opacity: 1.0;
						}

						</style>';
            self::$_style_block_printed = true;
        }
        $list .= "<div class='ginput_container ginput_container_list ginput_list'>" . $label_target_shim . "<table class='gfield_list gfield_list_container'>";
        $class_attr = '';
        if ($has_columns) {
            $list .= '<colgroup>';
            for ($colnum = 1; $colnum <= count($columns) + 1; $colnum++) {
                $odd_even = $colnum % 2 == 0 ? 'even' : 'odd';
                $list .= sprintf("<col id='gfield_list_%d_col_%d' class='gfield_list_col_%s' />", $this->id, $colnum, $odd_even);
            }
            $list .= '</colgroup>';
            $list .= '<thead><tr>';
            foreach ($columns as $column) {
                $list .= '<th>' . esc_html($column['text']) . '</th>';
            }
            $list .= '<th>&nbsp;</th></tr></thead>';
        } else {
            $list .= '<colgroup>' . "<col id='gfield_list_{$this->id}_col1' class='gfield_list_col_odd' />" . "<col id='gfield_list_{$this->id}_col2' class='gfield_list_col_even' />" . '</colgroup>';
        }
        $delete_display = count($value) == 1 ? 'visibility:hidden;' : '';
        $maxRow = intval($this->maxRows);
        $disabled_icon_class = !empty($maxRow) && count($value) >= $maxRow ? 'gfield_icon_disabled' : '';
        $add_icon = !empty($this->addIconUrl) ? $this->addIconUrl : GFCommon::get_base_url() . '/images/list-add.svg';
        $delete_icon = !empty($this->deleteIconUrl) ? $this->deleteIconUrl : GFCommon::get_base_url() . '/images/list-remove.svg';
        $add_events = $is_form_editor ? '' : "onclick='gformAddListItem(this, {$maxRow})' onkeypress='gformAddListItem(this, {$maxRow})'";
        $delete_events = $is_form_editor ? '' : "onclick='gformDeleteListItem(this, {$maxRow})' onkeypress='gformDeleteListItem(this, {$maxRow})'";
        $list .= '<tbody>';
        $rownum = 1;
        foreach ($value as $item) {
            $odd_even = $rownum % 2 == 0 ? 'even' : 'odd';
            $list .= "<tr class='gfield_list_row_{$odd_even} gfield_list_group'>";
            $colnum = 1;
            foreach ($columns as $column) {
                $data_label = '';
                //getting value. taking into account columns being added/removed from form meta
                if (is_array($item)) {
                    if ($has_columns) {
                        $val = rgar($item, $column['text']);
                        $data_label = "data-label='" . esc_attr($column['text']) . "'";
                    } else {
                        $vals = array_values($item);
                        $val = rgar($vals, 0);
                    }
                } else {
                    $val = $colnum == 1 ? $item : '';
                }
                $list .= "<td class='gfield_list_cell gfield_list_{$this->id}_cell{$colnum}' {$data_label}>" . $this->get_list_input($has_columns, $column, $val, $form_id) . '</td>';
                $colnum++;
            }
            if ($this->maxRows != 1) {
                // can't replace these icons with the webfont versions since they appear on the front end.
                $list .= "<td class='gfield_list_icons'>";
                $list .= "   <img src='{$add_icon}' class='add_list_item {$disabled_icon_class}' {$disabled_text} title='" . esc_attr__('Add another row', 'gravityforms') . "' alt='" . esc_attr__('Add a new row', 'gravityforms') . "' {$add_events} style='cursor:pointer;' " . $this->get_tabindex() . "/>" . "   <img src='{$delete_icon}' class='delete_list_item' {$disabled_text} title='" . esc_attr__('Remove this row', 'gravityforms') . "' alt='" . esc_attr__('Remove this row', 'gravityforms') . "' {$delete_events} style='cursor:pointer; {$delete_display}' " . $this->get_tabindex() . "/>";
                $list .= '</td>';
            }
            $list .= '</tr>';
            if (!empty($maxRow) && $rownum >= $maxRow) {
                break;
            }
            $rownum++;
        }
        $list .= '</tbody>';
        $list .= '</table></div>';
        return $list;
    }
예제 #3
0
    public function get_field_input($form, $value = '', $entry = null)
    {
        $form_id = $form['id'];
        $is_entry_detail = $this->is_entry_detail();
        $is_form_editor = $this->is_form_editor();
        $disabled_text = $is_form_editor ? 'disabled="disabled"' : '';
        if (!empty($value)) {
            $value = maybe_unserialize($value);
        }
        if (!is_array($value)) {
            $value = array(array());
        }
        $has_columns = is_array($this->choices);
        $columns = $has_columns ? $this->choices : array(array());
        $shim_style = is_rtl() ? 'position:absolute;left:999em;' : 'position:absolute;left:-999em;';
        $label_target_shim = sprintf('<input type=\'text\' id=\'input_%1$s_%2$s_shim\' style=\'%3$s\' onfocus=\'jQuery( "#field_%1$s_%2$s table tr td:first-child input" ).focus();\' />', $form_id, $this->id, $shim_style);
        $list = '';
        if (!self::$_style_block_printed) {
            //This style block needs to be inline so that the list field continues to work even if the option to turn off CSS output is activated
            $list .= '<style type="text/css">
						body .ginput_container_list table.gfield_list tbody tr td.gfield_list_icons img.add_list_item[src$="plugins/gravityforms/images/blankspace.png"],
						body .ginput_container_list table.gfield_list tbody tr td.gfield_list_icons img.delete_list_item[src$="plugins/gravityforms/images/blankspace.png"] {
							background-color: transparent !important;
							background-position: 0 0;
							background-size: 16px 16px !important;
							background-repeat: no-repeat;
							border: none !important;
							width: 16px !important;
							height: 16px !important;
							vertical-align: middle !important;
							opacity: 0.5;
						}

						body .ginput_container_list table.gfield_list tbody tr td.gfield_list_icons img.add_list_item,
						body .ginput_container_list table.gfield_list tbody tr td.gfield_list_icons img.delete_list_item {
							width: 16px;
							height: 16px;
							vertical-align: middle !important;
							opacity: 0.5;
						}

						body .ginput_container_list table.gfield_list tbody tr td.gfield_list_icons img.add_list_item[src$="plugins/gravityforms/images/blankspace.png"] {
							background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxnIGlkPSJpY29tb29uLWlnbm9yZSI+PC9nPjxwYXRoIGQ9Ik0yNTYgNTEyYy0xNDEuMzc1IDAtMjU2LTExNC42MDktMjU2LTI1NnMxMTQuNjI1LTI1NiAyNTYtMjU2YzE0MS4zOTEgMCAyNTYgMTE0LjYwOSAyNTYgMjU2cy0xMTQuNjA5IDI1Ni0yNTYgMjU2ek0yNTYgNjRjLTEwNi4wMzEgMC0xOTIgODUuOTY5LTE5MiAxOTJzODUuOTY5IDE5MiAxOTIgMTkyYzEwNi4wNDcgMCAxOTItODUuOTY5IDE5Mi0xOTJzLTg1Ljk1My0xOTItMTkyLTE5MnpNMjg4IDM4NGgtNjR2LTk2aC05NnYtNjRoOTZ2LTk2aDY0djk2aDk2djY0aC05NnY5NnoiPjwvcGF0aD48L3N2Zz4=");
						}

						body .ginput_container_list table.gfield_list tbody tr td.gfield_list_icons img.delete_list_item[src$="plugins/gravityforms/images/blankspace.png"] {
							background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxnIGlkPSJpY29tb29uLWlnbm9yZSI+PC9nPjxwYXRoIGQ9Ik0yNTYgMGMtMTQxLjM3NSAwLTI1NiAxMTQuNjI1LTI1NiAyNTYgMCAxNDEuMzkxIDExNC42MjUgMjU2IDI1NiAyNTYgMTQxLjM5MSAwIDI1Ni0xMTQuNjA5IDI1Ni0yNTYgMC0xNDEuMzc1LTExNC42MDktMjU2LTI1Ni0yNTZ6TTI1NiA0NDhjLTEwNi4wMzEgMC0xOTItODUuOTY5LTE5Mi0xOTJzODUuOTY5LTE5MiAxOTItMTkyYzEwNi4wNDcgMCAxOTIgODUuOTY5IDE5MiAxOTJzLTg1Ljk1MyAxOTItMTkyIDE5MnpNMTI4IDI4OGgyNTZ2LTY0aC0yNTZ2NjR6Ij48L3BhdGg+PC9zdmc+");
						}

						body .ginput_container_list table.gfield_list tbody tr td.gfield_list_icons img.add_list_item:hover,
						body .ginput_container_list table.gfield_list tbody tr td.gfield_list_icons img.delete_list_item:hover {
							opacity: 1.0;
						}
						</style>';
            self::$_style_block_printed = true;
        }
        $list .= "<div class='ginput_container ginput_container_list ginput_list'>" . $label_target_shim . "<table class='gfield_list gfield_list_container'>";
        $class_attr = '';
        if ($has_columns) {
            $list .= '<colgroup>';
            for ($colnum = 1; $colnum <= count($columns) + 1; $colnum++) {
                $odd_even = $colnum % 2 == 0 ? 'even' : 'odd';
                $list .= sprintf("<col id='gfield_list_%d_col_%d' class='gfield_list_col_%s' />", $this->id, $colnum, $odd_even);
            }
            $list .= '</colgroup>';
            $list .= '<thead><tr>';
            foreach ($columns as $column) {
                $list .= '<th>' . esc_html($column['text']) . '</th>';
            }
            $list .= '<th>&nbsp;</th></tr></thead>';
        } else {
            $list .= '<colgroup>' . "<col id='gfield_list_{$this->id}_col1' class='gfield_list_col_odd' />" . "<col id='gfield_list_{$this->id}_col2' class='gfield_list_col_even' />" . '</colgroup>';
        }
        $delete_display = count($value) == 1 ? 'visibility:hidden;' : '';
        $maxRow = intval($this->maxRows);
        $disabled_icon_class = !empty($maxRow) && count($value) >= $maxRow ? 'gfield_icon_disabled' : '';
        $add_icon = !empty($this->addIconUrl) ? $this->addIconUrl : GFCommon::get_base_url() . '/images/blankspace.png';
        $delete_icon = !empty($this->deleteIconUrl) ? $this->deleteIconUrl : GFCommon::get_base_url() . '/images/blankspace.png';
        $add_events = $is_form_editor ? '' : "onclick='gformAddListItem(this, {$maxRow})' onkeypress='gformAddListItem(this, {$maxRow})'";
        $delete_events = $is_form_editor ? '' : "onclick='gformDeleteListItem(this, {$maxRow})' onkeypress='gformDeleteListItem(this, {$maxRow})'";
        $list .= '<tbody>';
        $rownum = 1;
        foreach ($value as $item) {
            $odd_even = $rownum % 2 == 0 ? 'even' : 'odd';
            $list .= "<tr class='gfield_list_row_{$odd_even} gfield_list_group'>";
            $colnum = 1;
            foreach ($columns as $column) {
                $data_label = '';
                //getting value. taking into account columns being added/removed from form meta
                if (is_array($item)) {
                    if ($has_columns) {
                        $val = rgar($item, $column['text']);
                        $data_label = "data-label='" . esc_attr($column['text']) . "'";
                    } else {
                        $vals = array_values($item);
                        $val = rgar($vals, 0);
                    }
                } else {
                    $val = $colnum == 1 ? $item : '';
                }
                $list .= "<td class='gfield_list_cell gfield_list_{$this->id}_cell{$colnum}' {$data_label}>" . $this->get_list_input($has_columns, $column, $val, $form_id) . '</td>';
                $colnum++;
            }
            if ($this->maxRows != 1) {
                // can't replace these icons with the webfont versions since they appear on the front end.
                $list .= "<td class='gfield_list_icons'>";
                $list .= "   <img src='{$add_icon}' class='add_list_item {$disabled_icon_class}' {$disabled_text} title='" . esc_attr__('Add another row', 'gravityforms') . "' alt='" . esc_attr__('Add a row', 'gravityforms') . "' {$add_events} style='cursor:pointer; margin:0 3px;' " . $this->get_tabindex() . "/>" . "   <img src='{$delete_icon}' class='delete_list_item' {$disabled_text} title='" . esc_attr__('Remove this row', 'gravityforms') . "' alt='" . esc_attr__('Remove this row', 'gravityforms') . "' {$delete_events} style='cursor:pointer; {$delete_display}' " . $this->get_tabindex() . "/>";
                $list .= '</td>';
            }
            $list .= '</tr>';
            if (!empty($maxRow) && $rownum >= $maxRow) {
                break;
            }
            $rownum++;
        }
        $list .= '</tbody>';
        $list .= '</table></div>';
        return $list;
    }