views = apply_filters( 'wpforms_tools_views', array( esc_html__( 'Import', 'wpforms-lite' ) => array( 'import', 'importer' ), esc_html__( 'Export', 'wpforms-lite' ) => array( 'export' ), esc_html__( 'System Info', 'wpforms-lite' ) => array( 'system' ), ) ); // Determine the current active settings tab. $this->view = ! empty( $_GET['view'] ) ? esc_html( $_GET['view'] ) : 'import'; // If the user tries to load a invalid view fallback to import. if ( ! in_array( $this->view, call_user_func_array( 'array_merge', $this->views ), true ) && ! has_action( 'wpforms_tools_display_tab_' . sanitize_key( $this->view ) ) ) { $this->view = 'import'; } if ( in_array( $this->view, array( 'import', 'importer' ), true ) ) { // If we're on the an import related tab, then build a list of // all available importers. $this->importers = apply_filters( 'wpforms_importers', $this->importers ); // Get all forms for the previous form provider. if ( ! empty( $_GET['provider'] ) ) { $provider = sanitize_key( $_GET['provider'] ); $this->importer_forms = apply_filters( "wpforms_importer_forms_{$provider}", $this->importer_forms ); } // Load the Underscores templates for importers. add_action( 'admin_print_scripts', array( $this, 'importer_templates' ) ); } // Retrieve available forms. $this->forms = wpforms()->form->get( '', array( 'orderby' => 'title', ) ); add_action( 'wpforms_tools_init', array( $this, 'import_export_process' ) ); add_action( 'wpforms_admin_page', array( $this, 'output' ) ); // Hook for addons. do_action( 'wpforms_tools_init' ); } /** * Build the output for the Tools admin page. * * @since 1.3.9 */ public function output() { $show_nav = false; foreach ( $this->views as $view ) { if ( in_array( $this->view, (array) $view, true ) ) { $show_nav = true; break; } } ?>
'; foreach ( $this->views as $label => $view ) { $view = (array) $view; $class = in_array( $this->view, $view, true ) ? ' class="active"' : ''; echo '
  • '; printf( '%s', admin_url( 'admin.php?page=wpforms-tools&view=' . sanitize_key( $view[0] ) ), $class, esc_html( $label ) ); echo '
  • '; } echo ''; } ?>

    check your forms.', 'wpforms-lite' ), array( 'a' => array( 'href' => array(), ), ) ), admin_url( 'admin.php?page=wpforms-overview' ) ); ?>

    view ) { case 'system': $this->system_info_tab(); break; case 'export': $this->export_tab(); break; case 'importer': $this->importer_tab(); break; case 'import': $this->import_tab(); break; default: do_action( 'wpforms_tools_display_tab_' . sanitize_key( $this->view ) ); break; } ?>


    importers ) ) { ?>


    importers[ $slug ]; ?>

      importer_forms ) ) { echo '
    • ' . esc_html__( 'No forms found.', 'wpforms-lite' ) . '
    • '; } else { foreach ( $this->importer_forms as $id => $form ) { printf( '
    • ', esc_attr( $id ), sanitize_text_field( $form ) ); } } ?>
    importer_forms ) ) : ?>
      importer_forms ) ) : ?>

      1', '0', sanitize_text_field( $provider['name'] ) ); ?>


      1', '0', sanitize_text_field( $provider['name'] ) ); ?>

      ' ); ?>

      forms ) ) { echo ''; echo ''; echo ''; } else { echo '

      ' . esc_html__( 'You need to create a form before you can use form export.', 'wpforms-lite' ) . '

      '; } ?>

      template ) { echo '

      ' . esc_html__( 'The following code can be used to register your custom form template. Copy and paste the following code to your theme\'s functions.php file or include it within an external file.', 'wpforms-lite' ) . '

      '; echo '

      ' . sprintf( wp_kses( /* translators: %s - WPForms.com docs URL. */ __( 'For more information see our documentation.', 'wpforms-lite' ), array( 'a' => array( 'href' => array(), 'target' => array(), 'rel' => array(), ), ) ), 'https://wpforms.com/docs/how-to-create-a-custom-form-template/' ) . '

      '; echo '
      '; } ?>

      forms ) ) { echo ''; echo ''; echo ''; } else { echo '

      ' . esc_html__( 'You need to create a form before you can generate a template.', 'wpforms-lite' ) . '

      '; } ?>

      'wpforms', 'no_found_rows' => true, 'nopaging' => true, 'post__in' => array_map( 'intval', $_POST['forms'] ), ) ); foreach ( $forms as $form ) { $export[] = wpforms_decode( $form->post_content ); } ignore_user_abort( true ); if ( ! in_array( 'set_time_limit', explode( ',', ini_get( 'disable_functions' ) ), true ) ) { set_time_limit( 0 ); } nocache_headers(); header( 'Content-Type: application/json; charset=utf-8' ); header( 'Content-Disposition: attachment; filename=wpforms-form-export-' . date( 'm-d-Y' ) . '.json' ); header( 'Expires: 0' ); echo wp_json_encode( $export ); exit; } // Import Form(s). if ( 'import_form' === $_POST['action'] && ! empty( $_FILES['file']['tmp_name'] ) ) { // Add filter of the link rel attr to avoid JSON damage. add_filter( 'wp_targeted_link_rel', '__return_empty_string', 50, 1 ); $ext = strtolower( pathinfo( $_FILES['file']['name'], PATHINFO_EXTENSION ) ); if ( 'json' !== $ext ) { wp_die( esc_html__( 'Please upload a valid .json form export file.', 'wpforms-lite' ), esc_html__( 'Error', 'wpforms-lite' ), array( 'response' => 400, ) ); } $forms = json_decode( file_get_contents( $_FILES['file']['tmp_name'] ), true ); if ( ! empty( $forms ) ) { foreach ( $forms as $form ) { $title = ! empty( $form['settings']['form_title'] ) ? $form['settings']['form_title'] : ''; $desc = ! empty( $form['settings']['form_desc'] ) ? $form['settings']['form_desc'] : ''; $new_id = wp_insert_post( array( 'post_title' => $title, 'post_status' => 'publish', 'post_type' => 'wpforms', 'post_excerpt' => $desc, ) ); if ( $new_id ) { $form['id'] = $new_id; wp_update_post( array( 'ID' => $new_id, 'post_content' => wpforms_encode( $form ), ) ); } } wp_safe_redirect( admin_url( 'admin.php?page=wpforms-tools&view=importexport&wpforms_notice=forms-imported' ) ); exit; } } // Export form template. if ( 'export_template' === $_POST['action'] && ! empty( $_POST['form'] ) ) { $form_data = wpforms()->form->get( absint( $_POST['form'] ), array( 'content_only' => true, ) ); if ( ! $form_data ) { return; } // Define basic data. $name = sanitize_text_field( $form_data['settings']['form_title'] ); $desc = sanitize_text_field( $form_data['settings']['form_desc'] ); $slug = sanitize_key( str_replace( ' ', '_', $form_data['settings']['form_title'] ) ); $class = 'WPForms_Template_' . $slug; // Format template field and settings data. $data = $form_data; $data['meta']['template'] = $slug; $data['fields'] = wpforms_array_remove_empty_strings( $data['fields'] ); $data['settings'] = wpforms_array_remove_empty_strings( $data['settings'] ); unset( $data['id'] ); $data = var_export( $data, true ); $data = str_replace( ' ', "\t", $data ); $data = preg_replace( '/([\t\r\n]+?)array/', 'array', $data ); // Build the final template string. $this->template = <<name = '{$name}'; // Template slug \$this->slug = '{$slug}'; // Template description \$this->description = '{$desc}'; // Template field and settings \$this->data = {$data}; } } new {$class}; endif; EOT; } // End if(). } /** * Get system information. * * Based on a function from Easy Digital Downloads by Pippin Williamson. * * @link https://github.com/easydigitaldownloads/easy-digital-downloads/blob/master/includes/admin/tools.php#L470 * * @since 1.3.9 * * @return string */ public function get_system_info() { global $wpdb; // Get theme info. $theme_data = wp_get_theme(); $theme = $theme_data->Name . ' ' . $theme_data->Version; $return = '### Begin System Info ###' . "\n\n"; // WPForms info. $activated = get_option( 'wpforms_activated', array() ); $return .= '-- WPForms Info' . "\n\n"; if ( ! empty( $activated['pro'] ) ) { $date = $activated['pro'] + ( get_option( 'gmt_offset' ) * 3600 ); $return .= 'Pro: ' . date_i18n( esc_html__( 'M j, Y @ g:ia' ), $date ) . "\n"; } if ( ! empty( $activated['lite'] ) ) { $date = $activated['lite'] + ( get_option( 'gmt_offset' ) * 3600 ); $return .= 'Lite: ' . date_i18n( esc_html__( 'M j, Y @ g:ia' ), $date ) . "\n"; } // Now the basics... $return .= "\n" . '-- Site Info' . "\n\n"; $return .= 'Site URL: ' . site_url() . "\n"; $return .= 'Home URL: ' . home_url() . "\n"; $return .= 'Multisite: ' . ( is_multisite() ? 'Yes' : 'No' ) . "\n"; // WordPress configuration. $return .= "\n" . '-- WordPress Configuration' . "\n\n"; $return .= 'Version: ' . get_bloginfo( 'version' ) . "\n"; $return .= 'Language: ' . ( defined( 'WPLANG' ) && WPLANG ? WPLANG : 'en_US' ) . "\n"; $return .= 'Permalink Structure: ' . ( get_option( 'permalink_structure' ) ? get_option( 'permalink_structure' ) : 'Default' ) . "\n"; $return .= 'Active Theme: ' . $theme . "\n"; $return .= 'Show On Front: ' . get_option( 'show_on_front' ) . "\n"; // Only show page specs if front page is set to 'page'. if ( get_option( 'show_on_front' ) === 'page' ) { $front_page_id = get_option( 'page_on_front' ); $blog_page_id = get_option( 'page_for_posts' ); $return .= 'Page On Front: ' . ( 0 != $front_page_id ? get_the_title( $front_page_id ) . ' (#' . $front_page_id . ')' : 'Unset' ) . "\n"; $return .= 'Page For Posts: ' . ( 0 != $blog_page_id ? get_the_title( $blog_page_id ) . ' (#' . $blog_page_id . ')' : 'Unset' ) . "\n"; } $return .= 'ABSPATH: ' . ABSPATH . "\n"; $return .= 'Table Prefix: ' . 'Length: ' . strlen( $wpdb->prefix ) . ' Status: ' . ( strlen( $wpdb->prefix ) > 16 ? 'ERROR: Too long' : 'Acceptable' ) . "\n"; $return .= 'WP_DEBUG: ' . ( defined( 'WP_DEBUG' ) ? WP_DEBUG ? 'Enabled' : 'Disabled' : 'Not set' ) . "\n"; $return .= 'WPFORMS_DEBUG: ' . ( defined( 'WPFORMS_DEBUG' ) ? WPFORMS_DEBUG ? 'Enabled' : 'Disabled' : 'Not set' ) . "\n"; $return .= 'Memory Limit: ' . WP_MEMORY_LIMIT . "\n"; $return .= 'Registered Post Stati: ' . implode( ', ', get_post_stati() ) . "\n"; // @todo WPForms configuration/specific details. $return .= "\n" . '-- WordPress Uploads/Constants' . "\n\n"; $return .= 'WP_CONTENT_DIR: ' . ( defined( 'WP_CONTENT_DIR' ) ? WP_CONTENT_DIR ? WP_CONTENT_DIR : 'Disabled' : 'Not set' ) . "\n"; $return .= 'WP_CONTENT_URL: ' . ( defined( 'WP_CONTENT_URL' ) ? WP_CONTENT_URL ? WP_CONTENT_URL : 'Disabled' : 'Not set' ) . "\n"; $return .= 'UPLOADS: ' . ( defined( 'UPLOADS' ) ? UPLOADS ? UPLOADS : 'Disabled' : 'Not set' ) . "\n"; $uploads_dir = wp_upload_dir(); $return .= 'wp_uploads_dir() path: ' . $uploads_dir['path'] . "\n"; $return .= 'wp_uploads_dir() url: ' . $uploads_dir['url'] . "\n"; $return .= 'wp_uploads_dir() basedir: ' . $uploads_dir['basedir'] . "\n"; $return .= 'wp_uploads_dir() baseurl: ' . $uploads_dir['baseurl'] . "\n"; // Get plugins that have an update. $updates = get_plugin_updates(); // Must-use plugins. // NOTE: MU plugins can't show updates! $muplugins = get_mu_plugins(); if ( count( $muplugins ) > 0 && ! empty( $muplugins ) ) { $return .= "\n" . '-- Must-Use Plugins' . "\n\n"; foreach ( $muplugins as $plugin => $plugin_data ) { $return .= $plugin_data['Name'] . ': ' . $plugin_data['Version'] . "\n"; } } // WordPress active plugins. $return .= "\n" . '-- WordPress Active Plugins' . "\n\n"; $plugins = get_plugins(); $active_plugins = get_option( 'active_plugins', array() ); foreach ( $plugins as $plugin_path => $plugin ) { if ( ! in_array( $plugin_path, $active_plugins, true ) ) { continue; } $update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[ $plugin_path ]->update->new_version . ')' : ''; $return .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n"; } // WordPress inactive plugins. $return .= "\n" . '-- WordPress Inactive Plugins' . "\n\n"; foreach ( $plugins as $plugin_path => $plugin ) { if ( in_array( $plugin_path, $active_plugins, true ) ) { continue; } $update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[ $plugin_path ]->update->new_version . ')' : ''; $return .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n"; } if ( is_multisite() ) { // WordPress Multisite active plugins. $return .= "\n" . '-- Network Active Plugins' . "\n\n"; $plugins = wp_get_active_network_plugins(); $active_plugins = get_site_option( 'active_sitewide_plugins', array() ); foreach ( $plugins as $plugin_path ) { $plugin_base = plugin_basename( $plugin_path ); if ( ! array_key_exists( $plugin_base, $active_plugins ) ) { continue; } $update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[ $plugin_path ]->update->new_version . ')' : ''; $plugin = get_plugin_data( $plugin_path ); $return .= $plugin['Name'] . ': ' . $plugin['Version'] . $update . "\n"; } } // Server configuration (really just versions). $return .= "\n" . '-- Webserver Configuration' . "\n\n"; $return .= 'PHP Version: ' . PHP_VERSION . "\n"; $return .= 'MySQL Version: ' . $wpdb->db_version() . "\n"; $return .= 'Webserver Info: ' . $_SERVER['SERVER_SOFTWARE'] . "\n"; // PHP configs... now we're getting to the important stuff. $return .= "\n" . '-- PHP Configuration' . "\n\n"; $return .= 'Memory Limit: ' . ini_get( 'memory_limit' ) . "\n"; $return .= 'Upload Max Size: ' . ini_get( 'upload_max_filesize' ) . "\n"; $return .= 'Post Max Size: ' . ini_get( 'post_max_size' ) . "\n"; $return .= 'Upload Max Filesize: ' . ini_get( 'upload_max_filesize' ) . "\n"; $return .= 'Time Limit: ' . ini_get( 'max_execution_time' ) . "\n"; $return .= 'Max Input Vars: ' . ini_get( 'max_input_vars' ) . "\n"; $return .= 'Display Errors: ' . ( ini_get( 'display_errors' ) ? 'On (' . ini_get( 'display_errors' ) . ')' : 'N/A' ) . "\n"; // PHP extensions and such. $return .= "\n" . '-- PHP Extensions' . "\n\n"; $return .= 'cURL: ' . ( function_exists( 'curl_init' ) ? 'Supported' : 'Not Supported' ) . "\n"; $return .= 'fsockopen: ' . ( function_exists( 'fsockopen' ) ? 'Supported' : 'Not Supported' ) . "\n"; $return .= 'SOAP Client: ' . ( class_exists( 'SoapClient', false ) ? 'Installed' : 'Not Installed' ) . "\n"; $return .= 'Suhosin: ' . ( extension_loaded( 'suhosin' ) ? 'Installed' : 'Not Installed' ) . "\n"; // Session stuff. $return .= "\n" . '-- Session Configuration' . "\n\n"; $return .= 'Session: ' . ( isset( $_SESSION ) ? 'Enabled' : 'Disabled' ) . "\n"; // The rest of this is only relevant if session is enabled. if ( isset( $_SESSION ) ) { $return .= 'Session Name: ' . esc_html( ini_get( 'session.name' ) ) . "\n"; $return .= 'Cookie Path: ' . esc_html( ini_get( 'session.cookie_path' ) ) . "\n"; $return .= 'Save Path: ' . esc_html( ini_get( 'session.save_path' ) ) . "\n"; $return .= 'Use Cookies: ' . ( ini_get( 'session.use_cookies' ) ? 'On' : 'Off' ) . "\n"; $return .= 'Use Only Cookies: ' . ( ini_get( 'session.use_only_cookies' ) ? 'On' : 'Off' ) . "\n"; } $return .= "\n" . '### End System Info ###'; return $return; } } new WPForms_Tools();