PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / trunk
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More vtrunk
6.35 6.34 6.33.1 6.33 6.32.1 6.32 6.31 6.25 6.25.1 6.26 6.26.1 6.27 6.28 6.29 6.3 6.3.1 6.3.2 6.30 6.4 6.4.1 6.4.2 6.5 6.5.1 6.5.2 6.5.3 All 141 releases
← All changes | classes/models/FrmSalesApi.php +34 -140 6.32 → trunk View file →
@@ -29,30 +29,43 @@
29 29 */
30 30 private static $best_sale;
31 31
32 32 /**
33 - * @since 6.25.1
33 + * Flag to prevent the $this->set_sales() call in the constructor.
34 34 *
35 - * @var string|null
36 - */
37 - private static $cross_sell_text;
38 -
39 - /**
40 - * @since 6.25.1
35 + * @since 6.34
41 36 *
42 - * @var string|null
37 + * @var bool
43 38 */
44 - private static $cross_sell_link;
39 + private static $prevent_new_sales_request = false;
45 40
46 41 public function __construct() {
47 42 $this->set_cache_key();
48 43
49 - if ( false === self::$sales ) {
44 + if ( ! self::$prevent_new_sales_request && false === self::$sales ) {
50 45 $this->set_sales();
51 46 }
52 47 }
53 48
54 49 /**
50 + * @since 6.34
51 + *
52 + * @return void
53 + */
54 + public static function prevent_new_sales_requests() {
55 + self::$prevent_new_sales_request = true;
56 + }
57 +
58 + /**
59 + * @since 6.34
60 + *
61 + * @return void
62 + */
63 + public static function allow_new_sales_requests() {
64 + self::$prevent_new_sales_request = false;
65 + }
66 +
67 + /**
55 68 * @since 6.17
56 69 *
57 70 * @return void
58 71 */
@@ -101,103 +114,12 @@
101 114 }
102 115
103 116 foreach ( $api as $sale ) {
104 117 $this->add_sale( $sale );
105 -
106 - if ( is_array( $sale ) && isset( $sale['cross_sell_text'] ) ) {
107 - $this->set_cross_sell( $sale );
108 - }
109 118 }
110 119 }
111 120
112 121 /**
113 - * Check for a special array in the sales API array.
114 - * Normally cross_sell_text and cross_sell_link are not set.
115 - * But one array, that isn't actually a sale, contains cross sell data.
116 - * This should be near the end of the array.
117 - *
118 - * @since 6.25.1
119 - *
120 - * @param array $data
121 - *
122 - * @return void
123 - */
124 - private function set_cross_sell( $data ) {
125 - if ( ! self::cross_sell_is_valid( $data ) ) {
126 - return;
127 - }
128 -
129 - $cross_sell_text = $data['cross_sell_text'];
130 - $cross_sell_links = $data['cross_sell_link'];
131 - $index = self::determine_cross_sell_index( $cross_sell_text );
132 -
133 - self::$cross_sell_text = sanitize_text_field( $cross_sell_text[ $index ] );
134 - self::$cross_sell_link = esc_url_raw( $cross_sell_links[ $index ] );
135 - }
136 -
137 - /**
138 - * Check that both cross_sell_text and cross_sell_link are set and are arrays of the same size.
139 - *
140 - * @since 6.25.1
141 - *
142 - * @param array $data
143 - *
144 - * @return bool
145 - */
146 - private function cross_sell_is_valid( $data ) {
147 - if ( empty( $data['cross_sell_text'] ) || empty( $data['cross_sell_link'] ) ) {
148 - return false;
149 - }
150 -
151 - if ( ! is_array( $data['cross_sell_text'] ) || ! is_array( $data['cross_sell_link'] ) ) {
152 - return false;
153 - }
154 -
155 - return count( $data['cross_sell_link'] ) === count( $data['cross_sell_text'] );
156 - }
157 -
158 - /**
159 - * Determine which cross sell text to use.
160 - * These are shown in order for 30 days before moving on to the next one.
161 - *
162 - * @since 6.25.1
163 - *
164 - * @param array $cross_sell_text
165 - *
166 - * @return int
167 - */
168 - private static function determine_cross_sell_index( $cross_sell_text ) {
169 - $option_name = 'frm_cross_sell_settings';
170 - $cross_sell_settings = get_option( $option_name );
171 -
172 - if ( ! is_array( $cross_sell_settings ) ) {
173 - $cross_sell_settings = array(
174 - reset( $cross_sell_text ) => time(),
175 - );
176 - update_option( $option_name, $cross_sell_settings );
177 - return 0;
178 - }
179 -
180 - foreach ( $cross_sell_text as $index => $current_text ) {
181 - if ( ! isset( $cross_sell_settings[ $current_text ] ) ) {
182 - $cross_sell_settings[ $current_text ] = time();
183 - update_option( $option_name, $cross_sell_settings );
184 - return $index;
185 - }
186 -
187 - $time_elapsed = time() - $cross_sell_settings[ $current_text ];
188 -
189 - if ( $time_elapsed < DAY_IN_SECONDS * 30 ) {
190 - return $index;
191 - }
192 - }
193 -
194 - // If all options are expired, reset the option.
195 - delete_option( $option_name );
196 - return 0;
197 - }
198 -
199 - /**
200 122 * @param array|string $sale
201 123 *
202 124 * @return void
203 125 */
@@ -328,9 +250,19 @@
328 250 }
329 251
330 252 $sale = self::$instance->get_best_sale();
331 253
332 - return is_array( $sale ) && ! empty( $sale[ $key ] ) ? $sale[ $key ] : false;
254 + if ( ! is_array( $sale ) || empty( $sale[ $key ] ) ) {
255 + return false;
256 + }
257 +
258 + $sale_value = $sale[ $key ];
259 +
260 + if ( str_ends_with( $key, '_link' ) && ! str_starts_with( $sale_value, 'https://formidableforms.com' ) ) {
261 + return false;
262 + }
263 +
264 + return $sale_value;
333 265 }
334 266
335 267 /**
336 268 * @since 6.17
@@ -519,44 +451,6 @@
519 451 */
520 452 private static function is_banner_dismissed( $key ) {
521 453 $dismissed_sales = get_user_option( 'frm_dismissed_sales', get_current_user_id() );
522 454 return is_array( $dismissed_sales ) && in_array( $key, $dismissed_sales, true );
523 - }
524 -
525 - /**
526 - * @return void
527 - */
528 - public static function menu() {
529 - if ( false === self::$sales ) {
530 - new self();
531 - }
532 -
533 - if ( ! self::$cross_sell_text || ! self::$cross_sell_link ) {
534 - return;
535 - }
536 -
537 - add_submenu_page(
538 - 'formidable',
539 - esc_html( self::$cross_sell_text ) . ' | Formidable',
540 - esc_html( self::$cross_sell_text ),
541 - 'activate_plugins',
542 - 'frm-sales-api-cross-sell',
543 - function () {
544 - // There is no page. The redirect logic is handled below, before this callback is triggered.
545 - }
546 - );
547 -
548 - add_action(
549 - 'admin_init',
550 - function () {
551 - if ( ! current_user_can( 'activate_plugins' ) ) {
552 - return;
553 - }
554 -
555 - if ( 'frm-sales-api-cross-sell' === FrmAppHelper::simple_get( 'page' ) && self::$cross_sell_link ) {
556 - wp_redirect( self::$cross_sell_link );
557 - exit;
558 - }
559 - }
560 - );
561 455 }
562 456 }