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

GF_Field   A

Complexity

Total Complexity 28

Size/Duplication

Total Lines 159
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 75.93%

Importance

Changes 0
Metric Value
dl 0
loc 159
ccs 41
cts 54
cp 0.7593
rs 10
c 0
b 0
f 0
wmc 28
lcom 1
cbo 4

5 Methods

Rating   Name   Duplication   Size   Complexity  
B from_configuration() 0 21 6
B by_id() 0 26 6
A get_value() 0 11 4
A __get() 0 9 3
B get_label() 0 29 9
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 Gravity Forms \GF_Field field object wrapper.
11
 */
12
class GF_Field extends Field {
13
	
14
	/**
15
	 * @var \GF_Field The backing Gravity Forms field.
16
	 */
17
	public $field;
18
19
	/**
20
	 * Create self from a configuration array.
21
	 *
22
	 * @param array $configuration The configuration array.
23
	 * @see \GV\Field::as_configuration()
24
	 * @internal
25
	 * @since 2.0
26
	 *
27
	 * @return \GV\GF_Field|null The field implementation or null on error.
28
	 */
29 141
	public static function from_configuration( $configuration ) {
30 141
		if ( empty( $configuration['id'] ) || ! is_numeric( $configuration['id'] ) ) {
31
			gravityview()->log->error( 'Invalid configuration[id] supplied.' );
32
			return null;
33
		}
34
35 141
		if ( empty( $configuration['form_id'] ) || ! $form = \GV\GF_Form::by_id( $configuration['form_id'] )  ) {
36 3
			gravityview()->log->error( 'Invalid configuration[form_id] supplied.' );
37 3
			return null;
38
		}
39
40 141
		$field = self::by_id( $form, $configuration['id'] );
41
42 141
		if ( ! $field ) {
43 11
			gravityview()->log->error( 'Invalid configuration[id] supplied.' );
44 11
			return null;
45
		}
46
47 141
		$field->update_configuration( $configuration );
48 141
		return $field;
49
	}
50
51
	/**
52
	 * Get a \GV\GF_Field by \GV\GF_Form and Field ID.
53
	 *
54
	 * @param \GV\GF_Form $form The Gravity Form form.
55
	 * @param int $field_id The Gravity Form field ID for the $form.
56
	 *
57
	 * @return \GV\Field|null The requested field or null if not found.
58
	 */
59 145
	public static function by_id( $form, $field_id ) {
60
61 145
		if ( ! $form || ! is_object( $form ) || ! is_a( $form, '\GV\GF_Form' ) ) {
62
			gravityview()->log->error( '$form is not a \GV\GF_Form instance' );
63
			return null;
64
		}
65
66 145
		if ( empty( $form->form ) ) {
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...
67
			gravityview()->log->error( '$form is not initialized with a backing Gravity Forms form' );
68
			return null;
69
		}
70
71
72 145
		$gv_field = \GFFormsModel::get_field( $form->form, $field_id );
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...
73
74 145
		if ( ! $gv_field ) {
75 13
			gravityview()->log->error( 'Invalid $field_id #{field_id} for current source', array( 'field_id' => $field_id ) );
76 13
			return null;
77
		}
78
79 145
		$field = new self();
80 145
		$field->ID = $field_id;
81 145
		$field->field = $gv_field;
82
83 145
		return $field;
84
	}
85
86
	/**
87
	 * Retrieve the label for this field.
88
	 *
89
	 * Requires a \GV\GF_Form in this implementation.
90
	 *
91
	 * @param \GV\View $view The view for this context if applicable.
92
	 * @param \GV\Source $source The source (form) for this context if applicable.
93
	 * @param \GV\Entry $entry The entry for this context if applicable.
94
	 * @param \GV\Request $request The request for this context if applicable.
95
	 *
96
	 * @return string The label for this Gravity Forms field.
97
	 */
98 31
	public function get_label( View $view = null, Source $source = null, Entry $entry = null, Request $request = null ) {
99
100 31
		if ( ! $this->show_label ) {
101
			return '';
102
		}
103
104 31
		if ( $label = parent::get_label( $view, $source, $entry, $request ) ) {
105 1
			return $label;
106
		}
107
108 30
		if ( ! $source || ! is_object( $source ) || ! is_a( $source, '\GV\GF_Form' ) ) {
109
			gravityview()->log->error( '$source is not a valid \GV\GF_Form instance' );
110
			return null;
111
		}
112
113 30
		if ( $this->label ) {
114 28
			return $this->label;
115
		}
116
117
		/** This is a complex Gravity Forms input. */
118 2
		if ( $input = \GFFormsModel::get_input( $this->field, $this->ID ) ) {
119
			$label = ! empty( $input['customLabel'] ) ? $input['customLabel'] : $input['label'];
120
		} else {
121
			/** This is a field with one label. */
122 2
			$label = $this->field->get_field_label( true, $this->label );
123
		}
124
125 2
		return $label;
126
	}
127
128
	/**
129
	 * Retrieve the value for this field.
130
	 *
131
	 * Requires a \GV\GF_Entry in this implementation.
132
	 *
133
	 * @param \GV\View $view The view for this context if applicable.
134
	 * @param \GV\Source $source The source (form) for this context if applicable.
135
	 * @param \GV\Entry $entry The entry for this context if applicable.
136
	 * @param \GV\Request $request The request for this context if applicable.
137
	 *
138
	 * @return mixed The value for this field.
139
	 */
140 59
	public function get_value( View $view = null, Source $source = null, Entry $entry = null, Request $request = null ) {
141 59
		if ( ! $entry || ! is_object( $entry ) || ! is_a( $entry, '\GV\GF_Entry' ) ) {
142
			gravityview()->log->error( '$entry is not a valid \GV\GF_Entry instance' );
143
			return null;
144
		}
145
146 59
		$value = \RGFormsModel::get_lead_field_value( $entry->as_entry(), $this->field );
147
		
148
		/** Apply parent filters. */
149 59
		return $this->get_value_filters( $value, $view, $source, $entry, $request );
150
	}
151
152
	/**
153
	 * A proxy getter for the backing GravityView field.
154
	 *
155
	 * The view field configuration is checked first, though.
156
	 *
157
	 * @param string $key The property to get.
158
	 *
159
	 * @return mixed The value of the Gravity View field property, or null if not exists.
160
	 */
161 74
	public function __get( $key ) {
162 74
		if ( $value = parent::__get( $key ) ) {
163 29
			return $value;
164
		}
165
166 71
		if ( $this->field ) {
167 71
			return $this->field->$key;
168
		}
169
	}
170
}
171