Completed
Push — develop ( 87b48c...882b48 )
by Gennady
23:47 queued 03:49
created

Entry_Table_Template   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 92
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 8

Test Coverage

Coverage 96.67%

Importance

Changes 0
Metric Value
dl 0
loc 92
ccs 29
cts 30
cp 0.9667
rs 10
c 0
b 0
f 0
wmc 9
lcom 1
cbo 8

2 Methods

Rating   Name   Duplication   Size   Complexity  
A the_field() 0 6 3
B the_entry() 0 66 6
1
<?php
2
namespace GV;
3
4
/** If this file is called directly, abort. */
5
if ( ! defined( 'GRAVITYVIEW_DIR' ) ) {
6
	die();
7
}
8
9
/**
10
 * The Entry Table Template class .
11
 *
12
 * Renders a \GV\Entry using a \GV\Entry_Renderer.
13
 */
14
class Entry_Table_Template extends Entry_Template {
15
	/**
16
	 * @var string The template slug to be loaded (like "table", "list")
17
	 */
18
	public static $slug = 'table';
19
20
	/**
21
	 * Output a field cell.
22
	 *
23
	 * @param \GV\Field $field The field to be ouput.
24
	 *
25
	 * @return string|false The field output or false if "hide_empty" is set.
26
	 */
27 12
	public function the_field( \GV\Field $field ) {
28 12
		$renderer = new Field_Renderer();
29 12
		$source = is_numeric( $field->ID ) ? ( GF_Form::by_id( $field->form_id ) ? : $this->view->form ) : new Internal_Source();
0 ignored issues
show
Documentation introduced by
The property form_id does not exist on object<GV\Field>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
30
31 12
		return $renderer->render( $field, $this->view, $source, $this->entry->from_field( $field ), $this->request );
32
	}
33
34
	/**
35
	 * Out the single entry table body.
36
	 *
37
	 * @return void
38
	 */
39 12
	public function the_entry() {
40
41
		/** @var \GV\Field_Collection $fields */
42 12
		$fields = $this->view->fields->by_position( 'single_table-columns' )->by_visible( $this->view );
43
44 12
		$context = Template_Context::from_template( $this, compact( 'fields' ) );
45
46
		/**
47
		 * @filter `gravityview_table_cells` Modify the fields displayed in a table
48
		 * @param array $fields
49
		 * @param \GravityView_View $this
50
		 * @deprecated Use `gravityview/template/table/fields`
51
		 */
52 12
		$fields = apply_filters( 'gravityview_table_cells', $fields->as_configuration(), \GravityView_View::getInstance() );
53 12
		$fields = Field_Collection::from_configuration( $fields );
54
55
		/**
56
		 * @filter `gravityview/template/table/fields` Modify the fields displayed in this tables.
57
		 * @param \GV\Field_Collection $fields The fields.
58
		 * @param \GV\Template_Context $context The context.
59
		 * @since 2.0
60
		 */
61 12
		$fields = apply_filters( 'gravityview/template/table/fields', $fields, $context );
62
63 12
		foreach ( $fields->all() as $field ) {
64 12
			$context = Template_Context::from_template( $this, compact( 'field' ) );
65
66 12
			$form = \GV\GF_Form::by_id( $field->form_id ) ? : $this->view->form;
67 12
			$entry = $this->entry->from_field( $field );
0 ignored issues
show
Bug introduced by
Are you sure the assignment to $entry is correct as $this->entry->from_field($field) (which targets GV\Entry::from_field()) seems to always return null.

This check looks for function or method calls that always return null and whose return value is assigned to a variable.

class A
{
    function getObject()
    {
        return null;
    }

}

$a = new A();
$object = $a->getObject();

The method getObject() can return nothing but null, so it makes no sense to assign that value to a variable.

The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes.

Loading history...
68
69 12
			if ( ! $entry ) {
70
				continue;
71
			}
72
73
			/**
74
			 * @deprecated Here for back-compatibility.
75
			 */
76 12
			$column_label = apply_filters( 'gravityview_render_after_label', $field->get_label( $this->view, $form, $entry ), $field->as_configuration() );
77 12
			$column_label = apply_filters( 'gravityview/template/field_label', $column_label, $field->as_configuration(), $form->form ? $form->form : null, $entry->as_entry() );
0 ignored issues
show
Documentation introduced by
The property $form is declared private in GV\Form. Since you implemented __get(), maybe consider adding a @property or @property-read annotation. This makes it easier for IDEs to provide auto-completion.

Since your code implements the magic setter _set, this function will be called for any write access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

Since the property has write access only, you can use the @property-write annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
78
79
			/**
80
			 * @filter `gravityview/template/field/label` Override the field label.
81
			 * @since 2.0
82
			 * @param[in,out] string $column_label The label to override.
83
			 * @param \GV\Template_Context $context The context.
84
			 */
85 12
			$column_label = apply_filters( 'gravityview/template/field/label', $column_label, $context );
86
87
			/**
88
			 * @filter `gravityview/template/table/entry/hide_empty`
89
			 * @param boolean $hide_empty Should the row be hidden if the value is empty? Default: don't hide.
90
			 * @param \GV\Template_Context $context The context ;) Love it, cherish it. And don't you dare modify it!
91
			 */
92 12
			$hide_empty = apply_filters( 'gravityview/render/hide-empty-zone', $this->view->settings->get( 'hide_empty', false ), $context );
93
94 12
			echo \gravityview_field_output( array(
95 12
				'entry' => $this->entry->as_entry(),
96 12
				'field' => is_numeric( $field->ID ) ? $field->as_configuration() : null,
97 12
				'label' => $column_label,
98 12
				'value' => $this->the_field( $field ),
99 12
				'markup' => '<tr id="{{ field_id }}" class="{{ class }}"><th scope="row">{{ label }}</th><td>{{ value }}</td></tr>',
100 12
				'hide_empty' => $hide_empty,
101 12
				'zone_id' => 'single_table-columns',
102 12
			), $context );
103
		}
104 12
	}
105
}
106