| @@ -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 | /** |