post_type !== 'html-form' ) { throw new Exception( "Invalid form ID" ); } } else { $posts = get_posts( array( 'post_type' => 'html-form', 'post_name' => $form_id_or_slug, 'numberposts' => 1, ) ); if( empty( $posts ) ) { throw new Exception( 'Invalid form slug' ); } $post = $posts[0]; } static $default_messages; if( $default_messages === null ) { $default_messages = array( 'success' => __('Thank you! We will be in touch soon.', 'html-forms'), 'invalid_email' => __( 'Sorry, that email address looks invalid.', 'html-forms' ), 'required_field_missing' => __( "Please fill in the required fields.", "html-forms" ), 'error' => __( 'Oops. An error occurred.', 'html-forms' ), ); } static $default_settings = array( 'hide_after_success' => 0, 'redirect_url' => '', 'required_fields' =>'', 'email_fields' => '', ); $post_meta = get_post_meta( $post->ID ); $settings = array(); if( ! empty( $post_meta['_hf_settings'][0] ) ) { $settings = (array) maybe_unserialize( $post_meta['_hf_settings'][0] ); } $messages = array(); foreach( $post_meta as $meta_key => $meta_values ) { if( strpos( $meta_key, 'hf_message_' ) === 0 ) { $message_key = substr( $meta_key, strlen( 'hf_message_' ) ); $messages[$message_key] = (string) $meta_values[0]; } } $form = new Form( $post->ID ); $form->title = $post->post_title; $form->slug = $post->post_name; $form->markup = $post->post_content; $form->settings = array_merge( $default_settings, $settings ); $form->messages = array_merge( $default_messages, $messages ); return $form; } /** * @param $form_id * @param array $args * @return Submission[] */ function hf_get_form_submissions( $form_id, array $args = array() ) { $default_args = array( 'offset' => 0, 'limit' => 1000 ); $args = array_merge( $default_args, $args ); global $wpdb; $table = $wpdb->prefix .'hf_submissions'; $results = $wpdb->get_results( $wpdb->prepare( "SELECT s.* FROM {$table} s WHERE s.form_id = %d ORDER BY s.submitted_at DESC LIMIT {$args['offset']}, {$args['limit']};", $form_id ), OBJECT_K ); $submissions = array(); foreach( $results as $key => $object ) { $submission = Submission::from_object( $object ); $submissions[$key] = $submission; } return $submissions; } /** * @param int $submission_id * @return Submission */ function hf_get_form_submission( $submission_id ) { global $wpdb; $table = $wpdb->prefix .'hf_submissions'; $object = $wpdb->get_row( $wpdb->prepare( "SELECT s.* FROM {$table} s WHERE s.id = %d;", $submission_id ), OBJECT ); $submission = Submission::from_object( $object ); return $submission; } /** * @return array */ function hf_get_settings() { static $default_settings = array( 'load_stylesheet' => 0, ); $settings = get_option( 'hf_settings', array() ); return array_merge( $default_settings, $settings ); } function hf_array_get( $array, $key, $default = null ) { if ( is_null( $key ) ) { return $array; } if ( isset( $array[$key] ) ) { return $array[$key]; } foreach (explode( '.', $key ) as $segment) { if ( ! is_array( $array ) || ! array_key_exists( $segment, $array ) ) { return $default; } $array = $array[$segment]; } return $array; } /** * @param string $template * @param array $data * * @return string */ function hf_template( $template, array $data = array() ) { $template = preg_replace_callback( '/\[([ -~]+)\]/', function( $matches ) use ( $data ) { $key = $matches[1]; $replacement = hf_array_get( $data, $key, '' ); return $replacement; }, $template ); return $template; }