PluginProbe
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages / 3.4.3
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages v3.4.3
3.4.3 3.4.2 3.4.1 3.4.0 3.3.9 3.3.8 3.3.7 3.3.6 3.3.5 3.3.4 3.3.3 3.3.2 3.3.1 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 2.3.0 2.3.1 All 196 releases
← All changes | includes/class-convertkit-resource-forms.php +69 -2 3.3.33.4.3 View file →
@@ -153,8 +153,44 @@
153 153
154 154 }
155 155
156 156 /**
157 + * Returns all non-legacy forms (any v4 format: inline, modal, slide in
158 + * or sticky bar) based on the sort order. Legacy forms lack a `format`
159 + * key and are therefore excluded.
160 + *
161 + * @since 3.3.7
162 + *
163 + * @return bool|array
164 + */
165 + public function get_non_legacy() {
166 +
167 + // If the ConvertKit WordPress Libraries are < 1.3.6 (e.g. loaded by an outdated
168 + // addon), or a WordPress site updates this Plugin before other ConvertKit Plugins,
169 + // get_by() won't be available and will cause an E_ERROR, crashing the site.
170 + // @see https://wordpress.org/support/topic/error-1795/.
171 + if ( ! method_exists( $this, 'get_by' ) ) { // @phpstan-ignore-line Older WordPress Libraries won't have this function.
172 + return false;
173 + }
174 +
175 + return $this->get_by( 'format', array( 'inline', 'modal', 'slide in', 'sticky bar' ) );
176 +
177 + }
178 +
179 + /**
180 + * Returns whether any non-legacy forms exist in the options table.
181 + *
182 + * @since 3.3.7
183 + *
184 + * @return bool
185 + */
186 + public function non_legacy_exist() {
187 +
188 + return (bool) $this->get_non_legacy();
189 +
190 + }
191 +
192 + /**
157 193 * Determines if the given Form ID is a legacy Form or Landing Page.
158 194 *
159 195 * @since 2.5.0
160 196 *
@@ -195,9 +231,9 @@
195 231 */
196 232 public function get_select_field_all( $name, $id, $css_classes, $selected_option, $prepend_options = false, $attributes = false, $description = false ) {
197 233
198 234 return $this->get_select_field(
199 - $this->get(),
235 + $this->get_forms_for_select_field( $selected_option ),
200 236 $name,
201 237 $id,
202 238 $css_classes,
203 239 $selected_option,
@@ -223,9 +259,9 @@
223 259 */
224 260 public function output_select_field_all( $name, $id, $css_classes, $selected_option, $prepend_options = false, $attributes = false, $description = false ) {
225 261
226 262 $this->output_select_field(
227 - $this->get(),
263 + $this->get_forms_for_select_field( $selected_option ),
228 264 $name,
229 265 $id,
230 266 $css_classes,
231 267 $selected_option,
@@ -232,8 +268,39 @@
232 268 $prepend_options,
233 269 $attributes,
234 270 $description
235 271 );
272 +
273 + }
274 +
275 + /**
276 + * Returns the array of forms to display in an "all forms" dropdown: every
277 + * non-legacy form, plus the currently-selected legacy form (if any) so
278 + * existing saved legacy assignments continue to render as selected in the
279 + * UI without exposing other legacy forms as new selection options.
280 + *
281 + * @since 3.3.7
282 + *
283 + * @param string|int $selected_option Currently-selected form ID.
284 + * @return array
285 + */
286 + private function get_forms_for_select_field( $selected_option ) {
287 +
288 + $forms = $this->get_non_legacy();
289 + if ( ! is_array( $forms ) ) {
290 + $forms = array();
291 + }
292 +
293 + // If the currently-selected form is a legacy form, append it so the
294 + // dropdown shows the saved value as selected.
295 + if ( $selected_option && $this->is_legacy( $selected_option ) ) {
296 + $legacy_form = $this->get_by_id( (int) $selected_option );
297 + if ( $legacy_form ) {
298 + $forms[] = $legacy_form;
299 + }
300 + }
301 +
302 + return $forms;
236 303
237 304 }
238 305
239 306 /**