PluginProbe
HTML Forms – Simple WordPress Forms Plugin / 1.1.5
HTML Forms – Simple WordPress Forms Plugin v1.1.5
trunk 1.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.2.0 1.3.0 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 All 66 releases
html-forms / src / functions.php

functions.php in HTML Forms – Simple WordPress Forms Plugin 1.1.5, at src/functions.php

239 lines 6.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 use HTML_Forms\Form;
4 use HTML_Forms\Submission;
5
6 /**
7 * @param $form_id_or_slug int|string
8 * @return Form
9 * @throws Exception
10 */
11 function hf_get_form( $form_id_or_slug ) {
12
13 if( is_numeric( $form_id_or_slug ) ) {
14 $post = get_post( $form_id_or_slug );
15
16 if( ! $post || $post->post_type !== 'html-form' ) {
17 throw new Exception( "Invalid form ID" );
18 }
19 } else {
20 $posts = get_posts(
21 array(
22 'post_type' => 'html-form',
23 'name' => $form_id_or_slug,
24 'post_status' => 'publish',
25 'numberposts' => 1,
26 )
27 );
28
29 if( empty( $posts ) ) {
30 throw new Exception( 'Invalid form slug' );
31 }
32 $post = $posts[0];
33 }
34
35 // get all post meta in a single call for performance
36 $post_meta = get_post_meta( $post->ID );
37
38 // grab & merge form settings
39 $default_settings = array(
40 'hide_after_success' => 0,
41 'redirect_url' => '',
42 'required_fields' =>'',
43 'email_fields' => '',
44 );
45 $default_settings = apply_filters( 'hf_form_default_settings', $default_settings );
46 $settings = array();
47 if( ! empty( $post_meta['_hf_settings'][0] ) ) {
48 $settings = (array) maybe_unserialize( $post_meta['_hf_settings'][0] );
49 }
50 $settings = array_merge( $default_settings, $settings );
51
52 // grab & merge form messages
53 $default_messages = array(
54 'success' => __('Thank you! We will be in touch soon.', 'html-forms'),
55 'invalid_email' => __( 'Sorry, that email address looks invalid.', 'html-forms' ),
56 'required_field_missing' => __( "Please fill in the required fields.", "html-forms" ),
57 'error' => __( 'Oops. An error occurred.', 'html-forms' ),
58 );
59 $messages = array();
60 foreach( $post_meta as $meta_key => $meta_values ) {
61 if( strpos( $meta_key, 'hf_message_' ) === 0 ) {
62 $message_key = substr( $meta_key, strlen( 'hf_message_' ) );
63 $messages[$message_key] = (string) $meta_values[0];
64 }
65 }
66 $messages = array_merge( $default_messages, $messages );
67
68 // finally, create form instance
69 $form = new Form( $post->ID );
70 $form->title = $post->post_title;
71 $form->slug = $post->post_name;
72 $form->markup = $post->post_content;
73 $form->settings = $settings;
74 $form->messages = $messages;
75 return $form;
76 }
77
78 /**
79 * @param $form_id
80 * @param array $args
81 * @return Submission[]
82 */
83 function hf_get_form_submissions( $form_id, array $args = array() ) {
84 $default_args = array(
85 'offset' => 0,
86 'limit' => 1000,
87 );
88 $args = array_merge( $default_args, $args );
89
90 global $wpdb;
91 $table = $wpdb->prefix .'hf_submissions';
92 $results = $wpdb->get_results( $wpdb->prepare( "SELECT s.* FROM {$table} s WHERE s.form_id = %d ORDER BY s.submitted_at DESC LIMIT %d, %d;", $form_id, $args['offset'], $args['limit'] ), OBJECT_K );
93 $submissions = array();
94 foreach( $results as $key => $object ) {
95 $submission = Submission::from_object( $object );
96 $submissions[$key] = $submission;
97 }
98 return $submissions;
99 }
100
101 /**
102 * @param int $submission_id
103 * @return Submission
104 */
105 function hf_get_form_submission( $submission_id ) {
106 global $wpdb;
107 $table = $wpdb->prefix .'hf_submissions';
108 $object = $wpdb->get_row( $wpdb->prepare( "SELECT s.* FROM {$table} s WHERE s.id = %d;", $submission_id ), OBJECT );
109 $submission = Submission::from_object( $object );
110 return $submission;
111 }
112 /**
113 * @return array
114 */
115 function hf_get_settings() {
116 $default_settings = array(
117 'load_stylesheet' => 0,
118 'save_submissions' => 1,
119 );
120
121 $settings = get_option( 'hf_settings', array() );
122
123 // merge with default settings
124 $settings = array_merge( $default_settings, $settings );
125
126 /**
127 * Filters the global HTML Forms hf_settings
128 *
129 * @param array $settings
130 */
131 $settings = apply_filters( 'hf_settings', $settings );
132
133 return $settings;
134 }
135
136 /**
137 * Get element from array, allows for dot notation eg: "foo.bar"
138 *
139 * @param array $array
140 * @param string $key
141 * @param mixed $default
142 * @return mixed
143 */
144 function hf_array_get( $array, $key, $default = null ) {
145 if ( is_null( $key ) ) {
146 return $array;
147 }
148
149 if ( isset( $array[$key] ) ) {
150 return $array[$key];
151 }
152
153 foreach (explode( '.', $key ) as $segment) {
154 if ( ! is_array( $array ) || ! array_key_exists( $segment, $array ) ) {
155 return $default;
156 }
157
158 $array = $array[$segment];
159 }
160
161 return $array;
162 }
163
164 /**
165 * Processes template tags like {{user.user_email}}
166 *
167 * @param string $template
168 *
169 * @return string
170 */
171 function hf_template( $template ) {
172 $replacers = new HTML_Forms\TagReplacers();
173 $tags = array(
174 'user' => array( $replacers, 'user' ),
175 'post' => array( $replacers, 'post'),
176 'url_params' => array( $replacers, 'url_params' ),
177 );
178
179 /**
180 * Filters the available tags in HTML Forms templates, like {{user.user_email}}.
181 *
182 * Can be used to add simple scalar replacements or more advanced replacement functions that accept a parameter.
183 *
184 * @param array $tags
185 */
186 $tags = apply_filters( 'hf_template_tags', $tags );
187
188 $template = preg_replace_callback( '/\{\{ *(\w+)(?:\.([\w\.]+))? *(?:\|\| *(\w+))? *\}\}/', function( $matches ) use ( $tags ) {
189 $tag = $matches[1];
190 $param = ! isset( $matches[2] ) ? "" : $matches[2];
191 $default = ! isset( $matches[3] ) ? "" : $matches[3];
192 $value = "";
193
194 // do not change anything if we have no replacer with that key, could be custom user logic or another plugin.
195 if( ! isset( $tags[ $tag] ) ) {
196 return $matches[0];
197 }
198
199 $replacement = $tags[$tag];
200 $value = is_callable( $replacement ) ? call_user_func_array( $replacement, array( $param ) ) : $replacement;
201 return ! empty( $value ) ? $value : $default;
202 }, $template );
203
204 return $template;
205 }
206
207 /**
208 * @param string $string
209 * @param array $data
210 *
211 * @return string
212 */
213 function hf_replace_data_variables( $string, $data = array() ) {
214 $string = preg_replace_callback( '/\[([a-zA-Z0-9\-\._]+)\]/', function( $matches ) use ( $data ) {
215 $key = $matches[1];
216 $replacement = hf_array_get( $data, $key, '' );
217 $replacement = is_array( $replacement ) ? join( ', ', $replacement ) : $replacement;
218 return $replacement;
219 }, $string );
220 return $string;
221 }
222
223 /**
224 * Poor man's file object, compatible with serialization..
225 *
226 * @return bool
227 */
228 function hf_is_file( $file ) {
229 return isset( $file['name'] ) && isset( $file['size'] ) && isset( $file['type'] );
230 }
231
232 /**
233 * @return string
234 */
235 function hf_human_filesize($size, $precision = 2) {
236 for($i = 0; ($size / 1024) > 0.9; $i++, $size /= 1024) {}
237 return round($size, $precision).['B','kB','MB','GB','TB','PB','EB','ZB','YB'][$i];
238 }
239