PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 6.1
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v6.1
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
formidable / classes / models / FrmFormTemplateApi.php

FrmFormTemplateApi.php in Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More 6.1, at classes/models/FrmFormTemplateApi.php

177 lines 4.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) {
3 die( 'You are not allowed to call this page directly.' );
4 }
5
6 class FrmFormTemplateApi extends FrmFormApi {
7
8 protected static $code_option_name = 'frm_free_license_code';
9
10 private static $base_api_url = 'https://formidableforms.com/wp-json/form-templates/v1/';
11
12 protected static $free_license;
13
14 /**
15 * @var int $new_days
16 */
17 protected $new_days = 30;
18
19 /**
20 * @since 3.06
21 */
22 protected function set_cache_key() {
23 $this->cache_key = 'frm_form_templates_l';
24
25 if ( ! empty( $this->license ) ) {
26 $this->cache_key .= md5( $this->license );
27 } else {
28 $free_license = $this->get_free_license();
29 if ( $free_license ) {
30 $this->cache_key .= md5( $free_license );
31 }
32 }
33 }
34
35 /**
36 * @since 3.06
37 */
38 protected function api_url() {
39 $url = self::$base_api_url . 'list';
40
41 if ( empty( $this->license ) ) {
42 $free_license = $this->get_free_license();
43
44 if ( $free_license ) {
45 $url .= '?l=' . urlencode( base64_encode( $free_license ) );
46 $url .= '&v=' . FrmAppHelper::plugin_version();
47 }
48 }
49
50 return $url;
51 }
52
53 /**
54 * @since 3.06
55 */
56 protected function skip_categories() {
57 return array();
58 }
59
60 /**
61 * @return string
62 */
63 public function get_free_license() {
64 if ( ! isset( self::$free_license ) ) {
65 self::$free_license = get_option( self::$code_option_name );
66 }
67
68 return self::$free_license;
69 }
70
71 /**
72 * Check to make sure the free code is being used.
73 *
74 * @since 4.09.02
75 */
76 public function has_free_access() {
77 $free_access = $this->get_free_license();
78 if ( ! $free_access ) {
79 return false;
80 }
81
82 $templates = $this->get_api_info();
83 $contact_form = 20872734;
84 return isset( $templates[ $contact_form ] ) && ! empty( $templates[ $contact_form ]['url'] );
85 }
86
87 /**
88 * @param string $code the code from the email sent for the API
89 */
90 private static function verify_code( $code ) {
91 $base64_code = base64_encode( $code );
92 $api_url = self::$base_api_url . 'code?l=' . urlencode( $base64_code );
93 $response = wp_remote_get( $api_url );
94
95 self::handle_verify_response_errors_if_any( $response );
96
97 $decoded = json_decode( $response['body'] );
98 $successful = ! empty( $decoded->response );
99
100 if ( $successful ) {
101 self::on_api_verify_code_success( $code );
102 } else {
103 wp_send_json_error( new WP_Error( $decoded->code, $decoded->message ) );
104 }
105 }
106
107 private static function clear_template_cache_before_getting_free_templates() {
108 delete_option( 'frm_form_templates_l' );
109 }
110
111 /**
112 * @param array $response
113 */
114 private static function handle_verify_response_errors_if_any( $response ) {
115 if ( is_wp_error( $response ) ) {
116 wp_send_json_error( $response );
117 }
118
119 if ( ! is_array( $response ) ) {
120 wp_send_json_error();
121 }
122 }
123
124 /**
125 * @param string $code the base64 encoded code
126 */
127 private static function on_api_verify_code_success( $code ) {
128 self::$free_license = $code;
129 update_option( self::$code_option_name, $code, 'no' );
130
131 $data = array();
132 $key = FrmAppHelper::get_param( 'key', '', 'post', 'sanitize_key' );
133
134 // Remove message from Inbox page.
135 $message = new FrmInbox();
136 $message->remove( 'free_templates' );
137
138 if ( $key ) {
139 self::clear_template_cache_before_getting_free_templates();
140
141 $data['urlByKey'] = array();
142 $api = new self();
143 $templates = $api->get_api_info();
144
145 foreach ( $templates as $template ) {
146 if ( ! isset( $template['url'] ) || ! in_array( 'free', $template['categories'], true ) ) {
147 continue;
148 }
149
150 $data['urlByKey'][ $template['key'] ] = $template['url'];
151 }
152
153 if ( ! isset( $data['urlByKey'][ $key ] ) ) {
154 $error = new WP_Error( 400, 'We were unable to retrieve the template' );
155 wp_send_json_error( $error );
156 }
157
158 $data['url'] = $data['urlByKey'][ $key ];
159 }
160
161 wp_send_json_success( $data );
162 }
163
164 /**
165 * AJAX Hook for signing free users up for a template API key
166 */
167 public static function signup() {
168 $code = FrmAppHelper::get_param( 'code', '', 'post' );
169
170 if ( ! $code ) {
171 wp_send_json_error();
172 }
173
174 self::verify_code( $code );
175 }
176 }
177