Completed
Branch EE5Update (bc64e6)
by
unknown
09:36 queued 05:38
created
core/domain/services/admin/entities/DefaultFormSections.php 2 patches
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -55,7 +55,7 @@  discard block
 block discarded – undo
55 55
      */
56 56
     public function create(EE_Base_Class $entity): array
57 57
     {
58
-        if (! $entity instanceof EE_Event) {
58
+        if ( ! $entity instanceof EE_Event) {
59 59
             throw new InvalidEntityException($entity, 'EE_Event');
60 60
         }
61 61
         /** @var EE_Form_Section[] $new_form_sections */
@@ -63,7 +63,7 @@  discard block
 block discarded – undo
63 63
         $default_form_sections = $this->form_section_model->getDefaultFormSections();
64 64
         if (is_array($default_form_sections)) {
65 65
             foreach ($default_form_sections as $default_form_section) {
66
-                if (! $default_form_section instanceof EE_Form_Section) {
66
+                if ( ! $default_form_section instanceof EE_Form_Section) {
67 67
                     throw new InvalidEntityException($default_form_section, 'EE_Form_Section');
68 68
                 }
69 69
                 // we're calling this inside the loop, because this might get set the first time around
@@ -80,7 +80,7 @@  discard block
 block discarded – undo
80 80
                     $new_form_section->setBelongsTo($top_level_form_section);
81 81
                 }
82 82
                 $new_form_section->save();
83
-                $new_form_sections[ $UUID ] = $new_form_section;
83
+                $new_form_sections[$UUID] = $new_form_section;
84 84
                 // now retrieve, clone, and save all of the form elements
85 85
                 $this->createDefaultFormElements($new_form_section, $default_form_elements);
86 86
                 // save form section UUID on event if it is the top-level form section
@@ -103,7 +103,7 @@  discard block
 block discarded – undo
103 103
         /** @var EE_Form_Element[] $new_form_sections */
104 104
         $new_form_elements = [];
105 105
         foreach ($default_form_elements as $default_form_element) {
106
-            if (! $default_form_element instanceof EE_Form_Element) {
106
+            if ( ! $default_form_element instanceof EE_Form_Element) {
107 107
                 throw new InvalidEntityException($default_form_element, 'EE_Form_Element');
108 108
             }
109 109
             // clone form_element, generate a new UUID, reset the status, then save it
@@ -114,7 +114,7 @@  discard block
 block discarded – undo
114 114
             $new_form_element->setBelongsTo($new_form_section->UUID());
115 115
             $new_form_element->setStatus(FormStatus::ACTIVE);
116 116
             $new_form_element->save();
117
-            $new_form_elements[ $UUID ] = $new_form_element;
117
+            $new_form_elements[$UUID] = $new_form_element;
118 118
         }
119 119
         $new_form_section->setFormElements($new_form_elements);
120 120
     }
Please login to merge, or discard this patch.
Indentation   +87 added lines, -87 removed lines patch added patch discarded remove patch
@@ -24,97 +24,97 @@
 block discarded – undo
24 24
  */
25 25
 class DefaultFormSections implements DefaultEntityGeneratorInterface
26 26
 {
27
-    /**
28
-     * @var EEM_Form_Element $form_element_model
29
-     */
30
-    protected $form_element_model;
27
+	/**
28
+	 * @var EEM_Form_Element $form_element_model
29
+	 */
30
+	protected $form_element_model;
31 31
 
32
-    /**
33
-     * @var EEM_Form_Section $form_section_model
34
-     */
35
-    protected $form_section_model;
32
+	/**
33
+	 * @var EEM_Form_Section $form_section_model
34
+	 */
35
+	protected $form_section_model;
36 36
 
37
-    /**
38
-     * @param EEM_Form_Element $form_element_model
39
-     * @param EEM_Form_Section $form_section_model
40
-     */
41
-    public function __construct(EEM_Form_Element $form_element_model, EEM_Form_Section $form_section_model)
42
-    {
43
-        $this->form_element_model = $form_element_model;
44
-        $this->form_section_model = $form_section_model;
45
-    }
37
+	/**
38
+	 * @param EEM_Form_Element $form_element_model
39
+	 * @param EEM_Form_Section $form_section_model
40
+	 */
41
+	public function __construct(EEM_Form_Element $form_element_model, EEM_Form_Section $form_section_model)
42
+	{
43
+		$this->form_element_model = $form_element_model;
44
+		$this->form_section_model = $form_section_model;
45
+	}
46 46
 
47 47
 
48
-    /**
49
-     * @param EE_Event|EE_Base_Class $entity
50
-     * @return EE_Form_Section[]
51
-     * @throws EE_Error
52
-     * @throws InvalidEntityException
53
-     * @throws ReflectionException
54
-     */
55
-    public function create(EE_Base_Class $entity): array
56
-    {
57
-        if (! $entity instanceof EE_Event) {
58
-            throw new InvalidEntityException($entity, 'EE_Event');
59
-        }
60
-        /** @var EE_Form_Section[] $new_form_sections */
61
-        $new_form_sections     = [];
62
-        $default_form_sections = $this->form_section_model->getDefaultFormSections();
63
-        if (is_array($default_form_sections)) {
64
-            foreach ($default_form_sections as $default_form_section) {
65
-                if (! $default_form_section instanceof EE_Form_Section) {
66
-                    throw new InvalidEntityException($default_form_section, 'EE_Form_Section');
67
-                }
68
-                // we're calling this inside the loop, because this might get set the first time around
69
-                // and it would always be blank for a new event if we were to call it before the loop,
70
-                // and then we couldn't set the "BelongsTo" for any child form sections
71
-                $top_level_form_section = $entity->registrationFormUuid();
72
-                $default_form_elements = $default_form_section->formElements();
73
-                // clone form_section, generate a new UUID, reset the status, then save it
74
-                $new_form_section = clone $default_form_section;
75
-                $UUID = Cuid::cuid();
76
-                $new_form_section->setUUID($UUID);
77
-                $new_form_section->setStatus(FormStatus::ACTIVE);
78
-                if ($top_level_form_section) {
79
-                    $new_form_section->setBelongsTo($top_level_form_section);
80
-                }
81
-                $new_form_section->save();
82
-                $new_form_sections[ $UUID ] = $new_form_section;
83
-                // now retrieve, clone, and save all of the form elements
84
-                $this->createDefaultFormElements($new_form_section, $default_form_elements);
85
-                // save form section UUID on event if it is the top-level form section
86
-                if ($new_form_section->isTopLevelFormSection()) {
87
-                    $entity->setRegistrationFormUuid($UUID);
88
-                    $entity->save();
89
-                }
90
-            }
91
-        }
92
-        return $new_form_sections;
93
-    }
48
+	/**
49
+	 * @param EE_Event|EE_Base_Class $entity
50
+	 * @return EE_Form_Section[]
51
+	 * @throws EE_Error
52
+	 * @throws InvalidEntityException
53
+	 * @throws ReflectionException
54
+	 */
55
+	public function create(EE_Base_Class $entity): array
56
+	{
57
+		if (! $entity instanceof EE_Event) {
58
+			throw new InvalidEntityException($entity, 'EE_Event');
59
+		}
60
+		/** @var EE_Form_Section[] $new_form_sections */
61
+		$new_form_sections     = [];
62
+		$default_form_sections = $this->form_section_model->getDefaultFormSections();
63
+		if (is_array($default_form_sections)) {
64
+			foreach ($default_form_sections as $default_form_section) {
65
+				if (! $default_form_section instanceof EE_Form_Section) {
66
+					throw new InvalidEntityException($default_form_section, 'EE_Form_Section');
67
+				}
68
+				// we're calling this inside the loop, because this might get set the first time around
69
+				// and it would always be blank for a new event if we were to call it before the loop,
70
+				// and then we couldn't set the "BelongsTo" for any child form sections
71
+				$top_level_form_section = $entity->registrationFormUuid();
72
+				$default_form_elements = $default_form_section->formElements();
73
+				// clone form_section, generate a new UUID, reset the status, then save it
74
+				$new_form_section = clone $default_form_section;
75
+				$UUID = Cuid::cuid();
76
+				$new_form_section->setUUID($UUID);
77
+				$new_form_section->setStatus(FormStatus::ACTIVE);
78
+				if ($top_level_form_section) {
79
+					$new_form_section->setBelongsTo($top_level_form_section);
80
+				}
81
+				$new_form_section->save();
82
+				$new_form_sections[ $UUID ] = $new_form_section;
83
+				// now retrieve, clone, and save all of the form elements
84
+				$this->createDefaultFormElements($new_form_section, $default_form_elements);
85
+				// save form section UUID on event if it is the top-level form section
86
+				if ($new_form_section->isTopLevelFormSection()) {
87
+					$entity->setRegistrationFormUuid($UUID);
88
+					$entity->save();
89
+				}
90
+			}
91
+		}
92
+		return $new_form_sections;
93
+	}
94 94
 
95 95
 
96
-    /**
97
-     * @throws EE_Error
98
-     * @throws ReflectionException
99
-     */
100
-    private function createDefaultFormElements(EE_Form_Section $new_form_section, array $default_form_elements)
101
-    {
102
-        /** @var EE_Form_Element[] $new_form_sections */
103
-        $new_form_elements = [];
104
-        foreach ($default_form_elements as $default_form_element) {
105
-            if (! $default_form_element instanceof EE_Form_Element) {
106
-                throw new InvalidEntityException($default_form_element, 'EE_Form_Element');
107
-            }
108
-            // clone form_element, generate a new UUID, reset the status, then save it
109
-            $new_form_element = clone $default_form_element;
110
-            // generate a new UUID for this form section then save it
111
-            $UUID = Cuid::cuid();
112
-            $new_form_element->setUUID($UUID);
113
-            $new_form_element->setBelongsTo($new_form_section->UUID());
114
-            $new_form_element->setStatus(FormStatus::ACTIVE);
115
-            $new_form_element->save();
116
-            $new_form_elements[ $UUID ] = $new_form_element;
117
-        }
118
-        $new_form_section->setFormElements($new_form_elements);
119
-    }
96
+	/**
97
+	 * @throws EE_Error
98
+	 * @throws ReflectionException
99
+	 */
100
+	private function createDefaultFormElements(EE_Form_Section $new_form_section, array $default_form_elements)
101
+	{
102
+		/** @var EE_Form_Element[] $new_form_sections */
103
+		$new_form_elements = [];
104
+		foreach ($default_form_elements as $default_form_element) {
105
+			if (! $default_form_element instanceof EE_Form_Element) {
106
+				throw new InvalidEntityException($default_form_element, 'EE_Form_Element');
107
+			}
108
+			// clone form_element, generate a new UUID, reset the status, then save it
109
+			$new_form_element = clone $default_form_element;
110
+			// generate a new UUID for this form section then save it
111
+			$UUID = Cuid::cuid();
112
+			$new_form_element->setUUID($UUID);
113
+			$new_form_element->setBelongsTo($new_form_section->UUID());
114
+			$new_form_element->setStatus(FormStatus::ACTIVE);
115
+			$new_form_element->save();
116
+			$new_form_elements[ $UUID ] = $new_form_element;
117
+		}
118
+		$new_form_section->setFormElements($new_form_elements);
119
+	}
120 120
 }
Please login to merge, or discard this patch.
core/libraries/plugin_api/EE_Register_Messages_Template_Pack.lib.php 2 patches
Spacing   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -69,13 +69,13 @@  discard block
 block discarded – undo
69 69
         }
70 70
 
71 71
         // make sure we don't register twice
72
-        if (isset(self::$_registry[ $addon_name ])) {
72
+        if (isset(self::$_registry[$addon_name])) {
73 73
             return true;
74 74
         }
75 75
 
76 76
         // check that incoming $addon_name doesn't already exist. If it does then we'll create a unique reference for this template pack.
77
-        if (isset(self::$_registry[ $addon_name ])) {
78
-            $addon_name = uniqid() . '_' . $addon_name;
77
+        if (isset(self::$_registry[$addon_name])) {
78
+            $addon_name = uniqid().'_'.$addon_name;
79 79
         }
80 80
 
81 81
 
@@ -98,7 +98,7 @@  discard block
 block discarded – undo
98 98
         }
99 99
 
100 100
         if (self::_verify_class_not_exist($setup_args['classname'])) {
101
-            self::$_registry[ $addon_name ] = [
101
+            self::$_registry[$addon_name] = [
102 102
                 'path'      => (string) $setup_args['path'],
103 103
                 'classname' => (string) $setup_args['classname'],
104 104
             ];
@@ -151,14 +151,14 @@  discard block
 block discarded – undo
151 151
     {
152 152
         foreach (self::$_registry as $args) {
153 153
             // verify class_exists
154
-            if (! class_exists($args['classname'])) {
155
-                require_once($args['path'] . '/' . $args['classname'] . '.class.php');
154
+            if ( ! class_exists($args['classname'])) {
155
+                require_once($args['path'].'/'.$args['classname'].'.class.php');
156 156
             }
157 157
 
158 158
             // check again!
159 159
             if (class_exists($args['classname'])) {
160 160
                 $template_pack                           = new $args['classname']();
161
-                $template_packs[ $template_pack->dbref ] = $template_pack;
161
+                $template_packs[$template_pack->dbref] = $template_pack;
162 162
             }
163 163
         }
164 164
 
@@ -208,6 +208,6 @@  discard block
 block discarded – undo
208 208
      */
209 209
     public static function deregister(string $addon_name = '')
210 210
     {
211
-        unset(self::$_registry[ $addon_name ]);
211
+        unset(self::$_registry[$addon_name]);
212 212
     }
213 213
 }
Please login to merge, or discard this patch.
Indentation   +198 added lines, -198 removed lines patch added patch discarded remove patch
@@ -10,202 +10,202 @@
 block discarded – undo
10 10
  */
11 11
 class EE_Register_Messages_Template_Pack implements EEI_Plugin_API
12 12
 {
13
-    /**
14
-     * Holds values for registered template pack
15
-     *
16
-     * @since 4.5.0
17
-     *
18
-     * @var array
19
-     */
20
-    protected static $_registry = [];
21
-
22
-
23
-    /**
24
-     * Used to register a new template pack with the messages system.
25
-     *
26
-     * Template packs are primarily defined via class extending EE_Messages_Template_Pack and are typically used to
27
-     * change entire layouts for a set of message templates.  This method is used to register the new template pack and
28
-     * automatically have it loaded in the appropriate places.
29
-     *
30
-     * This registry also verifies that there isn't already a template pack registered with the same name and if there
31
-     * is then it will add an EE_Error notice.
32
-     *
33
-     * Note that this only handles registering the your Template Pack class with the message template pack system.
34
-     * However, there is also a naming schema you must follow for templates you are providing with your template pack.
35
-     *
36
-     * @param string $addon_name The internal reference used to refer to this template pack.  Note, this is first come,
37
-     *                           first serve.  If there is already a template pack registered with this name then the
38
-     *                           registry will assign a unique reference for it so it can still be activated (but this
39
-     *                           makes it harder to deregister as it will be unique per load - so its best to try to
40
-     *                           make this a unique string!)
41
-     * @param array  $setup_args array {
42
-     *                           An array of required values for registering the template pack.
43
-     * @type string  $path       The path for the new template pack class.
44
-     * @type string  $classname  The name of the new Template Pack Class.
45
-     *                           }
46
-     * @return bool
47
-     * @throws EE_Error
48
-     *
49
-     * @see    core/libraries/messages/defaults/default/* for all the example templates the default template pack
50
-     *         supports.
51
-     *
52
-     *
53
-     * @since  4.5.0
54
-     * @see    EE_Messages_Template_Pack_Default for an example class
55
-     */
56
-    public static function register(string $addon_name = '', array $setup_args = []): bool
57
-    {
58
-
59
-        // check for required params
60
-        if (empty($addon_name) || empty($setup_args['path']) || empty($setup_args['classname'])) {
61
-            throw new EE_Error(
62
-                esc_html__(
63
-                    'In order to register a new template pack for the EE Messages system, you must include a value to reference the template pack being registered and the setup_args must have the path for the new template pack class as well as the classname for the new Template Pack Class. ',
64
-                    'event_espresso'
65
-                )
66
-            );
67
-        }
68
-
69
-        // make sure we don't register twice
70
-        if (isset(self::$_registry[ $addon_name ])) {
71
-            return true;
72
-        }
73
-
74
-        // check that incoming $addon_name doesn't already exist. If it does then we'll create a unique reference for this template pack.
75
-        if (isset(self::$_registry[ $addon_name ])) {
76
-            $addon_name = uniqid() . '_' . $addon_name;
77
-        }
78
-
79
-
80
-        // make sure this was called in the right place!
81
-        if (
82
-            ! did_action('EE_Brewing_Regular___messages_caf')
83
-            || did_action('AHEE__EE_System__perform_activations_upgrades_and_migrations')
84
-        ) {
85
-            EE_Error::doing_it_wrong(
86
-                __METHOD__,
87
-                sprintf(
88
-                    esc_html__(
89
-                        'A EE Messages Template Pack given the reference "%s" has been attempted to be registered with the EE Messages System.  It may or may not work because it should be only called on the "EE_Brewing_Regular__messages_caf" hook.',
90
-                        'event_espresso'
91
-                    ),
92
-                    $addon_name
93
-                ),
94
-                '4.5.0'
95
-            );
96
-        }
97
-
98
-        if (self::_verify_class_not_exist($setup_args['classname'])) {
99
-            self::$_registry[ $addon_name ] = [
100
-                'path'      => (string) $setup_args['path'],
101
-                'classname' => (string) $setup_args['classname'],
102
-            ];
103
-        }
104
-
105
-        // hook into the system
106
-        add_filter(
107
-            'FHEE__EED_Messages___set_messages_paths___MSG_PATHS',
108
-            ['EE_Register_Messages_Template_Pack', 'set_template_pack_path'],
109
-            10
110
-        );
111
-        add_filter(
112
-            'FHEE__EED_Messages__get_template_packs__template_packs',
113
-            ['EE_Register_Messages_Template_Pack', 'set_template_pack'],
114
-            10
115
-        );
116
-        return true;
117
-    }
118
-
119
-
120
-    /**
121
-     * Callback for the FHEE__EED_Messages___set_messages_paths___MSG_PATHS filter.  This adds this template packs path
122
-     * to the messages autoloader paths.
123
-     *
124
-     * @param array $paths Array of paths already registered with the messages autoloader
125
-     *
126
-     * @return array
127
-     * @since  4.5.0
128
-     *
129
-     */
130
-    public static function set_template_pack_path(array $paths): array
131
-    {
132
-        foreach (self::$_registry as $args) {
133
-            $paths[] = $args['path'];
134
-        }
135
-        return $paths;
136
-    }
137
-
138
-
139
-    /**
140
-     * Callback for the FHEE__EED_Messages__get_template_packs__template_packs filter. This adds the instantiated,
141
-     * registered template pack to the template packs array when requested by client code.
142
-     *
143
-     * @param EE_Messages_Template_Pack[] $template_packs
144
-     * @return EE_Messages_Template_Pack[]
145
-     * @since 4.5.0
146
-     *
147
-     */
148
-    public static function set_template_pack(array $template_packs): array
149
-    {
150
-        foreach (self::$_registry as $args) {
151
-            // verify class_exists
152
-            if (! class_exists($args['classname'])) {
153
-                require_once($args['path'] . '/' . $args['classname'] . '.class.php');
154
-            }
155
-
156
-            // check again!
157
-            if (class_exists($args['classname'])) {
158
-                $template_pack                           = new $args['classname']();
159
-                $template_packs[ $template_pack->dbref ] = $template_pack;
160
-            }
161
-        }
162
-
163
-        return $template_packs;
164
-    }
165
-
166
-
167
-    /**
168
-     * This verifies that the classes for each registered template pack are unique  names.
169
-     *
170
-     * @param string $classname The classname being checked
171
-     *
172
-     * @return bool
173
-     */
174
-    private static function _verify_class_not_exist(string $classname): bool
175
-    {
176
-        // loop through the existing registry and see if the classname is already present.
177
-        foreach (self::$_registry as $args) {
178
-            if ($args['classname'] == $classname) {
179
-                EE_Error::add_error(
180
-                    sprintf(
181
-                        esc_html__(
182
-                            'The %s template pack that you just activated cannot be registered with the messages system because there is already a template pack active using the same classname.  Contact the author of this template pack to let them know of the conflict.  To stop seeing this message you will need to deactivate this template pack.',
183
-                            'event_espresso'
184
-                        ),
185
-                        $classname
186
-                    ),
187
-                    __FILE__,
188
-                    __LINE__,
189
-                    __FUNCTION__
190
-                );
191
-                return false;
192
-            }
193
-        }
194
-        return true;
195
-    }
196
-
197
-
198
-    /**
199
-     * This deregisters a variation set that was previously registered with the given slug.
200
-     *
201
-     * @param string $addon_name The name for the variation set that was previously registered.
202
-     *
203
-     * @return void
204
-     * @since 4.5.0
205
-     *
206
-     */
207
-    public static function deregister(string $addon_name = '')
208
-    {
209
-        unset(self::$_registry[ $addon_name ]);
210
-    }
13
+	/**
14
+	 * Holds values for registered template pack
15
+	 *
16
+	 * @since 4.5.0
17
+	 *
18
+	 * @var array
19
+	 */
20
+	protected static $_registry = [];
21
+
22
+
23
+	/**
24
+	 * Used to register a new template pack with the messages system.
25
+	 *
26
+	 * Template packs are primarily defined via class extending EE_Messages_Template_Pack and are typically used to
27
+	 * change entire layouts for a set of message templates.  This method is used to register the new template pack and
28
+	 * automatically have it loaded in the appropriate places.
29
+	 *
30
+	 * This registry also verifies that there isn't already a template pack registered with the same name and if there
31
+	 * is then it will add an EE_Error notice.
32
+	 *
33
+	 * Note that this only handles registering the your Template Pack class with the message template pack system.
34
+	 * However, there is also a naming schema you must follow for templates you are providing with your template pack.
35
+	 *
36
+	 * @param string $addon_name The internal reference used to refer to this template pack.  Note, this is first come,
37
+	 *                           first serve.  If there is already a template pack registered with this name then the
38
+	 *                           registry will assign a unique reference for it so it can still be activated (but this
39
+	 *                           makes it harder to deregister as it will be unique per load - so its best to try to
40
+	 *                           make this a unique string!)
41
+	 * @param array  $setup_args array {
42
+	 *                           An array of required values for registering the template pack.
43
+	 * @type string  $path       The path for the new template pack class.
44
+	 * @type string  $classname  The name of the new Template Pack Class.
45
+	 *                           }
46
+	 * @return bool
47
+	 * @throws EE_Error
48
+	 *
49
+	 * @see    core/libraries/messages/defaults/default/* for all the example templates the default template pack
50
+	 *         supports.
51
+	 *
52
+	 *
53
+	 * @since  4.5.0
54
+	 * @see    EE_Messages_Template_Pack_Default for an example class
55
+	 */
56
+	public static function register(string $addon_name = '', array $setup_args = []): bool
57
+	{
58
+
59
+		// check for required params
60
+		if (empty($addon_name) || empty($setup_args['path']) || empty($setup_args['classname'])) {
61
+			throw new EE_Error(
62
+				esc_html__(
63
+					'In order to register a new template pack for the EE Messages system, you must include a value to reference the template pack being registered and the setup_args must have the path for the new template pack class as well as the classname for the new Template Pack Class. ',
64
+					'event_espresso'
65
+				)
66
+			);
67
+		}
68
+
69
+		// make sure we don't register twice
70
+		if (isset(self::$_registry[ $addon_name ])) {
71
+			return true;
72
+		}
73
+
74
+		// check that incoming $addon_name doesn't already exist. If it does then we'll create a unique reference for this template pack.
75
+		if (isset(self::$_registry[ $addon_name ])) {
76
+			$addon_name = uniqid() . '_' . $addon_name;
77
+		}
78
+
79
+
80
+		// make sure this was called in the right place!
81
+		if (
82
+			! did_action('EE_Brewing_Regular___messages_caf')
83
+			|| did_action('AHEE__EE_System__perform_activations_upgrades_and_migrations')
84
+		) {
85
+			EE_Error::doing_it_wrong(
86
+				__METHOD__,
87
+				sprintf(
88
+					esc_html__(
89
+						'A EE Messages Template Pack given the reference "%s" has been attempted to be registered with the EE Messages System.  It may or may not work because it should be only called on the "EE_Brewing_Regular__messages_caf" hook.',
90
+						'event_espresso'
91
+					),
92
+					$addon_name
93
+				),
94
+				'4.5.0'
95
+			);
96
+		}
97
+
98
+		if (self::_verify_class_not_exist($setup_args['classname'])) {
99
+			self::$_registry[ $addon_name ] = [
100
+				'path'      => (string) $setup_args['path'],
101
+				'classname' => (string) $setup_args['classname'],
102
+			];
103
+		}
104
+
105
+		// hook into the system
106
+		add_filter(
107
+			'FHEE__EED_Messages___set_messages_paths___MSG_PATHS',
108
+			['EE_Register_Messages_Template_Pack', 'set_template_pack_path'],
109
+			10
110
+		);
111
+		add_filter(
112
+			'FHEE__EED_Messages__get_template_packs__template_packs',
113
+			['EE_Register_Messages_Template_Pack', 'set_template_pack'],
114
+			10
115
+		);
116
+		return true;
117
+	}
118
+
119
+
120
+	/**
121
+	 * Callback for the FHEE__EED_Messages___set_messages_paths___MSG_PATHS filter.  This adds this template packs path
122
+	 * to the messages autoloader paths.
123
+	 *
124
+	 * @param array $paths Array of paths already registered with the messages autoloader
125
+	 *
126
+	 * @return array
127
+	 * @since  4.5.0
128
+	 *
129
+	 */
130
+	public static function set_template_pack_path(array $paths): array
131
+	{
132
+		foreach (self::$_registry as $args) {
133
+			$paths[] = $args['path'];
134
+		}
135
+		return $paths;
136
+	}
137
+
138
+
139
+	/**
140
+	 * Callback for the FHEE__EED_Messages__get_template_packs__template_packs filter. This adds the instantiated,
141
+	 * registered template pack to the template packs array when requested by client code.
142
+	 *
143
+	 * @param EE_Messages_Template_Pack[] $template_packs
144
+	 * @return EE_Messages_Template_Pack[]
145
+	 * @since 4.5.0
146
+	 *
147
+	 */
148
+	public static function set_template_pack(array $template_packs): array
149
+	{
150
+		foreach (self::$_registry as $args) {
151
+			// verify class_exists
152
+			if (! class_exists($args['classname'])) {
153
+				require_once($args['path'] . '/' . $args['classname'] . '.class.php');
154
+			}
155
+
156
+			// check again!
157
+			if (class_exists($args['classname'])) {
158
+				$template_pack                           = new $args['classname']();
159
+				$template_packs[ $template_pack->dbref ] = $template_pack;
160
+			}
161
+		}
162
+
163
+		return $template_packs;
164
+	}
165
+
166
+
167
+	/**
168
+	 * This verifies that the classes for each registered template pack are unique  names.
169
+	 *
170
+	 * @param string $classname The classname being checked
171
+	 *
172
+	 * @return bool
173
+	 */
174
+	private static function _verify_class_not_exist(string $classname): bool
175
+	{
176
+		// loop through the existing registry and see if the classname is already present.
177
+		foreach (self::$_registry as $args) {
178
+			if ($args['classname'] == $classname) {
179
+				EE_Error::add_error(
180
+					sprintf(
181
+						esc_html__(
182
+							'The %s template pack that you just activated cannot be registered with the messages system because there is already a template pack active using the same classname.  Contact the author of this template pack to let them know of the conflict.  To stop seeing this message you will need to deactivate this template pack.',
183
+							'event_espresso'
184
+						),
185
+						$classname
186
+					),
187
+					__FILE__,
188
+					__LINE__,
189
+					__FUNCTION__
190
+				);
191
+				return false;
192
+			}
193
+		}
194
+		return true;
195
+	}
196
+
197
+
198
+	/**
199
+	 * This deregisters a variation set that was previously registered with the given slug.
200
+	 *
201
+	 * @param string $addon_name The name for the variation set that was previously registered.
202
+	 *
203
+	 * @return void
204
+	 * @since 4.5.0
205
+	 *
206
+	 */
207
+	public static function deregister(string $addon_name = '')
208
+	{
209
+		unset(self::$_registry[ $addon_name ]);
210
+	}
211 211
 }
Please login to merge, or discard this patch.
core/domain/services/admin/events/editor/FormBuilder.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -55,7 +55,7 @@  discard block
 block discarded – undo
55 55
                 $UUID = $section->UUID();
56 56
 
57 57
                 // Avoid duplicates, if any
58
-                $sections[ $UUID ] = [
58
+                $sections[$UUID] = [
59 59
                     'id'         => $UUID,
60 60
                     'appliesTo'  => GQLUtils::formatEnumKey($section->appliesTo()),
61 61
                     'attributes' => $section->attributes()->toJson(),
@@ -85,7 +85,7 @@  discard block
 block discarded – undo
85 85
                 $UUID = $element->UUID();
86 86
 
87 87
             // Avoid duplicates
88
-                $elements[ $UUID ] = [
88
+                $elements[$UUID] = [
89 89
                 'id'         => $UUID,
90 90
                 'adminOnly'  => $element->adminOnly(),
91 91
                 'attributes' => $element->attributes()->toJson(),
Please login to merge, or discard this patch.
Indentation   +76 added lines, -76 removed lines patch added patch discarded remove patch
@@ -23,87 +23,87 @@
 block discarded – undo
23 23
  */
24 24
 class FormBuilder implements EventEditorDataInterface
25 25
 {
26
-    /**
27
-     * @param int $eventId
28
-     * @return array
29
-     * @throws EE_Error
30
-     * @throws ReflectionException
31
-     */
32
-    public function getData(int $eventId): array
33
-    {
34
-        /** @var EE_Event $event */
35
-        $event = EEM_Event::instance()->get_one_by_ID($eventId);
36
-        $topLevelSectionId = $event->registrationFormUuid();
26
+	/**
27
+	 * @param int $eventId
28
+	 * @return array
29
+	 * @throws EE_Error
30
+	 * @throws ReflectionException
31
+	 */
32
+	public function getData(int $eventId): array
33
+	{
34
+		/** @var EE_Event $event */
35
+		$event = EEM_Event::instance()->get_one_by_ID($eventId);
36
+		$topLevelSectionId = $event->registrationFormUuid();
37 37
 
38
-        /** @var EE_Form_Section[] $form_sections */
39
-        $form_sections = EEM_Form_Section::instance()->get_all([
40
-            [
41
-                'OR' => [
42
-                    'FSC_UUID'      => $topLevelSectionId, // top level form
43
-                    'FSC_belongsTo' => $topLevelSectionId, // child form sections
44
-                    'FSC_status'    => FormStatus::SHARED, // shared form sections
45
-                ]
46
-                ],
47
-            'order_by' => ['FSC_order' => 'ASC'],
48
-        ]);
38
+		/** @var EE_Form_Section[] $form_sections */
39
+		$form_sections = EEM_Form_Section::instance()->get_all([
40
+			[
41
+				'OR' => [
42
+					'FSC_UUID'      => $topLevelSectionId, // top level form
43
+					'FSC_belongsTo' => $topLevelSectionId, // child form sections
44
+					'FSC_status'    => FormStatus::SHARED, // shared form sections
45
+				]
46
+				],
47
+			'order_by' => ['FSC_order' => 'ASC'],
48
+		]);
49 49
 
50
-        $sections = [];
51
-        foreach ($form_sections as $section) {
52
-            if ($section instanceof EE_Form_Section) {
53
-                $UUID = $section->UUID();
50
+		$sections = [];
51
+		foreach ($form_sections as $section) {
52
+			if ($section instanceof EE_Form_Section) {
53
+				$UUID = $section->UUID();
54 54
 
55
-                // Avoid duplicates, if any
56
-                $sections[ $UUID ] = [
57
-                    'id'         => $UUID,
58
-                    'appliesTo'  => GQLUtils::formatEnumKey($section->appliesTo()),
59
-                    'attributes' => $section->attributes()->toJson(),
60
-                    'belongsTo'  => $section->belongsTo(),
61
-                    'isActive'   => $section->isActive(),
62
-                    'isArchived' => $section->isArchived(),
63
-                    'isDefault'  => $section->isDefault(),
64
-                    'isShared'   => $section->isShared(),
65
-                    'isTrashed'  => $section->isTrashed(),
66
-                    'label'      => $section->label()->toJson(),
67
-                    'order'      => $section->order(),
68
-                    'status'     => GQLUtils::formatEnumKey($section->status()),
69
-                ];
70
-            }
71
-        }
55
+				// Avoid duplicates, if any
56
+				$sections[ $UUID ] = [
57
+					'id'         => $UUID,
58
+					'appliesTo'  => GQLUtils::formatEnumKey($section->appliesTo()),
59
+					'attributes' => $section->attributes()->toJson(),
60
+					'belongsTo'  => $section->belongsTo(),
61
+					'isActive'   => $section->isActive(),
62
+					'isArchived' => $section->isArchived(),
63
+					'isDefault'  => $section->isDefault(),
64
+					'isShared'   => $section->isShared(),
65
+					'isTrashed'  => $section->isTrashed(),
66
+					'label'      => $section->label()->toJson(),
67
+					'order'      => $section->order(),
68
+					'status'     => GQLUtils::formatEnumKey($section->status()),
69
+				];
70
+			}
71
+		}
72 72
 
73
-        /** @var EE_Form_Element[] $form_elements */
74
-        $form_elements = EEM_Form_Element::instance()->get_all([
75
-            [
76
-                'FSC_UUID' => ['IN', array_keys($sections)]
77
-            ]
78
-        ]);
73
+		/** @var EE_Form_Element[] $form_elements */
74
+		$form_elements = EEM_Form_Element::instance()->get_all([
75
+			[
76
+				'FSC_UUID' => ['IN', array_keys($sections)]
77
+			]
78
+		]);
79 79
 
80
-        $elements = [];
81
-        foreach ($form_elements as $element) {
82
-            if ($element instanceof EE_Form_Element) {
83
-                $UUID = $element->UUID();
80
+		$elements = [];
81
+		foreach ($form_elements as $element) {
82
+			if ($element instanceof EE_Form_Element) {
83
+				$UUID = $element->UUID();
84 84
 
85
-            // Avoid duplicates
86
-                $elements[ $UUID ] = [
87
-                'id'         => $UUID,
88
-                'adminOnly'  => $element->adminOnly(),
89
-                'attributes' => $element->attributes()->toJson(),
90
-                'belongsTo'  => $element->belongsTo(),
91
-                'helpText'   => $element->helpText()->toJson(),
92
-                'label'      => $element->label()->toJson(),
93
-                'mapsTo'     => $element->mapsTo(),
94
-                'options'    => $element->options()->toJson(),
95
-                'order'      => $element->order(),
96
-                'required'   => $element->required()->toJson(),
97
-                'status'     => GQLUtils::formatEnumKey($element->status()),
98
-                'type'       => GQLUtils::formatEnumKey($element->type()),
99
-                ];
100
-            }
101
-        }
85
+			// Avoid duplicates
86
+				$elements[ $UUID ] = [
87
+				'id'         => $UUID,
88
+				'adminOnly'  => $element->adminOnly(),
89
+				'attributes' => $element->attributes()->toJson(),
90
+				'belongsTo'  => $element->belongsTo(),
91
+				'helpText'   => $element->helpText()->toJson(),
92
+				'label'      => $element->label()->toJson(),
93
+				'mapsTo'     => $element->mapsTo(),
94
+				'options'    => $element->options()->toJson(),
95
+				'order'      => $element->order(),
96
+				'required'   => $element->required()->toJson(),
97
+				'status'     => GQLUtils::formatEnumKey($element->status()),
98
+				'type'       => GQLUtils::formatEnumKey($element->type()),
99
+				];
100
+			}
101
+		}
102 102
 
103
-        return [
104
-            'elements'          => array_values($elements),
105
-            'sections'          => array_values($sections),
106
-            'topLevelSectionId' => $event->registrationFormUuid()
107
-        ];
108
-    }
103
+		return [
104
+			'elements'          => array_values($elements),
105
+			'sections'          => array_values($sections),
106
+			'topLevelSectionId' => $event->registrationFormUuid()
107
+		];
108
+	}
109 109
 }
Please login to merge, or discard this patch.
core/services/form/meta/inputs/Text.php 1 patch
Indentation   +47 added lines, -47 removed lines patch added patch discarded remove patch
@@ -4,61 +4,61 @@
 block discarded – undo
4 4
 
5 5
 class Text
6 6
 {
7
-    /**
8
-     * indicates that the HTML input type is 'email'
9
-     */
10
-    public const TYPE_EMAIL = 'email';
7
+	/**
8
+	 * indicates that the HTML input type is 'email'
9
+	 */
10
+	public const TYPE_EMAIL = 'email';
11 11
 
12
-    /**
13
-     * indicates that the input is used to confirm an email address
14
-     */
15
-    public const TYPE_EMAIL_CONFIRMATION = 'email-confirmation';
12
+	/**
13
+	 * indicates that the input is used to confirm an email address
14
+	 */
15
+	public const TYPE_EMAIL_CONFIRMATION = 'email-confirmation';
16 16
 
17
-    /**
18
-     * indicates that the HTML input type is 'text'
19
-     */
20
-    public const TYPE_TEXT = 'text';
17
+	/**
18
+	 * indicates that the HTML input type is 'text'
19
+	 */
20
+	public const TYPE_TEXT = 'text';
21 21
 
22
-    /**
23
-     * indicates that the input is a TEXTAREA that only allows plain text
24
-     */
25
-    public const TYPE_TEXTAREA = 'textarea';
22
+	/**
23
+	 * indicates that the input is a TEXTAREA that only allows plain text
24
+	 */
25
+	public const TYPE_TEXTAREA = 'textarea';
26 26
 
27
-    /**
28
-     * indicates that the input is a TEXTAREA that allows simple html
29
-     */
30
-    public const TYPE_TEXTAREA_HTML = 'textarea-html';
27
+	/**
28
+	 * indicates that the input is a TEXTAREA that allows simple html
29
+	 */
30
+	public const TYPE_TEXTAREA_HTML = 'textarea-html';
31 31
 
32 32
 
33
-    /**
34
-     * @var array
35
-     */
36
-    private $valid_type_options;
33
+	/**
34
+	 * @var array
35
+	 */
36
+	private $valid_type_options;
37 37
 
38 38
 
39
-    public function __construct()
40
-    {
41
-        $this->valid_type_options = apply_filters(
42
-            'FHEE__EventEspresso_core_services_form_meta_inputs_Text__valid_type_options',
43
-            [
44
-                Text::TYPE_EMAIL              => esc_html__('Email', 'event_espresso'),
45
-                Text::TYPE_EMAIL_CONFIRMATION => esc_html__('Email Confirmation', 'event_espresso'),
46
-                Text::TYPE_TEXT               => esc_html__('Plain Text', 'event_espresso'),
47
-                Text::TYPE_TEXTAREA           => esc_html__('Plain Textarea', 'event_espresso'),
48
-                Text::TYPE_TEXTAREA_HTML      => esc_html__('Simple HTML Textarea', 'event_espresso'),
49
-            ]
50
-        );
51
-    }
39
+	public function __construct()
40
+	{
41
+		$this->valid_type_options = apply_filters(
42
+			'FHEE__EventEspresso_core_services_form_meta_inputs_Text__valid_type_options',
43
+			[
44
+				Text::TYPE_EMAIL              => esc_html__('Email', 'event_espresso'),
45
+				Text::TYPE_EMAIL_CONFIRMATION => esc_html__('Email Confirmation', 'event_espresso'),
46
+				Text::TYPE_TEXT               => esc_html__('Plain Text', 'event_espresso'),
47
+				Text::TYPE_TEXTAREA           => esc_html__('Plain Textarea', 'event_espresso'),
48
+				Text::TYPE_TEXTAREA_HTML      => esc_html__('Simple HTML Textarea', 'event_espresso'),
49
+			]
50
+		);
51
+	}
52 52
 
53 53
 
54
-    /**
55
-     * @param bool $constants_only
56
-     * @return array
57
-     */
58
-    public function validTypeOptions(bool $constants_only = false): array
59
-    {
60
-        return $constants_only
61
-            ? array_keys($this->valid_type_options)
62
-            : $this->valid_type_options;
63
-    }
54
+	/**
55
+	 * @param bool $constants_only
56
+	 * @return array
57
+	 */
58
+	public function validTypeOptions(bool $constants_only = false): array
59
+	{
60
+		return $constants_only
61
+			? array_keys($this->valid_type_options)
62
+			: $this->valid_type_options;
63
+	}
64 64
 }
Please login to merge, or discard this patch.
core/services/form/meta/inputs/Input.php 1 patch
Indentation   +86 added lines, -86 removed lines patch added patch discarded remove patch
@@ -5,90 +5,90 @@
 block discarded – undo
5 5
 class Input
6 6
 {
7 7
 
8
-    /**
9
-     * indicates that the HTML input type is 'checkbox'
10
-     */
11
-    public const TYPE_CHECKBOX = 'checkbox';
12
-
13
-    /**
14
-     * indicates that the HTML input type is 'multi checkbox'
15
-     */
16
-    public const TYPE_CHECKBOX_MULTI = 'checkbox-multi';
17
-
18
-    /**
19
-     * indicates that the HTML input type is 'color'
20
-     */
21
-    public const TYPE_COLOR = 'color';
22
-
23
-    /**
24
-     * indicates that the HTML input type is 'file'
25
-     */
26
-    public const TYPE_FILE = 'file';
27
-
28
-    /**
29
-     * indicates that the HTML input type is 'hidden'
30
-     */
31
-    public const TYPE_HIDDEN = 'hidden';
32
-
33
-    /**
34
-     * indicates that the HTML input type is 'image'
35
-     */
36
-    public const TYPE_IMAGE = 'image';
37
-
38
-    /**
39
-     * indicates that the HTML input type is 'password'
40
-     */
41
-    public const TYPE_PASSWORD = 'password';
42
-
43
-    /**
44
-     * indicates that the input is used to confirm a password
45
-     */
46
-    public const TYPE_PASSWORD_CONFIRMATION = 'password-confirmation';
47
-
48
-    /**
49
-     * indicates that the HTML input type is 'radio'
50
-     */
51
-    public const TYPE_RADIO = 'radio';
52
-
53
-    /**
54
-     * indicates that the HTML input type is 'url'
55
-     */
56
-    public const TYPE_URL = 'url';
57
-
58
-    /**
59
-     * @var array
60
-     */
61
-    private $valid_type_options;
62
-
63
-
64
-    public function __construct()
65
-    {
66
-        $this->valid_type_options = apply_filters(
67
-            'FHEE__EventEspresso_core_services_form_meta_inputs_Input__valid_type_options',
68
-            [
69
-                Input::TYPE_CHECKBOX              => esc_html__('Checkbox', 'event_espresso'),
70
-                Input::TYPE_CHECKBOX_MULTI        => esc_html__('Multi Checkbox', 'event_espresso'),
71
-                Input::TYPE_COLOR                 => esc_html__('Color Picker', 'event_espresso'),
72
-                Input::TYPE_FILE                  => esc_html__('File Upload', 'event_espresso'),
73
-                Input::TYPE_HIDDEN                => esc_html__('Hidden', 'event_espresso'),
74
-                Input::TYPE_IMAGE                 => esc_html__('Image Upload', 'event_espresso'),
75
-                Input::TYPE_PASSWORD              => esc_html__('Password', 'event_espresso'),
76
-                Input::TYPE_PASSWORD_CONFIRMATION => esc_html__('Password Confirmation', 'event_espresso'),
77
-                Input::TYPE_RADIO                 => esc_html__('Radio Button', 'event_espresso'),
78
-                Input::TYPE_URL                   => esc_html__('URL', 'event_espresso'),
79
-            ]
80
-        );
81
-    }
82
-
83
-
84
-    /**
85
-     * @param bool $constants_only
86
-     * @return array
87
-     */
88
-    public function validTypeOptions(bool $constants_only = false): array
89
-    {
90
-        return $constants_only
91
-            ? array_keys($this->valid_type_options)
92
-            : $this->valid_type_options;
93
-    }
8
+	/**
9
+	 * indicates that the HTML input type is 'checkbox'
10
+	 */
11
+	public const TYPE_CHECKBOX = 'checkbox';
12
+
13
+	/**
14
+	 * indicates that the HTML input type is 'multi checkbox'
15
+	 */
16
+	public const TYPE_CHECKBOX_MULTI = 'checkbox-multi';
17
+
18
+	/**
19
+	 * indicates that the HTML input type is 'color'
20
+	 */
21
+	public const TYPE_COLOR = 'color';
22
+
23
+	/**
24
+	 * indicates that the HTML input type is 'file'
25
+	 */
26
+	public const TYPE_FILE = 'file';
27
+
28
+	/**
29
+	 * indicates that the HTML input type is 'hidden'
30
+	 */
31
+	public const TYPE_HIDDEN = 'hidden';
32
+
33
+	/**
34
+	 * indicates that the HTML input type is 'image'
35
+	 */
36
+	public const TYPE_IMAGE = 'image';
37
+
38
+	/**
39
+	 * indicates that the HTML input type is 'password'
40
+	 */
41
+	public const TYPE_PASSWORD = 'password';
42
+
43
+	/**
44
+	 * indicates that the input is used to confirm a password
45
+	 */
46
+	public const TYPE_PASSWORD_CONFIRMATION = 'password-confirmation';
47
+
48
+	/**
49
+	 * indicates that the HTML input type is 'radio'
50
+	 */
51
+	public const TYPE_RADIO = 'radio';
52
+
53
+	/**
54
+	 * indicates that the HTML input type is 'url'
55
+	 */
56
+	public const TYPE_URL = 'url';
57
+
58
+	/**
59
+	 * @var array
60
+	 */
61
+	private $valid_type_options;
62
+
63
+
64
+	public function __construct()
65
+	{
66
+		$this->valid_type_options = apply_filters(
67
+			'FHEE__EventEspresso_core_services_form_meta_inputs_Input__valid_type_options',
68
+			[
69
+				Input::TYPE_CHECKBOX              => esc_html__('Checkbox', 'event_espresso'),
70
+				Input::TYPE_CHECKBOX_MULTI        => esc_html__('Multi Checkbox', 'event_espresso'),
71
+				Input::TYPE_COLOR                 => esc_html__('Color Picker', 'event_espresso'),
72
+				Input::TYPE_FILE                  => esc_html__('File Upload', 'event_espresso'),
73
+				Input::TYPE_HIDDEN                => esc_html__('Hidden', 'event_espresso'),
74
+				Input::TYPE_IMAGE                 => esc_html__('Image Upload', 'event_espresso'),
75
+				Input::TYPE_PASSWORD              => esc_html__('Password', 'event_espresso'),
76
+				Input::TYPE_PASSWORD_CONFIRMATION => esc_html__('Password Confirmation', 'event_espresso'),
77
+				Input::TYPE_RADIO                 => esc_html__('Radio Button', 'event_espresso'),
78
+				Input::TYPE_URL                   => esc_html__('URL', 'event_espresso'),
79
+			]
80
+		);
81
+	}
82
+
83
+
84
+	/**
85
+	 * @param bool $constants_only
86
+	 * @return array
87
+	 */
88
+	public function validTypeOptions(bool $constants_only = false): array
89
+	{
90
+		return $constants_only
91
+			? array_keys($this->valid_type_options)
92
+			: $this->valid_type_options;
93
+	}
94 94
 }
Please login to merge, or discard this patch.
core/services/progress_steps/ProgressStepManager.php 2 patches
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -75,11 +75,11 @@  discard block
 block discarded – undo
75 75
         $this->setDisplayStrategy($display_strategy_name);
76 76
         $this->setDefaultStep($default_step);
77 77
         $this->setFormStepUrlKey($form_step_url_key);
78
-        if (! $collection instanceof CollectionInterface) {
78
+        if ( ! $collection instanceof CollectionInterface) {
79 79
             $collection = new Collection('\EventEspresso\core\services\progress_steps\ProgressStepInterface');
80 80
         }
81 81
         $this->collection = $collection;
82
-        if (! $request instanceof RequestInterface) {
82
+        if ( ! $request instanceof RequestInterface) {
83 83
             /** @var RequestInterface $request */
84 84
             $request = LoaderFactory::getLoader()->getShared('EventEspresso\core\services\request\Request');
85 85
         }
@@ -94,23 +94,23 @@  discard block
 block discarded – undo
94 94
      */
95 95
     protected function setDisplayStrategy($display_strategy_name = 'number_bubbles')
96 96
     {
97
-        if (! is_string($display_strategy_name)) {
97
+        if ( ! is_string($display_strategy_name)) {
98 98
             throw new InvalidDataTypeException('$display_strategy_name', $display_strategy_name, 'string');
99 99
         }
100 100
         // build up FQCN from incoming display strategy folder name
101 101
         $display_strategy_class = 'EventEspresso\core\services\progress_steps\display_strategies\\';
102
-        $display_strategy_class .= $display_strategy_name . '\\';
102
+        $display_strategy_class .= $display_strategy_name.'\\';
103 103
         $display_strategy_class .= str_replace(' ', '', ucwords(str_replace('_', ' ', $display_strategy_name)));
104 104
         $display_strategy_class .= 'ProgressStepsDisplay';
105 105
         $display_strategy_class = apply_filters(
106 106
             'FHEE__ProgressStepManager__setDisplayStrategy__display_strategy_class',
107 107
             $display_strategy_class
108 108
         );
109
-        if (! class_exists($display_strategy_class)) {
109
+        if ( ! class_exists($display_strategy_class)) {
110 110
             throw new InvalidClassException($display_strategy_class);
111 111
         }
112 112
         $display_strategy = new $display_strategy_class();
113
-        if (! $display_strategy instanceof ProgressStepsDisplayInterface) {
113
+        if ( ! $display_strategy instanceof ProgressStepsDisplayInterface) {
114 114
             throw new InvalidClassException(
115 115
                 $display_strategy_class,
116 116
                 sprintf(
@@ -130,7 +130,7 @@  discard block
 block discarded – undo
130 130
      */
131 131
     public function setDefaultStep($default_step)
132 132
     {
133
-        if (! is_string($default_step)) {
133
+        if ( ! is_string($default_step)) {
134 134
             throw new InvalidDataTypeException('$default_step', $default_step, 'string');
135 135
         }
136 136
         $this->default_step = $default_step;
@@ -143,7 +143,7 @@  discard block
 block discarded – undo
143 143
      */
144 144
     public function setFormStepUrlKey($form_step_url_key = 'ee-form-step')
145 145
     {
146
-        if (! is_string($form_step_url_key)) {
146
+        if ( ! is_string($form_step_url_key)) {
147 147
             throw new InvalidDataTypeException('$form_step_key', $form_step_url_key, 'string');
148 148
         }
149 149
         $this->form_step_url_key = ! empty($form_step_url_key) ? $form_step_url_key : 'ee-form-step';
@@ -163,7 +163,7 @@  discard block
 block discarded – undo
163 163
         // grab the step previously known as current, in case we need to revert
164 164
         $current_current_step = $this->collection->current();
165 165
         // verify that requested step exists
166
-        if (! $this->collection->has($step)) {
166
+        if ( ! $this->collection->has($step)) {
167 167
             throw new InvalidIdentifierException($step, $this->default_step);
168 168
         }
169 169
         if ($this->collection->setCurrent($step)) {
Please login to merge, or discard this patch.
Indentation   +221 added lines, -221 removed lines patch added patch discarded remove patch
@@ -26,225 +26,225 @@
 block discarded – undo
26 26
  */
27 27
 class ProgressStepManager
28 28
 {
29
-    /**
30
-     * @var ProgressStepInterface[]
31
-     */
32
-    private $collection;
33
-
34
-    /**
35
-     * @var string
36
-     */
37
-    private $default_step;
38
-
39
-    /**
40
-     * the key used for the URL param that denotes the current form step
41
-     * defaults to 'ee-form-step'
42
-     *
43
-     * @var string
44
-     */
45
-    private $form_step_url_key = '';
46
-
47
-    /**
48
-     * @var ProgressStepsDisplayInterface
49
-     */
50
-    private $display_strategy;
51
-
52
-    /**
53
-     * @var RequestInterface
54
-     */
55
-    private $request;
56
-
57
-
58
-    /**
59
-     * ProgressStepManager constructor
60
-     *
61
-     * @param string              $display_strategy_name
62
-     * @param string              $default_step
63
-     * @param string              $form_step_url_key
64
-     * @param CollectionInterface $collection
65
-     * @param RequestInterface    $request
66
-     */
67
-    public function __construct(
68
-        $display_strategy_name = 'number_bubbles',
69
-        $default_step = '',
70
-        $form_step_url_key = '',
71
-        CollectionInterface $collection = null,
72
-        RequestInterface $request = null
73
-    ) {
74
-        $this->setDisplayStrategy($display_strategy_name);
75
-        $this->setDefaultStep($default_step);
76
-        $this->setFormStepUrlKey($form_step_url_key);
77
-        if (! $collection instanceof CollectionInterface) {
78
-            $collection = new Collection('\EventEspresso\core\services\progress_steps\ProgressStepInterface');
79
-        }
80
-        $this->collection = $collection;
81
-        if (! $request instanceof RequestInterface) {
82
-            /** @var RequestInterface $request */
83
-            $request = LoaderFactory::getLoader()->getShared('EventEspresso\core\services\request\Request');
84
-        }
85
-        $this->request = $request;
86
-    }
87
-
88
-
89
-    /**
90
-     * @param string $display_strategy_name
91
-     * @throws InvalidDataTypeException
92
-     * @throws InvalidClassException
93
-     */
94
-    protected function setDisplayStrategy($display_strategy_name = 'number_bubbles')
95
-    {
96
-        if (! is_string($display_strategy_name)) {
97
-            throw new InvalidDataTypeException('$display_strategy_name', $display_strategy_name, 'string');
98
-        }
99
-        // build up FQCN from incoming display strategy folder name
100
-        $display_strategy_class = 'EventEspresso\core\services\progress_steps\display_strategies\\';
101
-        $display_strategy_class .= $display_strategy_name . '\\';
102
-        $display_strategy_class .= str_replace(' ', '', ucwords(str_replace('_', ' ', $display_strategy_name)));
103
-        $display_strategy_class .= 'ProgressStepsDisplay';
104
-        $display_strategy_class = apply_filters(
105
-            'FHEE__ProgressStepManager__setDisplayStrategy__display_strategy_class',
106
-            $display_strategy_class
107
-        );
108
-        if (! class_exists($display_strategy_class)) {
109
-            throw new InvalidClassException($display_strategy_class);
110
-        }
111
-        $display_strategy = new $display_strategy_class();
112
-        if (! $display_strategy instanceof ProgressStepsDisplayInterface) {
113
-            throw new InvalidClassException(
114
-                $display_strategy_class,
115
-                sprintf(
116
-                    esc_html__('The "%1$s" Class needs to be an implementation of the "%1$s" Interface.', 'event_espresso'),
117
-                    $display_strategy_class,
118
-                    '\EventEspresso\core\services\progress_steps\display_strategies\ProgressStepsDisplayInterface'
119
-                )
120
-            );
121
-        }
122
-        $this->display_strategy = $display_strategy;
123
-    }
124
-
125
-
126
-    /**
127
-     * @param string $default_step
128
-     * @throws InvalidDataTypeException
129
-     */
130
-    public function setDefaultStep($default_step)
131
-    {
132
-        if (! is_string($default_step)) {
133
-            throw new InvalidDataTypeException('$default_step', $default_step, 'string');
134
-        }
135
-        $this->default_step = $default_step;
136
-    }
137
-
138
-
139
-    /**
140
-     * @param string $form_step_url_key
141
-     * @throws InvalidDataTypeException
142
-     */
143
-    public function setFormStepUrlKey($form_step_url_key = 'ee-form-step')
144
-    {
145
-        if (! is_string($form_step_url_key)) {
146
-            throw new InvalidDataTypeException('$form_step_key', $form_step_url_key, 'string');
147
-        }
148
-        $this->form_step_url_key = ! empty($form_step_url_key) ? $form_step_url_key : 'ee-form-step';
149
-    }
150
-
151
-
152
-    /**
153
-     * @param string $step
154
-     * @throws InvalidIdentifierException
155
-     */
156
-    public function setCurrentStep($step = '')
157
-    {
158
-        // use incoming value if it's set, otherwise use request param if it's set, otherwise use default
159
-        $step = ! empty($step)
160
-            ? $step
161
-            : $this->request->getRequestParam($this->form_step_url_key, $this->default_step);
162
-        // grab the step previously known as current, in case we need to revert
163
-        $current_current_step = $this->collection->current();
164
-        // verify that requested step exists
165
-        if (! $this->collection->has($step)) {
166
-            throw new InvalidIdentifierException($step, $this->default_step);
167
-        }
168
-        if ($this->collection->setCurrent($step)) {
169
-            // if the old boss is the same as the new boss, then nothing changes
170
-            if ($this->collection->current() !== $current_current_step) {
171
-                $current_current_step->setIsCurrent(false);
172
-            }
173
-            $this->collection->current()->setIsCurrent();
174
-        } else {
175
-            $this->collection->setCurrent($current_current_step->id());
176
-            $current_current_step->setIsCurrent(true);
177
-        }
178
-    }
179
-
180
-
181
-    /**
182
-     * setPreviousStepsCompleted
183
-     */
184
-    public function setPreviousStepsCompleted()
185
-    {
186
-        $current_current_step = $this->collection->current();
187
-        $this->collection->rewind();
188
-        while ($this->collection->valid()) {
189
-            if ($this->collection->current() === $current_current_step) {
190
-                break;
191
-            }
192
-            $this->setCurrentStepCompleted();
193
-            $this->collection->next();
194
-        }
195
-        $this->collection->setCurrentUsingObject($current_current_step);
196
-        return false;
197
-    }
198
-
199
-
200
-    /**
201
-     * @return ProgressStepInterface
202
-     */
203
-    public function currentStep()
204
-    {
205
-        return $this->collection->current();
206
-    }
207
-
208
-
209
-    /**
210
-     * @return ProgressStepInterface
211
-     */
212
-    public function nextStep()
213
-    {
214
-        return $this->collection->next();
215
-    }
216
-
217
-
218
-    /**
219
-     * @return void
220
-     */
221
-    public function enqueueStylesAndScripts()
222
-    {
223
-        $this->display_strategy->enqueueStylesAndScripts();
224
-    }
225
-
226
-
227
-    /**
228
-     * echos out HTML
229
-     *
230
-     * @return string
231
-     */
232
-    public function displaySteps()
233
-    {
234
-        return EEH_Template::display_template(
235
-            $this->display_strategy->getTemplate(),
236
-            array('progress_steps' => $this->collection),
237
-            true
238
-        );
239
-    }
240
-
241
-
242
-    /**
243
-     * @param bool $completed
244
-     * @return ProgressStepInterface
245
-     */
246
-    public function setCurrentStepCompleted($completed = true)
247
-    {
248
-        return $this->collection->current()->setIsCompleted($completed);
249
-    }
29
+	/**
30
+	 * @var ProgressStepInterface[]
31
+	 */
32
+	private $collection;
33
+
34
+	/**
35
+	 * @var string
36
+	 */
37
+	private $default_step;
38
+
39
+	/**
40
+	 * the key used for the URL param that denotes the current form step
41
+	 * defaults to 'ee-form-step'
42
+	 *
43
+	 * @var string
44
+	 */
45
+	private $form_step_url_key = '';
46
+
47
+	/**
48
+	 * @var ProgressStepsDisplayInterface
49
+	 */
50
+	private $display_strategy;
51
+
52
+	/**
53
+	 * @var RequestInterface
54
+	 */
55
+	private $request;
56
+
57
+
58
+	/**
59
+	 * ProgressStepManager constructor
60
+	 *
61
+	 * @param string              $display_strategy_name
62
+	 * @param string              $default_step
63
+	 * @param string              $form_step_url_key
64
+	 * @param CollectionInterface $collection
65
+	 * @param RequestInterface    $request
66
+	 */
67
+	public function __construct(
68
+		$display_strategy_name = 'number_bubbles',
69
+		$default_step = '',
70
+		$form_step_url_key = '',
71
+		CollectionInterface $collection = null,
72
+		RequestInterface $request = null
73
+	) {
74
+		$this->setDisplayStrategy($display_strategy_name);
75
+		$this->setDefaultStep($default_step);
76
+		$this->setFormStepUrlKey($form_step_url_key);
77
+		if (! $collection instanceof CollectionInterface) {
78
+			$collection = new Collection('\EventEspresso\core\services\progress_steps\ProgressStepInterface');
79
+		}
80
+		$this->collection = $collection;
81
+		if (! $request instanceof RequestInterface) {
82
+			/** @var RequestInterface $request */
83
+			$request = LoaderFactory::getLoader()->getShared('EventEspresso\core\services\request\Request');
84
+		}
85
+		$this->request = $request;
86
+	}
87
+
88
+
89
+	/**
90
+	 * @param string $display_strategy_name
91
+	 * @throws InvalidDataTypeException
92
+	 * @throws InvalidClassException
93
+	 */
94
+	protected function setDisplayStrategy($display_strategy_name = 'number_bubbles')
95
+	{
96
+		if (! is_string($display_strategy_name)) {
97
+			throw new InvalidDataTypeException('$display_strategy_name', $display_strategy_name, 'string');
98
+		}
99
+		// build up FQCN from incoming display strategy folder name
100
+		$display_strategy_class = 'EventEspresso\core\services\progress_steps\display_strategies\\';
101
+		$display_strategy_class .= $display_strategy_name . '\\';
102
+		$display_strategy_class .= str_replace(' ', '', ucwords(str_replace('_', ' ', $display_strategy_name)));
103
+		$display_strategy_class .= 'ProgressStepsDisplay';
104
+		$display_strategy_class = apply_filters(
105
+			'FHEE__ProgressStepManager__setDisplayStrategy__display_strategy_class',
106
+			$display_strategy_class
107
+		);
108
+		if (! class_exists($display_strategy_class)) {
109
+			throw new InvalidClassException($display_strategy_class);
110
+		}
111
+		$display_strategy = new $display_strategy_class();
112
+		if (! $display_strategy instanceof ProgressStepsDisplayInterface) {
113
+			throw new InvalidClassException(
114
+				$display_strategy_class,
115
+				sprintf(
116
+					esc_html__('The "%1$s" Class needs to be an implementation of the "%1$s" Interface.', 'event_espresso'),
117
+					$display_strategy_class,
118
+					'\EventEspresso\core\services\progress_steps\display_strategies\ProgressStepsDisplayInterface'
119
+				)
120
+			);
121
+		}
122
+		$this->display_strategy = $display_strategy;
123
+	}
124
+
125
+
126
+	/**
127
+	 * @param string $default_step
128
+	 * @throws InvalidDataTypeException
129
+	 */
130
+	public function setDefaultStep($default_step)
131
+	{
132
+		if (! is_string($default_step)) {
133
+			throw new InvalidDataTypeException('$default_step', $default_step, 'string');
134
+		}
135
+		$this->default_step = $default_step;
136
+	}
137
+
138
+
139
+	/**
140
+	 * @param string $form_step_url_key
141
+	 * @throws InvalidDataTypeException
142
+	 */
143
+	public function setFormStepUrlKey($form_step_url_key = 'ee-form-step')
144
+	{
145
+		if (! is_string($form_step_url_key)) {
146
+			throw new InvalidDataTypeException('$form_step_key', $form_step_url_key, 'string');
147
+		}
148
+		$this->form_step_url_key = ! empty($form_step_url_key) ? $form_step_url_key : 'ee-form-step';
149
+	}
150
+
151
+
152
+	/**
153
+	 * @param string $step
154
+	 * @throws InvalidIdentifierException
155
+	 */
156
+	public function setCurrentStep($step = '')
157
+	{
158
+		// use incoming value if it's set, otherwise use request param if it's set, otherwise use default
159
+		$step = ! empty($step)
160
+			? $step
161
+			: $this->request->getRequestParam($this->form_step_url_key, $this->default_step);
162
+		// grab the step previously known as current, in case we need to revert
163
+		$current_current_step = $this->collection->current();
164
+		// verify that requested step exists
165
+		if (! $this->collection->has($step)) {
166
+			throw new InvalidIdentifierException($step, $this->default_step);
167
+		}
168
+		if ($this->collection->setCurrent($step)) {
169
+			// if the old boss is the same as the new boss, then nothing changes
170
+			if ($this->collection->current() !== $current_current_step) {
171
+				$current_current_step->setIsCurrent(false);
172
+			}
173
+			$this->collection->current()->setIsCurrent();
174
+		} else {
175
+			$this->collection->setCurrent($current_current_step->id());
176
+			$current_current_step->setIsCurrent(true);
177
+		}
178
+	}
179
+
180
+
181
+	/**
182
+	 * setPreviousStepsCompleted
183
+	 */
184
+	public function setPreviousStepsCompleted()
185
+	{
186
+		$current_current_step = $this->collection->current();
187
+		$this->collection->rewind();
188
+		while ($this->collection->valid()) {
189
+			if ($this->collection->current() === $current_current_step) {
190
+				break;
191
+			}
192
+			$this->setCurrentStepCompleted();
193
+			$this->collection->next();
194
+		}
195
+		$this->collection->setCurrentUsingObject($current_current_step);
196
+		return false;
197
+	}
198
+
199
+
200
+	/**
201
+	 * @return ProgressStepInterface
202
+	 */
203
+	public function currentStep()
204
+	{
205
+		return $this->collection->current();
206
+	}
207
+
208
+
209
+	/**
210
+	 * @return ProgressStepInterface
211
+	 */
212
+	public function nextStep()
213
+	{
214
+		return $this->collection->next();
215
+	}
216
+
217
+
218
+	/**
219
+	 * @return void
220
+	 */
221
+	public function enqueueStylesAndScripts()
222
+	{
223
+		$this->display_strategy->enqueueStylesAndScripts();
224
+	}
225
+
226
+
227
+	/**
228
+	 * echos out HTML
229
+	 *
230
+	 * @return string
231
+	 */
232
+	public function displaySteps()
233
+	{
234
+		return EEH_Template::display_template(
235
+			$this->display_strategy->getTemplate(),
236
+			array('progress_steps' => $this->collection),
237
+			true
238
+		);
239
+	}
240
+
241
+
242
+	/**
243
+	 * @param bool $completed
244
+	 * @return ProgressStepInterface
245
+	 */
246
+	public function setCurrentStepCompleted($completed = true)
247
+	{
248
+		return $this->collection->current()->setIsCompleted($completed);
249
+	}
250 250
 }
Please login to merge, or discard this patch.
core/libraries/form_sections/form_handlers/SequentialStepFormManager.php 2 patches
Spacing   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -140,7 +140,7 @@  discard block
 block discarded – undo
140 140
      */
141 141
     protected function setBaseUrl($base_url)
142 142
     {
143
-        if (! is_string($base_url)) {
143
+        if ( ! is_string($base_url)) {
144 144
             throw new InvalidDataTypeException('$base_url', $base_url, 'string');
145 145
         }
146 146
         if (empty($base_url)) {
@@ -171,7 +171,7 @@  discard block
 block discarded – undo
171 171
      */
172 172
     public function setFormStepUrlKey($form_step_url_key = 'ee-form-step')
173 173
     {
174
-        if (! is_string($form_step_url_key)) {
174
+        if ( ! is_string($form_step_url_key)) {
175 175
             throw new InvalidDataTypeException('$form_step_key', $form_step_url_key, 'string');
176 176
         }
177 177
         $this->form_step_url_key = ! empty($form_step_url_key) ? $form_step_url_key : 'ee-form-step';
@@ -193,7 +193,7 @@  discard block
 block discarded – undo
193 193
      */
194 194
     protected function setDefaultFormStep($default_form_step)
195 195
     {
196
-        if (! is_string($default_form_step)) {
196
+        if ( ! is_string($default_form_step)) {
197 197
             throw new InvalidDataTypeException('$default_form_step', $default_form_step, 'string');
198 198
         }
199 199
         $this->default_form_step = $default_form_step;
@@ -208,7 +208,7 @@  discard block
 block discarded – undo
208 208
     protected function setCurrentStepFromRequest()
209 209
     {
210 210
         $current_step_slug = $this->request()->getRequestParam($this->formStepUrlKey(), $this->defaultFormStep());
211
-        if (! $this->form_steps->setCurrent($current_step_slug)) {
211
+        if ( ! $this->form_steps->setCurrent($current_step_slug)) {
212 212
             throw new InvalidIdentifierException(
213 213
                 $current_step_slug,
214 214
                 $this->defaultFormStep(),
@@ -227,7 +227,7 @@  discard block
 block discarded – undo
227 227
      */
228 228
     public function getCurrentStep()
229 229
     {
230
-        if (! $this->form_steps->current() instanceof SequentialStepForm) {
230
+        if ( ! $this->form_steps->current() instanceof SequentialStepForm) {
231 231
             throw new InvalidFormHandlerException($this->form_steps->current());
232 232
         }
233 233
         return $this->form_steps->current();
@@ -240,7 +240,7 @@  discard block
 block discarded – undo
240 240
      */
241 241
     public function formAction()
242 242
     {
243
-        if (! is_string($this->form_action) || empty($this->form_action)) {
243
+        if ( ! is_string($this->form_action) || empty($this->form_action)) {
244 244
             $this->form_action = $this->baseUrl();
245 245
         }
246 246
         return $this->form_action;
@@ -253,7 +253,7 @@  discard block
 block discarded – undo
253 253
      */
254 254
     public function setFormAction($form_action)
255 255
     {
256
-        if (! is_string($form_action)) {
256
+        if ( ! is_string($form_action)) {
257 257
             throw new InvalidDataTypeException('$form_action', $form_action, 'string');
258 258
         }
259 259
         $this->form_action = $form_action;
@@ -267,7 +267,7 @@  discard block
 block discarded – undo
267 267
      */
268 268
     public function addFormActionArgs($form_action_args = array())
269 269
     {
270
-        if (! is_array($form_action_args)) {
270
+        if ( ! is_array($form_action_args)) {
271 271
             throw new InvalidDataTypeException('$form_action_args', $form_action_args, 'array');
272 272
         }
273 273
         $form_action_args = ! empty($form_action_args)
@@ -332,7 +332,7 @@  discard block
 block discarded – undo
332 332
     protected function getProgressStepsCollection()
333 333
     {
334 334
         static $collection = null;
335
-        if (! $collection instanceof ProgressStepCollection) {
335
+        if ( ! $collection instanceof ProgressStepCollection) {
336 336
             $collection = new ProgressStepCollection();
337 337
         }
338 338
         return $collection;
@@ -354,7 +354,7 @@  discard block
 block discarded – undo
354 354
         /** @var SequentialStepForm $form_step */
355 355
         foreach ($this->form_steps as $form_step) {
356 356
             // is this step active ?
357
-            if (! $form_step->initialize()) {
357
+            if ( ! $form_step->initialize()) {
358 358
                 continue;
359 359
             }
360 360
             $progress_steps_collection->add(
@@ -423,7 +423,7 @@  discard block
 block discarded – undo
423 423
     {
424 424
         $form_step = $this->buildCurrentStepForm();
425 425
         // no displayable content ? then skip straight to processing
426
-        if (! $form_step->displayable()) {
426
+        if ( ! $form_step->displayable()) {
427 427
             $this->addFormActionArgs();
428 428
             $form_step->setFormAction($this->formAction());
429 429
             wp_safe_redirect($form_step->formAction());
@@ -499,7 +499,7 @@  discard block
 block discarded – undo
499 499
     public function displayProgressSteps($return_as_string = true)
500 500
     {
501 501
         $form_step = $this->getCurrentStep();
502
-        if (! $form_step->displayable()) {
502
+        if ( ! $form_step->displayable()) {
503 503
             return '';
504 504
         }
505 505
         $progress_steps = apply_filters(
Please login to merge, or discard this patch.
Indentation   +579 added lines, -579 removed lines patch added patch discarded remove patch
@@ -30,583 +30,583 @@
 block discarded – undo
30 30
  */
31 31
 abstract class SequentialStepFormManager
32 32
 {
33
-    /**
34
-     * a simplified URL with no form related parameters
35
-     * that will be used to build the form's redirect URLs
36
-     *
37
-     * @var string $base_url
38
-     */
39
-    private $base_url = '';
40
-
41
-    /**
42
-     * the key used for the URL param that denotes the current form step
43
-     * defaults to 'ee-form-step'
44
-     *
45
-     * @var string $form_step_url_key
46
-     */
47
-    private $form_step_url_key = '';
48
-
49
-    /**
50
-     * @var string $default_form_step
51
-     */
52
-    private $default_form_step = '';
53
-
54
-    /**
55
-     * @var string $form_action
56
-     */
57
-    private $form_action;
58
-
59
-    /**
60
-     * value of one of the string constant above
61
-     *
62
-     * @var string $form_config
63
-     */
64
-    private $form_config;
65
-
66
-    /**
67
-     * @var string $progress_step_style
68
-     */
69
-    private $progress_step_style = '';
70
-
71
-    /**
72
-     * @var RequestInterface $request
73
-     */
74
-    private $request;
75
-
76
-    /**
77
-     * @var Collection $form_steps
78
-     */
79
-    protected $form_steps;
80
-
81
-    /**
82
-     * @var ProgressStepManager $progress_step_manager
83
-     */
84
-    protected $progress_step_manager;
85
-
86
-
87
-    /**
88
-     * @return Collection|null
89
-     */
90
-    abstract protected function getFormStepsCollection();
91
-
92
-    // phpcs:disable PEAR.Functions.ValidDefaultValue.NotAtEnd
93
-    /**
94
-     * StepsManager constructor
95
-     *
96
-     * @param string                           $base_url
97
-     * @param string                           $default_form_step
98
-     * @param string                           $form_action
99
-     * @param string                           $form_config
100
-     * @param EE_Request|RequestInterface|null $request
101
-     * @param string                           $progress_step_style
102
-     * @throws InvalidDataTypeException
103
-     * @throws InvalidArgumentException
104
-     */
105
-    public function __construct(
106
-        $base_url,
107
-        $default_form_step,
108
-        $form_action = '',
109
-        $form_config = FormHandler::ADD_FORM_TAGS_AND_SUBMIT,
110
-        $progress_step_style = 'number_bubbles',
111
-        $request = null
112
-    ) {
113
-        $this->setBaseUrl($base_url);
114
-        $this->setDefaultFormStep($default_form_step);
115
-        $this->setFormAction($form_action);
116
-        $this->setFormConfig($form_config);
117
-        $this->setProgressStepStyle($progress_step_style);
118
-        $this->request = $request instanceof RequestInterface
119
-            ? $request
120
-            : LoaderFactory::getLoader()->getShared('EventEspresso\core\services\request\RequestInterface');
121
-    }
122
-
123
-
124
-    /**
125
-     * @return string
126
-     * @throws InvalidFormHandlerException
127
-     */
128
-    public function baseUrl()
129
-    {
130
-        if (strpos($this->base_url, $this->getCurrentStep()->slug()) === false) {
131
-            add_query_arg(
132
-                array($this->form_step_url_key => $this->getCurrentStep()->slug()),
133
-                $this->base_url
134
-            );
135
-        }
136
-        return $this->base_url;
137
-    }
138
-
139
-
140
-    /**
141
-     * @param string $base_url
142
-     * @throws InvalidDataTypeException
143
-     * @throws InvalidArgumentException
144
-     */
145
-    protected function setBaseUrl($base_url)
146
-    {
147
-        if (! is_string($base_url)) {
148
-            throw new InvalidDataTypeException('$base_url', $base_url, 'string');
149
-        }
150
-        if (empty($base_url)) {
151
-            throw new InvalidArgumentException(
152
-                esc_html__('The base URL can not be an empty string.', 'event_espresso')
153
-            );
154
-        }
155
-        $this->base_url = $base_url;
156
-    }
157
-
158
-
159
-    /**
160
-     * @return string
161
-     * @throws InvalidDataTypeException
162
-     */
163
-    public function formStepUrlKey()
164
-    {
165
-        if (empty($this->form_step_url_key)) {
166
-            $this->setFormStepUrlKey();
167
-        }
168
-        return $this->form_step_url_key;
169
-    }
170
-
171
-
172
-    /**
173
-     * @param string $form_step_url_key
174
-     * @throws InvalidDataTypeException
175
-     */
176
-    public function setFormStepUrlKey($form_step_url_key = 'ee-form-step')
177
-    {
178
-        if (! is_string($form_step_url_key)) {
179
-            throw new InvalidDataTypeException('$form_step_key', $form_step_url_key, 'string');
180
-        }
181
-        $this->form_step_url_key = ! empty($form_step_url_key) ? $form_step_url_key : 'ee-form-step';
182
-    }
183
-
184
-
185
-    /**
186
-     * @return string
187
-     */
188
-    public function defaultFormStep()
189
-    {
190
-        return $this->default_form_step;
191
-    }
192
-
193
-
194
-    /**
195
-     * @param $default_form_step
196
-     * @throws InvalidDataTypeException
197
-     */
198
-    protected function setDefaultFormStep($default_form_step)
199
-    {
200
-        if (! is_string($default_form_step)) {
201
-            throw new InvalidDataTypeException('$default_form_step', $default_form_step, 'string');
202
-        }
203
-        $this->default_form_step = $default_form_step;
204
-    }
205
-
206
-
207
-    /**
208
-     * @return void
209
-     * @throws InvalidIdentifierException
210
-     * @throws InvalidDataTypeException
211
-     */
212
-    protected function setCurrentStepFromRequest()
213
-    {
214
-        $current_step_slug = $this->request()->getRequestParam($this->formStepUrlKey(), $this->defaultFormStep());
215
-        if (! $this->form_steps->setCurrent($current_step_slug)) {
216
-            throw new InvalidIdentifierException(
217
-                $current_step_slug,
218
-                $this->defaultFormStep(),
219
-                sprintf(
220
-                    esc_html__('The "%1$s" form step could not be set.', 'event_espresso'),
221
-                    $current_step_slug
222
-                )
223
-            );
224
-        }
225
-    }
226
-
227
-
228
-    /**
229
-     * @return SequentialStepFormInterface|object
230
-     * @throws InvalidFormHandlerException
231
-     */
232
-    public function getCurrentStep()
233
-    {
234
-        if (! $this->form_steps->current() instanceof SequentialStepForm) {
235
-            throw new InvalidFormHandlerException($this->form_steps->current());
236
-        }
237
-        return $this->form_steps->current();
238
-    }
239
-
240
-
241
-    /**
242
-     * @return string
243
-     * @throws InvalidFormHandlerException
244
-     */
245
-    public function formAction()
246
-    {
247
-        if (! is_string($this->form_action) || empty($this->form_action)) {
248
-            $this->form_action = $this->baseUrl();
249
-        }
250
-        return $this->form_action;
251
-    }
252
-
253
-
254
-    /**
255
-     * @param string $form_action
256
-     * @throws InvalidDataTypeException
257
-     */
258
-    public function setFormAction($form_action)
259
-    {
260
-        if (! is_string($form_action)) {
261
-            throw new InvalidDataTypeException('$form_action', $form_action, 'string');
262
-        }
263
-        $this->form_action = $form_action;
264
-    }
265
-
266
-
267
-    /**
268
-     * @param array $form_action_args
269
-     * @throws InvalidDataTypeException
270
-     * @throws InvalidFormHandlerException
271
-     */
272
-    public function addFormActionArgs($form_action_args = array())
273
-    {
274
-        if (! is_array($form_action_args)) {
275
-            throw new InvalidDataTypeException('$form_action_args', $form_action_args, 'array');
276
-        }
277
-        $form_action_args = ! empty($form_action_args)
278
-            ? $form_action_args
279
-            : array($this->formStepUrlKey() => $this->form_steps->current()->slug());
280
-        $this->getCurrentStep()->setFormAction(
281
-            add_query_arg($form_action_args, $this->formAction())
282
-        );
283
-        $this->form_action = $this->getCurrentStep()->formAction();
284
-    }
285
-
286
-
287
-    /**
288
-     * @return string
289
-     */
290
-    public function formConfig()
291
-    {
292
-        return $this->form_config;
293
-    }
294
-
295
-
296
-    /**
297
-     * @param string $form_config
298
-     */
299
-    public function setFormConfig($form_config)
300
-    {
301
-        $this->form_config = $form_config;
302
-    }
303
-
304
-
305
-    /**
306
-     * @return string
307
-     */
308
-    public function progressStepStyle()
309
-    {
310
-        return $this->progress_step_style;
311
-    }
312
-
313
-
314
-    /**
315
-     * @param string $progress_step_style
316
-     */
317
-    public function setProgressStepStyle($progress_step_style)
318
-    {
319
-        $this->progress_step_style = $progress_step_style;
320
-    }
321
-
322
-
323
-    /**
324
-     * @return RequestInterface
325
-     */
326
-    public function request()
327
-    {
328
-        return $this->request;
329
-    }
330
-
331
-
332
-    /**
333
-     * @return Collection|null
334
-     * @throws InvalidInterfaceException
335
-     */
336
-    protected function getProgressStepsCollection()
337
-    {
338
-        static $collection = null;
339
-        if (! $collection instanceof ProgressStepCollection) {
340
-            $collection = new ProgressStepCollection();
341
-        }
342
-        return $collection;
343
-    }
344
-
345
-
346
-    /**
347
-     * @param Collection $progress_steps_collection
348
-     * @return ProgressStepManager
349
-     * @throws InvalidInterfaceException
350
-     * @throws InvalidClassException
351
-     * @throws InvalidDataTypeException
352
-     * @throws InvalidEntityException
353
-     * @throws InvalidFormHandlerException
354
-     */
355
-    protected function generateProgressSteps(Collection $progress_steps_collection)
356
-    {
357
-        $current_step = $this->getCurrentStep();
358
-        /** @var SequentialStepForm $form_step */
359
-        foreach ($this->form_steps as $form_step) {
360
-            // is this step active ?
361
-            if (! $form_step->initialize()) {
362
-                continue;
363
-            }
364
-            $progress_steps_collection->add(
365
-                new ProgressStep(
366
-                    $form_step->order(),
367
-                    $form_step->slug(),
368
-                    $form_step->slug(),
369
-                    $form_step->formName()
370
-                ),
371
-                $form_step->slug()
372
-            );
373
-        }
374
-        // set collection pointer back to current step
375
-        $this->form_steps->setCurrentUsingObject($current_step);
376
-        return new ProgressStepManager(
377
-            $this->progressStepStyle(),
378
-            $this->defaultFormStep(),
379
-            $this->formStepUrlKey(),
380
-            $progress_steps_collection
381
-        );
382
-    }
383
-
384
-
385
-    /**
386
-     * @throws InvalidClassException
387
-     * @throws InvalidDataTypeException
388
-     * @throws InvalidEntityException
389
-     * @throws InvalidIdentifierException
390
-     * @throws InvalidInterfaceException
391
-     * @throws InvalidArgumentException
392
-     * @throws InvalidFormHandlerException
393
-     */
394
-    public function buildForm()
395
-    {
396
-        $this->buildCurrentStepFormForDisplay();
397
-    }
398
-
399
-
400
-    /**
401
-     * @param array $form_data
402
-     * @throws InvalidArgumentException
403
-     * @throws InvalidClassException
404
-     * @throws InvalidDataTypeException
405
-     * @throws InvalidEntityException
406
-     * @throws InvalidFormHandlerException
407
-     * @throws InvalidIdentifierException
408
-     * @throws InvalidInterfaceException
409
-     */
410
-    public function processForm($form_data = array())
411
-    {
412
-        $this->buildCurrentStepFormForProcessing();
413
-        $this->processCurrentStepForm($form_data);
414
-    }
415
-
416
-
417
-    /**
418
-     * @throws InvalidClassException
419
-     * @throws InvalidDataTypeException
420
-     * @throws InvalidEntityException
421
-     * @throws InvalidInterfaceException
422
-     * @throws InvalidIdentifierException
423
-     * @throws InvalidArgumentException
424
-     * @throws InvalidFormHandlerException
425
-     */
426
-    public function buildCurrentStepFormForDisplay()
427
-    {
428
-        $form_step = $this->buildCurrentStepForm();
429
-        // no displayable content ? then skip straight to processing
430
-        if (! $form_step->displayable()) {
431
-            $this->addFormActionArgs();
432
-            $form_step->setFormAction($this->formAction());
433
-            wp_safe_redirect($form_step->formAction());
434
-        }
435
-    }
436
-
437
-
438
-    /**
439
-     * @throws InvalidClassException
440
-     * @throws InvalidDataTypeException
441
-     * @throws InvalidEntityException
442
-     * @throws InvalidInterfaceException
443
-     * @throws InvalidIdentifierException
444
-     * @throws InvalidArgumentException
445
-     * @throws InvalidFormHandlerException
446
-     */
447
-    public function buildCurrentStepFormForProcessing()
448
-    {
449
-        $this->buildCurrentStepForm(false);
450
-    }
451
-
452
-
453
-    /**
454
-     * @param bool $for_display
455
-     * @return SequentialStepFormInterface
456
-     * @throws InvalidArgumentException
457
-     * @throws InvalidClassException
458
-     * @throws InvalidDataTypeException
459
-     * @throws InvalidEntityException
460
-     * @throws InvalidFormHandlerException
461
-     * @throws InvalidIdentifierException
462
-     * @throws InvalidInterfaceException
463
-     */
464
-    private function buildCurrentStepForm($for_display = true)
465
-    {
466
-        $this->form_steps = $this->getFormStepsCollection();
467
-        $this->setCurrentStepFromRequest();
468
-        $form_step = $this->getCurrentStep();
469
-        if ($form_step->submitBtnText() === esc_html__('Submit', 'event_espresso')) {
470
-            $form_step->setSubmitBtnText(esc_html__('Next Step', 'event_espresso'));
471
-        }
472
-        if ($for_display && $form_step->displayable()) {
473
-            $this->progress_step_manager = $this->generateProgressSteps(
474
-                $this->getProgressStepsCollection()
475
-            );
476
-            $this->progress_step_manager->setCurrentStep(
477
-                $form_step->slug()
478
-            );
479
-            // mark all previous progress steps as completed
480
-            $this->progress_step_manager->setPreviousStepsCompleted();
481
-            $this->progress_step_manager->enqueueStylesAndScripts();
482
-            $this->addFormActionArgs();
483
-            $form_step->setFormAction($this->formAction());
484
-        } else {
485
-            $form_step->setRedirectUrl($this->baseUrl());
486
-            $form_step->addRedirectArgs(
487
-                array($this->formStepUrlKey() => $this->form_steps->current()->slug())
488
-            );
489
-        }
490
-        $form_step->generate();
491
-        if ($for_display) {
492
-            $form_step->enqueueStylesAndScripts();
493
-        }
494
-        return $form_step;
495
-    }
496
-
497
-
498
-    /**
499
-     * @param bool $return_as_string
500
-     * @return string
501
-     * @throws InvalidFormHandlerException
502
-     */
503
-    public function displayProgressSteps($return_as_string = true)
504
-    {
505
-        $form_step = $this->getCurrentStep();
506
-        if (! $form_step->displayable()) {
507
-            return '';
508
-        }
509
-        $progress_steps = apply_filters(
510
-            'FHEE__EventEspresso_core_libraries_form_sections_form_handlers_SequentialStepFormManager__displayProgressSteps__before_steps',
511
-            ''
512
-        );
513
-        $progress_steps .= $this->progress_step_manager->displaySteps();
514
-        $progress_steps .= apply_filters(
515
-            'FHEE__EventEspresso_core_libraries_form_sections_form_handlers_SequentialStepFormManager__displayProgressSteps__after_steps',
516
-            ''
517
-        );
518
-        if ($return_as_string) {
519
-            return $progress_steps;
520
-        }
521
-        echo wp_kses($progress_steps, AllowedTags::getWithFormTags());
522
-        return '';
523
-    }
524
-
525
-
526
-    /**
527
-     * @param bool $return_as_string
528
-     * @return string
529
-     * @throws InvalidFormHandlerException
530
-     */
531
-    public function displayCurrentStepForm($return_as_string = true)
532
-    {
533
-        if ($return_as_string) {
534
-            return $this->getCurrentStep()->display();
535
-        }
536
-        echo wp_kses($this->getCurrentStep()->display(), AllowedTags::getWithFormTags());
537
-        return '';
538
-    }
539
-
540
-
541
-    /**
542
-     * @param array $form_data
543
-     * @return void
544
-     * @throws InvalidArgumentException
545
-     * @throws InvalidDataTypeException
546
-     * @throws InvalidFormHandlerException
547
-     */
548
-    public function processCurrentStepForm($form_data = array())
549
-    {
550
-        // grab instance of current step because after calling next() below,
551
-        // any calls to getCurrentStep() will return the "next" step because we advanced
552
-        $current_step = $this->getCurrentStep();
553
-        try {
554
-            // form processing should either throw exceptions or return true
555
-            $current_step->process($form_data);
556
-        } catch (Exception $e) {
557
-            // something went wrong, convert the Exception to an EE_Error
558
-            EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__);
559
-            // prevent redirect to next step or other if exception was thrown
560
-            if (
561
-                $current_step->redirectTo() === SequentialStepForm::REDIRECT_TO_NEXT_STEP
562
-                || $current_step->redirectTo() === SequentialStepForm::REDIRECT_TO_OTHER
563
-            ) {
564
-                $current_step->setRedirectTo(SequentialStepForm::REDIRECT_TO_CURRENT_STEP);
565
-            }
566
-        }
567
-        // save notices to a transient so that when we redirect back
568
-        // to the display portion for this step
569
-        // those notices can be displayed
570
-        EE_Error::get_notices(false, true);
571
-        $this->redirectForm($current_step);
572
-    }
573
-
574
-
575
-    /**
576
-     * handles where to go to next
577
-     *
578
-     * @param SequentialStepFormInterface $current_step
579
-     * @throws InvalidArgumentException
580
-     * @throws InvalidDataTypeException
581
-     * @throws InvalidFormHandlerException
582
-     */
583
-    public function redirectForm(SequentialStepFormInterface $current_step)
584
-    {
585
-        $redirect_step = $current_step;
586
-        switch ($current_step->redirectTo()) {
587
-            case SequentialStepForm::REDIRECT_TO_OTHER:
588
-                // going somewhere else, so just check out now
589
-                wp_safe_redirect($redirect_step->redirectUrl());
590
-                exit();
591
-            case SequentialStepForm::REDIRECT_TO_PREV_STEP:
592
-                $redirect_step = $this->form_steps->previous();
593
-                break;
594
-            case SequentialStepForm::REDIRECT_TO_NEXT_STEP:
595
-                $this->form_steps->next();
596
-                if ($this->form_steps->valid()) {
597
-                    $redirect_step = $this->form_steps->current();
598
-                }
599
-                break;
600
-            case SequentialStepForm::REDIRECT_TO_CURRENT_STEP:
601
-            default:
602
-                // $redirect_step is already set
603
-        }
604
-        $current_step->setRedirectUrl($this->baseUrl());
605
-        $current_step->addRedirectArgs(
606
-            // use the slug for whatever step we are redirecting too
607
-            array($this->formStepUrlKey() => $redirect_step->slug())
608
-        );
609
-        wp_safe_redirect($current_step->redirectUrl());
610
-        exit();
611
-    }
33
+	/**
34
+	 * a simplified URL with no form related parameters
35
+	 * that will be used to build the form's redirect URLs
36
+	 *
37
+	 * @var string $base_url
38
+	 */
39
+	private $base_url = '';
40
+
41
+	/**
42
+	 * the key used for the URL param that denotes the current form step
43
+	 * defaults to 'ee-form-step'
44
+	 *
45
+	 * @var string $form_step_url_key
46
+	 */
47
+	private $form_step_url_key = '';
48
+
49
+	/**
50
+	 * @var string $default_form_step
51
+	 */
52
+	private $default_form_step = '';
53
+
54
+	/**
55
+	 * @var string $form_action
56
+	 */
57
+	private $form_action;
58
+
59
+	/**
60
+	 * value of one of the string constant above
61
+	 *
62
+	 * @var string $form_config
63
+	 */
64
+	private $form_config;
65
+
66
+	/**
67
+	 * @var string $progress_step_style
68
+	 */
69
+	private $progress_step_style = '';
70
+
71
+	/**
72
+	 * @var RequestInterface $request
73
+	 */
74
+	private $request;
75
+
76
+	/**
77
+	 * @var Collection $form_steps
78
+	 */
79
+	protected $form_steps;
80
+
81
+	/**
82
+	 * @var ProgressStepManager $progress_step_manager
83
+	 */
84
+	protected $progress_step_manager;
85
+
86
+
87
+	/**
88
+	 * @return Collection|null
89
+	 */
90
+	abstract protected function getFormStepsCollection();
91
+
92
+	// phpcs:disable PEAR.Functions.ValidDefaultValue.NotAtEnd
93
+	/**
94
+	 * StepsManager constructor
95
+	 *
96
+	 * @param string                           $base_url
97
+	 * @param string                           $default_form_step
98
+	 * @param string                           $form_action
99
+	 * @param string                           $form_config
100
+	 * @param EE_Request|RequestInterface|null $request
101
+	 * @param string                           $progress_step_style
102
+	 * @throws InvalidDataTypeException
103
+	 * @throws InvalidArgumentException
104
+	 */
105
+	public function __construct(
106
+		$base_url,
107
+		$default_form_step,
108
+		$form_action = '',
109
+		$form_config = FormHandler::ADD_FORM_TAGS_AND_SUBMIT,
110
+		$progress_step_style = 'number_bubbles',
111
+		$request = null
112
+	) {
113
+		$this->setBaseUrl($base_url);
114
+		$this->setDefaultFormStep($default_form_step);
115
+		$this->setFormAction($form_action);
116
+		$this->setFormConfig($form_config);
117
+		$this->setProgressStepStyle($progress_step_style);
118
+		$this->request = $request instanceof RequestInterface
119
+			? $request
120
+			: LoaderFactory::getLoader()->getShared('EventEspresso\core\services\request\RequestInterface');
121
+	}
122
+
123
+
124
+	/**
125
+	 * @return string
126
+	 * @throws InvalidFormHandlerException
127
+	 */
128
+	public function baseUrl()
129
+	{
130
+		if (strpos($this->base_url, $this->getCurrentStep()->slug()) === false) {
131
+			add_query_arg(
132
+				array($this->form_step_url_key => $this->getCurrentStep()->slug()),
133
+				$this->base_url
134
+			);
135
+		}
136
+		return $this->base_url;
137
+	}
138
+
139
+
140
+	/**
141
+	 * @param string $base_url
142
+	 * @throws InvalidDataTypeException
143
+	 * @throws InvalidArgumentException
144
+	 */
145
+	protected function setBaseUrl($base_url)
146
+	{
147
+		if (! is_string($base_url)) {
148
+			throw new InvalidDataTypeException('$base_url', $base_url, 'string');
149
+		}
150
+		if (empty($base_url)) {
151
+			throw new InvalidArgumentException(
152
+				esc_html__('The base URL can not be an empty string.', 'event_espresso')
153
+			);
154
+		}
155
+		$this->base_url = $base_url;
156
+	}
157
+
158
+
159
+	/**
160
+	 * @return string
161
+	 * @throws InvalidDataTypeException
162
+	 */
163
+	public function formStepUrlKey()
164
+	{
165
+		if (empty($this->form_step_url_key)) {
166
+			$this->setFormStepUrlKey();
167
+		}
168
+		return $this->form_step_url_key;
169
+	}
170
+
171
+
172
+	/**
173
+	 * @param string $form_step_url_key
174
+	 * @throws InvalidDataTypeException
175
+	 */
176
+	public function setFormStepUrlKey($form_step_url_key = 'ee-form-step')
177
+	{
178
+		if (! is_string($form_step_url_key)) {
179
+			throw new InvalidDataTypeException('$form_step_key', $form_step_url_key, 'string');
180
+		}
181
+		$this->form_step_url_key = ! empty($form_step_url_key) ? $form_step_url_key : 'ee-form-step';
182
+	}
183
+
184
+
185
+	/**
186
+	 * @return string
187
+	 */
188
+	public function defaultFormStep()
189
+	{
190
+		return $this->default_form_step;
191
+	}
192
+
193
+
194
+	/**
195
+	 * @param $default_form_step
196
+	 * @throws InvalidDataTypeException
197
+	 */
198
+	protected function setDefaultFormStep($default_form_step)
199
+	{
200
+		if (! is_string($default_form_step)) {
201
+			throw new InvalidDataTypeException('$default_form_step', $default_form_step, 'string');
202
+		}
203
+		$this->default_form_step = $default_form_step;
204
+	}
205
+
206
+
207
+	/**
208
+	 * @return void
209
+	 * @throws InvalidIdentifierException
210
+	 * @throws InvalidDataTypeException
211
+	 */
212
+	protected function setCurrentStepFromRequest()
213
+	{
214
+		$current_step_slug = $this->request()->getRequestParam($this->formStepUrlKey(), $this->defaultFormStep());
215
+		if (! $this->form_steps->setCurrent($current_step_slug)) {
216
+			throw new InvalidIdentifierException(
217
+				$current_step_slug,
218
+				$this->defaultFormStep(),
219
+				sprintf(
220
+					esc_html__('The "%1$s" form step could not be set.', 'event_espresso'),
221
+					$current_step_slug
222
+				)
223
+			);
224
+		}
225
+	}
226
+
227
+
228
+	/**
229
+	 * @return SequentialStepFormInterface|object
230
+	 * @throws InvalidFormHandlerException
231
+	 */
232
+	public function getCurrentStep()
233
+	{
234
+		if (! $this->form_steps->current() instanceof SequentialStepForm) {
235
+			throw new InvalidFormHandlerException($this->form_steps->current());
236
+		}
237
+		return $this->form_steps->current();
238
+	}
239
+
240
+
241
+	/**
242
+	 * @return string
243
+	 * @throws InvalidFormHandlerException
244
+	 */
245
+	public function formAction()
246
+	{
247
+		if (! is_string($this->form_action) || empty($this->form_action)) {
248
+			$this->form_action = $this->baseUrl();
249
+		}
250
+		return $this->form_action;
251
+	}
252
+
253
+
254
+	/**
255
+	 * @param string $form_action
256
+	 * @throws InvalidDataTypeException
257
+	 */
258
+	public function setFormAction($form_action)
259
+	{
260
+		if (! is_string($form_action)) {
261
+			throw new InvalidDataTypeException('$form_action', $form_action, 'string');
262
+		}
263
+		$this->form_action = $form_action;
264
+	}
265
+
266
+
267
+	/**
268
+	 * @param array $form_action_args
269
+	 * @throws InvalidDataTypeException
270
+	 * @throws InvalidFormHandlerException
271
+	 */
272
+	public function addFormActionArgs($form_action_args = array())
273
+	{
274
+		if (! is_array($form_action_args)) {
275
+			throw new InvalidDataTypeException('$form_action_args', $form_action_args, 'array');
276
+		}
277
+		$form_action_args = ! empty($form_action_args)
278
+			? $form_action_args
279
+			: array($this->formStepUrlKey() => $this->form_steps->current()->slug());
280
+		$this->getCurrentStep()->setFormAction(
281
+			add_query_arg($form_action_args, $this->formAction())
282
+		);
283
+		$this->form_action = $this->getCurrentStep()->formAction();
284
+	}
285
+
286
+
287
+	/**
288
+	 * @return string
289
+	 */
290
+	public function formConfig()
291
+	{
292
+		return $this->form_config;
293
+	}
294
+
295
+
296
+	/**
297
+	 * @param string $form_config
298
+	 */
299
+	public function setFormConfig($form_config)
300
+	{
301
+		$this->form_config = $form_config;
302
+	}
303
+
304
+
305
+	/**
306
+	 * @return string
307
+	 */
308
+	public function progressStepStyle()
309
+	{
310
+		return $this->progress_step_style;
311
+	}
312
+
313
+
314
+	/**
315
+	 * @param string $progress_step_style
316
+	 */
317
+	public function setProgressStepStyle($progress_step_style)
318
+	{
319
+		$this->progress_step_style = $progress_step_style;
320
+	}
321
+
322
+
323
+	/**
324
+	 * @return RequestInterface
325
+	 */
326
+	public function request()
327
+	{
328
+		return $this->request;
329
+	}
330
+
331
+
332
+	/**
333
+	 * @return Collection|null
334
+	 * @throws InvalidInterfaceException
335
+	 */
336
+	protected function getProgressStepsCollection()
337
+	{
338
+		static $collection = null;
339
+		if (! $collection instanceof ProgressStepCollection) {
340
+			$collection = new ProgressStepCollection();
341
+		}
342
+		return $collection;
343
+	}
344
+
345
+
346
+	/**
347
+	 * @param Collection $progress_steps_collection
348
+	 * @return ProgressStepManager
349
+	 * @throws InvalidInterfaceException
350
+	 * @throws InvalidClassException
351
+	 * @throws InvalidDataTypeException
352
+	 * @throws InvalidEntityException
353
+	 * @throws InvalidFormHandlerException
354
+	 */
355
+	protected function generateProgressSteps(Collection $progress_steps_collection)
356
+	{
357
+		$current_step = $this->getCurrentStep();
358
+		/** @var SequentialStepForm $form_step */
359
+		foreach ($this->form_steps as $form_step) {
360
+			// is this step active ?
361
+			if (! $form_step->initialize()) {
362
+				continue;
363
+			}
364
+			$progress_steps_collection->add(
365
+				new ProgressStep(
366
+					$form_step->order(),
367
+					$form_step->slug(),
368
+					$form_step->slug(),
369
+					$form_step->formName()
370
+				),
371
+				$form_step->slug()
372
+			);
373
+		}
374
+		// set collection pointer back to current step
375
+		$this->form_steps->setCurrentUsingObject($current_step);
376
+		return new ProgressStepManager(
377
+			$this->progressStepStyle(),
378
+			$this->defaultFormStep(),
379
+			$this->formStepUrlKey(),
380
+			$progress_steps_collection
381
+		);
382
+	}
383
+
384
+
385
+	/**
386
+	 * @throws InvalidClassException
387
+	 * @throws InvalidDataTypeException
388
+	 * @throws InvalidEntityException
389
+	 * @throws InvalidIdentifierException
390
+	 * @throws InvalidInterfaceException
391
+	 * @throws InvalidArgumentException
392
+	 * @throws InvalidFormHandlerException
393
+	 */
394
+	public function buildForm()
395
+	{
396
+		$this->buildCurrentStepFormForDisplay();
397
+	}
398
+
399
+
400
+	/**
401
+	 * @param array $form_data
402
+	 * @throws InvalidArgumentException
403
+	 * @throws InvalidClassException
404
+	 * @throws InvalidDataTypeException
405
+	 * @throws InvalidEntityException
406
+	 * @throws InvalidFormHandlerException
407
+	 * @throws InvalidIdentifierException
408
+	 * @throws InvalidInterfaceException
409
+	 */
410
+	public function processForm($form_data = array())
411
+	{
412
+		$this->buildCurrentStepFormForProcessing();
413
+		$this->processCurrentStepForm($form_data);
414
+	}
415
+
416
+
417
+	/**
418
+	 * @throws InvalidClassException
419
+	 * @throws InvalidDataTypeException
420
+	 * @throws InvalidEntityException
421
+	 * @throws InvalidInterfaceException
422
+	 * @throws InvalidIdentifierException
423
+	 * @throws InvalidArgumentException
424
+	 * @throws InvalidFormHandlerException
425
+	 */
426
+	public function buildCurrentStepFormForDisplay()
427
+	{
428
+		$form_step = $this->buildCurrentStepForm();
429
+		// no displayable content ? then skip straight to processing
430
+		if (! $form_step->displayable()) {
431
+			$this->addFormActionArgs();
432
+			$form_step->setFormAction($this->formAction());
433
+			wp_safe_redirect($form_step->formAction());
434
+		}
435
+	}
436
+
437
+
438
+	/**
439
+	 * @throws InvalidClassException
440
+	 * @throws InvalidDataTypeException
441
+	 * @throws InvalidEntityException
442
+	 * @throws InvalidInterfaceException
443
+	 * @throws InvalidIdentifierException
444
+	 * @throws InvalidArgumentException
445
+	 * @throws InvalidFormHandlerException
446
+	 */
447
+	public function buildCurrentStepFormForProcessing()
448
+	{
449
+		$this->buildCurrentStepForm(false);
450
+	}
451
+
452
+
453
+	/**
454
+	 * @param bool $for_display
455
+	 * @return SequentialStepFormInterface
456
+	 * @throws InvalidArgumentException
457
+	 * @throws InvalidClassException
458
+	 * @throws InvalidDataTypeException
459
+	 * @throws InvalidEntityException
460
+	 * @throws InvalidFormHandlerException
461
+	 * @throws InvalidIdentifierException
462
+	 * @throws InvalidInterfaceException
463
+	 */
464
+	private function buildCurrentStepForm($for_display = true)
465
+	{
466
+		$this->form_steps = $this->getFormStepsCollection();
467
+		$this->setCurrentStepFromRequest();
468
+		$form_step = $this->getCurrentStep();
469
+		if ($form_step->submitBtnText() === esc_html__('Submit', 'event_espresso')) {
470
+			$form_step->setSubmitBtnText(esc_html__('Next Step', 'event_espresso'));
471
+		}
472
+		if ($for_display && $form_step->displayable()) {
473
+			$this->progress_step_manager = $this->generateProgressSteps(
474
+				$this->getProgressStepsCollection()
475
+			);
476
+			$this->progress_step_manager->setCurrentStep(
477
+				$form_step->slug()
478
+			);
479
+			// mark all previous progress steps as completed
480
+			$this->progress_step_manager->setPreviousStepsCompleted();
481
+			$this->progress_step_manager->enqueueStylesAndScripts();
482
+			$this->addFormActionArgs();
483
+			$form_step->setFormAction($this->formAction());
484
+		} else {
485
+			$form_step->setRedirectUrl($this->baseUrl());
486
+			$form_step->addRedirectArgs(
487
+				array($this->formStepUrlKey() => $this->form_steps->current()->slug())
488
+			);
489
+		}
490
+		$form_step->generate();
491
+		if ($for_display) {
492
+			$form_step->enqueueStylesAndScripts();
493
+		}
494
+		return $form_step;
495
+	}
496
+
497
+
498
+	/**
499
+	 * @param bool $return_as_string
500
+	 * @return string
501
+	 * @throws InvalidFormHandlerException
502
+	 */
503
+	public function displayProgressSteps($return_as_string = true)
504
+	{
505
+		$form_step = $this->getCurrentStep();
506
+		if (! $form_step->displayable()) {
507
+			return '';
508
+		}
509
+		$progress_steps = apply_filters(
510
+			'FHEE__EventEspresso_core_libraries_form_sections_form_handlers_SequentialStepFormManager__displayProgressSteps__before_steps',
511
+			''
512
+		);
513
+		$progress_steps .= $this->progress_step_manager->displaySteps();
514
+		$progress_steps .= apply_filters(
515
+			'FHEE__EventEspresso_core_libraries_form_sections_form_handlers_SequentialStepFormManager__displayProgressSteps__after_steps',
516
+			''
517
+		);
518
+		if ($return_as_string) {
519
+			return $progress_steps;
520
+		}
521
+		echo wp_kses($progress_steps, AllowedTags::getWithFormTags());
522
+		return '';
523
+	}
524
+
525
+
526
+	/**
527
+	 * @param bool $return_as_string
528
+	 * @return string
529
+	 * @throws InvalidFormHandlerException
530
+	 */
531
+	public function displayCurrentStepForm($return_as_string = true)
532
+	{
533
+		if ($return_as_string) {
534
+			return $this->getCurrentStep()->display();
535
+		}
536
+		echo wp_kses($this->getCurrentStep()->display(), AllowedTags::getWithFormTags());
537
+		return '';
538
+	}
539
+
540
+
541
+	/**
542
+	 * @param array $form_data
543
+	 * @return void
544
+	 * @throws InvalidArgumentException
545
+	 * @throws InvalidDataTypeException
546
+	 * @throws InvalidFormHandlerException
547
+	 */
548
+	public function processCurrentStepForm($form_data = array())
549
+	{
550
+		// grab instance of current step because after calling next() below,
551
+		// any calls to getCurrentStep() will return the "next" step because we advanced
552
+		$current_step = $this->getCurrentStep();
553
+		try {
554
+			// form processing should either throw exceptions or return true
555
+			$current_step->process($form_data);
556
+		} catch (Exception $e) {
557
+			// something went wrong, convert the Exception to an EE_Error
558
+			EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__);
559
+			// prevent redirect to next step or other if exception was thrown
560
+			if (
561
+				$current_step->redirectTo() === SequentialStepForm::REDIRECT_TO_NEXT_STEP
562
+				|| $current_step->redirectTo() === SequentialStepForm::REDIRECT_TO_OTHER
563
+			) {
564
+				$current_step->setRedirectTo(SequentialStepForm::REDIRECT_TO_CURRENT_STEP);
565
+			}
566
+		}
567
+		// save notices to a transient so that when we redirect back
568
+		// to the display portion for this step
569
+		// those notices can be displayed
570
+		EE_Error::get_notices(false, true);
571
+		$this->redirectForm($current_step);
572
+	}
573
+
574
+
575
+	/**
576
+	 * handles where to go to next
577
+	 *
578
+	 * @param SequentialStepFormInterface $current_step
579
+	 * @throws InvalidArgumentException
580
+	 * @throws InvalidDataTypeException
581
+	 * @throws InvalidFormHandlerException
582
+	 */
583
+	public function redirectForm(SequentialStepFormInterface $current_step)
584
+	{
585
+		$redirect_step = $current_step;
586
+		switch ($current_step->redirectTo()) {
587
+			case SequentialStepForm::REDIRECT_TO_OTHER:
588
+				// going somewhere else, so just check out now
589
+				wp_safe_redirect($redirect_step->redirectUrl());
590
+				exit();
591
+			case SequentialStepForm::REDIRECT_TO_PREV_STEP:
592
+				$redirect_step = $this->form_steps->previous();
593
+				break;
594
+			case SequentialStepForm::REDIRECT_TO_NEXT_STEP:
595
+				$this->form_steps->next();
596
+				if ($this->form_steps->valid()) {
597
+					$redirect_step = $this->form_steps->current();
598
+				}
599
+				break;
600
+			case SequentialStepForm::REDIRECT_TO_CURRENT_STEP:
601
+			default:
602
+				// $redirect_step is already set
603
+		}
604
+		$current_step->setRedirectUrl($this->baseUrl());
605
+		$current_step->addRedirectArgs(
606
+			// use the slug for whatever step we are redirecting too
607
+			array($this->formStepUrlKey() => $redirect_step->slug())
608
+		);
609
+		wp_safe_redirect($current_step->redirectUrl());
610
+		exit();
611
+	}
612 612
 }
Please login to merge, or discard this patch.
core/services/loaders/ClassInterfaceCache.php 2 patches
Spacing   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -49,16 +49,16 @@  discard block
 block discarded – undo
49 49
     {
50 50
         $fqn = $this->getFqn($fqn);
51 51
         // have we already seen this FQCN ?
52
-        if (! array_key_exists($fqn, $this->interfaces)) {
53
-            $this->interfaces[ $fqn ] = array();
52
+        if ( ! array_key_exists($fqn, $this->interfaces)) {
53
+            $this->interfaces[$fqn] = array();
54 54
             if (class_exists($fqn)) {
55
-                $this->interfaces[ $fqn ] = class_implements($fqn, false);
56
-                $this->interfaces[ $fqn ] = $this->interfaces[ $fqn ] !== false
57
-                    ? $this->interfaces[ $fqn ]
55
+                $this->interfaces[$fqn] = class_implements($fqn, false);
56
+                $this->interfaces[$fqn] = $this->interfaces[$fqn] !== false
57
+                    ? $this->interfaces[$fqn]
58 58
                     : array();
59 59
             }
60 60
         }
61
-        return $this->interfaces[ $fqn ];
61
+        return $this->interfaces[$fqn];
62 62
     }
63 63
 
64 64
 
@@ -93,13 +93,13 @@  discard block
 block discarded – undo
93 93
         // are we adding an alias for a specific class?
94 94
         if ($for_class !== '') {
95 95
             // make sure it's set up as an array
96
-            if (! isset($this->aliases[ $for_class ])) {
97
-                $this->aliases[ $for_class ] = array();
96
+            if ( ! isset($this->aliases[$for_class])) {
97
+                $this->aliases[$for_class] = array();
98 98
             }
99
-            $this->aliases[ $for_class ][ $alias ] = $fqn;
99
+            $this->aliases[$for_class][$alias] = $fqn;
100 100
             return;
101 101
         }
102
-        $this->aliases[ $alias ] = $fqn;
102
+        $this->aliases[$alias] = $fqn;
103 103
     }
104 104
 
105 105
 
@@ -131,7 +131,7 @@  discard block
 block discarded – undo
131 131
      */
132 132
     protected function isDirectAlias($fqn = '')
133 133
     {
134
-        return isset($this->aliases[ (string) $fqn ]) && ! is_array($this->aliases[ (string) $fqn ]);
134
+        return isset($this->aliases[(string) $fqn]) && ! is_array($this->aliases[(string) $fqn]);
135 135
     }
136 136
 
137 137
 
@@ -146,7 +146,7 @@  discard block
 block discarded – undo
146 146
     {
147 147
         return (
148 148
             $for_class !== ''
149
-            && isset($this->aliases[ (string) $for_class ][ (string) $fqn ])
149
+            && isset($this->aliases[(string) $for_class][(string) $fqn])
150 150
         );
151 151
     }
152 152
 
@@ -171,11 +171,11 @@  discard block
 block discarded – undo
171 171
     {
172 172
         $alias = $this->getFqn($alias);
173 173
         if ($this->isAliasForClass($alias, $for_class)) {
174
-            return $this->getFqnForAlias($this->aliases[ (string) $for_class ][ (string) $alias ], $for_class);
174
+            return $this->getFqnForAlias($this->aliases[(string) $for_class][(string) $alias], $for_class);
175 175
         }
176 176
         if ($this->isDirectAlias($alias)) {
177 177
             // note: changed '' to $for_class
178
-            return $this->getFqnForAlias($this->aliases[ (string) $alias ], $for_class);
178
+            return $this->getFqnForAlias($this->aliases[(string) $alias], $for_class);
179 179
         }
180 180
         return $alias;
181 181
     }
Please login to merge, or discard this patch.
Indentation   +184 added lines, -184 removed lines patch added patch discarded remove patch
@@ -16,188 +16,188 @@
 block discarded – undo
16 16
  */
17 17
 class ClassInterfaceCache
18 18
 {
19
-    /**
20
-     * array of interfaces indexed by FQCNs where values are arrays of interface FQNs
21
-     *
22
-     * @var string[][] $interfaces
23
-     */
24
-    private $interfaces = array();
25
-
26
-    /**
27
-     * @type string[][] $aliases
28
-     */
29
-    protected $aliases = array();
30
-
31
-
32
-    /**
33
-     * @return string[][]
34
-     */
35
-    public function getAliases()
36
-    {
37
-        return $this->aliases;
38
-    }
39
-
40
-    /**
41
-     * @param string $fqn
42
-     * @return string
43
-     */
44
-    public function getFqn($fqn)
45
-    {
46
-        $fqn = $fqn instanceof FullyQualifiedName ? $fqn->string() : $fqn;
47
-        return ltrim((string) $fqn, '\\');
48
-    }
49
-
50
-
51
-    /**
52
-     * @param string $fqn
53
-     * @return array
54
-     */
55
-    public function getInterfaces($fqn)
56
-    {
57
-        $fqn = $this->getFqn($fqn);
58
-        // have we already seen this FQCN ?
59
-        if (! array_key_exists($fqn, $this->interfaces)) {
60
-            $this->interfaces[ $fqn ] = array();
61
-            if (class_exists($fqn)) {
62
-                $this->interfaces[ $fqn ] = class_implements($fqn, false);
63
-                $this->interfaces[ $fqn ] = $this->interfaces[ $fqn ] !== false
64
-                    ? $this->interfaces[ $fqn ]
65
-                    : array();
66
-            }
67
-        }
68
-        return $this->interfaces[ $fqn ];
69
-    }
70
-
71
-
72
-    /**
73
-     * @param string $fqn
74
-     * @param string $interface
75
-     * @return bool
76
-     */
77
-    public function hasInterface($fqn, $interface)
78
-    {
79
-        $fqn        = $this->getFqn($fqn);
80
-        $interfaces = $this->getInterfaces($fqn);
81
-        return in_array($interface, $interfaces, true);
82
-    }
83
-
84
-
85
-    /**
86
-     * adds an alias for a classname
87
-     *
88
-     * @param string $fqn       the class name that should be used (concrete class to replace interface)
89
-     * @param string $alias     the class name that would be type hinted for (abstract parent or interface)
90
-     * @param string $for_class the class that has the dependency (is type hinting for the interface)
91
-     * @throws InvalidAliasException
92
-     */
93
-    public function addAlias($fqn, $alias, $for_class = '')
94
-    {
95
-        $fqn   = $this->getFqn($fqn);
96
-        $alias = $this->getFqn($alias);
97
-        if (strpos($alias, '\\') !== false && ! is_subclass_of($fqn, $alias)) {
98
-            throw new InvalidAliasException($fqn, $alias);
99
-        }
100
-        // are we adding an alias for a specific class?
101
-        if ($for_class !== '') {
102
-            // make sure it's set up as an array
103
-            if (! isset($this->aliases[ $for_class ])) {
104
-                $this->aliases[ $for_class ] = array();
105
-            }
106
-            $this->aliases[ $for_class ][ $alias ] = $fqn;
107
-            return;
108
-        }
109
-        $this->aliases[ $alias ] = $fqn;
110
-    }
111
-
112
-
113
-    /**
114
-     * returns TRUE if the provided FQN is an alias
115
-     *
116
-     * @param string $fqn
117
-     * @param string $for_class
118
-     * @return bool
119
-     */
120
-    public function isAlias($fqn = '', $for_class = '')
121
-    {
122
-        $fqn = $this->getFqn($fqn);
123
-        if ($this->isAliasForClass($fqn, $for_class)) {
124
-            return true;
125
-        }
126
-        if ($this->isDirectAlias($fqn)) {
127
-            return true;
128
-        }
129
-        return false;
130
-    }
131
-
132
-
133
-    /**
134
-     * returns TRUE if the provided FQN is an alias
135
-     *
136
-     * @param string $fqn
137
-     * @return bool
138
-     */
139
-    protected function isDirectAlias($fqn = '')
140
-    {
141
-        return isset($this->aliases[ (string) $fqn ]) && ! is_array($this->aliases[ (string) $fqn ]);
142
-    }
143
-
144
-
145
-    /**
146
-     * returns TRUE if the provided FQN is an alias for the specified class
147
-     *
148
-     * @param string $fqn
149
-     * @param string $for_class
150
-     * @return bool
151
-     */
152
-    protected function isAliasForClass($fqn = '', $for_class = '')
153
-    {
154
-        return (
155
-            $for_class !== ''
156
-            && isset($this->aliases[ (string) $for_class ][ (string) $fqn ])
157
-        );
158
-    }
159
-
160
-
161
-    /**
162
-     * returns FQN for provided alias if one exists, otherwise returns the original FQN
163
-     * functions recursively, so that multiple aliases can be used to drill down to a FQN
164
-     *  for example:
165
-     *      if the following two entries were added to the aliases array:
166
-     *          array(
167
-     *              'interface_alias'           => 'some\namespace\interface'
168
-     *              'some\namespace\interface'  => 'some\namespace\classname'
169
-     *          )
170
-     *      then one could use Loader::getNew( 'interface_alias' )
171
-     *      to load an instance of 'some\namespace\classname'
172
-     *
173
-     * @param string $alias
174
-     * @param string $for_class
175
-     * @return string
176
-     */
177
-    public function getFqnForAlias($alias = '', $for_class = '')
178
-    {
179
-        $alias = $this->getFqn($alias);
180
-        if ($this->isAliasForClass($alias, $for_class)) {
181
-            return $this->getFqnForAlias($this->aliases[ (string) $for_class ][ (string) $alias ], $for_class);
182
-        }
183
-        if ($this->isDirectAlias($alias)) {
184
-            // note: changed '' to $for_class
185
-            return $this->getFqnForAlias($this->aliases[ (string) $alias ], $for_class);
186
-        }
187
-        return $alias;
188
-    }
189
-
190
-
191
-    // public function debug($for_class = '')
192
-    // {
193
-    //     if ($for_class !== '') {
194
-    //         if ( ! isset($this->aliases[ $for_class ])) {
195
-    //             \EEH_Debug_Tools::printr('NOT FOUND', "aliases[ $for_class ]", __FILE__, __LINE__);
196
-    //             return;
197
-    //         }
198
-    //         \EEH_Debug_Tools::printr($this->aliases[ $for_class ], "aliases[ $for_class ]", __FILE__, __LINE__);
199
-    //         return;
200
-    //     }
201
-    //     \EEH_Debug_Tools::printr($this->aliases, '$this->aliases', __FILE__, __LINE__);
202
-    // }
19
+	/**
20
+	 * array of interfaces indexed by FQCNs where values are arrays of interface FQNs
21
+	 *
22
+	 * @var string[][] $interfaces
23
+	 */
24
+	private $interfaces = array();
25
+
26
+	/**
27
+	 * @type string[][] $aliases
28
+	 */
29
+	protected $aliases = array();
30
+
31
+
32
+	/**
33
+	 * @return string[][]
34
+	 */
35
+	public function getAliases()
36
+	{
37
+		return $this->aliases;
38
+	}
39
+
40
+	/**
41
+	 * @param string $fqn
42
+	 * @return string
43
+	 */
44
+	public function getFqn($fqn)
45
+	{
46
+		$fqn = $fqn instanceof FullyQualifiedName ? $fqn->string() : $fqn;
47
+		return ltrim((string) $fqn, '\\');
48
+	}
49
+
50
+
51
+	/**
52
+	 * @param string $fqn
53
+	 * @return array
54
+	 */
55
+	public function getInterfaces($fqn)
56
+	{
57
+		$fqn = $this->getFqn($fqn);
58
+		// have we already seen this FQCN ?
59
+		if (! array_key_exists($fqn, $this->interfaces)) {
60
+			$this->interfaces[ $fqn ] = array();
61
+			if (class_exists($fqn)) {
62
+				$this->interfaces[ $fqn ] = class_implements($fqn, false);
63
+				$this->interfaces[ $fqn ] = $this->interfaces[ $fqn ] !== false
64
+					? $this->interfaces[ $fqn ]
65
+					: array();
66
+			}
67
+		}
68
+		return $this->interfaces[ $fqn ];
69
+	}
70
+
71
+
72
+	/**
73
+	 * @param string $fqn
74
+	 * @param string $interface
75
+	 * @return bool
76
+	 */
77
+	public function hasInterface($fqn, $interface)
78
+	{
79
+		$fqn        = $this->getFqn($fqn);
80
+		$interfaces = $this->getInterfaces($fqn);
81
+		return in_array($interface, $interfaces, true);
82
+	}
83
+
84
+
85
+	/**
86
+	 * adds an alias for a classname
87
+	 *
88
+	 * @param string $fqn       the class name that should be used (concrete class to replace interface)
89
+	 * @param string $alias     the class name that would be type hinted for (abstract parent or interface)
90
+	 * @param string $for_class the class that has the dependency (is type hinting for the interface)
91
+	 * @throws InvalidAliasException
92
+	 */
93
+	public function addAlias($fqn, $alias, $for_class = '')
94
+	{
95
+		$fqn   = $this->getFqn($fqn);
96
+		$alias = $this->getFqn($alias);
97
+		if (strpos($alias, '\\') !== false && ! is_subclass_of($fqn, $alias)) {
98
+			throw new InvalidAliasException($fqn, $alias);
99
+		}
100
+		// are we adding an alias for a specific class?
101
+		if ($for_class !== '') {
102
+			// make sure it's set up as an array
103
+			if (! isset($this->aliases[ $for_class ])) {
104
+				$this->aliases[ $for_class ] = array();
105
+			}
106
+			$this->aliases[ $for_class ][ $alias ] = $fqn;
107
+			return;
108
+		}
109
+		$this->aliases[ $alias ] = $fqn;
110
+	}
111
+
112
+
113
+	/**
114
+	 * returns TRUE if the provided FQN is an alias
115
+	 *
116
+	 * @param string $fqn
117
+	 * @param string $for_class
118
+	 * @return bool
119
+	 */
120
+	public function isAlias($fqn = '', $for_class = '')
121
+	{
122
+		$fqn = $this->getFqn($fqn);
123
+		if ($this->isAliasForClass($fqn, $for_class)) {
124
+			return true;
125
+		}
126
+		if ($this->isDirectAlias($fqn)) {
127
+			return true;
128
+		}
129
+		return false;
130
+	}
131
+
132
+
133
+	/**
134
+	 * returns TRUE if the provided FQN is an alias
135
+	 *
136
+	 * @param string $fqn
137
+	 * @return bool
138
+	 */
139
+	protected function isDirectAlias($fqn = '')
140
+	{
141
+		return isset($this->aliases[ (string) $fqn ]) && ! is_array($this->aliases[ (string) $fqn ]);
142
+	}
143
+
144
+
145
+	/**
146
+	 * returns TRUE if the provided FQN is an alias for the specified class
147
+	 *
148
+	 * @param string $fqn
149
+	 * @param string $for_class
150
+	 * @return bool
151
+	 */
152
+	protected function isAliasForClass($fqn = '', $for_class = '')
153
+	{
154
+		return (
155
+			$for_class !== ''
156
+			&& isset($this->aliases[ (string) $for_class ][ (string) $fqn ])
157
+		);
158
+	}
159
+
160
+
161
+	/**
162
+	 * returns FQN for provided alias if one exists, otherwise returns the original FQN
163
+	 * functions recursively, so that multiple aliases can be used to drill down to a FQN
164
+	 *  for example:
165
+	 *      if the following two entries were added to the aliases array:
166
+	 *          array(
167
+	 *              'interface_alias'           => 'some\namespace\interface'
168
+	 *              'some\namespace\interface'  => 'some\namespace\classname'
169
+	 *          )
170
+	 *      then one could use Loader::getNew( 'interface_alias' )
171
+	 *      to load an instance of 'some\namespace\classname'
172
+	 *
173
+	 * @param string $alias
174
+	 * @param string $for_class
175
+	 * @return string
176
+	 */
177
+	public function getFqnForAlias($alias = '', $for_class = '')
178
+	{
179
+		$alias = $this->getFqn($alias);
180
+		if ($this->isAliasForClass($alias, $for_class)) {
181
+			return $this->getFqnForAlias($this->aliases[ (string) $for_class ][ (string) $alias ], $for_class);
182
+		}
183
+		if ($this->isDirectAlias($alias)) {
184
+			// note: changed '' to $for_class
185
+			return $this->getFqnForAlias($this->aliases[ (string) $alias ], $for_class);
186
+		}
187
+		return $alias;
188
+	}
189
+
190
+
191
+	// public function debug($for_class = '')
192
+	// {
193
+	//     if ($for_class !== '') {
194
+	//         if ( ! isset($this->aliases[ $for_class ])) {
195
+	//             \EEH_Debug_Tools::printr('NOT FOUND', "aliases[ $for_class ]", __FILE__, __LINE__);
196
+	//             return;
197
+	//         }
198
+	//         \EEH_Debug_Tools::printr($this->aliases[ $for_class ], "aliases[ $for_class ]", __FILE__, __LINE__);
199
+	//         return;
200
+	//     }
201
+	//     \EEH_Debug_Tools::printr($this->aliases, '$this->aliases', __FILE__, __LINE__);
202
+	// }
203 203
 }
Please login to merge, or discard this patch.
core/services/shortcodes/ShortcodesManager.php 2 patches
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -81,7 +81,7 @@  discard block
 block discarded – undo
81 81
      */
82 82
     public function getShortcodes()
83 83
     {
84
-        if (! $this->shortcodes instanceof CollectionInterface) {
84
+        if ( ! $this->shortcodes instanceof CollectionInterface) {
85 85
             $this->shortcodes = $this->loadShortcodesCollection();
86 86
         }
87 87
         return $this->shortcodes;
@@ -138,7 +138,7 @@  discard block
 block discarded – undo
138 138
                 'FHEE__EventEspresso_core_services_shortcodes_ShortcodesManager__registerShortcodes__shortcode_collection',
139 139
                 $this->getShortcodes()
140 140
             );
141
-            if (! $this->shortcodes instanceof CollectionInterface) {
141
+            if ( ! $this->shortcodes instanceof CollectionInterface) {
142 142
                 throw new InvalidEntityException(
143 143
                     $this->shortcodes,
144 144
                     'CollectionInterface',
@@ -172,7 +172,7 @@  discard block
 block discarded – undo
172 172
                     add_action('wp_enqueue_scripts', [$shortcode, 'enqueueStylesheets'], 11);
173 173
                 }
174 174
                 // add_shortcode() if it has not already been added
175
-                if (! shortcode_exists($shortcode->getTag())) {
175
+                if ( ! shortcode_exists($shortcode->getTag())) {
176 176
                     add_shortcode($shortcode->getTag(), [$shortcode, 'processShortcodeCallback']);
177 177
                 }
178 178
             }
Please login to merge, or discard this patch.
Indentation   +215 added lines, -215 removed lines patch added patch discarded remove patch
@@ -30,219 +30,219 @@
 block discarded – undo
30 30
  */
31 31
 class ShortcodesManager
32 32
 {
33
-    /**
34
-     * @type CurrentPage
35
-     */
36
-    protected $current_page;
37
-
38
-    /**
39
-     * @var LegacyShortcodesManager $legacy_shortcodes_manager
40
-     */
41
-    private $legacy_shortcodes_manager;
42
-
43
-    /**
44
-     * @var CollectionInterface|ShortcodeInterface[] $shortcodes
45
-     */
46
-    private $shortcodes;
47
-
48
-
49
-    /**
50
-     * ShortcodesManager constructor
51
-     *
52
-     * @param LegacyShortcodesManager $legacy_shortcodes_manager
53
-     * @param CurrentPage             $current_page
54
-     */
55
-    public function __construct(LegacyShortcodesManager $legacy_shortcodes_manager, CurrentPage $current_page)
56
-    {
57
-        $this->legacy_shortcodes_manager = $legacy_shortcodes_manager;
58
-        $this->current_page              = $current_page;
59
-        // assemble a list of installed and active shortcodes
60
-        add_action(
61
-            'AHEE__EE_System__register_shortcodes_modules_and_widgets',
62
-            [$this, 'registerShortcodes'],
63
-            999
64
-        );
65
-        //  call add_shortcode() for all installed shortcodes
66
-        add_action('AHEE__EE_System__core_loaded_and_ready', [$this, 'addShortcodes']);
67
-        // check content for shortcodes the old way
68
-        add_action('parse_query', [$this->legacy_shortcodes_manager, 'initializeShortcodes'], 5);
69
-        // check content for shortcodes the NEW more efficient way
70
-        add_action('template_redirect', [$this, 'templateRedirect'], 999);
71
-    }
72
-
73
-
74
-    /**
75
-     * @return CollectionInterface|ShortcodeInterface[]
76
-     * @throws InvalidIdentifierException
77
-     * @throws InvalidInterfaceException
78
-     * @throws InvalidFilePathException
79
-     * @throws InvalidEntityException
80
-     * @throws InvalidDataTypeException
81
-     * @throws InvalidClassException
82
-     */
83
-    public function getShortcodes()
84
-    {
85
-        if (! $this->shortcodes instanceof CollectionInterface) {
86
-            $this->shortcodes = $this->loadShortcodesCollection();
87
-        }
88
-        return $this->shortcodes;
89
-    }
90
-
91
-
92
-    /**
93
-     * @return CollectionInterface|ShortcodeInterface[]
94
-     * @throws InvalidIdentifierException
95
-     * @throws InvalidInterfaceException
96
-     * @throws InvalidFilePathException
97
-     * @throws InvalidEntityException
98
-     * @throws InvalidDataTypeException
99
-     * @throws InvalidClassException
100
-     */
101
-    protected function loadShortcodesCollection()
102
-    {
103
-        $loader = new CollectionLoader(
104
-            new CollectionDetails(
105
-            // collection name
106
-                'shortcodes',
107
-                // collection interface
108
-                'EventEspresso\core\services\shortcodes\ShortcodeInterface',
109
-                // FQCNs for classes to add (all classes within that namespace will be loaded)
110
-                ['EventEspresso\core\domain\entities\shortcodes'],
111
-                // filepaths to classes to add
112
-                [],
113
-                // file mask to use if parsing folder for files to add
114
-                '',
115
-                // what to use as identifier for collection entities
116
-                // using CLASS NAME prevents duplicates (works like a singleton)
117
-                CollectionDetails::ID_CLASS_NAME
118
-            )
119
-        );
120
-        return $loader->getCollection();
121
-    }
122
-
123
-
124
-    /**
125
-     * @return void
126
-     * @throws DomainException
127
-     * @throws InvalidInterfaceException
128
-     * @throws InvalidIdentifierException
129
-     * @throws InvalidFilePathException
130
-     * @throws InvalidEntityException
131
-     * @throws InvalidDataTypeException
132
-     * @throws InvalidClassException
133
-     * @throws Exception
134
-     */
135
-    public function registerShortcodes()
136
-    {
137
-        try {
138
-            $this->shortcodes = apply_filters(
139
-                'FHEE__EventEspresso_core_services_shortcodes_ShortcodesManager__registerShortcodes__shortcode_collection',
140
-                $this->getShortcodes()
141
-            );
142
-            if (! $this->shortcodes instanceof CollectionInterface) {
143
-                throw new InvalidEntityException(
144
-                    $this->shortcodes,
145
-                    'CollectionInterface',
146
-                    sprintf(
147
-                        esc_html__(
148
-                            'The "FHEE__EventEspresso_core_services_shortcodes_ShortcodesManager__registerShortcodes__shortcode_collection" filter must return a Collection of EspressoShortcode objects. "%1$s" was received instead.',
149
-                            'event_espresso'
150
-                        ),
151
-                        is_object($this->shortcodes) ? get_class($this->shortcodes) : gettype($this->shortcodes)
152
-                    )
153
-                );
154
-            }
155
-            $this->legacy_shortcodes_manager->registerShortcodes();
156
-        } catch (Exception $exception) {
157
-            new ExceptionStackTraceDisplay($exception);
158
-        }
159
-    }
160
-
161
-
162
-    /**
163
-     * @return void
164
-     * @throws Exception
165
-     */
166
-    public function addShortcodes()
167
-    {
168
-        try {
169
-            // cycle thru shortcode folders
170
-            foreach ($this->shortcodes as $shortcode) {
171
-                if ($shortcode instanceof EnqueueAssetsInterface) {
172
-                    add_action('wp_enqueue_scripts', [$shortcode, 'registerScriptsAndStylesheets'], 10);
173
-                    add_action('wp_enqueue_scripts', [$shortcode, 'enqueueStylesheets'], 11);
174
-                }
175
-                // add_shortcode() if it has not already been added
176
-                if (! shortcode_exists($shortcode->getTag())) {
177
-                    add_shortcode($shortcode->getTag(), [$shortcode, 'processShortcodeCallback']);
178
-                }
179
-            }
180
-            $this->legacy_shortcodes_manager->addShortcodes();
181
-        } catch (Exception $exception) {
182
-            new ExceptionStackTraceDisplay($exception);
183
-        }
184
-    }
185
-
186
-
187
-    /**
188
-     * callback for the "template_redirect" hook point
189
-     * checks posts for EE shortcodes, and initializes them,
190
-     * then toggles filter switch that loads core default assets
191
-     *
192
-     * @return void
193
-     */
194
-    public function templateRedirect()
195
-    {
196
-        global $wp_query;
197
-        if (empty($wp_query->posts)) {
198
-            return;
199
-        }
200
-        $load_assets = false;
201
-        // array of posts displayed in current request
202
-        $posts = is_array($wp_query->posts) ? $wp_query->posts : [$wp_query->posts];
203
-        foreach ($posts as $post) {
204
-            // now check post content and excerpt for EE shortcodes
205
-            $load_assets = $this->parseContentForShortcodes($post->post_content, $post)
206
-                ? true
207
-                : $load_assets;
208
-        }
209
-        if ($load_assets) {
210
-            $this->current_page->setEspressoPage(true);
211
-            add_filter('FHEE_load_css', '__return_true');
212
-            add_filter('FHEE_load_js', '__return_true');
213
-        }
214
-    }
215
-
216
-
217
-    /**
218
-     * checks supplied content against list of shortcodes,
219
-     * then initializes any found shortcodes, and returns true.
220
-     * returns false if no shortcodes found.
221
-     *
222
-     * @param string  $content
223
-     * @param WP_Post $post
224
-     * @return bool
225
-     */
226
-    public function parseContentForShortcodes(string $content, WP_Post $post): bool
227
-    {
228
-        if (empty($this->shortcodes)) {
229
-            return false;
230
-        }
231
-        $has_shortcode = false;
232
-        foreach ($this->shortcodes as $shortcode) {
233
-            if (
234
-                apply_filters(
235
-                    'FHEE__EventEspresso_core_services_shortcodes_ShortcodesManager__parseContentForShortcodes__has_shortcode',
236
-                    has_shortcode($content, $shortcode->getTag()),
237
-                    $content,
238
-                    $post,
239
-                    $shortcode
240
-                )
241
-            ) {
242
-                $shortcode->initializeShortcode();
243
-                $has_shortcode = true;
244
-            }
245
-        }
246
-        return $has_shortcode;
247
-    }
33
+	/**
34
+	 * @type CurrentPage
35
+	 */
36
+	protected $current_page;
37
+
38
+	/**
39
+	 * @var LegacyShortcodesManager $legacy_shortcodes_manager
40
+	 */
41
+	private $legacy_shortcodes_manager;
42
+
43
+	/**
44
+	 * @var CollectionInterface|ShortcodeInterface[] $shortcodes
45
+	 */
46
+	private $shortcodes;
47
+
48
+
49
+	/**
50
+	 * ShortcodesManager constructor
51
+	 *
52
+	 * @param LegacyShortcodesManager $legacy_shortcodes_manager
53
+	 * @param CurrentPage             $current_page
54
+	 */
55
+	public function __construct(LegacyShortcodesManager $legacy_shortcodes_manager, CurrentPage $current_page)
56
+	{
57
+		$this->legacy_shortcodes_manager = $legacy_shortcodes_manager;
58
+		$this->current_page              = $current_page;
59
+		// assemble a list of installed and active shortcodes
60
+		add_action(
61
+			'AHEE__EE_System__register_shortcodes_modules_and_widgets',
62
+			[$this, 'registerShortcodes'],
63
+			999
64
+		);
65
+		//  call add_shortcode() for all installed shortcodes
66
+		add_action('AHEE__EE_System__core_loaded_and_ready', [$this, 'addShortcodes']);
67
+		// check content for shortcodes the old way
68
+		add_action('parse_query', [$this->legacy_shortcodes_manager, 'initializeShortcodes'], 5);
69
+		// check content for shortcodes the NEW more efficient way
70
+		add_action('template_redirect', [$this, 'templateRedirect'], 999);
71
+	}
72
+
73
+
74
+	/**
75
+	 * @return CollectionInterface|ShortcodeInterface[]
76
+	 * @throws InvalidIdentifierException
77
+	 * @throws InvalidInterfaceException
78
+	 * @throws InvalidFilePathException
79
+	 * @throws InvalidEntityException
80
+	 * @throws InvalidDataTypeException
81
+	 * @throws InvalidClassException
82
+	 */
83
+	public function getShortcodes()
84
+	{
85
+		if (! $this->shortcodes instanceof CollectionInterface) {
86
+			$this->shortcodes = $this->loadShortcodesCollection();
87
+		}
88
+		return $this->shortcodes;
89
+	}
90
+
91
+
92
+	/**
93
+	 * @return CollectionInterface|ShortcodeInterface[]
94
+	 * @throws InvalidIdentifierException
95
+	 * @throws InvalidInterfaceException
96
+	 * @throws InvalidFilePathException
97
+	 * @throws InvalidEntityException
98
+	 * @throws InvalidDataTypeException
99
+	 * @throws InvalidClassException
100
+	 */
101
+	protected function loadShortcodesCollection()
102
+	{
103
+		$loader = new CollectionLoader(
104
+			new CollectionDetails(
105
+			// collection name
106
+				'shortcodes',
107
+				// collection interface
108
+				'EventEspresso\core\services\shortcodes\ShortcodeInterface',
109
+				// FQCNs for classes to add (all classes within that namespace will be loaded)
110
+				['EventEspresso\core\domain\entities\shortcodes'],
111
+				// filepaths to classes to add
112
+				[],
113
+				// file mask to use if parsing folder for files to add
114
+				'',
115
+				// what to use as identifier for collection entities
116
+				// using CLASS NAME prevents duplicates (works like a singleton)
117
+				CollectionDetails::ID_CLASS_NAME
118
+			)
119
+		);
120
+		return $loader->getCollection();
121
+	}
122
+
123
+
124
+	/**
125
+	 * @return void
126
+	 * @throws DomainException
127
+	 * @throws InvalidInterfaceException
128
+	 * @throws InvalidIdentifierException
129
+	 * @throws InvalidFilePathException
130
+	 * @throws InvalidEntityException
131
+	 * @throws InvalidDataTypeException
132
+	 * @throws InvalidClassException
133
+	 * @throws Exception
134
+	 */
135
+	public function registerShortcodes()
136
+	{
137
+		try {
138
+			$this->shortcodes = apply_filters(
139
+				'FHEE__EventEspresso_core_services_shortcodes_ShortcodesManager__registerShortcodes__shortcode_collection',
140
+				$this->getShortcodes()
141
+			);
142
+			if (! $this->shortcodes instanceof CollectionInterface) {
143
+				throw new InvalidEntityException(
144
+					$this->shortcodes,
145
+					'CollectionInterface',
146
+					sprintf(
147
+						esc_html__(
148
+							'The "FHEE__EventEspresso_core_services_shortcodes_ShortcodesManager__registerShortcodes__shortcode_collection" filter must return a Collection of EspressoShortcode objects. "%1$s" was received instead.',
149
+							'event_espresso'
150
+						),
151
+						is_object($this->shortcodes) ? get_class($this->shortcodes) : gettype($this->shortcodes)
152
+					)
153
+				);
154
+			}
155
+			$this->legacy_shortcodes_manager->registerShortcodes();
156
+		} catch (Exception $exception) {
157
+			new ExceptionStackTraceDisplay($exception);
158
+		}
159
+	}
160
+
161
+
162
+	/**
163
+	 * @return void
164
+	 * @throws Exception
165
+	 */
166
+	public function addShortcodes()
167
+	{
168
+		try {
169
+			// cycle thru shortcode folders
170
+			foreach ($this->shortcodes as $shortcode) {
171
+				if ($shortcode instanceof EnqueueAssetsInterface) {
172
+					add_action('wp_enqueue_scripts', [$shortcode, 'registerScriptsAndStylesheets'], 10);
173
+					add_action('wp_enqueue_scripts', [$shortcode, 'enqueueStylesheets'], 11);
174
+				}
175
+				// add_shortcode() if it has not already been added
176
+				if (! shortcode_exists($shortcode->getTag())) {
177
+					add_shortcode($shortcode->getTag(), [$shortcode, 'processShortcodeCallback']);
178
+				}
179
+			}
180
+			$this->legacy_shortcodes_manager->addShortcodes();
181
+		} catch (Exception $exception) {
182
+			new ExceptionStackTraceDisplay($exception);
183
+		}
184
+	}
185
+
186
+
187
+	/**
188
+	 * callback for the "template_redirect" hook point
189
+	 * checks posts for EE shortcodes, and initializes them,
190
+	 * then toggles filter switch that loads core default assets
191
+	 *
192
+	 * @return void
193
+	 */
194
+	public function templateRedirect()
195
+	{
196
+		global $wp_query;
197
+		if (empty($wp_query->posts)) {
198
+			return;
199
+		}
200
+		$load_assets = false;
201
+		// array of posts displayed in current request
202
+		$posts = is_array($wp_query->posts) ? $wp_query->posts : [$wp_query->posts];
203
+		foreach ($posts as $post) {
204
+			// now check post content and excerpt for EE shortcodes
205
+			$load_assets = $this->parseContentForShortcodes($post->post_content, $post)
206
+				? true
207
+				: $load_assets;
208
+		}
209
+		if ($load_assets) {
210
+			$this->current_page->setEspressoPage(true);
211
+			add_filter('FHEE_load_css', '__return_true');
212
+			add_filter('FHEE_load_js', '__return_true');
213
+		}
214
+	}
215
+
216
+
217
+	/**
218
+	 * checks supplied content against list of shortcodes,
219
+	 * then initializes any found shortcodes, and returns true.
220
+	 * returns false if no shortcodes found.
221
+	 *
222
+	 * @param string  $content
223
+	 * @param WP_Post $post
224
+	 * @return bool
225
+	 */
226
+	public function parseContentForShortcodes(string $content, WP_Post $post): bool
227
+	{
228
+		if (empty($this->shortcodes)) {
229
+			return false;
230
+		}
231
+		$has_shortcode = false;
232
+		foreach ($this->shortcodes as $shortcode) {
233
+			if (
234
+				apply_filters(
235
+					'FHEE__EventEspresso_core_services_shortcodes_ShortcodesManager__parseContentForShortcodes__has_shortcode',
236
+					has_shortcode($content, $shortcode->getTag()),
237
+					$content,
238
+					$post,
239
+					$shortcode
240
+				)
241
+			) {
242
+				$shortcode->initializeShortcode();
243
+				$has_shortcode = true;
244
+			}
245
+		}
246
+		return $has_shortcode;
247
+	}
248 248
 }
Please login to merge, or discard this patch.