Completed
Branch dependabot/npm_and_yarn/wordpr... (839ddb)
by
unknown
16:10 queued 14:20
created
strategies/validation/EE_Max_Length_Validation_Strategy.strategy.php 2 patches
Indentation   +32 added lines, -32 removed lines patch added patch discarded remove patch
@@ -11,39 +11,39 @@
 block discarded – undo
11 11
 class EE_Max_Length_Validation_Strategy extends EE_Validation_Strategy_Base
12 12
 {
13 13
 
14
-    protected $_max_length;
14
+	protected $_max_length;
15 15
 
16
-    public function __construct($validation_error_message = null, $max_length = EE_INF)
17
-    {
18
-        $this->_max_length = $max_length;
19
-        if ($validation_error_message === null) {
20
-            $validation_error_message = sprintf(__('Input is too long. Maximum number of characters is %1$s', 'event_espresso'), $max_length);
21
-        }
22
-        parent::__construct($validation_error_message);
23
-    }
16
+	public function __construct($validation_error_message = null, $max_length = EE_INF)
17
+	{
18
+		$this->_max_length = $max_length;
19
+		if ($validation_error_message === null) {
20
+			$validation_error_message = sprintf(__('Input is too long. Maximum number of characters is %1$s', 'event_espresso'), $max_length);
21
+		}
22
+		parent::__construct($validation_error_message);
23
+	}
24 24
 
25
-    /**
26
-     * @param $normalized_value
27
-     */
28
-    public function validate($normalized_value)
29
-    {
30
-        if ($this->_max_length !== EE_INF &&
31
-                $normalized_value &&
32
-                is_string($normalized_value) &&
33
-                 strlen($normalized_value) > $this->_max_length) {
34
-            throw new EE_Validation_Error($this->get_validation_error_message(), 'maxlength');
35
-        }
36
-    }
25
+	/**
26
+	 * @param $normalized_value
27
+	 */
28
+	public function validate($normalized_value)
29
+	{
30
+		if ($this->_max_length !== EE_INF &&
31
+				$normalized_value &&
32
+				is_string($normalized_value) &&
33
+				 strlen($normalized_value) > $this->_max_length) {
34
+			throw new EE_Validation_Error($this->get_validation_error_message(), 'maxlength');
35
+		}
36
+	}
37 37
 
38
-    /**
39
-     * @return array
40
-     */
41
-    public function get_jquery_validation_rule_array()
42
-    {
43
-        if ($this->_max_length !== EE_INF) {
44
-            return array( 'maxlength'=> $this->_max_length, 'messages' => array( 'maxlength' => $this->get_validation_error_message() ) );
45
-        } else {
46
-            return array();
47
-        }
48
-    }
38
+	/**
39
+	 * @return array
40
+	 */
41
+	public function get_jquery_validation_rule_array()
42
+	{
43
+		if ($this->_max_length !== EE_INF) {
44
+			return array( 'maxlength'=> $this->_max_length, 'messages' => array( 'maxlength' => $this->get_validation_error_message() ) );
45
+		} else {
46
+			return array();
47
+		}
48
+	}
49 49
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -41,7 +41,7 @@
 block discarded – undo
41 41
     public function get_jquery_validation_rule_array()
42 42
     {
43 43
         if ($this->_max_length !== EE_INF) {
44
-            return array( 'maxlength'=> $this->_max_length, 'messages' => array( 'maxlength' => $this->get_validation_error_message() ) );
44
+            return array('maxlength'=> $this->_max_length, 'messages' => array('maxlength' => $this->get_validation_error_message()));
45 45
         } else {
46 46
             return array();
47 47
         }
Please login to merge, or discard this patch.
strategies/validation/EE_Enum_Validation_Strategy.strategy.php 2 patches
Indentation   +46 added lines, -46 removed lines patch added patch discarded remove patch
@@ -11,51 +11,51 @@
 block discarded – undo
11 11
 class EE_Enum_Validation_Strategy extends EE_Validation_Strategy_Base
12 12
 {
13 13
 
14
-    /**
15
-     * Check that the value is in the allowed list
16
-     * @param $normalized_value
17
-     * @throws EE_Error
18
-     * @throws EE_Validation_Error
19
-     * @return boolean
20
-     */
21
-    public function validate($normalized_value)
22
-    {
23
-        parent::validate($normalized_value);
24
-        if (! $this->_input instanceof EE_Form_Input_With_Options_Base) {
25
-            throw new EE_Error(sprintf(__("Cannot use Enum Validation Strategy with an input that doesn't have options", "event_espresso")));
26
-        }
27
-        $enum_options = $this->_input->flat_options();
28
-        if ($normalized_value === true) {
29
-            $normalized_value = 1;
30
-        } elseif ($normalized_value === false) {
31
-            $normalized_value = 0;
32
-        }
33
-        if ($normalized_value !== null && ! array_key_exists($normalized_value, $enum_options)) {
34
-            throw new EE_Validation_Error(
35
-                $this->get_validation_error_message(),
36
-                'invalid_enum_value'
37
-            );
38
-        } else {
39
-            return true;
40
-        }
41
-    }
14
+	/**
15
+	 * Check that the value is in the allowed list
16
+	 * @param $normalized_value
17
+	 * @throws EE_Error
18
+	 * @throws EE_Validation_Error
19
+	 * @return boolean
20
+	 */
21
+	public function validate($normalized_value)
22
+	{
23
+		parent::validate($normalized_value);
24
+		if (! $this->_input instanceof EE_Form_Input_With_Options_Base) {
25
+			throw new EE_Error(sprintf(__("Cannot use Enum Validation Strategy with an input that doesn't have options", "event_espresso")));
26
+		}
27
+		$enum_options = $this->_input->flat_options();
28
+		if ($normalized_value === true) {
29
+			$normalized_value = 1;
30
+		} elseif ($normalized_value === false) {
31
+			$normalized_value = 0;
32
+		}
33
+		if ($normalized_value !== null && ! array_key_exists($normalized_value, $enum_options)) {
34
+			throw new EE_Validation_Error(
35
+				$this->get_validation_error_message(),
36
+				'invalid_enum_value'
37
+			);
38
+		} else {
39
+			return true;
40
+		}
41
+	}
42 42
 
43
-    /**
44
-     * If we are using the default validation error message, make it dynamic based
45
-     * on the allowed options.
46
-     * @return string
47
-     */
48
-    public function get_validation_error_message()
49
-    {
50
-        $parent_validation_error_message = parent::get_validation_error_message();
51
-        if (! $parent_validation_error_message) {
52
-            $enum_options = $this->_input instanceof EE_Form_Input_With_Options_Base ? $this->_input->flat_options() : '';
53
-            return sprintf(
54
-                __("This is not allowed option. Allowed options are %s.", "event_espresso"),
55
-                implode(', ', $enum_options)
56
-            );
57
-        } else {
58
-            return $parent_validation_error_message;
59
-        }
60
-    }
43
+	/**
44
+	 * If we are using the default validation error message, make it dynamic based
45
+	 * on the allowed options.
46
+	 * @return string
47
+	 */
48
+	public function get_validation_error_message()
49
+	{
50
+		$parent_validation_error_message = parent::get_validation_error_message();
51
+		if (! $parent_validation_error_message) {
52
+			$enum_options = $this->_input instanceof EE_Form_Input_With_Options_Base ? $this->_input->flat_options() : '';
53
+			return sprintf(
54
+				__("This is not allowed option. Allowed options are %s.", "event_espresso"),
55
+				implode(', ', $enum_options)
56
+			);
57
+		} else {
58
+			return $parent_validation_error_message;
59
+		}
60
+	}
61 61
 }
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -21,7 +21,7 @@  discard block
 block discarded – undo
21 21
     public function validate($normalized_value)
22 22
     {
23 23
         parent::validate($normalized_value);
24
-        if (! $this->_input instanceof EE_Form_Input_With_Options_Base) {
24
+        if ( ! $this->_input instanceof EE_Form_Input_With_Options_Base) {
25 25
             throw new EE_Error(sprintf(__("Cannot use Enum Validation Strategy with an input that doesn't have options", "event_espresso")));
26 26
         }
27 27
         $enum_options = $this->_input->flat_options();
@@ -48,7 +48,7 @@  discard block
 block discarded – undo
48 48
     public function get_validation_error_message()
49 49
     {
50 50
         $parent_validation_error_message = parent::get_validation_error_message();
51
-        if (! $parent_validation_error_message) {
51
+        if ( ! $parent_validation_error_message) {
52 52
             $enum_options = $this->_input instanceof EE_Form_Input_With_Options_Base ? $this->_input->flat_options() : '';
53 53
             return sprintf(
54 54
                 __("This is not allowed option. Allowed options are %s.", "event_espresso"),
Please login to merge, or discard this patch.
strategies/validation/EE_Validation_Strategy_Base.strategy.php 1 patch
Indentation   +92 added lines, -92 removed lines patch added patch discarded remove patch
@@ -11,97 +11,97 @@
 block discarded – undo
11 11
 {
12 12
 
13 13
 
14
-    protected $_validation_error_message = '';
15
-
16
-
17
-
18
-    /**
19
-     * @param null $validation_error_message
20
-     */
21
-    public function __construct($validation_error_message = null)
22
-    {
23
-        $this->_validation_error_message = $validation_error_message === null
24
-            ? __('Input invalid', 'event_espresso')
25
-            : $validation_error_message;
26
-        parent::__construct();
27
-    }
28
-
29
-
30
-
31
-    /**
32
-     * Performs validation on the request data that corresponds to this field.
33
-     * If validation fails, should throw an EE_Validation_Error.
34
-     * Note: most validate() functions should allow $normalized_value to be empty,
35
-     * as its the job of the EE_Required_Validation_Strategy to ensure that the field isn't empty.
36
-     *
37
-     * @param mixed $normalized_value ready for validation. May very well be NULL (which, unless
38
-     *                                this validation strategy is the 'required' validation strategy,
39
-     *                                most should be OK with a null, empty string, etc)
40
-     */
41
-    public function validate($normalized_value)
42
-    {
43
-        // by default, the validation strategy does no validation. this should be implemented
44
-    }
45
-
46
-
47
-
48
-    /**
49
-     * Gets the JS code for use in the jQuery validation js corresponding to this field when displaying.
50
-     * For documentation, see http://jqueryvalidation.org/
51
-     * Eg to generate the following js for validation, <br><code>
52
-     *  $( "#myform" ).validate({
53
-     *      rules: {
54
-     *          field_name: {
55
-     *              required: true,
56
-     *              minlength: 3,
57
-     *              equalTo: "#password"
58
-     *          }
59
-     *      }
60
-     *  });
61
-     * </code>
62
-     * this function should return array('required'=>true,'minlength'=>3,'equalTo'=>'"#password"' ).
63
-     * This is done so that if we are applying multiple sanitization strategies to a field,
64
-     * we can easily combine them.
65
-     *
66
-     * @return array
67
-     */
68
-    public function get_jquery_validation_rule_array()
69
-    {
70
-        return array();
71
-    }
72
-
73
-
74
-
75
-    /**
76
-     * Gets the i18n validation error message for when this validation strategy finds
77
-     * the input is invalid. Used for both frontend and backend validation.
78
-     *
79
-     * @return string
80
-     */
81
-    public function get_validation_error_message()
82
-    {
83
-        return $this->_validation_error_message;
84
-    }
85
-
86
-
87
-
88
-    /**
89
-     * Adds js variables for localization to the $other_js_data. These should be put
90
-     * in each form's "other_data" javascript object.
91
-     *
92
-     * @param array $other_js_data
93
-     * @return array
94
-     */
95
-    public function get_other_js_data($other_js_data = array())
96
-    {
97
-        return $other_js_data;
98
-    }
14
+	protected $_validation_error_message = '';
15
+
16
+
17
+
18
+	/**
19
+	 * @param null $validation_error_message
20
+	 */
21
+	public function __construct($validation_error_message = null)
22
+	{
23
+		$this->_validation_error_message = $validation_error_message === null
24
+			? __('Input invalid', 'event_espresso')
25
+			: $validation_error_message;
26
+		parent::__construct();
27
+	}
28
+
29
+
30
+
31
+	/**
32
+	 * Performs validation on the request data that corresponds to this field.
33
+	 * If validation fails, should throw an EE_Validation_Error.
34
+	 * Note: most validate() functions should allow $normalized_value to be empty,
35
+	 * as its the job of the EE_Required_Validation_Strategy to ensure that the field isn't empty.
36
+	 *
37
+	 * @param mixed $normalized_value ready for validation. May very well be NULL (which, unless
38
+	 *                                this validation strategy is the 'required' validation strategy,
39
+	 *                                most should be OK with a null, empty string, etc)
40
+	 */
41
+	public function validate($normalized_value)
42
+	{
43
+		// by default, the validation strategy does no validation. this should be implemented
44
+	}
45
+
46
+
47
+
48
+	/**
49
+	 * Gets the JS code for use in the jQuery validation js corresponding to this field when displaying.
50
+	 * For documentation, see http://jqueryvalidation.org/
51
+	 * Eg to generate the following js for validation, <br><code>
52
+	 *  $( "#myform" ).validate({
53
+	 *      rules: {
54
+	 *          field_name: {
55
+	 *              required: true,
56
+	 *              minlength: 3,
57
+	 *              equalTo: "#password"
58
+	 *          }
59
+	 *      }
60
+	 *  });
61
+	 * </code>
62
+	 * this function should return array('required'=>true,'minlength'=>3,'equalTo'=>'"#password"' ).
63
+	 * This is done so that if we are applying multiple sanitization strategies to a field,
64
+	 * we can easily combine them.
65
+	 *
66
+	 * @return array
67
+	 */
68
+	public function get_jquery_validation_rule_array()
69
+	{
70
+		return array();
71
+	}
72
+
73
+
74
+
75
+	/**
76
+	 * Gets the i18n validation error message for when this validation strategy finds
77
+	 * the input is invalid. Used for both frontend and backend validation.
78
+	 *
79
+	 * @return string
80
+	 */
81
+	public function get_validation_error_message()
82
+	{
83
+		return $this->_validation_error_message;
84
+	}
85
+
86
+
87
+
88
+	/**
89
+	 * Adds js variables for localization to the $other_js_data. These should be put
90
+	 * in each form's "other_data" javascript object.
91
+	 *
92
+	 * @param array $other_js_data
93
+	 * @return array
94
+	 */
95
+	public function get_other_js_data($other_js_data = array())
96
+	{
97
+		return $other_js_data;
98
+	}
99 99
     
100
-    /**
101
-     * Opportunity for this display strategy to call wp_enqueue_script and wp_enqueue_style.
102
-     * This should be called during wp_enqueue_scripts
103
-     */
104
-    public function enqueue_js()
105
-    {
106
-    }
100
+	/**
101
+	 * Opportunity for this display strategy to call wp_enqueue_script and wp_enqueue_style.
102
+	 * This should be called during wp_enqueue_scripts
103
+	 */
104
+	public function enqueue_js()
105
+	{
106
+	}
107 107
 }
Please login to merge, or discard this patch.
sensitive_data_removal/EE_Credit_Card_Sensitive_Data_Removal.strategy.php 2 patches
Indentation   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -11,18 +11,18 @@
 block discarded – undo
11 11
  */
12 12
 class EE_Credit_Card_Sensitive_Data_Removal extends EE_Sensitive_Data_Removal_Base
13 13
 {
14
-    public function remove_sensitive_data($normalized_value)
15
-    {
16
-        // Get the cc Length
17
-        $cc_length = strlen($normalized_value);
18
-        // Replace all characters of credit card except the last four and dashes
19
-        for ($i=0; $i<$cc_length-4; $i++) {
20
-            if ($normalized_value[ $i ] == '-') {
21
-                continue;
22
-            }
23
-            $normalized_value[ $i ] = 'X';
24
-        }
25
-        // Return the masked Credit Card #
26
-        return $normalized_value;
27
-    }
14
+	public function remove_sensitive_data($normalized_value)
15
+	{
16
+		// Get the cc Length
17
+		$cc_length = strlen($normalized_value);
18
+		// Replace all characters of credit card except the last four and dashes
19
+		for ($i=0; $i<$cc_length-4; $i++) {
20
+			if ($normalized_value[ $i ] == '-') {
21
+				continue;
22
+			}
23
+			$normalized_value[ $i ] = 'X';
24
+		}
25
+		// Return the masked Credit Card #
26
+		return $normalized_value;
27
+	}
28 28
 }
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -16,11 +16,11 @@
 block discarded – undo
16 16
         // Get the cc Length
17 17
         $cc_length = strlen($normalized_value);
18 18
         // Replace all characters of credit card except the last four and dashes
19
-        for ($i=0; $i<$cc_length-4; $i++) {
20
-            if ($normalized_value[ $i ] == '-') {
19
+        for ($i = 0; $i < $cc_length - 4; $i++) {
20
+            if ($normalized_value[$i] == '-') {
21 21
                 continue;
22 22
             }
23
-            $normalized_value[ $i ] = 'X';
23
+            $normalized_value[$i] = 'X';
24 24
         }
25 25
         // Return the masked Credit Card #
26 26
         return $normalized_value;
Please login to merge, or discard this patch.
sensitive_data_removal/EE_Sensitive_Data_Removal_Base.strategy.php 1 patch
Indentation   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -11,16 +11,16 @@
 block discarded – undo
11 11
  */
12 12
 abstract class EE_Sensitive_Data_Removal_Base extends EE_Form_Input_Strategy_Base
13 13
 {
14
-    /**
15
-     * Removes all the sensitive data from this normalized value.
16
-     * For example, should could 'mask' a credit card from
17
-     * '1234 1234 1234 1234' TO '**** **** **** 1234'.
18
-     * Or turn a ccv number from
19
-     * '123' to '***',
20
-     * or turn a password from
21
-     * 'CantHac7Th15' to '*************',
22
-     * or just leave htevalue as-is
23
-     * @return mixed
24
-     */
25
-    abstract public function remove_sensitive_data($normalized_value);
14
+	/**
15
+	 * Removes all the sensitive data from this normalized value.
16
+	 * For example, should could 'mask' a credit card from
17
+	 * '1234 1234 1234 1234' TO '**** **** **** 1234'.
18
+	 * Or turn a ccv number from
19
+	 * '123' to '***',
20
+	 * or turn a password from
21
+	 * 'CantHac7Th15' to '*************',
22
+	 * or just leave htevalue as-is
23
+	 * @return mixed
24
+	 */
25
+	abstract public function remove_sensitive_data($normalized_value);
26 26
 }
Please login to merge, or discard this patch.
sensitive_data_removal/EE_All_Sensitive_Data_Removal.strategy.php 1 patch
Indentation   +19 added lines, -19 removed lines patch added patch discarded remove patch
@@ -11,23 +11,23 @@
 block discarded – undo
11 11
  */
12 12
 class EE_All_Sensitive_Data_Removal extends EE_Sensitive_Data_Removal_Base
13 13
 {
14
-    public function remove_sensitive_data($normalized_value)
15
-    {
16
-        switch (gettype($normalized_value)) {
17
-            case "boolean":
18
-                return false;
19
-            case "integer":
20
-            case "double":
21
-                return 0;
22
-            case "string":
23
-                return '';
24
-            case "array":
25
-                return array();
26
-            case "object":
27
-            case "resource":
28
-            case "NULL":
29
-            default:
30
-                return null;
31
-        }
32
-    }
14
+	public function remove_sensitive_data($normalized_value)
15
+	{
16
+		switch (gettype($normalized_value)) {
17
+			case "boolean":
18
+				return false;
19
+			case "integer":
20
+			case "double":
21
+				return 0;
22
+			case "string":
23
+				return '';
24
+			case "array":
25
+				return array();
26
+			case "object":
27
+			case "resource":
28
+			case "NULL":
29
+			default:
30
+				return null;
31
+		}
32
+	}
33 33
 }
Please login to merge, or discard this patch.
sensitive_data_removal/EE_CCV_Sensitive_Data_Removal.strategy.php 2 patches
Indentation   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -11,18 +11,18 @@
 block discarded – undo
11 11
  */
12 12
 class EE_CCV_Sensitive_Data_Removal extends EE_Sensitive_Data_Removal_Base
13 13
 {
14
-    public function remove_sensitive_data($normalized_value)
15
-    {
16
-        // Get the ccv Length
17
-        $ccv_lenght = strlen($normalized_value);
18
-        // Replace all characters of credit card except the last four and dashes
19
-        for ($i=0; $i<$ccv_lenght; $i++) {
20
-            if ($normalized_value[ $i ] == '-') {
21
-                continue;
22
-            }
23
-            $normalized_value[ $i ] = 'X';
24
-        }
25
-        // Return the masked Credit Card #
26
-        return $normalized_value;
27
-    }
14
+	public function remove_sensitive_data($normalized_value)
15
+	{
16
+		// Get the ccv Length
17
+		$ccv_lenght = strlen($normalized_value);
18
+		// Replace all characters of credit card except the last four and dashes
19
+		for ($i=0; $i<$ccv_lenght; $i++) {
20
+			if ($normalized_value[ $i ] == '-') {
21
+				continue;
22
+			}
23
+			$normalized_value[ $i ] = 'X';
24
+		}
25
+		// Return the masked Credit Card #
26
+		return $normalized_value;
27
+	}
28 28
 }
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -16,11 +16,11 @@
 block discarded – undo
16 16
         // Get the ccv Length
17 17
         $ccv_lenght = strlen($normalized_value);
18 18
         // Replace all characters of credit card except the last four and dashes
19
-        for ($i=0; $i<$ccv_lenght; $i++) {
20
-            if ($normalized_value[ $i ] == '-') {
19
+        for ($i = 0; $i < $ccv_lenght; $i++) {
20
+            if ($normalized_value[$i] == '-') {
21 21
                 continue;
22 22
             }
23
-            $normalized_value[ $i ] = 'X';
23
+            $normalized_value[$i] = 'X';
24 24
         }
25 25
         // Return the masked Credit Card #
26 26
         return $normalized_value;
Please login to merge, or discard this patch.
strategies/sensitive_data_removal/EE_No_Sensitive_Data_Removal.strategy.php 1 patch
Indentation   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -11,8 +11,8 @@
 block discarded – undo
11 11
  */
12 12
 class EE_No_Sensitive_Data_Removal extends EE_Sensitive_Data_Removal_Base
13 13
 {
14
-    public function remove_sensitive_data($normalized_value)
15
-    {
16
-        return $normalized_value;
17
-    }
14
+	public function remove_sensitive_data($normalized_value)
15
+	{
16
+		return $normalized_value;
17
+	}
18 18
 }
Please login to merge, or discard this patch.
core/libraries/form_sections/base/EE_Model_Form_Section.form.php 2 patches
Spacing   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -40,7 +40,7 @@  discard block
 block discarded – undo
40 40
         if (isset($options_array['model']) && $options_array['model'] instanceof EEM_Base) {
41 41
             $this->_model = $options_array['model'];
42 42
         }
43
-        if (! $this->_model || ! $this->_model instanceof EEM_Base) {
43
+        if ( ! $this->_model || ! $this->_model instanceof EEM_Base) {
44 44
             throw new EE_Error(sprintf(__(
45 45
                 "Model Form Sections must first specify the _model property to be a subclass of EEM_Base",
46 46
                 "event_espresso"
@@ -104,10 +104,10 @@  discard block
 block discarded – undo
104 104
             $input = null;
105 105
             switch (get_class($relation_obj)) {
106 106
                 case 'EE_HABTM_Relation':
107
-                    if (isset($subsection_args[ $relation_name ])
108
-                        && isset($subsection_args[ $relation_name ]['model_objects'])
107
+                    if (isset($subsection_args[$relation_name])
108
+                        && isset($subsection_args[$relation_name]['model_objects'])
109 109
                     ) {
110
-                        $model_objects = $subsection_args[ $relation_name ]['model_objects'];
110
+                        $model_objects = $subsection_args[$relation_name]['model_objects'];
111 111
                     } else {
112 112
                         $model_objects = $relation_obj->get_other_model()->get_all();
113 113
                     }
@@ -116,7 +116,7 @@  discard block
 block discarded – undo
116 116
                 default:
117 117
             }
118 118
             if ($input) {
119
-                $inputs[ $relation_name ] = $input;
119
+                $inputs[$relation_name] = $input;
120 120
             }
121 121
         }
122 122
         return $inputs;
@@ -266,7 +266,7 @@  discard block
 block discarded – undo
266 266
                 }
267 267
                 $reflection = new ReflectionClass($input_class);
268 268
                 $input = $reflection->newInstanceArgs($input_constructor_args);
269
-                $inputs[ $field_name ] = $input;
269
+                $inputs[$field_name] = $input;
270 270
             }
271 271
         }
272 272
         return $inputs;
@@ -292,14 +292,14 @@  discard block
 block discarded – undo
292 292
                 if ($relation_obj instanceof EE_Belongs_To_Relation) {
293 293
                     // then we only expect there to be one
294 294
                     $related_item = $this->_model_object->get_first_related($relation_name);
295
-                    $defaults[ $relation_name ] = $related_item->ID();
295
+                    $defaults[$relation_name] = $related_item->ID();
296 296
                 } else {
297 297
                     $related_items = $this->_model_object->get_many_related($relation_name);
298 298
                     $ids = array();
299 299
                     foreach ($related_items as $related_item) {
300 300
                         $ids[] = $related_item->ID();
301 301
                     }
302
-                    $defaults[ $relation_name ] = $ids;
302
+                    $defaults[$relation_name] = $ids;
303 303
                 }
304 304
             }
305 305
         }
@@ -337,7 +337,7 @@  discard block
 block discarded – undo
337 337
     {
338 338
         parent::_normalize($req_data);
339 339
         // create or set the model object, if it isn't already
340
-        if (! $this->_model_object) {
340
+        if ( ! $this->_model_object) {
341 341
             // check to see if the form indicates a PK, in which case we want to only retrieve it and update it
342 342
             $pk_name = $this->_model->primary_key_name();
343 343
             $model_obj = $this->_model->get_one_by_ID($this->get_input_value($pk_name));
@@ -362,7 +362,7 @@  discard block
 block discarded – undo
362 362
      */
363 363
     public function save()
364 364
     {
365
-        if (! $this->_model_object) {
365
+        if ( ! $this->_model_object) {
366 366
             throw new EE_Error(sprintf(__(
367 367
                 "Cannot save the model form's model object (model is '%s') because there is no model object set. You must either set it, or call receive_form_submission where it is set automatically",
368 368
                 "event_espresso"
@@ -377,7 +377,7 @@  discard block
 block discarded – undo
377 377
         }
378 378
         $success = $this->_model_object->save();
379 379
         foreach ($this->_model->relation_settings() as $relation_name => $relation_obj) {
380
-            if (isset($this->_subsections[ $relation_name ])) {
380
+            if (isset($this->_subsections[$relation_name])) {
381 381
                 $success = $this->_save_related_info($relation_name);
382 382
             }
383 383
         }
@@ -464,8 +464,8 @@  discard block
 block discarded – undo
464 464
      */
465 465
     protected function _set_default_name_if_empty()
466 466
     {
467
-        if (! $this->_name) {
468
-            $default_name = str_replace("EEM_", "", get_class($this->_model)) . "_Model_Form";
467
+        if ( ! $this->_name) {
468
+            $default_name = str_replace("EEM_", "", get_class($this->_model))."_Model_Form";
469 469
             $this->_name = $default_name;
470 470
         }
471 471
     }
Please login to merge, or discard this patch.
Indentation   +455 added lines, -455 removed lines patch added patch discarded remove patch
@@ -14,459 +14,459 @@
 block discarded – undo
14 14
 class EE_Model_Form_Section extends EE_Form_Section_Proper
15 15
 {
16 16
 
17
-    /**
18
-     * @var EEM_Base
19
-     */
20
-    protected $_model = null;
21
-
22
-    /**
23
-     * @var EE_Base_Class
24
-     */
25
-    protected $_model_object = null;
26
-
27
-
28
-
29
-    /**
30
-     * @param array        $options_array   keys: {
31
-     * @type EEM_Base      $model
32
-     * @type EE_Base_Class $model_object
33
-     * @type array         $subsection_args array keys should be subsection names (that either do or will exist), and
34
-     *       values are the arrays as you would pass them to that subsection
35
-     *                                      }
36
-     * @throws EE_Error
37
-     */
38
-    public function __construct($options_array = array())
39
-    {
40
-        if (isset($options_array['model']) && $options_array['model'] instanceof EEM_Base) {
41
-            $this->_model = $options_array['model'];
42
-        }
43
-        if (! $this->_model || ! $this->_model instanceof EEM_Base) {
44
-            throw new EE_Error(sprintf(__(
45
-                "Model Form Sections must first specify the _model property to be a subclass of EEM_Base",
46
-                "event_espresso"
47
-            )));
48
-        }
49
-        if (isset($options_array['subsection_args'])) {
50
-            $subsection_args = $options_array['subsection_args'];
51
-        } else {
52
-            $subsection_args = array();
53
-        }
54
-        // gather fields and relations to convert to inputs
55
-        // but if they're just going to exclude a field anyways, don't bother converting it to an input
56
-        $exclude = $this->_subsections;
57
-        if (isset($options_array['exclude'])) {
58
-            $exclude = array_merge($exclude, array_flip($options_array['exclude']));
59
-        }
60
-        $model_fields = array_diff_key($this->_model->field_settings(), $exclude);
61
-        $model_relations = array_diff_key($this->_model->relation_settings(), $exclude);
62
-        // convert fields and relations to inputs
63
-        $this->_subsections = array_merge(
64
-            $this->_convert_model_fields_to_inputs($model_fields),
65
-            $this->_convert_model_relations_to_inputs($model_relations, $subsection_args),
66
-            $this->_subsections
67
-        );
68
-        parent::__construct($options_array);
69
-        if (isset($options_array['model_object']) && $options_array['model_object'] instanceof EE_Base_Class) {
70
-            $this->populate_model_obj($options_array['model_object']);
71
-        }
72
-    }
73
-
74
-
75
-
76
-    /**
77
-     * For now, just makes inputs for only HABTM relations
78
-     *
79
-     * @param EE_Model_Relation_Base[] $relations
80
-     * @param array                    $subsection_args keys should be existing or soon-to-be-existing input names, and
81
-     *                                                  their values are {
82
-     * @type array {
83
-     * @type EE_Base_Class[]           $model_objects   if the subsection is an EE_Select_Multi_Model_Input
84
-     *                                                  }
85
-     *                                                  }
86
-     * @return array
87
-     */
88
-    protected function _convert_model_relations_to_inputs($relations, $subsection_args = array())
89
-    {
90
-        $inputs = array();
91
-        foreach ($relations as $relation_name => $relation_obj) {
92
-            $input_constructor_args = array(
93
-                array_merge(
94
-                    array(
95
-                        'required'        => $relation_obj instanceof EE_Belongs_To_Relation,
96
-                        'html_label_text' => $relation_obj instanceof EE_Belongs_To_Relation
97
-                            ? $relation_obj->get_other_model()->item_name(1)
98
-                            : $relation_obj->get_other_model()
99
-                                           ->item_name(2),
100
-                    ),
101
-                    $subsection_args
102
-                ),
103
-            );
104
-            $input = null;
105
-            switch (get_class($relation_obj)) {
106
-                case 'EE_HABTM_Relation':
107
-                    if (isset($subsection_args[ $relation_name ])
108
-                        && isset($subsection_args[ $relation_name ]['model_objects'])
109
-                    ) {
110
-                        $model_objects = $subsection_args[ $relation_name ]['model_objects'];
111
-                    } else {
112
-                        $model_objects = $relation_obj->get_other_model()->get_all();
113
-                    }
114
-                    $input = new EE_Select_Multi_Model_Input($model_objects, $input_constructor_args);
115
-                    break;
116
-                default:
117
-            }
118
-            if ($input) {
119
-                $inputs[ $relation_name ] = $input;
120
-            }
121
-        }
122
-        return $inputs;
123
-    }
124
-
125
-
126
-
127
-    /**
128
-     * Changes model fields into form section inputs
129
-     *
130
-     * @param EE_Model_Field_Base[] $model_fields keys are the model's name
131
-     * @throws EE_Error
132
-     * @return EE_Form_Input_Base[]
133
-     */
134
-    protected function _convert_model_fields_to_inputs($model_fields = array())
135
-    {
136
-        $inputs = array();
137
-        foreach ($model_fields as $field_name => $model_field) {
138
-            if ($model_field instanceof EE_Model_Field_Base) {
139
-                $input_constructor_args = array(
140
-                    array(
141
-                        'required'        => ! $model_field->is_nullable()
142
-                                             && $model_field->get_default_value()
143
-                                                === null,
144
-                        'html_label_text' => $model_field->get_nicename(),
145
-                        'default'         => $model_field->get_default_value(),
146
-                    ),
147
-                );
148
-                switch (get_class($model_field)) {
149
-                    case 'EE_All_Caps_Text_Field':
150
-                    case 'EE_Any_Foreign_Model_Name_Field':
151
-                        $input_class = 'EE_Text_Input';
152
-                        break;
153
-                    case 'EE_Boolean_Field':
154
-                        $input_class = 'EE_Yes_No_Input';
155
-                        break;
156
-                    case 'EE_Datetime_Field':
157
-                        throw new EE_Error(sprintf(__(
158
-                            "Model field '%s' does not yet have a known conversion to form input",
159
-                            "event_espresso"
160
-                        ), get_class($model_field)));
161
-                        break;
162
-                    case 'EE_Email_Field':
163
-                        $input_class = 'EE_Email_Input';
164
-                        break;
165
-                    case 'EE_Enum_Integer_Field':
166
-                        throw new EE_Error(sprintf(__(
167
-                            "Model field '%s' does not yet have a known conversion to form input",
168
-                            "event_espresso"
169
-                        ), get_class($model_field)));
170
-                        break;
171
-                    case 'EE_Enum_Text_Field':
172
-                        throw new EE_Error(sprintf(__(
173
-                            "Model field '%s' does not yet have a known conversion to form input",
174
-                            "event_espresso"
175
-                        ), get_class($model_field)));
176
-                        break;
177
-                    case 'EE_Float_Field':
178
-                        $input_class = 'EE_Float_Input';
179
-                        break;
180
-                    case 'EE_Foreign_Key_Int_Field':
181
-                    case 'EE_Foreign_Key_String_Field':
182
-                    case 'EE_WP_User_Field':
183
-                        $models_pointed_to = $model_field instanceof EE_Field_With_Model_Name
184
-                            ? $model_field->get_model_class_names_pointed_to() : array();
185
-                        if (true || is_array($models_pointed_to) && count($models_pointed_to) > 1) {
186
-                            $input_class = 'EE_Text_Input';
187
-                        } else {
188
-                            // so its just one model
189
-                            $model_name = is_array($models_pointed_to) ? reset($models_pointed_to) : $models_pointed_to;
190
-                            $model = EE_Registry::instance()->load_model($model_name);
191
-                            $model_names = $model->get_all_names(array('limit' => 10));
192
-                            if ($model_field->is_nullable()) {
193
-                                array_unshift($model_names, __("Please Select", 'event_espresso'));
194
-                            }
195
-                            $input_constructor_args[1] = $input_constructor_args[0];
196
-                            $input_constructor_args[0] = $model_names;
197
-                            $input_class = 'EE_Select_Input';
198
-                        }
199
-                        break;
200
-                    case 'EE_Full_HTML_Field':
201
-                        $input_class = 'EE_Text_Area_Input';
202
-                        $input_constructor_args[0]['validation_strategies'] = array(new EE_Full_HTML_Validation_Strategy());
203
-                        break;
204
-                    case 'EE_Infinite_Integer':
205
-                        throw new EE_Error(sprintf(__(
206
-                            "Model field '%s' does not yet have a known conversion to form input",
207
-                            "event_espresso"
208
-                        ), get_class($model_field)));
209
-                        break;
210
-                    case 'EE_Integer_Field':
211
-                        $input_class = 'EE_Text_Input';
212
-                        break;
213
-                    case 'EE_Maybe_Serialized_Text_Field':
214
-                        $input_class = 'EE_Text_Area_Input';
215
-                        break;
216
-                    case 'EE_Money_Field':
217
-                        throw new EE_Error(sprintf(__(
218
-                            "Model field '%s' does not yet have a known conversion to form input",
219
-                            "event_espresso"
220
-                        ), get_class($model_field)));
221
-                        break;
222
-                    case 'EE_Post_Content_Field':
223
-                        $input_class = 'EE_Text_Area_Input';
224
-                        $input_constructor_args[0]['validation_strategies'] = array(new EE_Full_HTML_Validation_Strategy());
225
-                        break;
226
-                    case 'EE_Plain_Text_Field':
227
-                        $input_class = 'EE_Text_Input';
228
-                        break;
229
-                    case 'EE_Primary_Key_Int_Field':
230
-                        $input_class = 'EE_Hidden_Input';
231
-                        $input_constructor_args[0]['normalization_strategy'] = new EE_Int_Normalization();
232
-                        break;
233
-                    case 'EE_Primary_Key_String_Field':
234
-                        $input_class = 'EE_Hidden_Input';
235
-                        break;
236
-                    case 'EE_Serialized_Text_Field':
237
-                        $input_class = 'EE_Text_Area_Input';
238
-                        break;
239
-                    case 'EE_Simple_HTML_Field':
240
-                        $input_class = 'EE_Text_Area_Input';
241
-                        $input_constructor_args[0]['validation_strategies'] = array(new EE_Simple_HTML_Validation_Strategy());
242
-                        break;
243
-                    case 'EE_Slug_Field':
244
-                        $input_class = 'EE_Text_Input';
245
-                        break;
246
-                    case 'EE_Trashed_Flag_Field':
247
-                        $input_class = 'EE_Yes_No_Input';
248
-                        break;
249
-                    case 'EE_WP_Post_Status_Field':
250
-                        throw new EE_Error(sprintf(__(
251
-                            "Model field '%s' does not yet have a known conversion to form input",
252
-                            "event_espresso"
253
-                        ), get_class($model_field)));
254
-                        break;
255
-                    case 'EE_WP_Post_Type_Field':
256
-                        throw new EE_Error(sprintf(__(
257
-                            "Model field '%s' does not yet have a known conversion to form input",
258
-                            "event_espresso"
259
-                        ), get_class($model_field)));
260
-                        break;
261
-                    default:
262
-                        throw new EE_Error(sprintf(__(
263
-                            "Model field of type '%s' does not convert to any known Form Input. Please add a case to EE_Model_Form_section's _convert_model_fields_to_inputs switch statement",
264
-                            "event_espresso"
265
-                        ), get_class($model_field)));
266
-                }
267
-                $reflection = new ReflectionClass($input_class);
268
-                $input = $reflection->newInstanceArgs($input_constructor_args);
269
-                $inputs[ $field_name ] = $input;
270
-            }
271
-        }
272
-        return $inputs;
273
-    }
274
-
275
-
276
-
277
-    /**
278
-     * Mostly the same as populate_defaults , except takes a model object as input, not an array,
279
-     * and also sets the form's _model_object
280
-     *
281
-     * @param EE_Base_Class $model_obj
282
-     * @return void
283
-     */
284
-    public function populate_model_obj($model_obj)
285
-    {
286
-        $model_obj = $this->_model->ensure_is_obj($model_obj);
287
-        $this->_model_object = $model_obj;
288
-        $defaults = $model_obj->model_field_array();
289
-        foreach ($this->_model->relation_settings() as $relation_name => $relation_obj) {
290
-            $subsection = $this->get_subsection($relation_name, false);
291
-            if ($subsection instanceof EE_Form_Input_Base) {
292
-                if ($relation_obj instanceof EE_Belongs_To_Relation) {
293
-                    // then we only expect there to be one
294
-                    $related_item = $this->_model_object->get_first_related($relation_name);
295
-                    $defaults[ $relation_name ] = $related_item->ID();
296
-                } else {
297
-                    $related_items = $this->_model_object->get_many_related($relation_name);
298
-                    $ids = array();
299
-                    foreach ($related_items as $related_item) {
300
-                        $ids[] = $related_item->ID();
301
-                    }
302
-                    $defaults[ $relation_name ] = $ids;
303
-                }
304
-            }
305
-        }
306
-        $defaults = apply_filters(
307
-            'FHEE__EE_Model_Form_Section__populate_model_obj',
308
-            $defaults,
309
-            $this
310
-        );
311
-        $this->populate_defaults($defaults);
312
-    }
313
-
314
-
315
-
316
-    /**
317
-     * Gets all the input values that correspond to model fields. Keys are the input/field names,
318
-     * values are their normalized values
319
-     *
320
-     * @return array
321
-     */
322
-    public function inputs_values_corresponding_to_model_fields()
323
-    {
324
-        return array_intersect_key($this->input_values(), $this->_model->field_settings());
325
-    }
326
-
327
-
328
-
329
-    /**
330
-     * After we've normalized the data as normal, set the corresponding model object
331
-     * on the form.
332
-     *
333
-     * @param array $req_data should usually be $_REQUEST (the default).
334
-     * @return void
335
-     */
336
-    public function _normalize($req_data)
337
-    {
338
-        parent::_normalize($req_data);
339
-        // create or set the model object, if it isn't already
340
-        if (! $this->_model_object) {
341
-            // check to see if the form indicates a PK, in which case we want to only retrieve it and update it
342
-            $pk_name = $this->_model->primary_key_name();
343
-            $model_obj = $this->_model->get_one_by_ID($this->get_input_value($pk_name));
344
-            if ($model_obj) {
345
-                $this->_model_object = $model_obj;
346
-            } else {
347
-                $this->_model_object = EE_Registry::instance()->load_class($this->_model->get_this_model_name());
348
-            }
349
-        }
350
-    }
351
-
352
-
353
-
354
-    /**
355
-     * After this form has been initialized and is verified to be valid,
356
-     * either creates a model object from its data and saves it, or updates
357
-     * the model object its data represents
358
-     *
359
-     * @throws EE_Error
360
-     * @return int, 1 on a successful update, the ID of
361
-     *                    the new entry on insert; 0 on failure
362
-     */
363
-    public function save()
364
-    {
365
-        if (! $this->_model_object) {
366
-            throw new EE_Error(sprintf(__(
367
-                "Cannot save the model form's model object (model is '%s') because there is no model object set. You must either set it, or call receive_form_submission where it is set automatically",
368
-                "event_espresso"
369
-            ), get_class($this->_model)));
370
-        }
371
-        // ok so the model object is set. Just set it with the submitted form data
372
-        foreach ($this->inputs_values_corresponding_to_model_fields() as $field_name => $field_value) {
373
-            // only set the non-primary key
374
-            if ($field_name != $this->_model->primary_key_name()) {
375
-                $this->_model_object->set($field_name, $field_value);
376
-            }
377
-        }
378
-        $success = $this->_model_object->save();
379
-        foreach ($this->_model->relation_settings() as $relation_name => $relation_obj) {
380
-            if (isset($this->_subsections[ $relation_name ])) {
381
-                $success = $this->_save_related_info($relation_name);
382
-            }
383
-        }
384
-        do_action('AHEE__EE_Model_Form_Section__save__done', $this, $success);
385
-        return $success;
386
-    }
387
-
388
-
389
-
390
-    /**
391
-     * Automatically finds the related model info from the form, if present, and
392
-     * save the relations indicated
393
-     *
394
-     * @type string $relation_name
395
-     * @return bool
396
-     * @throws EE_Error
397
-     */
398
-    protected function _save_related_info($relation_name)
399
-    {
400
-        $relation_obj = $this->_model->related_settings_for($relation_name);
401
-        if ($relation_obj instanceof EE_Belongs_To_Relation) {
402
-            // there is just a foreign key on this model pointing to that one
403
-            $this->_model_object->_add_relation_to($this->get_input_value($relation_name), $relation_name);
404
-        } elseif ($relation_obj instanceof EE_Has_Many_Relation) {
405
-            // then we want to consider all of its currently-related things.
406
-            // if they're in this list, keep them
407
-            // if they're not in this list, remove them
408
-            // and lastly add all the new items
409
-            throw new EE_Error(sprintf(__(
410
-                'Automatic saving of related info across a "has many" relation is not yet supported',
411
-                "event_espresso"
412
-            )));
413
-        } elseif ($relation_obj instanceof EE_HABTM_Relation) {
414
-            // delete everything NOT in this list
415
-            $normalized_input_value = $this->get_input_value($relation_name);
416
-            if ($normalized_input_value && is_array($normalized_input_value)) {
417
-                $where_query_params = array(
418
-                    $relation_obj->get_other_model()->primary_key_name() => array('NOT_IN', $normalized_input_value),
419
-                );
420
-            } else {
421
-                $where_query_params = array();
422
-            }
423
-            $this->_model_object->_remove_relations($relation_name, $where_query_params);
424
-            foreach ($normalized_input_value as $id) {
425
-                $this->_model_object->_add_relation_to($id, $relation_name);
426
-            }
427
-        }
428
-        return true;
429
-    }
430
-
431
-
432
-
433
-    /**
434
-     * Gets the model of this model form
435
-     *
436
-     * @return EEM_Base
437
-     */
438
-    public function get_model()
439
-    {
440
-        return $this->_model;
441
-    }
442
-
443
-
444
-
445
-    /**
446
-     * Gets the model object for this model form, which was either set
447
-     * upon construction (using the $options_array arg 'model_object'), by using
448
-     * set_model_object($model_obj), or implicitly
449
-     * when receive_form_submission($req_data) was called.
450
-     *
451
-     * @return EE_Base_Class
452
-     */
453
-    public function get_model_object()
454
-    {
455
-        return $this->_model_object;
456
-    }
457
-
458
-
459
-
460
-    /**
461
-     * gets teh default name of this form section if none is specified
462
-     *
463
-     * @return string
464
-     */
465
-    protected function _set_default_name_if_empty()
466
-    {
467
-        if (! $this->_name) {
468
-            $default_name = str_replace("EEM_", "", get_class($this->_model)) . "_Model_Form";
469
-            $this->_name = $default_name;
470
-        }
471
-    }
17
+	/**
18
+	 * @var EEM_Base
19
+	 */
20
+	protected $_model = null;
21
+
22
+	/**
23
+	 * @var EE_Base_Class
24
+	 */
25
+	protected $_model_object = null;
26
+
27
+
28
+
29
+	/**
30
+	 * @param array        $options_array   keys: {
31
+	 * @type EEM_Base      $model
32
+	 * @type EE_Base_Class $model_object
33
+	 * @type array         $subsection_args array keys should be subsection names (that either do or will exist), and
34
+	 *       values are the arrays as you would pass them to that subsection
35
+	 *                                      }
36
+	 * @throws EE_Error
37
+	 */
38
+	public function __construct($options_array = array())
39
+	{
40
+		if (isset($options_array['model']) && $options_array['model'] instanceof EEM_Base) {
41
+			$this->_model = $options_array['model'];
42
+		}
43
+		if (! $this->_model || ! $this->_model instanceof EEM_Base) {
44
+			throw new EE_Error(sprintf(__(
45
+				"Model Form Sections must first specify the _model property to be a subclass of EEM_Base",
46
+				"event_espresso"
47
+			)));
48
+		}
49
+		if (isset($options_array['subsection_args'])) {
50
+			$subsection_args = $options_array['subsection_args'];
51
+		} else {
52
+			$subsection_args = array();
53
+		}
54
+		// gather fields and relations to convert to inputs
55
+		// but if they're just going to exclude a field anyways, don't bother converting it to an input
56
+		$exclude = $this->_subsections;
57
+		if (isset($options_array['exclude'])) {
58
+			$exclude = array_merge($exclude, array_flip($options_array['exclude']));
59
+		}
60
+		$model_fields = array_diff_key($this->_model->field_settings(), $exclude);
61
+		$model_relations = array_diff_key($this->_model->relation_settings(), $exclude);
62
+		// convert fields and relations to inputs
63
+		$this->_subsections = array_merge(
64
+			$this->_convert_model_fields_to_inputs($model_fields),
65
+			$this->_convert_model_relations_to_inputs($model_relations, $subsection_args),
66
+			$this->_subsections
67
+		);
68
+		parent::__construct($options_array);
69
+		if (isset($options_array['model_object']) && $options_array['model_object'] instanceof EE_Base_Class) {
70
+			$this->populate_model_obj($options_array['model_object']);
71
+		}
72
+	}
73
+
74
+
75
+
76
+	/**
77
+	 * For now, just makes inputs for only HABTM relations
78
+	 *
79
+	 * @param EE_Model_Relation_Base[] $relations
80
+	 * @param array                    $subsection_args keys should be existing or soon-to-be-existing input names, and
81
+	 *                                                  their values are {
82
+	 * @type array {
83
+	 * @type EE_Base_Class[]           $model_objects   if the subsection is an EE_Select_Multi_Model_Input
84
+	 *                                                  }
85
+	 *                                                  }
86
+	 * @return array
87
+	 */
88
+	protected function _convert_model_relations_to_inputs($relations, $subsection_args = array())
89
+	{
90
+		$inputs = array();
91
+		foreach ($relations as $relation_name => $relation_obj) {
92
+			$input_constructor_args = array(
93
+				array_merge(
94
+					array(
95
+						'required'        => $relation_obj instanceof EE_Belongs_To_Relation,
96
+						'html_label_text' => $relation_obj instanceof EE_Belongs_To_Relation
97
+							? $relation_obj->get_other_model()->item_name(1)
98
+							: $relation_obj->get_other_model()
99
+										   ->item_name(2),
100
+					),
101
+					$subsection_args
102
+				),
103
+			);
104
+			$input = null;
105
+			switch (get_class($relation_obj)) {
106
+				case 'EE_HABTM_Relation':
107
+					if (isset($subsection_args[ $relation_name ])
108
+						&& isset($subsection_args[ $relation_name ]['model_objects'])
109
+					) {
110
+						$model_objects = $subsection_args[ $relation_name ]['model_objects'];
111
+					} else {
112
+						$model_objects = $relation_obj->get_other_model()->get_all();
113
+					}
114
+					$input = new EE_Select_Multi_Model_Input($model_objects, $input_constructor_args);
115
+					break;
116
+				default:
117
+			}
118
+			if ($input) {
119
+				$inputs[ $relation_name ] = $input;
120
+			}
121
+		}
122
+		return $inputs;
123
+	}
124
+
125
+
126
+
127
+	/**
128
+	 * Changes model fields into form section inputs
129
+	 *
130
+	 * @param EE_Model_Field_Base[] $model_fields keys are the model's name
131
+	 * @throws EE_Error
132
+	 * @return EE_Form_Input_Base[]
133
+	 */
134
+	protected function _convert_model_fields_to_inputs($model_fields = array())
135
+	{
136
+		$inputs = array();
137
+		foreach ($model_fields as $field_name => $model_field) {
138
+			if ($model_field instanceof EE_Model_Field_Base) {
139
+				$input_constructor_args = array(
140
+					array(
141
+						'required'        => ! $model_field->is_nullable()
142
+											 && $model_field->get_default_value()
143
+												=== null,
144
+						'html_label_text' => $model_field->get_nicename(),
145
+						'default'         => $model_field->get_default_value(),
146
+					),
147
+				);
148
+				switch (get_class($model_field)) {
149
+					case 'EE_All_Caps_Text_Field':
150
+					case 'EE_Any_Foreign_Model_Name_Field':
151
+						$input_class = 'EE_Text_Input';
152
+						break;
153
+					case 'EE_Boolean_Field':
154
+						$input_class = 'EE_Yes_No_Input';
155
+						break;
156
+					case 'EE_Datetime_Field':
157
+						throw new EE_Error(sprintf(__(
158
+							"Model field '%s' does not yet have a known conversion to form input",
159
+							"event_espresso"
160
+						), get_class($model_field)));
161
+						break;
162
+					case 'EE_Email_Field':
163
+						$input_class = 'EE_Email_Input';
164
+						break;
165
+					case 'EE_Enum_Integer_Field':
166
+						throw new EE_Error(sprintf(__(
167
+							"Model field '%s' does not yet have a known conversion to form input",
168
+							"event_espresso"
169
+						), get_class($model_field)));
170
+						break;
171
+					case 'EE_Enum_Text_Field':
172
+						throw new EE_Error(sprintf(__(
173
+							"Model field '%s' does not yet have a known conversion to form input",
174
+							"event_espresso"
175
+						), get_class($model_field)));
176
+						break;
177
+					case 'EE_Float_Field':
178
+						$input_class = 'EE_Float_Input';
179
+						break;
180
+					case 'EE_Foreign_Key_Int_Field':
181
+					case 'EE_Foreign_Key_String_Field':
182
+					case 'EE_WP_User_Field':
183
+						$models_pointed_to = $model_field instanceof EE_Field_With_Model_Name
184
+							? $model_field->get_model_class_names_pointed_to() : array();
185
+						if (true || is_array($models_pointed_to) && count($models_pointed_to) > 1) {
186
+							$input_class = 'EE_Text_Input';
187
+						} else {
188
+							// so its just one model
189
+							$model_name = is_array($models_pointed_to) ? reset($models_pointed_to) : $models_pointed_to;
190
+							$model = EE_Registry::instance()->load_model($model_name);
191
+							$model_names = $model->get_all_names(array('limit' => 10));
192
+							if ($model_field->is_nullable()) {
193
+								array_unshift($model_names, __("Please Select", 'event_espresso'));
194
+							}
195
+							$input_constructor_args[1] = $input_constructor_args[0];
196
+							$input_constructor_args[0] = $model_names;
197
+							$input_class = 'EE_Select_Input';
198
+						}
199
+						break;
200
+					case 'EE_Full_HTML_Field':
201
+						$input_class = 'EE_Text_Area_Input';
202
+						$input_constructor_args[0]['validation_strategies'] = array(new EE_Full_HTML_Validation_Strategy());
203
+						break;
204
+					case 'EE_Infinite_Integer':
205
+						throw new EE_Error(sprintf(__(
206
+							"Model field '%s' does not yet have a known conversion to form input",
207
+							"event_espresso"
208
+						), get_class($model_field)));
209
+						break;
210
+					case 'EE_Integer_Field':
211
+						$input_class = 'EE_Text_Input';
212
+						break;
213
+					case 'EE_Maybe_Serialized_Text_Field':
214
+						$input_class = 'EE_Text_Area_Input';
215
+						break;
216
+					case 'EE_Money_Field':
217
+						throw new EE_Error(sprintf(__(
218
+							"Model field '%s' does not yet have a known conversion to form input",
219
+							"event_espresso"
220
+						), get_class($model_field)));
221
+						break;
222
+					case 'EE_Post_Content_Field':
223
+						$input_class = 'EE_Text_Area_Input';
224
+						$input_constructor_args[0]['validation_strategies'] = array(new EE_Full_HTML_Validation_Strategy());
225
+						break;
226
+					case 'EE_Plain_Text_Field':
227
+						$input_class = 'EE_Text_Input';
228
+						break;
229
+					case 'EE_Primary_Key_Int_Field':
230
+						$input_class = 'EE_Hidden_Input';
231
+						$input_constructor_args[0]['normalization_strategy'] = new EE_Int_Normalization();
232
+						break;
233
+					case 'EE_Primary_Key_String_Field':
234
+						$input_class = 'EE_Hidden_Input';
235
+						break;
236
+					case 'EE_Serialized_Text_Field':
237
+						$input_class = 'EE_Text_Area_Input';
238
+						break;
239
+					case 'EE_Simple_HTML_Field':
240
+						$input_class = 'EE_Text_Area_Input';
241
+						$input_constructor_args[0]['validation_strategies'] = array(new EE_Simple_HTML_Validation_Strategy());
242
+						break;
243
+					case 'EE_Slug_Field':
244
+						$input_class = 'EE_Text_Input';
245
+						break;
246
+					case 'EE_Trashed_Flag_Field':
247
+						$input_class = 'EE_Yes_No_Input';
248
+						break;
249
+					case 'EE_WP_Post_Status_Field':
250
+						throw new EE_Error(sprintf(__(
251
+							"Model field '%s' does not yet have a known conversion to form input",
252
+							"event_espresso"
253
+						), get_class($model_field)));
254
+						break;
255
+					case 'EE_WP_Post_Type_Field':
256
+						throw new EE_Error(sprintf(__(
257
+							"Model field '%s' does not yet have a known conversion to form input",
258
+							"event_espresso"
259
+						), get_class($model_field)));
260
+						break;
261
+					default:
262
+						throw new EE_Error(sprintf(__(
263
+							"Model field of type '%s' does not convert to any known Form Input. Please add a case to EE_Model_Form_section's _convert_model_fields_to_inputs switch statement",
264
+							"event_espresso"
265
+						), get_class($model_field)));
266
+				}
267
+				$reflection = new ReflectionClass($input_class);
268
+				$input = $reflection->newInstanceArgs($input_constructor_args);
269
+				$inputs[ $field_name ] = $input;
270
+			}
271
+		}
272
+		return $inputs;
273
+	}
274
+
275
+
276
+
277
+	/**
278
+	 * Mostly the same as populate_defaults , except takes a model object as input, not an array,
279
+	 * and also sets the form's _model_object
280
+	 *
281
+	 * @param EE_Base_Class $model_obj
282
+	 * @return void
283
+	 */
284
+	public function populate_model_obj($model_obj)
285
+	{
286
+		$model_obj = $this->_model->ensure_is_obj($model_obj);
287
+		$this->_model_object = $model_obj;
288
+		$defaults = $model_obj->model_field_array();
289
+		foreach ($this->_model->relation_settings() as $relation_name => $relation_obj) {
290
+			$subsection = $this->get_subsection($relation_name, false);
291
+			if ($subsection instanceof EE_Form_Input_Base) {
292
+				if ($relation_obj instanceof EE_Belongs_To_Relation) {
293
+					// then we only expect there to be one
294
+					$related_item = $this->_model_object->get_first_related($relation_name);
295
+					$defaults[ $relation_name ] = $related_item->ID();
296
+				} else {
297
+					$related_items = $this->_model_object->get_many_related($relation_name);
298
+					$ids = array();
299
+					foreach ($related_items as $related_item) {
300
+						$ids[] = $related_item->ID();
301
+					}
302
+					$defaults[ $relation_name ] = $ids;
303
+				}
304
+			}
305
+		}
306
+		$defaults = apply_filters(
307
+			'FHEE__EE_Model_Form_Section__populate_model_obj',
308
+			$defaults,
309
+			$this
310
+		);
311
+		$this->populate_defaults($defaults);
312
+	}
313
+
314
+
315
+
316
+	/**
317
+	 * Gets all the input values that correspond to model fields. Keys are the input/field names,
318
+	 * values are their normalized values
319
+	 *
320
+	 * @return array
321
+	 */
322
+	public function inputs_values_corresponding_to_model_fields()
323
+	{
324
+		return array_intersect_key($this->input_values(), $this->_model->field_settings());
325
+	}
326
+
327
+
328
+
329
+	/**
330
+	 * After we've normalized the data as normal, set the corresponding model object
331
+	 * on the form.
332
+	 *
333
+	 * @param array $req_data should usually be $_REQUEST (the default).
334
+	 * @return void
335
+	 */
336
+	public function _normalize($req_data)
337
+	{
338
+		parent::_normalize($req_data);
339
+		// create or set the model object, if it isn't already
340
+		if (! $this->_model_object) {
341
+			// check to see if the form indicates a PK, in which case we want to only retrieve it and update it
342
+			$pk_name = $this->_model->primary_key_name();
343
+			$model_obj = $this->_model->get_one_by_ID($this->get_input_value($pk_name));
344
+			if ($model_obj) {
345
+				$this->_model_object = $model_obj;
346
+			} else {
347
+				$this->_model_object = EE_Registry::instance()->load_class($this->_model->get_this_model_name());
348
+			}
349
+		}
350
+	}
351
+
352
+
353
+
354
+	/**
355
+	 * After this form has been initialized and is verified to be valid,
356
+	 * either creates a model object from its data and saves it, or updates
357
+	 * the model object its data represents
358
+	 *
359
+	 * @throws EE_Error
360
+	 * @return int, 1 on a successful update, the ID of
361
+	 *                    the new entry on insert; 0 on failure
362
+	 */
363
+	public function save()
364
+	{
365
+		if (! $this->_model_object) {
366
+			throw new EE_Error(sprintf(__(
367
+				"Cannot save the model form's model object (model is '%s') because there is no model object set. You must either set it, or call receive_form_submission where it is set automatically",
368
+				"event_espresso"
369
+			), get_class($this->_model)));
370
+		}
371
+		// ok so the model object is set. Just set it with the submitted form data
372
+		foreach ($this->inputs_values_corresponding_to_model_fields() as $field_name => $field_value) {
373
+			// only set the non-primary key
374
+			if ($field_name != $this->_model->primary_key_name()) {
375
+				$this->_model_object->set($field_name, $field_value);
376
+			}
377
+		}
378
+		$success = $this->_model_object->save();
379
+		foreach ($this->_model->relation_settings() as $relation_name => $relation_obj) {
380
+			if (isset($this->_subsections[ $relation_name ])) {
381
+				$success = $this->_save_related_info($relation_name);
382
+			}
383
+		}
384
+		do_action('AHEE__EE_Model_Form_Section__save__done', $this, $success);
385
+		return $success;
386
+	}
387
+
388
+
389
+
390
+	/**
391
+	 * Automatically finds the related model info from the form, if present, and
392
+	 * save the relations indicated
393
+	 *
394
+	 * @type string $relation_name
395
+	 * @return bool
396
+	 * @throws EE_Error
397
+	 */
398
+	protected function _save_related_info($relation_name)
399
+	{
400
+		$relation_obj = $this->_model->related_settings_for($relation_name);
401
+		if ($relation_obj instanceof EE_Belongs_To_Relation) {
402
+			// there is just a foreign key on this model pointing to that one
403
+			$this->_model_object->_add_relation_to($this->get_input_value($relation_name), $relation_name);
404
+		} elseif ($relation_obj instanceof EE_Has_Many_Relation) {
405
+			// then we want to consider all of its currently-related things.
406
+			// if they're in this list, keep them
407
+			// if they're not in this list, remove them
408
+			// and lastly add all the new items
409
+			throw new EE_Error(sprintf(__(
410
+				'Automatic saving of related info across a "has many" relation is not yet supported',
411
+				"event_espresso"
412
+			)));
413
+		} elseif ($relation_obj instanceof EE_HABTM_Relation) {
414
+			// delete everything NOT in this list
415
+			$normalized_input_value = $this->get_input_value($relation_name);
416
+			if ($normalized_input_value && is_array($normalized_input_value)) {
417
+				$where_query_params = array(
418
+					$relation_obj->get_other_model()->primary_key_name() => array('NOT_IN', $normalized_input_value),
419
+				);
420
+			} else {
421
+				$where_query_params = array();
422
+			}
423
+			$this->_model_object->_remove_relations($relation_name, $where_query_params);
424
+			foreach ($normalized_input_value as $id) {
425
+				$this->_model_object->_add_relation_to($id, $relation_name);
426
+			}
427
+		}
428
+		return true;
429
+	}
430
+
431
+
432
+
433
+	/**
434
+	 * Gets the model of this model form
435
+	 *
436
+	 * @return EEM_Base
437
+	 */
438
+	public function get_model()
439
+	{
440
+		return $this->_model;
441
+	}
442
+
443
+
444
+
445
+	/**
446
+	 * Gets the model object for this model form, which was either set
447
+	 * upon construction (using the $options_array arg 'model_object'), by using
448
+	 * set_model_object($model_obj), or implicitly
449
+	 * when receive_form_submission($req_data) was called.
450
+	 *
451
+	 * @return EE_Base_Class
452
+	 */
453
+	public function get_model_object()
454
+	{
455
+		return $this->_model_object;
456
+	}
457
+
458
+
459
+
460
+	/**
461
+	 * gets teh default name of this form section if none is specified
462
+	 *
463
+	 * @return string
464
+	 */
465
+	protected function _set_default_name_if_empty()
466
+	{
467
+		if (! $this->_name) {
468
+			$default_name = str_replace("EEM_", "", get_class($this->_model)) . "_Model_Form";
469
+			$this->_name = $default_name;
470
+		}
471
+	}
472 472
 }
Please login to merge, or discard this patch.