=' ); } /** * Product Quantities feature: get an update required alert HTML. * * @since 1.8.7 * * @return string */ public static function get_product_quantities_alert(): string { $addons_require_update = self::get_addons_require_for_product_quantities(); // Generate update link when only one addon needs to be updated. if ( count( $addons_require_update ) === 1 ) { $update_url = self::get_addon_update_url( key( $addons_require_update ) ); } else { // Redirect to the Plugins admin page if multiple addons require an update. $update_url = admin_url( 'plugins.php?plugin_status=upgrade' ); } return self::get_update_alert( sprintf( /* translators: %1$s - addons list. */ __( 'The following addons require an update to support product quantities: %1$s', 'wpforms-lite' ), implode( ', ', $addons_require_update ) ), $update_url ); } /** * Order Summary feature: get an update required alert HTML. * * @since 1.8.7 * * @return string */ public static function get_order_summary_alert(): string { return self::get_update_alert( __( 'You\'re using an older version of the Coupons addon that does not support order summary.', 'wpforms-lite' ), self::get_addon_update_url( 'wpforms-coupons' ) ); } /** * Repeater field: determine if addon is allowed to use inside the repeater field. * * @since 1.8.9 * * @param string $addon_slug Addon slug. * * @return bool */ public static function is_inside_repeater_allowed( string $addon_slug ): bool { $requirements = [ 'wpforms-geolocation' => '2.10.0', 'wpforms-signatures' => '1.11.0', 'wpforms-form-abandonment' => '1.12.0', 'wpforms-save-resume' => '1.11.0', 'wpforms-lead-forms' => '1000', // @todo: We should adjust this value when the Lead Forms get the Repeater field support. 'wpforms-google-sheets' => '2.1.0', ]; if ( ! isset( $requirements[ $addon_slug ] ) ) { return true; } $version_constant = strtoupper( str_replace( '-', '_', $addon_slug ) ) . '_VERSION'; return self::is_pro() && defined( $version_constant ) && version_compare( constant( $version_constant ), $requirements[ $addon_slug ], '>=' ); } /** * Repeater field: get an update required alert HTML. * * @since 1.8.9 * * @param string $addon_name Addon name. * @param string $addon_slug Addon slug. * * @return string */ public static function get_repeater_alert( string $addon_name, string $addon_slug ): string { return self::get_update_alert( self::get_repeater_alert_text( $addon_name ), self::get_addon_update_url( $addon_slug ) ); } /** * Repeater field: get alert text. * * @since 1.8.9 * * @param string $addon_name Addon name. * * @return string */ public static function get_repeater_alert_text( string $addon_name ): string { return sprintf( /* translators: %1$s - addon name. */ __( 'You\'re using an older version of the %1$s addon that does not support the Repeater field.', 'wpforms-lite' ), $addon_name ); } /** * Retrieve a list of addons that require updating to support the Product Quantities feature. * * @since 1.8.7 * * @return array */ private static function get_addons_require_for_product_quantities(): array { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh static $addons; if ( ! is_null( $addons ) ) { return $addons; } $addons = []; // All addons require Pro and Top level licenses. if ( ! self::is_pro() ) { return $addons; } if ( defined( 'WPFORMS_COUPONS_VERSION' ) && version_compare( WPFORMS_COUPONS_VERSION, '1.2.0', '<' ) ) { $addons['wpforms-coupons'] = __( 'Coupons', 'wpforms-lite' ); } if ( defined( 'WPFORMS_PAYPAL_COMMERCE_VERSION' ) && version_compare( WPFORMS_PAYPAL_COMMERCE_VERSION, '1.9.0', '<' ) ) { $addons['wpforms-paypal-commerce'] = __( 'PayPal Commerce', 'wpforms-lite' ); } if ( defined( 'WPFORMS_PAYPAL_STANDARD_VERSION' ) && version_compare( WPFORMS_PAYPAL_STANDARD_VERSION, '1.10.0', '<' ) ) { $addons['wpforms-paypal-standard'] = __( 'PayPal Standard', 'wpforms-lite' ); } if ( defined( 'WPFORMS_SQUARE_VERSION' ) && version_compare( WPFORMS_SQUARE_VERSION, '1.9.0', '<' ) ) { $addons['wpforms-square'] = __( 'Square', 'wpforms-lite' ); } if ( defined( 'WPFORMS_SAVE_RESUME_VERSION' ) && version_compare( WPFORMS_SAVE_RESUME_VERSION, '1.9.0', '<' ) ) { $addons['wpforms-save-resume'] = __( 'Save and Resume', 'wpforms-lite' ); } return $addons; } /** * Get an update alert HTML. * * @since 1.8.7 * * @param string $message Alert message. * @param string $update_url Update button URL. * * @return string */ private static function get_update_alert( string $message, string $update_url ): string { $alert = sprintf( '
', esc_html__( 'Update Required', 'wpforms-lite' ), esc_html( $message ), esc_url( $update_url ), esc_html__( 'Update Now', 'wpforms-lite' ) ); return sprintf( '