";
+ echo "\n";
+ } elseif ( $input == 'select' ) {
+ echo "";
+ if ( $this->config[$opt]['datatype'] == 'hash' ) {
+ foreach ( (array) $this->config[$opt]['options'] as $sopt => $sval )
+ echo "$sval \n";
+ } else {
+ foreach ( (array) $this->config[$opt]['options'] as $sopt )
+ echo "$sopt \n";
+ }
+ echo " ";
+ } elseif ( $input == 'multiselect' ) {
+ echo '' . "\n";
+ foreach ( (array) $this->config[$opt]['options'] as $sopt )
+ echo " $sopt \n";
+ echo ' ';
+ } elseif ( $input == 'checkbox' ) {
+ echo " \n";
+ } else { // Only 'text' and 'password' should fall through to here.
+ echo " \n";
+ }
+ if ( $help = apply_filters( $this->get_hook( 'option_help'), $this->config[$opt]['help'], $opt ) )
+ echo "$help \n";
+
+ do_action( $this->get_hook( 'post_display_option' ), $opt );
+ }
+
+ /**
+ * Outputs the descriptive text (and h2 heading) for the options page.
+ *
+ * Intended to be overridden by sub-class.
+ *
+ * @param string $localized_heading_text (optional) Localized page heading text.
+ * @return void
+ */
+ function options_page_description( $localized_heading_text = '' ) {
+ if ( empty( $localized_heading_text ) )
+ $localized_heading_text = $this->name;
+ if ( $localized_heading_text )
+ echo '' . $localized_heading_text . " \n";
+ if ( !$this->disable_contextual_help )
+ echo '' . __( 'See the "Help" link to the top-right of the page for more help.', $this->textdomain ) . "
\n";
+ }
+
+ /**
+ * Outputs the options page for the plugin, and saves user updates to the
+ * options.
+ *
+ * @return void
+ */
+ function options_page() {
+ $options = $this->get_options();
+
+ if ( $this->saved_settings )
+ echo "" . $this->saved_settings_msg . '
';
+
+ $logo = plugins_url( basename( $_GET['page'], '.php' ) . '/c2c_minilogo.png' );
+
+ echo "\n";
+ echo "
textdomain ) . "' />
\n";
+
+ $this->options_page_description();
+
+ do_action( $this->get_hook( 'before_settings_form' ), $this );
+
+ echo "
' . "\n";
+
+ do_action( $this->get_hook( 'after_settings_form' ), $this );
+
+ echo '
' . "\n";
+ }
+
+ /**
+ * Returns the full plugin-specific name for a hook.
+ *
+ * @param string $hook The name of a hook, to be made plugin-specific.
+ * @return string The plugin-specific version of the hook name.
+ */
+ function get_hook( $hook ) {
+ return $this->hook_prefix . '_' . $hook;
+ }
+
+ /**
+ * Returns the URL for the plugin's readme.txt file on wordpress.org/extend/plugins
+ *
+ * @since 005
+ *
+ * @return string The URL
+ */
+ function readme_url() {
+ return 'http://wordpress.org/extend/plugins/' . $this->id_base . '/tags/' . $this->version . '/readme.txt';
+ }
+} // end class
+
+endif; // end if !class_exists()
+
+?>
\ No newline at end of file
diff --git a/src/wp-content/plugins/configure-smtp/c2c_minilogo.png b/src/wp-content/plugins/configure-smtp/c2c_minilogo.png
new file mode 100644
index 00000000..0b58433d
Binary files /dev/null and b/src/wp-content/plugins/configure-smtp/c2c_minilogo.png differ
diff --git a/src/wp-content/plugins/configure-smtp/configure-smtp.php b/src/wp-content/plugins/configure-smtp/configure-smtp.php
new file mode 100644
index 00000000..543b26d6
--- /dev/null
+++ b/src/wp-content/plugins/configure-smtp/configure-smtp.php
@@ -0,0 +1,289 @@
+> Read the accompanying readme.txt file for instructions and documentation.
+=>> Also, visit the plugin's homepage for additional information and updates.
+=>> Or visit: http://wordpress.org/extend/plugins/configure-smtp/
+
+*/
+
+/*
+Copyright (c) 2004-2010 by Scott Reilly (aka coffee2code)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+if ( !class_exists( 'c2c_ConfigureSMTP' ) ) :
+
+require_once( 'c2c-plugin.php' );
+
+class c2c_ConfigureSMTP extends C2C_Plugin_017 {
+
+ var $gmail_config = array(
+ 'host' => 'smtp.gmail.com',
+ 'port' => '465',
+ 'smtp_auth' => true,
+ 'smtp_secure' => 'ssl'
+ );
+
+ /**
+ * Constructor
+ *
+ * @return void
+ */
+ function c2c_ConfigureSMTP() {
+ $this->C2C_Plugin_017( '3.0.1', 'configure-smtp', 'c2c', __FILE__, array() );
+ }
+
+ /**
+ * Initializes the plugin's configuration and localizable text variables.
+ *
+ * @return void
+ */
+ function load_config() {
+ $this->name = __( 'Configure SMTP', $this->textdomain );
+ $this->menu_name = __( 'SMTP', $this->textdomain );
+
+ $this->config = array(
+ 'use_gmail' => array( 'input' => 'checkbox', 'default' => false,
+ 'label' => __( 'Send e-mail via GMail?', $this->textdomain ),
+ 'help' => __( 'Clicking this will override many of the settings defined below. You will need to input your GMail username and password below.', $this->textdomain ),
+ 'input_attributes' => 'onclick="return configure_gmail();"' ),
+ 'host' => array( 'input' => 'text', 'default' => 'localhost', 'require' => true,
+ 'label' => __( 'SMTP host', $this->textdomain ),
+ 'help' => __( 'If "localhost" doesn\'t work for you, check with your host for the SMTP hostname.', $this->textdomain ) ),
+ 'port' => array( 'input' => 'short_text', 'default' => 25, 'datatype' => 'int', 'required' => true,
+ 'label' => __( 'SMTP port', $this->textdomain ),
+ 'help' => __( 'This is generally 25.', $this->textdomain ) ),
+ 'smtp_secure' => array( 'input' => 'select', 'default' => 'None',
+ 'label' => __( 'Secure connection prefix', $this->textdomain ),
+ 'options' => array( '', 'ssl', 'tls' ),
+ 'help' => __( 'Sets connection prefix for secure connections (prefix method must be supported by your PHP install and your SMTP host)', $this->textdomain ) ),
+ 'smtp_auth' => array( 'input' => 'checkbox', 'default' => false,
+ 'label' => __( 'Use SMTPAuth?', $this->textdomain ),
+ 'help' => __( 'If checked, you must provide the SMTP username and password below', $this->textdomain ) ),
+ 'smtp_user' => array( 'input' => 'text', 'default' => '',
+ 'label' => __( 'SMTP username', $this->textdomain ),
+ 'help' => '' ),
+ 'smtp_pass' => array( 'input' => 'password', 'default' => '',
+ 'label' => __( 'SMTP password', $this->textdomain ),
+ 'help' => '' ),
+ 'wordwrap' => array( 'input' => 'short_text', 'default' => '',
+ 'label' => __( 'Wordwrap length', $this->textdomain ),
+ 'help' => __( 'Sets word wrapping on the body of the message to a given number of characters.', $this->textdomain ) ),
+ 'hr' => array(),
+ 'from_email' => array( 'input' => 'text', 'default' => '',
+ 'label' => __( 'Sender e-mail', $this->textdomain ),
+ 'help' => __( 'Sets the From e-mail address for all outgoing messages. Leave blank to use the WordPress default. This value will be used even if you don\'t enable SMTP. NOTE: This may not take effect depending on your mail server and settings, especially if using SMTPAuth (such as for GMail).', $this->textdomain ) ),
+ 'from_name' => array( 'input' => 'text', 'default' => '',
+ 'label' => __( 'Sender name', $this->textdomain ),
+ 'help' => __( 'Sets the From name for all outgoing messages. Leave blank to use the WordPress default. This value will be used even if you don\'t enable SMTP.', $this->textdomain ) )
+ );
+ }
+
+ /**
+ * Override the plugin framework's register_filters() to actually actions against filters.
+ *
+ * @return void
+ */
+ function register_filters() {
+ global $pagenow;
+ if ( 'options-general.php' == $pagenow )
+ add_action( 'admin_print_footer_scripts', array( &$this, 'add_js' ) );
+ add_action( 'admin_init', array( &$this, 'maybe_send_test' ) );
+ add_action( 'phpmailer_init', array( &$this, 'phpmailer_init' ) );
+ add_action( 'wp_mail_from', array( &$this, 'wp_mail_from' ) );
+ add_action( 'wp_mail_from_name', array( &$this, 'wp_mail_from_name' ) );
+ add_action( $this->get_hook( 'after_settings_form' ), array( &$this, 'send_test_form' ) );
+ add_filter( $this->get_hook( 'before_update_option' ), array( &$this, 'maybe_gmail_override' ) );
+ }
+
+ /**
+ * Outputs the text above the setting form
+ *
+ * @return void (Text will be echoed.)
+ */
+ function options_page_description() {
+ $options = $this->get_options();
+ parent::options_page_description( __( 'Configure SMTP Settings', $this->textdomain ) );
+ $str = '
' . __( 'test', $this->textdomain ) . ' ';
+ if ( empty( $options['host'] ) )
+ echo '
' . __( 'SMTP mailing is currently NOT ENABLED because no SMTP host has been specified.' ) . '
';
+ echo '
' . sprintf( __( 'After you have configured your SMTP settings, use the %s to send a test message to yourself.', $this->textdomain ), $str ) . '
';
+ }
+
+ /**
+ * Outputs JavaScript
+ *
+ * @return void (Text is echoed.)
+ */
+ function add_js() {
+ $alert = __( 'Be sure to specify your GMail email address (with the @gmail.com) as the SMTP username, and your GMail password as the SMTP password.', $this->textdomain );
+ echo <<
+ function configure_gmail() {
+ if (jQuery('#use_gmail').attr('checked') == true) {
+ jQuery('#host').val('{$this->gmail_config['host']}');
+ jQuery('#port').val('{$this->gmail_config['port']}');
+ jQuery('#smtp_auth').attr('checked', {$this->gmail_config['smtp_auth']});
+ jQuery('#smtp_secure').val('{$this->gmail_config['smtp_secure']}');
+ if (!jQuery('#smtp_user').val().match(/.+@gmail.com$/) ) {
+ jQuery('#smtp_user').val('USERNAME@gmail.com').focus().get(0).setSelectionRange(0,8);
+ }
+ alert('{$alert}');
+ return true;
+ }
+ }
+
+
+JS;
+ }
+
+ /**
+ * If the 'Use GMail' option is checked, the GMail settings will override whatever the user may have provided
+ *
+ * @param array $options The options array prior to saving
+ * @return array The options array with GMail settings taking precedence, if relevant
+ */
+ function maybe_gmail_override( $options ) {
+ // If GMail is to be used, those settings take precendence
+ if ( $options['use_gmail'] )
+ $options = wp_parse_args( $this->gmail_config, $options );
+ return $options;
+ }
+
+ /**
+ * Sends test e-mail if form was submitted requesting to do so.
+ *
+ */
+ function maybe_send_test() {
+ if ( isset( $_POST[$this->get_form_submit_name( 'submit_test_email' )] ) ) {
+ check_admin_referer( $this->nonce_field );
+ $user = wp_get_current_user();
+ $email = $user->user_email;
+ $timestamp = current_time( 'mysql' );
+ $message = sprintf( __( 'Hi, this is the %s plugin e-mailing you a test message from your WordPress blog.', $this->textdomain ), $this->name );
+ $message .= "\n\n";
+ $message .= sprintf( __( 'This message was sent with this time-stamp: %s', $this->textdomain ), $timestamp );
+ $message .= "\n\n";
+ $message .= __( 'Congratulations! Your blog is properly configured to send e-mail.', $this->textdomain );
+ wp_mail( $email, __( 'Test message from your WordPress blog', $this->textdomain ), $message );
+
+ // Check success
+ global $phpmailer;
+ if ( $phpmailer->ErrorInfo != "" ) {
+ echo '' . __( 'An error was encountered while trying to send the test e-mail.' ) . '
';
+ echo '
';
+ echo '' . $phpmailer->ErrorInfo . '
';
+ echo '' . $phpmailer->smtp->error['error'] . ' ' . $phpmailer->smtp->error['errstr'] . '
';
+ echo ' ';
+ echo '
';
+ } else {
+ echo '' . __( 'Test e-mail sent.', $this->textdomain ) . '
';
+ echo '
' . sprintf( __( 'The body of the e-mail includes this time-stamp: %s.', $this->textdomain ), $timestamp ) . '
';
+ }
+ }
+ }
+
+ /*
+ * Outputs form to send test e-mail.
+ *
+ * @return void (Text will be echoed.)
+ */
+ function send_test_form() {
+ $user = wp_get_current_user();
+ $email = $user->user_email;
+ $action_url = $this->form_action_url();
+ echo ' ' . __( 'Send A Test', $this->textdomain ) . "\n";
+ echo '
' . __( 'Click the button below to send a test email to yourself to see if things are working. Be sure to save any changes you made to the form above before sending the test e-mail. Bear in mind it may take a few minutes for the e-mail to wind its way through the internet.', $this->textdomain ) . "
\n";
+ echo '
' . sprintf( __( 'This e-mail will be sent to your e-mail address, %s.', $this->textdomain ), $email ) . "
\n";
+ echo '
You must save any changes to the form above before attempting to send a test e-mail.
';
+ echo "
';
+ }
+
+ /**
+ * Configures PHPMailer object during its initialization stage
+ *
+ * @param object $phpmailer PHPMailer object
+ * @return void
+ */
+ function phpmailer_init( $phpmailer ) {
+ $options = $this->get_options();
+ // Don't configure for SMTP if no host is provided.
+ if ( empty( $options['host'] ) )
+ return;
+ $phpmailer->IsSMTP();
+ $phpmailer->Host = $options['host'];
+ $phpmailer->Port = $options['port'] ? $options['port'] : 25;
+ $phpmailer->SMTPAuth = $options['smtp_auth'] ? $options['smtp_auth'] : false;
+ if ( $phpmailer->SMTPAuth ) {
+ $phpmailer->Username = $options['smtp_user'];
+ $phpmailer->Password = $options['smtp_pass'];
+ }
+ if ( $options['smtp_secure'] != '' )
+ $phpmailer->SMTPSecure = $options['smtp_secure'];
+ if ( $options['wordwrap'] > 0 )
+ $phpmailer->WordWrap = $options['wordwrap'];
+ }
+
+ /**
+ * Configures the "From:" e-mail address for outgoing e-mails
+ *
+ * @param string $from The "from" e-mail address used by WordPress by default
+ * @return string The potentially new "from" e-mail address, if overridden via the plugin's settings.
+ */
+ function wp_mail_from( $from ) {
+ $options = $this->get_options();
+ if ( $options['from_email'] )
+ $from = $options['from_email'];
+ return $from;
+ }
+
+ /**
+ * Configures the "From:" name for outgoing e-mails
+ *
+ * @param string $from The "from" name used by WordPress by default
+ * @return string The potentially new "from" name, if overridden via the plugin's settings.
+ */
+ function wp_mail_from_name( $from_name ) {
+ $options = $this->get_options();
+ if ( $options['from_name'] )
+ $from_name = wp_specialchars_decode( $options['from_name'], ENT_QUOTES );
+ return $from_name;
+ }
+
+} // end c2c_ConfigureSMTP
+
+$GLOBALS['c2c_configure_smtp'] = new c2c_ConfigureSMTP();
+
+endif; // end if !class_exists()
+
+?>
\ No newline at end of file
diff --git a/src/wp-content/plugins/configure-smtp/configure-smtp.pot b/src/wp-content/plugins/configure-smtp/configure-smtp.pot
new file mode 100644
index 00000000..cd95d13f
--- /dev/null
+++ b/src/wp-content/plugins/configure-smtp/configure-smtp.pot
@@ -0,0 +1,281 @@
+# Translation of the WordPress plugin Configure SMTP 3.0 by Scott Reilly.
+# Copyright (C) 2010 Scott Reilly
+# This file is distributed under the same license as the Configure SMTP package.
+# FIRST AUTHOR , 2010.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Configure SMTP 3.0\n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/configure-smtp\n"
+"POT-Creation-Date: 2010-09-28 11:43-0400\n"
+"PO-Revision-Date: 2010-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: c2c-plugin.php:59
+#, php-format
+msgid "Invalid file specified for C2C_Plugin: %s"
+msgstr ""
+
+#: c2c-plugin.php:241
+msgid "Settings reset."
+msgstr ""
+
+#: c2c-plugin.php:252 c2c-plugin.php:260
+#, php-format
+msgid "A value is required for: \"%s\""
+msgstr ""
+
+#: c2c-plugin.php:269
+#, php-format
+msgid "Expected integer value for: %s"
+msgstr ""
+
+#: c2c-plugin.php:380
+#, php-format
+msgid "More information about %1$s %2$s"
+msgstr ""
+
+#: c2c-plugin.php:381
+msgid "Click for more help on this plugin"
+msgstr ""
+
+#: c2c-plugin.php:382
+msgid " (especially check out the \"Other Notes\" tab, if present)"
+msgstr ""
+
+#: c2c-plugin.php:473
+msgid "Settings"
+msgstr ""
+
+#: c2c-plugin.php:703
+msgid "See the \"Help\" link to the top-right of the page for more help."
+msgstr ""
+
+#: c2c-plugin.php:721
+msgid "A plugin by coffee2code"
+msgstr ""
+
+#: c2c-plugin.php:732
+msgid "Save Changes"
+msgstr ""
+
+#: c2c-plugin.php:733
+msgid "Reset Settings"
+msgstr ""
+
+#: c2c-plugin.php:739
+msgid "Scott Reilly, aka coffee2code"
+msgstr ""
+
+#: c2c-plugin.php:740
+#, php-format
+msgid "This plugin brought to you by %s."
+msgstr ""
+
+#: c2c-plugin.php:741
+msgid "Please consider a donation"
+msgstr ""
+
+#: c2c-plugin.php:742
+msgid "Did you find this plugin useful?"
+msgstr ""
+
+#. #-#-#-#-# configure-smtp.pot (Configure SMTP 3.0) #-#-#-#-#
+#. Plugin Name of the plugin/theme
+#: configure-smtp.php:68
+msgid "Configure SMTP"
+msgstr ""
+
+#: configure-smtp.php:69
+msgid "SMTP"
+msgstr ""
+
+#: configure-smtp.php:73
+msgid "Send e-mail via GMail?"
+msgstr ""
+
+#: configure-smtp.php:74
+msgid ""
+"Clicking this will override many of the settings defined below. You will "
+"need to input your GMail username and password below."
+msgstr ""
+
+#: configure-smtp.php:77
+msgid "SMTP host"
+msgstr ""
+
+#: configure-smtp.php:78
+msgid ""
+"If \"localhost\" doesn't work for you, check with your host for the SMTP "
+"hostname."
+msgstr ""
+
+#: configure-smtp.php:80
+msgid "SMTP port"
+msgstr ""
+
+#: configure-smtp.php:81
+msgid "This is generally 25."
+msgstr ""
+
+#: configure-smtp.php:83
+msgid "Secure connection prefix"
+msgstr ""
+
+#: configure-smtp.php:85
+msgid ""
+"Sets connection prefix for secure connections (prefix method must be "
+"supported by your PHP install and your SMTP host)"
+msgstr ""
+
+#: configure-smtp.php:87
+msgid "Use SMTPAuth?"
+msgstr ""
+
+#: configure-smtp.php:88
+msgid "If checked, you must provide the SMTP username and password below"
+msgstr ""
+
+#: configure-smtp.php:90
+msgid "SMTP username"
+msgstr ""
+
+#: configure-smtp.php:93
+msgid "SMTP password"
+msgstr ""
+
+#: configure-smtp.php:96
+msgid "Wordwrap length"
+msgstr ""
+
+#: configure-smtp.php:97
+msgid ""
+"Sets word wrapping on the body of the message to a given number of "
+"characters."
+msgstr ""
+
+#: configure-smtp.php:100
+msgid "Sender e-mail"
+msgstr ""
+
+#: configure-smtp.php:101
+msgid ""
+"Sets the From e-mail address for all outgoing messages. Leave blank to use "
+"the WordPress default. This value will be used even if you don't enable "
+"SMTP. NOTE: This may not take effect depending on your mail server and "
+"settings, especially if using SMTPAuth (such as for GMail)."
+msgstr ""
+
+#: configure-smtp.php:103
+msgid "Sender name"
+msgstr ""
+
+#: configure-smtp.php:104
+msgid ""
+"Sets the From name for all outgoing messages. Leave blank to use the "
+"WordPress default. This value will be used even if you don't enable SMTP."
+msgstr ""
+
+#: configure-smtp.php:132
+msgid "Configure SMTP Settings"
+msgstr ""
+
+#: configure-smtp.php:133
+msgid "test"
+msgstr ""
+
+#: configure-smtp.php:135
+msgid ""
+"SMTP mailing is currently NOT ENABLED because no SMTP host "
+"has been specified."
+msgstr ""
+
+#: configure-smtp.php:136
+#, php-format
+msgid ""
+"After you have configured your SMTP settings, use the %s to send a test "
+"message to yourself."
+msgstr ""
+
+#: configure-smtp.php:145
+msgid ""
+"Be sure to specify your GMail email address (with the @gmail.com) as the "
+"SMTP username, and your GMail password as the SMTP password."
+msgstr ""
+
+#: configure-smtp.php:189
+#, php-format
+msgid ""
+"Hi, this is the %s plugin e-mailing you a test message from your WordPress "
+"blog."
+msgstr ""
+
+#: configure-smtp.php:191
+#, php-format
+msgid "This message was sent with this time-stamp: %s"
+msgstr ""
+
+#: configure-smtp.php:193
+msgid "Congratulations! Your blog is properly configured to send e-mail."
+msgstr ""
+
+#: configure-smtp.php:194
+msgid "Test message from your WordPress blog"
+msgstr ""
+
+#: configure-smtp.php:199
+msgid "An error was encountered while trying to send the test e-mail."
+msgstr ""
+
+#: configure-smtp.php:206
+msgid "Test e-mail sent."
+msgstr ""
+
+#: configure-smtp.php:207
+#, php-format
+msgid "The body of the e-mail includes this time-stamp: %s."
+msgstr ""
+
+#: configure-smtp.php:221
+msgid "Send A Test"
+msgstr ""
+
+#: configure-smtp.php:222
+msgid ""
+"Click the button below to send a test email to yourself to see if things are "
+"working. Be sure to save any changes you made to the form above before "
+"sending the test e-mail. Bear in mind it may take a few minutes for the e-"
+"mail to wind its way through the internet."
+msgstr ""
+
+#: configure-smtp.php:223
+#, php-format
+msgid "This e-mail will be sent to your e-mail address, %s."
+msgstr ""
+
+#: configure-smtp.php:228
+msgid "Send test e-mail"
+msgstr ""
+
+#. Plugin URI of the plugin/theme
+msgid "http://coffee2code.com/wp-plugins/configure-smtp/"
+msgstr ""
+
+#. Description of the plugin/theme
+msgid ""
+"Configure SMTP mailing in WordPress, including support for sending e-mail "
+"via SSL/TLS (such as GMail)."
+msgstr ""
+
+#. Author of the plugin/theme
+msgid "Scott Reilly"
+msgstr ""
+
+#. Author URI of the plugin/theme
+msgid "http://coffee2code.com"
+msgstr ""
diff --git a/src/wp-content/plugins/configure-smtp/readme.txt b/src/wp-content/plugins/configure-smtp/readme.txt
new file mode 100644
index 00000000..7aa0a8ed
--- /dev/null
+++ b/src/wp-content/plugins/configure-smtp/readme.txt
@@ -0,0 +1,141 @@
+=== Configure SMTP ===
+Contributors: coffee2code
+Donate link: http://coffee2code.com/donate
+Tags: email, smtp, gmail, sendmail, wp_mail, phpmailer, outgoing mail, tls, ssl, security, privacy, wp-phpmailer, coffee2code
+Requires at least: 2.8
+Tested up to: 3.0.1
+Stable tag: 3.0.1
+Version: 3.0.1
+
+Configure SMTP mailing in WordPress, including support for sending e-mail via SSL/TLS (such as GMail).
+
+
+== Description ==
+
+Configure SMTP mailing in WordPress, including support for sending e-mail via SSL/TLS (such as GMail).
+
+This plugin is the renamed, rewritten, and updated version of the wpPHPMailer plugin.
+
+Use this plugin to customize the SMTP mailing system used by default by WordPress to handle *outgoing* e-mails. It offers you the ability to specify:
+
+* SMTP host name
+* SMTP port number
+* If SMTPAuth (authentication) should be used.
+* SMTP username
+* SMTP password
+* If the SMTP connection needs to occur over ssl or tls
+
+In addition, you can instead indicate that you wish to use GMail to handle outgoing e-mail, in which case the above settings are automatically configured to values appropriate for GMail, though you'll need to specify your GMail e-mail (including the "@gmail.com") and password.
+
+Regardless of whether SMTP is enabled, the plugin provides you the ability to define the name and e-mail of the 'From:' field for all outgoing e-mails.
+
+A simple test button is also available that allows you to send a test e-mail to yourself to check if sending e-mail has been properly configured for your blog.
+
+
+== Installation ==
+
+1. Unzip `configure-smtp.zip` inside the `/wp-content/plugins/` directory (or install via the built-in WordPress plugin installer)
+1. Activate the plugin through the 'Plugins' admin menu in WordPress
+1. Click the plugin's `Settings` link next to its `Deactivate` link (still on the Plugins page), or click on the `Settings` -> `SMTP` link, to go to the plugin's admin settings page. Optionally customize the settings (to configure it if the defaults aren't valid for your situation).
+1. (optional) Use the built-in test to see if your blog can properly send out e-mails.
+
+
+== Frequently Asked Questions ==
+
+= I am already able to receive e-mail sent by my blog, so would I have any use or need for this plugin? =
+
+Most likely, no. Not unless you have a preference for having your mail sent out via a different SMTP server, such as GMail.
+
+= How do I find out my SMTP host, and/or if I need to use SMTPAuth and what my username and password for that are? =
+
+Check out the settings for your local e-mail program. More than likely that is configured to use an outgoing SMTP server. Otherwise, contact your host or someone more intimately knowledgeable about your situation.
+
+= I've sent out a few test e-mails using the test button after having tried different values for some of the settings; how do I know which one worked? =
+
+If your settings worked, you should receive the test e-mail at the e-mail address associated with your WordPress blog user account. That e-mail contains a time-stamp which was reported to you by the plugin when the e-mail was sent. If you are trying out various setting values, be sure to record what your settings were and what the time-stamp was when sending with those settings.
+
+
+== Screenshots ==
+
+1. A screenshot of the plugin's admin settings page.
+
+
+== Changelog ==
+
+= 3.0.1 =
+* Update plugin framework to 017 to use password input field instead of text field for SMTP password
+
+= 3.0 =
+* Re-implementation by extending C2C_Plugin_016, which among other things adds support for:
+ * Reset of options to default values
+ * Better sanitization of input values
+ * Offload of core/basic functionality to generic plugin framework
+ * Additional hooks for various stages/places of plugin operation
+ * Easier localization support
+* Add error checking and reporting when attempting to send test e-mail
+* Don't configure the mailer to use SMTP if no host is provided
+* Fix localization support
+* Store plugin instance in global variable, $c2c_configure_smtp, to allow for external manipulation
+* Rename class from 'ConfigureSMTP' to 'c2c_ConfigureSMTP'
+* Remove docs from top of plugin file (all that and more are in readme.txt)
+* Note compatibility with WP 3.0+
+* Minor tweaks to code formatting (spacing)
+* Add Upgrade Notice section to readme.txt
+* Add PHPDoc documentation
+* Add package info to top of file
+* Update copyright date
+* Remove trailing whitespace
+* Update screenshot
+* Update .pot file
+
+= 2.7 =
+* Fix to prevent HTML entities from appearing in the From name value in outgoing e-mails
+* Added full support for localization
+* Added .pot file
+* Noted that overriding the From e-mail value may not take effect depending on mail server and settings, particular if SMTPAuth is used (i.e. GMail)
+* Changed invocation of plugin's install function to action hooked in constructor rather than in global space
+* Update object's option buffer after saving changed submitted by user
+* Miscellaneous tweaks to update plugin to my current plugin conventions
+* Noted compatibility with WP2.9+
+* Dropped compatibility with versions of WP older than 2.8
+* Updated readme.txt
+* Updated copyright date
+
+= 2.6 =
+* Now show settings page JS in footer, and only on the admin settings page
+* Removed hardcoded path to plugins dir
+* Changed permission check
+* Minor reformatting (added spaces)
+* Tweaked readme.txt
+* Removed compatibility with versions of WP older than 2.6
+* Noted compatibility with WP 2.8+
+
+= 2.5 =
+* NEW
+* Added support for GMail, including configuring the various settings to be appropriate for GMail
+* Added support for SMTPSecure setting (acceptable values of '', 'ssl', or 'tls')
+* Added "Settings" link next to "Activate"/"Deactivate" link next to the plugin on the admin plugin listings page
+* CHANGED
+* Tweaked plugin's admin options page to conform to newer WP 2.7 style
+* Tweaked test e-mail subject and body
+* Removed the use_smtp option since WP uses SMTP by default, the plugin can't help you if it isn't using SMTP already, and the plugin should just go ahead and apply if it is active
+* Updated description, installation instructions, extended description, copyright
+* Extended compatibility to WP 2.7+
+* Facilitated translation of some text
+* FIXED
+* Fixed bug where specified wordwrap value wasn't taken into account
+
+= 2.0 =
+* Initial release after rewrite from wpPHPMailer
+
+= pre-2.0 =
+* Earlier versions of this plugin existed as my wpPHPMailer plugin, which due to the inclusion of PHPMailer within WordPress's core and necessary changes to the plugin warranted a rebranding/renaming.
+
+
+== Upgrade Notice ==
+
+= 3.0.1 =
+Minor update. Use password input field for SMTP password instead of regular text input field.
+
+= 3.0 =
+Recommended update! This release includes a major re-implementation, bug fixes, localization support, and more.
\ No newline at end of file
diff --git a/src/wp-content/plugins/configure-smtp/screenshot-1.png b/src/wp-content/plugins/configure-smtp/screenshot-1.png
new file mode 100644
index 00000000..f55af3bb
Binary files /dev/null and b/src/wp-content/plugins/configure-smtp/screenshot-1.png differ
diff --git a/src/wp-content/plugins/contact-form-7-dynamic-text-extension/readme.txt b/src/wp-content/plugins/contact-form-7-dynamic-text-extension/readme.txt
new file mode 100644
index 00000000..9337fe13
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-dynamic-text-extension/readme.txt
@@ -0,0 +1,213 @@
+=== Contact Form 7 Dynamic Text Extension ===
+Contributors: sevenspark
+Donate link: http://bit.ly/bVogDN
+Tags: Contact Form 7, Contact, Contact Form, dynamic, text, input, GET, POST, title, slug
+Requires at least: 2.9
+Tested up to: 3.0.4
+Stable tag: 1.0.4.2
+
+This plugin provides 2 new tag types for the Contact Form 7 Plugin. It allows the dynamic generation of content for a text input box via any shortcode.
+It also offers dynamic hidden field functionality, which can be utilized to dynamically set the Email Recipient (To:) address.
+
+== Description ==
+
+Contact Form 7 is an excellent WordPress plugin, and the CF7 DTX Plugin makes it even more awesome by adding dynamic content capabilities.
+While default values in Contact Form 7 are static. CF7 DTX lets you create pre-populated fields based on other values. Some examples might include:
+
+* Auto-filling a URL
+* Auto-filling a Post ID, title, or slug
+* Pre-populating a Product Number
+* Referencing other content on the site
+* Populating with post info
+* Populating with user info
+* Populating with custom fields
+* Any value you can write a shortcode for
+
+There are many more case-specific examples. I searched for a solution, and there are some decent hacks out there. Many of them are
+explored in this forum topic:
+[Contact Form 7 Input Fields Values as PHP Get-Viarables](http://wordpress.org/support/topic/contact-form-7-input-fields-values-as-php-get-viarables).
+However, they all involved hacking the current Contact Form 7 code, which means next time the plugin is updated their edits will be
+overwritten. That's bad.
+
+This Dynamic Text Extension plugin provides a more elegant solution that leaves the Contact Form 7 Plugin intact.
+
+= WHAT DOES IT DO? =
+
+This plugin provides a new tag type for the Contact Form 7 Plugin. It allows the dynamic generation of content for a text input box via any shortcode.
+For example, it comes with several built-in shortcodes that will allow the Contact Form to be populated from any $_GET PHP variable or any info from the
+get_bloginfo() function, among others. See below for included shortcodes.
+
+= HOW TO USE IT =
+
+After installing and activating the plugin, the Contact Form 7 tag generator will have 2 new tag types: Dynamic Text Field and Dynamic Hidden Field. Most of the options will be
+familiar to Contact Form 7 users. There are two important fields:
+
+**Dynamic Value**
+
+This field takes a shortcode, with two important provisions:
+
+1. The shortcode should NOT include the normal square brackets ([ and ]). So, instead of [CF7_GET key='value'] you would use CF7_GET key='value' .
+2. Any parameters in the shortcode must use single quotes. That is: CF7_GET key='value' and not CF7_GET key="value"
+
+
+**Uneditable Option**
+
+As these types of fields should often remain uneditable by the user, there is a checkbox to turn this option on (Not applicable for hidden fields).
+
+
+= INCLUDED SHORTCODES =
+
+The plugin includes 2 basic shortcodes for use with the Dynamic Text extension. You can write your own as well - any shortcode will work
+
+**PHP GET Variables**
+
+Want to use a variable from the PHP GET array? Just use the CF7_GET shortcode. For example, if you want to get the foo parameter from the url
+http://mysite.com?foo=bar
+
+Enter the following into the "Dynamic Value" input
+
+CF7_GET key='foo'
+
+Your Content Form 7 Tag will look something like this:
+
+[dynamictext dynamicname "CF7_GET key='foo'"]
+
+Your form's dynamicname text input will then be pre-populated with the value of foo, in this case, bar
+
+
+**PHP POST Variables**
+
+New in version 1.0.3!
+
+Grab variables from the $_POST array. The shortcode is much like the GET shortcode:
+
+CF7_POST key='foo'
+
+Your Content Form 7 Tag will look something like this:
+
+[dynamictext dynamicname "CF7_POST key='foo'"]
+
+
+**Blog Info**
+
+Want to grab some information from your blog like the URL or the sitename? Use the CF7_bloginfo shortcode. For example, to get the site's URL:
+
+Enter the following into the "Dynamic Value" input
+
+CF7_bloginfo show='url'
+
+Your Content Form 7 Tag will look something like this:
+
+[dynamictext dynamicname "CF7_bloginfo show='url'"]
+
+Your form's dynamicname text input will then be pre-populated with your site's URL
+
+
+**Post Info**
+
+New in version 1.0.3!
+
+Retrieve information about the current post/page (that the contact form is displayed on). The shortcode works as follows:
+
+CF7_get_post_var key='title' <-- retrieves the Post's Title
+CF7_get_post_var key='slug' <-- retrieves the Post's Slug
+
+You can also retrieve any parameter from the $post object. Just set that as the key value, for example 'post_date'
+
+The Contact Form 7 Tag would look like:
+
+[dynamictext dynamicname "CF7_get_post_var key='title'"]
+
+**Current URL**
+
+New in version 1.0.3!
+
+Retrieve the current URL. The shortcode takes no parameters:
+
+CF7_URL
+
+So your Contact Form 7 Tag would look like:
+
+[dynamictext dynamicname "CF7_URL"]
+
+**Custom Fields**
+
+New in version 1.0.4!
+
+Retrieve custom fields from the current post/page. Just set the custom field as the key in the shortcode.
+
+The dynamic value input becomes:
+
+CF7_get_custom_field key='my_custom_field'
+
+And the tag looks like this:
+
+[dynamictext dynamicname "CF7_get_custom_field key='my_custom_field'"]
+
+For the purposes of including an email address, you can obfuscate the custom field value by setting obfuscate='on' in the shortcode.
+
+**Current User Info**
+
+Get data about the current user - assuming they are logged in. Defaults to user name, but you can set the key to any valid value in
+http://codex.wordpress.org/Function_Reference/get_currentuserinfo
+
+CF7_get_current_user
+
+[dynamictext dynamicname "CF7_get_current_user"]
+
+
+Like the Dynamic Text Extension? Please consider supporting its development by [Donating](http://bit.ly/bVogDN).
+
+Or check out my upcoming premium plugin, [UberMenu - WordPress Mega Menu Plugin](http://wpmegamenu.com)
+
+
+== Installation ==
+
+This section describes how to install the plugin and get it working.
+
+1. Download and install the Contact Form 7 Plugin located at http://wordpress.org/extend/plugins/contact-form-7/
+1. Upload the plugin folder to the '/wp-content/plugins/' directory
+1. Activate the plugin through the 'Plugins' menu in WordPress
+1. You will now have a "Dynamic Text" tag option in the Contact Form 7 tag generator
+
+
+== Frequently Asked Questions ==
+
+None. Yet.
+
+
+== Screenshots ==
+
+1. The new Dynamic Text Field options.
+
+
+== Changelog ==
+
+= 1.0.4.2 =
+* Fixed a bug that created repeating square brackets around dynamic text values in cases where the form doesn't validate and JavaScript is deactivated.
+
+= 1.0.4.1 =
+* Removed trailing whitespace to fix "Headers already sent" errors
+
+= 1.0.4 =
+* Added Current User Info shortcode
+* Added Post Custom Field shortcode (with obfuscation support)
+* Added Hidden Field capability
+
+= 1.0.3 =
+* Added $_POST shortcode
+* Added current post/page variable shortcode
+* Added current URL shortcode
+
+= 1.0.2 =
+* Fixed administrative control panel dependency issue
+
+= 1.0.1 =
+* Fixed dependency issue.
+
+
+== Upgrade Notice ==
+1.0.4.2 fixes a bug that occurs when JavaScript is disabled and a form item doesn't validate on the first try
+1.0.4.1 fixes a "Headers already sent" error that can occur for some users.
+
+1.0.4 upgrade includes hidden field capability and two new shortcodes - current user info and custom post fields.
diff --git a/src/wp-content/plugins/contact-form-7-dynamic-text-extension/screenshot-1.jpg b/src/wp-content/plugins/contact-form-7-dynamic-text-extension/screenshot-1.jpg
new file mode 100644
index 00000000..9915ea2d
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-dynamic-text-extension/screenshot-1.jpg differ
diff --git a/src/wp-content/plugins/contact-form-7-dynamic-text-extension/wpcf7_dynamic_text.php b/src/wp-content/plugins/contact-form-7-dynamic-text-extension/wpcf7_dynamic_text.php
new file mode 100644
index 00000000..32ba605a
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-dynamic-text-extension/wpcf7_dynamic_text.php
@@ -0,0 +1,492 @@
+is_posted() ) {
+ if ( isset( $_POST['_wpcf7_mail_sent'] ) && $_POST['_wpcf7_mail_sent']['ok'] )
+ $value = '';
+ else
+ $value = stripslashes_deep( $_POST[$name] );
+ } else {
+ $value = isset( $values[0] ) ? $values[0] : '';
+ }
+
+ $scval = do_shortcode('['.$value.']');
+ if($scval != '['.$value.']') $value = $scval;
+
+ //echo ''; print_r($options);echo ' ';
+ $readonly = '';
+ if(in_array('uneditable', $options)){
+ $readonly = 'readonly="readonly"';
+ }
+
+ $html = ' ';
+
+ $validation_error = '';
+ if ( is_a( $wpcf7_contact_form, 'WPCF7_ContactForm' ) )
+ $validation_error = $wpcf7_contact_form->validation_error( $name );
+
+ $html = '' . $html . $validation_error . ' ';
+
+ return $html;
+}
+
+
+/* Validation filter */
+
+function wpcf7_dynamictext_validation_filter( $result, $tag ) {
+ global $wpcf7_contact_form;
+
+ $type = $tag['type'];
+ $name = $tag['name'];
+
+ $_POST[$name] = trim( strtr( (string) $_POST[$name], "\n", " " ) );
+
+ if ( 'dynamictext*' == $type ) {
+ if ( '' == $_POST[$name] ) {
+ $result['valid'] = false;
+ $result['reason'][$name] = $wpcf7_contact_form->message( 'invalid_required' );
+ }
+ }
+
+ return $result;
+}
+
+
+/* Tag generator */
+
+function wpcf7_add_tag_generator_dynamictext() {
+ if(function_exists('wpcf7_add_tag_generator')){
+ wpcf7_add_tag_generator( 'dynamictext', __( 'Dynamic Text field', 'wpcf7' ),
+ 'wpcf7-tg-pane-dynamictext', 'wpcf7_tg_pane_dynamictext_' );
+ }
+}
+
+function wpcf7_tg_pane_dynamictext_( &$contact_form ) {
+ wpcf7_tg_pane_dynamictext( 'dynamictext' );
+}
+
+function wpcf7_tg_pane_dynamictext( $type = 'dynamictext' ) {
+?>
+
+is_posted() ) {
+ if ( isset( $_POST['_wpcf7_mail_sent'] ) && $_POST['_wpcf7_mail_sent']['ok'] )
+ $value = '';
+ else
+ $value = stripslashes_deep( $_POST[$name] );
+ } else {
+ $value = isset( $values[0] ) ? $values[0] : '';
+ }
+
+ $scval = do_shortcode('['.$value.']');
+ if($scval != '['.$value.']') $value = $scval;
+ //echo ''; print_r($options);echo ' ';
+
+ $html = ' ';
+
+ //No need to validate, it's a hidden field - we could validate by checking the value hasn't changed, but that seems overkill I think
+ //$validation_error = '';
+ //if ( is_a( $wpcf7_contact_form, 'WPCF7_ContactForm' ) )
+ // $validation_error = $wpcf7_contact_form->validation_error( $name );
+
+ $html = '' . $html . $validation_error . ' ';
+
+ return $html;
+}
+
+
+/* Tag generator */
+
+function wpcf7_add_tag_generator_dynamichidden() {
+ if(function_exists('wpcf7_add_tag_generator')){
+ wpcf7_add_tag_generator( 'dynamichidden', __( 'Dynamic Hidden field', 'wpcf7' ),
+ 'wpcf7-tg-pane-dynamichidden', 'wpcf7_tg_pane_dynamichidden_' );
+ }
+}
+
+function wpcf7_tg_pane_dynamichidden_( &$contact_form ) {
+ wpcf7_tg_pane_dynamichidden( 'dynamichidden' );
+}
+
+function wpcf7_tg_pane_dynamichidden( $type = 'dynamichidden' ) {
+?>
+
+ 0,
+ ), $atts));
+ $value = urldecode($_GET[$key]);
+ return $value;
+}
+add_shortcode('CF7_GET', 'cf7_get');
+
+/* See http://codex.wordpress.org/Function_Reference/get_bloginfo */
+function cf7_bloginfo($atts){
+ extract(shortcode_atts(array(
+ 'show' => 'name'
+ ), $atts));
+
+ return get_bloginfo($show);
+}
+add_shortcode('CF7_bloginfo', 'cf7_bloginfo');
+
+/* Insert a $_POST variable (submitted form value)*/
+function cf7_post($atts){
+ extract(shortcode_atts(array(
+ 'key' => -1,
+ ), $atts));
+ if($key == -1) return '';
+ $val = $_POST[$key];
+ return $val;
+}
+add_shortcode('CF7_POST', 'cf7_post');
+
+/* Insert a $post (Blog Post) Variable */
+function cf7_get_post_var($atts){
+ extract(shortcode_atts(array(
+ 'key' => 'post_title',
+ ), $atts));
+
+ switch($key){
+ case 'slug':
+ $key = 'post_name';
+ break;
+ case 'title':
+ $key = 'post_title';
+ break;
+ }
+
+ global $post;
+ //echo ''; print_r($post); echo ' ';
+ $val = $post->$key;
+ return $val;
+}
+add_shortcode('CF7_get_post_var', 'cf7_get_post_var');
+
+/* Insert the current URL */
+function cf7_url(){
+ $pageURL = 'http';
+ if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
+ $pageURL .= "://";
+ if ($_SERVER["SERVER_PORT"] != "80") {
+ $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
+ } else {
+ $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
+ }
+ return $pageURL;
+}
+add_shortcode('CF7_URL', 'cf7_url');
+
+/* Insert a Custom Post Field
+ * New in 1.0.4
+ */
+function cf7_get_custom_field($atts){
+ extract(shortcode_atts(array(
+ 'key' => '',
+ 'post_id' => -1,
+ 'obfuscate' => 'off'
+ ), $atts));
+
+ if($post_id < 0){
+ global $post;
+ if(isset($post)) $post_id = $post->ID;
+ }
+
+ if($post_id < 0 || empty($key)) return '';
+
+ $val = get_post_meta($post_id, $key, true);
+
+ if($obfuscate == 'on'){
+ $val = cf7dtx_obfuscate($val);
+ }
+
+ return $val;
+
+}
+add_shortcode('CF7_get_custom_field', 'cf7_get_custom_field');
+
+/* Insert information about the current user
+ * New in 1.0.4
+ * See http://codex.wordpress.org/Function_Reference/get_currentuserinfo
+ */
+function cf7_get_current_user($atts){
+ extract(shortcode_atts(array(
+ 'key' => 'user_login',
+ ), $atts));
+
+ global $current_user;
+ get_currentuserinfo();
+
+ $val = $current_user->$key;
+ return $val;
+}
+add_shortcode('CF7_get_current_user', 'cf7_get_current_user');
+
+function cf7dtx_obfuscate($val){
+ $link = '';
+ foreach(str_split($val) as $letter)
+ $link .= ''.ord($letter).';';
+ return $link;
+}
+
+function cf7dtx_cf7com_links() {
+ $links = '';
+ return $links;
+}
+add_filter('wpcf7_cf7com_links', 'cf7dtx_cf7com_links');
+
+/*function obf($atts){
+ extract(shortcode_atts(array(
+ 'val' => ''
+ ), $atts));
+ return $val.' : '. cf7dtx_obfuscate($val);
+}
+add_shortcode('obf', 'obf');*/
+
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBEvalutator.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBEvalutator.php
new file mode 100644
index 00000000..313db919
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBEvalutator.php
@@ -0,0 +1,31 @@
+.
+*/
+
+interface CF7DBEvalutator {
+
+ /**
+ * Evaluate expression against input data
+ * @param $data array [ key => value]
+ * @return boolean result of evaluating $data against expression
+ */
+ public function evaluate(&$data);
+
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBInstallIndicator.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBInstallIndicator.php
new file mode 100644
index 00000000..dd22173b
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBInstallIndicator.php
@@ -0,0 +1,189 @@
+.
+*/
+require_once('CF7DBOptionsManager.php');
+
+/**
+ * The methods in this class are used to track whether or not the plugin has been installed.
+ * It writes a value in options to indicate that this plugin is installed.
+ *
+ * @author Michael Simpson
+ */
+
+abstract class CF7DBInstallIndicator extends CF7DBOptionsManager {
+
+ const optionInstalled = '_installed';
+ const optionVersion = '_version';
+
+ /**
+ * @return bool indicating if the plugin is installed already
+ */
+ public function isInstalled() {
+ return $this->getOption(self::optionInstalled) == true;
+ }
+
+ /**
+ * Note in DB that the plugin is installed
+ * @return null
+ */
+ protected function markAsInstalled() {
+ return $this->updateOption(self::optionInstalled, true);
+ }
+
+ /**
+ * Note in DB that the plugin is uninstalled
+ * @return bool returned form delete_option.
+ * true implies the plugin was installed at the time of this call,
+ * false implies it was not.
+ */
+ protected function markAsUnInstalled() {
+ return $this->deleteOption(self::optionInstalled);
+ }
+
+ /**
+ * Set a version string in the options. This is useful if you install upgrade and
+ * need to check if an older version was installed to see if you need to do certain
+ * upgrade housekeeping (e.g. changes to DB schema).
+ * @param $version
+ * @return null
+ */
+ protected function getVersionSaved() {
+ return $this->getOption(self::optionVersion);
+ }
+
+ /**
+ * Set a version string in the options.
+ * need to check if
+ * @param $version string best practice: use a dot-delimited string like '1.2.3' so version strings can be easily
+ * compared using version_compare (http://php.net/manual/en/function.version-compare.php)
+ * @return null
+ */
+ protected function setVersionSaved($version) {
+ return $this->updateOption(self::optionVersion, $version);
+ }
+
+ /**
+ * @abstract
+ * @return string name of the main plugin file that has the header section with
+ * "Plugin Name", "Version", "Description", "Text Domain", etc.
+ */
+ protected abstract function getMainPluginFileName();
+
+ /**
+ * Get a value for input key in the header section of main plugin file.
+ * E.g. "Plugin Name", "Version", "Description", "Text Domain", etc.
+ * @return string if found, otherwise null
+ */
+ public function getPluginHeaderValue($key) {
+ // Read the string from the comment header of the main plugin file
+ $data = file_get_contents($this->getPluginDir() . DIRECTORY_SEPARATOR . $this->getMainPluginFileName());
+ $match = array();
+ preg_match('/' . $key . ':\s*(\S+)/', $data, $match);
+ if (count($match) >= 1) {
+ return $match[1];
+ }
+ return null;
+ }
+
+ /**
+ * If your subclass of this class lives in a different directory,
+ * override this method with the exact same code. Since __FILE__ will
+ * be different, you will then get the right dir returned.
+ * @return string
+ */
+ protected function getPluginDir() {
+ return dirname(__FILE__);
+ }
+
+ /**
+ * Version of this code.
+ * Best practice: define version strings to be easily compared using version_compare()
+ * (http://php.net/manual/en/function.version-compare.php)
+ * NOTE: You should manually make this match the SVN tag for your main plugin file 'Version' release and 'Stable tag' in readme.txt
+ * @return string
+ */
+ public function getVersion() {
+ return $this->getPluginHeaderValue('Version');
+ }
+
+
+ /**
+ * Useful when checking for upgrades, can tell if the currently installed version is earlier than the
+ * newly installed code. This case indicates that an upgrade has been installed and this is the first time it
+ * has been activated, so any upgrade actions should be taken.
+ * @return bool true if the version saved in the options is earlier than the version declared in getVersion().
+ * true indicates that new code is installed and this is the first time it is activated, so upgrade actions
+ * should be taken. Assumes that version string comparable by version_compare, examples: '1', '1.1', '1.1.1', '2.0', etc.
+ */
+ public function isInstalledCodeAnUpgrade() {
+ return $this->isSavedVersionLessThan($this->getVersion());
+ }
+
+ /**
+ * Used to see if the installed code is an earlier version than the input version
+ * @param $aVersion string
+ * @return bool true if the saved version is earlier (by natural order) than the input version
+ */
+ public function isSavedVersionLessThan($aVersion) {
+ return $this->isVersionLessThan($this->getVersionSaved(), $aVersion);
+ }
+
+ /**
+ * Used to see if the installed code is the same or earlier than the input version.
+ * Useful when checking for an upgrade. If you haven't specified the number of the newer version yet,
+ * but the last version (installed) was 2.3 (for example) you could check if
+ * For example, $this->isSavedVersionLessThanEqual('2.3') == true indicates that the saved version is not upgraded
+ * past 2.3 yet and therefore you would perform some appropriate upgrade action.
+ * @param $aVersion string
+ * @return bool true if the saved version is earlier (by natural order) than the input version
+ */
+ public function isSavedVersionLessThanEqual($aVersion) {
+ return $this->isVersionLessThanEqual($this->getVersionSaved(), $aVersion);
+ }
+
+ /**
+ * @param $version1 string a version string such as '1', '1.1', '1.1.1', '2.0', etc.
+ * @param $version2 string a version string such as '1', '1.1', '1.1.1', '2.0', etc.
+ * @return bool true if version_compare of $versions1 and $version2 shows $version1 as the same or earlier
+ */
+ public function isVersionLessThanEqual($version1, $version2) {
+ return (version_compare($version1, $version2) <= 0);
+ }
+
+ /**
+ * @param $version1 string a version string such as '1', '1.1', '1.1.1', '2.0', etc.
+ * @param $version2 string a version string such as '1', '1.1', '1.1.1', '2.0', etc.
+ * @return bool true if version_compare of $versions1 and $version2 shows $version1 as earlier
+ */
+ public function isVersionLessThan($version1, $version2) {
+ return (version_compare($version1, $version2) < 0);
+ }
+
+ /**
+ * Record the installed version to options.
+ * This helps track was version is installed so when an upgrade is installed, it should call this when finished
+ * upgrading to record the new current version
+ * @return void
+ */
+ protected function saveInstalledVersion() {
+ $this->setVersionSaved($this->getVersion());
+ }
+
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBOptionsManager.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBOptionsManager.php
new file mode 100644
index 00000000..4c790a29
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBOptionsManager.php
@@ -0,0 +1,405 @@
+.
+*/
+
+/**
+ * Manage options associated with the Plugin.
+ * 1. Prefix all options so they are saved in the database without name conflict
+ * 2. Creates a default administration panel to setting options
+ *
+ * NOTE: instead of using WP add_option(), update_option() and delete_option,
+ * use $this->addOption(), updateOption(), and deleteOption() wrapper methods
+ * because they enforce added a prefix to option names in the database
+ *
+ * @author Michael Simpson
+ */
+
+class CF7DBOptionsManager {
+
+ public function getOptionNamePrefix() {
+ return get_class($this) . '_';
+ }
+
+
+ /**
+ * Define your options meta data here as an array, where each element in the array
+ * @return array of key=>display-name and/or key=>array(display-name, choice1, choice2, ...)
+ * key: an option name for the key (this name will be given a prefix when stored in
+ * the database to ensure it does not conflict with other plugin options)
+ * value: can be one of two things:
+ * (1) string display name for displaying the name of the option to the user on a web page
+ * (2) array where the first element is a display name (as above) and the rest of
+ * the elements are choices of values that the user can select
+ * e.g.
+ * array(
+ * 'item' => 'Item:', // key => display-name
+ * 'rating' => array( // key => array ( display-name, choice1, choice2, ...)
+ * 'CanDoOperationX' => array('Can do Operation X', 'Administrator', 'Editor', 'Author', 'Contributor', 'Subscriber'),
+ * 'Rating:', 'Excellent', 'Good', 'Fair', 'Poor')
+ */
+ public function getOptionMetaData() {
+ return array();
+ }
+
+ /**
+ * @return array of string name of options
+ */
+ public function getOptionNames() {
+ return array_keys($this->getOptionMetaData());
+ }
+
+ /**
+ * Override this method to initialize options to default values and save to the database with add_option
+ * @return void
+ */
+ protected function initOptions() {
+ }
+
+ /**
+ * Cleanup: remove all options from the DB
+ * @return void
+ */
+ protected function deleteSavedOptions() {
+ $optionMetaData = $this->getOptionMetaData();
+ if (is_array($optionMetaData)) {
+ foreach ($optionMetaData as $aOptionKey => $aOptionMeta) {
+ $prefixedOptionName = $this->prefix($aOptionKey); // how it is stored in DB
+ delete_option($prefixedOptionName);
+ }
+ }
+ }
+
+ /**
+ * @return string display name of the plugin to show as a name/title in HTML.
+ * Just returns the class name. Override this method to return something more readable
+ */
+ public function getPluginDisplayName() {
+ return get_class($this);
+ }
+
+ /**
+ * Get the prefixed version input $name suitable for storing in WP options
+ * Idempotent: if $optionName is already prefixed, it is not prefixed again, it is returned without change
+ * @param $name string option name to prefix. Defined in settings.php and set as keys of $this->optionMetaData
+ * @return string
+ */
+ public function prefix($name) {
+ $optionNamePrefix = $this->getOptionNamePrefix();
+ if (strpos($name, $optionNamePrefix) === 0) { // 0 but not false
+ return $name; // already prefixed
+ }
+ return $optionNamePrefix . $name;
+ }
+
+ /**
+ * Remove the prefix from the input $name.
+ * Idempotent: If no prefix found, just returns what was input.
+ * @param $name string
+ * @return string $optionName without the prefix.
+ */
+ public function &unPrefix($name) {
+ $optionNamePrefix = $this->getOptionNamePrefix();
+ if (strpos($name, $optionNamePrefix) === 0) {
+ return substr($name, strlen($optionNamePrefix));
+ }
+ return $name;
+ }
+
+ /**
+ * A wrapper function delegating to WP get_option() but it prefixes the input $optionName
+ * to enforce "scoping" the options in the WP options table thereby avoiding name conflicts
+ * @param $optionName string defined in settings.php and set as keys of $this->optionMetaData
+ * @param $default string default value to return if the option is not set
+ * @return string the value from delegated call to get_option(), or optional default value
+ * if option is not set.
+ */
+ public function getOption($optionName, $default = null) {
+ $prefixedOptionName = $this->prefix($optionName); // how it is stored in DB
+ $retVal = get_option($prefixedOptionName);
+ if (!$retVal && $default) {
+ $retVal = $default;
+ }
+ return $retVal;
+ }
+
+ /**
+ * A wrapper function delegating to WP delete_option() but it prefixes the input $optionName
+ * to enforce "scoping" the options in the WP options table thereby avoiding name conflicts
+ * @param $optionName string defined in settings.php and set as keys of $this->optionMetaData
+ * @return bool from delegated call to delete_option()
+ */
+ public function deleteOption($optionName) {
+ $prefixedOptionName = $this->prefix($optionName); // how it is stored in DB
+ return delete_option($prefixedOptionName);
+ }
+
+ /**
+ * A wrapper function delegating to WP add_option() but it prefixes the input $optionName
+ * to enforce "scoping" the options in the WP options table thereby avoiding name conflicts
+ * @param $optionName string defined in settings.php and set as keys of $this->optionMetaData
+ * @param $value mixed the new value
+ * @return null from delegated call to delete_option()
+ */
+ public function addOption($optionName, $value) {
+ $prefixedOptionName = $this->prefix($optionName); // how it is stored in DB
+ return add_option($prefixedOptionName, $value);
+ }
+
+ /**
+ * A wrapper function delegating to WP add_option() but it prefixes the input $optionName
+ * to enforce "scoping" the options in the WP options table thereby avoiding name conflicts
+ * @param $optionName string defined in settings.php and set as keys of $this->optionMetaData
+ * @param $value mixed the new value
+ * @return null from delegated call to delete_option()
+ */
+ public function updateOption($optionName, $value) {
+ $prefixedOptionName = $this->prefix($optionName); // how it is stored in DB
+ return update_option($prefixedOptionName, $value);
+ }
+
+ /**
+ * A Role Option is an option defined in getOptionMetaData() as a choice of WP standard roles, e.g.
+ * 'CanDoOperationX' => array('Can do Operation X', 'Administrator', 'Editor', 'Author', 'Contributor', 'Subscriber')
+ * The idea is use an option to indicate what role level a user must minimally have in order to do some operation.
+ * So if a Role Option 'CanDoOperationX' is set to 'Editor' then users which role 'Editor' or above should be
+ * able to do Operation X.
+ * Also see: canUserDoRoleOption()
+ * @param $optionName
+ * @return string role name
+ */
+ public function getRoleOption($optionName) {
+ $roleAllowed = $this->getOption($optionName);
+ if (!$roleAllowed || $roleAllowed == '') {
+ $roleAllowed = 'Administrator';
+ }
+ return $roleAllowed;
+ }
+
+ /**
+ * Given a WP role name, return a WP capability which only that role and roles above it have
+ * http://codex.wordpress.org/Roles_and_Capabilities
+ * @param $roleName
+ * @return string a WP capability or '' if unknown input role
+ */
+ protected function roleToCapability($roleName) {
+ switch ($roleName) {
+ case 'Super Admin':
+ return 'manage_options';
+ case 'Administrator':
+ return 'manage_options';
+ case 'Editor':
+ return 'publish_pages';
+ case 'Author':
+ return 'publish_posts';
+ case 'Contributor':
+ return 'edit_posts';
+ case 'Subscriber':
+ return 'read';
+ case 'Anyone':
+ return 'read';
+ }
+ return '';
+ }
+
+ /**
+ * @param $roleName string a standard WP role name like 'Administrator'
+ * @return bool
+ */
+ public function isUserRoleEqualOrBetterThan($roleName) {
+ if ('Anyone' == $roleName) {
+ return true;
+ }
+ $capability = $this->roleToCapability($roleName);
+ return current_user_can($capability);
+ }
+
+ /**
+ * @param $optionName string name of a Role option (see comments in getRoleOption())
+ * @return bool indicates if the user has adequate permissions
+ */
+ public function canUserDoRoleOption($optionName) {
+ $roleAllowed = $this->getRoleOption($optionName);
+ if ('Anyone' == $roleAllowed) {
+ return true;
+ }
+ return $this->isUserRoleEqualOrBetterThan($roleAllowed);
+ }
+
+ /**
+ * see: http://codex.wordpress.org/Creating_Options_Pages
+ * @return void
+ */
+ public function createSettingsMenu() {
+ $pluginName = $this->getPluginDisplayName();
+ //create new top-level menu
+ add_menu_page($pluginName . ' Plugin Settings',
+ $pluginName,
+ 'administrator',
+ get_class($this),
+ array(&$this, 'settingsPage')
+ /*,plugins_url('/images/icon.png', __FILE__)*/); // if you call 'plugins_url; be sure to "require_once" it
+
+ //call register settings function
+ add_action('admin_init', array(&$this, 'registerSettings'));
+ }
+
+ public function registerSettings() {
+ $settingsGroup = get_class($this) . '-settings-group';
+ $optionMetaData = $this->getOptionMetaData();
+ foreach ($optionMetaData as $aOptionKey => $aOptionMeta) {
+ register_setting($settingsGroup, $aOptionMeta);
+ }
+ }
+
+ /**
+ * Creates HTML for the Administration page to set options for this plugin.
+ * Override this method to create a customized page.
+ * @return void
+ */
+ public function settingsPage() {
+ if (!current_user_can('manage_options')) {
+ wp_die(__('You do not have sufficient permissions to access this page.', 'contact-form-7-to-database-extension'));
+ }
+
+ $optionMetaData = $this->getOptionMetaData();
+
+ // Save Posted Options
+ if ($optionMetaData != null) {
+ foreach ($optionMetaData as $aOptionKey => $aOptionMeta) {
+ if (isset($_POST[$aOptionKey])) {
+ $this->updateOption($aOptionKey, $_POST[$aOptionKey]);
+ }
+ }
+ }
+
+ // HTML for the page
+ $settingsGroup = get_class($this) . '-settings-group';
+ ?>
+
+
+
+
+
getPluginDisplayName(); echo ' '; _e('Settings', 'contact-form-7-to-database-extension'); ?>
+
+
+
+ = 2) { // Drop-down list
+ $choices = array_slice($aOptionMeta, 1);
+ ?>
+
+
+ >getOptionValueI18nString($aChoice) ?>
+
+
+
+
+ get_results('select version() as mysqlversion');
+ if (!empty($rows)) {
+ return $rows[0]->mysqlversion;
+ }
+ return false;
+ }
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBPlugin.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBPlugin.php
new file mode 100644
index 00000000..ebfd0e66
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBPlugin.php
@@ -0,0 +1,674 @@
+.
+*/
+
+require_once('CF7DBPluginLifeCycle.php');
+require_once('CFDBShortcodeTable.php');
+require_once('CFDBShortcodeDataTable.php');
+require_once('CFDBShortcodeValue.php');
+require_once('CFDBShortcodeCount.php');
+require_once('CFDBShortcodeJson.php');
+require_once('CFDBShortcodeHtml.php');
+require_once('CFDBShortcodeExportUrl.php');
+
+/**
+ * Implementation for CF7DBPluginLifeCycle.
+ */
+
+class CF7DBPlugin extends CF7DBPluginLifeCycle {
+
+ public function getPluginDisplayName() {
+ return 'Contact Form to DB Extension';
+ }
+
+ protected function getMainPluginFileName() {
+ return 'contact-form-7-db.php';
+ }
+
+ public function getOptionMetaData() {
+ return array(
+ //'_version' => array('Installed Version'), // For testing upgrades
+ 'Donated' => array(__('I have donated to this plugin', 'contact-form-7-to-database-extension'), 'false', 'true'),
+ 'IntegrateWithCF7' => array(__('Capture form submissions from Contact Form 7 Plugin', 'contact-form-7-to-database-extension'), 'true', 'false'),
+ 'IntegrateWithFSCF' => array(__('Capture form submissions Fast Secure Contact Form Plugin', 'contact-form-7-to-database-extension'), 'true', 'false'),
+ 'CanSeeSubmitData' => array(__('Can See Submission data', 'contact-form-7-to-database-extension'),
+ 'Administrator', 'Editor', 'Author', 'Contributor', 'Subscriber', 'Anyone'),
+ 'CanSeeSubmitDataViaShortcode' => array(__('Can See Submission when using shortcodes', 'contact-form-7-to-database-extension'),
+ 'Administrator', 'Editor', 'Author', 'Contributor', 'Subscriber', 'Anyone'),
+ 'CanChangeSubmitData' => array(__('Can Edit/Delete Submission data', 'contact-form-7-to-database-extension'),
+ 'Administrator', 'Editor', 'Author', 'Contributor', 'Subscriber'),
+ 'MaxRows' => array(__('Maximum number of rows to retrieve from the DB for the Admin display', 'contact-form-7-to-database-extension')),
+ 'UseDataTablesJS' => array(__('Use Javascript-enabled tables in Admin Database page', 'contact-form-7-to-database-extension'), 'true', 'false'),
+ 'ShowLineBreaksInDataTable' => array(__('Show line breaks in submitted data table', 'contact-form-7-to-database-extension'), 'true', 'false'),
+ 'UseCustomDateTimeFormat' => array(__('Use Custom Date-Time Display Format (below)', 'contact-form-7-to-database-extension'), 'true', 'false'),
+ 'SubmitDateTimeFormat' => array('' . __('Date-Time Display Format', 'contact-form-7-to-database-extension') . ' '),
+ 'ShowFileUrlsInExport' => array(__('Export URLs instead of file names for uploaded files', 'contact-form-7-to-database-extension'), 'false', 'true'),
+ 'NoSaveFields' => array(__('Do not save fields in DB named (comma-separated list, no spaces)', 'contact-form-7-to-database-extension')),
+ 'NoSaveForms' => array(__('Do not save forms in DB named (comma-separated list, no spaces)', 'contact-form-7-to-database-extension')),
+ 'SaveCookieData' => array(__('Save Cookie Data with Form Submissions', 'contact-form-7-to-database-extension'), 'false', 'true'),
+ 'SaveCookieNames' => array(__('Save only cookies in DB named (comma-separated list, no spaces, and above option must be set to true)', 'contact-form-7-to-database-extension')),
+ 'ShowQuery' => array(__('Show the query used to display results', 'contact-form-7-to-database-extension'), 'false', 'true'),
+ 'DropOnUninstall' => array(__('Drop this plugin\'s Database table on uninstall', 'contact-form-7-to-database-extension'), 'true', 'false'),
+ //'SubmitTableNameOverride' => array(__('Use this table to store submission data rather than the default (leave blank for default)', 'contact-form-7-to-database-extension'))
+ );
+ }
+
+ protected function getOptionValueI18nString($optionValue) {
+ switch ($optionValue) {
+ case 'true':
+ return __('true', 'contact-form-7-to-database-extension');
+ case 'false':
+ return __('false', 'contact-form-7-to-database-extension');
+
+ case 'Administrator':
+ return __('Administrator', 'contact-form-7-to-database-extension');
+ case 'Editor':
+ return __('Editor', 'contact-form-7-to-database-extension');
+ case 'Author':
+ return __('Author', 'contact-form-7-to-database-extension');
+ case 'Contributor':
+ return __('Contributor', 'contact-form-7-to-database-extension');
+ case 'Subscriber':
+ return __('Subscriber', 'contact-form-7-to-database-extension');
+ case 'Anyone':
+ return __('Anyone', 'contact-form-7-to-database-extension');
+ }
+ return $optionValue;
+ }
+
+ public function upgrade() {
+ global $wpdb;
+ $upgradeOk = true;
+ $savedVersion = $this->getVersionSaved();
+ if (!$savedVersion) { // Prior to storing version in options (pre 1.2)
+ // DB Schema Upgrade to support i18n using UTF-8
+ $tableName = $this->getSubmitsTableName();
+ $wpdb->show_errors();
+ $upgradeOk &= false !== $wpdb->query("ALTER TABLE `$tableName` MODIFY form_name VARCHAR(127) CHARACTER SET utf8");
+ $upgradeOk &= false !== $wpdb->query("ALTER TABLE `$tableName` MODIFY field_name VARCHAR(127) CHARACTER SET utf8");
+ $upgradeOk &= false !== $wpdb->query("ALTER TABLE `$tableName` MODIFY field_value longtext CHARACTER SET utf8");
+ $wpdb->hide_errors();
+
+ // Remove obsolete options
+ $this->deleteOption('_displayName');
+ $this->deleteOption('_metatdata');
+ $savedVersion = '1.0';
+ }
+
+ if ($this->isVersionLessThan($savedVersion, '1.8')) {
+ if ($this->isVersionLessThan($savedVersion, '1.4.5')) {
+ if ($this->isVersionLessThan($savedVersion, '1.3.1')) {
+ // Version 1.3.1 update
+ $tableName = $this->getSubmitsTableName();
+ $wpdb->show_errors();
+ $upgradeOk &= false !== $wpdb->query("ALTER TABLE `$tableName` ADD COLUMN `field_order` INTEGER");
+ $upgradeOk &= false !== $wpdb->query("ALTER TABLE `$tableName` ADD COLUMN `file` LONGBLOB");
+ $upgradeOk &= false !== $wpdb->query("ALTER TABLE `$tableName` ADD INDEX `submit_time_idx` ( `submit_time` )");
+ $wpdb->hide_errors();
+ }
+
+ // Version 1.4.5 update
+ if (!$this->getOption('CanSeeSubmitDataViaShortcode')) {
+ $this->addOption('CanSeeSubmitDataViaShortcode', 'Anyone');
+ }
+
+ // Misc
+ $submitDateTimeFormat = $this->getOption('SubmitDateTimeFormat');
+ if (!$submitDateTimeFormat || $submitDateTimeFormat == '') {
+ $this->addOption('SubmitDateTimeFormat', 'Y-m-d H:i:s P');
+ }
+
+ }
+ // Version 1.8 update
+ if (!$this->getOption('MaxRows')) {
+ $this->addOption('MaxRows', '100');
+ }
+ $tableName = $this->getSubmitsTableName();
+ $wpdb->show_errors();
+ /* $upgradeOk &= false !== */ $wpdb->query("ALTER TABLE `$tableName` MODIFY COLUMN submit_time DECIMAL(16,4) NOT NULL");
+ /* $upgradeOk &= false !== */ $wpdb->query("ALTER TABLE `$tableName` ADD INDEX `form_name_idx` ( `form_name` )");
+ /* $upgradeOk &= false !== */ $wpdb->query("ALTER TABLE `$tableName` ADD INDEX `form_name_field_name_idx` ( `form_name`, `field_name` )");
+ $wpdb->hide_errors();
+ }
+
+
+ // Post-upgrade, set the current version in the options
+ $codeVersion = $this->getVersion();
+ if ($upgradeOk && $savedVersion != $codeVersion) {
+ $this->saveInstalledVersion();
+ }
+ }
+
+ /**
+ * Called by install()
+ * You should: Prefix all table names with $wpdb->prefix
+ * Also good: additionally use the prefix for this plugin:
+ * $table_name = $wpdb->prefix . $this->prefix('MY_TABLE');
+ * @return void
+ */
+ protected function installDatabaseTables() {
+ global $wpdb;
+ $tableName = $this->getSubmitsTableName();
+ $wpdb->show_errors();
+ $wpdb->query("CREATE TABLE IF NOT EXISTS `$tableName` (
+ `submit_time` DECIMAL(16,4) NOT NULL,
+ `form_name` VARCHAR(127) CHARACTER SET utf8,
+ `field_name` VARCHAR(127) CHARACTER SET utf8,
+ `field_value` LONGTEXT CHARACTER SET utf8,
+ `field_order` INTEGER,
+ `file` LONGBLOB)");
+ $wpdb->query("ALTER TABLE `$tableName` ADD INDEX `submit_time_idx` ( `submit_time` )");
+ $wpdb->query("ALTER TABLE `$tableName` ADD INDEX `form_name_idx` ( `form_name` )");
+ $wpdb->query("ALTER TABLE `$tableName` ADD INDEX `form_name_field_name_idx` ( `form_name`, `field_name` )");
+ $wpdb->hide_errors();
+ }
+
+
+ /**
+ * Called by uninstall()
+ * You should: Prefix all table names with $wpdb->prefix
+ * Also good: additionally use the prefix for this plugin:
+ * $table_name = $wpdb->prefix . $this->prefix('MY_TABLE');
+ * @return void
+ */
+ protected function unInstallDatabaseTables() {
+ if ('true' == $this->getOption('DropOnUninstall', 'true')) {
+ global $wpdb;
+ $tableName = $this->getSubmitsTableName();
+ $wpdb->query("DROP TABLE IF EXISTS `$tableName`");
+ // $tables = array('SUBMITS');
+ // foreach ($tables as $aTable) {
+ // $tableName = $this->prefixTableName($aTable);
+ // $wpdb->query("DROP TABLE IF EXISTS `$tableName`");
+ // }
+ }
+ }
+
+ public function addActionsAndFilters() {
+ // Add the Admin Config page for this plugin
+
+ // Add Config page as a top-level menu item on the Admin page
+ add_action('admin_menu', array(&$this, 'createAdminMenu'));
+
+ // Add Config page into the Plugins menu
+ add_action('admin_menu', array(&$this, 'addSettingsSubMenuPage'));
+
+ // Hook into Contact Form 7 when a form post is made to save the data to the DB
+ if ($this->getOption('IntegrateWithCF7', 'true') == 'true') {
+ add_action('wpcf7_before_send_mail', array(&$this, 'saveFormData'));
+ }
+
+ // Hook into Fast Secure Contact Form
+ if ($this->getOption('IntegrateWithFSCF', 'true') == 'true') {
+ add_action('fsctf_mail_sent', array(&$this, 'saveFormData'));
+ add_action('fsctf_menu_links', array(&$this, 'fscfMenuLinks'));
+ }
+
+ // Have our own hook to publish data independent of other plugins
+ add_action('cfdb_submit', array(&$this, 'saveFormData'));
+
+ // Register Export URL
+ add_action('wp_ajax_nopriv_cfdb-export', array(&$this, 'ajaxExport'));
+ add_action('wp_ajax_cfdb-export', array(&$this, 'ajaxExport'));
+
+ // Register Get File URL
+ add_action('wp_ajax_nopriv_cfdb-file', array(&$this, 'ajaxFile'));
+ add_action('wp_ajax_cfdb-file', array(&$this, 'ajaxFile'));
+
+ // Register Get Form Fields URL
+ add_action('wp_ajax_nopriv_cfdb-getFormFields', array(&$this, 'ajaxGetFormFields'));
+ add_action('wp_ajax_cfdb-getFormFields', array(&$this, 'ajaxGetFormFields'));
+
+ // Shortcode to add a table to a page
+ $sc = new CFDBShortcodeTable();
+ $sc->register(array('cf7db-table', 'cfdb-table')); // cf7db-table is deprecated
+
+ // Shortcode to add a DataTable
+ $sc = new CFDBShortcodeDataTable();
+ $sc->register('cfdb-datatable');
+
+ // Shortcode to add a JSON to a page
+ $sc = new CFDBShortcodeJson();
+ $sc->register('cfdb-json');
+
+ // Shortcode to add a value (just text) to a page
+ $sc = new CFDBShortcodeValue();
+ $sc->register('cfdb-value');
+
+ // Shortcode to add entry count to a page
+ $sc = new CFDBShortcodeCount();
+ $sc->register('cfdb-count');
+
+ // Shortcode to add values wrapped in user-defined html
+ $sc = new CFDBShortcodeHtml();
+ $sc->register('cfdb-html');
+
+ // Shortcode to generate Export URLs
+ $sc = new CFDBShortcodeExportUrl();
+ $sc->register('cfdb-export-link');
+ }
+
+ public function ajaxExport() {
+ require_once('CF7DBPluginExporter.php');
+ CF7DBPluginExporter::doExportFromPost();
+ die();
+ }
+
+ public function ajaxFile() {
+ //if (!$this->canUserDoRoleOption('CanSeeSubmitData')) {
+ if (!$this->canUserDoRoleOption('CanSeeSubmitDataViaShortcode')) {
+ CFDBDie::wp_die(__('You do not have sufficient permissions to access this page.', 'contact-form-7-to-database-extension'));
+ }
+ $submitTime = $_REQUEST['s'];
+ $formName = $_REQUEST['form'];
+ $fieldName = $_REQUEST['field'];
+ if (!$submitTime || !$formName || !$fieldName) {
+ CFDBDie::wp_die(__('Missing form parameters', 'contact-form-7-to-database-extension'));
+ }
+ $fileInfo = (array) $this->getFileFromDB($submitTime, $formName, $fieldName);
+ if ($fileInfo == null) {
+ CFDBDie::wp_die(__('No such file.', 'contact-form-7-to-database-extension'));
+ }
+ header("Content-Disposition: attachment; filename=\"$fileInfo[0]\"");
+ echo($fileInfo[1]);
+ die();
+ }
+
+ public function ajaxGetFormFields() {
+ if (!$this->canUserDoRoleOption('CanSeeSubmitData') || !isset($_REQUEST['form'])) {
+ die();
+ }
+ header('Content-Type: application/json; charset=UTF-8');
+ global $wpdb;
+ $tableName = $this->getSubmitsTableName();
+ $formName = $_REQUEST['form'];
+ $rows = $wpdb->get_results("SELECT DISTINCT `field_name`, `field_order` FROM `$tableName` WHERE `form_name` = '$formName' ORDER BY field_order");
+ $fields = array();
+ if (!empty($rows)) {
+ $fields[] = 'Submitted';
+ foreach ($rows as $aRow) {
+ $fields[] = $aRow->field_name;
+ }
+ }
+ echo json_encode($fields);
+ die();
+ }
+
+ public function addSettingsSubMenuPage() {
+ $this->requireExtraPluginFiles();
+ $displayName = $this->getPluginDisplayName();
+ add_submenu_page('wpcf7', //$this->getDBPageSlug(),
+ $displayName . ' Options',
+ __('Database Options', 'contact-form-7-to-database-extension'),
+ 'manage_options',
+ get_class($this) . 'Settings',
+ array(&$this, 'settingsPage'));
+ }
+
+
+ /**
+ * Function courtesy of Mike Challis, author of Fast Secure Contact Form.
+ * Displays Admin Panel links in FSCF plugin menu
+ * @return void
+ */
+ public function fscfMenuLinks() {
+ $displayName = $this->getPluginDisplayName();
+ echo '
+
+ ' . $displayName .
+ ' | ' .
+ __('Database', 'contact-form-7-to-database-extension') .
+ ' | ' .
+ __('Database Options', 'contact-form-7-to-database-extension') .
+ ' | ' .
+ __('Build Short Code', 'contact-form-7-to-database-extension') .
+ ' | ' .
+ __('FAQ', 'contact-form-7-to-database-extension') . '
+
+ ';
+ }
+
+ /**
+ * Callback from Contact Form 7. CF7 passes an object with the posted data which is inserted into the database
+ * by this function.
+ * Also callback from Fast Secure Contact Form
+ * @param $cf7 WPCF7_ContactForm|object the former when coming from CF7, the latter $fsctf_posted_data object variable
+ * if coming from FSCF
+ * @return void
+ */
+ public function saveFormData($cf7) {
+ try {
+ $title = stripslashes($cf7->title);
+ if (in_array($title, $this->getNoSaveForms())) {
+ return; // Don't save in DB
+ }
+
+ global $wpdb;
+ $time = function_exists('microtime') ? microtime(true) : time();
+
+ $ip = (isset($_SERVER['X_FORWARDED_FOR'])) ? $_SERVER['X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
+ $tableName = $this->getSubmitsTableName();
+ $parametrizedQuery = "INSERT INTO `$tableName` (`submit_time`, `form_name`, `field_name`, `field_value`, `field_order`) VALUES (%s, %s, %s, %s, %s)";
+ $parametrizedFileQuery = "UPDATE `$tableName` SET `file` = '%s' WHERE `submit_time` = %F AND `form_name` = '%s' AND `field_name` = '%s' AND `field_value` = '%s'";
+
+ $order = 0;
+ $noSaveFields = $this->getNoSaveFields();
+ foreach ($cf7->posted_data as $name => $value) {
+ $nameClean = stripslashes($name);
+ if (in_array($nameClean, $noSaveFields)) {
+ continue; // Don't save in DB
+ }
+
+ $value = is_array($value) ? implode($value, ', ') : $value;
+ $valueClean = stripslashes($value);
+ $wpdb->query($wpdb->prepare($parametrizedQuery,
+ $time,
+ $title,
+ $nameClean,
+ $valueClean,
+ $order++));
+
+ // Store uploaded files - Do as a separate query in case it fails due to max size or other issue
+ if ($cf7->uploaded_files && isset($cf7->uploaded_files[$nameClean])) {
+ $filePath = $cf7->uploaded_files[$nameClean];
+ if ($filePath) {
+ $content = file_get_contents($filePath);
+ $wpdb->query($wpdb->prepare($parametrizedFileQuery,
+ $content,
+ $time,
+ $title,
+ $nameClean,
+ $valueClean));
+ }
+ }
+ }
+
+ // Save Cookie data if that option is true
+ if ($this->getOption('SaveCookieData', 'false') == 'true' && is_array($_COOKIE)) {
+ $saveCookies = $this->getSaveCookies();
+ foreach ($_COOKIE as $cookieName => $cookieValue) {
+ if (!empty($saveCookies) && !in_array($cookieName, $saveCookies)) {
+ continue;
+ }
+ $wpdb->query($wpdb->prepare($parametrizedQuery,
+ $time,
+ $title,
+ 'Cookie ' . $cookieName,
+ $cookieValue,
+ $order++));
+ }
+ }
+
+ // If the submitter is logged in, capture his id
+ if (is_user_logged_in()) {
+ $order = ($order < 9999) ? 9999 : $order + 1; // large order num to try to make it always next-to-last
+ $current_user = wp_get_current_user(); // WP_User
+ $wpdb->query($wpdb->prepare($parametrizedQuery,
+ $time,
+ $title,
+ 'Submitted Login',
+ $current_user->user_login,
+ $order));
+ }
+
+ // Capture the IP Address of the submitter
+ $order = ($order < 10000) ? 10000 : $order + 1; // large order num to try to make it always last
+ $wpdb->query($wpdb->prepare($parametrizedQuery,
+ $time,
+ $title,
+ 'Submitted From',
+ $ip,
+ $order));
+
+ }
+ catch (Exception $ex) {
+ error_log(sprintf('CFDB Error: %s:%s %s %s', $ex->getFile(), $ex->getLine(), $ex->getMessage(), $ex->getTraceAsString()));
+ }
+ }
+
+ /**
+ * @param $time string form submit time
+ * @param $formName string form name
+ * @param $fieldName string field name (should be an upload file field)
+ * @return array of (file-name, file-contents) or null if not found
+ */
+ public function getFileFromDB($time, $formName, $fieldName) {
+ global $wpdb;
+ $tableName = $this->getSubmitsTableName();
+ $parametrizedQuery = "SELECT `field_value`, `file` FROM `$tableName` WHERE `submit_time` = %F AND `form_name` = %s AND `field_name` = '%s'";
+ $rows = $wpdb->get_results($wpdb->prepare($parametrizedQuery, $time, $formName, $fieldName));
+ if ($rows == null || count($rows) == 0) {
+ return null;
+ }
+
+ return array($rows[0]->field_value, $rows[0]->file);
+ }
+
+ /**
+ * Install page for this plugin in WP Admin
+ * @return void
+ */
+ public function createAdminMenu() {
+ $displayName = $this->getPluginDisplayName();
+ $roleAllowed = $this->getRoleOption('CanSeeSubmitData');
+
+ //create new top-level menu
+// add_menu_page($displayName . ' Plugin Settings',
+// 'Contact Form Submissions',
+// 'administrator', //$roleAllowed,
+// $this->getDBPageSlug(),
+// array(&$this, 'whatsInTheDBPage'));
+
+ // Needed for dialog in whatsInTheDBPage
+ if (strpos($_SERVER['REQUEST_URI'], $this->getDBPageSlug()) !== false) {
+ $pluginUrl = $this->getPluginFileUrl() . '/';
+ wp_enqueue_script('jquery');
+// wp_enqueue_style('jquery-ui.css', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/themes/base/jquery-ui.css');
+ wp_enqueue_style('jquery-ui.css', $pluginUrl . 'jquery-ui/jquery-ui.css');
+ wp_enqueue_script('jquery-ui-dialog', false, array('jquery'));
+ wp_enqueue_script('CF7DBdes', $pluginUrl . 'des.js');
+
+ // Datatables http://www.datatables.net
+ if ($this->getOption('UseDataTablesJS', 'true') == 'true') {
+// wp_enqueue_style('datatables-demo', 'http://www.datatables.net/release-datatables/media/css/demo_table.css');
+// wp_enqueue_script('datatables', 'http://www.datatables.net/release-datatables/media/js/jquery.dataTables.js', array('jquery'));
+ wp_enqueue_style('datatables-demo', $pluginUrl .'DataTables/media/css/demo_table.css');
+ wp_enqueue_script('datatables', $pluginUrl . 'DataTables/media/js/jquery.dataTables.min.js', array('jquery'));
+
+ if ($this->canUserDoRoleOption('CanChangeSubmitData')) {
+ do_action_ref_array('cfdb_edit_enqueue', array());
+ }
+
+ // Would like to add ColReorder but it causes slowness and display issues with DataTable footer
+ //wp_enqueue_style('datatables-ColReorder', $pluginUrl .'DataTables/extras/ColReorder/media/css/ColReorder.css');
+ //wp_enqueue_script('datatables-ColReorder', $pluginUrl . 'DataTables/extras/ColReorder/media/js/ColReorder.min.js', array('datatables', 'jquery'));
+ }
+ }
+
+ if (strpos($_SERVER['REQUEST_URI'], $this->getSortCodeBuilderPageSlug()) !== false) {
+ wp_enqueue_script('jquery');
+ }
+
+ // Put page under CF7's "Contact" page
+ add_submenu_page('wpcf7',
+ $displayName . ' Submissions',
+ __('Database', 'contact-form-7-to-database-extension'),
+ $this->roleToCapability($roleAllowed),
+ $this->getDBPageSlug(),
+ array(&$this, 'whatsInTheDBPage'));
+
+ // Put page under CF7's "Contact" page
+ add_submenu_page('wpcf7',
+ $displayName . ' Short Code Builder',
+ __('Database Short Code', 'contact-form-7-to-database-extension'),
+ $this->roleToCapability($roleAllowed),
+ $this->getSortCodeBuilderPageSlug(),
+ array(&$this, 'showShortCodeBuilderPage'));
+ }
+
+ /**
+ * @return string WP Admin slug for page to view DB data
+ */
+ public function getDBPageSlug() {
+ return get_class($this) . 'Submissions';
+ }
+
+ public function getSortCodeBuilderPageSlug() {
+ return get_class($this) . 'ShortCodeBuilder';
+ }
+
+ public function showShortCodeBuilderPage() {
+ require_once('CFDBViewShortCodeBuilder.php');
+ $view = new CFDBViewShortCodeBuilder;
+ $view->display($this);
+ }
+
+ /**
+ * Display the Admin page for this Plugin that show the form data saved in the database
+ * @return void
+ */
+ public function whatsInTheDBPage() {
+ require_once('CFDBViewWhatsInDB.php');
+ $view = new CFDBViewWhatsInDB;
+ $view->display($this);
+ }
+
+ /**
+ * @param $time int same as returned from PHP time()
+ * @return string formatted date according to saved options
+ */
+ public function formatDate($time) {
+ // Convert time to local timezone
+ date_default_timezone_set(get_option('timezone_string'));
+
+ if ($this->getOption('UseCustomDateTimeFormat', 'true') == 'true') {
+ $dateFormat = $this->getOption('SubmitDateTimeFormat', 'Y-m-d H:i:s P');
+ return date($dateFormat, $time);
+ }
+ return date_i18n(get_option('date_format') . ' ' . get_option('time_format'), $time);
+ }
+
+ /**
+ * @param $submitTime string PK for form submission
+ * @param $formName string
+ * @param $fileName string
+ * @return string URL to download file
+ */
+ public function getFileUrl($submitTime, $formName, $fileName) {
+ return sprintf('%s?action=cfdb-file&s=%s&form=%s&field=%s',
+ admin_url('admin-ajax.php'),
+ $submitTime,
+ urlencode($formName),
+ urlencode($fileName));
+ }
+
+ public function getFormFieldsAjaxUrlBase() {
+ return admin_url('admin-ajax.php') . '?action=cfdb-getFormFields&form=';
+ }
+
+ /**
+ * @return array of string
+ */
+ public function getNoSaveFields() {
+ return preg_split('/,|;/', $this->getOption('NoSaveFields'), -1, PREG_SPLIT_NO_EMPTY);
+ }
+
+ /**
+ * @return array of string
+ */
+ public function getNoSaveForms() {
+ return preg_split('/,|;/', $this->getOption('NoSaveForms'), -1, PREG_SPLIT_NO_EMPTY);
+ }
+
+ /**
+ * @return array of string
+ */
+ public function getSaveCookies() {
+ return preg_split('/,|;/', $this->getOption('SaveCookieNames'), -1, PREG_SPLIT_NO_EMPTY);
+ }
+
+ /**
+ * @return string
+ */
+ public function getSubmitsTableName() {
+ // $overrideTable = $this->getOption('SubmitTableNameOverride');
+ // if ($overrideTable && "" != $overrideTable) {
+ // return $overrideTable;
+ // }
+ return $this->prefixTableName('SUBMITS');
+ }
+
+ /**
+ * @return string URL to the Plugin directory. Includes ending "/"
+ */
+ public function getPluginDirUrl() {
+ //return WP_PLUGIN_URL . '/' . str_replace(basename(__FILE__), '', plugin_basename(__FILE__));
+ return $this->getPluginFileUrl('/');
+ }
+
+
+ /**
+ * @param string $pathRelativeToThisPluginRoot points to a file with relative path from
+ * this plugin's root dir. I.e. file "des.js" in the root of this plugin has
+ * url = $this->getPluginFileUrl('des.js');
+ * If it was in a sub-folder "js" then you would use
+ * $this->getPluginFileUrl('js/des.js');
+ * @return string full url to input file
+ */
+ public function getPluginFileUrl($pathRelativeToThisPluginRoot = '') {
+ return plugins_url($pathRelativeToThisPluginRoot, __FILE__);
+ }
+
+
+ /**
+ * @return string URL of the language translation file for DataTables oLanguage.sUrl parameter
+ * or null if it does not exist.
+ */
+ public function getDataTableTranslationUrl() {
+ $url = null;
+ $locale = get_locale();
+ $i18nDir = dirname(__FILE__) . '/dt_i18n/';
+
+ // See if there is a local file
+ if (is_readable($i18nDir . $locale . '.json')) {
+ $url = $this->getPluginFileUrl() . "dt_i18n/$locale.json";
+ }
+ else {
+ // Pull the language code from the $local string
+ // which is expected to look like "en_US"
+ // where the first 2 or 3 letters are for lang followed by '_'
+ $lang = null;
+ if (substr($locale, 2, 1) == '_') {
+ // 2-letter language codes
+ $lang = substr($locale, 0, 2);
+ }
+ else if (substr($locale, 3, 1) == '_') {
+ // 3-letter language codes
+ $lang = substr($locale, 0, 3);
+ }
+ if ($lang && is_readable($i18nDir . $lang . '.json')) {
+ $url = $this->getPluginFileUrl() . "/dt_i18n/$lang.json";
+ }
+ }
+ return $url;
+ }
+
+
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBPluginExporter.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBPluginExporter.php
new file mode 100644
index 00000000..9485074e
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBPluginExporter.php
@@ -0,0 +1,146 @@
+.
+*/
+
+class CF7DBPluginExporter {
+
+ static function doExportFromPost() {
+
+ // Consolidate GET and POST parameters. Allow GET to override POST.
+ $params = array_merge($_POST, $_GET);
+
+ //print_r($params);
+
+ if (!isset($params['form'])) {
+ include_once('CFDBDie.php');
+ CFDBDie::wp_die(__('Error: No "form" parameter submitted', 'contact-form-7-to-database-extension'));
+ return;
+ }
+
+ // Assumes coming from CF7DBPlugin::whatsInTheDBPage()
+ $key = '3fde789a'; //substr($_COOKIE['PHPSESSID'], - 5); // session_id() doesn't work
+ if (isset($params['guser'])) {
+ $params['guser'] = mcrypt_decrypt(MCRYPT_3DES, $key, CF7DBPluginExporter::hexToStr($params['guser']), 'ecb');
+ }
+ if (isset($params['gpwd'])) {
+ $params['gpwd'] = mcrypt_decrypt(MCRYPT_3DES, $key, CF7DBPluginExporter::hexToStr($params['gpwd']), 'ecb');
+ }
+
+ CF7DBPluginExporter::export(
+ $params['form'],
+ $params['enc'],
+ $params);
+ }
+
+// Taken from http://ditio.net/2008/11/04/php-string-to-hex-and-hex-to-string-functions/
+ static function hexToStr($hex) {
+ $string = '';
+ for ($i = 0; $i < strlen($hex) - 1; $i += 2) {
+ $string .= chr(hexdec($hex[$i] . $hex[$i + 1]));
+ }
+ return $string;
+ }
+
+
+ static function export($formName, $encoding, $options) {
+
+ switch ($encoding) {
+ case 'HTML':
+ require_once('ExportToHtmlTable.php');
+ $exporter = new ExportToHtmlTable();
+ $exporter->export($formName, $options);
+ break;
+ case 'DT':
+ require_once('ExportToHtmlTable.php');
+ if (!is_array($options)) {
+ $options = array();
+ }
+ $options['useDT'] = true;
+ if (!isset($options['printScripts'])) {
+ $options['printScripts'] = true;
+ }
+ if (!isset($options['printStyles'])) {
+ $options['printStyles'] = 'true';
+ }
+ $exporter = new ExportToHtmlTable();
+ $exporter->export($formName, $options);
+ break;
+ case 'HTMLTemplate':
+ require_once('ExportToHtmlTemplate.php');
+ $exporter = new ExportToHtmlTemplate();
+ $exporter->export($formName, $options);
+ break;
+ case 'IQY':
+ require_once('ExportToIqy.php');
+ $exporter = new ExportToIqy();
+ $exporter->export($formName, $options);
+ break;
+ case 'CSVUTF8BOM':
+ require_once('ExportToCsvUtf8.php');
+ $exporter = new ExportToCsvUtf8();
+ $exporter->setUseBom(true);
+ $exporter->export($formName, $options);
+ break;
+ case 'TSVUTF16LEBOM':
+ require_once('ExportToCsvUtf16le.php');
+ $exporter = new ExportToCsvUtf16le();
+ $exporter->export($formName, $options);
+ break;
+ case 'GLD':
+ require_once('ExportToGoogleLiveData.php');
+ $exporter = new ExportToGoogleLiveData();
+ $exporter->export($formName, $options);
+ break;
+ case 'GSS':
+ require_once('ExportToGoogleSS.php');
+ $exporter = new ExportToGoogleSS();
+ $exporter->export($formName, $options);
+ break;
+ case 'JSON':
+ require_once('ExportToJson.php');
+ $exporter = new ExportToJson();
+ $exporter->export($formName, $options);
+ break;
+ case 'VALUE':
+ require_once('ExportToValue.php');
+ $exporter = new ExportToValue();
+ $exporter->export($formName, $options);
+ break;
+ case 'COUNT':
+ require_once('ExportToValue.php');
+ if (!is_array($options)) {
+ $options = array();
+ }
+ $options['function'] = 'count';
+ unset($options['show']);
+ unset($options['hide']);
+ $exporter = new ExportToValue();
+ $exporter->export($formName, $options);
+ break;
+ case 'CSVUTF8':
+ default:
+ require_once('ExportToCsvUtf8.php');
+ $exporter = new ExportToCsvUtf8();
+ $exporter->setUseBom(false);
+ $exporter->export($formName, $options);
+ break;
+ }
+ }
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBPluginLifeCycle.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBPluginLifeCycle.php
new file mode 100644
index 00000000..800d2fe1
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBPluginLifeCycle.php
@@ -0,0 +1,140 @@
+.
+*/
+
+require_once('CF7DBInstallIndicator.php');
+
+/**
+ * All the basic plugin life cycle functionality is implemented herein.
+ * A Plugin is expected to subclass this class and override method to inject
+ * its own specific behaviors.
+ *
+ * @author Michael Simpson
+ */
+
+abstract class CF7DBPluginLifeCycle extends CF7DBInstallIndicator {
+
+ public function install() {
+
+ // Initialize Plugin Options
+ $this->initOptions();
+
+ // Initialize DB Tables used by the plugin
+ $this->installDatabaseTables();
+
+ // Other Plugin initialization - for the plugin writer to override as needed
+ $this->otherInstall();
+
+ // Record the installed version
+ $this->saveInstalledVersion();
+
+ // To avoid running install() more then once
+ $this->markAsInstalled();
+ }
+
+ public function uninstall() {
+ $this->otherUninstall();
+ $this->unInstallDatabaseTables();
+ $this->deleteSavedOptions();
+ $this->markAsUnInstalled();
+ }
+
+ /**
+ * Perform any version-upgrade activities prior to activation (e.g. database changes)
+ * @return void
+ */
+ public function upgrade() {
+ }
+
+ public function activate() {
+ }
+
+ public function deactivate() {
+ }
+
+ protected function initOptions() {
+ }
+
+ public function addActionsAndFilters() {
+ }
+
+ protected function installDatabaseTables() {
+ }
+
+ protected function unInstallDatabaseTables() {
+ }
+
+ protected function otherInstall() {
+ }
+
+ protected function otherUninstall() {
+ }
+
+ /**
+ * Puts the configuration page in the Plugins menu by default.
+ * Override to put it elsewhere or create a set of submenus
+ * Override with an empty implementation if you don't want a configuration page
+ * @return void
+ */
+ public function addSettingsSubMenuPage() {
+ $this->addSettingsSubMenuPageToPluginsMenu();
+ //$this->addSettingsSubMenuPageToSettingsMenu();
+ }
+
+
+ protected function requireExtraPluginFiles() {
+ require_once(ABSPATH . 'wp-includes/pluggable.php');
+ require_once(ABSPATH . 'wp-admin/includes/plugin.php');
+ }
+
+ protected function addSettingsSubMenuPageToPluginsMenu() {
+ $this->requireExtraPluginFiles();
+ $displayName = $this->getPluginDisplayName();
+ add_submenu_page('plugins.php',
+ $displayName,
+ $displayName,
+ 'manage_options',
+ get_class($this) . 'Settings',
+ array(&$this, 'settingsPage'));
+ }
+
+
+ protected function addSettingsSubMenuPageToSettingsMenu() {
+ $this->requireExtraPluginFiles();
+ $displayName = $this->getPluginDisplayName();
+ add_options_page($displayName,
+ $displayName,
+ 'manage_options',
+ get_class($this) . 'Settings',
+ array(&$this, 'settingsPage'));
+ }
+
+ /**
+ * @param $name string name of a database table
+ * @return string input prefixed with the Wordpress DB table prefix
+ * plus the prefix for this plugin to avoid table name collisions
+ */
+ protected function prefixTableName($name) {
+ global $wpdb;
+ return $wpdb->prefix . $this->prefix($name);
+ }
+
+
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBPlugin_init.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBPlugin_init.php
new file mode 100644
index 00000000..d24ed5a3
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBPlugin_init.php
@@ -0,0 +1,53 @@
+.
+*/
+
+function CF7DBPlugin_init($file) {
+
+ require_once('CF7DBPlugin.php');
+ $aPlugin = new CF7DBPlugin();
+
+ // Install the plugin
+ // NOTE: this file gets run each time you *activate* the plugin.
+ // So in WP when you "install" the plugin, all that does it dump its files in the plugin-templates directory
+ // but it does not call any of its code.
+ // So here, the plugin tracks whether or not it has run its install operation, and we ensure it is run only once
+ // on the first activation
+ if (!$aPlugin->isInstalled()) {
+ $aPlugin->install();
+ }
+ else {
+ // Perform any version-upgrade activities prior to activation (e.g. database changes)
+ $aPlugin->upgrade();
+ }
+
+ // Add callbacks to hooks
+ $aPlugin->addActionsAndFilters();
+
+ if (!$file) {
+ $file = __FILE__;
+ }
+ // Register the Plugin Activation Hook
+ register_activation_hook($file, array(&$aPlugin, 'activate'));
+
+
+ // Register the Plugin Deactivation Hook
+ register_deactivation_hook($file, array(&$aPlugin, 'deactivate'));
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBValueConverter.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBValueConverter.php
new file mode 100644
index 00000000..7fc07c7b
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7DBValueConverter.php
@@ -0,0 +1,30 @@
+.
+*/
+
+interface CF7DBValueConverter {
+
+ /**
+ * @abstract
+ * @param $value mixed object to convert
+ * @return mixed converted value
+ */
+ public function convert($value);
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CF7FilterParser.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7FilterParser.php
new file mode 100644
index 00000000..ec3baebe
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7FilterParser.php
@@ -0,0 +1,277 @@
+.
+*/
+
+include_once('CF7DBEvalutator.php');
+include_once('CF7DBValueConverter.php');
+
+/**
+ * Used to parse boolean expression strings like 'field1=value1&&field2=value2||field3=value3&&field4=value4'
+ * Where logical AND and OR are represented by && and || respectively.
+ * Individual expressions (like 'field1=value1') are of the form $name . $operator . $value where
+ * $operator is any PHP comparison operator or '=' which is interpreted as '=='.
+ * $value has a special case where if it is 'null' it is interpreted as the value null
+ */
+class CF7FilterParser implements CF7DBEvalutator {
+
+ /**
+ * @var array of arrays of string where the top level array is broken down on the || delimiters
+ */
+ var $tree;
+
+ /**
+ * @var CF7DBValueConverter callback that can be used to pre-process values in the filter string
+ * passed into parseFilterString($filterString).
+ * For example, a function might take the value '$user_email' and replace it with an actual email address
+ * just prior to checking it against input data in call evaluate($data)
+ */
+ var $compValuePreprocessor;
+
+ public function hasFilters() {
+ return count($this->tree) > 0; // count is null-safe
+ }
+
+ public function getFilterTree() {
+ return $this->tree;
+ }
+
+ /**
+ * Parse a string with delimiters || and/or && into a Boolean evaluation tree.
+ * For example: aaa&&bbb||ccc&&ddd would be parsed into the following tree,
+ * where level 1 represents items ORed, level 2 represents items ANDed, and
+ * level 3 represent individual expressions.
+ * Array
+ * (
+ * [0] => Array
+ * (
+ * [0] => Array
+ * (
+ * [0] => aaa
+ * [1] => =
+ * [2] => bbb
+ * )
+ *
+ * )
+ *
+ * [1] => Array
+ * (
+ * [0] => Array
+ * (
+ * [0] => ccc
+ * [1] => =
+ * [2] => ddd
+ * )
+ *
+ * [1] => Array
+ * (
+ * [0] => eee
+ * [1] => =
+ * [2] => fff
+ * )
+ *
+ * )
+ *
+ * )
+ * @param $filterString string with delimiters && and/or ||
+ * which each element being an array of strings broken on the && delimiter
+ */
+ public function parseFilterString($filterString) {
+ $this->tree = array();
+ $arrayOfORedStrings = $this->parseORs($filterString);
+ foreach ($arrayOfORedStrings as $anANDString) {
+ $arrayOfANDedStrings = $this->parseANDs($anANDString);
+ $andSubTree = array();
+ foreach ($arrayOfANDedStrings as $anExpressionString) {
+ $exprArray = $this->parseExpression($anExpressionString);
+ $andSubTree[] = $exprArray;
+ }
+ $this->tree[] = $andSubTree;
+ }
+ }
+
+ /**
+ * @param $filterString
+ * @return array
+ */
+ public function parseORs($filterString) {
+ return preg_split('/\|\|/', $filterString, -1, PREG_SPLIT_NO_EMPTY);
+ }
+
+ /**
+ * @param $filterString
+ * @return array
+ */
+ public function parseANDs($filterString) {
+ $retVal = preg_split('/&&/', $filterString, -1, PREG_SPLIT_NO_EMPTY);
+ if (count($retVal) == 1) {
+ // This took me a long time chase down. Looks like in some cases when using this in a
+ // WordPress web page, the text that gets here is '&&' rather than '&&'
+ // (But oddly, this is not always the case). So check for this case explicitly.
+ $retVal = preg_split('/&&/', $filterString, -1, PREG_SPLIT_NO_EMPTY);
+ }
+
+ //echo "Parsed '$filterString' into " . print_r($retVal, true) . ' ';
+ return $retVal;
+ }
+
+ /**
+ * Parse a comparison expression into its three components
+ * @param $comparisonExpression string in the form 'value1' . 'operator' . 'value2' where
+ * operator is a php comparison operator or '='
+ * @return array of string [ value1, operator, value2 ]
+ */
+ public function parseExpression($comparisonExpression) {
+ return preg_split('/(===)|(==)|(=)|(!==)|(!=)|(<>)|(<=)|(<)|(>=)|(>)|(~~)/',
+ $comparisonExpression, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
+ }
+
+
+ /**
+ * Evaluate expression against input data. Assumes parseFilterString was called to set up the expression to
+ * evaluate. Expression should have key . operator . value tuples and input $data should have the same keys
+ * with values to check against them.
+ * For example, an expression in this object is 'name=john' and the input data has [ 'name' => 'john' ]. In
+ * this case true is returned. if $data has [ 'name' => 'fred' ] then false is returned.
+ * @param $data array [ key => value]
+ * @return boolean result of evaluating $data against expression tree
+ */
+ public function evaluate(&$data) {
+ $retVal = true;
+ if ($this->tree) {
+ $retVal = false;
+ foreach ($this->tree as $andArray) { // loop each OR'ed $andArray
+ $andBoolean = true;
+ // evaluation the list of AND'ed comparison expressions
+ foreach ($andArray as $comparison) {
+ $andBoolean = $this->evaluateComparison($comparison, $data); //&& $andBoolean
+ if (!$andBoolean) {
+ break; // short-circuit AND expression evaluation
+ }
+ }
+ $retVal = $retVal || $andBoolean;
+ if ($retVal) {
+ break; // short-circuit OR expression evaluation
+ }
+ }
+ }
+ return $retVal;
+ }
+
+ public function evaluateComparison($andExpr, &$data) {
+ if (is_array($andExpr) && count($andExpr) == 3) {
+ $left = $data[$andExpr[0]];
+ $op = $andExpr[1];
+ $right = $andExpr[2];
+ if ($this->compValuePreprocessor) {
+ try {
+ $right = $this->compValuePreprocessor->convert($right);
+ }
+ catch (Exception $ex) {
+ trigger_error($ex, E_USER_NOTICE);
+ }
+ }
+ if (!$left && !$right) {
+ // Addresses case where 'Submitted Login' = $user_login but there exist some submissions
+ // with no 'Submitted Login' field. Without this clause, those rows where 'Submitted Login' == null
+ // would be returned when what we really want to is affirm that there is a 'Submitted Login' value ($left)
+ // But we want to preserve the correct behavior for the case where 'field'=null is the constraint.
+ return false;
+ }
+ return $this->evaluateLeftOpRightComparison($left, $op, $right);
+ }
+ return false;
+ }
+
+
+ /**
+ * @param $left mixed
+ * @param $operator string representing any PHP comparison operator or '=' which is taken to mean '=='
+ * @param $right $mixed. SPECIAL CASE: if it is the string 'null' it is taken to be the value null
+ * @return bool evaluation of comparison $left $operator $right
+ */
+ public function evaluateLeftOpRightComparison($left, $operator, $right) {
+ if ($right == 'null') {
+ // special case
+ $right = null;
+ }
+
+ // Could do this easier with eval() but I want since this text ultimately
+ // comes form a shortcode's user-entered attributes, I want to avoid a security hole
+ $retVal = false;
+ switch ($operator) {
+ case '=' :
+ case '==':
+ $retVal = $left == $right;
+ break;
+
+ case '===':
+ $retVal = $left === $right;
+ break;
+
+ case '!=':
+ $retVal = $left != $right;
+ break;
+
+ case '!==':
+ $retVal = $left !== $right;
+ break;
+
+ case '<>':
+ $retVal = $left <> $right;
+ break;
+
+ case '>':
+ $retVal = $left > $right;
+ break;
+
+ case '>=':
+ $retVal = $left >= $right;
+ break;
+
+ case '<':
+ $retVal = $left < $right;
+ break;
+
+ case '<=':
+ $retVal = $left <= $right;
+ break;
+
+ case '~~':
+ $retVal = preg_match($right, $left) > 0;
+ break;
+
+ default:
+ trigger_error("Invalid operator: '$operator'", E_USER_NOTICE);
+ $retVal = false;
+ break;
+ }
+
+ return $retVal;
+ }
+
+ /**
+ * @param $converter CF7DBValueConverter
+ * @return void
+ */
+ public function setComparisonValuePreprocessor($converter) {
+ $this->compValuePreprocessor = $converter;
+ }
+
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CF7SearchEvaluator.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7SearchEvaluator.php
new file mode 100644
index 00000000..6c44cce8
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CF7SearchEvaluator.php
@@ -0,0 +1,50 @@
+.
+*/
+
+include_once('CF7DBEvalutator.php');
+
+class CF7SearchEvaluator implements CF7DBEvalutator {
+
+ var $search;
+
+ public function setSearch($search) {
+ $this->search = strtolower($search);
+ }
+
+ /**
+ * Evaluate expression against input data. This is intended to mimic the search field on DataTables
+ * @param $data array [ key => value]
+ * @return boolean result of evaluating $data against expression
+ */
+ public function evaluate(&$data) {
+ if (!$this->search) {
+ return true;
+ }
+ foreach ($data as $key => $value) {
+ // Any field can match, case insensitive
+ if (false !== strrpos(strtolower($value), $this->search)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBDie.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBDie.php
new file mode 100644
index 00000000..e13c8a79
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBDie.php
@@ -0,0 +1,46 @@
+.
+*/
+
+class CFDBDie {
+
+ /**
+ * Why this function? It is meant to do what wp_die() does. But in
+ * Ajax mode, wp_die just does die(-1). But in this plugin we are leveraging
+ * Ajax mode to put in URL hooks to do exports. So it is not really making a in-page
+ * call to the url, the full page is navigating to it, then it downloads a CSV file for
+ * example. So if there are errors we want the wp_die() error page. So this
+ * function is a copy of wp_die without the Ajax mode check.
+ * @static
+ * @param $message HTML
+ * @param string $title HTML Title
+ * @param array $args see wp_die
+ * @return void
+ */
+ static function wp_die($message, $title = '', $args = array()) {
+ // Code copied from wp_die without it stopping due to AJAX
+ if ( function_exists( 'apply_filters' ) ) {
+ $function = apply_filters( 'wp_die_handler', '_default_wp_die_handler');
+ } else {
+ $function = '_default_wp_die_handler';
+ }
+ call_user_func( $function, $message, $title, $args );
+ }
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBExport.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBExport.php
new file mode 100644
index 00000000..ca01f37a
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBExport.php
@@ -0,0 +1,32 @@
+.
+*/
+
+interface CFDBExport {
+
+ /**
+ * @abstract
+ * @param $formName string
+ * @param $options array of option_name => option_value
+ * @return void
+ */
+ public function export($formName, $options = null);
+
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBFormIterator.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBFormIterator.php
new file mode 100644
index 00000000..a0793315
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBFormIterator.php
@@ -0,0 +1,71 @@
+.
+*/
+
+/**
+ * This class is an API for accessing a form and looping through its contents.
+ * Common shortcode options can be used to show/hide columns, search/filter fields, limit, orderby etc.
+ * Set them in the input $options array.
+ * Example code:
+ *
+ * // Email all the "Mike"'s
+ * require_once(ABSPATH . 'wp-content/plugins/contact-form-7-to-database-extension/CFDBFormIterator.php');
+ * $exp = new CFDBFormIterator();
+ * $exp->export('my-form', new array('show' => 'name,email', 'search' => 'mike'));
+ * while ($row = $exp->nextRow()) {
+ * wp_mail($row['email'], 'Hello ' . $row['name], 'How are you doing?');
+ * }
+ *
+ *
+ */
+require_once('ExportBase.php');
+require_once('CFDBExport.php');
+
+class CFDBFormIterator extends ExportBase implements CFDBExport {
+
+ /**
+ * Intended to be used by people who what to programmatically loop over the rows
+ * of a form.
+ * @param $formName string
+ * @param $options array of option_name => option_value
+ * @return void
+ */
+ public function export($formName, $options = null) {
+ $this->setOptions($options);
+ $this->setCommonOptions();
+ $this->setDataIterator($formName);
+ }
+
+ /**
+ * @return array|bool associative array of the row values or false if no more row exists
+ */
+ public function nextRow() {
+ if ($this->dataIterator->nextRow()) {
+ $row = array();
+ foreach ($this->dataIterator->displayColumns as $aCol) {
+ $row[$aCol] = $this->dataIterator->row[$aCol];
+ }
+ return $row;
+ }
+ else {
+ return false;
+ }
+ }
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBQueryResultIterator.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBQueryResultIterator.php
new file mode 100644
index 00000000..18e15151
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBQueryResultIterator.php
@@ -0,0 +1,192 @@
+.
+*/
+
+class CFDBQueryResultIterator {
+
+ /**
+ * @var resource
+ */
+ var $results;
+
+ /**
+ * @var array
+ */
+ var $row;
+
+ /**
+ * @var string
+ */
+ var $submitTimeKeyName;
+
+ /**
+ * @var int
+ */
+ var $limitEnd;
+
+ /**
+ * @var int
+ */
+ var $idx;
+
+ /**
+ * @var int
+ */
+ var $limitStart;
+
+ /**
+ * @var array
+ */
+ var $columns;
+
+ /**
+ * @var array
+ */
+ var $displayColumns;
+
+ /**
+ * @var CF7DBPlugin
+ */
+ var $plugin;
+
+ /**
+ * @var CF7DBEvalutator|CF7FilterParser|CF7SearchEvaluator
+ */
+ var $rowFilter;
+
+ /**
+ * @var array
+ */
+// var $fileColumns;
+
+ /**
+ * @var bool
+ */
+ var $onFirstRow = false;
+
+
+ public function query(&$sql, &$rowFilter, $queryOptions = array()) {
+ $this->rowFilter = $rowFilter;
+ $this->results = null;
+ $this->row = null;
+ $this->plugin = new CF7DBPlugin();
+ $this->submitTimeKeyName = isset($queryOptions['submitTimeKeyName']) ? $queryOptions['submitTimeKeyName'] : null;
+ if (isset($queryOptions['limit'])) {
+ $limitVals = explode(',', $queryOptions['limit']);
+ if (isset($limitVals[1])) {
+ $this->limitStart = trim($limitVals[0]);
+ $this->limitEnd = $this->limitStart + trim($limitVals[1]);
+ }
+ else if (isset($limitVals[0])) {
+ $this->limitEnd = trim($limitVals[0]);
+ }
+ }
+ $this->idx = -1;
+
+ // For performance reasons, we bypass $wpdb so we can call mysql_unbuffered_query
+ $con = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD, true);
+ if (!$con) {
+ trigger_error("MySQL Connection failed: " . mysql_error(), E_USER_NOTICE);
+ return;
+ }
+ mysql_query('SET NAMES utf8', $con);
+ if (!mysql_select_db(DB_NAME, $con)) {
+ trigger_error("MySQL DB Select failed: " . mysql_error(), E_USER_NOTICE);
+ return;
+ }
+ $this->results = mysql_unbuffered_query($sql, $con);
+ if (!$this->results) {
+ trigger_error("MySQL unbuffered query failed: " . mysql_error(), E_USER_NOTICE);
+ return;
+ }
+
+ $this->columns = array();
+ $this->row = mysql_fetch_assoc($this->results);
+ if ($this->row) {
+ foreach (array_keys($this->row) as $aCol) {
+ // hide this metadata column
+ if ('fields_with_file' != $aCol) {
+ $this->columns[] = $aCol;
+ }
+ }
+ $this->onFirstRow = true;
+ }
+ else {
+ $this->onFirstRow = false;
+ }
+ }
+
+ /**
+ * Fetch next row into variable
+ * @return bool if next row exists
+ */
+ public function nextRow() {
+ if (!$this->results) {
+ return false;
+ }
+
+ while (true) {
+ if (!$this->onFirstRow) {
+ $this->row = mysql_fetch_assoc($this->results);
+ }
+ $this->onFirstRow = false;
+
+ if (!$this->row) {
+ mysql_free_result($this->results);
+ $this->results = null;
+ return false;
+ }
+
+ // Format the date
+ $submitTime = $this->row['Submitted'];
+ $this->row['Submitted'] = $this->plugin->formatDate($submitTime);
+
+ // Determine if row is filtered
+ if ($this->rowFilter && !$this->rowFilter->evaluate($this->row)) {
+ continue;
+ }
+
+ $this->idx += 1;
+ if ($this->limitStart && $this->idx < $this->limitStart) {
+ continue;
+ }
+ if ($this->limitEnd && $this->idx >= $this->limitEnd) {
+ while (mysql_fetch_array($this->results)) ;
+ mysql_free_result($this->results);
+ $this->results = null;
+ $this->row = null;
+ return false;
+ }
+
+ // Keep the unformatted submitTime if needed
+ if ($this->submitTimeKeyName) {
+ $this->row[$this->submitTimeKeyName] = $submitTime;
+ }
+ break;
+ }
+ if (!$this->row) {
+ mysql_free_result($this->results);
+ $this->results = null;
+ }
+ return $this->row ? true : false;
+ }
+
+
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeCount.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeCount.php
new file mode 100644
index 00000000..affa10e1
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeCount.php
@@ -0,0 +1,32 @@
+.
+*/
+
+require_once('CFDBShortcodeValue.php');
+
+class CFDBShortcodeCount extends CFDBShortcodeValue {
+
+ public function handleShortcode($atts) {
+ $atts['function'] = 'count';
+ unset($atts['show']);
+ unset($atts['hide']);
+ return parent::handleShortcode($atts);
+ }
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeDataTable.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeDataTable.php
new file mode 100644
index 00000000..ec748c9d
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeDataTable.php
@@ -0,0 +1,54 @@
+.
+*/
+
+require_once('ShortCodeScriptLoader.php');
+
+class CFDBShortcodeDataTable extends ShortCodeScriptLoader {
+
+ public function handleShortcode($atts) {
+ $atts['useDT'] = true;
+ require_once('CFDBShortcodeTable.php');
+ $sc = new CFDBShortcodeTable();
+ return $sc->handleShortcode($atts);
+ }
+
+ public function register($shortcodeName) {
+ parent::register($shortcodeName);
+
+ // Unfortunately, can't put styles in the footer so we have to always add this style sheet
+ // There is an article about how one might go about this here:
+ // http://beerpla.net/2010/01/13/wordpress-plugin-development-how-to-include-css-and-javascript-conditionally-and-only-when-needed-by-the-posts/
+ // But it appears to expects posts on the page and I'm concerned it will not work in all cases
+
+ // Just enqueuing it causes problems in some pages. Need a targetted way to do this.
+// wp_enqueue_style('datatables-demo', 'http://www.datatables.net/release-datatables/media/css/demo_table.css');
+ }
+
+ public function addScript() {
+// wp_register_style('datatables-demo', 'http://www.datatables.net/release-datatables/media/css/demo_table.css');
+// wp_print_styles('datatables-demo');
+
+// wp_register_script('datatables', 'http://www.datatables.net/release-datatables/media/js/jquery.dataTables.js', array('jquery'), false, true);
+ wp_enqueue_script('datatables', plugins_url('/', __FILE__) . 'DataTables/media/js/jquery.dataTables.min.js', array('jquery'));
+ wp_print_scripts('datatables');
+ }
+
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeExportUrl.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeExportUrl.php
new file mode 100644
index 00000000..890224ff
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeExportUrl.php
@@ -0,0 +1,69 @@
+.
+*/
+
+require_once('ShortCodeLoader.php');
+
+class CFDBShortcodeExportUrl extends ShortCodeLoader {
+
+ /**
+ * @param $atts array of short code attributes
+ * @return string JSON. See ExportToJson.php
+ */
+ public function handleShortcode($atts) {
+ $params = array();
+ $params[] = admin_url('admin-ajax.php');
+ $params[] = '?action=cfdb-export';
+ if (isset($atts['form'])) {
+ $params[] = '&form=' . urlencode($atts['form']);
+ }
+ if (isset($atts['show'])) {
+ $params[] = '&show=' . urlencode($atts['show']);
+ }
+ if (isset($atts['hide'])) {
+ $params[] = '&hide=' . urlencode($atts['hide']);
+ }
+ if (isset($atts['limit'])) {
+ $params[] = '&limit=' . urlencode($atts['limit']);
+ }
+ if (isset($atts['search'])) {
+ $params[] = '&search=' . urlencode($atts['search']);
+ }
+ if (isset($atts['filter'])) {
+ $params[] = '&filter=' . urlencode($atts['filter']);
+ }
+ if (isset($atts['enc'])) {
+ $params[] = '&enc=' . urlencode($atts['enc']);
+ }
+
+ $url = implode($params);
+
+ if (isset($atts['urlonly']) && $atts['urlonly'] == 'true') {
+ return $url;
+ }
+
+ $linkText = __('Export', 'contact-form-7-to-database-extension');
+ if (isset($atts['linktext'])) {
+ $linkText = $atts['linktext'];
+ }
+
+ return sprintf('%s ', $url, $linkText);
+ }
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeHtml.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeHtml.php
new file mode 100644
index 00000000..02c2a34c
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeHtml.php
@@ -0,0 +1,41 @@
+.
+*/
+
+require_once('ShortCodeLoader.php');
+
+class CFDBShortcodeHtml extends ShortCodeLoader {
+
+ /**
+ * @param $atts array of short code attributes
+ * @param $content string contents inside the shortcode tag
+ * @return string value submitted to a form field as selected by $atts. See ExportToValue.php
+ */
+ public function handleShortcode($atts, $content = null) {
+ if ($content) {
+ $atts['fromshortcode'] = true;
+ $atts['content'] = $content;
+ require_once('ExportToHtmlTemplate.php');
+ $export = new ExportToHtmlTemplate();
+ return $export->export($atts['form'], $atts);
+ }
+ }
+
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeJson.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeJson.php
new file mode 100644
index 00000000..b9f643e9
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeJson.php
@@ -0,0 +1,37 @@
+.
+*/
+
+require_once('ShortCodeLoader.php');
+
+class CFDBShortcodeJson extends ShortCodeLoader {
+
+ /**
+ * @param $atts array of short code attributes
+ * @return string JSON. See ExportToJson.php
+ */
+ public function handleShortcode($atts) {
+ $atts['html'] = true;
+ $atts['fromshortcode'] = true;
+ require_once('ExportToJson.php');
+ $export = new ExportToJson();
+ return $export->export($atts['form'], $atts);
+ }
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeTable.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeTable.php
new file mode 100644
index 00000000..f063969f
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeTable.php
@@ -0,0 +1,55 @@
+.
+*/
+
+require_once('ShortCodeLoader.php');
+
+class CFDBShortcodeTable extends ShortCodeLoader {
+
+ /**
+ * Shortcode callback for writing the table of form data. Can be put in a page or post to show that data.
+ * Shortcode options:
+ * [cfdb-table form="your-form"] (shows the whole table with default options)
+ * Controlling the Display: Apply your CSS to the table; set the table's 'class' or 'id' attribute:
+ * [cfdb-table form="your-form" class="css_class"] (outputs (default: class="cf7-db-table")
+ * [cfdb-table form="your-form" id="css_id"] (outputs (no default id)
+ * [cfdb-table form="your-form" id="css_id" class="css_class"] (outputs
+ * Filtering Columns:
+ * [cfdb-table form="your-form" show="field1,field2,field3"] (optionally show selected fields)
+ * [cfdb-table form="your-form" hide="field1,field2,field3"] (optionally hide selected fields)
+ * [cfdb-table form="your-form" show="f1,f2,f3" hide="f1"] (hide trumps show)
+ * Filtering Rows:
+ * [cfdb-table form="your-form" filter="field1=value1"] (show only rows where field1=value1)
+ * [cfdb-table form="your-form" filter="field1!=value1"] (show only rows where field1!=value1)
+ * [cfdb-table form="your-form" filter="field1=value1&&field2!=value2"] (Logical AND the filters using '&&')
+ * [cfdb-table form="your-form" filter="field1=value1||field2!=value2"] (Logical OR the filters using '||')
+ * [cfdb-table form="your-form" filter="field1=value1&&field2!=value2||field3=value3&&field4=value4"] (Mixed &&, ||)
+ * @param $atts array of short code attributes
+ * @return HTML output of shortcode
+ */
+ public function handleShortcode($atts) {
+ $atts['canDelete'] = false;
+ $atts['fromshortcode'] = true;
+ require_once('ExportToHtmlTable.php');
+ $export = new ExportToHtmlTable();
+ return $export->export($atts['form'], $atts);
+ }
+
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeValue.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeValue.php
new file mode 100644
index 00000000..36ab54e1
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBShortcodeValue.php
@@ -0,0 +1,37 @@
+.
+*/
+
+require_once('ShortCodeLoader.php');
+
+class CFDBShortcodeValue extends ShortCodeLoader {
+
+ /**
+ * @param $atts array of short code attributes
+ * @return string value submitted to a form field as selected by $atts. See ExportToValue.php
+ */
+ public function handleShortcode($atts) {
+ $atts['fromshortcode'] = true;
+ require_once('ExportToValue.php');
+ $export = new ExportToValue();
+ return $export->export($atts['form'], $atts);
+ }
+
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBView.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBView.php
new file mode 100644
index 00000000..d861688c
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CFDBView.php
@@ -0,0 +1,90 @@
+.
+*/
+
+abstract class CFDBView {
+
+ /**
+ * @abstract
+ * @param $plugin CF7DBPlugin
+ * @return void
+ */
+ abstract function display(&$plugin);
+
+ protected function pageHeader(&$plugin) {
+ $this->sponsorLink($plugin);
+ $this->headerLinks();
+ }
+
+
+ protected function sponsorLink(&$plugin) {
+ if ('true' != $plugin->getOption('Donated')) {
+ ?>
+
+
+
+ .
+*/
+
+require_once('CF7DBPlugin.php');
+require_once('CFDBView.php');
+
+class CFDBViewShortCodeBuilder extends CFDBView {
+
+ /**
+ * @param $plugin CF7DBPlugin
+ * @return void
+ */
+ function display(&$plugin) {
+ if ($plugin == null) {
+ $plugin = new CF7DBPlugin;
+ }
+ $this->pageHeader($plugin);
+
+ // Identify which forms have data in the database
+ global $wpdb;
+ $tableName = $plugin->getSubmitsTableName();
+ $rows = $wpdb->get_results("select distinct `form_name` from `$tableName` order by `form_name`");
+ // if ($rows == null || count($rows) == 0) {
+ // _e('No form submissions in the database', 'contact-form-7-to-database-extension');
+ // return;
+ // }
+ $currSelection = ''; // todo
+ ?>
+
+
+
+
+
+
+
+
+
+ Short Code Builder
+
+
+ Short Code
+
+
+ [cfdb-html]
+ [cfdb-table]
+ [cfdb-datatable]
+ [cfdb-value]
+ [cfdb-count]
+ [cfdb-json]
+ [cfdb-export-link]
+
+
+
+ form
+
+
+ form_name;
+ $selected = ($formName == $currSelection) ? "selected" : "";
+ ?>
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
filter
+
+ &&
+ ||
+
+
+
+ =
+ !=
+ >
+ <
+ <=
+ <=
+ ===
+ !==
+ ~~
+
+
+
»
+
+
+
+
+
+
+
orderby
+
»
+
+
+
+ ASC
+ DESC
+
+
+
+
+
+
+
+
+
+
format
+
+
+ map
+ array
+ arraynoheader
+
+
+
+
+
+
+
function
+
+
+ min
+ max
+ sum
+ mean
+
+
+
+
+
+
+
filelinks
+
+
+ url
+ name
+ link
+ img
+
+
wpautop
+
+
+ false
+ true
+
+
+
+
+
+
+
enc
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
urlonly
+
+
+ true
+ false
+
+
+
+ .
+*/
+
+require_once('CF7DBPlugin.php');
+require_once('CFDBView.php');
+require_once('ExportToHtmlTable.php');
+
+class CFDBViewWhatsInDB extends CFDBView {
+
+ function display(&$plugin) {
+ if ($plugin == null) {
+ $plugin = new CF7DBPlugin;
+ }
+ $canEdit = $plugin->canUserDoRoleOption('CanChangeSubmitData');
+ $this->pageHeader($plugin);
+
+ global $wpdb;
+ $tableName = $plugin->getSubmitsTableName();
+ $useDataTables = $plugin->getOption('UseDataTablesJS', 'true') == 'true';
+ $tableHtmlId = 'cf2dbtable';
+
+ // Identify which forms have data in the database
+ $rows = $wpdb->get_results("select distinct `form_name` from `$tableName` order by `form_name`");
+ if ($rows == null || count($rows) == 0) {
+ _e('No form submissions in the database', 'contact-form-7-to-database-extension');
+ return;
+ }
+ $page = 1;
+ if (isset($_REQUEST['dbpage'])) {
+ $page = $_REQUEST['dbpage'];
+ }
+ else if (isset($_GET['dbpage'])) {
+ $page = $_GET['dbpage'];
+ }
+ $currSelection = null; //$rows[0]->form_name;
+ if (isset($_REQUEST['form_name'])) {
+ $currSelection = $_REQUEST['form_name'];
+ }
+ else if (isset($_GET['form_name'])) {
+ $currSelection = $_GET['form_name'];
+ }
+ if ($currSelection) {
+ // Check for delete operation
+ if (isset($_POST['delete']) && $canEdit) {
+ if (isset($_POST['submit_time'])) {
+ $submitTime = $_POST['submit_time'];
+ $wpdb->query(
+ $wpdb->prepare(
+ "delete from `$tableName` where `form_name` = '%s' and `submit_time` = %F",
+ $currSelection, $submitTime));
+ }
+ else if (isset($_POST['all'])) {
+ $wpdb->query(
+ $wpdb->prepare(
+ "delete from `$tableName` where `form_name` = '%s'", $currSelection));
+ }
+ else {
+ foreach ($_POST as $name => $value) { // checkboxes
+ if ($value == 'row') {
+ // Dots and spaces in variable names are converted to underscores. For example becomes $_REQUEST["a_b"].
+ // http://www.php.net/manual/en/language.variables.external.php
+ // We are expecting a time value like '1300728460.6626' but will instead get '1300728460_6626'
+ // so we need to put the '.' back in before going to the DB.
+ $name = str_replace('_', '.', $name);
+ $wpdb->query(
+ $wpdb->prepare(
+ "delete from `$tableName` where `form_name` = '%s' and `submit_time` = %F",
+ $currSelection, $name));
+ }
+ }
+ }
+ }
+ }
+ // Form selection drop-down list
+ $pluginDirUrl = $plugin->getPluginDirUrl();
+
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ getDataTableTranslationUrl();
+ ?>
+
+
+
+
+
+ getOption('ShowQuery')) {
+ ?>
+
+
+
getPivotQuery($currSelection); ?>
+
+
+
+ getPluginFileUrl();
+ echo '/css/paginate.css';
+ echo '" type="text/css"/>';
+ // echo '';
+
+
+ if (!$page || $page < 1) $page = 1; //default to 1.
+ $startRow = $rowsPerPage * ($page - 1) + 1;
+
+
+ $endRow = min($startRow + $rowsPerPage - 1, $totalRows);
+ echo '';
+ printf(__('Returned entries %s to %s of %s entries in the database', 'contact-form-7-to-database-extension'),
+ $startRow, $endRow, $totalRows);
+ echo ' ';
+ echo '';
+
+ $numPages = ceil($totalRows / $rowsPerPage);
+ $adjacents = 3;
+
+ /* Setup page vars for display. */
+ $prev = $page - 1; //previous page is page - 1
+ $next = $page + 1; //next page is page + 1
+ $lastpage = $numPages;
+ $lpm1 = $lastpage - 1; //last page minus 1
+
+ /*
+ Now we apply our rules and draw the pagination object.
+ We're actually saving the code to a variable in case we want to draw it more than once.
+ */
+ if ($lastpage > 1) {
+ echo "\n";
+ }
+
+ echo '
';
+ return $startRow;
+ }
+
+ protected function paginateLink($page, $label) {
+ return "$label ";
+ }
+
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/CJ7DBCheckZendFramework.php b/src/wp-content/plugins/contact-form-7-to-database-extension/CJ7DBCheckZendFramework.php
new file mode 100644
index 00000000..ace1c258
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/CJ7DBCheckZendFramework.php
@@ -0,0 +1,100 @@
+.
+*/
+
+class CJ7DBCheckZendFramework {
+
+ /**
+ * Checks for the existence of the Zend Framework. If not found, prints out some (hopefully) helpful information
+ * @return bool true if Zend is found, *but* if not found calls wp_die()
+ */
+ public static function checkIncludeZend() {
+ if (!(include 'Zend/Loader.php')) {
+ ob_start();
+ ?>
+ Missing Zend Framework
+
+ This function requires part of the Zend framework that interacts with Google.
+ It appears that either:
+
+
+ The Zend Framework is not on the include_path or
+ You do not have the Zend Framework installed
+
+
+ include_path=""
+ php.ini file is
+ "
+ "
+
+
+ locate the the Zend directory on your computer
+ If found, here is one way to put it on the include path
+
+ copy the php.ini file to your WordPress installation to
+ [wp-dir]/wp-content/plugins/contact-form-7-to-database-extension/php.ini
+
+ add a line to this new file:
+ include_path=""
+
+
+ If not found, install and configure Zend (or contact or administrator or host provider)
+ See: Getting
+ Started
+ with the Google Data PHP Client Library
+ To download the part of Zend required, see: Zend
+ GData
+
+
+ 200, 'back_link' => true));
+
+ // Doesn't actually return because we call wp_die
+ return false;
+ }
+ return true;
+ }
+
+
+ /**
+ * Taken from: http://www.php.net/manual/en/function.phpinfo.php#87214
+ * @return array key => array(values) from phpinfo call
+ */
+ private static function getPhpInfo() {
+ ob_start();
+ phpinfo(INFO_GENERAL);
+ $phpinfo = array('phpinfo' => array());
+ if (preg_match_all('#(?:)|(?:(.*?)\s* (?:(.*?)\s* (?:(.*?)\s* )?)? )#s', ob_get_clean(), $matches, PREG_SET_ORDER))
+ foreach ($matches as $match)
+ if (strlen($match[1]))
+ $phpinfo[$match[1]] = array();
+ elseif (isset($match[3]))
+ $phpinfo[end(array_keys($phpinfo))][$match[2]] = isset($match[4]) ? array($match[3], $match[4]) : $match[3];
+ else
+ $phpinfo[end(array_keys($phpinfo))][] = $match[2];
+ return $phpinfo['phpinfo'];
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/Cf7ToDBGGoogleSS.js b/src/wp-content/plugins/contact-form-7-to-database-extension/Cf7ToDBGGoogleSS.js
new file mode 100644
index 00000000..8217c228
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/Cf7ToDBGGoogleSS.js
@@ -0,0 +1,177 @@
+/*
+ "Contact Form to Database Extension" Copyright (C) 2011 Michael Simpson (email : michael.d.simpson@gmail.com)
+
+ This file is part of Contact Form to Database Extension.
+
+ Contact Form to Database Extension is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Contact Form to Database Extension is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Contact Form to Database Extension.
+ If not, see .
+ */
+
+/* This is a script to be used with a Google Spreadsheet to make it dynamically load data (similar to Excel IQuery)
+ Instructions:
+1. Create a new Google Spreadsheet
+2. Go to Tools menu -> Scripts -> Script Editor...
+3. Copy the text from this file and paste it into the Google script editor.
+4. Save and close the script editor.
+5. Click on a cell A1 in the Spreadsheet (or any cell)
+6. Enter in the cell the formula:
+ =CF7ToDBData("siteUrl", "formName", "optional search", "user", "pwd")
+ Where the parameters are (be sure to quote them):
+ siteUrl: the URL of you site, e.g. "http://www.mywordpress.com"
+ formName: name of the form
+ optional search: leave as "" by default or add a search term to filter rows
+ user: your login name on your wordpress site
+ pwd: password
+*/
+
+function CF7ToDBData(siteUrl, formName, search, user, pwd) {
+ var response = fetchCF7ToDBCSVResponse(siteUrl, formName, search, user, pwd);
+ var contents = response.getContentText();
+ if (contents == '-1' || contents == '0') {
+ return "Error Code from WordPress: " + contents;
+ }
+
+ if (response.getResponseCode() >= 200 && response.getResponseCode() < 300) {
+ return csvToArray(contents);
+ }
+ else {
+ if (response.getResponseCode() == 401) {
+ return "Error: Login Failed";
+ }
+ if (response.getResponseCode() == 404) {
+ return "Error: Bad URL";
+ }
+ return "Error: HTTP " + response.getResponseCode();
+ }
+
+}
+
+function fetchCF7ToDBCSVResponse(siteUrl, formName, search, user, pwd) {
+ var encformName = encodeURI(formName).replace(new RegExp("%20", "g"), "%2B");
+ var url = siteUrl + "/wp-login.php?redirect_to=wp-admin/admin-ajax.php%3Faction%3Dcfdb-export%26form%3D" + encformName;
+ if (search != null && search != '') {
+ url += '%26search%3D' + encodeURI(search);
+ }
+ return UrlFetchApp.fetch(
+ url,
+ {
+ method: "post",
+ payload: "log=" + encodeURI(user) + "&pwd=" + encodeURI(pwd)
+ });
+}
+
+// Taken from: http://stackoverflow.com/questions/1293147/javascript-code-to-parse-csv-data
+function csvToArray(text) {
+ text = CSVToArray(text, ",");
+ var arr = [];
+ var c = [];
+ for (var i = 0; i < text.length - 1; i++) {
+ c = [];
+ for (var j = 0; j < text[0].length; j++) {
+ c.push(text[i][j]);
+ }
+ arr.push(c);
+ }
+
+ return arr;
+}
+
+// Taken from: http://stackoverflow.com/questions/1293147/javascript-code-to-parse-csv-data
+// This will parse a delimited string into an array of
+// arrays. The default delimiter is the comma, but this
+// can be overriden in the second argument.
+function CSVToArray(strData, strDelimiter) {
+ // Check to see if the delimiter is defined. If not,
+ // then default to comma.
+ strDelimiter = (strDelimiter || ",");
+
+ // Create a regular expression to parse the CSV values.
+ var objPattern = new RegExp(
+ (
+ // Delimiters.
+ "(\\" + strDelimiter + "|\\r?\\n|\\r|^)" +
+
+ // Quoted fields.
+ "(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" +
+
+ // Standard fields.
+ "([^\"\\" + strDelimiter + "\\r\\n]*))"
+ ),
+ "gi"
+ );
+
+
+ // Create an array to hold our data. Give the array
+ // a default empty first row.
+ var arrData = [
+ []
+ ];
+
+ // Create an array to hold our individual pattern
+ // matching groups.
+ var arrMatches = null;
+
+
+ // Keep looping over the regular expression matches
+ // until we can no longer find a match.
+ while (arrMatches = objPattern.exec(strData)) {
+
+ // Get the delimiter that was found.
+ var strMatchedDelimiter = arrMatches[ 1 ];
+
+ // Check to see if the given delimiter has a length
+ // (is not the start of string) and if it matches
+ // field delimiter. If id does not, then we know
+ // that this delimiter is a row delimiter.
+ if (
+ strMatchedDelimiter.length &&
+ (strMatchedDelimiter != strDelimiter)
+ ) {
+
+ // Since we have reached a new row of data,
+ // add an empty row to our data array.
+ arrData.push([]);
+
+ }
+
+
+ // Now that we have our delimiter out of the way,
+ // let's check to see which kind of value we
+ // captured (quoted or unquoted).
+ if (arrMatches[ 2 ]) {
+
+ // We found a quoted value. When we capture
+ // this value, unescape any double quotes.
+ var strMatchedValue = arrMatches[ 2 ].replace(
+ new RegExp("\"\"", "g"),
+ "\""
+ );
+
+ } else {
+
+ // We found a non-quoted value.
+ var strMatchedValue = arrMatches[ 3 ];
+
+ }
+
+
+ // Now that we have our value string, let's add
+ // it to the data array.
+ arrData[ arrData.length - 1 ].push(strMatchedValue);
+ }
+
+ // Return the parsed data.
+ return( arrData );
+}
+
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/Cf7ToDBGGoogleSS.js.php b/src/wp-content/plugins/contact-form-7-to-database-extension/Cf7ToDBGGoogleSS.js.php
new file mode 100644
index 00000000..18e9f778
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/Cf7ToDBGGoogleSS.js.php
@@ -0,0 +1,25 @@
+.
+*/
+
+ header("Content-Type: text/plain");
+ readfile('Cf7ToDBGGoogleSS.js');
+?>
+
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/Readme.txt b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/Readme.txt
new file mode 100644
index 00000000..28a1e645
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/Readme.txt
@@ -0,0 +1,11 @@
+This DataTables plugin (v1.7.x) for jQuery was developed out of the desire to allow highly configurable access to HTML tables with advanced access features.
+
+For detailed installation, usage and API instructions, please refer to the DataTables web-pages: http://www.datatables.net
+
+Questions, feature requests and bug reports (etc) can all be asked on the DataTables forums: http://www.datatables.net/forums/
+
+The DataTables source can be found in the media/js/ directory of this archive.
+
+DataTables is released with dual licensing, using the GPL v2 (license-gpl2.txt) and an BSD style license (license-bsd.txt). Please see the corresponding license file for details of these licenses. You are free to use, modify and distribute this software, but all copyright information must remain.
+
+If you discover any bugs in DataTables, have any suggestions for improvements or even if you just like using it, please free to get in touch with me: www.datatables.net/contact
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/license-bsd.txt b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/license-bsd.txt
new file mode 100644
index 00000000..cdb85aaa
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/license-bsd.txt
@@ -0,0 +1,10 @@
+Copyright (c) 2008-2010, Allan Jardine
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ * Neither the name of Allan Jardine nor SpryMedia UK may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/license-gpl2.txt b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/license-gpl2.txt
new file mode 100644
index 00000000..d511905c
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/license-gpl2.txt
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ , 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/css/demo_page.css b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/css/demo_page.css
new file mode 100644
index 00000000..bee7b0d9
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/css/demo_page.css
@@ -0,0 +1,93 @@
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * General page setup
+ */
+#dt_example {
+ font: 80%/1.45em "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+ margin: 0;
+ padding: 0;
+ color: #333;
+ background-color: #fff;
+}
+
+
+#dt_example #container {
+ width: 800px;
+ margin: 30px auto;
+ padding: 0;
+}
+
+
+#dt_example #footer {
+ margin: 50px auto 0 auto;
+ padding: 0;
+}
+
+#dt_example #demo {
+ margin: 30px auto 0 auto;
+}
+
+#dt_example .demo_jui {
+ margin: 30px auto 0 auto;
+}
+
+#dt_example .big {
+ font-size: 1.3em;
+ font-weight: bold;
+ line-height: 1.6em;
+ color: #4E6CA3;
+}
+
+#dt_example .spacer {
+ height: 20px;
+ clear: both;
+}
+
+#dt_example .clear {
+ clear: both;
+}
+
+#dt_example pre {
+ padding: 15px;
+ background-color: #F5F5F5;
+ border: 1px solid #CCCCCC;
+}
+
+#dt_example h1 {
+ margin-top: 2em;
+ font-size: 1.3em;
+ font-weight: normal;
+ line-height: 1.6em;
+ color: #4E6CA3;
+ border-bottom: 1px solid #B0BED9;
+ clear: both;
+}
+
+#dt_example h2 {
+ font-size: 1.2em;
+ font-weight: normal;
+ line-height: 1.6em;
+ color: #4E6CA3;
+ clear: both;
+}
+
+#dt_example a {
+ color: #0063DC;
+ text-decoration: none;
+}
+
+#dt_example a:hover {
+ text-decoration: underline;
+}
+
+#dt_example ul {
+ color: #4E6CA3;
+}
+
+.css_right {
+ float: right;
+}
+
+.css_left {
+ float: left;
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/css/demo_table.css b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/css/demo_table.css
new file mode 100644
index 00000000..3bc04337
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/css/demo_table.css
@@ -0,0 +1,538 @@
+/*
+ * File: demo_table.css
+ * CVS: $Id$
+ * Description: CSS descriptions for DataTables demo pages
+ * Author: Allan Jardine
+ * Created: Tue May 12 06:47:22 BST 2009
+ * Modified: $Date$ by $Author$
+ * Language: CSS
+ * Project: DataTables
+ *
+ * Copyright 2009 Allan Jardine. All Rights Reserved.
+ *
+ * ***************************************************************************
+ * DESCRIPTION
+ *
+ * The styles given here are suitable for the demos that are used with the standard DataTables
+ * distribution (see www.datatables.net). You will most likely wish to modify these styles to
+ * meet the layout requirements of your site.
+ *
+ * Common issues:
+ * 'full_numbers' pagination - I use an extra selector on the body tag to ensure that there is
+ * no conflict between the two pagination types. If you want to use full_numbers pagination
+ * ensure that you either have "example_alt_pagination" as a body class name, or better yet,
+ * modify that selector.
+ * Note that the path used for Images is relative. All images are by default located in
+ * ../images/ - relative to this CSS file.
+ */
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * DataTables features
+ */
+
+.dataTables_wrapper {
+ position: relative;
+ min-height: 302px;
+ clear: both;
+ _height: 302px;
+ zoom: 1; /* Feeling sorry for IE */
+}
+
+.dataTables_processing {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 250px;
+ height: 30px;
+ margin-left: -125px;
+ margin-top: -15px;
+ padding: 14px 0 2px 0;
+ border: 1px solid #ddd;
+ text-align: center;
+ color: #999;
+ font-size: 14px;
+ background-color: white;
+}
+
+.dataTables_length {
+ width: 40%;
+ float: left;
+}
+
+.dataTables_filter {
+ width: 50%;
+ float: right;
+ text-align: right;
+}
+
+.dataTables_info {
+ width: 60%;
+ float: left;
+}
+
+.dataTables_paginate {
+ width: 44px;
+ * width: 50px;
+ float: right;
+ text-align: right;
+}
+
+/* Pagination nested */
+.paginate_disabled_previous, .paginate_enabled_previous, .paginate_disabled_next, .paginate_enabled_next {
+ height: 19px;
+ width: 19px;
+ margin-left: 3px;
+ float: left;
+}
+
+.paginate_disabled_previous {
+ background-image: url('../images/back_disabled.jpg');
+}
+
+.paginate_enabled_previous {
+ background-image: url('../images/back_enabled.jpg');
+}
+
+.paginate_disabled_next {
+ background-image: url('../images/forward_disabled.jpg');
+}
+
+.paginate_enabled_next {
+ background-image: url('../images/forward_enabled.jpg');
+}
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * DataTables display
+ */
+table.display {
+ margin: 0 auto;
+ clear: both;
+ width: 100%;
+
+ /* Note Firefox 3.5 and before have a bug with border-collapse
+ * ( https://bugzilla.mozilla.org/show%5Fbug.cgi?id=155955 )
+ * border-spacing: 0; is one possible option. Conditional-css.com is
+ * useful for this kind of thing
+ *
+ * Further note IE 6/7 has problems when calculating widths with border width.
+ * It subtracts one px relative to the other browsers from the first column, and
+ * adds one to the end...
+ *
+ * If you want that effect I'd suggest setting a border-top/left on th/td's and
+ * then filling in the gaps with other borders.
+ */
+}
+
+table.display thead th {
+ padding: 3px 18px 3px 10px;
+ border-bottom: 1px solid black;
+ font-weight: bold;
+ cursor: pointer;
+ * cursor: hand;
+}
+
+table.display tfoot th {
+ padding: 3px 18px 3px 10px;
+ border-top: 1px solid black;
+ font-weight: bold;
+}
+
+table.display tr.heading2 td {
+ border-bottom: 1px solid #aaa;
+}
+
+table.display td {
+ padding: 3px 10px;
+}
+
+table.display td.center {
+ text-align: center;
+}
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * DataTables sorting
+ */
+
+.sorting_asc {
+ background: url('../images/sort_asc.png') no-repeat center right;
+}
+
+.sorting_desc {
+ background: url('../images/sort_desc.png') no-repeat center right;
+}
+
+.sorting {
+ background: url('../images/sort_both.png') no-repeat center right;
+}
+
+.sorting_asc_disabled {
+ background: url('../images/sort_asc_disabled.png') no-repeat center right;
+}
+
+.sorting_desc_disabled {
+ background: url('../images/sort_desc_disabled.png') no-repeat center right;
+}
+
+
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * DataTables row classes
+ */
+table.display tr.odd.gradeA {
+ background-color: #ddffdd;
+}
+
+table.display tr.even.gradeA {
+ background-color: #eeffee;
+}
+
+table.display tr.odd.gradeC {
+ background-color: #ddddff;
+}
+
+table.display tr.even.gradeC {
+ background-color: #eeeeff;
+}
+
+table.display tr.odd.gradeX {
+ background-color: #ffdddd;
+}
+
+table.display tr.even.gradeX {
+ background-color: #ffeeee;
+}
+
+table.display tr.odd.gradeU {
+ background-color: #ddd;
+}
+
+table.display tr.even.gradeU {
+ background-color: #eee;
+}
+
+
+tr.odd {
+ background-color: #E2E4FF;
+}
+
+tr.even {
+ background-color: white;
+}
+
+
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Misc
+ */
+.dataTables_scroll {
+ clear: both;
+}
+
+.dataTables_scrollBody {
+ *margin-top: -1px;
+}
+
+.top, .bottom {
+ padding: 15px;
+ background-color: #F5F5F5;
+ border: 1px solid #CCCCCC;
+}
+
+.top .dataTables_info {
+ float: none;
+}
+
+.clear {
+ clear: both;
+}
+
+.dataTables_empty {
+ text-align: center;
+}
+
+tfoot input {
+ margin: 0.5em 0;
+ width: 100%;
+ color: #444;
+}
+
+tfoot input.search_init {
+ color: #999;
+}
+
+td.group {
+ background-color: #d1cfd0;
+ border-bottom: 2px solid #A19B9E;
+ border-top: 2px solid #A19B9E;
+}
+
+td.details {
+ background-color: #d1cfd0;
+ border: 2px solid #A19B9E;
+}
+
+
+.example_alt_pagination div.dataTables_info {
+ width: 40%;
+}
+
+.paging_full_numbers {
+ width: 400px;
+ height: 22px;
+ line-height: 22px;
+}
+
+.paging_full_numbers span.paginate_button,
+ .paging_full_numbers span.paginate_active {
+ border: 1px solid #aaa;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ padding: 2px 5px;
+ margin: 0 3px;
+ cursor: pointer;
+ *cursor: hand;
+}
+
+.paging_full_numbers span.paginate_button {
+ background-color: #ddd;
+}
+
+.paging_full_numbers span.paginate_button:hover {
+ background-color: #ccc;
+}
+
+.paging_full_numbers span.paginate_active {
+ background-color: #99B3FF;
+}
+
+table.display tr.even.row_selected td {
+ background-color: #B0BED9;
+}
+
+table.display tr.odd.row_selected td {
+ background-color: #9FAFD1;
+}
+
+
+/*
+ * Sorting classes for columns
+ */
+/* For the standard odd/even */
+tr.odd td.sorting_1 {
+ background-color: #D3D6FF;
+}
+
+tr.odd td.sorting_2 {
+ background-color: #DADCFF;
+}
+
+tr.odd td.sorting_3 {
+ background-color: #E0E2FF;
+}
+
+tr.even td.sorting_1 {
+ background-color: #EAEBFF;
+}
+
+tr.even td.sorting_2 {
+ background-color: #F2F3FF;
+}
+
+tr.even td.sorting_3 {
+ background-color: #F9F9FF;
+}
+
+
+/* For the Conditional-CSS grading rows */
+/*
+ Colour calculations (based off the main row colours)
+ Level 1:
+ dd > c4
+ ee > d5
+ Level 2:
+ dd > d1
+ ee > e2
+ */
+tr.odd.gradeA td.sorting_1 {
+ background-color: #c4ffc4;
+}
+
+tr.odd.gradeA td.sorting_2 {
+ background-color: #d1ffd1;
+}
+
+tr.odd.gradeA td.sorting_3 {
+ background-color: #d1ffd1;
+}
+
+tr.even.gradeA td.sorting_1 {
+ background-color: #d5ffd5;
+}
+
+tr.even.gradeA td.sorting_2 {
+ background-color: #e2ffe2;
+}
+
+tr.even.gradeA td.sorting_3 {
+ background-color: #e2ffe2;
+}
+
+tr.odd.gradeC td.sorting_1 {
+ background-color: #c4c4ff;
+}
+
+tr.odd.gradeC td.sorting_2 {
+ background-color: #d1d1ff;
+}
+
+tr.odd.gradeC td.sorting_3 {
+ background-color: #d1d1ff;
+}
+
+tr.even.gradeC td.sorting_1 {
+ background-color: #d5d5ff;
+}
+
+tr.even.gradeC td.sorting_2 {
+ background-color: #e2e2ff;
+}
+
+tr.even.gradeC td.sorting_3 {
+ background-color: #e2e2ff;
+}
+
+tr.odd.gradeX td.sorting_1 {
+ background-color: #ffc4c4;
+}
+
+tr.odd.gradeX td.sorting_2 {
+ background-color: #ffd1d1;
+}
+
+tr.odd.gradeX td.sorting_3 {
+ background-color: #ffd1d1;
+}
+
+tr.even.gradeX td.sorting_1 {
+ background-color: #ffd5d5;
+}
+
+tr.even.gradeX td.sorting_2 {
+ background-color: #ffe2e2;
+}
+
+tr.even.gradeX td.sorting_3 {
+ background-color: #ffe2e2;
+}
+
+tr.odd.gradeU td.sorting_1 {
+ background-color: #c4c4c4;
+}
+
+tr.odd.gradeU td.sorting_2 {
+ background-color: #d1d1d1;
+}
+
+tr.odd.gradeU td.sorting_3 {
+ background-color: #d1d1d1;
+}
+
+tr.even.gradeU td.sorting_1 {
+ background-color: #d5d5d5;
+}
+
+tr.even.gradeU td.sorting_2 {
+ background-color: #e2e2e2;
+}
+
+tr.even.gradeU td.sorting_3 {
+ background-color: #e2e2e2;
+}
+
+
+/*
+ * Row highlighting example
+ */
+.ex_highlight #example tbody tr.even:hover, #example tbody tr.even td.highlighted {
+ background-color: #ECFFB3;
+}
+
+.ex_highlight #example tbody tr.odd:hover, #example tbody tr.odd td.highlighted {
+ background-color: #E6FF99;
+}
+
+.ex_highlight_row #example tr.even:hover {
+ background-color: #ECFFB3;
+}
+
+.ex_highlight_row #example tr.even:hover td.sorting_1 {
+ background-color: #DDFF75;
+}
+
+.ex_highlight_row #example tr.even:hover td.sorting_2 {
+ background-color: #E7FF9E;
+}
+
+.ex_highlight_row #example tr.even:hover td.sorting_3 {
+ background-color: #E2FF89;
+}
+
+.ex_highlight_row #example tr.odd:hover {
+ background-color: #E6FF99;
+}
+
+.ex_highlight_row #example tr.odd:hover td.sorting_1 {
+ background-color: #D6FF5C;
+}
+
+.ex_highlight_row #example tr.odd:hover td.sorting_2 {
+ background-color: #E0FF84;
+}
+
+.ex_highlight_row #example tr.odd:hover td.sorting_3 {
+ background-color: #DBFF70;
+}
+
+
+/*
+ * KeyTable
+ */
+table.KeyTable td {
+ border: 3px solid transparent;
+}
+
+table.KeyTable td.focus {
+ border: 3px solid #3366FF;
+}
+
+table.display tr.gradeA {
+ background-color: #eeffee;
+}
+
+table.display tr.gradeC {
+ background-color: #ddddff;
+}
+
+table.display tr.gradeX {
+ background-color: #ffdddd;
+}
+
+table.display tr.gradeU {
+ background-color: #ddd;
+}
+
+div.box {
+ height: 100px;
+ padding: 10px;
+ overflow: auto;
+ border: 1px solid #8080FF;
+ background-color: #E5E5FF;
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/css/demo_table_jui.css b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/css/demo_table_jui.css
new file mode 100644
index 00000000..84268caa
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/css/demo_table_jui.css
@@ -0,0 +1,521 @@
+/*
+ * File: demo_table_jui.css
+ * CVS: $Id$
+ * Description: CSS descriptions for DataTables demo pages
+ * Author: Allan Jardine
+ * Created: Tue May 12 06:47:22 BST 2009
+ * Modified: $Date$ by $Author$
+ * Language: CSS
+ * Project: DataTables
+ *
+ * Copyright 2009 Allan Jardine. All Rights Reserved.
+ *
+ * ***************************************************************************
+ * DESCRIPTION
+ *
+ * The styles given here are suitable for the demos that are used with the standard DataTables
+ * distribution (see www.datatables.net). You will most likely wish to modify these styles to
+ * meet the layout requirements of your site.
+ *
+ * Common issues:
+ * 'full_numbers' pagination - I use an extra selector on the body tag to ensure that there is
+ * no conflict between the two pagination types. If you want to use full_numbers pagination
+ * ensure that you either have "example_alt_pagination" as a body class name, or better yet,
+ * modify that selector.
+ * Note that the path used for Images is relative. All images are by default located in
+ * ../images/ - relative to this CSS file.
+ */
+
+
+/*
+ * jQuery UI specific styling
+ */
+
+.paging_two_button .ui-button {
+ float: left;
+ cursor: pointer;
+ * cursor: hand;
+}
+
+.paging_full_numbers .ui-button {
+ padding: 2px 6px;
+ margin: 0;
+ cursor: pointer;
+ * cursor: hand;
+}
+
+.dataTables_paginate .ui-button {
+ margin-right: -0.1em !important;
+}
+
+.paging_full_numbers {
+ width: 350px !important;
+}
+
+.dataTables_wrapper .ui-toolbar {
+ padding: 5px;
+}
+
+.dataTables_paginate {
+ width: auto;
+}
+
+.dataTables_info {
+ padding-top: 3px;
+}
+
+table.display thead th {
+ padding: 3px 0px 3px 10px;
+ cursor: pointer;
+ * cursor: hand;
+}
+
+div.dataTables_wrapper .ui-widget-header {
+ font-weight: normal;
+}
+
+
+/*
+ * Sort arrow icon positioning
+ */
+table.display thead th div.DataTables_sort_wrapper {
+ position: relative;
+ padding-right: 20px;
+ padding-right: 20px;
+}
+
+table.display thead th div.DataTables_sort_wrapper span {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+ right: 0;
+}
+
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ * Everything below this line is the same as demo_table.css. This file is
+ * required for 'cleanliness' of the markup
+ *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * DataTables features
+ */
+
+.dataTables_wrapper {
+ position: relative;
+ min-height: 302px;
+ _height: 302px;
+ clear: both;
+}
+
+.dataTables_processing {
+ position: absolute;
+ top: 0px;
+ left: 50%;
+ width: 250px;
+ margin-left: -125px;
+ border: 1px solid #ddd;
+ text-align: center;
+ color: #999;
+ font-size: 11px;
+ padding: 2px 0;
+}
+
+.dataTables_length {
+ width: 40%;
+ float: left;
+}
+
+.dataTables_filter {
+ width: 50%;
+ float: right;
+ text-align: right;
+}
+
+.dataTables_info {
+ width: 50%;
+ float: left;
+}
+
+.dataTables_paginate {
+ float: right;
+ text-align: right;
+}
+
+/* Pagination nested */
+.paginate_disabled_previous, .paginate_enabled_previous, .paginate_disabled_next, .paginate_enabled_next {
+ height: 19px;
+ width: 19px;
+ margin-left: 3px;
+ float: left;
+}
+
+.paginate_disabled_previous {
+ background-image: url('../images/back_disabled.jpg');
+}
+
+.paginate_enabled_previous {
+ background-image: url('../images/back_enabled.jpg');
+}
+
+.paginate_disabled_next {
+ background-image: url('../images/forward_disabled.jpg');
+}
+
+.paginate_enabled_next {
+ background-image: url('../images/forward_enabled.jpg');
+}
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * DataTables display
+ */
+table.display {
+ margin: 0 auto;
+ width: 100%;
+ clear: both;
+ border-collapse: collapse;
+}
+
+table.display tfoot th {
+ padding: 3px 0px 3px 10px;
+ font-weight: bold;
+ font-weight: normal;
+}
+
+table.display tr.heading2 td {
+ border-bottom: 1px solid #aaa;
+}
+
+table.display td {
+ padding: 3px 10px;
+}
+
+table.display td.center {
+ text-align: center;
+}
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * DataTables sorting
+ */
+
+.sorting_asc {
+ background: url('../images/sort_asc.png') no-repeat center right;
+}
+
+.sorting_desc {
+ background: url('../images/sort_desc.png') no-repeat center right;
+}
+
+.sorting {
+ background: url('../images/sort_both.png') no-repeat center right;
+}
+
+.sorting_asc_disabled {
+ background: url('../images/sort_asc_disabled.png') no-repeat center right;
+}
+
+.sorting_desc_disabled {
+ background: url('../images/sort_desc_disabled.png') no-repeat center right;
+}
+
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * DataTables row classes
+ */
+table.display tr.odd.gradeA {
+ background-color: #ddffdd;
+}
+
+table.display tr.even.gradeA {
+ background-color: #eeffee;
+}
+
+
+
+
+table.display tr.odd.gradeA {
+ background-color: #ddffdd;
+}
+
+table.display tr.even.gradeA {
+ background-color: #eeffee;
+}
+
+table.display tr.odd.gradeC {
+ background-color: #ddddff;
+}
+
+table.display tr.even.gradeC {
+ background-color: #eeeeff;
+}
+
+table.display tr.odd.gradeX {
+ background-color: #ffdddd;
+}
+
+table.display tr.even.gradeX {
+ background-color: #ffeeee;
+}
+
+table.display tr.odd.gradeU {
+ background-color: #ddd;
+}
+
+table.display tr.even.gradeU {
+ background-color: #eee;
+}
+
+
+tr.odd {
+ background-color: #E2E4FF;
+}
+
+tr.even {
+ background-color: white;
+}
+
+
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Misc
+ */
+.dataTables_scroll {
+ clear: both;
+}
+
+.top, .bottom {
+ padding: 15px;
+ background-color: #F5F5F5;
+ border: 1px solid #CCCCCC;
+}
+
+.top .dataTables_info {
+ float: none;
+}
+
+.clear {
+ clear: both;
+}
+
+.dataTables_empty {
+ text-align: center;
+}
+
+tfoot input {
+ margin: 0.5em 0;
+ width: 100%;
+ color: #444;
+}
+
+tfoot input.search_init {
+ color: #999;
+}
+
+td.group {
+ background-color: #d1cfd0;
+ border-bottom: 2px solid #A19B9E;
+ border-top: 2px solid #A19B9E;
+}
+
+td.details {
+ background-color: #d1cfd0;
+ border: 2px solid #A19B9E;
+}
+
+
+.example_alt_pagination div.dataTables_info {
+ width: 40%;
+}
+
+.paging_full_numbers span.paginate_button,
+ .paging_full_numbers span.paginate_active {
+ border: 1px solid #aaa;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ padding: 2px 5px;
+ margin: 0 3px;
+ cursor: pointer;
+ *cursor: hand;
+}
+
+.paging_full_numbers span.paginate_button {
+ background-color: #ddd;
+}
+
+.paging_full_numbers span.paginate_button:hover {
+ background-color: #ccc;
+}
+
+.paging_full_numbers span.paginate_active {
+ background-color: #99B3FF;
+}
+
+table.display tr.even.row_selected td {
+ background-color: #B0BED9;
+}
+
+table.display tr.odd.row_selected td {
+ background-color: #9FAFD1;
+}
+
+
+/*
+ * Sorting classes for columns
+ */
+/* For the standard odd/even */
+tr.odd td.sorting_1 {
+ background-color: #D3D6FF;
+}
+
+tr.odd td.sorting_2 {
+ background-color: #DADCFF;
+}
+
+tr.odd td.sorting_3 {
+ background-color: #E0E2FF;
+}
+
+tr.even td.sorting_1 {
+ background-color: #EAEBFF;
+}
+
+tr.even td.sorting_2 {
+ background-color: #F2F3FF;
+}
+
+tr.even td.sorting_3 {
+ background-color: #F9F9FF;
+}
+
+
+/* For the Conditional-CSS grading rows */
+/*
+ Colour calculations (based off the main row colours)
+ Level 1:
+ dd > c4
+ ee > d5
+ Level 2:
+ dd > d1
+ ee > e2
+ */
+tr.odd.gradeA td.sorting_1 {
+ background-color: #c4ffc4;
+}
+
+tr.odd.gradeA td.sorting_2 {
+ background-color: #d1ffd1;
+}
+
+tr.odd.gradeA td.sorting_3 {
+ background-color: #d1ffd1;
+}
+
+tr.even.gradeA td.sorting_1 {
+ background-color: #d5ffd5;
+}
+
+tr.even.gradeA td.sorting_2 {
+ background-color: #e2ffe2;
+}
+
+tr.even.gradeA td.sorting_3 {
+ background-color: #e2ffe2;
+}
+
+tr.odd.gradeC td.sorting_1 {
+ background-color: #c4c4ff;
+}
+
+tr.odd.gradeC td.sorting_2 {
+ background-color: #d1d1ff;
+}
+
+tr.odd.gradeC td.sorting_3 {
+ background-color: #d1d1ff;
+}
+
+tr.even.gradeC td.sorting_1 {
+ background-color: #d5d5ff;
+}
+
+tr.even.gradeC td.sorting_2 {
+ background-color: #e2e2ff;
+}
+
+tr.even.gradeC td.sorting_3 {
+ background-color: #e2e2ff;
+}
+
+tr.odd.gradeX td.sorting_1 {
+ background-color: #ffc4c4;
+}
+
+tr.odd.gradeX td.sorting_2 {
+ background-color: #ffd1d1;
+}
+
+tr.odd.gradeX td.sorting_3 {
+ background-color: #ffd1d1;
+}
+
+tr.even.gradeX td.sorting_1 {
+ background-color: #ffd5d5;
+}
+
+tr.even.gradeX td.sorting_2 {
+ background-color: #ffe2e2;
+}
+
+tr.even.gradeX td.sorting_3 {
+ background-color: #ffe2e2;
+}
+
+tr.odd.gradeU td.sorting_1 {
+ background-color: #c4c4c4;
+}
+
+tr.odd.gradeU td.sorting_2 {
+ background-color: #d1d1d1;
+}
+
+tr.odd.gradeU td.sorting_3 {
+ background-color: #d1d1d1;
+}
+
+tr.even.gradeU td.sorting_1 {
+ background-color: #d5d5d5;
+}
+
+tr.even.gradeU td.sorting_2 {
+ background-color: #e2e2e2;
+}
+
+tr.even.gradeU td.sorting_3 {
+ background-color: #e2e2e2;
+}
+
+
+/*
+ * Row highlighting example
+ */
+.ex_highlight #example tbody tr.even:hover, #example tbody tr.even td.highlighted {
+ background-color: #ECFFB3;
+}
+
+.ex_highlight #example tbody tr.odd:hover, #example tbody tr.odd td.highlighted {
+ background-color: #E6FF99;
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/Sorting icons.psd b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/Sorting icons.psd
new file mode 100644
index 00000000..53b2e068
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/Sorting icons.psd differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/back_disabled.jpg b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/back_disabled.jpg
new file mode 100644
index 00000000..1e73a546
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/back_disabled.jpg differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/back_enabled.jpg b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/back_enabled.jpg
new file mode 100644
index 00000000..a6d764c7
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/back_enabled.jpg differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/favicon.ico b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/favicon.ico
new file mode 100644
index 00000000..6eeaa2a0
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/favicon.ico differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/forward_disabled.jpg b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/forward_disabled.jpg
new file mode 100644
index 00000000..28a9dc53
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/forward_disabled.jpg differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/forward_enabled.jpg b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/forward_enabled.jpg
new file mode 100644
index 00000000..598c075f
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/forward_enabled.jpg differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/sort_asc.png b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/sort_asc.png
new file mode 100644
index 00000000..a56d0e21
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/sort_asc.png differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/sort_asc_disabled.png b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/sort_asc_disabled.png
new file mode 100644
index 00000000..b7e621ef
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/sort_asc_disabled.png differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/sort_both.png b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/sort_both.png
new file mode 100644
index 00000000..839ac4bb
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/sort_both.png differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/sort_desc.png b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/sort_desc.png
new file mode 100644
index 00000000..90b29515
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/sort_desc.png differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/sort_desc_disabled.png b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/sort_desc_disabled.png
new file mode 100644
index 00000000..2409653d
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/images/sort_desc_disabled.png differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/js/jquery.dataTables.js b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/js/jquery.dataTables.js
new file mode 100644
index 00000000..581222e3
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/DataTables/media/js/jquery.dataTables.js
@@ -0,0 +1,6862 @@
+/*
+ * File: jquery.dataTables.js
+ * Version: 1.7.6
+ * Description: Paginate, search and sort HTML tables
+ * Author: Allan Jardine (www.sprymedia.co.uk)
+ * Created: 28/3/2008
+ * Language: Javascript
+ * License: GPL v2 or BSD 3 point style
+ * Project: Mtaala
+ * Contact: allan.jardine@sprymedia.co.uk
+ *
+ * Copyright 2008-2010 Allan Jardine, all rights reserved.
+ *
+ * This source file is free software, under either the GPL v2 license or a
+ * BSD style license, as supplied with this software.
+ *
+ * This source file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
+ *
+ * For details please refer to: http://www.datatables.net
+ */
+
+/*
+ * When considering jsLint, we need to allow eval() as it it is used for reading cookies and
+ * building the dynamic multi-column sort functions.
+ */
+/*jslint evil: true, undef: true, browser: true */
+/*globals $, jQuery,_fnExternApiFunc,_fnInitalise,_fnInitComplete,_fnLanguageProcess,_fnAddColumn,_fnColumnOptions,_fnAddData,_fnGatherData,_fnDrawHead,_fnDraw,_fnReDraw,_fnAjaxUpdate,_fnAjaxUpdateDraw,_fnAddOptionsHtml,_fnFeatureHtmlTable,_fnScrollDraw,_fnAjustColumnSizing,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnBuildSearchArray,_fnBuildSearchRow,_fnFilterCreateSearch,_fnDataToSearch,_fnSort,_fnSortAttachListener,_fnSortingClasses,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnFeatureHtmlLength,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnNodeToDataIndex,_fnVisbleColumns,_fnCalculateEnd,_fnConvertToWidth,_fnCalculateColumnWidths,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnArrayCmp,_fnDetectType,_fnSettingsFromNode,_fnGetDataMaster,_fnGetTrNodes,_fnGetTdNodes,_fnEscapeRegex,_fnDeleteIndex,_fnReOrderIndex,_fnColumnOrdering,_fnLog,_fnClearTable,_fnSaveState,_fnLoadState,_fnCreateCookie,_fnReadCookie,_fnGetUniqueThs,_fnScrollBarWidth,_fnApplyToChildren,_fnMap*/
+
+(function($, window, document) {
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Section - DataTables variables
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+ /*
+ * Variable: dataTableSettings
+ * Purpose: Store the settings for each dataTables instance
+ * Scope: jQuery.fn
+ */
+ $.fn.dataTableSettings = [];
+ var _aoSettings = $.fn.dataTableSettings; /* Short reference for fast internal lookup */
+
+ /*
+ * Variable: dataTableExt
+ * Purpose: Container for customisable parts of DataTables
+ * Scope: jQuery.fn
+ */
+ $.fn.dataTableExt = {};
+ var _oExt = $.fn.dataTableExt;
+
+
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Section - DataTables extensible objects
+ *
+ * The _oExt object is used to provide an area where user dfined plugins can be
+ * added to DataTables. The following properties of the object are used:
+ * oApi - Plug-in API functions
+ * aTypes - Auto-detection of types
+ * oSort - Sorting functions used by DataTables (based on the type)
+ * oPagination - Pagination functions for different input styles
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+ /*
+ * Variable: sVersion
+ * Purpose: Version string for plug-ins to check compatibility
+ * Scope: jQuery.fn.dataTableExt
+ * Notes: Allowed format is a.b.c.d.e where:
+ * a:int, b:int, c:int, d:string(dev|beta), e:int. d and e are optional
+ */
+ _oExt.sVersion = "1.7.6";
+
+ /*
+ * Variable: sErrMode
+ * Purpose: How should DataTables report an error. Can take the value 'alert' or 'throw'
+ * Scope: jQuery.fn.dataTableExt
+ */
+ _oExt.sErrMode = "alert";
+
+ /*
+ * Variable: iApiIndex
+ * Purpose: Index for what 'this' index API functions should use
+ * Scope: jQuery.fn.dataTableExt
+ */
+ _oExt.iApiIndex = 0;
+
+ /*
+ * Variable: oApi
+ * Purpose: Container for plugin API functions
+ * Scope: jQuery.fn.dataTableExt
+ */
+ _oExt.oApi = { };
+
+ /*
+ * Variable: aFiltering
+ * Purpose: Container for plugin filtering functions
+ * Scope: jQuery.fn.dataTableExt
+ */
+ _oExt.afnFiltering = [ ];
+
+ /*
+ * Variable: aoFeatures
+ * Purpose: Container for plugin function functions
+ * Scope: jQuery.fn.dataTableExt
+ * Notes: Array of objects with the following parameters:
+ * fnInit: Function for initialisation of Feature. Takes oSettings and returns node
+ * cFeature: Character that will be matched in sDom - case sensitive
+ * sFeature: Feature name - just for completeness :-)
+ */
+ _oExt.aoFeatures = [ ];
+
+ /*
+ * Variable: ofnSearch
+ * Purpose: Container for custom filtering functions
+ * Scope: jQuery.fn.dataTableExt
+ * Notes: This is an object (the name should match the type) for custom filtering function,
+ * which can be used for live DOM checking or formatted text filtering
+ */
+ _oExt.ofnSearch = { };
+
+ /*
+ * Variable: afnSortData
+ * Purpose: Container for custom sorting data source functions
+ * Scope: jQuery.fn.dataTableExt
+ * Notes: Array (associative) of functions which is run prior to a column of this
+ * 'SortDataType' being sorted upon.
+ * Function input parameters:
+ * object:oSettings- DataTables settings object
+ * int:iColumn - Target column number
+ * Return value: Array of data which exactly matched the full data set size for the column to
+ * be sorted upon
+ */
+ _oExt.afnSortData = [ ];
+
+ /*
+ * Variable: oStdClasses
+ * Purpose: Storage for the various classes that DataTables uses
+ * Scope: jQuery.fn.dataTableExt
+ */
+ _oExt.oStdClasses = {
+ /* Two buttons buttons */
+ "sPagePrevEnabled": "paginate_enabled_previous",
+ "sPagePrevDisabled": "paginate_disabled_previous",
+ "sPageNextEnabled": "paginate_enabled_next",
+ "sPageNextDisabled": "paginate_disabled_next",
+ "sPageJUINext": "",
+ "sPageJUIPrev": "",
+
+ /* Full numbers paging buttons */
+ "sPageButton": "paginate_button",
+ "sPageButtonActive": "paginate_active",
+ "sPageButtonStaticDisabled": "paginate_button",
+ "sPageFirst": "first",
+ "sPagePrevious": "previous",
+ "sPageNext": "next",
+ "sPageLast": "last",
+
+ /* Stripping classes */
+ "sStripOdd": "odd",
+ "sStripEven": "even",
+
+ /* Empty row */
+ "sRowEmpty": "dataTables_empty",
+
+ /* Features */
+ "sWrapper": "dataTables_wrapper",
+ "sFilter": "dataTables_filter",
+ "sInfo": "dataTables_info",
+ "sPaging": "dataTables_paginate paging_", /* Note that the type is postfixed */
+ "sLength": "dataTables_length",
+ "sProcessing": "dataTables_processing",
+
+ /* Sorting */
+ "sSortAsc": "sorting_asc",
+ "sSortDesc": "sorting_desc",
+ "sSortable": "sorting", /* Sortable in both directions */
+ "sSortableAsc": "sorting_asc_disabled",
+ "sSortableDesc": "sorting_desc_disabled",
+ "sSortableNone": "sorting_disabled",
+ "sSortColumn": "sorting_", /* Note that an int is postfixed for the sorting order */
+ "sSortJUIAsc": "",
+ "sSortJUIDesc": "",
+ "sSortJUI": "",
+ "sSortJUIAscAllowed": "",
+ "sSortJUIDescAllowed": "",
+ "sSortJUIWrapper": "",
+
+ /* Scrolling */
+ "sScrollWrapper": "dataTables_scroll",
+ "sScrollHead": "dataTables_scrollHead",
+ "sScrollHeadInner": "dataTables_scrollHeadInner",
+ "sScrollBody": "dataTables_scrollBody",
+ "sScrollFoot": "dataTables_scrollFoot",
+ "sScrollFootInner": "dataTables_scrollFootInner",
+
+ /* Misc */
+ "sFooterTH": ""
+ };
+
+ /*
+ * Variable: oJUIClasses
+ * Purpose: Storage for the various classes that DataTables uses - jQuery UI suitable
+ * Scope: jQuery.fn.dataTableExt
+ */
+ _oExt.oJUIClasses = {
+ /* Two buttons buttons */
+ "sPagePrevEnabled": "fg-button ui-button ui-state-default ui-corner-left",
+ "sPagePrevDisabled": "fg-button ui-button ui-state-default ui-corner-left ui-state-disabled",
+ "sPageNextEnabled": "fg-button ui-button ui-state-default ui-corner-right",
+ "sPageNextDisabled": "fg-button ui-button ui-state-default ui-corner-right ui-state-disabled",
+ "sPageJUINext": "ui-icon ui-icon-circle-arrow-e",
+ "sPageJUIPrev": "ui-icon ui-icon-circle-arrow-w",
+
+ /* Full numbers paging buttons */
+ "sPageButton": "fg-button ui-button ui-state-default",
+ "sPageButtonActive": "fg-button ui-button ui-state-default ui-state-disabled",
+ "sPageButtonStaticDisabled": "fg-button ui-button ui-state-default ui-state-disabled",
+ "sPageFirst": "first ui-corner-tl ui-corner-bl",
+ "sPagePrevious": "previous",
+ "sPageNext": "next",
+ "sPageLast": "last ui-corner-tr ui-corner-br",
+
+ /* Stripping classes */
+ "sStripOdd": "odd",
+ "sStripEven": "even",
+
+ /* Empty row */
+ "sRowEmpty": "dataTables_empty",
+
+ /* Features */
+ "sWrapper": "dataTables_wrapper",
+ "sFilter": "dataTables_filter",
+ "sInfo": "dataTables_info",
+ "sPaging": "dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi "+
+ "ui-buttonset-multi paging_", /* Note that the type is postfixed */
+ "sLength": "dataTables_length",
+ "sProcessing": "dataTables_processing",
+
+ /* Sorting */
+ "sSortAsc": "ui-state-default",
+ "sSortDesc": "ui-state-default",
+ "sSortable": "ui-state-default",
+ "sSortableAsc": "ui-state-default",
+ "sSortableDesc": "ui-state-default",
+ "sSortableNone": "ui-state-default",
+ "sSortColumn": "sorting_", /* Note that an int is postfixed for the sorting order */
+ "sSortJUIAsc": "css_right ui-icon ui-icon-triangle-1-n",
+ "sSortJUIDesc": "css_right ui-icon ui-icon-triangle-1-s",
+ "sSortJUI": "css_right ui-icon ui-icon-carat-2-n-s",
+ "sSortJUIAscAllowed": "css_right ui-icon ui-icon-carat-1-n",
+ "sSortJUIDescAllowed": "css_right ui-icon ui-icon-carat-1-s",
+ "sSortJUIWrapper": "DataTables_sort_wrapper",
+
+ /* Scrolling */
+ "sScrollWrapper": "dataTables_scroll",
+ "sScrollHead": "dataTables_scrollHead ui-state-default",
+ "sScrollHeadInner": "dataTables_scrollHeadInner",
+ "sScrollBody": "dataTables_scrollBody",
+ "sScrollFoot": "dataTables_scrollFoot ui-state-default",
+ "sScrollFootInner": "dataTables_scrollFootInner",
+
+ /* Misc */
+ "sFooterTH": "ui-state-default"
+ };
+
+ /*
+ * Variable: oPagination
+ * Purpose: Container for the various type of pagination that dataTables supports
+ * Scope: jQuery.fn.dataTableExt
+ */
+ _oExt.oPagination = {
+ /*
+ * Variable: two_button
+ * Purpose: Standard two button (forward/back) pagination
+ * Scope: jQuery.fn.dataTableExt.oPagination
+ */
+ "two_button": {
+ /*
+ * Function: oPagination.two_button.fnInit
+ * Purpose: Initalise dom elements required for pagination with forward/back buttons only
+ * Returns: -
+ * Inputs: object:oSettings - dataTables settings object
+ * node:nPaging - the DIV which contains this pagination control
+ * function:fnCallbackDraw - draw function which must be called on update
+ */
+ "fnInit": function ( oSettings, nPaging, fnCallbackDraw )
+ {
+ var nPrevious, nNext, nPreviousInner, nNextInner;
+
+ /* Store the next and previous elements in the oSettings object as they can be very
+ * usful for automation - particularly testing
+ */
+ if ( !oSettings.bJUI )
+ {
+ nPrevious = document.createElement( 'div' );
+ nNext = document.createElement( 'div' );
+ }
+ else
+ {
+ nPrevious = document.createElement( 'a' );
+ nNext = document.createElement( 'a' );
+
+ nNextInner = document.createElement('span');
+ nNextInner.className = oSettings.oClasses.sPageJUINext;
+ nNext.appendChild( nNextInner );
+
+ nPreviousInner = document.createElement('span');
+ nPreviousInner.className = oSettings.oClasses.sPageJUIPrev;
+ nPrevious.appendChild( nPreviousInner );
+ }
+
+ nPrevious.className = oSettings.oClasses.sPagePrevDisabled;
+ nNext.className = oSettings.oClasses.sPageNextDisabled;
+
+ nPrevious.title = oSettings.oLanguage.oPaginate.sPrevious;
+ nNext.title = oSettings.oLanguage.oPaginate.sNext;
+
+ nPaging.appendChild( nPrevious );
+ nPaging.appendChild( nNext );
+
+ $(nPrevious).bind( 'click.DT', function() {
+ if ( oSettings.oApi._fnPageChange( oSettings, "previous" ) )
+ {
+ /* Only draw when the page has actually changed */
+ fnCallbackDraw( oSettings );
+ }
+ } );
+
+ $(nNext).bind( 'click.DT', function() {
+ if ( oSettings.oApi._fnPageChange( oSettings, "next" ) )
+ {
+ fnCallbackDraw( oSettings );
+ }
+ } );
+
+ /* Take the brutal approach to cancelling text selection */
+ $(nPrevious).bind( 'selectstart.DT', function () { return false; } );
+ $(nNext).bind( 'selectstart.DT', function () { return false; } );
+
+ /* ID the first elements only */
+ if ( oSettings.sTableId !== '' && typeof oSettings.aanFeatures.p == "undefined" )
+ {
+ nPaging.setAttribute( 'id', oSettings.sTableId+'_paginate' );
+ nPrevious.setAttribute( 'id', oSettings.sTableId+'_previous' );
+ nNext.setAttribute( 'id', oSettings.sTableId+'_next' );
+ }
+ },
+
+ /*
+ * Function: oPagination.two_button.fnUpdate
+ * Purpose: Update the two button pagination at the end of the draw
+ * Returns: -
+ * Inputs: object:oSettings - dataTables settings object
+ * function:fnCallbackDraw - draw function to call on page change
+ */
+ "fnUpdate": function ( oSettings, fnCallbackDraw )
+ {
+ if ( !oSettings.aanFeatures.p )
+ {
+ return;
+ }
+
+ /* Loop over each instance of the pager */
+ var an = oSettings.aanFeatures.p;
+ for ( var i=0, iLen=an.length ; i= (iPages - iPageCountHalf))
+ {
+ iStartButton = iPages - iPageCount + 1;
+ iEndButton = iPages;
+ }
+ else
+ {
+ iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1;
+ iEndButton = iStartButton + iPageCount - 1;
+ }
+ }
+ }
+
+ /* Build the dynamic list */
+ for ( i=iStartButton ; i<=iEndButton ; i++ )
+ {
+ if ( iCurrentPage != i )
+ {
+ sList += ''+i+' ';
+ }
+ else
+ {
+ sList += ''+i+' ';
+ }
+ }
+
+ /* Loop over each instance of the pager */
+ var an = oSettings.aanFeatures.p;
+ var anButtons, anStatic, nPaginateList;
+ var fnClick = function() {
+ /* Use the information in the element to jump to the required page */
+ var iTarget = (this.innerHTML * 1) - 1;
+ oSettings._iDisplayStart = iTarget * oSettings._iDisplayLength;
+ fnCallbackDraw( oSettings );
+ return false;
+ };
+ var fnFalse = function () { return false; };
+
+ for ( i=0, iLen=an.length ; i y) ? 1 : 0));
+ },
+
+ "string-desc": function ( a, b )
+ {
+ var x = a.toLowerCase();
+ var y = b.toLowerCase();
+ return ((x < y) ? 1 : ((x > y) ? -1 : 0));
+ },
+
+
+ /*
+ * html sorting (ignore html tags)
+ */
+ "html-asc": function ( a, b )
+ {
+ var x = a.replace( /<.*?>/g, "" ).toLowerCase();
+ var y = b.replace( /<.*?>/g, "" ).toLowerCase();
+ return ((x < y) ? -1 : ((x > y) ? 1 : 0));
+ },
+
+ "html-desc": function ( a, b )
+ {
+ var x = a.replace( /<.*?>/g, "" ).toLowerCase();
+ var y = b.replace( /<.*?>/g, "" ).toLowerCase();
+ return ((x < y) ? 1 : ((x > y) ? -1 : 0));
+ },
+
+
+ /*
+ * date sorting
+ */
+ "date-asc": function ( a, b )
+ {
+ var x = Date.parse( a );
+ var y = Date.parse( b );
+
+ if ( isNaN(x) || x==="" )
+ {
+ x = Date.parse( "01/01/1970 00:00:00" );
+ }
+ if ( isNaN(y) || y==="" )
+ {
+ y = Date.parse( "01/01/1970 00:00:00" );
+ }
+
+ return x - y;
+ },
+
+ "date-desc": function ( a, b )
+ {
+ var x = Date.parse( a );
+ var y = Date.parse( b );
+
+ if ( isNaN(x) || x==="" )
+ {
+ x = Date.parse( "01/01/1970 00:00:00" );
+ }
+ if ( isNaN(y) || y==="" )
+ {
+ y = Date.parse( "01/01/1970 00:00:00" );
+ }
+
+ return y - x;
+ },
+
+
+ /*
+ * numerical sorting
+ */
+ "numeric-asc": function ( a, b )
+ {
+ var x = (a=="-" || a==="") ? 0 : a*1;
+ var y = (b=="-" || b==="") ? 0 : b*1;
+ return x - y;
+ },
+
+ "numeric-desc": function ( a, b )
+ {
+ var x = (a=="-" || a==="") ? 0 : a*1;
+ var y = (b=="-" || b==="") ? 0 : b*1;
+ return y - x;
+ }
+ };
+
+
+ /*
+ * Variable: aTypes
+ * Purpose: Container for the various type of type detection that dataTables supports
+ * Scope: jQuery.fn.dataTableExt
+ * Notes: The functions in this array are expected to parse a string to see if it is a data
+ * type that it recognises. If so then the function should return the name of the type (a
+ * corresponding sort function should be defined!), if the type is not recognised then the
+ * function should return null such that the parser and move on to check the next type.
+ * Note that ordering is important in this array - the functions are processed linearly,
+ * starting at index 0.
+ * Note that the input for these functions is always a string! It cannot be any other data
+ * type
+ */
+ _oExt.aTypes = [
+ /*
+ * Function: -
+ * Purpose: Check to see if a string is numeric
+ * Returns: string:'numeric' or null
+ * Inputs: string:sText - string to check
+ */
+ function ( sData )
+ {
+ /* Allow zero length strings as a number */
+ if ( sData.length === 0 )
+ {
+ return 'numeric';
+ }
+
+ var sValidFirstChars = "0123456789-";
+ var sValidChars = "0123456789.";
+ var Char;
+ var bDecimal = false;
+
+ /* Check for a valid first char (no period and allow negatives) */
+ Char = sData.charAt(0);
+ if (sValidFirstChars.indexOf(Char) == -1)
+ {
+ return null;
+ }
+
+ /* Check all the other characters are valid */
+ for ( var i=1 ; i') != -1 )
+ {
+ return 'html';
+ }
+ return null;
+ }
+ ];
+
+ /*
+ * Function: fnVersionCheck
+ * Purpose: Check a version string against this version of DataTables. Useful for plug-ins
+ * Returns: bool:true -this version of DataTables is greater or equal to the required version
+ * false -this version of DataTales is not suitable
+ * Inputs: string:sVersion - the version to check against. May be in the following formats:
+ * "a", "a.b" or "a.b.c"
+ * Notes: This function will only check the first three parts of a version string. It is
+ * assumed that beta and dev versions will meet the requirements. This might change in future
+ */
+ _oExt.fnVersionCheck = function( sVersion )
+ {
+ /* This is cheap, but very effective */
+ var fnZPad = function (Zpad, count)
+ {
+ while(Zpad.length < count) {
+ Zpad += '0';
+ }
+ return Zpad;
+ };
+ var aThis = _oExt.sVersion.split('.');
+ var aThat = sVersion.split('.');
+ var sThis = '', sThat = '';
+
+ for ( var i=0, iLen=aThat.length ; i= parseInt(sThat, 10);
+ };
+
+ /*
+ * Variable: _oExternConfig
+ * Purpose: Store information for DataTables to access globally about other instances
+ * Scope: jQuery.fn.dataTableExt
+ */
+ _oExt._oExternConfig = {
+ /* int:iNextUnique - next unique number for an instance */
+ "iNextUnique": 0
+ };
+
+
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Section - DataTables prototype
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+ /*
+ * Function: dataTable
+ * Purpose: DataTables information
+ * Returns: -
+ * Inputs: object:oInit - initalisation options for the table
+ */
+ $.fn.dataTable = function( oInit )
+ {
+ /*
+ * Function: classSettings
+ * Purpose: Settings container function for all 'class' properties which are required
+ * by dataTables
+ * Returns: -
+ * Inputs: -
+ */
+ function classSettings ()
+ {
+ this.fnRecordsTotal = function ()
+ {
+ if ( this.oFeatures.bServerSide ) {
+ return parseInt(this._iRecordsTotal, 10);
+ } else {
+ return this.aiDisplayMaster.length;
+ }
+ };
+
+ this.fnRecordsDisplay = function ()
+ {
+ if ( this.oFeatures.bServerSide ) {
+ return parseInt(this._iRecordsDisplay, 10);
+ } else {
+ return this.aiDisplay.length;
+ }
+ };
+
+ this.fnDisplayEnd = function ()
+ {
+ if ( this.oFeatures.bServerSide ) {
+ if ( this.oFeatures.bPaginate === false || this._iDisplayLength == -1 ) {
+ return this._iDisplayStart+this.aiDisplay.length;
+ } else {
+ return Math.min( this._iDisplayStart+this._iDisplayLength,
+ this._iRecordsDisplay );
+ }
+ } else {
+ return this._iDisplayEnd;
+ }
+ };
+
+ /*
+ * Variable: oInstance
+ * Purpose: The DataTables object for this table
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.oInstance = null;
+
+ /*
+ * Variable: sInstance
+ * Purpose: Unique idendifier for each instance of the DataTables object
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.sInstance = null;
+
+ /*
+ * Variable: oFeatures
+ * Purpose: Indicate the enablement of key dataTable features
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.oFeatures = {
+ "bPaginate": true,
+ "bLengthChange": true,
+ "bFilter": true,
+ "bSort": true,
+ "bInfo": true,
+ "bAutoWidth": true,
+ "bProcessing": false,
+ "bSortClasses": true,
+ "bStateSave": false,
+ "bServerSide": false
+ };
+
+ /*
+ * Variable: oScroll
+ * Purpose: Container for scrolling options
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.oScroll = {
+ "sX": "",
+ "sXInner": "",
+ "sY": "",
+ "bCollapse": false,
+ "bInfinite": false,
+ "iLoadGap": 100,
+ "iBarWidth": 0,
+ "bAutoCss": true
+ };
+
+ /*
+ * Variable: aanFeatures
+ * Purpose: Array referencing the nodes which are used for the features
+ * Scope: jQuery.dataTable.classSettings
+ * Notes: The parameters of this object match what is allowed by sDom - i.e.
+ * 'l' - Length changing
+ * 'f' - Filtering input
+ * 't' - The table!
+ * 'i' - Information
+ * 'p' - Pagination
+ * 'r' - pRocessing
+ */
+ this.aanFeatures = [];
+
+ /*
+ * Variable: oLanguage
+ * Purpose: Store the language strings used by dataTables
+ * Scope: jQuery.dataTable.classSettings
+ * Notes: The words in the format _VAR_ are variables which are dynamically replaced
+ * by javascript
+ */
+ this.oLanguage = {
+ "sProcessing": "Processing...",
+ "sLengthMenu": "Show _MENU_ entries",
+ "sZeroRecords": "No matching records found",
+ "sEmptyTable": "No data available in table",
+ "sInfo": "Showing _START_ to _END_ of _TOTAL_ entries",
+ "sInfoEmpty": "Showing 0 to 0 of 0 entries",
+ "sInfoFiltered": "(filtered from _MAX_ total entries)",
+ "sInfoPostFix": "",
+ "sSearch": "Search:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "First",
+ "sPrevious": "Previous",
+ "sNext": "Next",
+ "sLast": "Last"
+ },
+ "fnInfoCallback": null
+ };
+
+ /*
+ * Variable: aoData
+ * Purpose: Store data information
+ * Scope: jQuery.dataTable.classSettings
+ * Notes: This is an array of objects with the following parameters:
+ * int: _iId - internal id for tracking
+ * array: _aData - internal data - used for sorting / filtering etc
+ * node: nTr - display node
+ * array node: _anHidden - hidden TD nodes
+ * string: _sRowStripe
+ */
+ this.aoData = [];
+
+ /*
+ * Variable: aiDisplay
+ * Purpose: Array of indexes which are in the current display (after filtering etc)
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.aiDisplay = [];
+
+ /*
+ * Variable: aiDisplayMaster
+ * Purpose: Array of indexes for display - no filtering
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.aiDisplayMaster = [];
+
+ /*
+ * Variable: aoColumns
+ * Purpose: Store information about each column that is in use
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.aoColumns = [];
+
+ /*
+ * Variable: iNextId
+ * Purpose: Store the next unique id to be used for a new row
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.iNextId = 0;
+
+ /*
+ * Variable: asDataSearch
+ * Purpose: Search data array for regular expression searching
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.asDataSearch = [];
+
+ /*
+ * Variable: oPreviousSearch
+ * Purpose: Store the previous search incase we want to force a re-search
+ * or compare the old search to a new one
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.oPreviousSearch = {
+ "sSearch": "",
+ "bRegex": false,
+ "bSmart": true
+ };
+
+ /*
+ * Variable: aoPreSearchCols
+ * Purpose: Store the previous search for each column
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.aoPreSearchCols = [];
+
+ /*
+ * Variable: aaSorting
+ * Purpose: Sorting information
+ * Scope: jQuery.dataTable.classSettings
+ * Notes: Index 0 - column number
+ * Index 1 - current sorting direction
+ * Index 2 - index of asSorting for this column
+ */
+ this.aaSorting = [ [0, 'asc', 0] ];
+
+ /*
+ * Variable: aaSortingFixed
+ * Purpose: Sorting information that is always applied
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.aaSortingFixed = null;
+
+ /*
+ * Variable: asStripClasses
+ * Purpose: Classes to use for the striping of a table
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.asStripClasses = [];
+
+ /*
+ * Variable: asDestoryStrips
+ * Purpose: If restoring a table - we should restore it's striping classes as well
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.asDestoryStrips = [];
+
+ /*
+ * Variable: sDestroyWidth
+ * Purpose: If restoring a table - we should restore it's width
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.sDestroyWidth = 0;
+
+ /*
+ * Variable: fnRowCallback
+ * Purpose: Call this function every time a row is inserted (draw)
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.fnRowCallback = null;
+
+ /*
+ * Variable: fnHeaderCallback
+ * Purpose: Callback function for the header on each draw
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.fnHeaderCallback = null;
+
+ /*
+ * Variable: fnFooterCallback
+ * Purpose: Callback function for the footer on each draw
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.fnFooterCallback = null;
+
+ /*
+ * Variable: aoDrawCallback
+ * Purpose: Array of callback functions for draw callback functions
+ * Scope: jQuery.dataTable.classSettings
+ * Notes: Each array element is an object with the following parameters:
+ * function:fn - function to call
+ * string:sName - name callback (feature). useful for arranging array
+ */
+ this.aoDrawCallback = [];
+
+ /*
+ * Variable: fnInitComplete
+ * Purpose: Callback function for when the table has been initalised
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.fnInitComplete = null;
+
+ /*
+ * Variable: sTableId
+ * Purpose: Cache the table ID for quick access
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.sTableId = "";
+
+ /*
+ * Variable: nTable
+ * Purpose: Cache the table node for quick access
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.nTable = null;
+
+ /*
+ * Variable: nTHead
+ * Purpose: Permanent ref to the thead element
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.nTHead = null;
+
+ /*
+ * Variable: nTFoot
+ * Purpose: Permanent ref to the tfoot element - if it exists
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.nTFoot = null;
+
+ /*
+ * Variable: nTBody
+ * Purpose: Permanent ref to the tbody element
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.nTBody = null;
+
+ /*
+ * Variable: nTableWrapper
+ * Purpose: Cache the wrapper node (contains all DataTables controlled elements)
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.nTableWrapper = null;
+
+ /*
+ * Variable: bInitialised
+ * Purpose: Indicate if all required information has been read in
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.bInitialised = false;
+
+ /*
+ * Variable: aoOpenRows
+ * Purpose: Information about open rows
+ * Scope: jQuery.dataTable.classSettings
+ * Notes: Has the parameters 'nTr' and 'nParent'
+ */
+ this.aoOpenRows = [];
+
+ /*
+ * Variable: sDom
+ * Purpose: Dictate the positioning that the created elements will take
+ * Scope: jQuery.dataTable.classSettings
+ * Notes:
+ * The following options are allowed:
+ * 'l' - Length changing
+ * 'f' - Filtering input
+ * 't' - The table!
+ * 'i' - Information
+ * 'p' - Pagination
+ * 'r' - pRocessing
+ * The following constants are allowed:
+ * 'H' - jQueryUI theme "header" classes
+ * 'F' - jQueryUI theme "footer" classes
+ * The following syntax is expected:
+ * '<' and '>' - div elements
+ * '<"class" and '>' - div with a class
+ * Examples:
+ * '<"wrapper"flipt>', 'ip>'
+ */
+ this.sDom = 'lfrtip';
+
+ /*
+ * Variable: sPaginationType
+ * Purpose: Note which type of sorting should be used
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.sPaginationType = "two_button";
+
+ /*
+ * Variable: iCookieDuration
+ * Purpose: The cookie duration (for bStateSave) in seconds - default 2 hours
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.iCookieDuration = 60 * 60 * 2;
+
+ /*
+ * Variable: sCookiePrefix
+ * Purpose: The cookie name prefix
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.sCookiePrefix = "SpryMedia_DataTables_";
+
+ /*
+ * Variable: fnCookieCallback
+ * Purpose: Callback function for cookie creation
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.fnCookieCallback = null;
+
+ /*
+ * Variable: aoStateSave
+ * Purpose: Array of callback functions for state saving
+ * Scope: jQuery.dataTable.classSettings
+ * Notes: Each array element is an object with the following parameters:
+ * function:fn - function to call. Takes two parameters, oSettings and the JSON string to
+ * save that has been thus far created. Returns a JSON string to be inserted into a
+ * json object (i.e. '"param": [ 0, 1, 2]')
+ * string:sName - name of callback
+ */
+ this.aoStateSave = [];
+
+ /*
+ * Variable: aoStateLoad
+ * Purpose: Array of callback functions for state loading
+ * Scope: jQuery.dataTable.classSettings
+ * Notes: Each array element is an object with the following parameters:
+ * function:fn - function to call. Takes two parameters, oSettings and the object stored.
+ * May return false to cancel state loading.
+ * string:sName - name of callback
+ */
+ this.aoStateLoad = [];
+
+ /*
+ * Variable: oLoadedState
+ * Purpose: State that was loaded from the cookie. Useful for back reference
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.oLoadedState = null;
+
+ /*
+ * Variable: sAjaxSource
+ * Purpose: Source url for AJAX data for the table
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.sAjaxSource = null;
+
+ /*
+ * Variable: bAjaxDataGet
+ * Purpose: Note if draw should be blocked while getting data
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.bAjaxDataGet = true;
+
+ /*
+ * Variable: fnServerData
+ * Purpose: Function to get the server-side data - can be overruled by the developer
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.fnServerData = function ( url, data, callback ) {
+ $.ajax( {
+ "url": url,
+ "data": data,
+ "success": callback,
+ "dataType": "json",
+ "cache": false,
+ "error": function (xhr, error, thrown) {
+ if ( error == "parsererror" ) {
+ alert( "DataTables warning: JSON data from server could not be parsed. "+
+ "This is caused by a JSON formatting error." );
+ }
+ }
+ } );
+ };
+
+ /*
+ * Variable: fnFormatNumber
+ * Purpose: Format numbers for display
+ * Scope: jQuery.dataTable.classSettings
+ */
+ this.fnFormatNumber = function ( iIn )
+ {
+ if ( iIn < 1000 )
+ {
+ /* A small optimisation for what is likely to be the vast majority of use cases */
+ return iIn;
+ }
+ else
+ {
+ var s=(iIn+""), a=s.split(""), out="", iLen=s.length;
+
+ for ( var i=0 ; i= oSettings.aiDisplay.length )
+ {
+ oSettings._iDisplayStart -= oSettings._iDisplayLength;
+ if ( oSettings._iDisplayStart < 0 )
+ {
+ oSettings._iDisplayStart = 0;
+ }
+ }
+
+ if ( typeof bRedraw == 'undefined' || bRedraw )
+ {
+ _fnCalculateEnd( oSettings );
+ _fnDraw( oSettings );
+ }
+
+ return oData;
+ };
+
+ /*
+ * Function: fnClearTable
+ * Purpose: Quickly and simply clear a table
+ * Returns: -
+ * Inputs: bool:bRedraw - redraw the table or not - default true
+ * Notes: Thanks to Yekimov Denis for contributing the basis for this function!
+ */
+ this.fnClearTable = function( bRedraw )
+ {
+ /* Find settings from table node */
+ var oSettings = _fnSettingsFromNode( this[_oExt.iApiIndex] );
+ _fnClearTable( oSettings );
+
+ if ( typeof bRedraw == 'undefined' || bRedraw )
+ {
+ _fnDraw( oSettings );
+ }
+ };
+
+ /*
+ * Function: fnOpen
+ * Purpose: Open a display row (append a row after the row in question)
+ * Returns: node:nNewRow - the row opened
+ * Inputs: node:nTr - the table row to 'open'
+ * string:sHtml - the HTML to put into the row
+ * string:sClass - class to give the new TD cell
+ */
+ this.fnOpen = function( nTr, sHtml, sClass )
+ {
+ /* Find settings from table node */
+ var oSettings = _fnSettingsFromNode( this[_oExt.iApiIndex] );
+
+ /* the old open one if there is one */
+ this.fnClose( nTr );
+
+ var nNewRow = document.createElement("tr");
+ var nNewCell = document.createElement("td");
+ nNewRow.appendChild( nNewCell );
+ nNewCell.className = sClass;
+ nNewCell.colSpan = _fnVisbleColumns( oSettings );
+ nNewCell.innerHTML = sHtml;
+
+ /* If the nTr isn't on the page at the moment - then we don't insert at the moment */
+ var nTrs = $('tr', oSettings.nTBody);
+ if ( $.inArray(nTr, nTrs) != -1 )
+ {
+ $(nNewRow).insertAfter(nTr);
+ }
+
+ oSettings.aoOpenRows.push( {
+ "nTr": nNewRow,
+ "nParent": nTr
+ } );
+
+ return nNewRow;
+ };
+
+ /*
+ * Function: fnClose
+ * Purpose: Close a display row
+ * Returns: int: 0 (success) or 1 (failed)
+ * Inputs: node:nTr - the table row to 'close'
+ */
+ this.fnClose = function( nTr )
+ {
+ /* Find settings from table node */
+ var oSettings = _fnSettingsFromNode( this[_oExt.iApiIndex] );
+
+ for ( var i=0 ; itr', oSettings.nTHead)[0];
+ var nTrFoot = $('>tr', oSettings.nTFoot)[0];
+ var anTheadTh = [];
+ var anTfootTh = [];
+ for ( i=0 ; i= _fnVisbleColumns( oSettings ) )
+ {
+ nTrHead.appendChild( anTheadTh[iCol] );
+ anTrs = $('>tr', oSettings.nTHead);
+ for ( i=1, iLen=anTrs.length ; itr', oSettings.nTFoot);
+ for ( i=1, iLen=anTrs.length ; itr', oSettings.nTHead);
+ for ( i=1, iLen=anTrs.length ; itr', oSettings.nTFoot);
+ for ( i=1, iLen=anTrs.length ; itd:eq('+iBefore+')',
+ oSettings.aoData[i].nTr)[0] );
+ }
+ }
+
+ oSettings.aoColumns[iCol].bVisible = true;
+ }
+ else
+ {
+ /* Remove a column from display */
+ nTrHead.removeChild( anTheadTh[iCol] );
+ for ( i=0, iLen=oSettings.aoColumns[iCol].anThExtra.length ; itr>td.'+oSettings.oClasses.sRowEmpty, oSettings.nTable).parent().remove();
+
+ /* When scrolling we had to break the table up - restore it */
+ if ( oSettings.nTable != oSettings.nTHead.parentNode )
+ {
+ $('>thead', oSettings.nTable).remove();
+ oSettings.nTable.appendChild( oSettings.nTHead );
+ }
+
+ if ( oSettings.nTFoot && oSettings.nTable != oSettings.nTFoot.parentNode )
+ {
+ $('>tfoot', oSettings.nTable).remove();
+ oSettings.nTable.appendChild( oSettings.nTFoot );
+ }
+
+ /* Remove the DataTables generated nodes, events and classes */
+ oSettings.nTable.parentNode.removeChild( oSettings.nTable );
+ $(oSettings.nTableWrapper).remove();
+
+ oSettings.aaSorting = [];
+ oSettings.aaSortingFixed = [];
+ _fnSortingClasses( oSettings );
+
+ $(_fnGetTrNodes( oSettings )).removeClass( oSettings.asStripClasses.join(' ') );
+
+ if ( !oSettings.bJUI )
+ {
+ $('th', oSettings.nTHead).removeClass( [ _oExt.oStdClasses.sSortable,
+ _oExt.oStdClasses.sSortableAsc,
+ _oExt.oStdClasses.sSortableDesc,
+ _oExt.oStdClasses.sSortableNone ].join(' ')
+ );
+ }
+ else
+ {
+ $('th', oSettings.nTHead).removeClass( [ _oExt.oStdClasses.sSortable,
+ _oExt.oJUIClasses.sSortableAsc,
+ _oExt.oJUIClasses.sSortableDesc,
+ _oExt.oJUIClasses.sSortableNone ].join(' ')
+ );
+ $('th span', oSettings.nTHead).remove();
+ }
+
+ /* Add the TR elements back into the table in their original order */
+ nOrig.appendChild( oSettings.nTable );
+ for ( i=0, iLen=oSettings.aoData.length ; itr:even', nBody).addClass( oSettings.asDestoryStrips[0] );
+ $('>tr:odd', nBody).addClass( oSettings.asDestoryStrips[1] );
+
+ /* Remove the settings object from the settings array */
+ for ( i=0, iLen=_aoSettings.length ; i=0 if successful (index of new aoData entry), -1 if failed
+ * Inputs: object:oSettings - dataTables settings object
+ * array:aData - data array to be added
+ * Notes: There are two basic methods for DataTables to get data to display - a JS array
+ * (which is dealt with by this function), and the DOM, which has it's own optimised
+ * function (_fnGatherData). Be careful to make the same changes here as there and vice-versa
+ */
+ function _fnAddData ( oSettings, aDataSupplied )
+ {
+ /* Sanity check the length of the new array */
+ if ( aDataSupplied.length != oSettings.aoColumns.length &&
+ oSettings.iDrawError != oSettings.iDraw )
+ {
+ _fnLog( oSettings, 0, "Added data (size "+aDataSupplied.length+") does not match known "+
+ "number of columns ("+oSettings.aoColumns.length+")" );
+ oSettings.iDrawError = oSettings.iDraw;
+ return -1;
+ }
+
+
+ /* Create the object for storing information about this new row */
+ var aData = aDataSupplied.slice();
+ var iThisIndex = oSettings.aoData.length;
+ oSettings.aoData.push( {
+ "nTr": document.createElement('tr'),
+ "_iId": oSettings.iNextId++,
+ "_aData": aData,
+ "_anHidden": [],
+ "_sRowStripe": ''
+ } );
+
+ /* Create the cells */
+ var nTd, sThisType;
+ for ( var i=0 ; i= oSettings.fnRecordsDisplay()) ?
+ 0 : oSettings.iInitDisplayStart;
+ }
+ oSettings.iInitDisplayStart = -1;
+ _fnCalculateEnd( oSettings );
+ }
+
+ /* If we are dealing with Ajax - do it here */
+ if ( !oSettings.bDestroying && oSettings.oFeatures.bServerSide &&
+ !_fnAjaxUpdate( oSettings ) )
+ {
+ return;
+ }
+ else if ( !oSettings.oFeatures.bServerSide )
+ {
+ oSettings.iDraw++;
+ }
+
+ if ( oSettings.aiDisplay.length !== 0 )
+ {
+ var iStart = oSettings._iDisplayStart;
+ var iEnd = oSettings._iDisplayEnd;
+
+ if ( oSettings.oFeatures.bServerSide )
+ {
+ iStart = 0;
+ iEnd = oSettings.aoData.length;
+ }
+
+ for ( var j=iStart ; jtr', oSettings.nTHead)[0],
+ _fnGetDataMaster( oSettings ), oSettings._iDisplayStart, oSettings.fnDisplayEnd(),
+ oSettings.aiDisplay );
+ }
+
+ if ( typeof oSettings.fnFooterCallback == 'function' )
+ {
+ oSettings.fnFooterCallback.call( oSettings.oInstance, $('>tr', oSettings.nTFoot)[0],
+ _fnGetDataMaster( oSettings ), oSettings._iDisplayStart, oSettings.fnDisplayEnd(),
+ oSettings.aiDisplay );
+ }
+
+ /*
+ * Need to remove any old row from the display - note we can't just empty the tbody using
+ * $().html('') since this will unbind the jQuery event handlers (even although the node
+ * still exists!) - equally we can't use innerHTML, since IE throws an exception.
+ */
+ var
+ nAddFrag = document.createDocumentFragment(),
+ nRemoveFrag = document.createDocumentFragment(),
+ nBodyPar, nTrs;
+
+ if ( oSettings.nTBody )
+ {
+ nBodyPar = oSettings.nTBody.parentNode;
+ nRemoveFrag.appendChild( oSettings.nTBody );
+
+ /* When doing infinite scrolling, only remove child rows when sorting, filtering or start
+ * up. When not infinite scroll, always do it.
+ */
+ if ( !oSettings.oScroll.bInfinite || !oSettings._bInitComplete ||
+ oSettings.bSorted || oSettings.bFiltered )
+ {
+ nTrs = oSettings.nTBody.childNodes;
+ for ( i=nTrs.length-1 ; i>=0 ; i-- )
+ {
+ nTrs[i].parentNode.removeChild( nTrs[i] );
+ }
+ }
+
+ /* Put the draw table into the dom */
+ for ( i=0, iLen=anRows.length ; i=0 ; i-- )
+ {
+ oSettings.aoDrawCallback[i].fn.call( oSettings.oInstance, oSettings );
+ }
+
+ /* Draw is complete, sorting and filtering must be as well */
+ oSettings.bSorted = false;
+ oSettings.bFiltered = false;
+ oSettings.bDrawing = false;
+
+ if ( oSettings.oFeatures.bServerSide )
+ {
+ _fnProcessingDisplay( oSettings, false );
+ if ( typeof oSettings._bInitComplete == 'undefined' )
+ {
+ _fnInitComplete( oSettings );
+ }
+ }
+ }
+
+ /*
+ * Function: _fnReDraw
+ * Purpose: Redraw the table - taking account of the various features which are enabled
+ * Returns: -
+ * Inputs: object:oSettings - dataTables settings object
+ */
+ function _fnReDraw( oSettings )
+ {
+ if ( oSettings.oFeatures.bSort )
+ {
+ /* Sorting will refilter and draw for us */
+ _fnSort( oSettings, oSettings.oPreviousSearch );
+ }
+ else if ( oSettings.oFeatures.bFilter )
+ {
+ /* Filtering will redraw for us */
+ _fnFilterComplete( oSettings, oSettings.oPreviousSearch );
+ }
+ else
+ {
+ _fnCalculateEnd( oSettings );
+ _fnDraw( oSettings );
+ }
+ }
+
+ /*
+ * Function: _fnAjaxUpdate
+ * Purpose: Update the table using an Ajax call
+ * Returns: bool: block the table drawing or not
+ * Inputs: object:oSettings - dataTables settings object
+ */
+ function _fnAjaxUpdate( oSettings )
+ {
+ if ( oSettings.bAjaxDataGet )
+ {
+ _fnProcessingDisplay( oSettings, true );
+ var iColumns = oSettings.aoColumns.length;
+ var aoData = [];
+ var i;
+
+ /* Paging and general */
+ oSettings.iDraw++;
+ aoData.push( { "name": "sEcho", "value": oSettings.iDraw } );
+ aoData.push( { "name": "iColumns", "value": iColumns } );
+ aoData.push( { "name": "sColumns", "value": _fnColumnOrdering(oSettings) } );
+ aoData.push( { "name": "iDisplayStart", "value": oSettings._iDisplayStart } );
+ aoData.push( { "name": "iDisplayLength", "value": oSettings.oFeatures.bPaginate !== false ?
+ oSettings._iDisplayLength : -1 } );
+
+ /* Filtering */
+ if ( oSettings.oFeatures.bFilter !== false )
+ {
+ aoData.push( { "name": "sSearch", "value": oSettings.oPreviousSearch.sSearch } );
+ aoData.push( { "name": "bRegex", "value": oSettings.oPreviousSearch.bRegex } );
+ for ( i=0 ; i' )
+ {
+ /* End container div */
+ nInsertNode = nInsertNode.parentNode;
+ }
+ else if ( cOption == 'l' && oSettings.oFeatures.bPaginate && oSettings.oFeatures.bLengthChange )
+ {
+ /* Length */
+ nTmp = _fnFeatureHtmlLength( oSettings );
+ iPushFeature = 1;
+ }
+ else if ( cOption == 'f' && oSettings.oFeatures.bFilter )
+ {
+ /* Filter */
+ nTmp = _fnFeatureHtmlFilter( oSettings );
+ iPushFeature = 1;
+ }
+ else if ( cOption == 'r' && oSettings.oFeatures.bProcessing )
+ {
+ /* pRocessing */
+ nTmp = _fnFeatureHtmlProcessing( oSettings );
+ iPushFeature = 1;
+ }
+ else if ( cOption == 't' )
+ {
+ /* Table */
+ nTmp = _fnFeatureHtmlTable( oSettings );
+ iPushFeature = 1;
+ }
+ else if ( cOption == 'i' && oSettings.oFeatures.bInfo )
+ {
+ /* Info */
+ nTmp = _fnFeatureHtmlInfo( oSettings );
+ iPushFeature = 1;
+ }
+ else if ( cOption == 'p' && oSettings.oFeatures.bPaginate )
+ {
+ /* Pagination */
+ nTmp = _fnFeatureHtmlPaginate( oSettings );
+ iPushFeature = 1;
+ }
+ else if ( _oExt.aoFeatures.length !== 0 )
+ {
+ /* Plug-in features */
+ var aoFeatures = _oExt.aoFeatures;
+ for ( var k=0, kLen=aoFeatures.length ; kcaption', oSettings.nTable);
+ for ( var i=0, iLen=nCaptions.length ; i
+ $(oSettings.nTable).height() - oSettings.oScroll.iLoadGap )
+ {
+ /* Only do the redraw if we have to - we might be at the end of the data */
+ if ( oSettings.fnDisplayEnd() < oSettings.fnRecordsDisplay() )
+ {
+ _fnPageChange( oSettings, 'next' );
+ _fnCalculateEnd( oSettings );
+ _fnDraw( oSettings );
+ }
+ }
+ }
+ } );
+ }
+
+ oSettings.nScrollHead = nScrollHead;
+ oSettings.nScrollFoot = nScrollFoot;
+
+ return nScroller;
+ }
+
+ /*
+ * Function: _fnScrollDraw
+ * Purpose: Update the various tables for resizing
+ * Returns: node: - Node to add to the DOM
+ * Inputs: object:o - dataTables settings object
+ * Notes: It's a bit of a pig this function, but basically the idea to:
+ * 1. Re-create the table inside the scrolling div
+ * 2. Take live measurements from the DOM
+ * 3. Apply the measurements
+ * 4. Clean up
+ */
+ function _fnScrollDraw ( o )
+ {
+ var
+ nScrollHeadInner = o.nScrollHead.getElementsByTagName('div')[0],
+ nScrollHeadTable = nScrollHeadInner.getElementsByTagName('table')[0],
+ nScrollBody = o.nTable.parentNode,
+ i, iLen, j, jLen, anHeadToSize, anHeadSizers, anFootSizers, anFootToSize, oStyle, iVis,
+ iWidth, aApplied=[], iSanityWidth;
+
+ /*
+ * 1. Re-create the table inside the scrolling div
+ */
+
+ /* Remove the old minimised thead and tfoot elements in the inner table */
+ var nTheadSize = o.nTable.getElementsByTagName('thead');
+ if ( nTheadSize.length > 0 )
+ {
+ o.nTable.removeChild( nTheadSize[0] );
+ }
+
+ if ( o.nTFoot !== null )
+ {
+ /* Remove the old minimised footer element in the cloned header */
+ var nTfootSize = o.nTable.getElementsByTagName('tfoot');
+ if ( nTfootSize.length > 0 )
+ {
+ o.nTable.removeChild( nTfootSize[0] );
+ }
+ }
+
+ /* Clone the current header and footer elements and then place it into the inner table */
+ nTheadSize = o.nTHead.cloneNode(true);
+ o.nTable.insertBefore( nTheadSize, o.nTable.childNodes[0] );
+
+ if ( o.nTFoot !== null )
+ {
+ nTfootSize = o.nTFoot.cloneNode(true);
+ o.nTable.insertBefore( nTfootSize, o.nTable.childNodes[1] );
+ }
+
+ /*
+ * 2. Take live measurements from the DOM - do not alter the DOM itself!
+ */
+
+ /* Remove old sizing and apply the calculated column widths
+ * Get the unique column headers in the newly created (cloned) header. We want to apply the
+ * calclated sizes to this header
+ */
+ var nThs = _fnGetUniqueThs( nTheadSize );
+ for ( i=0, iLen=nThs.length ; i iSanityWidth-o.oScroll.iBarWidth )
+ {
+ /* Not possible to take account of it */
+ o.nTable.style.width = _fnStringToCss( iSanityWidth );
+ }
+ }
+ else
+ {
+ /* All else fails */
+ o.nTable.style.width = _fnStringToCss( iSanityWidth );
+ }
+ }
+
+ /* Recalculate the sanity width - now that we've applied the required width, before it was
+ * a temporary variable. This is required because the column width calculation is done
+ * before this table DOM is created.
+ */
+ iSanityWidth = $(o.nTable).outerWidth();
+
+ /* We want the hidden header to have zero height, so remove padding and borders. Then
+ * set the width based on the real headers
+ */
+ anHeadToSize = o.nTHead.getElementsByTagName('tr');
+ anHeadSizers = nTheadSize.getElementsByTagName('tr');
+
+ _fnApplyToChildren( function(nSizer, nToSize) {
+ oStyle = nSizer.style;
+ oStyle.paddingTop = "0";
+ oStyle.paddingBottom = "0";
+ oStyle.borderTopWidth = "0";
+ oStyle.borderBottomWidth = "0";
+ oStyle.height = 0;
+
+ iWidth = $(nSizer).width();
+ nToSize.style.width = _fnStringToCss( iWidth );
+ aApplied.push( iWidth );
+ }, anHeadSizers, anHeadToSize );
+ $(anHeadSizers).height(0);
+
+ if ( o.nTFoot !== null )
+ {
+ /* Clone the current footer and then place it into the body table as a "hidden header" */
+ anFootSizers = nTfootSize.getElementsByTagName('tr');
+ anFootToSize = o.nTFoot.getElementsByTagName('tr');
+
+ _fnApplyToChildren( function(nSizer, nToSize) {
+ oStyle = nSizer.style;
+ oStyle.paddingTop = "0";
+ oStyle.paddingBottom = "0";
+ oStyle.borderTopWidth = "0";
+ oStyle.borderBottomWidth = "0";
+ oStyle.height = 0;
+
+ iWidth = $(nSizer).width();
+ nToSize.style.width = _fnStringToCss( iWidth );
+ aApplied.push( iWidth );
+ }, anFootSizers, anFootToSize );
+ $(anFootSizers).height(0);
+ }
+
+ /*
+ * 3. Apply the measurements
+ */
+
+ /* "Hide" the header and footer that we used for the sizing. We want to also fix their width
+ * to what they currently are
+ */
+ _fnApplyToChildren( function(nSizer) {
+ nSizer.innerHTML = "";
+ nSizer.style.width = _fnStringToCss( aApplied.shift() );
+ }, anHeadSizers );
+
+ if ( o.nTFoot !== null )
+ {
+ _fnApplyToChildren( function(nSizer) {
+ nSizer.innerHTML = "";
+ nSizer.style.width = _fnStringToCss( aApplied.shift() );
+ }, anFootSizers );
+ }
+
+ /* Sanity check that the table is of a sensible width. If not then we are going to get
+ * misalignment
+ */
+ if ( $(o.nTable).outerWidth() < iSanityWidth )
+ {
+ if ( o.oScroll.sX === "" )
+ {
+ _fnLog( o, 1, "The table cannot fit into the current element which will cause column"+
+ " misalignment. It is suggested that you enable x-scrolling or increase the width"+
+ " the table has in which to be drawn" );
+ }
+ else if ( o.oScroll.sXInner !== "" )
+ {
+ _fnLog( o, 1, "The table cannot fit into the current element which will cause column"+
+ " misalignment. It is suggested that you increase the sScrollXInner property to"+
+ " allow it to draw in a larger area, or simply remove that parameter to allow"+
+ " automatic calculation" );
+ }
+ }
+
+
+ /*
+ * 4. Clean up
+ */
+
+ if ( o.oScroll.sY === "" )
+ {
+ /* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting
+ * the scrollbar height from the visible display, rather than adding it on. We need to
+ * set the height in order to sort this. Don't want to do it in any other browsers.
+ */
+ if ( $.browser.msie && $.browser.version <= 7 )
+ {
+ nScrollBody.style.height = _fnStringToCss( o.nTable.offsetHeight+o.oScroll.iBarWidth );
+ }
+ }
+
+ if ( o.oScroll.sY !== "" && o.oScroll.bCollapse )
+ {
+ nScrollBody.style.height = _fnStringToCss( o.oScroll.sY );
+
+ var iExtra = (o.oScroll.sX !== "" && o.nTable.offsetWidth > nScrollBody.offsetWidth) ?
+ o.oScroll.iBarWidth : 0;
+ if ( o.nTable.offsetHeight < nScrollBody.offsetHeight )
+ {
+ nScrollBody.style.height = _fnStringToCss( $(o.nTable).height()+iExtra );
+ }
+ }
+
+ /* Finally set the width's of the header and footer tables */
+ var iOuterWidth = $(o.nTable).outerWidth();
+ nScrollHeadTable.style.width = _fnStringToCss( iOuterWidth );
+ nScrollHeadInner.style.width = _fnStringToCss( iOuterWidth+o.oScroll.iBarWidth );
+
+ if ( o.nTFoot !== null )
+ {
+ var
+ nScrollFootInner = o.nScrollFoot.getElementsByTagName('div')[0],
+ nScrollFootTable = nScrollFootInner.getElementsByTagName('table')[0];
+
+ nScrollFootInner.style.width = _fnStringToCss( o.nTable.offsetWidth+o.oScroll.iBarWidth );
+ nScrollFootTable.style.width = _fnStringToCss( o.nTable.offsetWidth );
+ }
+
+ /* If sorting or filtering has occured, jump the scrolling back to the top */
+ if ( o.bSorted || o.bFiltered )
+ {
+ nScrollBody.scrollTop = 0;
+ }
+ }
+
+ /*
+ * Function: _fnAjustColumnSizing
+ * Purpose: Ajust the table column widths for new data
+ * Returns: -
+ * Inputs: object:oSettings - dataTables settings object
+ * Notes: You would probably want to do a redraw after calling this function!
+ */
+ function _fnAjustColumnSizing ( oSettings )
+ {
+ /* Not interested in doing column width calculation if autowidth is disabled */
+ if ( oSettings.oFeatures.bAutoWidth === false )
+ {
+ return false;
+ }
+
+ _fnCalculateColumnWidths( oSettings );
+ for ( var i=0 , iLen=oSettings.aoColumns.length ; i ';
+
+ var jqFilter = $("input", nFilter);
+ jqFilter.val( oSettings.oPreviousSearch.sSearch.replace('"','"') );
+ jqFilter.bind( 'keyup.DT', function(e) {
+ /* Update all other filter input elements for the new display */
+ var n = oSettings.aanFeatures.f;
+ for ( var i=0, iLen=n.length ; i=0 ; i-- )
+ {
+ var sData = _fnDataToSearch( oSettings.aoData[ oSettings.aiDisplay[i] ]._aData[iColumn],
+ oSettings.aoColumns[iColumn].sType );
+ if ( ! rpSearch.test( sData ) )
+ {
+ oSettings.aiDisplay.splice( i, 1 );
+ iIndexCorrector++;
+ }
+ }
+ }
+
+ /*
+ * Function: _fnFilter
+ * Purpose: Filter the data table based on user input and draw the table
+ * Returns: -
+ * Inputs: object:oSettings - dataTables settings object
+ * string:sInput - string to filter on
+ * int:iForce - optional - force a research of the master array (1) or not (undefined or 0)
+ * bool:bRegex - treat as a regular expression or not
+ * bool:bSmart - perform smart filtering or not
+ */
+ function _fnFilter( oSettings, sInput, iForce, bRegex, bSmart )
+ {
+ var i;
+ var rpSearch = _fnFilterCreateSearch( sInput, bRegex, bSmart );
+
+ /* Check if we are forcing or not - optional parameter */
+ if ( typeof iForce == 'undefined' || iForce === null )
+ {
+ iForce = 0;
+ }
+
+ /* Need to take account of custom filtering functions - always filter */
+ if ( _oExt.afnFiltering.length !== 0 )
+ {
+ iForce = 1;
+ }
+
+ /*
+ * If the input is blank - we want the full data set
+ */
+ if ( sInput.length <= 0 )
+ {
+ oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length);
+ oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
+ }
+ else
+ {
+ /*
+ * We are starting a new search or the new search string is smaller
+ * then the old one (i.e. delete). Search from the master array
+ */
+ if ( oSettings.aiDisplay.length == oSettings.aiDisplayMaster.length ||
+ oSettings.oPreviousSearch.sSearch.length > sInput.length || iForce == 1 ||
+ sInput.indexOf(oSettings.oPreviousSearch.sSearch) !== 0 )
+ {
+ /* Nuke the old display array - we are going to rebuild it */
+ oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length);
+
+ /* Force a rebuild of the search array */
+ _fnBuildSearchArray( oSettings, 1 );
+
+ /* Search through all records to populate the search array
+ * The the oSettings.aiDisplayMaster and asDataSearch arrays have 1 to 1
+ * mapping
+ */
+ for ( i=0 ; i tag - remove it */
+ sSearch = sSearch.replace(/\n/g," ").replace(/\r/g,"");
+ }
+
+ return sSearch;
+ }
+
+ /*
+ * Function: _fnFilterCreateSearch
+ * Purpose: Build a regular expression object suitable for searching a table
+ * Returns: RegExp: - constructed object
+ * Inputs: string:sSearch - string to search for
+ * bool:bRegex - treat as a regular expression or not
+ * bool:bSmart - perform smart filtering or not
+ */
+ function _fnFilterCreateSearch( sSearch, bRegex, bSmart )
+ {
+ var asSearch, sRegExpString;
+
+ if ( bSmart )
+ {
+ /* Generate the regular expression to use. Something along the lines of:
+ * ^(?=.*?\bone\b)(?=.*?\btwo\b)(?=.*?\bthree\b).*$
+ */
+ asSearch = bRegex ? sSearch.split( ' ' ) : _fnEscapeRegex( sSearch ).split( ' ' );
+ sRegExpString = '^(?=.*?'+asSearch.join( ')(?=.*?' )+').*$';
+ return new RegExp( sRegExpString, "i" );
+ }
+ else
+ {
+ sSearch = bRegex ? sSearch : _fnEscapeRegex( sSearch );
+ return new RegExp( sSearch, "i" );
+ }
+ }
+
+ /*
+ * Function: _fnDataToSearch
+ * Purpose: Convert raw data into something that the user can search on
+ * Returns: string: - search string
+ * Inputs: string:sData - data to be modified
+ * string:sType - data type
+ */
+ function _fnDataToSearch ( sData, sType )
+ {
+ if ( typeof _oExt.ofnSearch[sType] == "function" )
+ {
+ return _oExt.ofnSearch[sType]( sData );
+ }
+ else if ( sType == "html" )
+ {
+ return sData.replace(/\n/g," ").replace( /<.*?>/g, "" );
+ }
+ else if ( typeof sData == "string" )
+ {
+ return sData.replace(/\n/g," ");
+ }
+ return sData;
+ }
+
+
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Section - Feature: Sorting
+ */
+
+ /*
+ * Function: _fnSort
+ * Purpose: Change the order of the table
+ * Returns: -
+ * Inputs: object:oSettings - dataTables settings object
+ * bool:bApplyClasses - optional - should we apply classes or not
+ * Notes: We always sort the master array and then apply a filter again
+ * if it is needed. This probably isn't optimal - but atm I can't think
+ * of any other way which is (each has disadvantages). we want to sort aiDisplayMaster -
+ * but according to aoData[]._aData
+ */
+ function _fnSort ( oSettings, bApplyClasses )
+ {
+ var
+ iDataSort, iDataType,
+ i, iLen, j, jLen,
+ aaSort = [],
+ aiOrig = [],
+ oSort = _oExt.oSort,
+ aoData = oSettings.aoData,
+ aoColumns = oSettings.aoColumns;
+
+ /* No sorting required if server-side or no sorting array */
+ if ( !oSettings.oFeatures.bServerSide &&
+ (oSettings.aaSorting.length !== 0 || oSettings.aaSortingFixed !== null) )
+ {
+ if ( oSettings.aaSortingFixed !== null )
+ {
+ aaSort = oSettings.aaSortingFixed.concat( oSettings.aaSorting );
+ }
+ else
+ {
+ aaSort = oSettings.aaSorting.slice();
+ }
+
+ /* If there is a sorting data type, and a fuction belonging to it, then we need to
+ * get the data from the developer's function and apply it for this column
+ */
+ for ( i=0 ; i= iColumns )
+ {
+ for ( i=0 ; i=0 ?
+ oSettings._iDisplayStart - oSettings._iDisplayLength :
+ 0;
+
+ /* Correct for underrun */
+ if ( oSettings._iDisplayStart < 0 )
+ {
+ oSettings._iDisplayStart = 0;
+ }
+ }
+ else if ( sAction == "next" )
+ {
+ if ( oSettings._iDisplayLength >= 0 )
+ {
+ /* Make sure we are not over running the display array */
+ if ( oSettings._iDisplayStart + oSettings._iDisplayLength < oSettings.fnRecordsDisplay() )
+ {
+ oSettings._iDisplayStart += oSettings._iDisplayLength;
+ }
+ }
+ else
+ {
+ oSettings._iDisplayStart = 0;
+ }
+ }
+ else if ( sAction == "last" )
+ {
+ if ( oSettings._iDisplayLength >= 0 )
+ {
+ var iPages = parseInt( (oSettings.fnRecordsDisplay()-1) / oSettings._iDisplayLength, 10 ) + 1;
+ oSettings._iDisplayStart = (iPages-1) * oSettings._iDisplayLength;
+ }
+ else
+ {
+ oSettings._iDisplayStart = 0;
+ }
+ }
+ else
+ {
+ _fnLog( oSettings, 0, "Unknown paging action: "+sAction );
+ }
+
+ return iOldStart != oSettings._iDisplayStart;
+ }
+
+
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Section - Feature: HTML info
+ */
+
+ /*
+ * Function: _fnFeatureHtmlInfo
+ * Purpose: Generate the node required for the info display
+ * Returns: node
+ * Inputs: object:oSettings - dataTables settings object
+ */
+ function _fnFeatureHtmlInfo ( oSettings )
+ {
+ var nInfo = document.createElement( 'div' );
+ nInfo.className = oSettings.oClasses.sInfo;
+
+ /* Actions that are to be taken once only for this feature */
+ if ( typeof oSettings.aanFeatures.i == "undefined" )
+ {
+ /* Add draw callback */
+ oSettings.aoDrawCallback.push( {
+ "fn": _fnUpdateInfo,
+ "sName": "information"
+ } );
+
+ /* Add id */
+ if ( oSettings.sTableId !== '' )
+ {
+ nInfo.setAttribute( 'id', oSettings.sTableId+'_info' );
+ }
+ }
+
+ return nInfo;
+ }
+
+ /*
+ * Function: _fnUpdateInfo
+ * Purpose: Update the information elements in the display
+ * Returns: -
+ * Inputs: object:oSettings - dataTables settings object
+ */
+ function _fnUpdateInfo ( oSettings )
+ {
+ /* Show information about the table */
+ if ( !oSettings.oFeatures.bInfo || oSettings.aanFeatures.i.length === 0 )
+ {
+ return;
+ }
+
+ var
+ iStart = oSettings._iDisplayStart+1, iEnd = oSettings.fnDisplayEnd(),
+ iMax = oSettings.fnRecordsTotal(), iTotal = oSettings.fnRecordsDisplay(),
+ sStart = oSettings.fnFormatNumber( iStart ), sEnd = oSettings.fnFormatNumber( iEnd ),
+ sMax = oSettings.fnFormatNumber( iMax ), sTotal = oSettings.fnFormatNumber( iTotal ),
+ sOut;
+
+ /* When infinite scrolling, we are always starting at 1. _iDisplayStart is used only
+ * internally
+ */
+ if ( oSettings.oScroll.bInfinite )
+ {
+ sStart = oSettings.fnFormatNumber( 1 );
+ }
+
+ if ( oSettings.fnRecordsDisplay() === 0 &&
+ oSettings.fnRecordsDisplay() == oSettings.fnRecordsTotal() )
+ {
+ /* Empty record set */
+ sOut = oSettings.oLanguage.sInfoEmpty+ oSettings.oLanguage.sInfoPostFix;
+ }
+ else if ( oSettings.fnRecordsDisplay() === 0 )
+ {
+ /* Rmpty record set after filtering */
+ sOut = oSettings.oLanguage.sInfoEmpty +' '+
+ oSettings.oLanguage.sInfoFiltered.replace('_MAX_', sMax)+
+ oSettings.oLanguage.sInfoPostFix;
+ }
+ else if ( oSettings.fnRecordsDisplay() == oSettings.fnRecordsTotal() )
+ {
+ /* Normal record set */
+ sOut = oSettings.oLanguage.sInfo.
+ replace('_START_', sStart).
+ replace('_END_', sEnd).
+ replace('_TOTAL_', sTotal)+
+ oSettings.oLanguage.sInfoPostFix;
+ }
+ else
+ {
+ /* Record set after filtering */
+ sOut = oSettings.oLanguage.sInfo.
+ replace('_START_', sStart).
+ replace('_END_', sEnd).
+ replace('_TOTAL_', sTotal) +' '+
+ oSettings.oLanguage.sInfoFiltered.replace('_MAX_',
+ oSettings.fnFormatNumber(oSettings.fnRecordsTotal()))+
+ oSettings.oLanguage.sInfoPostFix;
+ }
+
+ if ( oSettings.oLanguage.fnInfoCallback !== null )
+ {
+ sOut = oSettings.oLanguage.fnInfoCallback( oSettings, iStart, iEnd, iMax, iTotal, sOut );
+ }
+
+ var n = oSettings.aanFeatures.i;
+ for ( var i=0, iLen=n.length ; i';
+ var i, iLen;
+
+ if ( oSettings.aLengthMenu.length == 2 && typeof oSettings.aLengthMenu[0] == 'object' &&
+ typeof oSettings.aLengthMenu[1] == 'object' )
+ {
+ for ( i=0, iLen=oSettings.aLengthMenu[0].length ; i'+
+ oSettings.aLengthMenu[1][i]+'';
+ }
+ }
+ else
+ {
+ for ( i=0, iLen=oSettings.aLengthMenu.length ; i'+
+ oSettings.aLengthMenu[i]+'';
+ }
+ }
+ sStdMenu += '';
+
+ var nLength = document.createElement( 'div' );
+ if ( oSettings.sTableId !== '' && typeof oSettings.aanFeatures.l == "undefined" )
+ {
+ nLength.setAttribute( 'id', oSettings.sTableId+'_length' );
+ }
+ nLength.className = oSettings.oClasses.sLength;
+ nLength.innerHTML = oSettings.oLanguage.sLengthMenu.replace( '_MENU_', sStdMenu );
+
+ /*
+ * Set the length to the current display length - thanks to Andrea Pavlovic for this fix,
+ * and Stefan Skopnik for fixing the fix!
+ */
+ $('select option[value="'+oSettings._iDisplayLength+'"]',nLength).attr("selected",true);
+
+ $('select', nLength).bind( 'change.DT', function(e) {
+ var iVal = $(this).val();
+
+ /* Update all other length options for the new display */
+ var n = oSettings.aanFeatures.l;
+ for ( i=0, iLen=n.length ; i oSettings.aiDisplay.length ||
+ oSettings._iDisplayLength == -1 )
+ {
+ oSettings._iDisplayEnd = oSettings.aiDisplay.length;
+ }
+ else
+ {
+ oSettings._iDisplayEnd = oSettings._iDisplayStart + oSettings._iDisplayLength;
+ }
+ }
+ }
+
+ /*
+ * Function: _fnConvertToWidth
+ * Purpose: Convert a CSS unit width to pixels (e.g. 2em)
+ * Returns: int:iWidth - width in pixels
+ * Inputs: string:sWidth - width to be converted
+ * node:nParent - parent to get the with for (required for
+ * relative widths) - optional
+ */
+ function _fnConvertToWidth ( sWidth, nParent )
+ {
+ if ( !sWidth || sWidth === null || sWidth === '' )
+ {
+ return 0;
+ }
+
+ if ( typeof nParent == "undefined" )
+ {
+ nParent = document.getElementsByTagName('body')[0];
+ }
+
+ var iWidth;
+ var nTmp = document.createElement( "div" );
+ nTmp.style.width = sWidth;
+
+ nParent.appendChild( nTmp );
+ iWidth = nTmp.offsetWidth;
+ nParent.removeChild( nTmp );
+
+ return ( iWidth );
+ }
+
+ /*
+ * Function: _fnCalculateColumnWidths
+ * Purpose: Calculate the width of columns for the table
+ * Returns: -
+ * Inputs: object:oSettings - dataTables settings object
+ */
+ function _fnCalculateColumnWidths ( oSettings )
+ {
+ var iTableWidth = oSettings.nTable.offsetWidth;
+ var iUserInputs = 0;
+ var iTmpWidth;
+ var iVisibleColumns = 0;
+ var iColums = oSettings.aoColumns.length;
+ var i;
+ var oHeaders = $('th', oSettings.nTHead);
+
+ /* Convert any user input sizes into pixel sizes */
+ for ( i=0 ; itd', nCalcTmp);
+ }
+ jqColSizing.each( function (i) {
+ this.style.width = "";
+
+ var iIndex = _fnVisibleToColumnIndex( oSettings, i );
+ if ( iIndex !== null && oSettings.aoColumns[iIndex].sWidthOrig !== "" )
+ {
+ this.style.width = oSettings.aoColumns[iIndex].sWidthOrig;
+ }
+ } );
+
+ /* Find the biggest td for each column and put it into the table */
+ for ( i=0 ; itd", nCalcTmp);
+ if ( oNodes.length === 0 )
+ {
+ oNodes = $("thead tr:eq(0)>th", nCalcTmp);
+ }
+
+ var iIndex, iCorrector = 0, iWidth;
+ for ( i=0 ; i 0 )
+ {
+ oSettings.aoColumns[i].sWidth = _fnStringToCss( iWidth );
+ }
+ iCorrector++;
+ }
+ }
+
+ oSettings.nTable.style.width = _fnStringToCss( $(nCalcTmp).outerWidth() );
+ nCalcTmp.parentNode.removeChild( nCalcTmp );
+ }
+ }
+
+ /*
+ * Function: _fnScrollingWidthAdjust
+ * Purpose: Adjust a table's width to take account of scrolling
+ * Returns: -
+ * Inputs: object:oSettings - dataTables settings object
+ * node:n - table node
+ */
+ function _fnScrollingWidthAdjust ( oSettings, n )
+ {
+ if ( oSettings.oScroll.sX === "" && oSettings.oScroll.sY !== "" )
+ {
+ /* When y-scrolling only, we want to remove the width of the scroll bar so the table
+ * + scroll bar will fit into the area avaialble.
+ */
+ var iOrigWidth = $(n).width();
+ n.style.width = _fnStringToCss( $(n).outerWidth()-oSettings.oScroll.iBarWidth );
+ }
+ else if ( oSettings.oScroll.sX !== "" )
+ {
+ /* When x-scrolling both ways, fix the table at it's current size, without adjusting */
+ n.style.width = _fnStringToCss( $(n).outerWidth() );
+ }
+ }
+
+ /*
+ * Function: _fnGetWidestNode
+ * Purpose: Get the widest node
+ * Returns: string: - max strlens for each column
+ * Inputs: object:oSettings - dataTables settings object
+ * int:iCol - column of interest
+ * boolean:bFast - Should we use fast (but non-accurate) calculation - optional,
+ * default true
+ * Notes: This operation is _expensive_ (!!!). It requires a lot of DOM interaction, but
+ * this is the only way to reliably get the widest string. For example 'mmm' would be wider
+ * than 'iiii' so we can't just ocunt characters. If this can be optimised it would be good
+ * to do so!
+ */
+ function _fnGetWidestNode( oSettings, iCol, bFast )
+ {
+ /* Use fast not non-accurate calculate based on the strlen */
+ if ( typeof bFast == 'undefined' || bFast )
+ {
+ var iMaxLen = _fnGetMaxLenString( oSettings, iCol );
+ var iFastVis = _fnColumnIndexToVisible( oSettings, iCol);
+ if ( iMaxLen < 0 )
+ {
+ return null;
+ }
+ return oSettings.aoData[iMaxLen].nTr.getElementsByTagName('td')[iFastVis];
+ }
+
+ /* Use the slow approach, but get high quality answers - note that this code is not actually
+ * used by DataTables by default. If you want to use it you can alter the call to
+ * _fnGetWidestNode to pass 'false' as the third argument
+ */
+ var
+ iMax = -1, i, iLen,
+ iMaxIndex = -1,
+ n = document.createElement('div');
+
+ n.style.visibility = "hidden";
+ n.style.position = "absolute";
+ document.body.appendChild( n );
+
+ for ( i=0, iLen=oSettings.aoData.length ; i iMax )
+ {
+ iMax = n.offsetWidth;
+ iMaxIndex = i;
+ }
+ }
+ document.body.removeChild( n );
+
+ if ( iMaxIndex >= 0 )
+ {
+ var iVis = _fnColumnIndexToVisible( oSettings, iCol);
+ var nRet = oSettings.aoData[iMaxIndex].nTr.getElementsByTagName('td')[iVis];
+ if ( nRet )
+ {
+ return nRet;
+ }
+ }
+ return null;
+ }
+
+ /*
+ * Function: _fnGetMaxLenString
+ * Purpose: Get the maximum strlen for each data column
+ * Returns: string: - max strlens for each column
+ * Inputs: object:oSettings - dataTables settings object
+ * int:iCol - column of interest
+ */
+ function _fnGetMaxLenString( oSettings, iCol )
+ {
+ var iMax = -1;
+ var iMaxIndex = -1;
+
+ for ( var i=0 ; i iMax )
+ {
+ iMax = s.length;
+ iMaxIndex = i;
+ }
+ }
+
+ return iMaxIndex;
+ }
+
+ /*
+ * Function: _fnStringToCss
+ * Purpose: Append a CSS unit (only if required) to a string
+ * Returns: 0 if match, 1 if length is different, 2 if no match
+ * Inputs: array:aArray1 - first array
+ * array:aArray2 - second array
+ */
+ function _fnStringToCss( s )
+ {
+ if ( s === null )
+ {
+ return "0px";
+ }
+
+ if ( typeof s == 'number' )
+ {
+ if ( s < 0 )
+ {
+ return "0px";
+ }
+ return s+"px";
+ }
+
+ /* Check if the last character is not 0-9 */
+ var c = s.charCodeAt( s.length-1 );
+ if (c < 0x30 || c > 0x39)
+ {
+ return s;
+ }
+ return s+"px";
+ }
+
+ /*
+ * Function: _fnArrayCmp
+ * Purpose: Compare two arrays
+ * Returns: 0 if match, 1 if length is different, 2 if no match
+ * Inputs: array:aArray1 - first array
+ * array:aArray2 - second array
+ */
+ function _fnArrayCmp( aArray1, aArray2 )
+ {
+ if ( aArray1.length != aArray2.length )
+ {
+ return 1;
+ }
+
+ for ( var i=0 ; i iTarget )
+ {
+ a[i]--;
+ }
+ }
+
+ if ( iTargetIndex != -1 )
+ {
+ a.splice( iTargetIndex, 1 );
+ }
+ }
+
+ /*
+ * Function: _fnReOrderIndex
+ * Purpose: Figure out how to reorder a display list
+ * Returns: array int:aiReturn - index list for reordering
+ * Inputs: object:oSettings - dataTables settings object
+ */
+ function _fnReOrderIndex ( oSettings, sColumns )
+ {
+ var aColumns = sColumns.split(',');
+ var aiReturn = [];
+
+ for ( var i=0, iLen=oSettings.aoColumns.length ; i 4096 ) /* Magic 10 for padding */
+ {
+ var aCookies =document.cookie.split(';');
+ for ( var i=0, iLen=aCookies.length ; itbody>tr', this);
+ for ( i=0, iLen=oSettings.asStripClasses.length ; i=0 ; i-- )
+ {
+ /* Each column def can target multiple columns, as it is an array */
+ var aTargets = oInit.aoColumnDefs[i].aTargets;
+ if ( !$.isArray( aTargets ) )
+ {
+ _fnLog( oSettings, 1, 'aTargets must be an array of targets, not a '+(typeof aTargets) );
+ }
+ for ( j=0, jLen=aTargets.length ; j= 0 )
+ {
+ /* 0+ integer, left to right column counting. We add columns which are unknown
+ * automatically. Is this the right behaviour for this? We should at least
+ * log it in future. We cannot do this for the negative or class targets, only here.
+ */
+ while( oSettings.aoColumns.length <= aTargets[j] )
+ {
+ _fnAddColumn( oSettings );
+ }
+ _fnColumnOptions( oSettings, aTargets[j], oInit.aoColumnDefs[i] );
+ }
+ else if ( typeof aTargets[j] == 'number' && aTargets[j] < 0 )
+ {
+ /* Negative integer, right to left column counting */
+ _fnColumnOptions( oSettings, oSettings.aoColumns.length+aTargets[j],
+ oInit.aoColumnDefs[i] );
+ }
+ else if ( typeof aTargets[j] == 'string' )
+ {
+ /* Class name matching on TH element */
+ for ( k=0, kLen=oSettings.aoColumns.length ; k= oSettings.aoColumns.length )
+ {
+ oSettings.aaSorting[i][0] = 0;
+ }
+ var oColumn = oSettings.aoColumns[ oSettings.aaSorting[i][0] ];
+
+ /* Add a default sorting index */
+ if ( typeof oSettings.aaSorting[i][2] == 'undefined' )
+ {
+ oSettings.aaSorting[i][2] = 0;
+ }
+
+ /* If aaSorting is not defined, then we use the first indicator in asSorting */
+ if ( typeof oInit.aaSorting == "undefined" &&
+ typeof oSettings.saved_aaSorting == "undefined" )
+ {
+ oSettings.aaSorting[i][1] = oColumn.asSorting[0];
+ }
+
+ /* Set the current sorting index based on aoColumns.asSorting */
+ for ( j=0, jLen=oColumn.asSorting.length ; j 0 )
+ {
+ oSettings.nTFoot = this.getElementsByTagName('tfoot')[0];
+ }
+
+ /* Check if there is data passing into the constructor */
+ if ( bUsePassedData )
+ {
+ for ( i=0 ; i=w-s){s=
+w-r+1;x=w}else{s=y-Math.ceil(r/2)+1;x=s+r-1}for(r=s;r<=x;r++)F+=y!=r?''+r+" ":''+r+" ";x=g.aanFeatures.p;var z,U=function(){g._iDisplayStart=(this.innerHTML*1-1)*g._iDisplayLength;m(g);return false},C=function(){return false};r=0;for(s=x.length;rm?1:0},"string-desc":function(g,m){g=g.toLowerCase();m=m.toLowerCase();return gm?-1:0},"html-asc":function(g,m){g=g.replace(/<.*?>/g,"").toLowerCase();m=m.replace(/<.*?>/g,"").toLowerCase();return gm?1:0},"html-desc":function(g,m){g=g.replace(/<.*?>/g,"").toLowerCase();m=m.replace(/<.*?>/g,"").toLowerCase();return gm?-1:0},"date-asc":function(g,m){g=Date.parse(g);m=Date.parse(m);
+if(isNaN(g)||g==="")g=Date.parse("01/01/1970 00:00:00");if(isNaN(m)||m==="")m=Date.parse("01/01/1970 00:00:00");return g-m},"date-desc":function(g,m){g=Date.parse(g);m=Date.parse(m);if(isNaN(g)||g==="")g=Date.parse("01/01/1970 00:00:00");if(isNaN(m)||m==="")m=Date.parse("01/01/1970 00:00:00");return m-g},"numeric-asc":function(g,m){return(g=="-"||g===""?0:g*1)-(m=="-"||m===""?0:m*1)},"numeric-desc":function(g,m){return(m=="-"||m===""?0:m*1)-(g=="-"||g===""?0:g*1)}};n.aTypes=[function(g){if(g.length===
+0)return"numeric";var m,r=false;m=g.charAt(0);if("0123456789-".indexOf(m)==-1)return null;for(var s=1;s")!=-1)return"html";return null}];n.fnVersionCheck=function(g){var m=function(x,u){for(;x.length=parseInt(w,10)};n._oExternConfig={iNextUnique:0};j.fn.dataTable=function(g){function m(){this.fnRecordsTotal=function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsTotal,10):this.aiDisplayMaster.length};this.fnRecordsDisplay=function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsDisplay,10):this.aiDisplay.length};this.fnDisplayEnd=function(){return this.oFeatures.bServerSide?
+this.oFeatures.bPaginate===false||this._iDisplayLength==-1?this._iDisplayStart+this.aiDisplay.length:Math.min(this._iDisplayStart+this._iDisplayLength,this._iRecordsDisplay):this._iDisplayEnd};this.sInstance=this.oInstance=null;this.oFeatures={bPaginate:true,bLengthChange:true,bFilter:true,bSort:true,bInfo:true,bAutoWidth:true,bProcessing:false,bSortClasses:true,bStateSave:false,bServerSide:false};this.oScroll={sX:"",sXInner:"",sY:"",bCollapse:false,bInfinite:false,iLoadGap:100,iBarWidth:0,bAutoCss:true};
+this.aanFeatures=[];this.oLanguage={sProcessing:"Processing...",sLengthMenu:"Show _MENU_ entries",sZeroRecords:"No matching records found",sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sSearch:"Search:",sUrl:"",oPaginate:{sFirst:"First",sPrevious:"Previous",sNext:"Next",sLast:"Last"},fnInfoCallback:null};this.aoData=[];this.aiDisplay=[];this.aiDisplayMaster=
+[];this.aoColumns=[];this.iNextId=0;this.asDataSearch=[];this.oPreviousSearch={sSearch:"",bRegex:false,bSmart:true};this.aoPreSearchCols=[];this.aaSorting=[[0,"asc",0]];this.aaSortingFixed=null;this.asStripClasses=[];this.asDestoryStrips=[];this.sDestroyWidth=0;this.fnFooterCallback=this.fnHeaderCallback=this.fnRowCallback=null;this.aoDrawCallback=[];this.fnInitComplete=null;this.sTableId="";this.nTableWrapper=this.nTBody=this.nTFoot=this.nTHead=this.nTable=null;this.bInitialised=false;this.aoOpenRows=
+[];this.sDom="lfrtip";this.sPaginationType="two_button";this.iCookieDuration=7200;this.sCookiePrefix="SpryMedia_DataTables_";this.fnCookieCallback=null;this.aoStateSave=[];this.aoStateLoad=[];this.sAjaxSource=this.oLoadedState=null;this.bAjaxDataGet=true;this.fnServerData=function(a,b,c){j.ajax({url:a,data:b,success:c,dataType:"json",cache:false,error:function(d,f){f=="parsererror"&&alert("DataTables warning: JSON data from server could not be parsed. This is caused by a JSON formatting error.")}})};
+this.fnFormatNumber=function(a){if(a<1E3)return a;else{var b=a+"";a=b.split("");var c="";b=b.length;for(var d=0;d=a.fnRecordsDisplay()?0:a.iInitDisplayStart;a.iInitDisplayStart=-1;E(a)}if(!(!a.bDestroying&&a.oFeatures.bServerSide&&!ta(a))){a.oFeatures.bServerSide||a.iDraw++;if(a.aiDisplay.length!==0){var i=a._iDisplayStart,
+h=a._iDisplayEnd;if(a.oFeatures.bServerSide){i=0;h=a.aoData.length}for(i=i;itr",a.nTHead)[0],
+V(a),a._iDisplayStart,a.fnDisplayEnd(),a.aiDisplay);typeof a.fnFooterCallback=="function"&&a.fnFooterCallback.call(a.oInstance,j(">tr",a.nTFoot)[0],V(a),a._iDisplayStart,a.fnDisplayEnd(),a.aiDisplay);f=p.createDocumentFragment();b=p.createDocumentFragment();if(a.nTBody){e=a.nTBody.parentNode;b.appendChild(a.nTBody);if(!a.oScroll.bInfinite||!a._bInitComplete||a.bSorted||a.bFiltered){c=a.nTBody.childNodes;for(b=c.length-1;b>=0;b--)c[b].parentNode.removeChild(c[b])}b=0;for(c=d.length;b=0;b--)a.aoDrawCallback[b].fn.call(a.oInstance,a);a.bSorted=false;a.bFiltered=false;a.bDrawing=false;if(a.oFeatures.bServerSide){K(a,false);typeof a._bInitComplete=="undefined"&&w(a)}}}function W(a){if(a.oFeatures.bSort)O(a,a.oPreviousSearch);else if(a.oFeatures.bFilter)P(a,a.oPreviousSearch);else{E(a);C(a)}}function ta(a){if(a.bAjaxDataGet){K(a,true);var b=a.aoColumns.length,c=[],d;a.iDraw++;c.push({name:"sEcho",
+value:a.iDraw});c.push({name:"iColumns",value:b});c.push({name:"sColumns",value:ca(a)});c.push({name:"iDisplayStart",value:a._iDisplayStart});c.push({name:"iDisplayLength",value:a.oFeatures.bPaginate!==false?a._iDisplayLength:-1});if(a.oFeatures.bFilter!==false){c.push({name:"sSearch",value:a.oPreviousSearch.sSearch});c.push({name:"bRegex",value:a.oPreviousSearch.bRegex});for(d=0;d")c=c.parentNode;else if(i=="l"&&a.oFeatures.bPaginate&&a.oFeatures.bLengthChange){f=wa(a);e=1}else if(i=="f"&&a.oFeatures.bFilter){f=xa(a);e=1}else if(i=="r"&&a.oFeatures.bProcessing){f=ya(a);e=1}else if(i=="t"){f=za(a);e=1}else if(i=="i"&&a.oFeatures.bInfo){f=Aa(a);e=1}else if(i=="p"&&a.oFeatures.bPaginate){f=Ba(a);e=1}else if(n.aoFeatures.length!==0){h=n.aoFeatures;q=0;for(k=h.length;qcaption",a.nTable);i=0;for(k=d.length;ij(a.nTable).height()-a.oScroll.iLoadGap)if(a.fnDisplayEnd()0&&a.nTable.removeChild(i[0]);if(a.nTFoot!==null){k=a.nTable.getElementsByTagName("tfoot");k.length>0&&a.nTable.removeChild(k[0])}i=a.nTHead.cloneNode(true);a.nTable.insertBefore(i,a.nTable.childNodes[0]);if(a.nTFoot!==null){k=a.nTFoot.cloneNode(true);a.nTable.insertBefore(k,a.nTable.childNodes[1])}var J=fa(i);f=0;for(e=J.length;ff-a.oScroll.iBarWidth)a.nTable.style.width=v(f)}else a.nTable.style.width=
+v(f);f=j(a.nTable).outerWidth();e=a.nTHead.getElementsByTagName("tr");i=i.getElementsByTagName("tr");L(function(B,I){l=B.style;l.paddingTop="0";l.paddingBottom="0";l.borderTopWidth="0";l.borderBottomWidth="0";l.height=0;t=j(B).width();I.style.width=v(t);G.push(t)},i,e);j(i).height(0);if(a.nTFoot!==null){h=k.getElementsByTagName("tr");k=a.nTFoot.getElementsByTagName("tr");L(function(B,I){l=B.style;l.paddingTop="0";l.paddingBottom="0";l.borderTopWidth="0";l.borderBottomWidth="0";l.height=0;t=j(B).width();
+I.style.width=v(t);G.push(t)},h,k);j(h).height(0)}L(function(B){B.innerHTML="";B.style.width=v(G.shift())},i);a.nTFoot!==null&&L(function(B){B.innerHTML="";B.style.width=v(G.shift())},h);if(j(a.nTable).outerWidth()d.offsetWidth?a.oScroll.iBarWidth:0;if(a.nTable.offsetHeight ';var c=j("input",b);c.val(a.oPreviousSearch.sSearch.replace('"',"""));c.bind("keyup.DT",function(){for(var d=a.aanFeatures.f,f=0,e=d.length;f=0;d--){f=ja(a.aoData[a.aiDisplay[d]]._aData[c],a.aoColumns[c].sType);if(!b.test(f)){a.aiDisplay.splice(d,1);e++}}}}function Da(a,b,c,d,f){var e=ia(b,d,f);if(typeof c=="undefined"||c===null)c=0;if(n.afnFiltering.length!==0)c=1;if(b.length<=0){a.aiDisplay.splice(0,a.aiDisplay.length);a.aiDisplay=a.aiDisplayMaster.slice()}else if(a.aiDisplay.length==a.aiDisplayMaster.length||a.oPreviousSearch.sSearch.length>b.length||c==1||b.indexOf(a.oPreviousSearch.sSearch)!==
+0){a.aiDisplay.splice(0,a.aiDisplay.length);ha(a,1);for(c=0;c/g,"");else if(typeof a=="string")return a.replace(/\n/g," ");return a}function O(a,b){var c,d,f,e,i,h,k=[],l=[],q=n.oSort,t=a.aoData,G=a.aoColumns;if(!a.oFeatures.bServerSide&&(a.aaSorting.length!==0||a.aaSortingFixed!==null)){k=a.aaSortingFixed!==null?a.aaSortingFixed.concat(a.aaSorting):a.aaSorting.slice();for(f=0;f=i)for(b=0;b=0?a._iDisplayStart-a._iDisplayLength:0;if(a._iDisplayStart<0)a._iDisplayStart=0}else if(b=="next")if(a._iDisplayLength>=0){if(a._iDisplayStart+a._iDisplayLength=0){b=parseInt((a.fnRecordsDisplay()-1)/a._iDisplayLength,10)+1;a._iDisplayStart=(b-1)*a._iDisplayLength}else a._iDisplayStart=0;else H(a,0,"Unknown paging action: "+b);return c!=a._iDisplayStart}function Aa(a){var b=p.createElement("div");b.className=a.oClasses.sInfo;if(typeof a.aanFeatures.i=="undefined"){a.aoDrawCallback.push({fn:Ga,sName:"information"});a.sTableId!==""&&b.setAttribute("id",a.sTableId+"_info")}return b}
+function Ga(a){if(!(!a.oFeatures.bInfo||a.aanFeatures.i.length===0)){var b=a._iDisplayStart+1,c=a.fnDisplayEnd(),d=a.fnRecordsTotal(),f=a.fnRecordsDisplay(),e=a.fnFormatNumber(b),i=a.fnFormatNumber(c),h=a.fnFormatNumber(d),k=a.fnFormatNumber(f);if(a.oScroll.bInfinite)e=a.fnFormatNumber(1);e=a.fnRecordsDisplay()===0&&a.fnRecordsDisplay()==a.fnRecordsTotal()?a.oLanguage.sInfoEmpty+a.oLanguage.sInfoPostFix:a.fnRecordsDisplay()===0?a.oLanguage.sInfoEmpty+" "+a.oLanguage.sInfoFiltered.replace("_MAX_",
+h)+a.oLanguage.sInfoPostFix:a.fnRecordsDisplay()==a.fnRecordsTotal()?a.oLanguage.sInfo.replace("_START_",e).replace("_END_",i).replace("_TOTAL_",k)+a.oLanguage.sInfoPostFix:a.oLanguage.sInfo.replace("_START_",e).replace("_END_",i).replace("_TOTAL_",k)+" "+a.oLanguage.sInfoFiltered.replace("_MAX_",a.fnFormatNumber(a.fnRecordsTotal()))+a.oLanguage.sInfoPostFix;if(a.oLanguage.fnInfoCallback!==null)e=a.oLanguage.fnInfoCallback(a,b,c,d,f,e);a=a.aanFeatures.i;b=0;for(c=a.length;b",c,d;if(a.aLengthMenu.length==2&&typeof a.aLengthMenu[0]=="object"&&typeof a.aLengthMenu[1]=="object"){c=0;for(d=a.aLengthMenu[0].length;c'+a.aLengthMenu[1][c]+""}else{c=0;for(d=a.aLengthMenu.length;c'+a.aLengthMenu[c]+""}b+="";var f=p.createElement("div");
+a.sTableId!==""&&typeof a.aanFeatures.l=="undefined"&&f.setAttribute("id",a.sTableId+"_length");f.className=a.oClasses.sLength;f.innerHTML=a.oLanguage.sLengthMenu.replace("_MENU_",b);j('select option[value="'+a._iDisplayLength+'"]',f).attr("selected",true);j("select",f).bind("change.DT",function(){var e=j(this).val(),i=a.aanFeatures.l;c=0;for(d=i.length;ca.aiDisplay.length||a._iDisplayLength==-1?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength}function Ha(a,b){if(!a||a===null||a==="")return 0;if(typeof b=="undefined")b=p.getElementsByTagName("body")[0];var c=p.createElement("div");c.style.width=a;b.appendChild(c);a=c.offsetWidth;
+b.removeChild(c);return a}function $(a){var b=0,c,d=0,f=a.aoColumns.length,e,i=j("th",a.nTHead);for(e=0;etd",b);e.each(function(h){this.style.width="";h=ga(a,h);if(h!==null&&a.aoColumns[h].sWidthOrig!=="")this.style.width=a.aoColumns[h].sWidthOrig});for(e=0;etd",b);if(f.length===0)f=j("thead tr:eq(0)>th",b);for(e=c=0;e0)a.aoColumns[e].sWidth=v(d);c++}a.nTable.style.width=v(j(b).outerWidth());b.parentNode.removeChild(b)}}function Ja(a,b){if(a.oScroll.sX===""&&a.oScroll.sY!==""){j(b).width();b.style.width=v(j(b).outerWidth()-a.oScroll.iBarWidth)}else if(a.oScroll.sX!=="")b.style.width=v(j(b).outerWidth())}function Ia(a,b,c){if(typeof c=="undefined"||c){c=Ka(a,b);b=M(a,b);if(c<0)return null;return a.aoData[c].nTr.getElementsByTagName("td")[b]}var d=-1,f,e;c=-1;var i=p.createElement("div");i.style.visibility="hidden";
+i.style.position="absolute";p.body.appendChild(i);f=0;for(e=a.aoData.length;fd){d=i.offsetWidth;c=f}}p.body.removeChild(i);if(c>=0){b=M(a,b);if(a=a.aoData[c].nTr.getElementsByTagName("td")[b])return a}return null}function Ka(a,b){for(var c=-1,d=-1,f=0;fc){c=e.length;d=f}}return d}function v(a){if(a===null)return"0px";if(typeof a=="number"){if(a<0)return"0px";return a+"px"}var b=
+a.charCodeAt(a.length-1);if(b<48||b>57)return a;return a+"px"}function Oa(a,b){if(a.length!=b.length)return 1;for(var c=0;cb&&a[d]--;c!=-1&&a.splice(c,1)}function va(a,b){b=b.split(",");for(var c=[],d=0,f=a.aoColumns.length;d4096){a=p.cookie.split(";");for(var h=0,k=a.length;h=d.aiDisplay.length){d._iDisplayStart-=d._iDisplayLength;if(d._iDisplayStart<0)d._iDisplayStart=0}if(typeof c=="undefined"||c){E(d);C(d)}return f};this.fnClearTable=function(a){var b=A(this[n.iApiIndex]);da(b);if(typeof a=="undefined"||a)C(b)};this.fnOpen=function(a,b,c){var d=A(this[n.iApiIndex]);this.fnClose(a);var f=
+p.createElement("tr"),e=p.createElement("td");f.appendChild(e);e.className=c;e.colSpan=S(d);e.innerHTML=b;b=j("tr",d.nTBody);j.inArray(a,b)!=-1&&j(f).insertAfter(a);d.aoOpenRows.push({nTr:f,nParent:a});return f};this.fnClose=function(a){for(var b=A(this[n.iApiIndex]),c=0;ctr",d.nTHead)[0];i=j(">tr",d.nTFoot)[0];q=[];h=[];for(f=0;f=S(d)){l.appendChild(q[a]);l=j(">tr",
+d.nTHead);f=1;for(e=l.length;ftr",d.nTFoot);f=1;for(e=l.length;ftr",d.nTHead);f=1;for(e=l.length;ftr",d.nTFoot);f=1;for(e=l.length;ftd:eq("+k+")",d.aoData[f].nTr)[0])}}d.aoColumns[a].bVisible=true}else{l.removeChild(q[a]);f=0;for(e=d.aoColumns[a].anThExtra.length;ftr>td."+a.oClasses.sRowEmpty,a.nTable).parent().remove();if(a.nTable!=a.nTHead.parentNode){j(">thead",a.nTable).remove();a.nTable.appendChild(a.nTHead)}if(a.nTFoot&&a.nTable!=a.nTFoot.parentNode){j(">tfoot",a.nTable).remove();a.nTable.appendChild(a.nTFoot)}a.nTable.parentNode.removeChild(a.nTable);
+j(a.nTableWrapper).remove();a.aaSorting=[];a.aaSortingFixed=[];T(a);j(R(a)).removeClass(a.asStripClasses.join(" "));if(a.bJUI){j("th",a.nTHead).removeClass([n.oStdClasses.sSortable,n.oJUIClasses.sSortableAsc,n.oJUIClasses.sSortableDesc,n.oJUIClasses.sSortableNone].join(" "));j("th span",a.nTHead).remove()}else j("th",a.nTHead).removeClass([n.oStdClasses.sSortable,n.oStdClasses.sSortableAsc,n.oStdClasses.sSortableDesc,n.oStdClasses.sSortableNone].join(" "));b.appendChild(a.nTable);d=0;for(f=a.aoData.length;d<
+f;d++)c.appendChild(a.aoData[d].nTr);a.nTable.style.width=v(a.sDestroyWidth);j(">tr:even",c).addClass(a.asDestoryStrips[0]);j(">tr:odd",c).addClass(a.asDestoryStrips[1]);d=0;for(f=D.length;dt<"F"ip>'}if(e.oScroll.sX!==""||e.oScroll.sY!=="")e.oScroll.iBarWidth=Na();if(typeof g.iDisplayStart!="undefined"&&typeof e.iInitDisplayStart=="undefined"){e.iInitDisplayStart=g.iDisplayStart;e._iDisplayStart=g.iDisplayStart}if(typeof g.bStateSave!="undefined"){e.oFeatures.bStateSave=g.bStateSave;Ma(e,g);e.aoDrawCallback.push({fn:na,sName:"state_save"})}if(typeof g.aaData!="undefined")h=
+true;if(typeof g!="undefined"&&typeof g.aoData!="undefined")g.aoColumns=g.aoData;if(typeof g.oLanguage!="undefined")if(typeof g.oLanguage.sUrl!="undefined"&&g.oLanguage.sUrl!==""){e.oLanguage.sUrl=g.oLanguage.sUrl;j.getJSON(e.oLanguage.sUrl,null,function(q){y(e,q,true)});i=true}else y(e,g.oLanguage,false)}else g={};if(typeof g.asStripClasses=="undefined"){e.asStripClasses.push(e.oClasses.sStripOdd);e.asStripClasses.push(e.oClasses.sStripEven)}c=false;d=j(">tbody>tr",this);a=0;for(b=e.asStripClasses.length;a<
+b;a++)if(d.filter(":lt(2)").hasClass(e.asStripClasses[a])){c=true;break}if(c){e.asDestoryStrips=["",""];if(j(d[0]).hasClass(e.oClasses.sStripOdd))e.asDestoryStrips[0]+=e.oClasses.sStripOdd+" ";if(j(d[0]).hasClass(e.oClasses.sStripEven))e.asDestoryStrips[0]+=e.oClasses.sStripEven;if(j(d[1]).hasClass(e.oClasses.sStripOdd))e.asDestoryStrips[1]+=e.oClasses.sStripOdd+" ";if(j(d[1]).hasClass(e.oClasses.sStripEven))e.asDestoryStrips[1]+=e.oClasses.sStripEven;d.removeClass(e.asStripClasses.join(" "))}a=this.getElementsByTagName("thead");
+c=a.length===0?[]:fa(a[0]);var k;if(typeof g.aoColumns=="undefined"){k=[];a=0;for(b=c.length;a=0;a--){var l=g.aoColumnDefs[a].aTargets;j.isArray(l)||H(e,1,"aTargets must be an array of targets, not a "+typeof l);
+c=0;for(d=l.length;c=0){for(;e.aoColumns.length<=l[c];)F(e);x(e,l[c],g.aoColumnDefs[a])}else if(typeof l[c]=="number"&&l[c]<0)x(e,e.aoColumns.length+l[c],g.aoColumnDefs[a]);else if(typeof l[c]=="string"){b=0;for(f=e.aoColumns.length;b=e.aoColumns.length)e.aaSorting[a][0]=
+0;k=e.aoColumns[e.aaSorting[a][0]];if(typeof e.aaSorting[a][2]=="undefined")e.aaSorting[a][2]=0;if(typeof g.aaSorting=="undefined"&&typeof e.saved_aaSorting=="undefined")e.aaSorting[a][1]=k.asSorting[0];c=0;for(d=k.asSorting.length;c0)e.nTFoot=this.getElementsByTagName("tfoot")[0];if(h)for(a=0;a").appendTo("body"),c=b.css("display");b.remove();if(c==="none"||c==="")c="block";bZ[a]=c}return bZ[a]}function cc(a,b){var c={};d.each(cb.concat.apply([],cb.slice(0,b)),function(){c[this]=a});return c}function bY(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function bX(){try{return new a.XMLHttpRequest}catch(b){}}function bW(){d(a).unload(function(){for(var a in bU)bU[a](0,1)})}function bQ(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var e=a.dataTypes,f={},g,h,i=e.length,j,k=e[0],l,m,n,o,p;for(g=1;g=0===c})}function N(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function F(a,b){return(a&&a!=="*"?a+".":"")+b.replace(r,"`").replace(s,"&")}function E(a){var b,c,e,f,g,h,i,j,k,l,m,n,o,q=[],r=[],s=d._data(this,"events");if(a.liveFired!==this&&s&&s.live&&!a.target.disabled&&(!a.button||a.type!=="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var t=s.live.slice(0);for(i=0;ic)break;a.currentTarget=f.elem,a.data=f.handleObj.data,a.handleObj=f.handleObj,o=f.handleObj.origHandler.apply(f.elem,arguments);if(o===!1||a.isPropagationStopped()){c=f.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function C(a,c,e){var f=d.extend({},e[0]);f.type=a,f.originalEvent={},f.liveFired=b,d.event.handle.call(c,f),f.isDefaultPrevented()&&e[0].preventDefault()}function w(){return!0}function v(){return!1}function g(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function f(a,c,f){if(f===b&&a.nodeType===1){f=a.getAttribute("data-"+c);if(typeof f==="string"){try{f=f==="true"?!0:f==="false"?!1:f==="null"?null:d.isNaN(f)?e.test(f)?d.parseJSON(f):f:parseFloat(f)}catch(g){}d.data(a,c,f)}else f=b}return f}var c=a.document,d=function(){function I(){if(!d.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(I,1);return}d.ready()}}var d=function(a,b){return new d.fn.init(a,b,g)},e=a.jQuery,f=a.$,g,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,i=/\S/,j=/^\s+/,k=/\s+$/,l=/\d/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=navigator.userAgent,w,x=!1,y,z="then done fail isResolved isRejected promise".split(" "),A,B=Object.prototype.toString,C=Object.prototype.hasOwnProperty,D=Array.prototype.push,E=Array.prototype.slice,F=String.prototype.trim,G=Array.prototype.indexOf,H={};d.fn=d.prototype={constructor:d,init:function(a,e,f){var g,i,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!e&&c.body){this.context=c,this[0]=c.body,this.selector="body",this.length=1;return this}if(typeof a==="string"){g=h.exec(a);if(!g||!g[1]&&e)return!e||e.jquery?(e||f).find(a):this.constructor(e).find(a);if(g[1]){e=e instanceof d?e[0]:e,k=e?e.ownerDocument||e:c,j=m.exec(a),j?d.isPlainObject(e)?(a=[c.createElement(j[1])],d.fn.attr.call(a,e,!0)):a=[k.createElement(j[1])]:(j=d.buildFragment([g[1]],[k]),a=(j.cacheable?d.clone(j.fragment):j.fragment).childNodes);return d.merge(this,a)}i=c.getElementById(g[2]);if(i&&i.parentNode){if(i.id!==g[2])return f.find(a);this.length=1,this[0]=i}this.context=c,this.selector=a;return this}if(d.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return d.makeArray(a,this)},selector:"",jquery:"1.5.1",length:0,size:function(){return this.length},toArray:function(){return E.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var e=this.constructor();d.isArray(a)?D.apply(e,a):d.merge(e,a),e.prevObject=this,e.context=this.context,b==="find"?e.selector=this.selector+(this.selector?" ":"")+c:b&&(e.selector=this.selector+"."+b+"("+c+")");return e},each:function(a,b){return d.each(this,a,b)},ready:function(a){d.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(E.apply(this,arguments),"slice",E.call(arguments).join(","))},map:function(a){return this.pushStack(d.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:D,sort:[].sort,splice:[].splice},d.fn.init.prototype=d.fn,d.extend=d.fn.extend=function(){var a,c,e,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!=="object"&&!d.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;y.resolveWith(c,[d]),d.fn.trigger&&d(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!x){x=!0;if(c.readyState==="complete")return setTimeout(d.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",A,!1),a.addEventListener("load",d.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",A),a.attachEvent("onload",d.ready);var b=!1;try{b=a.frameElement==null}catch(e){}c.documentElement.doScroll&&b&&I()}}},isFunction:function(a){return d.type(a)==="function"},isArray:Array.isArray||function(a){return d.type(a)==="array"},isWindow:function(a){return a&&typeof a==="object"&&"setInterval"in a},isNaN:function(a){return a==null||!l.test(a)||isNaN(a)},type:function(a){return a==null?String(a):H[B.call(a)]||"object"},isPlainObject:function(a){if(!a||d.type(a)!=="object"||a.nodeType||d.isWindow(a))return!1;if(a.constructor&&!C.call(a,"constructor")&&!C.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a){}return c===b||C.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!=="string"||!b)return null;b=d.trim(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return a.JSON&&a.JSON.parse?a.JSON.parse(b):(new Function("return "+b))();d.error("Invalid JSON: "+b)},parseXML:function(b,c,e){a.DOMParser?(e=new DOMParser,c=e.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),e=c.documentElement,(!e||!e.nodeName||e.nodeName==="parsererror")&&d.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(a){if(a&&i.test(a)){var b=c.head||c.getElementsByTagName("head")[0]||c.documentElement,e=c.createElement("script");d.support.scriptEval()?e.appendChild(c.createTextNode(a)):e.text=a,b.insertBefore(e,b.firstChild),b.removeChild(e)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,e){var f,g=0,h=a.length,i=h===b||d.isFunction(a);if(e){if(i){for(f in a)if(c.apply(a[f],e)===!1)break}else for(;g1){var f=E.call(arguments,0),g=b,h=function(a){return function(b){f[a]=arguments.length>1?E.call(arguments,0):b,--g||c.resolveWith(e,f)}};while(b--)a=f[b],a&&d.isFunction(a.promise)?a.promise().then(h(b),c.reject):--g;g||c.resolveWith(e,f)}else c!==a&&c.resolve(a);return e},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}d.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.subclass=this.subclass,a.fn.init=function b(b,c){c&&c instanceof d&&!(c instanceof a)&&(c=a(c));return d.fn.init.call(this,b,c,e)},a.fn.init.prototype=a.fn;var e=a(c);return a},browser:{}}),y=d._Deferred(),d.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){H["[object "+b+"]"]=b.toLowerCase()}),w=d.uaMatch(v),w.browser&&(d.browser[w.browser]=!0,d.browser.version=w.version),d.browser.webkit&&(d.browser.safari=!0),G&&(d.inArray=function(a,b){return G.call(b,a)}),i.test(" ")&&(j=/^[\s\xA0]+/,k=/[\s\xA0]+$/),g=d(c),c.addEventListener?A=function(){c.removeEventListener("DOMContentLoaded",A,!1),d.ready()}:c.attachEvent&&(A=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",A),d.ready())});return d}();(function(){d.support={};var b=c.createElement("div");b.style.display="none",b.innerHTML=" a ";var e=b.getElementsByTagName("*"),f=b.getElementsByTagName("a")[0],g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=b.getElementsByTagName("input")[0];if(e&&e.length&&f){d.support={leadingWhitespace:b.firstChild.nodeType===3,tbody:!b.getElementsByTagName("tbody").length,htmlSerialize:!!b.getElementsByTagName("link").length,style:/red/.test(f.getAttribute("style")),hrefNormalized:f.getAttribute("href")==="/a",opacity:/^0.55$/.test(f.style.opacity),cssFloat:!!f.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,deleteExpando:!0,optDisabled:!1,checkClone:!1,noCloneEvent:!0,noCloneChecked:!0,boxModel:null,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableHiddenOffsets:!0},i.checked=!0,d.support.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,d.support.optDisabled=!h.disabled;var j=null;d.support.scriptEval=function(){if(j===null){var b=c.documentElement,e=c.createElement("script"),f="script"+d.now();try{e.appendChild(c.createTextNode("window."+f+"=1;"))}catch(g){}b.insertBefore(e,b.firstChild),a[f]?(j=!0,delete a[f]):j=!1,b.removeChild(e),b=e=f=null}return j};try{delete b.test}catch(k){d.support.deleteExpando=!1}!b.addEventListener&&b.attachEvent&&b.fireEvent&&(b.attachEvent("onclick",function l(){d.support.noCloneEvent=!1,b.detachEvent("onclick",l)}),b.cloneNode(!0).fireEvent("onclick")),b=c.createElement("div"),b.innerHTML=" ";var m=c.createDocumentFragment();m.appendChild(b.firstChild),d.support.checkClone=m.cloneNode(!0).cloneNode(!0).lastChild.checked,d(function(){var a=c.createElement("div"),b=c.getElementsByTagName("body")[0];if(b){a.style.width=a.style.paddingLeft="1px",b.appendChild(a),d.boxModel=d.support.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,d.support.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
",d.support.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="";var e=a.getElementsByTagName("td");d.support.reliableHiddenOffsets=e[0].offsetHeight===0,e[0].style.display="",e[1].style.display="none",d.support.reliableHiddenOffsets=d.support.reliableHiddenOffsets&&e[0].offsetHeight===0,a.innerHTML="",b.removeChild(a).style.display="none",a=e=null}});var n=function(a){var b=c.createElement("div");a="on"+a;if(!b.attachEvent)return!0;var d=a in b;d||(b.setAttribute(a,"return;"),d=typeof b[a]==="function"),b=null;return d};d.support.submitBubbles=n("submit"),d.support.changeBubbles=n("change"),b=e=f=null}})();var e=/^(?:\{.*\}|\[.*\])$/;d.extend({cache:{},uuid:0,expando:"jQuery"+(d.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?d.cache[a[d.expando]]:a[d.expando];return!!a&&!g(a)},data:function(a,c,e,f){if(d.acceptData(a)){var g=d.expando,h=typeof c==="string",i,j=a.nodeType,k=j?d.cache:a,l=j?a[d.expando]:a[d.expando]&&d.expando;if((!l||f&&l&&!k[l][g])&&h&&e===b)return;l||(j?a[d.expando]=l=++d.uuid:l=d.expando),k[l]||(k[l]={},j||(k[l].toJSON=d.noop));if(typeof c==="object"||typeof c==="function")f?k[l][g]=d.extend(k[l][g],c):k[l]=d.extend(k[l],c);i=k[l],f&&(i[g]||(i[g]={}),i=i[g]),e!==b&&(i[c]=e);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,e){if(d.acceptData(b)){var f=d.expando,h=b.nodeType,i=h?d.cache:b,j=h?b[d.expando]:d.expando;if(!i[j])return;if(c){var k=e?i[j][f]:i[j];if(k){delete k[c];if(!g(k))return}}if(e){delete i[j][f];if(!g(i[j]))return}var l=i[j][f];d.support.deleteExpando||i!=a?delete i[j]:i[j]=null,l?(i[j]={},h||(i[j].toJSON=d.noop),i[j][f]=l):h&&(d.support.deleteExpando?delete b[d.expando]:b.removeAttribute?b.removeAttribute(d.expando):b[d.expando]=null)}},_data:function(a,b,c){return d.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=d.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),d.fn.extend({data:function(a,c){var e=null;if(typeof a==="undefined"){if(this.length){e=d.data(this[0]);if(this[0].nodeType===1){var g=this[0].attributes,h;for(var i=0,j=g.length;i-1)return!0;return!1},val:function(a){if(!arguments.length){var c=this[0];if(c){if(d.nodeName(c,"option")){var e=c.attributes.value;return!e||e.specified?c.value:c.text}if(d.nodeName(c,"select")){var f=c.selectedIndex,g=[],h=c.options,i=c.type==="select-one";if(f<0)return null;for(var k=i?f:0,l=i?f+1:h.length;k=0;else if(d.nodeName(this,"select")){var f=d.makeArray(e);d("option",this).each(function(){this.selected=d.inArray(d(this).val(),f)>=0}),f.length||(this.selectedIndex=-1)}else this.value=e}})}}),d.extend({attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,e,f){if(!a||a.nodeType===3||a.nodeType===8||a.nodeType===2)return b;if(f&&c in d.attrFn)return d(a)[c](e);var g=a.nodeType!==1||!d.isXMLDoc(a),h=e!==b;c=g&&d.props[c]||c;if(a.nodeType===1){var i=k.test(c);if(c==="selected"&&!d.support.optSelected){var j=a.parentNode;j&&(j.selectedIndex,j.parentNode&&j.parentNode.selectedIndex)}if((c in a||a[c]!==b)&&g&&!i){h&&(c==="type"&&l.test(a.nodeName)&&a.parentNode&&d.error("type property can't be changed"),e===null?a.nodeType===1&&a.removeAttribute(c):a[c]=e);if(d.nodeName(a,"form")&&a.getAttributeNode(c))return a.getAttributeNode(c).nodeValue;if(c==="tabIndex"){var o=a.getAttributeNode("tabIndex");return o&&o.specified?o.value:m.test(a.nodeName)||n.test(a.nodeName)&&a.href?0:b}return a[c]}if(!d.support.style&&g&&c==="style"){h&&(a.style.cssText=""+e);return a.style.cssText}h&&a.setAttribute(c,""+e);if(!a.attributes[c]&&(a.hasAttribute&&!a.hasAttribute(c)))return b;var p=!d.support.hrefNormalized&&g&&i?a.getAttribute(c,2):a.getAttribute(c);return p===null?b:p}h&&(a[c]=e);return a[c]}});var p=/\.(.*)$/,q=/^(?:textarea|input|select)$/i,r=/\./g,s=/ /g,t=/[^\w\s.|`]/g,u=function(a){return a.replace(t,"\\$&")};d.event={add:function(c,e,f,g){if(c.nodeType!==3&&c.nodeType!==8){try{d.isWindow(c)&&(c!==a&&!c.frameElement)&&(c=a)}catch(h){}if(f===!1)f=v;else if(!f)return;var i,j;f.handler&&(i=f,f=i.handler),f.guid||(f.guid=d.guid++);var k=d._data(c);if(!k)return;var l=k.events,m=k.handle;l||(k.events=l={}),m||(k.handle=m=function(){return typeof d!=="undefined"&&!d.event.triggered?d.event.handle.apply(m.elem,arguments):b}),m.elem=c,e=e.split(" ");var n,o=0,p;while(n=e[o++]){j=i?d.extend({},i):{handler:f,data:g},n.indexOf(".")>-1?(p=n.split("."),n=p.shift(),j.namespace=p.slice(0).sort().join(".")):(p=[],j.namespace=""),j.type=n,j.guid||(j.guid=f.guid);var q=l[n],r=d.event.special[n]||{};if(!q){q=l[n]=[];if(!r.setup||r.setup.call(c,g,p,m)===!1)c.addEventListener?c.addEventListener(n,m,!1):c.attachEvent&&c.attachEvent("on"+n,m)}r.add&&(r.add.call(c,j),j.handler.guid||(j.handler.guid=f.guid)),q.push(j),d.event.global[n]=!0}c=null}},global:{},remove:function(a,c,e,f){if(a.nodeType!==3&&a.nodeType!==8){e===!1&&(e=v);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=d.hasData(a)&&d._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(e=c.handler,c=c.type);if(!c||typeof c==="string"&&c.charAt(0)==="."){c=c||"";for(h in t)d.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+d.map(m.slice(0).sort(),u).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!e){for(j=0;j=0&&(a.type=f=f.slice(0,-1),a.exclusive=!0),e||(a.stopPropagation(),d.event.global[f]&&d.each(d.cache,function(){var b=d.expando,e=this[b];e&&e.events&&e.events[f]&&d.event.trigger(a,c,e.handle.elem)}));if(!e||e.nodeType===3||e.nodeType===8)return b;a.result=b,a.target=e,c=d.makeArray(c),c.unshift(a)}a.currentTarget=e;var h=d._data(e,"handle");h&&h.apply(e,c);var i=e.parentNode||e.ownerDocument;try{e&&e.nodeName&&d.noData[e.nodeName.toLowerCase()]||e["on"+f]&&e["on"+f].apply(e,c)===!1&&(a.result=!1,a.preventDefault())}catch(j){}if(!a.isPropagationStopped()&&i)d.event.trigger(a,c,i,!0);else if(!a.isDefaultPrevented()){var k,l=a.target,m=f.replace(p,""),n=d.nodeName(l,"a")&&m==="click",o=d.event.special[m]||{};if((!o._default||o._default.call(e,a)===!1)&&!n&&!(l&&l.nodeName&&d.noData[l.nodeName.toLowerCase()])){try{l[m]&&(k=l["on"+m],k&&(l["on"+m]=null),d.event.triggered=!0,l[m]())}catch(q){}k&&(l["on"+m]=k),d.event.triggered=!1}}},handle:function(c){var e,f,g,h,i,j=[],k=d.makeArray(arguments);c=k[0]=d.event.fix(c||a.event),c.currentTarget=this,e=c.type.indexOf(".")<0&&!c.exclusive,e||(g=c.type.split("."),c.type=g.shift(),j=g.slice(0).sort(),h=new RegExp("(^|\\.)"+j.join("\\.(?:.*\\.)?")+"(\\.|$)")),c.namespace=c.namespace||j.join("."),i=d._data(this,"events"),f=(i||{})[c.type];if(i&&f){f=f.slice(0);for(var l=0,m=f.length;l-1?d.map(a.options,function(a){return a.selected}).join("-"):"":a.nodeName.toLowerCase()==="select"&&(c=a.selectedIndex);return c},B=function B(a){var c=a.target,e,f;if(q.test(c.nodeName)&&!c.readOnly){e=d._data(c,"_change_data"),f=A(c),(a.type!=="focusout"||c.type!=="radio")&&d._data(c,"_change_data",f);if(e===b||f===e)return;if(e!=null||f)a.type="change",a.liveFired=b,d.event.trigger(a,arguments[1],c)}};d.event.special.change={filters:{focusout:B,beforedeactivate:B,click:function(a){var b=a.target,c=b.type;(c==="radio"||c==="checkbox"||b.nodeName.toLowerCase()==="select")&&B.call(this,a)},keydown:function(a){var b=a.target,c=b.type;(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&B.call(this,a)},beforeactivate:function(a){var b=a.target;d._data(b,"_change_data",A(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in z)d.event.add(this,c+".specialChange",z[c]);return q.test(this.nodeName)},teardown:function(a){d.event.remove(this,".specialChange");return q.test(this.nodeName)}},z=d.event.special.change.filters,z.focus=z.beforeactivate}c.addEventListener&&d.each({focus:"focusin",blur:"focusout"},function(a,b){function c(a){a=d.event.fix(a),a.type=b;return d.event.handle.call(this,a)}d.event.special[b]={setup:function(){this.addEventListener(a,c,!0)},teardown:function(){this.removeEventListener(a,c,!0)}}}),d.each(["bind","one"],function(a,c){d.fn[c]=function(a,e,f){if(typeof a==="object"){for(var g in a)this[c](g,e,a[g],f);return this}if(d.isFunction(e)||e===!1)f=e,e=b;var h=c==="one"?d.proxy(f,function(a){d(this).unbind(a,h);return f.apply(this,arguments)}):f;if(a==="unload"&&c!=="one")this.one(a,e,f);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},d.attrFn&&(d.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,e,g){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=="string")return e;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(f.call(n)==="[object Array]")if(u)if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&e.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&e.push(j[t]);else e.push.apply(e,n);else p(n,e);o&&(k(o,h,e,g),k.uniqueSort(e));return e};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b==="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){return"text"===a.getAttribute("type")},radio:function(a){return"radio"===a.type},checkbox:function(a){return"checkbox"===a.type},file:function(a){return"file"===a.type},password:function(a){return"password"===a.type},submit:function(a){return"submit"===a.type},image:function(a){return"image"===a.type},reset:function(a){return"reset"===a.type},button:function(a){return"button"===a.type||a.nodeName.toLowerCase()==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(f.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length==="number")for(var e=a.length;c ",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!=="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML=" ",a.firstChild&&typeof a.firstChild.getAttribute!=="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="
";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector,d=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(e){d=!0}b&&(k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(d||!l.match.PSEUDO.test(c)&&!/!=/.test(c))return b.call(a,c)}catch(e){}return k(c,null,null,[a]).length>0})}(),function(){var a=c.createElement("div");a.innerHTML="
";if(a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(var g=c;g0},closest:function(a,b){var c=[],e,f,g=this[0];if(d.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(e=0,f=a.length;e-1:d(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=L.test(a)?d(a,b||this.context):null;for(e=0,f=this.length;e-1:d.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b)break}}c=c.length>1?d.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a==="string")return d.inArray(this[0],a?d(a):this.parent().children());return d.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==="string"?d(a,b):d.makeArray(a),e=d.merge(this.get(),c);return this.pushStack(N(c[0])||N(e[0])?e:d.unique(e))},andSelf:function(){return this.add(this.prevObject)}}),d.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return d.dir(a,"parentNode")},parentsUntil:function(a,b,c){return d.dir(a,"parentNode",c)},next:function(a){return d.nth(a,2,"nextSibling")},prev:function(a){return d.nth(a,2,"previousSibling")},nextAll:function(a){return d.dir(a,"nextSibling")},prevAll:function(a){return d.dir(a,"previousSibling")},nextUntil:function(a,b,c){return d.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return d.dir(a,"previousSibling",c)},siblings:function(a){return d.sibling(a.parentNode.firstChild,a)},children:function(a){return d.sibling(a.firstChild)},contents:function(a){return d.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:d.makeArray(a.childNodes)}},function(a,b){d.fn[a]=function(c,e){var f=d.map(this,b,c),g=K.call(arguments);G.test(a)||(e=c),e&&typeof e==="string"&&(f=d.filter(e,f)),f=this.length>1&&!M[a]?d.unique(f):f,(this.length>1||I.test(e))&&H.test(a)&&(f=f.reverse());return this.pushStack(f,a,g.join(","))}}),d.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?d.find.matchesSelector(b[0],a)?[b[0]]:[]:d.find.matches(a,b)},dir:function(a,c,e){var f=[],g=a[c];while(g&&g.nodeType!==9&&(e===b||g.nodeType!==1||!d(g).is(e)))g.nodeType===1&&f.push(g),g=g[c];return f},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var P=/ jQuery\d+="(?:\d+|null)"/g,Q=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,S=/<([\w:]+)/,T=/",""],legend:[1,""," "],thead:[1,""],tr:[2,""],td:[3,""],col:[2,""],area:[1,""," "],_default:[0,"",""]};X.optgroup=X.option,X.tbody=X.tfoot=X.colgroup=X.caption=X.thead,X.th=X.td,d.support.htmlSerialize||(X._default=[1,"div","
"]),d.fn.extend({text:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.text(a.call(this,b,c.text()))});if(typeof a!=="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return d.text(this)},wrapAll:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapAll(a.call(this,b))});if(this[0]){var b=d(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapInner(a.call(this,b))});return this.each(function(){var b=d(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){d(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){d.nodeName(this,"body")||d(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=d(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,d(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,e;(e=this[c])!=null;c++)if(!a||d.filter(a,[e]).length)!b&&e.nodeType===1&&(d.cleanData(e.getElementsByTagName("*")),d.cleanData([e])),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&d.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return d.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(P,""):null;if(typeof a!=="string"||V.test(a)||!d.support.leadingWhitespace&&Q.test(a)||X[(S.exec(a)||["",""])[1].toLowerCase()])d.isFunction(a)?this.each(function(b){var c=d(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);else{a=a.replace(R,"<$1>$2>");try{for(var c=0,e=this.length;c1&&l0?this.clone(!0):this).get();d(f[h])[b](j),e=e.concat(j)}return this.pushStack(e,a,f.selector)}}),d.extend({clone:function(a,b,c){var e=a.cloneNode(!0),f,g,h;if((!d.support.noCloneEvent||!d.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!d.isXMLDoc(a)){$(a,e),f=_(a),g=_(e);for(h=0;f[h];++h)$(f[h],g[h])}if(b){Z(a,e);if(c){f=_(a),g=_(e);for(h=0;f[h];++h)Z(f[h],g[h])}}return e},clean:function(a,b,e,f){b=b||c,typeof b.createElement==="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var g=[];for(var h=0,i;(i=a[h])!=null;h++){typeof i==="number"&&(i+="");if(!i)continue;if(typeof i!=="string"||U.test(i)){if(typeof i==="string"){i=i.replace(R,"<$1>$2>");var j=(S.exec(i)||["",""])[1].toLowerCase(),k=X[j]||X._default,l=k[0],m=b.createElement("div");m.innerHTML=k[1]+i+k[2];while(l--)m=m.lastChild;if(!d.support.tbody){var n=T.test(i),o=j==="table"&&!n?m.firstChild&&m.firstChild.childNodes:k[1]===""&&!n?m.childNodes:[];for(var p=o.length-1;p>=0;--p)d.nodeName(o[p],"tbody")&&!o[p].childNodes.length&&o[p].parentNode.removeChild(o[p])}!d.support.leadingWhitespace&&Q.test(i)&&m.insertBefore(b.createTextNode(Q.exec(i)[0]),m.firstChild),i=m.childNodes}}else i=b.createTextNode(i);i.nodeType?g.push(i):g=d.merge(g,i)}if(e)for(h=0;g[h];h++)!f||!d.nodeName(g[h],"script")||g[h].type&&g[h].type.toLowerCase()!=="text/javascript"?(g[h].nodeType===1&&g.splice.apply(g,[h+1,0].concat(d.makeArray(g[h].getElementsByTagName("script")))),e.appendChild(g[h])):f.push(g[h].parentNode?g[h].parentNode.removeChild(g[h]):g[h]);return g},cleanData:function(a){var b,c,e=d.cache,f=d.expando,g=d.event.special,h=d.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&d.noData[j.nodeName.toLowerCase()])continue;c=j[d.expando];if(c){b=e[c]&&e[c][f];if(b&&b.events){for(var k in b.events)g[k]?d.event.remove(j,k):d.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[d.expando]:j.removeAttribute&&j.removeAttribute(d.expando),delete e[c]}}}});var bb=/alpha\([^)]*\)/i,bc=/opacity=([^)]*)/,bd=/-([a-z])/ig,be=/([A-Z])/g,bf=/^-?\d+(?:px)?$/i,bg=/^-?\d/,bh={position:"absolute",visibility:"hidden",display:"block"},bi=["Left","Right"],bj=["Top","Bottom"],bk,bl,bm,bn=function(a,b){return b.toUpperCase()};d.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return d.access(this,a,c,!0,function(a,c,e){return e!==b?d.style(a,c,e):d.css(a,c)})},d.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bk(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0},cssProps:{"float":d.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,e,f){if(a&&a.nodeType!==3&&a.nodeType!==8&&a.style){var g,h=d.camelCase(c),i=a.style,j=d.cssHooks[h];c=d.cssProps[h]||h;if(e===b){if(j&&"get"in j&&(g=j.get(a,!1,f))!==b)return g;return i[c]}if(typeof e==="number"&&isNaN(e)||e==null)return;typeof e==="number"&&!d.cssNumber[h]&&(e+="px");if(!j||!("set"in j)||(e=j.set(a,e))!==b)try{i[c]=e}catch(k){}}},css:function(a,c,e){var f,g=d.camelCase(c),h=d.cssHooks[g];c=d.cssProps[g]||g;if(h&&"get"in h&&(f=h.get(a,!0,e))!==b)return f;if(bk)return bk(a,c,g)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bd,bn)}}),d.curCSS=d.css,d.each(["height","width"],function(a,b){d.cssHooks[b]={get:function(a,c,e){var f;if(c){a.offsetWidth!==0?f=bo(a,b,e):d.swap(a,bh,function(){f=bo(a,b,e)});if(f<=0){f=bk(a,b,b),f==="0px"&&bm&&(f=bm(a,b,b));if(f!=null)return f===""||f==="auto"?"0px":f}if(f<0||f==null){f=a.style[b];return f===""||f==="auto"?"0px":f}return typeof f==="string"?f:f+"px"}},set:function(a,b){if(!bf.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),d.support.opacity||(d.cssHooks.opacity={get:function(a,b){return bc.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style;c.zoom=1;var e=d.isNaN(b)?"":"alpha(opacity="+b*100+")",f=c.filter||"";c.filter=bb.test(f)?f.replace(bb,e):c.filter+" "+e}}),c.defaultView&&c.defaultView.getComputedStyle&&(bl=function(a,c,e){var f,g,h;e=e.replace(be,"-$1").toLowerCase();if(!(g=a.ownerDocument.defaultView))return b;if(h=g.getComputedStyle(a,null))f=h.getPropertyValue(e),f===""&&!d.contains(a.ownerDocument.documentElement,a)&&(f=d.style(a,e));return f}),c.documentElement.currentStyle&&(bm=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bf.test(d)&&bg.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bk=bl||bm,d.expr&&d.expr.filters&&(d.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!d.support.reliableHiddenOffsets&&(a.style.display||d.css(a,"display"))==="none"},d.expr.filters.visible=function(a){return!d.expr.filters.hidden(a)});var bp=/%20/g,bq=/\[\]$/,br=/\r?\n/g,bs=/#.*$/,bt=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bu=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bv=/(?:^file|^widget|\-extension):$/,bw=/^(?:GET|HEAD)$/,bx=/^\/\//,by=/\?/,bz=/
+ htmlTableClass == $this->defaultTableClass) {
+ ?>
+
+ style) {
+ ?>
+
+
+
+ htmlTableId) echo "id=\"$this->htmlTableId\" "; if ($this->htmlTableClass) echo "class=\"$this->htmlTableClass\"" ?> >
+
+
+
+
+
+ dataIterator->displayColumns as $aCol) {
+ printf('%s
', $aCol, $aCol);
+ }
+ ?>
+
+
+ plugin->getOption('ShowLineBreaksInDataTable');
+ $showLineBreaks = 'false' != $showLineBreaks;
+ while ($this->dataIterator->nextRow()) {
+ $submitKey = $this->dataIterator->row[$submitTimeKeyName];
+ ?>
+
+
+
+
+
+ dataIterator->row['fields_with_file']) && $this->dataIterator->row['fields_with_file'] != null) {
+ $fields_with_file = explode(',', $this->dataIterator->row['fields_with_file']);
+ }
+ foreach ($this->dataIterator->displayColumns as $aCol) {
+ $cell = htmlentities($this->dataIterator->row[$aCol], null, 'UTF-8'); // no HTML injection
+ if ($showLineBreaks) {
+ $cell = str_replace("\r\n", ' ', $cell); // preserve DOS line breaks
+ $cell = str_replace("\n", ' ', $cell); // preserve UNIX line breaks
+ }
+ if ($fields_with_file && in_array($aCol, $fields_with_file)) {
+ $fileUrl = $this->plugin->getFileUrl($this->dataIterator->row[$submitTimeKeyName], $formName, $aCol);
+ $cell = "$cell ";
+ }
+ // NOTE: the ID field is used to identify the cell when an edit happens and we save that to the server
+ printf('%s
', $aCol, $submitKey, $aCol, $cell);
+ }
+ ?>
+
+
+ isFromShortCode) {
+ // If called from a shortcode, need to return the text,
+ // otherwise it can appear out of order on the page
+ $output = ob_get_contents();
+ ob_end_clean();
+ return $output;
+ }
+ }
+}
+
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/ExportToHtmlTemplate.php b/src/wp-content/plugins/contact-form-7-to-database-extension/ExportToHtmlTemplate.php
new file mode 100644
index 00000000..c4f771a8
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/ExportToHtmlTemplate.php
@@ -0,0 +1,161 @@
+.
+*/
+
+require_once('ExportBase.php');
+require_once('CFDBExport.php');
+
+class ExportToHtmlTemplate extends ExportBase implements CFDBExport {
+
+ /**
+ * @param $formName string
+ * @param $options array of option_name => option_value
+ * @return void
+ */
+ public function export($formName, $options = null) {
+ $this->setOptions($options);
+ $this->setCommonOptions(true);
+
+ $filelinks = '';
+ $wpautop = false;
+ if ($this->options && is_array($this->options)) {
+ if (isset($this->options['filelinks'])) {
+ $filelinks = $this->options['filelinks'];
+ }
+ if (isset($this->options['wpautop'])) {
+ $wpautop = $this->options['wpautop'] == 'true';
+ }
+ }
+
+ // Security Check
+ if (!$this->isAuthorized()) {
+ $this->assertSecurityErrorMessage();
+ return;
+ }
+
+ // Headers
+ $this->echoHeaders('Content-Type: text/html; charset=UTF-8');
+
+
+ if (empty($options) || !isset($options['content'])) {
+ return;
+ }
+
+ if ($this->isFromShortCode) {
+ ob_start();
+ }
+
+ // Get the data
+ $submitTimeKeyName = 'Submit_Time_Key';
+ $this->setDataIterator($formName, $submitTimeKeyName);
+
+
+ $matches = array();
+ preg_match_all('/\$\{([^}]+)\}/', $options['content'], $matches);
+
+ $colNamesToSub = array();
+ $varNamesToSub = array();
+ if (!empty($matches) && is_array($matches[1])) {
+ foreach ($matches[1] as $aSubVar) {
+ // Each is expected to be a name of a column
+ if (in_array($aSubVar, $this->dataIterator->displayColumns)) {
+ $colNamesToSub[] = $aSubVar;
+ $varNamesToSub[] = '${' . $aSubVar . '}';
+ }
+ }
+ }
+
+
+ // WordPress likes to wrap the content in content which messes up things when
+ // you are putting
+ //
stuff
+ // as the content because it comes out
+ // stuff
+ // which messed up the table html.
+ // So we try to identify that and strip it out.
+ // This is related to http://codex.wordpress.org/Function_Reference/wpautop
+ // see also http://wordpress.org/support/topic/shortcodes-are-wrapped-in-paragraph-tags?replies=4
+ if (!$wpautop) {
+ if (substr($options['content'], 0, 6) == ' ' &&
+ substr($options['content'], -3, 3) == '
') {
+ $options['content'] = substr($options['content'], 6, strlen($options['content']) - 6 - 3);
+ }
+ }
+
+ while ($this->dataIterator->nextRow()) {
+ if (empty($colNamesToSub)) {
+ echo $options['content'];
+ }
+ else {
+ $fields_with_file = null;
+ if ($filelinks != 'name' &&
+ isset($this->dataIterator->row['fields_with_file']) &&
+ $this->dataIterator->row['fields_with_file'] != null) {
+ $fields_with_file = explode(',', $this->dataIterator->row['fields_with_file']);
+ }
+ $replacements = array();
+ foreach ($colNamesToSub as $aCol) {
+ if ($fields_with_file && in_array($aCol, $fields_with_file)) {
+ switch ($filelinks) {
+ case 'url':
+ $replacements[] = $this->plugin->getFileUrl($this->dataIterator->row[$submitTimeKeyName], $formName, $aCol);
+ break;
+ case 'link':
+ $replacements[] =
+ '' .
+ htmlentities($this->dataIterator->row[$aCol], null, 'UTF-8') .
+ ' ';
+ break;
+ case 'image':
+ case 'img':
+ $replacements[] =
+ ' ';
+ break;
+ case 'name':
+ default:
+ $replacements[] = htmlentities($this->dataIterator->row[$aCol], null, 'UTF-8');
+ }
+ }
+ else {
+ $replacements[] = htmlentities($this->dataIterator->row[$aCol], null, 'UTF-8');
+ }
+ }
+ echo str_replace($varNamesToSub, $replacements, $options['content']);
+ }
+ }
+
+ if ($this->isFromShortCode) {
+ // If called from a shortcode, need to return the text,
+ // otherwise it can appear out of order on the page
+ $output = ob_get_contents();
+ ob_end_clean();
+ return $output;
+ }
+
+ }
+
+
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/ExportToIqy.php b/src/wp-content/plugins/contact-form-7-to-database-extension/ExportToIqy.php
new file mode 100644
index 00000000..9e772c1e
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/ExportToIqy.php
@@ -0,0 +1,60 @@
+.
+*/
+
+require_once('CFDBExport.php');
+
+class ExportToIqy implements CFDBExport {
+
+ public function export($formName, $options = null) {
+ header('Content-Type: text/x-ms-iqy');
+ header("Content-Disposition: attachment; filename=\"$formName.iqy\"");
+
+ $url = get_bloginfo('url');
+ $encFormName = urlencode($formName);
+ $uri = "?action=cfdb-export&form=$encFormName&enc=HTML";
+ if (isset($options['search'])) {
+ $uri = $uri . '&search=' . urlencode($options['search']);
+ }
+ $encRedir = urlencode('wp-admin/admin-ajax.php' . $uri);
+
+ // To get this to work right, we have to submit to the same page that the login form does and post
+ // the same parameters that the login form does. This includes "log" and "pwd" for the login and
+ // also "redirect_to" which is the URL of the page where we want to end up including a "form_name" parameter
+ // to tell that final page to select which contact form data is to be displayed.
+ //
+ // "Selection=1" references the 1st HTML table in the page which is the data table.
+ // "Formatting" can be "None", "All", or "RTF"
+ echo (
+"WEB
+1
+$url/wp-login.php?redirect_to=$encRedir
+log=[\"Username for $url\"]&pwd=[\"Password for $url\"]
+
+Selection=1
+Formatting=All
+PreFormattedTextToColumns=True
+ConsecutiveDelimitersAsOne=True
+SingleBlockTextImport=False
+DisableDateRecognition=False
+DisableRedirections=False
+");
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/ExportToJson.php b/src/wp-content/plugins/contact-form-7-to-database-extension/ExportToJson.php
new file mode 100644
index 00000000..a38cb61e
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/ExportToJson.php
@@ -0,0 +1,175 @@
+.
+*/
+
+require_once('ExportBase.php');
+require_once('CFDBExport.php');
+
+class ExportToJson extends ExportBase implements CFDBExport {
+
+ public function export($formName, $options = null) {
+ $this->setOptions($options);
+ $this->setCommonOptions();
+
+ $varName = 'cf7db';
+ $html = false; // i.e. whether to create an HTML script tag and Javascript variable
+
+ if ($options && is_array($options)) {
+
+ if (isset($options['html'])) {
+ $html = $options['html'];
+ }
+
+ if (isset($options['var'])) {
+ $varName = $options['var'];
+ }
+ }
+
+ // Security Check
+ if (!$this->isAuthorized()) {
+ $this->assertSecurityErrorMessage();
+ return;
+ }
+
+ // Headers
+ $contentType = $html ? 'Content-Type: text/html; charset=UTF-8' : 'Content-Type: application/json; charset=UTF-8';
+ $this->echoHeaders($contentType);
+
+ // Get the data
+ $this->setDataIterator($formName);
+
+ if ($this->isFromShortCode) {
+ ob_start();
+ }
+
+ if ($html) {
+ ?>
+
+ echoJsonEncode();
+ }
+
+ if ($this->isFromShortCode) {
+ // If called from a shortcode, need to return the text,
+ // otherwise it can appear out of order on the page
+ $output = ob_get_contents();
+ ob_end_clean();
+ return $output;
+ }
+ }
+
+ protected function echoJsonEncode() {
+ $format = 'map';
+ if ($this->options && isset($this->options['format'])) {
+ if ($this->options['format'] == 'array' || $this->options['format'] == 'arraynoheader') {
+ $format = $this->options['format'];
+ }
+ }
+
+ // Avoid use of json_encode() so we don't have to buffer all the data
+ $search = array('"', "\n"); // Things we need to escape in JSON
+ $replace = array('\"', '\\n');
+
+ if ($format == 'map') {
+
+ // Create the column name JSON values only once
+ $jsonEscapedColumns = array();
+ foreach ($this->dataIterator->displayColumns as $col) {
+ $jsonEscapedColumns[$col] = str_replace($search, $replace, $col);
+ }
+
+ echo "[\n";
+ $firstRow = true;
+ while ($this->dataIterator->nextRow()) {
+ if ($firstRow) {
+ $firstRow = false;
+ }
+ else {
+ echo ",\n";
+ }
+ echo '{';
+ $firstCol = true;
+ foreach ($this->dataIterator->displayColumns as $col) {
+ if ($firstCol) {
+ $firstCol = false;
+ }
+ else {
+ echo ',';
+ }
+ printf('"%s":"%s"',
+ $jsonEscapedColumns[$col],
+ str_replace($search, $replace, $this->dataIterator->row[$col]));
+ }
+ echo '}';
+ }
+ echo "\n]";
+ }
+ else { // 'array' || 'arraynoheader'
+ echo "[\n";
+ $firstRow = true;
+ if ($format == 'array') {
+ // Add header
+ $firstCol = true;
+ echo '[';
+ foreach ($this->dataIterator->displayColumns as $col) {
+ if ($firstCol) {
+ $firstCol = false;
+ }
+ else {
+ echo ',';
+ }
+ printf('"%s"', str_replace($search, $replace, $col));
+ }
+ echo ']';
+ $firstRow = false;
+ }
+ // Export data rows
+ while ($this->dataIterator->nextRow()) {
+ if ($firstRow) {
+ $firstRow = false;
+ }
+ else {
+ echo ",\n";
+ }
+ $firstCol = true;
+ echo '[';
+ foreach ($this->dataIterator->displayColumns as $col) {
+ if ($firstCol) {
+ $firstCol = false;
+ }
+ else {
+ echo ',';
+ }
+ printf('"%s"', str_replace($search, $replace, $this->dataIterator->row[$col]));
+ }
+ echo "]";
+ }
+ echo "\n]";
+ }
+ }
+
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/ExportToValue.php b/src/wp-content/plugins/contact-form-7-to-database-extension/ExportToValue.php
new file mode 100644
index 00000000..014bc9ed
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/ExportToValue.php
@@ -0,0 +1,218 @@
+.
+*/
+
+require_once('ExportBase.php');
+require_once('CFDBExport.php');
+
+class ExportToValue extends ExportBase implements CFDBExport {
+
+ public function export($formName, $options = null) {
+
+ // Allow for multiple form name inputs, comma-delimited
+ $tmp = explode(',', $formName);
+ if (count($tmp) > 1) {
+ $formName = &$tmp;
+ }
+ else if ($formName == '*') {
+ $formName = null; // Allow for no form specified implying all forms
+ }
+
+ $this->setOptions($options);
+ $this->setCommonOptions();
+
+ // Security Check
+ if (!$this->isAuthorized()) {
+ $this->assertSecurityErrorMessage();
+ return;
+ }
+
+ // See if a function is to be applied
+ $funct = null;
+ $delimiter = ', ';
+ if ($this->options && is_array($this->options)) {
+ if (isset($this->options['function'])) {
+ $funct = $this->options['function'];
+ }
+ if (isset($this->options['delimiter'])) {
+ $delimiter = $this->options['delimiter'];
+ }
+ }
+
+ // Headers
+ $this->echoHeaders('Content-Type: text/plain; charset=UTF-8');
+
+ // Get the data
+ $this->setDataIterator($formName);
+
+ if ($funct == 'count' &&
+ count($this->showColumns) == 0 &&
+ count($this->hideColumns) == 0) {
+ // Just count the number of entries in the database
+ $dbRowCount = $this->getDBRowCount($formName);
+ if (!$this->isFromShortCode) {
+ echo $dbRowCount;
+ }
+ return $dbRowCount;
+ }
+
+
+ if ($funct) {
+ // Apply function to dataset
+ switch ($funct) {
+ case 'count':
+ $count = 0;
+ $colsPerRow = count($this->dataIterator->displayColumns);
+ while ($this->dataIterator->nextRow()) {
+ $count += $colsPerRow;
+ }
+ if ($this->isFromShortCode) {
+ return $count;
+ }
+ else {
+ echo $count;
+ return;
+ }
+
+ case 'min':
+ $min = null;
+ while ($this->dataIterator->nextRow()) {
+ foreach ($this->dataIterator->displayColumns as $col) {
+ $val = $this->dataIterator->row[$col];
+ if ($min === null) {
+ $min = $val;
+ }
+ else {
+ if ($val < $min) {
+ $min = $val;
+ }
+ }
+ }
+ }
+ if ($this->isFromShortCode) {
+ return $min;
+ }
+ else {
+ echo $min;
+ return;
+ }
+
+ case 'max':
+ $max = null;
+ while ($this->dataIterator->nextRow()) {
+ foreach ($this->dataIterator->displayColumns as $col) {
+ $val = $this->dataIterator->row[$col];
+ if ($max === null) {
+ $max = $val;
+ }
+ else {
+ if ($val > $max) {
+ $max = $val;
+ }
+ }
+ }
+ }
+ if ($this->isFromShortCode) {
+ return $max;
+ }
+ else {
+ echo $max;
+ return;
+ }
+
+
+ case 'sum':
+ $sum = 0;
+ while ($this->dataIterator->nextRow()) {
+ foreach ($this->dataIterator->displayColumns as $col) {
+ $sum = $sum + $this->dataIterator->row[$col];
+ }
+ }
+ if ($this->isFromShortCode) {
+ return $sum;
+ }
+ else {
+ echo $sum;
+ return;
+ }
+
+ case 'mean':
+ $sum = 0;
+ $count = 0;
+ while ($this->dataIterator->nextRow()) {
+ foreach ($this->dataIterator->displayColumns as $col) {
+ $count += 1;
+ $sum += $this->dataIterator->row[$col];
+ }
+ }
+ $mean = $sum / $count;
+ if ($this->isFromShortCode) {
+ return $mean;
+ }
+ else {
+ echo $mean;
+ return;
+ }
+ }
+ }
+
+ // At this point in the code: $funct not defined or not recognized
+ // output values for each row/column
+ if ($this->isFromShortCode) {
+ $outputData = array();
+ while ($this->dataIterator->nextRow()) {
+ foreach ($this->dataIterator->displayColumns as $col) {
+ $outputData[] = $this->dataIterator->row[$col];
+ }
+ }
+ ob_start();
+ switch (count($outputData)) {
+ case 0:
+ echo '';
+ break;
+ case 1:
+ echo $outputData[0];
+ break;
+ default:
+ echo implode($delimiter, $outputData);
+ break;
+ }
+ $output = ob_get_contents();
+ ob_end_clean();
+ // If called from a shortcode, need to return the text,
+ // otherwise it can appear out of order on the page
+ return $output;
+ }
+ else {
+ $first = true;
+ while ($this->dataIterator->nextRow()) {
+ foreach ($this->dataIterator->displayColumns as $col) {
+ if ($first) {
+ $first = false;
+ }
+ else {
+ echo $delimiter;
+ }
+ echo $this->dataIterator->row[$col];
+ }
+ }
+ }
+ }
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/ShortCodeLoader.php b/src/wp-content/plugins/contact-form-7-to-database-extension/ShortCodeLoader.php
new file mode 100644
index 00000000..21fb5465
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/ShortCodeLoader.php
@@ -0,0 +1,62 @@
+.
+*/
+
+abstract class ShortCodeLoader {
+
+ /**
+ * @param $shortcodeName mixed either string name of the shortcode
+ * (as it would appear in a post, e.g. [shortcodeName])
+ * or an array of such names in case you want to have more than one name
+ * for the same shortcode
+ * @return void
+ */
+ public function register($shortcodeName) {
+ $this->registerShortcodeToFunction($shortcodeName, 'handleShortcode');
+ }
+
+ /**
+ * @param $shortcodeName mixed either string name of the shortcode
+ * (as it would appear in a post, e.g. [shortcodeName])
+ * or an array of such names in case you want to have more than one name
+ * for the same shortcode
+ * @param $functionName string name of public function in this class to call as the
+ * shortcode handler
+ * @return void
+ */
+ protected function registerShortcodeToFunction($shortcodeName, $functionName) {
+ if (is_array($shortcodeName)) {
+ foreach ($shortcodeName as $aName) {
+ add_shortcode($aName, array($this, $functionName));
+ }
+ }
+ else {
+ add_shortcode($shortcodeName, array($this, $functionName));
+ }
+ }
+
+ /**
+ * @abstract Override this function and add actual shortcode handling here
+ * @param $atts shortcode inputs
+ * @return string shortcode content
+ */
+ public abstract function handleShortcode($atts);
+
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/ShortCodeScriptLoader.php b/src/wp-content/plugins/contact-form-7-to-database-extension/ShortCodeScriptLoader.php
new file mode 100644
index 00000000..a11604e2
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/ShortCodeScriptLoader.php
@@ -0,0 +1,68 @@
+.
+*/
+
+require_once('ShortCodeLoader.php');
+
+/**
+ * Adapted from this excellent article:
+ * http://scribu.net/wordpress/optimal-script-loading.html
+ *
+ * The idea is you have a shortcode that needs a script loaded, but you only
+ * want to load it if the shortcode is actually called.
+ */
+abstract class ShortCodeScriptLoader extends ShortCodeLoader {
+
+ var $doAddScript;
+
+ public function register($shortcodeName) {
+ $this->registerShortcodeToFunction($shortcodeName, 'handleShortcodeWrapper');
+
+ // It will be too late to enqueue the script in the header,
+ // so have to add it to the footer
+ add_action('wp_footer', array($this, 'addScriptWrapper'));
+ }
+
+ public function handleShortcodeWrapper($atts) {
+ // Flag that we need to add the script
+ $this->doAddScript = true;
+ return $this->handleShortcode($atts);
+ }
+
+ // Defined in super-class:
+ //public abstract function handleShortcode($atts);
+
+ public function addScriptWrapper() {
+ // Only add the script if the shortcode was actually called
+ if ($this->doAddScript) {
+ $this->addScript();
+ }
+ }
+
+ /**
+ * @abstract override this function with calls to insert scripts needed by your shortcode in the footer
+ * Example:
+ * wp_register_script('my-script', plugins_url('my-script.js', __FILE__), array('jquery'), '1.0', true);
+ * wp_print_scripts('my-script');
+ * @return void
+ */
+ public abstract function addScript();
+
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/contact-form-7-db.php b/src/wp-content/plugins/contact-form-7-to-database-extension/contact-form-7-db.php
new file mode 100644
index 00000000..953283e2
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/contact-form-7-db.php
@@ -0,0 +1,70 @@
+Data | Settings | FAQ
+ Text Domain: contact-form-7-to-database-extension
+ License: GPL3
+ */
+
+/**
+ * Check the PHP version and give a useful error message if the user's version is less than the required version
+ * @return boolean true if version check passed. If false, triggers an error which WP will handle, by displaying
+ * an error message on the Admin page
+ */
+function CF7DBPlugin_PhpVersionCheck() {
+ $minimalRequiredPhpVersion = '5.0';
+ if (version_compare(phpversion(), $minimalRequiredPhpVersion) < 0) {
+ trigger_error(
+ '
' . __('Error: Contact Form to DB Plugin requires a newer version of PHP to be running.', 'contact-form-7-to-database-extension') . '
' .
+ '' .
+ '' . __('Minimal version of PHP required: ', 'contact-form-7-to-database-extension') . '' . $minimalRequiredPhpVersion . ' ' .
+ '' . __('Your server\'s PHP version: ', 'contact-form-7-to-database-extension') . '' . phpversion() . ' ' .
+ ' ' .
+
+ '' . __('When using the Apache web server, typically you can configure it to use PHP5 by doing the following:', 'contact-form-7-to-database-extension') .
+ '
' .
+ '' . __('Locate and edit this file, located at the top directory of your WordPress installation: ', 'contact-form-7-to-database-extension') .
+ '.htaccess ' .
+ '' . __('Add these two lines to the file:', 'contact-form-7-to-database-extension') .
+ '
+AddType x-mapp-php5 .php
+AddHandler x-mapp-php5 .php
+ '
+ , E_USER_ERROR); // E_USER_ERROR seems to be handled OK in WP. It gives a notice in the Plugins Page
+ return false;
+ }
+ return true;
+}
+
+
+/**
+ * Initialize internationalization (i18n) for this plugin.
+ * References:
+ * http://codex.wordpress.org/I18n_for_WordPress_Developers
+ * http://www.wdmac.com/how-to-create-a-po-language-translation#more-631
+ * @return void
+ */
+function CF7DBPlugin_i18n_init() {
+ $pluginDir = dirname(plugin_basename(__FILE__));
+ load_plugin_textdomain('contact-form-7-to-database-extension', false, $pluginDir . '/languages/');
+}
+
+
+//////////////////////////////////
+// Run initialization
+/////////////////////////////////
+
+// First initialize i18n
+CF7DBPlugin_i18n_init();
+
+
+// Next, run the version check.
+// If it is successful, continue with initialization for this plugin
+if (CF7DBPlugin_PhpVersionCheck()) {
+ // Only load and run the init function if we know PHP version can parse it
+ include_once('CF7DBPlugin_init.php');
+ CF7DBPlugin_init(__FILE__);
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/css/paginate.css b/src/wp-content/plugins/contact-form-7-to-database-extension/css/paginate.css
new file mode 100644
index 00000000..6ef36eb8
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/css/paginate.css
@@ -0,0 +1,33 @@
+div.cfdb_paginate {
+ padding: 3px;
+ margin: 3px;
+}
+
+div.cfdb_paginate a {
+ padding: 2px 5px 2px 5px;
+ margin: 2px;
+ border: 1px solid #AAAADD;
+ text-decoration: none; /* no underline */
+ color: #000099;
+}
+
+div.cfdb_paginate a:hover, div.cfdb_paginate a:active {
+ border: 1px solid #000099;
+ color: #000;
+}
+
+div.cfdb_paginate span.current {
+ padding: 2px 5px 2px 5px;
+ margin: 2px;
+ border: 1px solid #000099;
+ font-weight: bold;
+ background-color: #000099;
+ color: #FFF;
+}
+
+div.cfdb_paginate span.disabled {
+ padding: 2px 5px 2px 5px;
+ margin: 2px;
+ border: 1px solid #EEE;
+ color: #DDD;
+}
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/des.js b/src/wp-content/plugins/contact-form-7-to-database-extension/des.js
new file mode 100644
index 00000000..27748ffc
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/des.js
@@ -0,0 +1,221 @@
+// Taken from: http://www.teslacore.it/sssup1/destest.html
+
+//Paul Tero, July 2001
+//http://www.shopable.co.uk/des.html
+//
+//Optimised for performance with large blocks by Michael Hayworth, November 2001
+//http://www.netdealing.com
+//
+//THIS SOFTWARE IS PROVIDED "AS IS" AND
+//ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+//ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+//FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+//DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+//OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+//HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+//LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+//OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+//SUCH DAMAGE.
+
+//des
+//this takes the key, the message, and whether to encrypt or decrypt
+function des (key, message, encrypt, mode, iv) {
+ //declaring this locally speeds things up a bit
+ var spfunction1 = new Array (0x1010400,0,0x10000,0x1010404,0x1010004,0x10404,0x4,0x10000,0x400,0x1010400,0x1010404,0x400,0x1000404,0x1010004,0x1000000,0x4,0x404,0x1000400,0x1000400,0x10400,0x10400,0x1010000,0x1010000,0x1000404,0x10004,0x1000004,0x1000004,0x10004,0,0x404,0x10404,0x1000000,0x10000,0x1010404,0x4,0x1010000,0x1010400,0x1000000,0x1000000,0x400,0x1010004,0x10000,0x10400,0x1000004,0x400,0x4,0x1000404,0x10404,0x1010404,0x10004,0x1010000,0x1000404,0x1000004,0x404,0x10404,0x1010400,0x404,0x1000400,0x1000400,0,0x10004,0x10400,0,0x1010004);
+ var spfunction2 = new Array (0x80108020,0x80008000,0x8000,0x108020,0x100000,0x20,0x80100020,0x80008020,0x80000020,0x80108020,0x80108000,0x80000000,0x80008000,0x100000,0x20,0x80100020,0x108000,0x100020,0x80008020,0,0x80000000,0x8000,0x108020,0x80100000,0x100020,0x80000020,0,0x108000,0x8020,0x80108000,0x80100000,0x8020,0,0x108020,0x80100020,0x100000,0x80008020,0x80100000,0x80108000,0x8000,0x80100000,0x80008000,0x20,0x80108020,0x108020,0x20,0x8000,0x80000000,0x8020,0x80108000,0x100000,0x80000020,0x100020,0x80008020,0x80000020,0x100020,0x108000,0,0x80008000,0x8020,0x80000000,0x80100020,0x80108020,0x108000);
+ var spfunction3 = new Array (0x208,0x8020200,0,0x8020008,0x8000200,0,0x20208,0x8000200,0x20008,0x8000008,0x8000008,0x20000,0x8020208,0x20008,0x8020000,0x208,0x8000000,0x8,0x8020200,0x200,0x20200,0x8020000,0x8020008,0x20208,0x8000208,0x20200,0x20000,0x8000208,0x8,0x8020208,0x200,0x8000000,0x8020200,0x8000000,0x20008,0x208,0x20000,0x8020200,0x8000200,0,0x200,0x20008,0x8020208,0x8000200,0x8000008,0x200,0,0x8020008,0x8000208,0x20000,0x8000000,0x8020208,0x8,0x20208,0x20200,0x8000008,0x8020000,0x8000208,0x208,0x8020000,0x20208,0x8,0x8020008,0x20200);
+ var spfunction4 = new Array (0x802001,0x2081,0x2081,0x80,0x802080,0x800081,0x800001,0x2001,0,0x802000,0x802000,0x802081,0x81,0,0x800080,0x800001,0x1,0x2000,0x800000,0x802001,0x80,0x800000,0x2001,0x2080,0x800081,0x1,0x2080,0x800080,0x2000,0x802080,0x802081,0x81,0x800080,0x800001,0x802000,0x802081,0x81,0,0,0x802000,0x2080,0x800080,0x800081,0x1,0x802001,0x2081,0x2081,0x80,0x802081,0x81,0x1,0x2000,0x800001,0x2001,0x802080,0x800081,0x2001,0x2080,0x800000,0x802001,0x80,0x800000,0x2000,0x802080);
+ var spfunction5 = new Array (0x100,0x2080100,0x2080000,0x42000100,0x80000,0x100,0x40000000,0x2080000,0x40080100,0x80000,0x2000100,0x40080100,0x42000100,0x42080000,0x80100,0x40000000,0x2000000,0x40080000,0x40080000,0,0x40000100,0x42080100,0x42080100,0x2000100,0x42080000,0x40000100,0,0x42000000,0x2080100,0x2000000,0x42000000,0x80100,0x80000,0x42000100,0x100,0x2000000,0x40000000,0x2080000,0x42000100,0x40080100,0x2000100,0x40000000,0x42080000,0x2080100,0x40080100,0x100,0x2000000,0x42080000,0x42080100,0x80100,0x42000000,0x42080100,0x2080000,0,0x40080000,0x42000000,0x80100,0x2000100,0x40000100,0x80000,0,0x40080000,0x2080100,0x40000100);
+ var spfunction6 = new Array (0x20000010,0x20400000,0x4000,0x20404010,0x20400000,0x10,0x20404010,0x400000,0x20004000,0x404010,0x400000,0x20000010,0x400010,0x20004000,0x20000000,0x4010,0,0x400010,0x20004010,0x4000,0x404000,0x20004010,0x10,0x20400010,0x20400010,0,0x404010,0x20404000,0x4010,0x404000,0x20404000,0x20000000,0x20004000,0x10,0x20400010,0x404000,0x20404010,0x400000,0x4010,0x20000010,0x400000,0x20004000,0x20000000,0x4010,0x20000010,0x20404010,0x404000,0x20400000,0x404010,0x20404000,0,0x20400010,0x10,0x4000,0x20400000,0x404010,0x4000,0x400010,0x20004010,0,0x20404000,0x20000000,0x400010,0x20004010);
+ var spfunction7 = new Array (0x200000,0x4200002,0x4000802,0,0x800,0x4000802,0x200802,0x4200800,0x4200802,0x200000,0,0x4000002,0x2,0x4000000,0x4200002,0x802,0x4000800,0x200802,0x200002,0x4000800,0x4000002,0x4200000,0x4200800,0x200002,0x4200000,0x800,0x802,0x4200802,0x200800,0x2,0x4000000,0x200800,0x4000000,0x200800,0x200000,0x4000802,0x4000802,0x4200002,0x4200002,0x2,0x200002,0x4000000,0x4000800,0x200000,0x4200800,0x802,0x200802,0x4200800,0x802,0x4000002,0x4200802,0x4200000,0x200800,0,0x2,0x4200802,0,0x200802,0x4200000,0x800,0x4000002,0x4000800,0x800,0x200002);
+ var spfunction8 = new Array (0x10001040,0x1000,0x40000,0x10041040,0x10000000,0x10001040,0x40,0x10000000,0x40040,0x10040000,0x10041040,0x41000,0x10041000,0x41040,0x1000,0x40,0x10040000,0x10000040,0x10001000,0x1040,0x41000,0x40040,0x10040040,0x10041000,0x1040,0,0,0x10040040,0x10000040,0x10001000,0x41040,0x40000,0x41040,0x40000,0x10041000,0x1000,0x40,0x10040040,0x1000,0x41040,0x10001000,0x40,0x10000040,0x10040000,0x10040040,0x10000000,0x40000,0x10001040,0,0x10041040,0x40040,0x10000040,0x10040000,0x10001000,0x10001040,0,0x10041040,0x41000,0x41000,0x1040,0x1040,0x40040,0x10000000,0x10041000);
+
+ //create the 16 or 48 subkeys we will need
+ var keys = des_createKeys (key);
+ var m=0, i, j, temp, temp2, right1, right2, left, right, looping;
+ var cbcleft, cbcleft2, cbcright, cbcright2
+ var endloop, loopinc;
+ var len = message.length;
+ var chunk = 0;
+ //set up the loops for single and triple des
+ var iterations = keys.length == 32 ? 3 : 9; //single or triple des
+ if (iterations == 3) {looping = encrypt ? new Array (0, 32, 2) : new Array (30, -2, -2);}
+ else {looping = encrypt ? new Array (0, 32, 2, 62, 30, -2, 64, 96, 2) : new Array (94, 62, -2, 32, 64, 2, 30, -2, -2);}
+
+ message += "\0\0\0\0\0\0\0\0"; //pad the message out with null bytes
+ //store the result here
+ result = "";
+ tempresult = "";
+
+ if (mode == 1) { //CBC mode
+ cbcleft = (iv.charCodeAt(m++) << 24) | (iv.charCodeAt(m++) << 16) | (iv.charCodeAt(m++) << 8) | iv.charCodeAt(m++);
+ cbcright = (iv.charCodeAt(m++) << 24) | (iv.charCodeAt(m++) << 16) | (iv.charCodeAt(m++) << 8) | iv.charCodeAt(m++);
+ m=0;
+ }
+
+ //loop through each 64 bit chunk of the message
+ while (m < len) {
+ left = (message.charCodeAt(m++) << 24) | (message.charCodeAt(m++) << 16) | (message.charCodeAt(m++) << 8) | message.charCodeAt(m++);
+ right = (message.charCodeAt(m++) << 24) | (message.charCodeAt(m++) << 16) | (message.charCodeAt(m++) << 8) | message.charCodeAt(m++);
+
+ //for Cipher Block Chaining mode, xor the message with the previous result
+ if (mode == 1) {if (encrypt) {left ^= cbcleft; right ^= cbcright;} else {cbcleft2 = cbcleft; cbcright2 = cbcright; cbcleft = left; cbcright = right;}}
+
+ //first each 64 but chunk of the message must be permuted according to IP
+ temp = ((left >>> 4) ^ right) & 0x0f0f0f0f; right ^= temp; left ^= (temp << 4);
+ temp = ((left >>> 16) ^ right) & 0x0000ffff; right ^= temp; left ^= (temp << 16);
+ temp = ((right >>> 2) ^ left) & 0x33333333; left ^= temp; right ^= (temp << 2);
+ temp = ((right >>> 8) ^ left) & 0x00ff00ff; left ^= temp; right ^= (temp << 8);
+ temp = ((left >>> 1) ^ right) & 0x55555555; right ^= temp; left ^= (temp << 1);
+
+ left = ((left << 1) | (left >>> 31));
+ right = ((right << 1) | (right >>> 31));
+
+ //do this either 1 or 3 times for each chunk of the message
+ for (j=0; j>> 4) | (right << 28)) ^ keys[i+1];
+ //the result is attained by passing these bytes through the S selection functions
+ temp = left;
+ left = right;
+ right = temp ^ (spfunction2[(right1 >>> 24) & 0x3f] | spfunction4[(right1 >>> 16) & 0x3f]
+ | spfunction6[(right1 >>> 8) & 0x3f] | spfunction8[right1 & 0x3f]
+ | spfunction1[(right2 >>> 24) & 0x3f] | spfunction3[(right2 >>> 16) & 0x3f]
+ | spfunction5[(right2 >>> 8) & 0x3f] | spfunction7[right2 & 0x3f]);
+ }
+ temp = left; left = right; right = temp; //unreverse left and right
+ } //for either 1 or 3 iterations
+
+ //move then each one bit to the right
+ left = ((left >>> 1) | (left << 31));
+ right = ((right >>> 1) | (right << 31));
+
+ //now perform IP-1, which is IP in the opposite direction
+ temp = ((left >>> 1) ^ right) & 0x55555555; right ^= temp; left ^= (temp << 1);
+ temp = ((right >>> 8) ^ left) & 0x00ff00ff; left ^= temp; right ^= (temp << 8);
+ temp = ((right >>> 2) ^ left) & 0x33333333; left ^= temp; right ^= (temp << 2);
+ temp = ((left >>> 16) ^ right) & 0x0000ffff; right ^= temp; left ^= (temp << 16);
+ temp = ((left >>> 4) ^ right) & 0x0f0f0f0f; right ^= temp; left ^= (temp << 4);
+
+ //for Cipher Block Chaining mode, xor the message with the previous result
+ if (mode == 1) {if (encrypt) {cbcleft = left; cbcright = right;} else {left ^= cbcleft2; right ^= cbcright2;}}
+ tempresult += String.fromCharCode ((left>>>24), ((left>>>16) & 0xff), ((left>>>8) & 0xff), (left & 0xff), (right>>>24), ((right>>>16) & 0xff), ((right>>>8) & 0xff), (right & 0xff));
+
+ chunk += 8;
+ if (chunk == 512) {result += tempresult; tempresult = ""; chunk = 0;}
+ } //for every 8 characters, or 64 bits in the message
+
+ //return the result as an array
+ return result + tempresult;
+} //end of des
+
+
+
+//des_createKeys
+//this takes as input a 64 bit key (even though only 56 bits are used)
+//as an array of 2 integers, and returns 16 48 bit keys
+function des_createKeys (key) {
+ //declaring this locally speeds things up a bit
+ pc2bytes0 = new Array (0,0x4,0x20000000,0x20000004,0x10000,0x10004,0x20010000,0x20010004,0x200,0x204,0x20000200,0x20000204,0x10200,0x10204,0x20010200,0x20010204);
+ pc2bytes1 = new Array (0,0x1,0x100000,0x100001,0x4000000,0x4000001,0x4100000,0x4100001,0x100,0x101,0x100100,0x100101,0x4000100,0x4000101,0x4100100,0x4100101);
+ pc2bytes2 = new Array (0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808,0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808);
+ pc2bytes3 = new Array (0,0x200000,0x8000000,0x8200000,0x2000,0x202000,0x8002000,0x8202000,0x20000,0x220000,0x8020000,0x8220000,0x22000,0x222000,0x8022000,0x8222000);
+ pc2bytes4 = new Array (0,0x40000,0x10,0x40010,0,0x40000,0x10,0x40010,0x1000,0x41000,0x1010,0x41010,0x1000,0x41000,0x1010,0x41010);
+ pc2bytes5 = new Array (0,0x400,0x20,0x420,0,0x400,0x20,0x420,0x2000000,0x2000400,0x2000020,0x2000420,0x2000000,0x2000400,0x2000020,0x2000420);
+ pc2bytes6 = new Array (0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002,0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002);
+ pc2bytes7 = new Array (0,0x10000,0x800,0x10800,0x20000000,0x20010000,0x20000800,0x20010800,0x20000,0x30000,0x20800,0x30800,0x20020000,0x20030000,0x20020800,0x20030800);
+ pc2bytes8 = new Array (0,0x40000,0,0x40000,0x2,0x40002,0x2,0x40002,0x2000000,0x2040000,0x2000000,0x2040000,0x2000002,0x2040002,0x2000002,0x2040002);
+ pc2bytes9 = new Array (0,0x10000000,0x8,0x10000008,0,0x10000000,0x8,0x10000008,0x400,0x10000400,0x408,0x10000408,0x400,0x10000400,0x408,0x10000408);
+ pc2bytes10 = new Array (0,0x20,0,0x20,0x100000,0x100020,0x100000,0x100020,0x2000,0x2020,0x2000,0x2020,0x102000,0x102020,0x102000,0x102020);
+ pc2bytes11 = new Array (0,0x1000000,0x200,0x1000200,0x200000,0x1200000,0x200200,0x1200200,0x4000000,0x5000000,0x4000200,0x5000200,0x4200000,0x5200000,0x4200200,0x5200200);
+ pc2bytes12 = new Array (0,0x1000,0x8000000,0x8001000,0x80000,0x81000,0x8080000,0x8081000,0x10,0x1010,0x8000010,0x8001010,0x80010,0x81010,0x8080010,0x8081010);
+ pc2bytes13 = new Array (0,0x4,0x100,0x104,0,0x4,0x100,0x104,0x1,0x5,0x101,0x105,0x1,0x5,0x101,0x105);
+
+ //how many iterations (1 for des, 3 for triple des)
+ var iterations = key.length >= 24 ? 3 : 1;
+ //stores the return keys
+ var keys = new Array (32 * iterations);
+ //now define the left shifts which need to be done
+ var shifts = new Array (0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0);
+ //other variables
+ var lefttemp, righttemp, m=0, n=0, temp;
+
+ for (var j=0; j>> 4) ^ right) & 0x0f0f0f0f; right ^= temp; left ^= (temp << 4);
+ temp = ((right >>> -16) ^ left) & 0x0000ffff; left ^= temp; right ^= (temp << -16);
+ temp = ((left >>> 2) ^ right) & 0x33333333; right ^= temp; left ^= (temp << 2);
+ temp = ((right >>> -16) ^ left) & 0x0000ffff; left ^= temp; right ^= (temp << -16);
+ temp = ((left >>> 1) ^ right) & 0x55555555; right ^= temp; left ^= (temp << 1);
+ temp = ((right >>> 8) ^ left) & 0x00ff00ff; left ^= temp; right ^= (temp << 8);
+ temp = ((left >>> 1) ^ right) & 0x55555555; right ^= temp; left ^= (temp << 1);
+
+ //the right side needs to be shifted and to get the last four bits of the left side
+ temp = (left << 8) | ((right >>> 20) & 0x000000f0);
+ //left needs to be put upside down
+ left = (right << 24) | ((right << 8) & 0xff0000) | ((right >>> 8) & 0xff00) | ((right >>> 24) & 0xf0);
+ right = temp;
+
+ //now go through and perform these shifts on the left and right keys
+ for (i=0; i < shifts.length; i++) {
+ //shift the keys either one or two bits to the left
+ if (shifts[i]) {left = (left << 2) | (left >>> 26); right = (right << 2) | (right >>> 26);}
+ else {left = (left << 1) | (left >>> 27); right = (right << 1) | (right >>> 27);}
+ left &= 0xfffffff0; right &= 0xfffffff0;
+
+ //now apply PC-2, in such a way that E is easier when encrypting or decrypting
+ //this conversion will look like PC-2 except only the last 6 bits of each byte are used
+ //rather than 48 consecutive bits and the order of lines will be according to
+ //how the S selection functions will be applied: S2, S4, S6, S8, S1, S3, S5, S7
+ lefttemp = pc2bytes0[left >>> 28] | pc2bytes1[(left >>> 24) & 0xf]
+ | pc2bytes2[(left >>> 20) & 0xf] | pc2bytes3[(left >>> 16) & 0xf]
+ | pc2bytes4[(left >>> 12) & 0xf] | pc2bytes5[(left >>> 8) & 0xf]
+ | pc2bytes6[(left >>> 4) & 0xf];
+ righttemp = pc2bytes7[right >>> 28] | pc2bytes8[(right >>> 24) & 0xf]
+ | pc2bytes9[(right >>> 20) & 0xf] | pc2bytes10[(right >>> 16) & 0xf]
+ | pc2bytes11[(right >>> 12) & 0xf] | pc2bytes12[(right >>> 8) & 0xf]
+ | pc2bytes13[(right >>> 4) & 0xf];
+ temp = ((righttemp >>> 16) ^ lefttemp) & 0x0000ffff;
+ keys[n++] = lefttemp ^ temp; keys[n++] = righttemp ^ (temp << 16);
+ }
+ } //for each iterations
+ //return the keys we've created
+ return keys;
+} //end of des_createKeys
+
+
+////////////////////////////// TEST //////////////////////////////
+//printHexArray
+function printHex (s) {
+ //var r = "0x"; // Don't prepend "0x"
+ var r = "";
+ var hexes = new Array ("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");
+ for (var i=0; i> 4] + hexes [s.charCodeAt(i) & 0xf];}
+ return r;
+}
+
+function unHex(s)
+{
+ var r = "";
+// for (var i=2; i= 48 && x1 < 58 ? x1 - 48 : x1 - 97 + 10;
+ x2 = s.charCodeAt(i+1);
+ x2 = x2 >= 48 && x2 < 58 ? x2 - 48 : x2 - 97 + 10;
+ r += String.fromCharCode (((x1 << 4) & 0xF0) | (x2 & 0x0F));
+ }
+ return r;
+}
+
+//var key = "this is a 24 byte key !!";
+//var message = "This is a test message";
+//var ciphertext = des (key, message, 1, 0);
+//document.writeln ("DES Test: " + printHex (ciphertext));
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/_README.txt b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/_README.txt
new file mode 100644
index 00000000..521e15f0
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/_README.txt
@@ -0,0 +1,25 @@
+This directory is for the i18n translations for the DataTable widget that is used by this plugin.
+Most translations herein were take from DataTables.net: http://www.datatables.net/plug-ins/i18n
+
+To create a file for a language, give it a name following the format:
+ ll.json
+
+And to create a file specific to a language and country, give it a name following the format:
+ ll_CC.json
+
+Or use whatever the locale string in for your system:
+ locale.json
+
+Where:
+ "ll" is an ISO 639 two- or three-letter language code
+ http://www.gnu.org/software/autoconf/manual/gettext/Language-Codes.html#Language-Codes
+
+ "CC" is an ISO 3166 two-letter country code
+ http://www.gnu.org/software/autoconf/manual/gettext/Country-Codes.html#Country-Codes
+
+ locale is your locale string, which is typically in the form "ll_CC", but is whatever
+ is returned from WordPress function get_locale()
+
+** If you create a new translation file, please send a copy to the author of this plugin
+ so he can share it with others. Also, send it to a contact at DataTable.net.
+ email: michael_d_simpson@gmail.com
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/ar.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/ar.json
new file mode 100644
index 00000000..cb84bcb3
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/ar.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "جاري التØÙ…يل...",
+ "sLengthMenu": "أظهر Ù…ÙØ¯Ø®Ù„ات _MENU_",
+ "sZeroRecords": "لم ÙŠÙØ¹Ø«Ø± على أية سجلات",
+ "sInfo": "إظهار _START_ إلى _END_ من أصل _TOTAL_ Ù…ÙØ¯Ø®Ù„",
+ "sInfoEmpty": "يعرض 0 إلى 0 من أصل 0 سجلّ",
+ "sInfoFiltered": "(منتقاة من مجموع _MAX_ Ù…ÙØ¯Ø®Ù„)",
+ "sInfoPostFix": "",
+ "sSearch": "Ø§Ø¨ØØ«:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "الأول",
+ "sPrevious": "السابق",
+ "sNext": "التالي",
+ "sLast": "الأخير"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/bg.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/bg.json
new file mode 100644
index 00000000..3f2d8c2c
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/bg.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Обработка на резултатите...",
+ "sLengthMenu": "Показване на _MENU_ резултата",
+ "sZeroRecords": "ÐÑма намерени резултати",
+ "sInfo": "Показване на резултати от _START_ до _END_ от общо _TOTAL_",
+ "sInfoEmpty": "Показване на резултати от 0 до 0 от общо 0",
+ "sInfoFiltered": "(филтрирани от общо _MAX_ резултата)",
+ "sInfoPostFix": "",
+ "sSearch": "ТърÑене във вÑички колони:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Първа",
+ "sPrevious": "Предишна",
+ "sNext": "Следваща",
+ "sLast": "ПоÑледна"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/ca.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/ca.json
new file mode 100644
index 00000000..870b2057
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/ca.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Processant...",
+ "sLengthMenu": "Mostra _MENU_ registres",
+ "sZeroRecords": "No s'han trobat registres.",
+ "sInfo": "Mostrant de _START_ a _END_ de _TOTAL_ registres",
+ "sInfoEmpty": "Mostrant de 0 a 0 de 0 registres",
+ "sInfoFiltered": "(filtrat de _MAX_ total registres)",
+ "sInfoPostFix": "",
+ "sSearch": "Filtrar:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Primer",
+ "sPrevious": "Anterior",
+ "sNext": "Següent",
+ "sLast": "Últim"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/cs.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/cs.json
new file mode 100644
index 00000000..4c6ed148
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/cs.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "ProvádÃm...",
+ "sLengthMenu": "Zobraz záznamů _MENU_",
+ "sZeroRecords": "Žádné záznamy nebyly nalezeny",
+ "sInfo": "Zobrazuji _START_ až _END_ z celkem _TOTAL_ záznamů",
+ "sInfoEmpty": "Zobrazuji 0 až 0 z 0 záznamů",
+ "sInfoFiltered": "(filtrováno z celkem _MAX_ záznamů)",
+ "sInfoPostFix": "",
+ "sSearch": "Hledat:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "PrvnÃ",
+ "sPrevious": "PÅ™edchozÃ",
+ "sNext": "DalÅ¡Ã",
+ "sLast": "PoslednÃ"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/da.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/da.json
new file mode 100644
index 00000000..1f7505aa
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/da.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Henter...",
+ "sLengthMenu": "Vis: _MENU_ linjer",
+ "sZeroRecords": "Ingen linjer matcher søgningen",
+ "sInfo": "Viser _START_ til _END_ af _TOTAL_ linjer",
+ "sInfoEmpty": "Viser 0 til 0 af 0 linjer",
+ "sInfoFiltered": "(filtreret fra _MAX_ linjer)",
+ "sInfoPostFix": "",
+ "sSearch": "Søg:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Første",
+ "sPrevious": "Forrige",
+ "sNext": "Næste",
+ "sLast": "Sidste"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/de.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/de.json
new file mode 100644
index 00000000..ba9c549b
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/de.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Bitte warten...",
+ "sLengthMenu": "_MENU_ Einträge anzeigen",
+ "sZeroRecords": "Keine Einträge vorhanden.",
+ "sInfo": "_START_ bis _END_ von _TOTAL_ Einträgen",
+ "sInfoEmpty": "0 bis 0 von 0 Einträgen",
+ "sInfoFiltered": "(gefiltert von _MAX_ Einträgen)",
+ "sInfoPostFix": "",
+ "sSearch": "Suchen",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Erster",
+ "sPrevious": "Zurück",
+ "sNext": "Nächster",
+ "sLast": "Letzter"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/el.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/el.json
new file mode 100644
index 00000000..16f92e1c
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/el.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "ΕπεξεÏγασία...",
+ "sLengthMenu": "Δείξε _MENU_ εγγÏαφÎÏ‚",
+ "sZeroRecords": "Δεν βÏÎθηκαν εγγÏαφÎÏ‚ που να ταιÏιάζουν",
+ "sInfo": "Δείχνοντας _START_ εως _END_ από _TOTAL_ εγγÏαφÎÏ‚",
+ "sInfoEmpty": "Δείχνοντας 0 εως 0 από 0 εγγÏαφÎÏ‚",
+ "sInfoFiltered": "(φιλτÏαÏισμÎνες από _MAX_ συνολικά εγγÏαφÎÏ‚)",
+ "sInfoPostFix": "",
+ "sSearch": "Αναζήτηση:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Î Ïώτη",
+ "sPrevious": "Î ÏοηγοÏμενη",
+ "sNext": "Επόμενη",
+ "sLast": "Τελευταία"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/es.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/es.json
new file mode 100644
index 00000000..045eace1
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/es.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Procesando...",
+ "sLengthMenu": "Mostrar _MENU_ registros",
+ "sZeroRecords": "No se encontraron resultados",
+ "sInfo": "Mostrando desde _START_ hasta _END_ de _TOTAL_ registros",
+ "sInfoEmpty": "Mostrando desde 0 hasta 0 de 0 registros",
+ "sInfoFiltered": "(filtrado de _MAX_ registros en total)",
+ "sInfoPostFix": "",
+ "sSearch": "Buscar:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Primero",
+ "sPrevious": "Anterior",
+ "sNext": "Siguiente",
+ "sLast": "Último"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/et.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/et.json
new file mode 100644
index 00000000..00b49e7b
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/et.json
@@ -0,0 +1,16 @@
+{
+ "sProcessing": "Palun oodake, koostan kuvamiseks nimekirja!",
+ "sLengthMenu": "Näita kirjeid _MENU_ kaupa",
+ "sZeroRecords": "Otsitavat vastet ei leitud.",
+ "sInfo": "Kuvatud: _TOTAL_ kirjet (_START_-_END_)",
+ "sInfoEmpty": "Otsinguvasteid ei leitud",
+ "sInfoFiltered": " - filteeritud _MAX_ kirje seast.",
+ "sInfoPostFix": "Kõik kuvatud kirjed põhinevad reaalsetel tulemustel.",
+ "sSearch": "Otsi kõikide tulemuste seast:",
+ "oPaginate": {
+ "sFirst": "Algus",
+ "sPrevious": "Eelmine",
+ "sNext": "Järgmine",
+ "sLast": "Viimane"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/fa.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/fa.json
new file mode 100644
index 00000000..97b65839
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/fa.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Ø¯Ø±ØØ§Ù„ پردازش...",
+ "sLengthMenu": "نمایش Ù…ØØªÙˆÛŒØ§Øª _MENU_",
+ "sZeroRecords": "موردی ÛŒØ§ÙØª نشد",
+ "sInfo": "نمایش _START_ تا _END_ از مجموع _TOTAL_ مورد",
+ "sInfoEmpty": "تهی",
+ "sInfoFiltered": "(Ùیلتر شده از مجموع _MAX_ مورد)",
+ "sInfoPostFix": "",
+ "sSearch": "جستجو:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "ابتدا",
+ "sPrevious": "قبلی",
+ "sNext": "بعدی",
+ "sLast": "انتها"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/fi.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/fi.json
new file mode 100644
index 00000000..ca0ed553
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/fi.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Hetkinen...",
+ "sLengthMenu": "Näytä kerralla _MENU_ riviä",
+ "sZeroRecords": "Tietoja ei löytynyt",
+ "sInfo": "Näytetään rivit _START_ - _END_ (yhteensä _TOTAL_ )",
+ "sInfoEmpty": "Näytetään 0 - 0 (yhteensä 0)",
+ "sInfoFiltered": "(suodatettu _MAX_ tuloksen joukosta)",
+ "sInfoPostFix": "",
+ "sSearch": "Etsi:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Ensimmäinen",
+ "sPrevious": "Edellinen",
+ "sNext": "Seuraava",
+ "sLast": "Viimeinen"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/fr.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/fr.json
new file mode 100644
index 00000000..bb46fded
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/fr.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Traitement en cours...",
+ "sLengthMenu": "Afficher _MENU_ éléments",
+ "sZeroRecords": "Aucun élément à afficher",
+ "sInfo": "Affichage de l'élement _START_ à _END_ sur _TOTAL_ éléments",
+ "sInfoEmpty": "Affichage de l'élement 0 à 0 sur 0 éléments",
+ "sInfoFiltered": "(filtré de _MAX_ éléments au total)",
+ "sInfoPostFix": "",
+ "sSearch": "Rechercher :",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Premier",
+ "sPrevious": "Précédent",
+ "sNext": "Suivant",
+ "sLast": "Dernier"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/he.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/he.json
new file mode 100644
index 00000000..7dd7853b
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/he.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "מעבד...",
+ "sLengthMenu": "הצג _MENU_ פריטי×",
+ "sZeroRecords": "×œ× × ×ž×¦×ו רשומות מת×ימות",
+ "sInfo": "_START_ עד _END_ מתוך _TOTAL_ רשומות" ,
+ "sInfoEmpty": "0 עד 0 מתוך 0 רשומות",
+ "sInfoFiltered": "(×ž×¡×•× ×Ÿ מסך _MAX_ רשומות)",
+ "sInfoPostFix": "",
+ "sSearch": "חפש:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "ר×שון",
+ "sPrevious": "קוד×",
+ "sNext": "הב×",
+ "sLast": "×חרון"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/hi.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/hi.json
new file mode 100644
index 00000000..779c0fc1
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/hi.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "पà¥à¤°à¤—ति पे हैं ...",
+ "sLengthMenu": " _MENU_ पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿà¤¿à¤¯à¤¾à¤‚ दिखाà¤à¤‚ ",
+ "sZeroRecords": "रिकॉरà¥à¤¡à¥à¤¸ का मेल नहीं मिला",
+ "sInfo": "_START_ to _END_ of _TOTAL_ पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿà¤¿à¤¯à¤¾à¤‚ दिखा रहे हैं",
+ "sInfoEmpty": "0 में से 0 से 0 पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿà¤¿à¤¯à¤¾à¤‚ दिखा रहे हैं",
+ "sInfoFiltered": "(_MAX_ कà¥à¤² पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿà¤¿à¤¯à¥‹à¤‚ में से छठा हà¥à¤†)",
+ "sInfoPostFix": "",
+ "sSearch": "खोजें:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "पà¥à¤°à¤¥à¤®",
+ "sPrevious": "पिछला",
+ "sNext": "अगला",
+ "sLast": "अंतिम"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/hr.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/hr.json
new file mode 100644
index 00000000..9dd83cd7
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/hr.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Procesiram...",
+ "sLengthMenu": "Prikaži _MENU_ rezultata po stranici",
+ "sZeroRecords": "Ništa nije pronađeno",
+ "sInfo": "Prikazano _START_ do _END_ od _TOTAL_ rezultata",
+ "sInfoEmtpy": "Prikazano 0 do 0 od 0 rezultata",
+ "sInfoFiltered": "(filtrirano iz _MAX_ ukupnih rezultata)",
+ "sInfoPostFix": "",
+ "sSearch": "Filter",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Prva",
+ "sPrevious": "Nazad",
+ "sNext": "Naprijed",
+ "sLast": "Zadnja"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/hu.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/hu.json
new file mode 100644
index 00000000..23802707
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/hu.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Feldolgozás...",
+ "sLengthMenu": "_MENU_ találat oldalanként",
+ "sZeroRecords": "Nincs a keresésnek megfelelő találat",
+ "sInfo": "Találatok: _START_ - _END_ Összesen: _TOTAL_",
+ "sInfoEmpty": "Nulla találat",
+ "sInfoFiltered": "(_MAX_ összes rekord közül szűrve)",
+ "sInfoPostFix": "",
+ "sSearch": "Keresés:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Első",
+ "sPrevious": "Előző",
+ "sNext": "Következő",
+ "sLast": "Utolsó"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/id.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/id.json
new file mode 100644
index 00000000..96bd2433
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/id.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Sedang memproses...",
+ "sLengthMenu": "Tampilkan _MENU_ entri",
+ "sZeroRecords": "Tidak ditemukan data yang sesuai",
+ "sInfo": "Menampilkan _START_ sampai _END_ dari _TOTAL_ entri",
+ "sInfoEmpty": "Menampilkan 0 sampai 0 dari 0 entri",
+ "sInfoFiltered": "(disaring dari _MAX_ entri keseluruhan)",
+ "sInfoPostFix": "",
+ "sSearch": "Cari:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Pertama",
+ "sPrevious": "Sebelumnya",
+ "sNext": "Selanjutnya",
+ "sLast": "Terakhir"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/it.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/it.json
new file mode 100644
index 00000000..35e861ce
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/it.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Caricamento...",
+ "sLengthMenu": "Visualizza _MENU_ elementi",
+ "sZeroRecords": "La ricerca non ha portato alcun risultato.",
+ "sInfo": "Vista da _START_ a _END_ di _TOTAL_ elementi",
+ "sInfoEmpty": "Vista da 0 a 0 di 0 elementi",
+ "sInfoFiltered": "(filtrati da _MAX_ elementi totali)",
+ "sInfoPostFix": "",
+ "sSearch": "Cerca:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Inizio",
+ "sPrevious": "Precedente",
+ "sNext": "Successivo",
+ "sLast": "Fine"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/ka.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/ka.json
new file mode 100644
index 00000000..f7613cbb
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/ka.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "მიმდინáƒáƒ ეáƒáƒ‘ს დáƒáƒ›áƒ£áƒ¨áƒáƒ•ებáƒ...",
+ "sLengthMenu": "áƒáƒ©áƒ•ენე _MENU_ ჩáƒáƒœáƒáƒ¬áƒ”რი",
+ "sZeroRecords": "áƒáƒ áƒáƒ¤áƒ”რი მáƒáƒ˜áƒ«áƒ”ბნáƒ",
+ "sInfo": "ნáƒáƒ©áƒ•ენებირჩáƒáƒœáƒáƒ¬áƒ”რები _START_–დáƒáƒœ _END_–მდე, სულ _TOTAL_ ჩáƒáƒœáƒáƒ¬áƒ”რიáƒ",
+ "sInfoEmpty": "ნáƒáƒ©áƒ•ენებირჩáƒáƒœáƒáƒ¬áƒ”რები 0–დáƒáƒœ 0–მდე, სულ 0 ჩáƒáƒœáƒáƒ¬áƒ”რიáƒ",
+ "sInfoFiltered": "(გáƒáƒ¤áƒ˜áƒšáƒ¢áƒ ული შედეგი _MAX_ ჩáƒáƒœáƒáƒ¬áƒ”რიდáƒáƒœ)",
+ "sInfoPostFix": "",
+ "sSearch": "ძიებáƒ:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "პირველი",
+ "sPrevious": "წინáƒ",
+ "sNext": "შემდეგი",
+ "sLast": "ბáƒáƒšáƒ"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/lt.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/lt.json
new file mode 100644
index 00000000..e3f46ffa
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/lt.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Apdorojama...",
+ "sLengthMenu": "Rodyti _MENU_ įrašus",
+ "sZeroRecords": "Įrašų nerasta",
+ "sInfo": "Rodomi įrašai nuo _START_ iki _END_ iš _TOTAL_ įrašų",
+ "sInfoEmpty": "Rodomi įrašai nuo 0 iki 0 iš 0",
+ "sInfoFiltered": "(atrinkta iš _MAX_ įrašų)",
+ "sInfoPostFix": "",
+ "sSearch": "Ieškoti:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Pirmas",
+ "sPrevious": "Ankstesnis",
+ "sNext": "Tolimesnis",
+ "sLast": "Paskutinis"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/lv.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/lv.json
new file mode 100644
index 00000000..8e9cf5fc
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/lv.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Uzgaidiet...",
+ "sLengthMenu": "RÄdÄ«t _MENU_ ierakstus",
+ "sZeroRecords": "Nav atrasti vaicÄjumam atbilstoÅ¡i ieraksti",
+ "sInfo": "ParÄdÄ«ti _START_. lÄ«dz _END_. no _TOTAL_ ierakstiem",
+ "sInfoEmpty": "Nav ierakstu",
+ "sInfoFiltered": "(atlasīts no pavisam _MAX_ ierakstiem)",
+ "sInfoPostFix": "",
+ "sSearch": "Meklēt:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "PirmÄ",
+ "sPrevious": "IepriekšējÄ",
+ "sNext": "NÄkoÅ¡Ä",
+ "sLast": "PÄ“dÄ“jÄ"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/nb.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/nb.json
new file mode 100644
index 00000000..6fba75d8
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/nb.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Laster...",
+ "sLengthMenu": "Vis: _MENU_ linjer",
+ "sZeroRecords": "Ingen linjer matcher søket",
+ "sInfo": "Viser _START_ til _END_ av _TOTAL_ linjer",
+ "sInfoEmpty": "Viser 0 til 0 av 0 linjer",
+ "sInfoFiltered": "(filtrert fra _MAX_ totalt antall linjer)",
+ "sInfoPostFix": "",
+ "sSearch": "Søk:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Første",
+ "sPrevious": "Forrige",
+ "sNext": "Neste",
+ "sLast": "Siste"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/nl.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/nl.json
new file mode 100644
index 00000000..12179cf0
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/nl.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Bezig met verwerken...",
+ "sLengthMenu": "Toon _MENU_ rijen",
+ "sZeroRecords": "Geen resultaten gevonden",
+ "sInfo": "_START_ tot _END_ van _TOTAL_ rijen",
+ "sInfoEmpty": "Er zijn geen records om te tonen",
+ "sInfoFiltered": "(gefilterd uit _MAX_ rijen)",
+ "sInfoPostFix": "",
+ "sSearch": "Zoek:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Eerste",
+ "sPrevious": "Vorige",
+ "sNext": "Volgende",
+ "sLast": "Laatste"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/pl.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/pl.json
new file mode 100644
index 00000000..d749d9dc
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/pl.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Proszę czekać...",
+ "sLengthMenu": "Pokaż _MENU_ pozycji",
+ "sZeroRecords": "Nie znaleziono żadnych pasujących indeksów",
+ "sInfo": "Pozycje od _START_ do _END_ z _TOTAL_ łącznie",
+ "sInfoEmpty": "Pozycji 0 z 0 dostępnych",
+ "sInfoFiltered": "(filtrowanie spośród _MAX_ dostępnych pozycji)",
+ "sInfoPostFix": "",
+ "sSearch": "Szukaj:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Pierwsza",
+ "sPrevious": "Poprzednia",
+ "sNext": "Następna",
+ "sLast": "Ostatnia"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/pt.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/pt.json
new file mode 100644
index 00000000..ade2aff1
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/pt.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "A processar...",
+ "sLengthMenu": "Mostrar _MENU_ registos",
+ "sZeroRecords": "Não foram encontrados resultados",
+ "sInfo": "Mostrando de _START_ até _END_ de _TOTAL_ registos",
+ "sInfoEmpty": "Mostrando de 0 até 0 de 0 registros",
+ "sInfoFiltered": "(filtrado de _MAX_ registos no total)",
+ "sInfoPostFix": "",
+ "sSearch": "Procurar:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Primeiro",
+ "sPrevious": "Anterior",
+ "sNext": "Seguinte",
+ "sLast": "Último"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/pt_BR.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/pt_BR.json
new file mode 100644
index 00000000..e94b0217
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/pt_BR.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Processando...",
+ "sLengthMenu": "Mostrar _MENU_ registros",
+ "sZeroRecords": "Não foram encontrados resultados",
+ "sInfo": "Mostrando de _START_ até _END_ de _TOTAL_ registros",
+ "sInfoEmpty": "Mostrando de 0 até 0 de 0 registros",
+ "sInfoFiltered": "(filtrado de _MAX_ registros no total)",
+ "sInfoPostFix": "",
+ "sSearch": "Buscar:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Primeiro",
+ "sPrevious": "Anterior",
+ "sNext": "Seguinte",
+ "sLast": "Último"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/ro.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/ro.json
new file mode 100644
index 00000000..68b25fc9
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/ro.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Proceseaza...",
+ "sLengthMenu": "Afiseaza _MENU_ inregistrari pe pagina",
+ "sZeroRecords": "Nu am gasit nimic - ne pare rau",
+ "sInfo": "Afisate de la _START_ la _END_ din _TOTAL_ inregistrari",
+ "sInfoEmpty": "Afisate de la 0 la 0 din 0 inregistrari",
+ "sInfoFiltered": "(filtrate dintr-un total de _MAX_ inregistrari)",
+ "sInfoPostFix": "",
+ "sSearch": "Cauta:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Prima",
+ "sPrevious": "Precedenta",
+ "sNext": "Urmatoarea",
+ "sLast": "Ultima"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/ru.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/ru.json
new file mode 100644
index 00000000..971561d5
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/ru.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Подождите...",
+ "sLengthMenu": "Показать _MENU_ запиÑей",
+ "sZeroRecords": "ЗапиÑи отÑутÑтвуют.",
+ "sInfo": "ЗапиÑи Ñ _START_ до _END_ из _TOTAL_ запиÑей",
+ "sInfoEmpty": "ЗапиÑи Ñ 0 до 0 из 0 запиÑей",
+ "sInfoFiltered": "(отфильтровано из _MAX_ запиÑей)",
+ "sInfoPostFix": "",
+ "sSearch": "ПоиÑк:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "ПерваÑ",
+ "sPrevious": "ПредыдущаÑ",
+ "sNext": "СледующаÑ",
+ "sLast": "ПоÑледнÑÑ"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/sk.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/sk.json
new file mode 100644
index 00000000..25773a0e
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/sk.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Pracujem...",
+ "sLengthMenu": "Zobraz _MENU_ záznamov",
+ "sZeroRecords": "Neboli nájdené žiadne záznamy",
+ "sInfo": "Záznamy _START_ až _END_ z celkovo _TOTAL_",
+ "sInfoEmpty": "Záznamy 0 až 0 z celkovo 0",
+ "sInfoFiltered": "(filtrované z celkovo _MAX_ záznamov)",
+ "sInfoPostFix": "",
+ "sSearch": "Hľadaj:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Prvá",
+ "sPrevious": "Predchádzajúca",
+ "sNext": "Ďalšia",
+ "sLast": "Posledná"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/sl.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/sl.json
new file mode 100644
index 00000000..91846d62
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/sl.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Obdelujem...",
+ "sLengthMenu": "Prikaži _MENU_ zapisov",
+ "sZeroRecords": "Noben zapis ni bil najden",
+ "sInfo": "Prikazanih od _START_ do _END_ od skupno _TOTAL_ zapisov",
+ "sInfoEmpty": "Prikazanih od 0 do 0 od skupno 0 zapisov",
+ "sInfoFiltered": "(filtrirano po vseh _MAX_ zapisih)",
+ "sInfoPostFix": "",
+ "sSearch": "IÅ¡Äi:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Prva",
+ "sPrevious": "Nazaj",
+ "sNext": "Naprej",
+ "sLast": "Zadnja"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/sr.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/sr.json
new file mode 100644
index 00000000..bb9731d2
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/sr.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Procesiranje u toku...",
+ "sLengthMenu": "Prikaži _MENU_ elemenata",
+ "sZeroRecords": "Nije pronađen nijedan rezultat",
+ "sInfo": "Prikaz _START_ do _END_ od ukupno _TOTAL_ elemenata",
+ "sInfoEmpty": "Prikaz 0 do 0 od ukupno 0 elemenata",
+ "sInfoFiltered": "(filtrirano od ukupno _MAX_ elemenata)",
+ "sInfoPostFix": "",
+ "sSearch": "Pretraga:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "PoÄetna",
+ "sPrevious": "Prethodna",
+ "sNext": "Sledeća",
+ "sLast": "Poslednja"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/sr_RS@latin.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/sr_RS@latin.json
new file mode 100644
index 00000000..bb9731d2
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/sr_RS@latin.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Procesiranje u toku...",
+ "sLengthMenu": "Prikaži _MENU_ elemenata",
+ "sZeroRecords": "Nije pronađen nijedan rezultat",
+ "sInfo": "Prikaz _START_ do _END_ od ukupno _TOTAL_ elemenata",
+ "sInfoEmpty": "Prikaz 0 do 0 od ukupno 0 elemenata",
+ "sInfoFiltered": "(filtrirano od ukupno _MAX_ elemenata)",
+ "sInfoPostFix": "",
+ "sSearch": "Pretraga:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "PoÄetna",
+ "sPrevious": "Prethodna",
+ "sNext": "Sledeća",
+ "sLast": "Poslednja"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/sv.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/sv.json
new file mode 100644
index 00000000..2c134bf7
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/sv.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Laddar...",
+ "sLengthMenu": "Visa _MENU_ rader",
+ "sZeroRecords": "Inga matchande resultat funna",
+ "sInfo": "Visar _START_ till _END_ av totalt _TOTAL_ rader",
+ "sInfoEmpty": "Visar 0 till 0 av totalt 0 rader",
+ "sInfoFiltered": "(filtrerade från totalt _MAX_ rader)",
+ "sInfoPostFix": "",
+ "sSearch": "Sök:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Första",
+ "sPrevious": "Föregående",
+ "sNext": "Nästa",
+ "sLast": "Sista"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/th.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/th.json
new file mode 100644
index 00000000..4562236d
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/th.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "à¸à¸³à¸¥à¸±à¸‡à¸”ำเนินà¸à¸²à¸£...",
+ "sLengthMenu": "à¹à¸ªà¸”ง_MENU_ à¹à¸–ว",
+ "sZeroRecords": "ไม่พบข้à¸à¸¡à¸¹à¸¥",
+ "sInfo": "à¹à¸ªà¸”ง _START_ ถึง _END_ จาภ_TOTAL_ à¹à¸–ว",
+ "sInfoEmpty": "à¹à¸ªà¸”ง 0 ถึง 0 จาภ0 à¹à¸–ว",
+ "sInfoFiltered": "(à¸à¸£à¸à¸‡à¸‚้à¸à¸¡à¸¹à¸¥ _MAX_ ทุà¸à¹à¸–ว)",
+ "sInfoPostFix": "",
+ "sSearch": "ค้นหา:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "เิริ่มต้น",
+ "sPrevious": "à¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²",
+ "sNext": "ถัดไป",
+ "sLast": "สุดท้าย"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/tr.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/tr.json
new file mode 100644
index 00000000..f60c433c
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/tr.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "İşleniyor...",
+ "sLengthMenu": "Sayfada _MENU_ Kayıt Göster",
+ "sZeroRecords": "Eşleşen Kayıt Bulunmadı",
+ "sInfo": " _TOTAL_ Kayıttan _START_ - _END_ Arası Kayıtlar",
+ "sInfoEmpty": "Kayıt Yok",
+ "sInfoFiltered": "( _MAX_ Kayıt İçerisinden Bulunan)",
+ "sInfoPostFix": "",
+ "sSearch": "Bul:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "İlk",
+ "sPrevious": "Önceki",
+ "sNext": "Sonraki",
+ "sLast": "Son"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/uk.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/uk.json
new file mode 100644
index 00000000..c5462616
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/uk.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Зачекайте...",
+ "sLengthMenu": "Показати _MENU_ запиÑів",
+ "sZeroRecords": "ЗапиÑи відÑутні.",
+ "sInfo": "ЗапиÑи з _START_ по _END_ із _TOTAL_ запиÑів",
+ "sInfoEmpty": "ЗапиÑи з 0 по 0 із 0 запиÑів",
+ "sInfoFiltered": "(відфільтровано з _MAX_ запиÑів)",
+ "sInfoPostFix": "",
+ "sSearch": "Пошук:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Перша",
+ "sPrevious": "ПопереднÑ",
+ "sNext": "ÐаÑтупна",
+ "sLast": "ОÑтаннÑ"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/ur.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/ur.json
new file mode 100644
index 00000000..9544366b
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/ur.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "ÛÛ’ جاري عملدرامد...",
+ "sLengthMenu": "Ø¯Ú©ÛØ§Ø¦ÙŠÙ† شقيں Ú©ÙŠ (_MENU_) ÙÛØ±Ø³Øª",
+ "sZeroRecords": "ملے Ù†ÛÙŠÚº Ù…ÙØ±ÙˆØ¶Ø§Øª جلتے ملتے کوئ",
+ "sInfo": "ÙÛØ±Ø³Øª Ú©ÙŠ تک _END_ سے _START_ سے ميں _TOTAL_ ÙÛØ±Ø³Øª پوري ÛÛ’ نظر پيش",
+ "sInfoEmpty": "ÙÛØ±Ø³Øª Ú©ÙŠ تک 0 سے 0 سے ميں 0 قل ÛÛ’ نظر پيشّ",
+ "sInfoFiltered": "(ÙÛØ±Ø³Øª Ûوئ چھني سے ميں _MAX_ قل)",
+ "sInfoPostFix": "",
+ "sSearch": "کرو تلاش:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Ù¾Ûلا",
+ "sPrevious": "Ù¾Ú†Ûلا",
+ "sNext": "اگلا",
+ "sLast": "آخري"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/vi.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/vi.json
new file mode 100644
index 00000000..932b9cf3
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/vi.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "Äang xá» lý...",
+ "sLengthMenu": "Xem _MENU_ mục",
+ "sZeroRecords": "Không tìm thấy dòng nà o phù hợp",
+ "sInfo": "Äang xem _START_ đến _END_ trong tổng số _TOTAL_ mục",
+ "sInfoEmpty": "Äang xem 0 đến 0 trong tổng số 0 mục",
+ "sInfoFiltered": "(được lá»c từ _MAX_ mục)",
+ "sInfoPostFix": "",
+ "sSearch": "Tìm:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "Äầu",
+ "sPrevious": "Trước",
+ "sNext": "Tiếp",
+ "sLast": "Cuối"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/zh.json b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/zh.json
new file mode 100644
index 00000000..9f410526
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/dt_i18n/zh.json
@@ -0,0 +1,17 @@
+{
+ "sProcessing": "处ç†ä¸...",
+ "sLengthMenu": "显示 _MENU_ 项结果",
+ "sZeroRecords": "没有匹é…结果",
+ "sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
+ "sInfoEmpty": "显示第 0 至 0 项结果,共 0 项",
+ "sInfoFiltered": "(由 _MAX_ 项结果过滤)",
+ "sInfoPostFix": "",
+ "sSearch": "æœç´¢:",
+ "sUrl": "",
+ "oPaginate": {
+ "sFirst": "首页",
+ "sPrevious": "上页",
+ "sNext": "下页",
+ "sLast": "末页"
+ }
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/export.php b/src/wp-content/plugins/contact-form-7-to-database-extension/export.php
new file mode 100644
index 00000000..fd318a26
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/export.php
@@ -0,0 +1,32 @@
+.
+*/
+
+/**
+ * @deprecated This file is deprecated as of version 1.8.
+ * But it remains here for backward compatibility with Excel IQuery and Google Live Data
+ * exports from older versions which reference this file directly via URL.
+ */
+
+include_once('../../../wp-load.php');
+require_wp_db();
+
+require_once('CF7DBPluginExporter.php');
+CF7DBPluginExporter::doExportFromPost();
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/exportCSV.php b/src/wp-content/plugins/contact-form-7-to-database-extension/exportCSV.php
new file mode 100644
index 00000000..1457bbd7
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/exportCSV.php
@@ -0,0 +1,23 @@
+.
+*/
+
+// Backward compatibility
+include('export.php');
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/help/GoogleEnterFormula.png b/src/wp-content/plugins/contact-form-7-to-database-extension/help/GoogleEnterFormula.png
new file mode 100644
index 00000000..c2252b92
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/help/GoogleEnterFormula.png differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/help/GoogleNewSS.png b/src/wp-content/plugins/contact-form-7-to-database-extension/help/GoogleNewSS.png
new file mode 100644
index 00000000..9df39e01
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/help/GoogleNewSS.png differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/help/GoogleOpenScriptEditor.png b/src/wp-content/plugins/contact-form-7-to-database-extension/help/GoogleOpenScriptEditor.png
new file mode 100644
index 00000000..9078bb62
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/help/GoogleOpenScriptEditor.png differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/help/GooglePasteScriptEditor.png b/src/wp-content/plugins/contact-form-7-to-database-extension/help/GooglePasteScriptEditor.png
new file mode 100644
index 00000000..6f09a63a
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/help/GooglePasteScriptEditor.png differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/help/GoogleSaveScriptEditor.png b/src/wp-content/plugins/contact-form-7-to-database-extension/help/GoogleSaveScriptEditor.png
new file mode 100644
index 00000000..6aac5ff8
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/help/GoogleSaveScriptEditor.png differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/jquery-ui/jquery-ui.css b/src/wp-content/plugins/contact-form-7-to-database-extension/jquery-ui/jquery-ui.css
new file mode 100644
index 00000000..2c14e9c4
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/jquery-ui/jquery-ui.css
@@ -0,0 +1,570 @@
+/*
+ * jQuery UI CSS Framework 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+/*
+ * jQuery UI Accordion 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Accordion#theming
+ */
+/* IE/Win - Fix animation bug - #4615 */
+.ui-accordion { width: 100%; }
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+.ui-accordion .ui-accordion-li-fix { display: inline; }
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
+.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
+.ui-accordion .ui-accordion-content-active { display: block; }/*
+ * jQuery UI Autocomplete 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete#theming
+ */
+.ui-autocomplete { position: absolute; cursor: default; }
+
+/* workarounds */
+* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
+
+/*
+ * jQuery UI Menu 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Menu#theming
+ */
+.ui-menu {
+ list-style:none;
+ padding: 2px;
+ margin: 0;
+ display:block;
+ float: left;
+}
+.ui-menu .ui-menu {
+ margin-top: -3px;
+}
+.ui-menu .ui-menu-item {
+ margin:0;
+ padding: 0;
+ zoom: 1;
+ float: left;
+ clear: left;
+ width: 100%;
+}
+.ui-menu .ui-menu-item a {
+ text-decoration:none;
+ display:block;
+ padding:.2em .4em;
+ line-height:1.5;
+ zoom:1;
+}
+.ui-menu .ui-menu-item a.ui-state-hover,
+.ui-menu .ui-menu-item a.ui-state-active {
+ font-weight: normal;
+ margin: -1px;
+}
+/*
+ * jQuery UI Button 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Button#theming
+ */
+.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
+.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
+button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
+.ui-button-icons-only { width: 3.4em; }
+button.ui-button-icons-only { width: 3.7em; }
+
+/*button text element */
+.ui-button .ui-button-text { display: block; line-height: 1.4; }
+.ui-button-text-only .ui-button-text { padding: .4em 1em; }
+.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
+.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
+.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
+.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+/* no icon support for input elements, provide padding by default */
+input.ui-button { padding: .4em 1em; }
+
+/*button icon element(s) */
+.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
+.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
+.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
+.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+
+/*button sets*/
+.ui-buttonset { margin-right: 7px; }
+.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+
+/* workarounds */
+button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+/*
+ * jQuery UI Datepicker 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker#theming
+ */
+.ui-datepicker { width: 17em; padding: .2em .2em 0; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+ display: none; /*sorry for IE5*/
+ display/**/: block; /*sorry for IE5*/
+ position: absolute; /*must have*/
+ z-index: -1; /*must have*/
+ filter: mask(); /*must have*/
+ top: -4px; /*must have*/
+ left: -4px; /*must have*/
+ width: 200px; /*must have*/
+ height: 200px; /*must have*/
+}/*
+ * jQuery UI Dialog 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog#theming
+ */
+.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
+.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; }
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
+.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
+/*
+ * jQuery UI Progressbar 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar#theming
+ */
+.ui-progressbar { height:2em; text-align: left; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/*
+ * jQuery UI Resizable 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizable#theming
+ */
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
+ * jQuery UI Selectable 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectable#theming
+ */
+.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
+/*
+ * jQuery UI Slider 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider#theming
+ */
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
+ * jQuery UI Tabs 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs#theming
+ */
+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
+/*
+ * jQuery UI CSS Framework 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; }
+.ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; }
+.ui-widget-content a { color: #222222/*{fcContent}*/; }
+.ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; }
+.ui-widget-header a { color: #222222/*{fcHeader}*/; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; }
+.ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; }
+.ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; }
+.ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; }
+.ui-corner-top { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; }
+.ui-corner-bottom { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; }
+.ui-corner-right { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; }
+.ui-corner-left { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; }
+.ui-corner-all { -moz-border-radius: 4px/*{cornerRadius}*/; -webkit-border-radius: 4px/*{cornerRadius}*/; border-radius: 4px/*{cornerRadius}*/; }
+
+/* Overlays */
+.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; }
+.ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; }
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/_README.txt b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/_README.txt
new file mode 100644
index 00000000..d16e3d2a
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/_README.txt
@@ -0,0 +1,27 @@
+Place language translation files in this directory (*.po and *.mo files).
+Translation files should be named following this convention:
+
+ contact-form-7-to-database-extension-ll_CC.po
+ contact-form-7-to-database-extension-ll_CC.mo
+
+Where:
+ "ll" is an ISO 639 two- or three-letter language code
+ http://www.gnu.org/software/autoconf/manual/gettext/Language-Codes.html#Language-Codes
+
+ "CC" is an ISO 3166 two-letter country code
+ http://www.gnu.org/software/autoconf/manual/gettext/Country-Codes.html#Country-Codes
+
+NOTE: Strings that decorate DataTable widgets use a different i18n file.
+Look at the file: dt_i18n/README.txt for more information
+
+How can I create a new translation file?
+- Download and install Poedit from http://www.poedit.net/
+- Run Poedit
+- "File" menu, "New catalog from POT file..." and open the file from this directory:
+ contact-form-7-to-database-extension.pot
+- Enter your translation for each string
+- Save
+- Rename the files to follow the convention above
+- Upload your files into this directory in your WordPress installation
+- ** Send your files to the Plugin author so he can share them with others
+ email: michael_d_simpson@gmail.com
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-cs_CZ.mo b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-cs_CZ.mo
new file mode 100644
index 00000000..b2684aed
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-cs_CZ.mo differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-cs_CZ.po b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-cs_CZ.po
new file mode 100644
index 00000000..471c33c0
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-cs_CZ.po
@@ -0,0 +1,277 @@
+# Copyright (C) 2011
+# This file is distributed under the same license as the package.
+msgid ""
+msgstr ""
+"Project-Id-Version: Contact Form 7 - database\n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/contact-form-7-to-database-extension\n"
+"POT-Creation-Date: 2011-02-25 21:50:57+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2011-03-03 20:47+0100\n"
+"Last-Translator: GG\n"
+"Language-Team: Ateliér Gadjukin \n"
+"X-Poedit-Language: Czech\n"
+
+#: CF7DBPlugin.php:49
+msgid "Can See Submission data"
+msgstr "Může vidět uložená data"
+
+#: CF7DBPlugin.php:51
+msgid "Can See Submission when using shortcodes"
+msgstr "Může vidět uložená data při použità zkratek"
+
+#: CF7DBPlugin.php:53
+msgid "Can Delete Submission data"
+msgstr "Může bymazat uložená data"
+
+#: CF7DBPlugin.php:55
+msgid "Use Javascript-enabled tables in Admin Database page"
+msgstr "PoužÃt Javascript"
+
+#: CF7DBPlugin.php:56
+msgid "Show line breaks in submitted data table"
+msgstr "Zobrazovat zalomenà řádku v datové tabulce"
+
+#: CF7DBPlugin.php:57
+msgid "Use Custom Date-Time Display Format (below)"
+msgstr "PoužÃt uživatelské zobrazenà datumu a Äasu (nÞe)"
+
+#: CF7DBPlugin.php:58
+msgid "Date-Time Display Format"
+msgstr "Formát zobrazenà datumu a Äasu"
+
+#: CF7DBPlugin.php:59
+msgid "Export URLs instead of file names for uploaded files"
+msgstr "Exportovat URL adresu mÃsto jména uplodovaného souboru"
+
+#: CF7DBPlugin.php:60
+msgid "Do not save fields in DB named (comma-separated list, no spaces)"
+msgstr "Neukládat pole do databáze (Äárkou oddÄ›lený seznam, bez mezer)"
+
+#: CF7DBPlugin.php:61
+msgid "Do not save forms in DB named (comma-separated list, no spaces)"
+msgstr "Neukládat formuláře do databáze (Äárkou oddÄ›lený seznam, bez mezer)"
+
+#: CF7DBPlugin.php:62
+msgid "Save Cookie Data with Form Submissions"
+msgstr "Uložit data cookie"
+
+#: CF7DBPlugin.php:63
+msgid "Save only cookies in DB named (comma-separated list, no spaces, and above option must be set to true)"
+msgstr "Uložit do databáze pouze cookies (Äárkou oddÄ›lený seznam, bez mezer, musà být povolena pÅ™edchozà volba)"
+
+#: CF7DBPlugin.php:71
+#: CF7DBOptionsManager.php:380
+msgid "true"
+msgstr "ano"
+
+#: CF7DBPlugin.php:73
+#: CF7DBOptionsManager.php:381
+msgid "false"
+msgstr "ne"
+
+#: CF7DBPlugin.php:76
+msgid "Administrator"
+msgstr "Administrátor"
+
+#: CF7DBPlugin.php:78
+msgid "Editor"
+msgstr "Redaktor"
+
+#: CF7DBPlugin.php:80
+msgid "Author"
+msgstr "Autor"
+
+#: CF7DBPlugin.php:82
+msgid "Contributor"
+msgstr "Přispěvatel"
+
+#: CF7DBPlugin.php:84
+msgid "Subscriber"
+msgstr "Odběratel"
+
+#: CF7DBPlugin.php:86
+msgid "Anyone"
+msgstr "kdokoliv"
+
+#: CF7DBPlugin.php:212
+#: CF7DBPlugin.php:232
+msgid "Database Options"
+msgstr "Volby databáze"
+
+#: CF7DBPlugin.php:230
+#: CF7DBPlugin.php:381
+msgid "Database"
+msgstr "Databáze"
+
+#: CF7DBPlugin.php:234
+msgid "FAQ"
+msgstr "FAQ"
+
+#: CF7DBPlugin.php:414
+msgid "Rate this Plugin"
+msgstr "Ohodnoťte tento plugin"
+
+#: CF7DBPlugin.php:420
+msgid "Documentation"
+msgstr "Dokumentace"
+
+#: CF7DBPlugin.php:426
+msgid "Support"
+msgstr "Podpora"
+
+#: CF7DBPlugin.php:442
+msgid "No form submissions in the database"
+msgstr "V databázi nenà žádný formulář"
+
+#: CF7DBPlugin.php:481
+msgid "* Select a form *"
+msgstr "* Vyberte formulář *"
+
+#: CF7DBPlugin.php:510
+msgid "Google Login for Upload"
+msgstr "Google pÅ™ihlášenà pro nahránÃ"
+
+#: CF7DBPlugin.php:519
+msgid "Cannot perform operation because jQuery is not loaded in this page"
+msgstr "Nelze vykonat tuto operaci, protože jQuery nenà na této stránce naÄteno"
+
+#: CF7DBPlugin.php:559
+msgid "Excel Internet Query"
+msgstr "Excel Internet Query"
+
+#: CF7DBPlugin.php:562
+msgid "Excel CSV (UTF8-BOM)"
+msgstr "Excel CSV (UTF8-BOM)"
+
+#: CF7DBPlugin.php:565
+msgid "Excel TSV (UTF16LE-BOM)"
+msgstr "Excel TSV (UTF16LE-BOM)"
+
+#: CF7DBPlugin.php:568
+msgid "Plain CSV (UTF-8)"
+msgstr "Prostý CSV (UTF-8)"
+
+#: CF7DBPlugin.php:571
+msgid "Google Spreadsheet"
+msgstr "Tabulka Google"
+
+#: CF7DBPlugin.php:574
+msgid "Google Spreadsheet Live Data"
+msgstr "Tabulka Google Live Data"
+
+#: CF7DBPlugin.php:577
+msgid "HTML"
+msgstr "HTML"
+
+#: CF7DBPlugin.php:580
+msgid "JSON"
+msgstr "JSON"
+
+#: CF7DBPlugin.php:584
+msgid "Export"
+msgstr "Exportovat"
+
+#: CF7DBPlugin.php:595
+msgid "Delete All This Form's Records"
+msgstr "Vymazat všechny záznamy tohoto formuláře"
+
+#: CF7DBPlugin.php:657
+msgid "Did you know: This plugin captures data from both these plugins:"
+msgstr "VÄ›dÄ›li jste, že: Tento plugin zÃskává data z obou tÄ›chto pluginů:"
+
+#: CF7DBPlugin.php:666
+msgid "Did you know: You can add this data to your posts and pages using these shortcodes:"
+msgstr "VÄ›dÄ›li jste, že: můžete pÅ™idat tato data do vaÅ¡ich pÅ™ÃspÄ›vků a stránek pomocà tÄ›chto zkratek:"
+
+#: CF7DBPlugin.php:677
+msgid "Would you like to help translate this plugin into your language?"
+msgstr "Chtěli byste pomoci s překladem tohoto pluginu do vašeho jazyka?"
+
+#: CF7DBPlugin.php:678
+msgid "How to create a translation"
+msgstr "Jak vytvořit překlad"
+
+#: CF7DBPlugin.php:702
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: CF7DBPlugin.php:704
+msgid "Upload"
+msgstr "Nahrát"
+
+#: ExportBase.php:125
+msgid "You do not have sufficient permissions to access this data."
+msgstr "Nemáte dostateÄná oprávnÄ›nà pÅ™Ãstupu k tÄ›mto datům."
+
+#: getFile.php:32
+#: CF7DBOptionsManager.php:278
+#: ExportToGoogleLiveData.php:30
+msgid "You do not have sufficient permissions to access this page."
+msgstr "Nemáte dostateÄná oprávnÄ›nà pro pÅ™Ãstup na tuto stránku."
+
+#: getFile.php:39
+msgid "Missing form parameters"
+msgstr "ChybÄ›jÃcà parametry formuláře"
+
+#: getFile.php:44
+msgid "No such file."
+msgstr "Žádný soubor"
+
+#: export.php:36
+msgid "Error: No \"form\" parameter submitted"
+msgstr "Chyba: Žádný parametr \"form\""
+
+#: CF7DBOptionsManager.php:296
+msgid "Settings"
+msgstr "NastavenÃ"
+
+#: CF7DBOptionsManager.php:321
+msgid "Save Changes"
+msgstr "Uložit změny"
+
+#: ExportToGoogleLiveData.php:166
+msgid "How to Set up Google Spreadsheet to pull data from WordPress"
+msgstr "Jak nastavit tabulky Google pro zÃskánà dat z WordPressu"
+
+#: CJ7DBCheckZendFramework.php:71
+msgid "Missing Zend Framework"
+msgstr "ChybÄ›jÃcà Zend Framework"
+
+#: ExportToGoogleSS.php:61
+msgid "Login Failed"
+msgstr "Přihlášenà selhalo"
+
+#: ExportToGoogleSS.php:100
+msgid "New Google Spreadsheet"
+msgstr "Nová Google tabulka"
+
+#: ExportToGoogleSS.php:109
+msgid "Error"
+msgstr "Chyba"
+
+#: contact-form-7-db.php:23
+msgid "Minimal version of PHP required: "
+msgstr "Minimálnà vyžadovaná verze PHP:"
+
+#: contact-form-7-db.php:24
+msgid "Your server's PHP version: "
+msgstr "Verze PHP vašeho serveru:"
+
+#: contact-form-7-db.php:27
+msgid "When using the Apache web server, typically you can configure it to use PHP5 by doing the following:"
+msgstr "PÅ™i použità webového serveru Apache, si obvykle můžete nakonfigurovat tak, aby použÃval PHP5 následujÃcÃm způsobem:"
+
+#: contact-form-7-db.php:29
+msgid "Locate and edit this file, located at the top directory of your WordPress installation: "
+msgstr "Vyhledejte a upravte tento soubor, který se nacházà v kořenovém adresáři instalace WordPress:"
+
+#: contact-form-7-db.php:31
+msgid "Add these two lines to the file:"
+msgstr "Přidat tyto dva řádky do souboru:"
+
+#: ExportToHtmlTable.php:135
+msgid "Delete"
+msgstr "Smazat"
+
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-es_ES.mo b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-es_ES.mo
new file mode 100644
index 00000000..8063f8ac
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-es_ES.mo differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-es_ES.po b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-es_ES.po
new file mode 100644
index 00000000..7bdc0543
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-es_ES.po
@@ -0,0 +1,276 @@
+# Copyright (C) 2011
+# This file is distributed under the same license as the package.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/contact-form-7-to-database-extension\n"
+"POT-Creation-Date: 2011-02-25 21:50:57+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2011-03-03 09:26-0500\n"
+"Last-Translator: manichooo \n"
+"Language-Team: \n"
+
+#: CF7DBPlugin.php:49
+msgid "Can See Submission data"
+msgstr "Puede ver los datos de comunicación"
+
+#: CF7DBPlugin.php:51
+msgid "Can See Submission when using shortcodes"
+msgstr "Pueden verse los datos enviados utilizando shortcodes"
+
+#: CF7DBPlugin.php:53
+msgid "Can Delete Submission data"
+msgstr "Puede eliminar la presentación de datos"
+
+#: CF7DBPlugin.php:55
+msgid "Use Javascript-enabled tables in Admin Database page"
+msgstr "Utilice tablas Javascript habilitadas en la página de administración de base de datos"
+
+#: CF7DBPlugin.php:56
+msgid "Show line breaks in submitted data table"
+msgstr "Mostrar saltos de lÃnea en los datos presentados en las tablas"
+
+#: CF7DBPlugin.php:57
+msgid "Use Custom Date-Time Display Format (below)"
+msgstr "Use formato personalizado de fecha y hora (abajo)"
+
+#: CF7DBPlugin.php:58
+msgid "Date-Time Display Format"
+msgstr "Formato de pantalla de Fecha y Hora "
+
+#: CF7DBPlugin.php:59
+msgid "Export URLs instead of file names for uploaded files"
+msgstr "Exportar direcciones URL en lugar de nombres de archivo para los archivos subidos"
+
+#: CF7DBPlugin.php:60
+msgid "Do not save fields in DB named (comma-separated list, no spaces)"
+msgstr "No guarde los campos u> en la base de datos con nombre (lista separada por comas, sin espacios)"
+
+#: CF7DBPlugin.php:61
+msgid "Do not save forms in DB named (comma-separated list, no spaces)"
+msgstr "No guarde los formularios u> en la base de datos con nombre (lista separada por comas, sin espacios)"
+
+#: CF7DBPlugin.php:62
+msgid "Save Cookie Data with Form Submissions"
+msgstr "Guardar datos de cookies con los envÃos de formularios"
+
+#: CF7DBPlugin.php:63
+msgid "Save only cookies in DB named (comma-separated list, no spaces, and above option must be set to true)"
+msgstr "Guardar sólo las cookies en la base de datos nombrada (lista separada por comas, sin espacios, y por encima de la opción debe establecerse en true)"
+
+#: CF7DBPlugin.php:71
+#: CF7DBOptionsManager.php:380
+msgid "true"
+msgstr "true"
+
+#: CF7DBPlugin.php:73
+#: CF7DBOptionsManager.php:381
+msgid "false"
+msgstr "false"
+
+#: CF7DBPlugin.php:76
+msgid "Administrator"
+msgstr "Administrador"
+
+#: CF7DBPlugin.php:78
+msgid "Editor"
+msgstr "Editor"
+
+#: CF7DBPlugin.php:80
+msgid "Author"
+msgstr "Autor"
+
+#: CF7DBPlugin.php:82
+msgid "Contributor"
+msgstr "Colaborador"
+
+#: CF7DBPlugin.php:84
+msgid "Subscriber"
+msgstr "Suscriptor"
+
+#: CF7DBPlugin.php:86
+msgid "Anyone"
+msgstr "Cualquiera"
+
+#: CF7DBPlugin.php:212
+#: CF7DBPlugin.php:232
+msgid "Database Options"
+msgstr "Opciones"
+
+#: CF7DBPlugin.php:230
+#: CF7DBPlugin.php:381
+msgid "Database"
+msgstr "Base de datos"
+
+#: CF7DBPlugin.php:234
+msgid "FAQ"
+msgstr "FAQ"
+
+#: CF7DBPlugin.php:414
+msgid "Rate this Plugin"
+msgstr "Califica este Plugin"
+
+#: CF7DBPlugin.php:420
+msgid "Documentation"
+msgstr "Documentación"
+
+#: CF7DBPlugin.php:426
+msgid "Support"
+msgstr "Soporte"
+
+#: CF7DBPlugin.php:442
+msgid "No form submissions in the database"
+msgstr "No hay envÃos de formularios en la base de datos"
+
+#: CF7DBPlugin.php:481
+msgid "* Select a form *"
+msgstr "* Seleccione un formulario*"
+
+#: CF7DBPlugin.php:510
+msgid "Google Login for Upload"
+msgstr "Login Google para cargas"
+
+#: CF7DBPlugin.php:519
+msgid "Cannot perform operation because jQuery is not loaded in this page"
+msgstr "No se puede realizar la operación porque jQuery no está cargado en esta página"
+
+#: CF7DBPlugin.php:559
+msgid "Excel Internet Query"
+msgstr "Excel Internet Query"
+
+#: CF7DBPlugin.php:562
+msgid "Excel CSV (UTF8-BOM)"
+msgstr "Excel CSV (UTF8-BOM)"
+
+#: CF7DBPlugin.php:565
+msgid "Excel TSV (UTF16LE-BOM)"
+msgstr "Excel TSV (UTF16LE-BOM)"
+
+#: CF7DBPlugin.php:568
+msgid "Plain CSV (UTF-8)"
+msgstr "Archivo Plano CSV (UTF-8)"
+
+#: CF7DBPlugin.php:571
+msgid "Google Spreadsheet"
+msgstr "Hoja de cálculo de datos de Google"
+
+#: CF7DBPlugin.php:574
+msgid "Google Spreadsheet Live Data"
+msgstr "Hoja de cálculo de datos de Google en vivo"
+
+#: CF7DBPlugin.php:577
+msgid "HTML"
+msgstr "HTML"
+
+#: CF7DBPlugin.php:580
+msgid "JSON"
+msgstr "JSON"
+
+#: CF7DBPlugin.php:584
+msgid "Export"
+msgstr "Exportar"
+
+#: CF7DBPlugin.php:595
+msgid "Delete All This Form's Records"
+msgstr "Eliminar todos los registros de este formulario"
+
+#: CF7DBPlugin.php:657
+msgid "Did you know: This plugin captures data from both these plugins:"
+msgstr "¿SabÃa usted que: Este plugin captura de datos de estos dos plugins:"
+
+#: CF7DBPlugin.php:666
+msgid "Did you know: You can add this data to your posts and pages using these shortcodes:"
+msgstr "¿SabÃa usted: Usted puede agregar esta información a tus mensajes y las páginas con estos shortcodes:"
+
+#: CF7DBPlugin.php:677
+msgid "Would you like to help translate this plugin into your language?"
+msgstr "¿Le gustarÃa ayudar a traducir este plugin en su idioma?"
+
+#: CF7DBPlugin.php:678
+msgid "How to create a translation"
+msgstr "Cómo crear una traducción"
+
+#: CF7DBPlugin.php:702
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: CF7DBPlugin.php:704
+msgid "Upload"
+msgstr "Cargar."
+
+#: ExportBase.php:125
+msgid "You do not have sufficient permissions to access this data."
+msgstr "Usted no tiene permisos suficientes para acceder a estos datos."
+
+#: getFile.php:32
+#: CF7DBOptionsManager.php:278
+#: ExportToGoogleLiveData.php:30
+msgid "You do not have sufficient permissions to access this page."
+msgstr "Usted no tiene permisos suficientes para acceder a esta página."
+
+#: getFile.php:39
+msgid "Missing form parameters"
+msgstr "Falta de parámetros de formulario"
+
+#: getFile.php:44
+msgid "No such file."
+msgstr "No existe el fichero."
+
+#: export.php:36
+msgid "Error: No \"form\" parameter submitted"
+msgstr "Error: No hay parametros enviados en \"form \" "
+
+#: CF7DBOptionsManager.php:296
+msgid "Settings"
+msgstr "Configuración"
+
+#: CF7DBOptionsManager.php:321
+msgid "Save Changes"
+msgstr "Guardar cambios"
+
+#: ExportToGoogleLiveData.php:166
+msgid "How to Set up Google Spreadsheet to pull data from WordPress"
+msgstr "Cómo configurar la hoja de cálculo de Google para extraer datos de WordPress"
+
+#: CJ7DBCheckZendFramework.php:71
+msgid "Missing Zend Framework"
+msgstr "Falta de Zend Framework"
+
+#: ExportToGoogleSS.php:61
+msgid "Login Failed"
+msgstr "No se pudo acceder"
+
+#: ExportToGoogleSS.php:100
+msgid "New Google Spreadsheet"
+msgstr "Nueva hoja de cálculo de Google"
+
+#: ExportToGoogleSS.php:109
+msgid "Error"
+msgstr "Error"
+
+#: contact-form-7-db.php:23
+msgid "Minimal version of PHP required: "
+msgstr "Versión de PHP mÃnima requerida:"
+
+#: contact-form-7-db.php:24
+msgid "Your server's PHP version: "
+msgstr "Su versión de PHP en el servidor:"
+
+#: contact-form-7-db.php:27
+msgid "When using the Apache web server, typically you can configure it to use PHP5 by doing the following:"
+msgstr "Cuando se utiliza el servidor web Apache, por lo general usted puede configurarlo para usar PHP5 de la siguiente manera:"
+
+#: contact-form-7-db.php:29
+msgid "Locate and edit this file, located at the top directory of your WordPress installation: "
+msgstr "Localizar y editar este archivo, situado en el directorio principal de su instalación de WordPress:"
+
+#: contact-form-7-db.php:31
+msgid "Add these two lines to the file:"
+msgstr "Añade estas dos lÃneas al archivo:"
+
+#: ExportToHtmlTable.php:135
+msgid "Delete"
+msgstr "Borrar"
+
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-fr_FR.mo b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-fr_FR.mo
new file mode 100644
index 00000000..ebe118e6
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-fr_FR.mo differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-fr_FR.po b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-fr_FR.po
new file mode 100644
index 00000000..c90d3396
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-fr_FR.po
@@ -0,0 +1,246 @@
+# Copyright (C) 2011
+# This file is distributed under the same license as the package.
+msgid ""
+msgstr ""
+"Project-Id-Version: Contact-form-7-to-database-extension\n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/contact-form-7-to-database-extension\n"
+"POT-Creation-Date: 2011-02-12 12:49:58+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2011-02-22 09:50-0500\n"
+"Last-Translator: Ducktape \n"
+"Language-Team: LANGUAGE \n"
+"X-Poedit-Language: French\n"
+"X-Poedit-Country: CANADA\n"
+
+#: contact-form-7-db.php:23
+msgid "Minimal version of PHP required: "
+msgstr "Version minimale de PHP requise :"
+
+#: contact-form-7-db.php:24
+msgid "Your server's PHP version: "
+msgstr "La version de votre serveur PHP :"
+
+#: contact-form-7-db.php:27
+msgid "When using the Apache web server, typically you can configure it to use PHP5 by doing the following:"
+msgstr "Pour utiliser PHP5, vous pouvez configurer votre serveur Apache de la façon suivante :"
+
+#: contact-form-7-db.php:29
+msgid "Locate and edit this file, located at the top directory of your WordPress installation: "
+msgstr "Localiser et modifier ce fichier situer dans le répertoire racine de votre installation Wordpress :"
+
+#: contact-form-7-db.php:31
+msgid "Add these two lines to the file:"
+msgstr "Ajouter ces deux lignes à votre fichier :"
+
+#: ExportToJson.php:69
+#: CF7DBOptionsManager.php:278
+#: ExportToCsvUtf16le.php:32
+#: ExportToGoogleLiveData.php:29
+#: ExportToCsvUtf8.php:42
+#: ExportToGoogleSS.php:34
+#: ExportToHtmlTable.php:122
+#: ExportToValue.php:60
+#: getFile.php:32
+msgid "You do not have sufficient permissions to access this page."
+msgstr "Vous n'avez pas les autorisations requisent pour accéder à cette page."
+
+#: CJ7DBCheckZendFramework.php:70
+msgid "Missing Zend Framework"
+msgstr "Le « Zend Framework » est absent."
+
+#: CF7DBOptionsManager.php:296
+msgid "Settings"
+msgstr "Réglages"
+
+#: CF7DBOptionsManager.php:321
+msgid "Save Changes"
+msgstr "Enregistrement"
+
+#: CF7DBOptionsManager.php:380
+#: CF7DBPlugin.php:71
+msgid "true"
+msgstr "vrai"
+
+#: CF7DBOptionsManager.php:381
+#: CF7DBPlugin.php:73
+msgid "false"
+msgstr "faux"
+
+#: ExportToCsvUtf16le.php:50
+#: ExportToCsvUtf8.php:62
+msgid "Submitted"
+msgstr "Soumis"
+
+#: ExportToGoogleLiveData.php:164
+msgid "How to Set up Google Spreadsheet to pull data from WordPress"
+msgstr "Comment régler le « Tableur Google » pour récupérer les données de Wordpress"
+
+#: ExportToGoogleSS.php:64
+msgid "Login Failed"
+msgstr "Échec de la connexion"
+
+#: ExportToGoogleSS.php:100
+msgid "New Google Spreadsheet"
+msgstr "Nouveau « Tableur Google »"
+
+#: ExportToGoogleSS.php:109
+msgid "Error"
+msgstr "Erreur"
+
+#: ExportToHtmlTable.php:234
+msgid "Delete"
+msgstr "Supprimer"
+
+#: CF7DBPlugin.php:49
+msgid "Can See Submission data"
+msgstr "Données de « Soumission » en vue"
+
+#: CF7DBPlugin.php:51
+msgid "Can See Submission when using shortcodes"
+msgstr "Données de « Soumission » en vue lorsque « Shortcodes » sont utilisés"
+
+#: CF7DBPlugin.php:53
+msgid "Can Delete Submission data"
+msgstr "Peu effacer les données de « Soumission »"
+
+#: CF7DBPlugin.php:55
+msgid "Use Javascript-enabled tables in Admin Database page"
+msgstr "Utilisation de « JavaScript » pour activer les tables de la page de données Admin"
+
+#: CF7DBPlugin.php:56
+msgid "Show line breaks in submitted data table"
+msgstr "Afficher le retour de charriot dans les tables « Données de Soumission »"
+
+#: CF7DBPlugin.php:57
+msgid "Use Custom Date-Time Display Format (below)"
+msgstr "Utiliser le format d'affichage personnalisé Dates / Heures (ci-dessus)"
+
+#: CF7DBPlugin.php:58
+msgid "Date-Time Display Format"
+msgstr "Format d'affichage Dates / Heures"
+
+#: CF7DBPlugin.php:59
+msgid "Export URLs instead of file names for uploaded files"
+msgstr "Exporation des URLs au lieu des noms de fichier pour le téléchargement"
+
+# in DB named = ???
+#: CF7DBPlugin.php:60
+#, fuzzy
+msgid "Do not save fields in DB named (comma-separated list, no spaces)"
+msgstr "Ne pas enregistrer champs dans la base de données (liste séparée par des virgules, sans espaces)"
+
+# in DB named = ???
+#: CF7DBPlugin.php:61
+#, fuzzy
+msgid "Do not save forms in DB named (comma-separated list, no spaces)"
+msgstr "Ne pas enregistrer formulaire dans la base de données (liste séparée par des virgules, sans espaces)"
+
+#: CF7DBPlugin.php:62
+msgid "Save Cookie Data with Form Submissions"
+msgstr "Enregistrement des données « Cookie » avec le formulaire"
+
+# in DB named = ???
+#: CF7DBPlugin.php:63
+#, fuzzy
+msgid "Save only cookies in DB named (comma-separated list, no spaces, and above option must be set to true)"
+msgstr "Enregistrement des « Cookie » dans la base de données (liste séparée par des virgules, sans espaces, et les réglages ci-dessus doivent être définie à VRAI)"
+
+#: CF7DBPlugin.php:76
+msgid "Administrator"
+msgstr "Administrateur"
+
+#: CF7DBPlugin.php:78
+msgid "Editor"
+msgstr "Éditeur"
+
+#: CF7DBPlugin.php:80
+msgid "Author"
+msgstr "Auteur"
+
+#: CF7DBPlugin.php:82
+msgid "Contributor"
+msgstr "Contributeur"
+
+#: CF7DBPlugin.php:84
+msgid "Subscriber"
+msgstr "Abonné"
+
+# Anonymous
+#: CF7DBPlugin.php:86
+#, fuzzy
+msgid "Anyone"
+msgstr "Anonyme"
+
+#: CF7DBPlugin.php:212
+#: CF7DBPlugin.php:232
+msgid "Database Options"
+msgstr "Options de la base de données"
+
+#: CF7DBPlugin.php:230
+#: CF7DBPlugin.php:381
+msgid "Database"
+msgstr "Base de données"
+
+#: CF7DBPlugin.php:234
+#: CF7DBPlugin.php:420
+msgid "FAQ"
+msgstr "FAQ"
+
+#: CF7DBPlugin.php:414
+msgid "Rate this Plugin"
+msgstr "Évalué ce « PlugIn »"
+
+#: CF7DBPlugin.php:426
+msgid "Support"
+msgstr "Support"
+
+#: CF7DBPlugin.php:440
+msgid "No form submissions in the database"
+msgstr "Pas de formulaire dans cette base de données"
+
+#: CF7DBPlugin.php:495
+msgid "Google Login for Upload"
+msgstr "Connextion « Google » requis pour téléchargement"
+
+#: CF7DBPlugin.php:504
+msgid "Cannot perform operation because jQuery is not loaded in this page"
+msgstr "Opération impossible car « jQuery » n'est pas en fonction dans cette page"
+
+#: CF7DBPlugin.php:543
+msgid "Export"
+msgstr "Exportation"
+
+#: CF7DBPlugin.php:553
+msgid "Delete All This Form's Records"
+msgstr "Effacer tous les enregistrements de ce formulaire"
+
+#: CF7DBPlugin.php:611
+msgid "Did you know: This plugin captures data from both these plugins:"
+msgstr "Saviez-vous que : Ce « PlugIn » utilise les deux utilitaires suivants :"
+
+#: CF7DBPlugin.php:620
+msgid "Did you know: You can add this data to your posts and pages using these shortcodes:"
+msgstr "Saviez-vous que : Vous pouvez ajouter des données à vos messages / pages en utilisant les « ShortCodes » suivants :"
+
+#: CF7DBPlugin.php:645
+msgid "Cancel"
+msgstr "Annuler"
+
+#: CF7DBPlugin.php:647
+msgid "Upload"
+msgstr "Télécharger"
+
+#: getFile.php:39
+msgid "Missing form parameters"
+msgstr "Paramètres de formulaire absent"
+
+#: getFile.php:44
+msgid "No such file."
+msgstr "Fichier absent"
+
+#: CFDBShortCodeLoaderSecurityCheck.php:34
+msgid "Insufficient privileges to display data from form: "
+msgstr "Privilèges insuffisants pour afficher le formulaire de données"
+
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-he_IL.mo b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-he_IL.mo
new file mode 100644
index 00000000..577da6a3
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-he_IL.mo differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-he_IL.po b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-he_IL.po
new file mode 100644
index 00000000..039d3e16
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-he_IL.po
@@ -0,0 +1,279 @@
+# Copyright (C) 2011
+# This file is distributed under the same license as the package.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/contact-form-7-to-database-extension\n"
+"POT-Creation-Date: 2011-02-25 21:50:57+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2011-03-16 14:51+0200\n"
+"Last-Translator: מוטי מליקוב \n"
+"Language-Team: http://www.xhost.co.il \n"
+"X-Poedit-Language: Hebrew\n"
+"X-Poedit-Country: ISRAEL\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: CF7DBPlugin.php:49
+msgid "Can See Submission data"
+msgstr "× ×™×ª×Ÿ לר×ות × ×ª×•× ×™ רישו×"
+
+#: CF7DBPlugin.php:51
+msgid "Can See Submission when using shortcodes"
+msgstr "× ×™×ª×Ÿ לר×ות הודעות ×©× ×©×œ×—×• ×›×שר ×ž×©×ª×ž×©×™× ×‘×§×•×“ מקוצר"
+
+#: CF7DBPlugin.php:53
+msgid "Can Delete Submission data"
+msgstr "× ×™×ª×Ÿ למחוק × ×ª×•× ×™ רישו×"
+
+#: CF7DBPlugin.php:55
+msgid "Use Javascript-enabled tables in Admin Database page"
+msgstr "השתמש ב-Javascript-enabled tables בדף × ×™×”×•×œ בסיס ×”× ×ª×•× ×™×"
+
+#: CF7DBPlugin.php:56
+msgid "Show line breaks in submitted data table"
+msgstr "הצג שבירת שורה בשליחת טבל×ות × ×ª×•× ×™×"
+
+#: CF7DBPlugin.php:57
+msgid "Use Custom Date-Time Display Format (below)"
+msgstr "השתמש בתצוגת ת×ריך ושעה מות×מת ×ישית (ר××” להלן)"
+
+#: CF7DBPlugin.php:58
+msgid "Date-Time Display Format"
+msgstr "ת×ריך "
+
+#: CF7DBPlugin.php:59
+msgid "Export URLs instead of file names for uploaded files"
+msgstr "×™×¦× ×›×ª×•×‘×•×ª URL ×‘×ž×§×•× ×©× ×”×§×•×‘×¥ בהעל×ת קבצי×"
+
+#: CF7DBPlugin.php:60
+msgid "Do not save fields in DB named (comma-separated list, no spaces)"
+msgstr "×ל תשמור שדות ×”× ×ž×¦××™× ×‘-× ×ª×•× ×™× ×›×©×ž×•×ª בבסיס ×”× ×ª×•× ×™× (מתייחס לרשימה המופרדת בפסיקי×, בלי רווחי×)"
+
+#: CF7DBPlugin.php:61
+msgid "Do not save forms in DB named (comma-separated list, no spaces)"
+msgstr "×ל תשמור שדות ×”× ×ž×¦××™× ×‘-×˜×¤×¡×™× ×›×©×ž×•×ª בבסיס ×”× ×ª×•× ×™× (מתייחס לרשימה המופרדת בפסיקי×, בלי רווחי×)"
+
+#: CF7DBPlugin.php:62
+msgid "Save Cookie Data with Form Submissions"
+msgstr "שמור × ×ª×•× ×™ \"עוגיות\" בשליחת הטופס"
+
+#: CF7DBPlugin.php:63
+msgid "Save only cookies in DB named (comma-separated list, no spaces, and above option must be set to true)"
+msgstr "שמור × ×ª×•× ×™ \"עוגיות\" כשמות בבסיס ×”× ×ª×•× ×™× (מתייחס לרשימה המופרדת בפסיקי×, בלי רווחי×, ×”×ופציה לעיל חייבת להיות מסומת על \"×מת\")"
+
+#: CF7DBPlugin.php:71
+#: CF7DBOptionsManager.php:380
+msgid "true"
+msgstr "×מת"
+
+#: CF7DBPlugin.php:73
+#: CF7DBOptionsManager.php:381
+msgid "false"
+msgstr "שקר"
+
+#: CF7DBPlugin.php:76
+msgid "Administrator"
+msgstr "×ž× ×”×œ"
+
+#: CF7DBPlugin.php:78
+msgid "Editor"
+msgstr "עורך"
+
+#: CF7DBPlugin.php:80
+msgid "Author"
+msgstr "כותב"
+
+#: CF7DBPlugin.php:82
+msgid "Contributor"
+msgstr "תור×"
+
+#: CF7DBPlugin.php:84
+msgid "Subscriber"
+msgstr "×ž× ×•×™"
+
+#: CF7DBPlugin.php:86
+msgid "Anyone"
+msgstr "מישהו"
+
+#: CF7DBPlugin.php:212
+#: CF7DBPlugin.php:232
+msgid "Database Options"
+msgstr "×פשרויות בסיס מידע"
+
+#: CF7DBPlugin.php:230
+#: CF7DBPlugin.php:381
+msgid "Database"
+msgstr "בסיס מידע"
+
+#: CF7DBPlugin.php:234
+msgid "FAQ"
+msgstr "ש×לות ותשובות"
+
+#: CF7DBPlugin.php:414
+msgid "Rate this Plugin"
+msgstr "דרג ×ת התוסף ×”×–×”"
+
+#: CF7DBPlugin.php:420
+msgid "Documentation"
+msgstr "×“×•×§×•×ž× ×˜×¦×™×”"
+
+#: CF7DBPlugin.php:426
+msgid "Support"
+msgstr "תמיכה"
+
+#: CF7DBPlugin.php:442
+msgid "No form submissions in the database"
+msgstr "×œ× ×”×•×’×©×• טפסי×"
+
+#: CF7DBPlugin.php:481
+msgid "* Select a form *"
+msgstr "בחר טופס"
+
+#: CF7DBPlugin.php:510
+msgid "Google Login for Upload"
+msgstr "התחבר ל google להעל××”"
+
+#: CF7DBPlugin.php:519
+msgid "Cannot perform operation because jQuery is not loaded in this page"
+msgstr "×œ× × ×™×ª×Ÿ לבצע ×ת הפעולה, jQuery ×œ× × ×˜×¢×Ÿ בדף ×–×”"
+
+#: CF7DBPlugin.php:559
+msgid "Excel Internet Query"
+msgstr "ש×ילתות ×קסל ל××™× ×˜×¨× ×˜"
+
+#: CF7DBPlugin.php:562
+msgid "Excel CSV (UTF8-BOM)"
+msgstr "Excel CSV (UTF8-BOM)"
+
+#: CF7DBPlugin.php:565
+msgid "Excel TSV (UTF16LE-BOM)"
+msgstr "Excel TSV (UTF16LE-BOM)"
+
+#: CF7DBPlugin.php:568
+msgid "Plain CSV (UTF-8)"
+msgstr "CSV פשוט - UTF-8"
+
+#: CF7DBPlugin.php:571
+msgid "Google Spreadsheet"
+msgstr "מסמך גוגל"
+
+#: CF7DBPlugin.php:574
+msgid "Google Spreadsheet Live Data"
+msgstr "× ×ª×•× ×™× ×¢×“×›× ×™×™× ×ž×ž×¡×ž×š גוגל"
+
+#: CF7DBPlugin.php:577
+msgid "HTML"
+msgstr "HTML"
+
+#: CF7DBPlugin.php:580
+msgid "JSON"
+msgstr "JSON"
+
+#: CF7DBPlugin.php:584
+msgid "Export"
+msgstr "יצו×"
+
+#: CF7DBPlugin.php:595
+msgid "Delete All This Form's Records"
+msgstr "מחק ×ת כל ×”×˜×¤×¡×™× "
+
+#: CF7DBPlugin.php:657
+msgid "Did you know: This plugin captures data from both these plugins:"
+msgstr "×”×× ×™×“×¢×ª: התוסף ×”× \"ל לוכד × ×ª×•× ×™× ×ž×©× ×™ ×”×ª×•×¡×¤×™× ×”×œ×œ×•"
+
+#: CF7DBPlugin.php:666
+msgid "Did you know: You can add this data to your posts and pages using these shortcodes:"
+msgstr "×”×× ×™×“×¢×ª: ×תה יכול להוסיף ×ת המידע ×œ×¤×¨×¡×•×ž×™× ×•×œ×“×¤×™× ×©×œ×š ב×מצעות קוד מקוצר ×–×”"
+
+#: CF7DBPlugin.php:677
+msgid "Would you like to help translate this plugin into your language?"
+msgstr "×”×× ×ª×¨×¦×” ×œ×ª×¨×’× ×ת התוסף לשפה שלך?"
+
+#: CF7DBPlugin.php:678
+msgid "How to create a translation"
+msgstr "כיצד ליצור תרגו×"
+
+#: CF7DBPlugin.php:702
+msgid "Cancel"
+msgstr "בטל"
+
+#: CF7DBPlugin.php:704
+msgid "Upload"
+msgstr "העל××”"
+
+#: ExportBase.php:125
+msgid "You do not have sufficient permissions to access this data."
+msgstr "×ין לך הרש×ות מת×ימות לגשת לקבצי מידע ×לה"
+
+#: getFile.php:32
+#: CF7DBOptionsManager.php:278
+#: ExportToGoogleLiveData.php:30
+msgid "You do not have sufficient permissions to access this page."
+msgstr "×ין לך הרש×ות מת×ימות לגשת לדף ×–×”"
+
+#: getFile.php:39
+msgid "Missing form parameters"
+msgstr "×œ× × ×ž×¦× ×‘×¤×¨×ž×˜×¨×™×"
+
+#: getFile.php:44
+msgid "No such file."
+msgstr "×œ× ×§×™×™× ×§×•×‘×¥"
+
+#: export.php:36
+msgid "Error: No \"form\" parameter submitted"
+msgstr "שגי××”: ×ין ×¤×¨×ž×˜×¨×™× \"form\""
+
+#: CF7DBOptionsManager.php:296
+msgid "Settings"
+msgstr "הגדרות"
+
+#: CF7DBOptionsManager.php:321
+msgid "Save Changes"
+msgstr "שמור ×©×™× ×•×™×™×"
+
+#: ExportToGoogleLiveData.php:166
+msgid "How to Set up Google Spreadsheet to pull data from WordPress"
+msgstr "×יך להגדיר למסמכי גוגל למשוך מידע מוורדפרס"
+
+#: CJ7DBCheckZendFramework.php:71
+msgid "Missing Zend Framework"
+msgstr "Zend Framework ×œ× × ×ž×¦×"
+
+#: ExportToGoogleSS.php:61
+msgid "Login Failed"
+msgstr "התחברות × ×›×©×œ×”"
+
+#: ExportToGoogleSS.php:100
+msgid "New Google Spreadsheet"
+msgstr "מסמך גוגל חדש"
+
+#: ExportToGoogleSS.php:109
+msgid "Error"
+msgstr "שגי××”"
+
+#: contact-form-7-db.php:23
+msgid "Minimal version of PHP required: "
+msgstr "גרסה ×ž×™× ×™×ž×œ×™×ª של PHP × ×“×¨×©×ª"
+
+#: contact-form-7-db.php:24
+msgid "Your server's PHP version: "
+msgstr "על השרת ×ž×•×ª×§× ×ª גרסת PHP:"
+
+#: contact-form-7-db.php:27
+msgid "When using the Apache web server, typically you can configure it to use PHP5 by doing the following:"
+msgstr "×›×שר ×ž×©×ª×ž×©×™× ×‘×©×¨×ª Apache , × ×™×ª×Ÿ להגדיר שימוש ב PHP5 ב×מצעות:"
+
+#: contact-form-7-db.php:29
+msgid "Locate and edit this file, located at the top directory of your WordPress installation: "
+msgstr "×תר וערוך קובץ ×–×”, × ×ž×¦× ×‘×¨×ש ספריית ×”×”×ª×§× ×” של וורדפרס"
+
+#: contact-form-7-db.php:31
+msgid "Add these two lines to the file:"
+msgstr "הוסף שורות ×לה לקובץ:"
+
+#: ExportToHtmlTable.php:135
+msgid "Delete"
+msgstr "מחק"
+
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-it_IT.mo b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-it_IT.mo
new file mode 100644
index 00000000..934592f3
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-it_IT.mo differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-it_IT.po b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-it_IT.po
new file mode 100644
index 00000000..07dfd6e2
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-it_IT.po
@@ -0,0 +1,426 @@
+# Copyright (C) 2011
+# This file is distributed under the same license as the package.
+msgid ""
+msgstr ""
+"Project-Id-Version: Contact Form 7 to Database Extension in italiano\n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/contact-form-7-to-database-extension\n"
+"POT-Creation-Date: 2011-05-25 20:54:01+00:00\n"
+"PO-Revision-Date: 2011-05-27 08:49+0100\n"
+"Last-Translator: Gianni Diurno (aka gidibao) \n"
+"Language-Team: Gianni Diurno | gidibao.net\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Italian\n"
+"X-Poedit-Country: ITALY\n"
+
+#: CFDBView.php:63
+msgid "Rate this Plugin"
+msgstr "Vota il plugin"
+
+#: CFDBView.php:69
+#: CFDBViewShortCodeBuilder.php:63
+#: CFDBViewShortCodeBuilder.php:522
+msgid "Documentation"
+msgstr "Documentazione"
+
+#: CFDBView.php:75
+msgid "Support"
+msgstr "Supporto"
+
+#: CFDBView.php:81
+msgid "Privacy Policy"
+msgstr "Privacy Policy"
+
+#: CF7DBPluginExporter.php:33
+msgid "Error: No \"form\" parameter submitted"
+msgstr "Errore: nessun parametro \"form\" inserito"
+
+#: contact-form-7-db.php:21
+msgid "Error: Contact Form to DB Plugin requires a newer version of PHP to be running."
+msgstr "Errore: il plugin Contact Form to DB per potere funzionare richiede una nuova versione PHP."
+
+#: contact-form-7-db.php:23
+msgid "Minimal version of PHP required: "
+msgstr "Versione minima PHP richiesta:"
+
+#: contact-form-7-db.php:24
+msgid "Your server's PHP version: "
+msgstr "La versione PHP del tuo server:"
+
+#: contact-form-7-db.php:27
+msgid "When using the Apache web server, typically you can configure it to use PHP5 by doing the following:"
+msgstr "Facessi uso di un web server Apache, puoi configurarlo a PHP5 facendo quanto segue:"
+
+#: contact-form-7-db.php:29
+msgid "Locate and edit this file, located at the top directory of your WordPress installation: "
+msgstr "Individua e modifica questo file allocato nella cartella principale della tua installazione WordPress: "
+
+#: contact-form-7-db.php:31
+msgid "Add these two lines to the file:"
+msgstr "Aggiungi al file queste due righe:"
+
+#: CJ7DBCheckZendFramework.php:72
+msgid "Missing Zend Framework"
+msgstr "Manca il Zend Framework"
+
+#: ExportBase.php:177
+msgid "You do not have sufficient permissions to access this data."
+msgstr "Non hai i permessi necessari per potere accedere a questo dato."
+
+#: CFDBShortcodeExportUrl.php:62
+#: CFDBViewWhatsInDB.php:212
+msgid "Export"
+msgstr "Esporta"
+
+#: CF7DBOptionsManager.php:278
+#: CF7DBPlugin.php:276
+#: ExportToGoogleLiveData.php:31
+msgid "You do not have sufficient permissions to access this page."
+msgstr "Non hai i permessi necessari per potere accedere a questa pagina."
+
+#: CF7DBOptionsManager.php:296
+msgid "System Settings"
+msgstr "Impostazini sistema"
+
+#: CF7DBOptionsManager.php:298
+msgid "System"
+msgstr "Sistema"
+
+#: CF7DBOptionsManager.php:299
+msgid "PHP Version"
+msgstr "Versione PHP"
+
+#: CF7DBOptionsManager.php:300
+msgid "MySQL Version"
+msgstr "Versione MySQL"
+
+#: CF7DBOptionsManager.php:303
+msgid "Settings"
+msgstr "Impostazioni"
+
+#: CF7DBOptionsManager.php:328
+msgid "Save Changes"
+msgstr "Salva le modifiche"
+
+#: CF7DBOptionsManager.php:387
+#: CF7DBPlugin.php:76
+msgid "true"
+msgstr "sì"
+
+#: CF7DBOptionsManager.php:388
+#: CF7DBPlugin.php:78
+msgid "false"
+msgstr "no"
+
+#: CF7DBPlugin.php:48
+msgid "I have donated to this plugin"
+msgstr "Ho donato per questo plugin"
+
+#: CF7DBPlugin.php:49
+msgid "Capture form submissions from Contact Form 7 Plugin"
+msgstr "Preleva i dati dal plugin Contact Form 7"
+
+#: CF7DBPlugin.php:50
+msgid "Capture form submissions Fast Secure Contact Form Plugin"
+msgstr "Preleva i dati dal plugin Fast Secure Contact Form"
+
+#: CF7DBPlugin.php:51
+msgid "Can See Submission data"
+msgstr "Può vedere i dati"
+
+#: CF7DBPlugin.php:53
+msgid "Can See Submission when using shortcodes"
+msgstr "Può vedere i dati (via shortcode)"
+
+#: CF7DBPlugin.php:55
+msgid "Can Edit/Delete Submission data"
+msgstr "Può Modificare/Cancellare i dati inseriti"
+
+#: CF7DBPlugin.php:57
+msgid "Maximum number of rows to retrieve from the DB for the Admin display"
+msgstr "Numero massimo di record da estrarre dal DB (per visualizzazione admin)"
+
+#: CF7DBPlugin.php:58
+msgid "Use Javascript-enabled tables in Admin Database page"
+msgstr "Usa tabelle (Javascript-attivo) nella pagina Database"
+
+#: CF7DBPlugin.php:59
+msgid "Show line breaks in submitted data table"
+msgstr "Mostra separatore di linea nella tabella dati"
+
+#: CF7DBPlugin.php:60
+msgid "Use Custom Date-Time Display Format (below)"
+msgstr "Usa formato personalizzato data/ora (qui sotto)"
+
+#: CF7DBPlugin.php:61
+msgid "Date-Time Display Format"
+msgstr "Formato data/ora"
+
+#: CF7DBPlugin.php:62
+msgid "Export URLs instead of file names for uploaded files"
+msgstr "Esporta gli URL (non i nomi dei file) per i file caricati"
+
+#: CF7DBPlugin.php:63
+msgid "Do not save fields in DB named (comma-separated list, no spaces)"
+msgstr "Non salvare i campi nel DB a nome (separa con una virgola, no spazi)"
+
+#: CF7DBPlugin.php:64
+msgid "Do not save forms in DB named (comma-separated list, no spaces)"
+msgstr "Non salvare i moduli nel DB a nome (separa con una virgola, no spazi)"
+
+#: CF7DBPlugin.php:65
+msgid "Save Cookie Data with Form Submissions"
+msgstr "Salva dati cookie insieme ai dati modulo"
+
+#: CF7DBPlugin.php:66
+msgid "Save only cookies in DB named (comma-separated list, no spaces, and above option must be set to true)"
+msgstr "Salva i soli cookie nel DB a nome (separa con una virgola, no spazi e opzione qui sopra impostata a sì)"
+
+#: CF7DBPlugin.php:67
+msgid "Show the query used to display results"
+msgstr "Mostra la query utilizzata per mostrare i risultati"
+
+#: CF7DBPlugin.php:68
+msgid "Drop this plugin's Database table on uninstall"
+msgstr "Elimina tabella plugin dal database (disinstalla)"
+
+#: CF7DBPlugin.php:81
+msgid "Administrator"
+msgstr "Amministratore"
+
+#: CF7DBPlugin.php:83
+msgid "Editor"
+msgstr "Editore"
+
+#: CF7DBPlugin.php:85
+msgid "Author"
+msgstr "Autore"
+
+#: CF7DBPlugin.php:87
+msgid "Contributor"
+msgstr "Collaboratore"
+
+#: CF7DBPlugin.php:89
+msgid "Subscriber"
+msgstr "Sottoscrittore"
+
+#: CF7DBPlugin.php:91
+msgid "Anyone"
+msgstr "Chiunque"
+
+#: CF7DBPlugin.php:282
+msgid "Missing form parameters"
+msgstr "Mancano i parametri del modulo"
+
+#: CF7DBPlugin.php:286
+msgid "No such file."
+msgstr "Nessun file."
+
+#: CF7DBPlugin.php:318
+#: CF7DBPlugin.php:338
+msgid "Database Options"
+msgstr "Opzioni database"
+
+#: CF7DBPlugin.php:336
+#: CF7DBPlugin.php:511
+msgid "Database"
+msgstr "Database"
+
+#: CF7DBPlugin.php:340
+msgid "Build Short Code"
+msgstr "Crea Short Code"
+
+#: CF7DBPlugin.php:342
+msgid "FAQ"
+msgstr "FAQ"
+
+#: CF7DBPlugin.php:519
+msgid "Database Short Code"
+msgstr "Database Short Code"
+
+#: ExportToGoogleLiveData.php:170
+msgid "How to Set up Google Spreadsheet to pull data from WordPress"
+msgstr "Come impostare Google Spreadsheet per estrarre i dati da WordPress"
+
+#: CFDBViewWhatsInDB.php:43
+msgid "No form submissions in the database"
+msgstr "Nessun dato presente nel database"
+
+#: CFDBViewWhatsInDB.php:102
+#: CFDBViewShortCodeBuilder.php:507
+msgid "* Select a form *"
+msgstr "* Seleziona modulo *"
+
+#: CFDBViewWhatsInDB.php:138
+msgid "Google Login for Upload"
+msgstr "Google Login per Upload"
+
+#: CFDBViewWhatsInDB.php:147
+msgid "Cannot perform operation because jQuery is not loaded in this page"
+msgstr "Impossibile procedere con l'operazione causa jQuery non caricata in questa pagina"
+
+#: CFDBViewWhatsInDB.php:187
+#: CFDBViewShortCodeBuilder.php:668
+msgid "Excel Internet Query"
+msgstr "Excel Internet Query"
+
+#: CFDBViewWhatsInDB.php:190
+#: CFDBViewShortCodeBuilder.php:659
+msgid "Excel CSV (UTF8-BOM)"
+msgstr "Excel CSV (UTF8-BOM)"
+
+#: CFDBViewWhatsInDB.php:193
+#: CFDBViewShortCodeBuilder.php:662
+msgid "Excel TSV (UTF16LE-BOM)"
+msgstr "Excel TSV (UTF16LE-BOM)"
+
+#: CFDBViewWhatsInDB.php:196
+#: CFDBViewShortCodeBuilder.php:665
+msgid "Plain CSV (UTF-8)"
+msgstr "Plain CSV (UTF-8)"
+
+#: CFDBViewWhatsInDB.php:199
+msgid "Google Spreadsheet"
+msgstr "Google Spreadsheet"
+
+#: CFDBViewWhatsInDB.php:202
+msgid "Google Spreadsheet Live Data"
+msgstr "Google Spreadsheet Live Data"
+
+#: CFDBViewWhatsInDB.php:205
+msgid "HTML"
+msgstr "HTML"
+
+#: CFDBViewWhatsInDB.php:208
+msgid "JSON"
+msgstr "JSON"
+
+#: CFDBViewWhatsInDB.php:223
+msgid "Delete All This Form's Records"
+msgstr "Cancella tutti i dati di questo modulo"
+
+#: CFDBViewWhatsInDB.php:307
+msgid "Did you know: This plugin captures data from both these plugins:"
+msgstr "Ti ricordo che questo plugin può raccogliere i dati da questi plugin:"
+
+#: CFDBViewWhatsInDB.php:318
+msgid "Did you know: You can add this data to your posts and pages using these shortcodes:"
+msgstr "Ti ricordo che puoi inserire questi dati in un articolo/pagina utilizzando questi shortcode:"
+
+#: CFDBViewWhatsInDB.php:332
+msgid "Would you like to help translate this plugin into your language?"
+msgstr "Vorresti tradurre questo plugin nella tua lingua?"
+
+#: CFDBViewWhatsInDB.php:334
+msgid "How to create a translation"
+msgstr "Come creare una traduzione"
+
+#: CFDBViewWhatsInDB.php:345
+msgid "Query:"
+msgstr "Query:"
+
+#: CFDBViewWhatsInDB.php:367
+msgid "Cancel"
+msgstr "Annulla"
+
+#: CFDBViewWhatsInDB.php:369
+msgid "Upload"
+msgstr "Carica"
+
+#: CFDBViewWhatsInDB.php:390
+msgid "next »"
+msgstr "succ »"
+
+#: CFDBViewWhatsInDB.php:391
+msgid "« prev"
+msgstr "« prec"
+
+#: CFDBViewWhatsInDB.php:408
+msgid "Returned entries %s to %s of %s entries in the database"
+msgstr "Dati di ritorno da %s a %s di %s dati presenti nel database"
+
+#: CFDBViewShortCodeBuilder.php:151
+msgid "Error: \""
+msgstr "Errore: \""
+
+#: CFDBViewShortCodeBuilder.php:153
+msgid "\" should not contain double-quotes (\")"
+msgstr "\" non può contenere le doppie virgolette (\")"
+
+#: CFDBViewShortCodeBuilder.php:200
+msgid "Error: no form is chosen"
+msgstr "Errore: nessun modulo selezionato"
+
+#: CFDBViewShortCodeBuilder.php:221
+msgid "Warning: \"search\" field ignored because \"filter\" is used (use one but not both)"
+msgstr "Attenzione: campo \"search\" ignorato poichè in uso \"filter\" (usane uno solo, non entrambi)"
+
+#: CFDBViewShortCodeBuilder.php:233
+msgid "Error: \"limit\": if you provide a value for \"Start Row\" then you must also provide a value for \"Num Rows\""
+msgstr "Errore: \"limit\": avessi inserito un valore per \"Start Row\" dovrai provvedere ad oimpostarne uno anche per \"Num Rows\""
+
+#: CFDBViewShortCodeBuilder.php:237
+msgid "Error: \"limit\": \"Num Rows\" must be a positive integer"
+msgstr "Errore: \"limit\": \"Num Rows\" deve essere un numero intero positivo"
+
+#: CFDBViewShortCodeBuilder.php:244
+msgid "Error: \"limit\": \"Start Row\" must be a positive integer"
+msgstr "Errore: \"limit\": \"Start Row\" deve essere un numero intero positivo"
+
+#: CFDBViewShortCodeBuilder.php:494
+msgid "* Select a short code *"
+msgstr "* Seleziona short code *"
+
+#: CFDBViewShortCodeBuilder.php:517
+msgid "Reset"
+msgstr "Ripristina"
+
+#: CFDBViewShortCodeBuilder.php:525
+msgid "Which fields/columns do you want to display?"
+msgstr "Quali campi/colonne desideri mostrare?"
+
+#: CFDBViewShortCodeBuilder.php:538
+msgid "Which rows/submissions do you want to display?"
+msgstr "Quali righe/dati desideri mostrare?"
+
+#: CFDBViewShortCodeBuilder.php:584
+msgid "HTML Table Formatting"
+msgstr "Formattazione HTML tabella"
+
+#: CFDBViewShortCodeBuilder.php:599
+msgid "DataTable Options"
+msgstr "Opzioni tabella dati"
+
+#: CFDBViewShortCodeBuilder.php:604
+msgid "JSON Options"
+msgstr "Opzioni JSON"
+
+#: CFDBViewShortCodeBuilder.php:620
+msgid "VALUE Options"
+msgstr "Opzioni VALUE"
+
+#: ExportToGoogleSS.php:62
+msgid "Login Failed"
+msgstr "Login fallito"
+
+#: ExportToGoogleSS.php:101
+msgid "New Google Spreadsheet"
+msgstr "New Google Spreadsheet"
+
+#: ExportToGoogleSS.php:110
+msgid "Error"
+msgstr "Errore"
+
+#: ExportToHtmlTable.php:158
+msgid "Delete"
+msgstr "Elimina"
+
+#~ msgid "Submitted"
+#~ msgstr "Inviato"
+
+#~ msgid "Insufficient privileges to display data from form: "
+#~ msgstr "Non hai il permesso per mostrare i dati del modulo:"
+
+#~ msgid "Delete Selected"
+#~ msgstr "Cancella selezionati"
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-nl_NL.mo b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-nl_NL.mo
new file mode 100644
index 00000000..9cb5b665
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-nl_NL.mo differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-nl_NL.po b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-nl_NL.po
new file mode 100644
index 00000000..2e7b34e9
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-nl_NL.po
@@ -0,0 +1,238 @@
+# Copyright (C) 2011
+# This file is distributed under the same license as the package.
+msgid ""
+msgstr ""
+"Project-Id-Version: Contact form 7 to Database plugin\n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/contact-form-7-to-database-extension\n"
+"POT-Creation-Date: 2011-02-12 12:49:58+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2011-02-22 17:04+0100\n"
+"Last-Translator: Jelmer Holtes | Holtes Design \n"
+"Language-Team: Dutch \n"
+"X-Poedit-Language: Dutch\n"
+"X-Poedit-Country: NETHERLANDS\n"
+
+#: contact-form-7-db.php:23
+msgid "Minimal version of PHP required: "
+msgstr "Minimaal vereiste PHP versie:"
+
+#: contact-form-7-db.php:24
+msgid "Your server's PHP version: "
+msgstr "Uw server's PHP versie:"
+
+#: contact-form-7-db.php:27
+msgid "When using the Apache web server, typically you can configure it to use PHP5 by doing the following:"
+msgstr "Wanneer u een Apache webserver gebruikt, dan kun je het gemakkelijk gebruiken met PHP5 door het volgende te doen:"
+
+#: contact-form-7-db.php:29
+msgid "Locate and edit this file, located at the top directory of your WordPress installation: "
+msgstr "Zoek en bewerk dit bestand, en plaats het in de hoofdmap van uw Wordpress installatie:"
+
+#: contact-form-7-db.php:31
+msgid "Add these two lines to the file:"
+msgstr "Voeg deze twee regels toe aan het bestand:"
+
+#: ExportToJson.php:69
+#: CF7DBOptionsManager.php:278
+#: ExportToCsvUtf16le.php:32
+#: ExportToGoogleLiveData.php:29
+#: ExportToCsvUtf8.php:42
+#: ExportToGoogleSS.php:34
+#: ExportToHtmlTable.php:122
+#: ExportToValue.php:60
+#: getFile.php:32
+msgid "You do not have sufficient permissions to access this page."
+msgstr "U heeft niet voldoende rechten om deze pagina te openen."
+
+#: CJ7DBCheckZendFramework.php:70
+msgid "Missing Zend Framework"
+msgstr "Ontbrekend Zend Framework"
+
+#: CF7DBOptionsManager.php:296
+msgid "Settings"
+msgstr "Instellingen"
+
+#: CF7DBOptionsManager.php:321
+msgid "Save Changes"
+msgstr "Wijzigingen opslaan"
+
+#: CF7DBOptionsManager.php:380
+#: CF7DBPlugin.php:71
+msgid "true"
+msgstr "aan"
+
+#: CF7DBOptionsManager.php:381
+#: CF7DBPlugin.php:73
+msgid "false"
+msgstr "uit"
+
+#: ExportToCsvUtf16le.php:50
+#: ExportToCsvUtf8.php:62
+msgid "Submitted"
+msgstr "Verstuurd"
+
+#: ExportToGoogleLiveData.php:164
+msgid "How to Set up Google Spreadsheet to pull data from WordPress"
+msgstr "Hoe u een Google Spreadsheet kunt instellen om data naartoe te sturen van Wordpress"
+
+#: ExportToGoogleSS.php:64
+msgid "Login Failed"
+msgstr "Inloggen mislukt"
+
+#: ExportToGoogleSS.php:100
+msgid "New Google Spreadsheet"
+msgstr "Nieuwe Google Spreadsheet"
+
+#: ExportToGoogleSS.php:109
+msgid "Error"
+msgstr "Fout"
+
+#: ExportToHtmlTable.php:234
+msgid "Delete"
+msgstr "Verwijderen"
+
+#: CF7DBPlugin.php:49
+msgid "Can See Submission data"
+msgstr "Kan inzien van gegevens"
+
+#: CF7DBPlugin.php:51
+msgid "Can See Submission when using shortcodes"
+msgstr "Kan inzien van gegevens d.m.v. shortcodes"
+
+#: CF7DBPlugin.php:53
+msgid "Can Delete Submission data"
+msgstr "Kan verwijderen van gegevens"
+
+#: CF7DBPlugin.php:55
+msgid "Use Javascript-enabled tables in Admin Database page"
+msgstr "Gebruik Javascript-ingeschakelde tabellen in Administrator Database pagina"
+
+#: CF7DBPlugin.php:56
+msgid "Show line breaks in submitted data table"
+msgstr "Toon regeleinden in de ingediende gegevenstabel"
+
+#: CF7DBPlugin.php:57
+msgid "Use Custom Date-Time Display Format (below)"
+msgstr "Gebruik aangepaste tijdweergave formaat (zie hieronder)"
+
+#: CF7DBPlugin.php:58
+msgid "Date-Time Display Format"
+msgstr "Tijdweergave formaat"
+
+#: CF7DBPlugin.php:59
+msgid "Export URLs instead of file names for uploaded files"
+msgstr "Exporteer URL's in plaats van bestandsnamen voor geuploade bestanden"
+
+#: CF7DBPlugin.php:60
+msgid "Do not save fields in DB named (comma-separated list, no spaces)"
+msgstr "Sla geen velden op in de database (door komma's gescheiden lijst, geen spaties)"
+
+#: CF7DBPlugin.php:61
+msgid "Do not save forms in DB named (comma-separated list, no spaces)"
+msgstr "Sla geen velden op in de database (door komma's gescheiden lijst, geen spaties)"
+
+#: CF7DBPlugin.php:62
+msgid "Save Cookie Data with Form Submissions"
+msgstr "Sla cookie gegevens op door het inzien van de database"
+
+#: CF7DBPlugin.php:63
+msgid "Save only cookies in DB named (comma-separated list, no spaces, and above option must be set to true)"
+msgstr "Sla cookie's alleen op in de database (door komma's gescheiden lijst, geen spaties, en bovenstaande optie moet worden ingeschakeld als juist)"
+
+#: CF7DBPlugin.php:76
+msgid "Administrator"
+msgstr "Administrator"
+
+#: CF7DBPlugin.php:78
+msgid "Editor"
+msgstr "Redacteur"
+
+#: CF7DBPlugin.php:80
+msgid "Author"
+msgstr "Auteur"
+
+#: CF7DBPlugin.php:82
+msgid "Contributor"
+msgstr "Medewerker"
+
+#: CF7DBPlugin.php:84
+msgid "Subscriber"
+msgstr "Abonnee"
+
+#: CF7DBPlugin.php:86
+msgid "Anyone"
+msgstr "Iedereen"
+
+#: CF7DBPlugin.php:212
+#: CF7DBPlugin.php:232
+msgid "Database Options"
+msgstr "Database instellingen"
+
+#: CF7DBPlugin.php:230
+#: CF7DBPlugin.php:381
+msgid "Database"
+msgstr "Database"
+
+#: CF7DBPlugin.php:234
+#: CF7DBPlugin.php:420
+msgid "FAQ"
+msgstr "FAQ (Veelgestelde vragen)"
+
+#: CF7DBPlugin.php:414
+msgid "Rate this Plugin"
+msgstr "Beoordeel deze plugin"
+
+#: CF7DBPlugin.php:426
+msgid "Support"
+msgstr "Ondersteuning"
+
+#: CF7DBPlugin.php:440
+msgid "No form submissions in the database"
+msgstr "Er zijn geen gegevens in de database beschikbaar"
+
+#: CF7DBPlugin.php:495
+msgid "Google Login for Upload"
+msgstr "Google login om bestanden te uloaden"
+
+#: CF7DBPlugin.php:504
+msgid "Cannot perform operation because jQuery is not loaded in this page"
+msgstr "Kan operatie niet uitvoeren omdat jQuery niet is geladen in deze pagina"
+
+#: CF7DBPlugin.php:543
+msgid "Export"
+msgstr "Exporteer"
+
+#: CF7DBPlugin.php:553
+msgid "Delete All This Form's Records"
+msgstr "Verwijder alle records"
+
+#: CF7DBPlugin.php:611
+msgid "Did you know: This plugin captures data from both these plugins:"
+msgstr "Wist u dat: Deze plugin registreert de gegevens van beide plugins:"
+
+#: CF7DBPlugin.php:620
+msgid "Did you know: You can add this data to your posts and pages using these shortcodes:"
+msgstr "Wist u dat: U kunt deze gegevens gebruiken en toevoegen aan uw berichten en pagina's door het toevoegen van deze shortcodes"
+
+#: CF7DBPlugin.php:645
+msgid "Cancel"
+msgstr "Annuleer"
+
+#: CF7DBPlugin.php:647
+msgid "Upload"
+msgstr "Verstuur"
+
+#: getFile.php:39
+msgid "Missing form parameters"
+msgstr "Ontbrekende parameters"
+
+#: getFile.php:44
+msgid "No such file."
+msgstr "Geen bestand geselecteerd"
+
+#: CFDBShortCodeLoaderSecurityCheck.php:34
+msgid "Insufficient privileges to display data from form: "
+msgstr "Onvoldoende rechten om gegevens uit formulier weer te geven:"
+
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-pt_BR.mo b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-pt_BR.mo
new file mode 100644
index 00000000..4dc90a12
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-pt_BR.mo differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-pt_BR.po b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-pt_BR.po
new file mode 100644
index 00000000..55c5255b
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-pt_BR.po
@@ -0,0 +1,279 @@
+# Copyright (C) 2011
+# This file is distributed under the same license as the package.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/contact-form-7-to-database-extension\n"
+"POT-Creation-Date: 2011-02-25 21:50:57+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2011-03-16 18:29-0300\n"
+"Last-Translator: Fabiano dos Santos Lipphaus \n"
+"Language-Team: Agência Espaço Web \n"
+"X-Poedit-Language: Portuguese\n"
+"X-Poedit-Country: BRAZIL\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: CF7DBPlugin.php:49
+msgid "Can See Submission data"
+msgstr "Usuário autorizado a visualizar dados sobre o envio"
+
+#: CF7DBPlugin.php:51
+msgid "Can See Submission when using shortcodes"
+msgstr "Usuário autorizado visualizar dados sobre o envio quando estiver usando um 'shortcode'"
+
+#: CF7DBPlugin.php:53
+msgid "Can Delete Submission data"
+msgstr "Usuário autorizado a deletar dados de envio"
+
+#: CF7DBPlugin.php:55
+msgid "Use Javascript-enabled tables in Admin Database page"
+msgstr "Usar Javascript - habilitar tabelas na página de Administração do Banco de Dados"
+
+#: CF7DBPlugin.php:56
+msgid "Show line breaks in submitted data table"
+msgstr "Mostrar linha de quebra no tabela de dados enviada"
+
+#: CF7DBPlugin.php:57
+msgid "Use Custom Date-Time Display Format (below)"
+msgstr "Usar formato de data-hora customizado (abaixo)"
+
+#: CF7DBPlugin.php:58
+msgid "Date-Time Display Format"
+msgstr "Formato de visualização da Data e Hora"
+
+#: CF7DBPlugin.php:59
+msgid "Export URLs instead of file names for uploaded files"
+msgstr "Exportar URLs ao invéz do nome dos arquivos no caso de aquivos enviados"
+
+#: CF7DBPlugin.php:60
+msgid "Do not save fields in DB named (comma-separated list, no spaces)"
+msgstr "Não salvar no Banco de Daos os com nome (usar virgula para separar a lista, sem espaços) "
+
+#: CF7DBPlugin.php:61
+msgid "Do not save forms in DB named (comma-separated list, no spaces)"
+msgstr "Não salvar no Banco de Daos os com nome (usar virgula para separar a lista, sem espaços) "
+
+#: CF7DBPlugin.php:62
+msgid "Save Cookie Data with Form Submissions"
+msgstr "Salvar Cookies com os Formulários Enviados "
+
+#: CF7DBPlugin.php:63
+msgid "Save only cookies in DB named (comma-separated list, no spaces, and above option must be set to true)"
+msgstr "Salvar cookies somentes nos Bancos de dados (usar virgula para separar a lista, sem espaços e a opção acima deverá estar setada como 'sim') "
+
+#: CF7DBPlugin.php:71
+#: CF7DBOptionsManager.php:380
+msgid "true"
+msgstr "Sim"
+
+#: CF7DBPlugin.php:73
+#: CF7DBOptionsManager.php:381
+msgid "false"
+msgstr "Não"
+
+#: CF7DBPlugin.php:76
+msgid "Administrator"
+msgstr "Administrador"
+
+#: CF7DBPlugin.php:78
+msgid "Editor"
+msgstr "Editor"
+
+#: CF7DBPlugin.php:80
+msgid "Author"
+msgstr "Autor"
+
+#: CF7DBPlugin.php:82
+msgid "Contributor"
+msgstr "Contribuidor"
+
+#: CF7DBPlugin.php:84
+msgid "Subscriber"
+msgstr "Assinante"
+
+#: CF7DBPlugin.php:86
+msgid "Anyone"
+msgstr "Qualquer um"
+
+#: CF7DBPlugin.php:212
+#: CF7DBPlugin.php:232
+msgid "Database Options"
+msgstr "Opções dos Bancos de Dados "
+
+#: CF7DBPlugin.php:230
+#: CF7DBPlugin.php:381
+msgid "Database"
+msgstr "Banco de Dados"
+
+#: CF7DBPlugin.php:234
+msgid "FAQ"
+msgstr "FAQ"
+
+#: CF7DBPlugin.php:414
+msgid "Rate this Plugin"
+msgstr "Sua Avaliação"
+
+#: CF7DBPlugin.php:420
+msgid "Documentation"
+msgstr "Documentação"
+
+#: CF7DBPlugin.php:426
+msgid "Support"
+msgstr "Suporte"
+
+#: CF7DBPlugin.php:442
+msgid "No form submissions in the database"
+msgstr "Não há dados de envio no Banco de Dados"
+
+#: CF7DBPlugin.php:481
+msgid "* Select a form *"
+msgstr "Selecione um formulário"
+
+#: CF7DBPlugin.php:510
+msgid "Google Login for Upload"
+msgstr "Login do Google para Envio"
+
+#: CF7DBPlugin.php:519
+msgid "Cannot perform operation because jQuery is not loaded in this page"
+msgstr "ImpossÃvel realizar a operação. Motivo: JQuery não foi carregado nessa página"
+
+#: CF7DBPlugin.php:559
+msgid "Excel Internet Query"
+msgstr "Consulta do Excel via internet"
+
+#: CF7DBPlugin.php:562
+msgid "Excel CSV (UTF8-BOM)"
+msgstr "Excel CSV (UTF8-BOM)"
+
+#: CF7DBPlugin.php:565
+msgid "Excel TSV (UTF16LE-BOM)"
+msgstr "Excel TSV (UTF16LE-BOM)"
+
+#: CF7DBPlugin.php:568
+msgid "Plain CSV (UTF-8)"
+msgstr "Planilha CSV (UTF-8)"
+
+#: CF7DBPlugin.php:571
+msgid "Google Spreadsheet"
+msgstr "Google Spreadsheet"
+
+#: CF7DBPlugin.php:574
+msgid "Google Spreadsheet Live Data"
+msgstr "Google Spreadsheet Live Data"
+
+#: CF7DBPlugin.php:577
+msgid "HTML"
+msgstr "HTML"
+
+#: CF7DBPlugin.php:580
+msgid "JSON"
+msgstr "JSON"
+
+#: CF7DBPlugin.php:584
+msgid "Export"
+msgstr "Exportar"
+
+#: CF7DBPlugin.php:595
+msgid "Delete All This Form's Records"
+msgstr "Deletar todos os dados desse formulário"
+
+#: CF7DBPlugin.php:657
+msgid "Did you know: This plugin captures data from both these plugins:"
+msgstr "Você sabia: Esse plugin captura dados desses outros plugins:"
+
+#: CF7DBPlugin.php:666
+msgid "Did you know: You can add this data to your posts and pages using these shortcodes:"
+msgstr "Você sabia: Você pode adicionar dados em seus posts e páginas usando esses shortcodes:"
+
+#: CF7DBPlugin.php:677
+msgid "Would you like to help translate this plugin into your language?"
+msgstr "Gostaria de ajudar a traduzir esse plugin em sua lÃngua?"
+
+#: CF7DBPlugin.php:678
+msgid "How to create a translation"
+msgstr "Como Criar uma tradução"
+
+#: CF7DBPlugin.php:702
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: CF7DBPlugin.php:704
+msgid "Upload"
+msgstr "Enviar"
+
+#: ExportBase.php:125
+msgid "You do not have sufficient permissions to access this data."
+msgstr "Voce não possui permissão para acessar esses dados."
+
+#: getFile.php:32
+#: CF7DBOptionsManager.php:278
+#: ExportToGoogleLiveData.php:30
+msgid "You do not have sufficient permissions to access this page."
+msgstr "Voce não possui permissão para acessaressa página."
+
+#: getFile.php:39
+msgid "Missing form parameters"
+msgstr "Parâmetros de formulário ausente"
+
+#: getFile.php:44
+msgid "No such file."
+msgstr "Arquivo inexistente."
+
+#: export.php:36
+msgid "Error: No \"form\" parameter submitted"
+msgstr "Erro: Nenhum parâmetro do \"formulário\" enviado"
+
+#: CF7DBOptionsManager.php:296
+msgid "Settings"
+msgstr "Configurações"
+
+#: CF7DBOptionsManager.php:321
+msgid "Save Changes"
+msgstr "Salvar Alterações"
+
+#: ExportToGoogleLiveData.php:166
+msgid "How to Set up Google Spreadsheet to pull data from WordPress"
+msgstr "Como configurar Google Spreadsheet para extrair dados do Wordpress"
+
+#: CJ7DBCheckZendFramework.php:71
+msgid "Missing Zend Framework"
+msgstr "Faltando Zend Framework"
+
+#: ExportToGoogleSS.php:61
+msgid "Login Failed"
+msgstr "Falha no Login"
+
+#: ExportToGoogleSS.php:100
+msgid "New Google Spreadsheet"
+msgstr "Novo Google Spreadsheet"
+
+#: ExportToGoogleSS.php:109
+msgid "Error"
+msgstr "Erro"
+
+#: contact-form-7-db.php:23
+msgid "Minimal version of PHP required: "
+msgstr "Versão mÃnima do PHP requerida:"
+
+#: contact-form-7-db.php:24
+msgid "Your server's PHP version: "
+msgstr "Versão do PHP do seu server:"
+
+#: contact-form-7-db.php:27
+msgid "When using the Apache web server, typically you can configure it to use PHP5 by doing the following:"
+msgstr "Quando estiver usando Servidor Web Apache, você pode configurar e usar PHP5 seguindo as seguintes instruções:"
+
+#: contact-form-7-db.php:29
+msgid "Locate and edit this file, located at the top directory of your WordPress installation: "
+msgstr "Localize e edite esse arquivo, localizado no topo do diretório da sua instalação do Wordpress"
+
+#: contact-form-7-db.php:31
+msgid "Add these two lines to the file:"
+msgstr "Adicione essas suas linhas ao arquivo:"
+
+#: ExportToHtmlTable.php:135
+msgid "Delete"
+msgstr "Deletar"
+
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-ro_RO.mo b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-ro_RO.mo
new file mode 100644
index 00000000..97698562
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-ro_RO.mo differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-ro_RO.po b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-ro_RO.po
new file mode 100644
index 00000000..2b994ba0
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-ro_RO.po
@@ -0,0 +1,310 @@
+# Copyright (C) 2010
+# This file is distributed under the same license as the package.
+msgid ""
+msgstr ""
+"Project-Id-Version: Contact Form to DB Extension\n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/contact-form-7-to-database-extension\n"
+"POT-Creation-Date: 2011-03-21 18:12:08+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2011-03-28 11:21+0200\n"
+"Last-Translator: Eugen Mihai \n"
+"Language-Team: Eugen Mihai \n"
+"X-Poedit-Language: Romanian\n"
+"X-Poedit-Country: ROMANIA\n"
+
+#: CF7DBPluginExporter.php:33
+msgid "Error: No \"form\" parameter submitted"
+msgstr "Eroare: Nu exista parametri formular trimisi"
+
+#: contact-form-7-db.php:23
+msgid "Minimal version of PHP required: "
+msgstr "Versiunea minima PHP ceruta"
+
+#: contact-form-7-db.php:24
+msgid "Your server's PHP version: "
+msgstr "Versiunea ta de PHP"
+
+#: contact-form-7-db.php:27
+msgid "When using the Apache web server, typically you can configure it to use PHP5 by doing the following:"
+msgstr "Cand utilizezi un server Apache, in mod normal poti sa faci configurarile de mai jos utilizand PHP 5:"
+
+#: contact-form-7-db.php:29
+msgid "Locate and edit this file, located at the top directory of your WordPress installation: "
+msgstr "Localizeaza si editeaza acest fisier in radacina folderului in care ai instalat WordPress:"
+
+#: contact-form-7-db.php:31
+msgid "Add these two lines to the file:"
+msgstr "Adauga aceste doua linii in fisierul:"
+
+#: CJ7DBCheckZendFramework.php:72
+msgid "Missing Zend Framework"
+msgstr "Nu exista Zend Framework"
+
+#: ExportBase.php:177
+msgid "You do not have sufficient permissions to access this data."
+msgstr "Nu ai suficiente permisiuni pentru a accesa aceste date"
+
+#: ExportToHtmlTable.php:135
+msgid "Delete"
+msgstr "Sterge"
+
+#: CF7DBOptionsManager.php:278
+#: CF7DBPlugin.php:245
+#: ExportToGoogleLiveData.php:31
+msgid "You do not have sufficient permissions to access this page."
+msgstr "Nu ai suficiente permisiuni pentru a accesa aceasta pagina"
+
+#: CF7DBOptionsManager.php:296
+msgid "Settings"
+msgstr "Setari"
+
+#: CF7DBOptionsManager.php:321
+msgid "Save Changes"
+msgstr "Salveaza schimbari"
+
+#: CF7DBOptionsManager.php:380
+#: CF7DBPlugin.php:73
+msgid "true"
+msgstr "adevarat"
+
+#: CF7DBOptionsManager.php:381
+#: CF7DBPlugin.php:75
+msgid "false"
+msgstr "fals"
+
+#: CF7DBPlugin.php:48
+msgid "I have donated to this plugin"
+msgstr "Am facut o donatie pentru acest plugin"
+
+#: CF7DBPlugin.php:49
+msgid "Can See Submission data"
+msgstr "Poti sa vezi datele transmise"
+
+#: CF7DBPlugin.php:51
+msgid "Can See Submission when using shortcodes"
+msgstr "Poti vedea datele trimise utilizand shortcodes"
+
+#: CF7DBPlugin.php:53
+msgid "Can Delete Submission data"
+msgstr "Poti sterge datele trimise"
+
+#: CF7DBPlugin.php:55
+msgid "Maximum number of rows to retrieve from the DB for the Admin display"
+msgstr "Numarul maxim de randuri din baza de date pentru a fi procesate si afisate in Admin"
+
+#: CF7DBPlugin.php:56
+msgid "Use Javascript-enabled tables in Admin Database page"
+msgstr "Utilizeaza Javascript pentru tabele in pagina de administrare"
+
+#: CF7DBPlugin.php:57
+msgid "Show line breaks in submitted data table"
+msgstr ""
+
+#: CF7DBPlugin.php:58
+msgid "Use Custom Date-Time Display Format (below)"
+msgstr "Utilizeaza afisare intr-un format la alegere pentru data si ora(mai jos)"
+
+#: CF7DBPlugin.php:59
+msgid "Date-Time Display Format"
+msgstr "Format Data-Ora"
+
+#: CF7DBPlugin.php:60
+msgid "Export URLs instead of file names for uploaded files"
+msgstr "Exporta URL-uri in loc de nume fisiere incarcate"
+
+#: CF7DBPlugin.php:61
+msgid "Do not save fields in DB named (comma-separated list, no spaces)"
+msgstr "Nu salva urmatoarele campuri din baza de date (o lista separata cu virgula si fara spatii)"
+
+#: CF7DBPlugin.php:62
+msgid "Do not save forms in DB named (comma-separated list, no spaces)"
+msgstr ""
+
+#: CF7DBPlugin.php:63
+msgid "Save Cookie Data with Form Submissions"
+msgstr ""
+
+#: CF7DBPlugin.php:64
+msgid "Save only cookies in DB named (comma-separated list, no spaces, and above option must be set to true)"
+msgstr ""
+
+#: CF7DBPlugin.php:65
+msgid "Show the query used to display results"
+msgstr ""
+
+#: CF7DBPlugin.php:78
+msgid "Administrator"
+msgstr "Administrator"
+
+#: CF7DBPlugin.php:80
+msgid "Editor"
+msgstr "Editor"
+
+#: CF7DBPlugin.php:82
+msgid "Author"
+msgstr "Autor"
+
+#: CF7DBPlugin.php:84
+msgid "Contributor"
+msgstr "Contributor"
+
+#: CF7DBPlugin.php:86
+msgid "Subscriber"
+msgstr "Abonat"
+
+#: CF7DBPlugin.php:88
+msgid "Anyone"
+msgstr "Oricine"
+
+#: CF7DBPlugin.php:251
+msgid "Missing form parameters"
+msgstr "Lipsesc parametrii formularului"
+
+#: CF7DBPlugin.php:255
+msgid "No such file."
+msgstr "Nu am gasit nici un fisier"
+
+#: CF7DBPlugin.php:268
+#: CF7DBPlugin.php:288
+msgid "Database Options"
+msgstr "Optiuni baza de date"
+
+#: CF7DBPlugin.php:286
+#: CF7DBPlugin.php:437
+msgid "Database"
+msgstr "Baza de date"
+
+#: CF7DBPlugin.php:290
+msgid "FAQ"
+msgstr "Intrebari si raspunsuri"
+
+#: CF7DBPlugin.php:478
+msgid "Rate this Plugin"
+msgstr "Evalueaza acest modul"
+
+#: CF7DBPlugin.php:484
+msgid "Documentation"
+msgstr "Documentatie"
+
+#: CF7DBPlugin.php:490
+msgid "Support"
+msgstr "Suport"
+
+#: CF7DBPlugin.php:496
+msgid "Privacy Policy"
+msgstr ""
+
+#: CF7DBPlugin.php:512
+msgid "No form submissions in the database"
+msgstr "Nu avem nimioc trimis in baza de date"
+
+#: CF7DBPlugin.php:571
+msgid "* Select a form *"
+msgstr "* Selecteaza un formular *"
+
+#: CF7DBPlugin.php:607
+msgid "Google Login for Upload"
+msgstr ""
+
+#: CF7DBPlugin.php:616
+msgid "Cannot perform operation because jQuery is not loaded in this page"
+msgstr ""
+
+#: CF7DBPlugin.php:656
+msgid "Excel Internet Query"
+msgstr ""
+
+#: CF7DBPlugin.php:659
+msgid "Excel CSV (UTF8-BOM)"
+msgstr ""
+
+#: CF7DBPlugin.php:662
+msgid "Excel TSV (UTF16LE-BOM)"
+msgstr ""
+
+#: CF7DBPlugin.php:665
+msgid "Plain CSV (UTF-8)"
+msgstr ""
+
+#: CF7DBPlugin.php:668
+msgid "Google Spreadsheet"
+msgstr ""
+
+#: CF7DBPlugin.php:671
+msgid "Google Spreadsheet Live Data"
+msgstr ""
+
+#: CF7DBPlugin.php:674
+msgid "HTML"
+msgstr "HTML"
+
+#: CF7DBPlugin.php:677
+msgid "JSON"
+msgstr "JSON"
+
+#: CF7DBPlugin.php:681
+msgid "Export"
+msgstr "Exporta"
+
+#: CF7DBPlugin.php:692
+msgid "Delete All This Form's Records"
+msgstr "Sterge toate inregistarile din toate fomularele"
+
+#: CF7DBPlugin.php:763
+msgid "Did you know: This plugin captures data from both these plugins:"
+msgstr "Stiai asta: Acest modul captureaza date din ambele plugin-uri:"
+
+#: CF7DBPlugin.php:772
+msgid "Did you know: You can add this data to your posts and pages using these shortcodes:"
+msgstr "Stiai acest lucru: Poti sa adaugi date la articolul tau sau pagina ta utilizand aceste shortcodes:"
+
+#: CF7DBPlugin.php:783
+msgid "Would you like to help translate this plugin into your language?"
+msgstr "Ai dori sa participi cu un mic ajutor la traducerea acestui modul in limba ta?"
+
+#: CF7DBPlugin.php:784
+msgid "How to create a translation"
+msgstr "Cum sa creeezi o traducere"
+
+#: CF7DBPlugin.php:795
+msgid "Query:"
+msgstr "Interogare:"
+
+#: CF7DBPlugin.php:816
+msgid "Cancel"
+msgstr "Renunta"
+
+#: CF7DBPlugin.php:818
+msgid "Upload"
+msgstr "Incarca"
+
+#: CF7DBPlugin.php:957
+msgid "next »"
+msgstr "urmator »"
+
+#: CF7DBPlugin.php:958
+msgid "« prev"
+msgstr "« precedent"
+
+#: CF7DBPlugin.php:975
+msgid "Returned entries %s to %s of %s entries in the database"
+msgstr "Afiseaza de la %s la %s din %s intrari in baza de date"
+
+#: ExportToGoogleLiveData.php:170
+msgid "How to Set up Google Spreadsheet to pull data from WordPress"
+msgstr "How sa setezi Google Spreadsheet pentru a prelua date din WordPress"
+
+#: ExportToGoogleSS.php:62
+msgid "Login Failed"
+msgstr "Autentificare esuata"
+
+#: ExportToGoogleSS.php:101
+msgid "New Google Spreadsheet"
+msgstr "Fisier nou Google Spreadsheet"
+
+#: ExportToGoogleSS.php:110
+msgid "Error"
+msgstr "Eroare"
+
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-ru_RU.mo b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-ru_RU.mo
new file mode 100644
index 00000000..17f2e5f5
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-ru_RU.mo differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-ru_RU.po b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-ru_RU.po
new file mode 100644
index 00000000..a24d9b3d
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-ru_RU.po
@@ -0,0 +1,238 @@
+# Copyright (C) 2011
+# This file is distributed under the same license as the package.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/contact-form-7-to-database-extension\n"
+"POT-Creation-Date: 2011-02-12 12:49:58+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2011-02-16 20:14+0200\n"
+"Last-Translator: Olkeksandr Matvieiev \n"
+"Language-Team: \n"
+"X-Poedit-Language: Russian\n"
+"X-Poedit-Country: RUSSIAN FEDERATION\n"
+
+#: contact-form-7-db.php:23
+msgid "Minimal version of PHP required: "
+msgstr "ВерÑÐ¸Ñ PHP не менее:"
+
+#: contact-form-7-db.php:24
+msgid "Your server's PHP version: "
+msgstr "Ваша верÑÐ¸Ñ PHP (уÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð½Ð° Ñервере):"
+
+#: contact-form-7-db.php:27
+msgid "When using the Apache web server, typically you can configure it to use PHP5 by doing the following:"
+msgstr "При иÑпользовании web-Ñервера Apache, чтобы иÑпользовать PHP5, обычно, нужно проделать Ñледующее: "
+
+#: contact-form-7-db.php:29
+msgid "Locate and edit this file, located at the top directory of your WordPress installation: "
+msgstr "Ðайдите и отредактируйте Ñтот файл, который раÑположен в корневой директории вашего WordPress:"
+
+#: contact-form-7-db.php:31
+msgid "Add these two lines to the file:"
+msgstr "Добавьте Ñти две Ñтроки к файлу:"
+
+#: ExportToJson.php:69
+#: CF7DBOptionsManager.php:278
+#: ExportToCsvUtf16le.php:32
+#: ExportToGoogleLiveData.php:29
+#: ExportToCsvUtf8.php:42
+#: ExportToGoogleSS.php:34
+#: ExportToHtmlTable.php:122
+#: ExportToValue.php:60
+#: getFile.php:32
+msgid "You do not have sufficient permissions to access this page."
+msgstr "Ð’Ñ‹ не обладаете доÑтаточными правами Ð´Ð»Ñ Ð´Ð¾Ñтупа к Ñтой Ñтранице."
+
+#: CJ7DBCheckZendFramework.php:70
+msgid "Missing Zend Framework"
+msgstr "ОтÑутÑтвует Zend Framework"
+
+#: CF7DBOptionsManager.php:296
+msgid "Settings"
+msgstr "УÑтановки"
+
+#: CF7DBOptionsManager.php:321
+msgid "Save Changes"
+msgstr "Сохранить изменениÑ"
+
+#: CF7DBOptionsManager.php:380
+#: CF7DBPlugin.php:71
+msgid "true"
+msgstr "правда (да)"
+
+#: CF7DBOptionsManager.php:381
+#: CF7DBPlugin.php:73
+msgid "false"
+msgstr "ложь (нет)"
+
+#: ExportToCsvUtf16le.php:50
+#: ExportToCsvUtf8.php:62
+msgid "Submitted"
+msgstr "Отправлено"
+
+#: ExportToGoogleLiveData.php:164
+msgid "How to Set up Google Spreadsheet to pull data from WordPress"
+msgstr "Как уÑтановить и наÑтроить Google Spreadsheet Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ из WordPress"
+
+#: ExportToGoogleSS.php:64
+msgid "Login Failed"
+msgstr "ÐÐµÑƒÐ´Ð°Ñ‡Ð½Ð°Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ"
+
+#: ExportToGoogleSS.php:100
+msgid "New Google Spreadsheet"
+msgstr "Ðовый документ Google Spreadsheet"
+
+#: ExportToGoogleSS.php:109
+msgid "Error"
+msgstr "Ошибка"
+
+#: ExportToHtmlTable.php:234
+msgid "Delete"
+msgstr "Удалить"
+
+#: CF7DBPlugin.php:49
+msgid "Can See Submission data"
+msgstr "ВозможноÑть проÑмотреть отправленные данные"
+
+#: CF7DBPlugin.php:51
+msgid "Can See Submission when using shortcodes"
+msgstr "ВозможноÑть проÑмотреть отправленные данные при помощи коротких кодов"
+
+#: CF7DBPlugin.php:53
+msgid "Can Delete Submission data"
+msgstr "ВозможноÑть удалÑть отправленные данные"
+
+#: CF7DBPlugin.php:55
+msgid "Use Javascript-enabled tables in Admin Database page"
+msgstr "ИÑпользовать таблицы Javascript на Ñтранице админиÑÑ‚Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð°Ð· данных"
+
+#: CF7DBPlugin.php:56
+msgid "Show line breaks in submitted data table"
+msgstr "Показывать разрывы Ñтрок в таблице"
+
+#: CF7DBPlugin.php:57
+msgid "Use Custom Date-Time Display Format (below)"
+msgstr "ИÑпользовать произвольный формат Даты и Времени (ниже)"
+
+#: CF7DBPlugin.php:58
+msgid "Date-Time Display Format"
+msgstr "Формат Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð”Ð°Ñ‚Ñ‹ и Времени"
+
+#: CF7DBPlugin.php:59
+msgid "Export URLs instead of file names for uploaded files"
+msgstr "ÐкÑпортировать адреÑа (URL) вмеÑто имен Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ñ‹Ñ… файлов"
+
+#: CF7DBPlugin.php:60
+msgid "Do not save fields in DB named (comma-separated list, no spaces)"
+msgstr "Ðе ÑохранÑть в базу данных Ð¿Ð¾Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ñ‹ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ (ÑпиÑок разделÑетÑÑ Ð·Ð°Ð¿Ñтыми, пробелы не допуÑкаютÑÑ)"
+
+#: CF7DBPlugin.php:61
+msgid "Do not save forms in DB named (comma-separated list, no spaces)"
+msgstr "Ðе ÑохранÑть в базу данных формы Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ (ÑпиÑок разделÑетÑÑ Ð·Ð°Ð¿Ñтыми, пробелы не допуÑкаютÑÑ)"
+
+#: CF7DBPlugin.php:62
+msgid "Save Cookie Data with Form Submissions"
+msgstr "СохранÑть данные cookies при отправке формы"
+
+#: CF7DBPlugin.php:63
+msgid "Save only cookies in DB named (comma-separated list, no spaces, and above option must be set to true)"
+msgstr "СохранÑть в базе данных только Ñти cookies (ÑпиÑок разделÑетÑÑ Ð·Ð°Ð¿Ñтыми, пробелы не допуÑкаютÑÑ, и Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть уÑтановлена как ПРÐВДР(ДÐ))"
+
+#: CF7DBPlugin.php:76
+msgid "Administrator"
+msgstr "ÐдминиÑтратор"
+
+#: CF7DBPlugin.php:78
+msgid "Editor"
+msgstr "Редактор"
+
+#: CF7DBPlugin.php:80
+msgid "Author"
+msgstr "Ðвтор"
+
+#: CF7DBPlugin.php:82
+msgid "Contributor"
+msgstr "УчаÑтник"
+
+#: CF7DBPlugin.php:84
+msgid "Subscriber"
+msgstr "ПодпиÑчик"
+
+#: CF7DBPlugin.php:86
+msgid "Anyone"
+msgstr "Кто угодно"
+
+#: CF7DBPlugin.php:212
+#: CF7DBPlugin.php:232
+msgid "Database Options"
+msgstr "ÐаÑтройки базы данных"
+
+#: CF7DBPlugin.php:230
+#: CF7DBPlugin.php:381
+msgid "Database"
+msgstr "База данных"
+
+#: CF7DBPlugin.php:234
+#: CF7DBPlugin.php:420
+msgid "FAQ"
+msgstr "ЧÐВО (чаÑто задаваемые вопроÑÑ‹)"
+
+#: CF7DBPlugin.php:414
+msgid "Rate this Plugin"
+msgstr "ПроголоÑовать за Ñтот плагин"
+
+#: CF7DBPlugin.php:426
+msgid "Support"
+msgstr "Поддержка"
+
+#: CF7DBPlugin.php:440
+msgid "No form submissions in the database"
+msgstr "Ð’ базе данных нет запиÑей"
+
+#: CF7DBPlugin.php:495
+msgid "Google Login for Upload"
+msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Google Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸"
+
+#: CF7DBPlugin.php:504
+msgid "Cannot perform operation because jQuery is not loaded in this page"
+msgstr "Ðевозможно выполнить операцию, так как jQuery не загружен Ñ Ñтой Ñтраницей "
+
+#: CF7DBPlugin.php:543
+msgid "Export"
+msgstr "ÐкÑпорт"
+
+#: CF7DBPlugin.php:553
+msgid "Delete All This Form's Records"
+msgstr "Удалить вÑе запиÑи Ñтой формы"
+
+#: CF7DBPlugin.php:611
+msgid "Did you know: This plugin captures data from both these plugins:"
+msgstr "Знаете ли Ð’Ñ‹, что: Ñтот плагин работает Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸, получаемыми Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñтих двух плагинов: "
+
+#: CF7DBPlugin.php:620
+msgid "Did you know: You can add this data to your posts and pages using these shortcodes:"
+msgstr "Знаете ли Ð’Ñ‹, что: Ð’Ñ‹ можете добавлÑть данные к вашим запиÑÑм и Ñтраницам, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñледующие короткие коды: "
+
+#: CF7DBPlugin.php:645
+msgid "Cancel"
+msgstr "Отменить"
+
+#: CF7DBPlugin.php:647
+msgid "Upload"
+msgstr "Загрузить"
+
+#: getFile.php:39
+msgid "Missing form parameters"
+msgstr "ОтÑутÑтвуют параметры формы"
+
+#: getFile.php:44
+msgid "No such file."
+msgstr "Ðет такого файла"
+
+#: CFDBShortCodeLoaderSecurityCheck.php:34
+msgid "Insufficient privileges to display data from form: "
+msgstr "ÐедоÑтаточно прав Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… из формы."
+
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-tr_TR.mo b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-tr_TR.mo
new file mode 100644
index 00000000..07b06820
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-tr_TR.mo differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-tr_TR.po b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-tr_TR.po
new file mode 100644
index 00000000..4391a828
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension-tr_TR.po
@@ -0,0 +1,236 @@
+# Copyright (C) 2011
+# This file is distributed under the same license as the package.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/contact-form-7-to-database-extension\n"
+"POT-Creation-Date: 2011-02-12 12:49:58+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2011-02-12 10:48-0500\n"
+"Last-Translator: oya \n"
+"Language-Team: \n"
+
+#: contact-form-7-db.php:23
+msgid "Minimal version of PHP required: "
+msgstr "PHP Minimal versiyon gereklidir:"
+
+#: contact-form-7-db.php:24
+msgid "Your server's PHP version: "
+msgstr "Kullanılan PHP Minimal versiyon:"
+
+#: contact-form-7-db.php:27
+msgid "When using the Apache web server, typically you can configure it to use PHP5 by doing the following:"
+msgstr "Apache web server kulananlar, genellikle aşağıdakini yaparak PHP5 kullanacak şekilde yapılandırabilirsiniz:"
+
+#: contact-form-7-db.php:29
+msgid "Locate and edit this file, located at the top directory of your WordPress installation: "
+msgstr "Bulun ve WordPress kurulum üst dizininde bulunan bu dosyayı düzenleyin:"
+
+#: contact-form-7-db.php:31
+msgid "Add these two lines to the file:"
+msgstr "Dosyaya şu iki satırı ekleyin:"
+
+#: ExportToJson.php:69
+#: CF7DBOptionsManager.php:278
+#: ExportToCsvUtf16le.php:32
+#: ExportToGoogleLiveData.php:29
+#: ExportToCsvUtf8.php:42
+#: ExportToGoogleSS.php:34
+#: ExportToHtmlTable.php:122
+#: ExportToValue.php:60
+#: getFile.php:32
+msgid "You do not have sufficient permissions to access this page."
+msgstr "Bu sayfaya erişmek için yeterli izinlere sahip değilsiniz."
+
+#: CJ7DBCheckZendFramework.php:70
+msgid "Missing Zend Framework"
+msgstr "Eksik Çerçeve Zend"
+
+#: CF7DBOptionsManager.php:296
+msgid "Settings"
+msgstr "Ayarları"
+
+#: CF7DBOptionsManager.php:321
+msgid "Save Changes"
+msgstr "DeÄŸiÅŸiklikleri Kaydet"
+
+#: CF7DBOptionsManager.php:380
+#: CF7DBPlugin.php:71
+msgid "true"
+msgstr "gerçek"
+
+#: CF7DBOptionsManager.php:381
+#: CF7DBPlugin.php:73
+msgid "false"
+msgstr "yanlış"
+
+#: ExportToCsvUtf16le.php:50
+#: ExportToCsvUtf8.php:62
+msgid "Submitted"
+msgstr "Teslim"
+
+#: ExportToGoogleLiveData.php:164
+msgid "How to Set up Google Spreadsheet to pull data from WordPress"
+msgstr " WordPress'den Google Spreadsheet'e veri çekme nasıl kurulur?"
+
+#: ExportToGoogleSS.php:64
+msgid "Login Failed"
+msgstr "Giriş Başarısız"
+
+#: ExportToGoogleSS.php:100
+msgid "New Google Spreadsheet"
+msgstr "Yeni Google Tablo-Spreadsheet"
+
+#: ExportToGoogleSS.php:109
+msgid "Error"
+msgstr "Hata"
+
+#: ExportToHtmlTable.php:234
+msgid "Delete"
+msgstr "Silmek"
+
+#: CF7DBPlugin.php:49
+msgid "Can See Submission data"
+msgstr "Teslim DATA Gör"
+
+#: CF7DBPlugin.php:51
+msgid "Can See Submission when using shortcodes"
+msgstr " Kod kullanırken Gönderme Görebililirsiniz"
+
+#: CF7DBPlugin.php:53
+msgid "Can Delete Submission data"
+msgstr "Gönderilen DATA Silmek"
+
+#: CF7DBPlugin.php:55
+msgid "Use Javascript-enabled tables in Admin Database page"
+msgstr "Admin Veritabaninda Javascript Yönetici tablosu kullanın"
+
+#: CF7DBPlugin.php:56
+msgid "Show line breaks in submitted data table"
+msgstr "Gönderilen veri tablosunda satır sonları göster"
+
+#: CF7DBPlugin.php:57
+msgid "Use Custom Date-Time Display Format (below)"
+msgstr "Özel Tarih Kullanım Format (aşağıda)"
+
+#: CF7DBPlugin.php:58
+msgid "Date-Time Display Format"
+msgstr "Tarih-Zaman Gosterimi"
+
+#: CF7DBPlugin.php:59
+msgid "Export URLs instead of file names for uploaded files"
+msgstr "Ihracat URL'ler yerine dosyanın yüklenen dosyalar için isimler"
+
+#: CF7DBPlugin.php:60
+msgid "Do not save fields in DB named (comma-separated list, no spaces)"
+msgstr "DB'de bu isimli alanları u> (virgülle ayrılmış liste, boşluksuz) Kaydetmeyin"
+
+#: CF7DBPlugin.php:61
+msgid "Do not save forms in DB named (comma-separated list, no spaces)"
+msgstr "DB'de formları u> (virgülle ayrılmış liste, boşluksuz) Kaydetmeyin"
+
+#: CF7DBPlugin.php:62
+msgid "Save Cookie Data with Form Submissions"
+msgstr "Verileri Gönderme Formunda Koru"
+
+#: CF7DBPlugin.php:63
+msgid "Save only cookies in DB named (comma-separated list, no spaces, and above option must be set to true)"
+msgstr "Sadece DATAbase isimli cookie'leri kaydet (virgülle ayrılmış bir liste, herhangi bir boşluk ve yukarıdaki seçeneği doğru ayarlanması gerekir)"
+
+#: CF7DBPlugin.php:76
+msgid "Administrator"
+msgstr "Yönetici"
+
+#: CF7DBPlugin.php:78
+msgid "Editor"
+msgstr "Editör"
+
+#: CF7DBPlugin.php:80
+msgid "Author"
+msgstr "Yazar"
+
+#: CF7DBPlugin.php:82
+msgid "Contributor"
+msgstr "Katılımcı"
+
+#: CF7DBPlugin.php:84
+msgid "Subscriber"
+msgstr "Abone"
+
+#: CF7DBPlugin.php:86
+msgid "Anyone"
+msgstr "Herkes"
+
+#: CF7DBPlugin.php:212
+#: CF7DBPlugin.php:232
+msgid "Database Options"
+msgstr "Veritabanı Seçenekleri"
+
+#: CF7DBPlugin.php:230
+#: CF7DBPlugin.php:381
+msgid "Database"
+msgstr "Veritabanı"
+
+#: CF7DBPlugin.php:234
+#: CF7DBPlugin.php:420
+msgid "FAQ"
+msgstr "Yardim"
+
+#: CF7DBPlugin.php:414
+msgid "Rate this Plugin"
+msgstr "Bu Plugin'i deÄŸerlendirin"
+
+#: CF7DBPlugin.php:426
+msgid "Support"
+msgstr "Destek"
+
+#: CF7DBPlugin.php:440
+msgid "No form submissions in the database"
+msgstr "veritabanında Form gönderimleri yok"
+
+#: CF7DBPlugin.php:495
+msgid "Google Login for Upload"
+msgstr "Yüklemek için Google Giriş"
+
+#: CF7DBPlugin.php:504
+msgid "Cannot perform operation because jQuery is not loaded in this page"
+msgstr "JQuery Bu sayfada yüklü olmadığı için işlemi olmaz"
+
+#: CF7DBPlugin.php:543
+msgid "Export"
+msgstr "ihracat"
+
+#: CF7DBPlugin.php:553
+msgid "Delete All This Form's Records"
+msgstr "Bu Formu Rekorlarınin Tümünü Sil"
+
+#: CF7DBPlugin.php:611
+msgid "Did you know: This plugin captures data from both these plugins:"
+msgstr "Bunu biliyor muydunuz: Bu, plugin bu iki plugin'den data alabilir:"
+
+#: CF7DBPlugin.php:620
+msgid "Did you know: You can add this data to your posts and pages using these shortcodes:"
+msgstr "Bunu biliyor muydunuz: Siz postalarınıza bu verileri bu shortcodelarla ekleyebilirsiniz:"
+
+#: CF7DBPlugin.php:645
+msgid "Cancel"
+msgstr "Iptal"
+
+#: CF7DBPlugin.php:647
+msgid "Upload"
+msgstr "Yükle"
+
+#: getFile.php:39
+msgid "Missing form parameters"
+msgstr "Eksik form parametreleri"
+
+#: getFile.php:44
+msgid "No such file."
+msgstr "Böyle bir dosya yok"
+
+#: CFDBShortCodeLoaderSecurityCheck.php:34
+msgid "Insufficient privileges to display data from form: "
+msgstr "Görüntülemek için yetersiz yetki:"
+
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension.pot b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension.pot
new file mode 100644
index 00000000..b7054bdb
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/languages/contact-form-7-to-database-extension.pot
@@ -0,0 +1,418 @@
+# Copyright (C) 2010
+# This file is distributed under the same license as the package.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/contact-form-7-to-database-"
+"extension\n"
+"POT-Creation-Date: 2011-05-25 20:54:01+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2010-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
+
+#: CFDBView.php:63
+msgid "Rate this Plugin"
+msgstr ""
+
+#: CFDBView.php:69 CFDBViewShortCodeBuilder.php:63
+#: CFDBViewShortCodeBuilder.php:522
+msgid "Documentation"
+msgstr ""
+
+#: CFDBView.php:75
+msgid "Support"
+msgstr ""
+
+#: CFDBView.php:81
+msgid "Privacy Policy"
+msgstr ""
+
+#: CF7DBPluginExporter.php:33
+msgid "Error: No \"form\" parameter submitted"
+msgstr ""
+
+#: contact-form-7-db.php:21
+msgid ""
+"Error: Contact Form to DB Plugin requires a newer version of PHP to be "
+"running."
+msgstr ""
+
+#: contact-form-7-db.php:23
+msgid "Minimal version of PHP required: "
+msgstr ""
+
+#: contact-form-7-db.php:24
+msgid "Your server's PHP version: "
+msgstr ""
+
+#: contact-form-7-db.php:27
+msgid ""
+"When using the Apache web server, typically you can configure it to use PHP5 "
+"by doing the following:"
+msgstr ""
+
+#: contact-form-7-db.php:29
+msgid ""
+"Locate and edit this file, located at the top directory of your WordPress "
+"installation: "
+msgstr ""
+
+#: contact-form-7-db.php:31
+msgid "Add these two lines to the file:"
+msgstr ""
+
+#: CJ7DBCheckZendFramework.php:72
+msgid "Missing Zend Framework"
+msgstr ""
+
+#: ExportBase.php:177
+msgid "You do not have sufficient permissions to access this data."
+msgstr ""
+
+#: CFDBShortcodeExportUrl.php:62 CFDBViewWhatsInDB.php:212
+msgid "Export"
+msgstr ""
+
+#: CF7DBOptionsManager.php:278 CF7DBPlugin.php:276
+#: ExportToGoogleLiveData.php:31
+msgid "You do not have sufficient permissions to access this page."
+msgstr ""
+
+#: CF7DBOptionsManager.php:296
+msgid "System Settings"
+msgstr ""
+
+#: CF7DBOptionsManager.php:298
+msgid "System"
+msgstr ""
+
+#: CF7DBOptionsManager.php:299
+msgid "PHP Version"
+msgstr ""
+
+#: CF7DBOptionsManager.php:300
+msgid "MySQL Version"
+msgstr ""
+
+#: CF7DBOptionsManager.php:303
+msgid "Settings"
+msgstr ""
+
+#: CF7DBOptionsManager.php:328
+msgid "Save Changes"
+msgstr ""
+
+#: CF7DBOptionsManager.php:387 CF7DBPlugin.php:76
+msgid "true"
+msgstr ""
+
+#: CF7DBOptionsManager.php:388 CF7DBPlugin.php:78
+msgid "false"
+msgstr ""
+
+#: CF7DBPlugin.php:48
+msgid "I have donated to this plugin"
+msgstr ""
+
+#: CF7DBPlugin.php:49
+msgid "Capture form submissions from Contact Form 7 Plugin"
+msgstr ""
+
+#: CF7DBPlugin.php:50
+msgid "Capture form submissions Fast Secure Contact Form Plugin"
+msgstr ""
+
+#: CF7DBPlugin.php:51
+msgid "Can See Submission data"
+msgstr ""
+
+#: CF7DBPlugin.php:53
+msgid "Can See Submission when using shortcodes"
+msgstr ""
+
+#: CF7DBPlugin.php:55
+msgid "Can Edit/Delete Submission data"
+msgstr ""
+
+#: CF7DBPlugin.php:57
+msgid "Maximum number of rows to retrieve from the DB for the Admin display"
+msgstr ""
+
+#: CF7DBPlugin.php:58
+msgid "Use Javascript-enabled tables in Admin Database page"
+msgstr ""
+
+#: CF7DBPlugin.php:59
+msgid "Show line breaks in submitted data table"
+msgstr ""
+
+#: CF7DBPlugin.php:60
+msgid "Use Custom Date-Time Display Format (below)"
+msgstr ""
+
+#: CF7DBPlugin.php:61
+msgid "Date-Time Display Format"
+msgstr ""
+
+#: CF7DBPlugin.php:62
+msgid "Export URLs instead of file names for uploaded files"
+msgstr ""
+
+#: CF7DBPlugin.php:63
+msgid "Do not save fields in DB named (comma-separated list, no spaces)"
+msgstr ""
+
+#: CF7DBPlugin.php:64
+msgid "Do not save forms in DB named (comma-separated list, no spaces)"
+msgstr ""
+
+#: CF7DBPlugin.php:65
+msgid "Save Cookie Data with Form Submissions"
+msgstr ""
+
+#: CF7DBPlugin.php:66
+msgid ""
+"Save only cookies in DB named (comma-separated list, no spaces, and above "
+"option must be set to true)"
+msgstr ""
+
+#: CF7DBPlugin.php:67
+msgid "Show the query used to display results"
+msgstr ""
+
+#: CF7DBPlugin.php:68
+msgid "Drop this plugin's Database table on uninstall"
+msgstr ""
+
+#: CF7DBPlugin.php:81
+msgid "Administrator"
+msgstr ""
+
+#: CF7DBPlugin.php:83
+msgid "Editor"
+msgstr ""
+
+#: CF7DBPlugin.php:85
+msgid "Author"
+msgstr ""
+
+#: CF7DBPlugin.php:87
+msgid "Contributor"
+msgstr ""
+
+#: CF7DBPlugin.php:89
+msgid "Subscriber"
+msgstr ""
+
+#: CF7DBPlugin.php:91
+msgid "Anyone"
+msgstr ""
+
+#: CF7DBPlugin.php:282
+msgid "Missing form parameters"
+msgstr ""
+
+#: CF7DBPlugin.php:286
+msgid "No such file."
+msgstr ""
+
+#: CF7DBPlugin.php:318 CF7DBPlugin.php:338
+msgid "Database Options"
+msgstr ""
+
+#: CF7DBPlugin.php:336 CF7DBPlugin.php:511
+msgid "Database"
+msgstr ""
+
+#: CF7DBPlugin.php:340
+msgid "Build Short Code"
+msgstr ""
+
+#: CF7DBPlugin.php:342
+msgid "FAQ"
+msgstr ""
+
+#: CF7DBPlugin.php:519
+msgid "Database Short Code"
+msgstr ""
+
+#: ExportToGoogleLiveData.php:170
+msgid "How to Set up Google Spreadsheet to pull data from WordPress"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:43
+msgid "No form submissions in the database"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:102 CFDBViewShortCodeBuilder.php:507
+msgid "* Select a form *"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:138
+msgid "Google Login for Upload"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:147
+msgid "Cannot perform operation because jQuery is not loaded in this page"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:187 CFDBViewShortCodeBuilder.php:668
+msgid "Excel Internet Query"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:190 CFDBViewShortCodeBuilder.php:659
+msgid "Excel CSV (UTF8-BOM)"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:193 CFDBViewShortCodeBuilder.php:662
+msgid "Excel TSV (UTF16LE-BOM)"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:196 CFDBViewShortCodeBuilder.php:665
+msgid "Plain CSV (UTF-8)"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:199
+msgid "Google Spreadsheet"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:202
+msgid "Google Spreadsheet Live Data"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:205
+msgid "HTML"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:208
+msgid "JSON"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:223
+msgid "Delete All This Form's Records"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:307
+msgid "Did you know: This plugin captures data from both these plugins:"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:318
+msgid ""
+"Did you know: You can add this data to your posts and pages using these "
+"shortcodes:"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:332
+msgid "Would you like to help translate this plugin into your language?"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:334
+msgid "How to create a translation"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:345
+msgid "Query:"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:367
+msgid "Cancel"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:369
+msgid "Upload"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:390
+msgid "next »"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:391
+msgid "« prev"
+msgstr ""
+
+#: CFDBViewWhatsInDB.php:408
+msgid "Returned entries %s to %s of %s entries in the database"
+msgstr ""
+
+#: CFDBViewShortCodeBuilder.php:151
+msgid "Error: \""
+msgstr ""
+
+#: CFDBViewShortCodeBuilder.php:153
+msgid "\" should not contain double-quotes (\")"
+msgstr ""
+
+#: CFDBViewShortCodeBuilder.php:200
+msgid "Error: no form is chosen"
+msgstr ""
+
+#: CFDBViewShortCodeBuilder.php:221
+msgid ""
+"Warning: \"search\" field ignored because \"filter\" is used (use one but "
+"not both)"
+msgstr ""
+
+#: CFDBViewShortCodeBuilder.php:233
+msgid ""
+"Error: \"limit\": if you provide a value for \"Start Row\" then you must "
+"also provide a value for \"Num Rows\""
+msgstr ""
+
+#: CFDBViewShortCodeBuilder.php:237
+msgid "Error: \"limit\": \"Num Rows\" must be a positive integer"
+msgstr ""
+
+#: CFDBViewShortCodeBuilder.php:244
+msgid "Error: \"limit\": \"Start Row\" must be a positive integer"
+msgstr ""
+
+#: CFDBViewShortCodeBuilder.php:494
+msgid "* Select a short code *"
+msgstr ""
+
+#: CFDBViewShortCodeBuilder.php:517
+msgid "Reset"
+msgstr ""
+
+#: CFDBViewShortCodeBuilder.php:525
+msgid "Which fields/columns do you want to display?"
+msgstr ""
+
+#: CFDBViewShortCodeBuilder.php:538
+msgid "Which rows/submissions do you want to display?"
+msgstr ""
+
+#: CFDBViewShortCodeBuilder.php:584
+msgid "HTML Table Formatting"
+msgstr ""
+
+#: CFDBViewShortCodeBuilder.php:599
+msgid "DataTable Options"
+msgstr ""
+
+#: CFDBViewShortCodeBuilder.php:604
+msgid "JSON Options"
+msgstr ""
+
+#: CFDBViewShortCodeBuilder.php:620
+msgid "VALUE Options"
+msgstr ""
+
+#: ExportToGoogleSS.php:62
+msgid "Login Failed"
+msgstr ""
+
+#: ExportToGoogleSS.php:101
+msgid "New Google Spreadsheet"
+msgstr ""
+
+#: ExportToGoogleSS.php:110
+msgid "Error"
+msgstr ""
+
+#: ExportToHtmlTable.php:158
+msgid "Delete"
+msgstr ""
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/license.txt b/src/wp-content/plugins/contact-form-7-to-database-extension/license.txt
new file mode 100644
index 00000000..3d90694a
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/license.txt
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ Copyright (C)
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+ .
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
\ No newline at end of file
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/readme.txt b/src/wp-content/plugins/contact-form-7-to-database-extension/readme.txt
new file mode 100644
index 00000000..8483924f
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/readme.txt
@@ -0,0 +1,207 @@
+=== Contact Form 7 to Database Extension ===
+Contributors: msimpson
+Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=NEVDJ792HKGFN&lc=US&item_name=Wordpress%20Plugin&item_number=cf7%2dto%2ddb%2dextension¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted
+Tags: contact form,database
+Requires at least: 3.0
+Tested up to: 3.1.3
+Stable tag: 1.8.6
+
+Extension to the Contact Form 7 plugin that saves submitted form data to the database.
+
+== Description ==
+
+Saves form submissions to the database that come from Contact Form 7 (CF7) plugin and/or Fast Secure Contact Form (FSCF) plugin.
+
+CF7 and FSCF are great plugins but but were lacking one thing...the ability to save the form data to the database.
+And if you get a lot of form submissions, then you end up sorting through a lot of email.
+This plugin-to-a-plugin provides that functionality.
+
+You will need to have CF7 and/or FSCF installed along with this plugin.
+When using CF7, this plugin also puts a menu item in the Administration Plugins menu where you can see the data in the database.
+When using FSCF, this plugin puts links on its Admin page.
+You can also use the [cfdb-html], [cfdb-table], [cfdb-datatable], [cfdb-value] and [cfdb-json] shortcodes to display the data on a non-admin page on your site.
+
+Disclaimer: I am not the maker of Contact Form 7 nor Fast Secure Contact Form and am not associated with the development of those plugins.
+
+== Installation ==
+
+1. Your WordPress site must be running PHP5 or better. This plugin will fail to activate if your site is running PHP4.
+1. Be sure that Contact Form 7 and/or Fast Secure Contact Form is installed and activated (this is an extension to them)
+1. Fast Secure Contact Form should be at least version 2.9.7
+
+Notes:
+
+* Installing this plugin creates its own table. If you uninstall it, it will delete its table and any data you have in it. (But you can deactivate it without loosing any data).
+* Tested on WP 3.0.1, PHP 5.2.13, MySQL 5.0 (Using 1and1 for hosting)
+
+== Frequently Asked Questions ==
+
+= Where can I find documentation on the plugin? =
+Refer the Plugin Site
+
+
+= Where do I see the data? =
+
+* Contact Form 7 Users: In the admin page, under CF7's top level "Contact" admin menu. Look for "Contact" -> "Database"
+* Fast Secure Contact Form Users: In the admin page, Plugins -> FS Contact Form Option, There is a "Database" link at the top of the page
+* For a direct link, use http:///wp-admin/admin.php?page=CF7DBPluginSubmissions
+
+= Can I display form data on a non-admin web page or in a post? =
+
+Yes, documentation on shortcodes `[cfdb-html]`, `[cfdb-datatable]`, `[cfdb-table]`, `[cfdb-json]` and `[cfdb-value]`, etc.
+
+= What is the name of the table where the data is stored? =
+
+`wp_CF7DBPlugin_SUBMITS`
+Note: if you changed your WordPress MySql table prefix from the default `wp_` to something else, then this table will also have that prefix instead of `wp_` (`$wpdb->prefix`)
+
+= If I uninstall the plugin, what happens to its data in the database? =
+
+The table and all its data are deleted when you uninstall but you can change a setting on the options page to
+prevent it from being deleted. You can always deactivate the plugin without loosing data.
+
+
+== Screenshots ==
+
+1. Admin Panel view of submitted form data
+
+== Changelog ==
+
+= 1.8.7 =
+* [cfdb-htm] now has wpautop option
+* Form input is not always run through stripslashes() regardless of whether or not get_magic_quotes_gpc is on. This is to be consistent with wp_magic_quotes always being called
+
+= 1.8.6 =
+* New shortcode: [cfdb-export-link]
+* Bug fix in JSON output
+
+= 1.8.5 =
+* Added Shortcode builder page
+* [cf7db-count] shortcode now supports counting all forms using form="*" or a list of forms using form="form1,form2,form3"
+* [cf7db-html] now has "filelinks" option useful for displaying image uploads.
+* Added options to turn on/off capturing form submissions from CF7 and FSCF
+
+= 1.8.4 =
+* Added cfdb_submit hook. See http://cfdbplugin.com/?page_id=377
+* Added delimiter option for [cfdb-value] shortcode, e.g. [cfdb-value delimiter=',']
+* Bug fix related to cfdb-value when not used as a shortcode (it was not observing show & hide options)
+* Now including DataTables distribution inside this distribution so that page does not reference scripts from another site (so sites using https have everything encrypted on the page)
+* In [cfdb-html] shortcode, now removing undesired leading "br" tag and ending "p" tag that WordPress injects. This was messing up table rows (tr tags) in the shortcode because WP was injecting line breaks between the rows.
+
+= 1.8.3 =
+* Minor bug fixes.
+
+= 1.8.2 =
+* Minor bug fixes.
+* Added option to not delete data on uninstall
+
+= 1.8.1 =
+* Fixed bug introduced in 1.8 where deleting individual rows from the admin page did nothing.
+
+= 1.8 =
+* New shortcodes [cfdb-html] and [cfdb-count]
+* New Shortcode option: 'limit'
+* New Shortcode option: 'orderby'
+* Performance/memory enhancements to enable plugin to handle large data volumes
+* Now capturing form submission times with microseconds to avoid collision of two submissions during the same second
+* Fixed to work with installations where wp-content is not at the standard location
+* Shortcode "show" and "hide" values can now use regular expressions to identify columns
+* Option to show database query text on Admin page
+
+= 1.7 =
+* Creating an export from the admin panel now filters rows based on text in the DataTable "Search" field.
+* [cfdb-json] now has "format" option.
+* Fixed bug where "Submitted" column would sometimes appear twice in shortcodes
+* Now can filter on "Submitted" column.
+* Admin Database page is now blank by default and you have to select a form to display.
+
+= 1.6.5 =
+* Now fully supports internationalization (i18n) but we need people to contribute more translation files.
+* DataTables (including those created by shortcodes) will automatically i18n based on translations available from DataTables.net
+* Italian translation courtesy of Gianni Diurno
+* Turkish translation courtesy of Oya Simpson
+* Admin page DataTable: removed horizontal scrolling because headers do not scroll with columns properly
+* Updated license to GPL3 from GPL2
+
+= 1.6.4 =
+* Bug fix: Fixed bug causing FireFox to not display DataTables correctly.
+
+= 1.6.3 =
+* Bug fix: Handling problem where user is unable to export from Admin page because jQuery fails to be loaded.
+
+= 1.6.2 =
+* Bug fix: avoiding inclusion of DataTables CSS in global admin because of style conflicts & efficiency
+
+= 1.6.1 =
+* Bug fix in CSV Exports where Submitted time format had a comma in it, the comma was being interpreted as a
+field delimiter.
+* Accounting for local timezone offset in display of dates
+
+= 1.6 =
+* Admin page for viewing data is not sortable and filterable
+* New shortcode: [cfdb-datatable] to putting sortable & filterable tables on posts and pages.
+ This incorporates http://www.datatables.net
+* Option for display of localized date-time format for Submitted field based on WP site configuration in
+"Database Options" -> "Use Custom Date-Time Display Format"
+* Option to save Cookie data along with the form data. "Field names" of cookies will be "Cookie "
+See "Database Options" -> "Save Cookie Data with Form Submissions" and "Save only cookies in DB named"
+
+= 1.5 =
+* Now works with Fast Secure Contact Form (FSCF)
+* New shortcode `[cfdb-value]`
+* New shortcode `[cfdb-json]`
+* Renamed shortcode `[cf7db-table]` to `[cfdb-table]` (dropped the "7") but old one still works.
+* Added option to set roles that can see data when using `[cfdb-table]` shortcode
+* Can now specify per-column CSS for `[cfdb-table]` shortcode table (see FAQ)
+* Fixed bug with `[cfdb-table]` shortcode where the table aways appeared at the top of a post instead of embedded with the rest of the post text.
+
+= 1.4.5 =
+* Added a PHP version check. This Plugin Requires PHP5 or later. Often default configurations are PHP4. Now a more informative error is given when the user tries to activate the plugin with PHP4.
+
+= 1.4.4 =
+* If user is logged in when submitting a form, 'Submitted Login' is captured
+* `[cfdb-table]` shortcode options for filtering rows including using user variables (see FAQ)
+* `[cfdb-table]` shortcode options for CSS
+* Can exclude forms from being saved to DB by name
+
+= 1.4.2 =
+* Added `[cf7db-table]` shortcode to incorporate form data on regular posts and pages. Use `[cf7db-table form="your-form"]` with optional "show" and "hide: [cf7db-table form="your-form" show="field1,field2,field3"] (optionally show selected fields), [cf7db-table form="your-form" hide="field1,field2,field3"] (optionally hide selected fields)
+
+= 1.4 =
+* Added export to Google spreadsheet
+* Now saves files uploaded via a CF7 form. When defining a file upload in CF7, be sure to set a file size limit. Example: [file upload limit:10mb]
+* Made date-time format configurable.
+* Can specify field names to be excluded from being saved to the DB.
+* In Database page, the order of columns in the table follows the order of fields from the last form submitted.
+
+= 1.3 =
+* Added export to Excel Internet Query
+* "Submitted" now shows time with timezone instead of just the date.
+* The height of cells in the data display are limited to avoid really tall rows. Overflow cells will get a scroll bar.
+* Protection against HTML-injection
+* Option to show line breaks in multi-line form submissions
+* Added POT file for i18n
+
+= 1.2.1 =
+* Option for UTF-8 or UTF-16LE export. UTF-16LE works better for MS Excel for some people but does it not preserve line breaks inside a form entry.
+
+= 1.2 =
+* Admin menu now appears under CF7's "Contact" top level menu
+* Includes an Options page to configure who can see and delete submitted data in the database
+* Saves data in DB table as UTF-8 to support non-latin character encodings.
+* CSV Export now in a more Excel-friendly encoding so it can properly display characters from different languages
+
+= 1.1 =
+* Added Export to CSV file
+* Now can delete a row
+
+= 1.0 =
+* Initial Revision.
+
+== Upgrade Notice ==
+
+= 1.6 =
+New cool DataTable
+
+= 1.5 =
+Now works with Fast Secure Contact Form . Plus more and better shortcodes.
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/screenshot-1.png b/src/wp-content/plugins/contact-form-7-to-database-extension/screenshot-1.png
new file mode 100644
index 00000000..023ef132
Binary files /dev/null and b/src/wp-content/plugins/contact-form-7-to-database-extension/screenshot-1.png differ
diff --git a/src/wp-content/plugins/contact-form-7-to-database-extension/uninstall.php b/src/wp-content/plugins/contact-form-7-to-database-extension/uninstall.php
new file mode 100644
index 00000000..a3eadfe9
--- /dev/null
+++ b/src/wp-content/plugins/contact-form-7-to-database-extension/uninstall.php
@@ -0,0 +1,29 @@
+.
+*/
+
+if (!defined('ABSPATH') && !defined('WP_UNINSTALL_PLUGIN')) {
+ exit();
+}
+
+require_once('CF7DBPlugin.php');
+$aPlugin = new CF7DBPlugin();
+$aPlugin->uninstall();
+
diff --git a/src/wp-content/plugins/ltw-testimonials/css/style_admin.css b/src/wp-content/plugins/ltw-testimonials/css/style_admin.css
new file mode 100644
index 00000000..84b18f01
--- /dev/null
+++ b/src/wp-content/plugins/ltw-testimonials/css/style_admin.css
@@ -0,0 +1,36 @@
+#ltw_tes_quick_links {
+ text-align: right;
+ margin-top: -1.6em;
+ font-size: 0.9em;
+}
+
+div.pagination {
+ padding: 3px;
+ margin: 3px;
+ text-align:center;
+}
+div.pagination a {
+ padding: 2px 5px 2px 5px;
+ margin: 2px;
+ border: 1px solid #AAAADD;
+ text-decoration: none;
+ color: #000099;
+}
+div.pagination a:hover, div.digg a:active {
+ border: 1px solid #000099;
+ color: #000;
+}
+div.pagination span.current {
+ padding: 2px 5px 2px 5px;
+ margin: 2px;
+ border: 1px solid #000099;
+ font-weight: bold;
+ background-color: #000099;
+ color: #FFF;
+}
+div.pagination span.disabled {
+ padding: 2px 5px 2px 5px;
+ margin: 2px;
+ border: 1px solid #EEE;
+ color: #DDD;
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/ltw-testimonials/images/blank.png b/src/wp-content/plugins/ltw-testimonials/images/blank.png
new file mode 100644
index 00000000..ef426c15
Binary files /dev/null and b/src/wp-content/plugins/ltw-testimonials/images/blank.png differ
diff --git a/src/wp-content/plugins/ltw-testimonials/images/icon.png b/src/wp-content/plugins/ltw-testimonials/images/icon.png
new file mode 100644
index 00000000..9566ba4c
Binary files /dev/null and b/src/wp-content/plugins/ltw-testimonials/images/icon.png differ
diff --git a/src/wp-content/plugins/ltw-testimonials/images/icon32.png b/src/wp-content/plugins/ltw-testimonials/images/icon32.png
new file mode 100644
index 00000000..af6bd852
Binary files /dev/null and b/src/wp-content/plugins/ltw-testimonials/images/icon32.png differ
diff --git a/src/wp-content/plugins/ltw-testimonials/js/ajax.js b/src/wp-content/plugins/ltw-testimonials/js/ajax.js
new file mode 100644
index 00000000..560175d7
--- /dev/null
+++ b/src/wp-content/plugins/ltw-testimonials/js/ajax.js
@@ -0,0 +1,45 @@
+jQuery(document).ready(function($) {
+ $('.ltw_tes_show_in_widget').click(function(){
+ var clicked_id = $(this).val();
+ var item_checked = false;
+
+ $('#ltw_waiting_'+clicked_id).show();
+
+ if ($(this).attr("checked") == true) {
+ item_checked = true;
+ }
+
+ $.post(
+ ltw_tes_ajax.ajaxurl,
+ {
+ action: 'ltw_tes_widget_visible',
+ id: $(this).val(),
+ nonce: ltw_tes_ajax.nonce,
+ checked: item_checked
+ },
+ function(data) {
+ if (data == clicked_id) {
+ $('#ltw_waiting_'+clicked_id).hide();
+ }
+ }
+ );
+ });
+
+ $('.ltw_tes_update').click(function(){
+ var clicked_id = $(this).attr('id');
+ $('#waiting_order_'+clicked_id).show();
+
+ $.post(
+ ltw_tes_ajax.ajaxurl,
+ {
+ action: 'ltw_tes_update_order',
+ id: clicked_id.replace("update_", ""),
+ nonce: ltw_tes_ajax.nonce,
+ order: $('#order_'+clicked_id).val()
+ },
+ function(data) {
+ $('#waiting_order_'+clicked_id).hide();
+ }
+ );
+ });
+});
\ No newline at end of file
diff --git a/src/wp-content/plugins/ltw-testimonials/js/js_quicktags.js b/src/wp-content/plugins/ltw-testimonials/js/js_quicktags.js
new file mode 100644
index 00000000..c9d29baf
--- /dev/null
+++ b/src/wp-content/plugins/ltw-testimonials/js/js_quicktags.js
@@ -0,0 +1,720 @@
+// JS QuickTags version 1.3.1
+//
+// Copyright (c) 2002-2008 Alex King
+// http://alexking.org/projects/js-quicktags
+//
+// Thanks to Greg Heo for his changes
+// to support multiple toolbars per page.
+//
+// Licensed under the LGPL license
+// http://www.gnu.org/copyleft/lesser.html
+//
+// **********************************************************************
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// **********************************************************************
+//
+// This JavaScript will insert the tags below at the cursor position in IE and
+// Gecko-based browsers (Mozilla, Camino, Firefox, Netscape). For browsers that
+// do not support inserting at the cursor position (older versions of Safari,
+// OmniWeb) it appends the tags to the end of the content.
+//
+// Pass the ID of the
";
+ newLI.id = newItemID;
+ UL.appendChild(newLI);
+ js_multi_item_count[ulID]++;
+ js_multi_item_init(ulID);
+}
+function js_multi_item_remove(itemID){
+ var listItem = document.getElementById(itemID);
+ listItem.parentNode.removeChild(listItem);
+}
+function js_multi_item_get(ulID,itemCallback){
+ var UL = document.getElementById(ulID);
+ var arr = [];
+ var itemValue = "";
+ for(var i=0;i=0;i--){
+ if(typeof UL.childNodes[i].id != 'undefined'){
+ js_multi_item_remove(UL.childNodes[i].id);
+ }
+ }
+}
+
+function js_multi_item_text_entry(ulID, getcallback, setcallback){
+ var UL = document.getElementById(ulID);
+ var listItems = js_multi_item_get(ulID, getcallback);
+ var listItemsText = "";
+ for(var x=0; x0) listItemsText += ", ";
+ listItemsText += listItems[x];
+ }
+ var newListItemsText = prompt(fm_I18n.enter_items_separated_by_commas, listItemsText);
+
+ var neverHappens = "@%#$*&))("
+ newListItemsText = newListItemsText.replace(/\\,/, neverHappens);
+ newListItems = newListItemsText.split(",");
+
+ js_multi_item_clear(ulID);
+
+ var tempStr;
+ for(var x=0; x' + fm_getItemSelect(id + '-test-itemID-' + index, itemID) + '';
+ str += '' + fm_getTestSelect(id + '-test-' + index, test) + ' ';
+*/
+
+function fm_addConditionItem(id){
+ var listUL = document.getElementById(id + '-items');
+ var newLI = document.createElement('li');
+
+ var count = document.getElementById(id + '-item-count').value++;
+
+ newLI.className = "condition-item";
+ newLI.innerHTML = fm_getItemHTML(id, '', count);
+ newLI.id = id + '_item_li_' + count;
+
+ listUL.appendChild(newLI);
+
+ Sortable.create(id + '-items');
+}
+
+/*
+
+Rule types:
+
+onlyshowif - only show the listed elements if X
+showif - set the listed elements to 'show' if X
+hideif - set the listed elements to 'hide' if X
+addrequireif - make the listed elements required if X
+removerequireif - make the listed elements not required if X
+requiregroup - a list of elements collectively considered required, as in only one of the group needs to be populated
+
+eq
+neq
+lt
+gt
+lteq
+gteq
+checked
+unchecked
+*/
+
+
+/* helpers */
+
+
+
+function fm_getNewConditionHTML(conditionInfo){
+ var str = ""
+ var temp;
+
+ str += '';
+ str += '';
+ str += '
';
+
+ str += '';
+ str += '';
+ str += '
';
+
+ for(var x=0;x' + fm_getTestHTML(conditionInfo.id, conditionInfo.tests[x], x) + '';
+//alert('bar');
+ }
+
+ if(conditionInfo.tests.length == 0)
+ str += '' + fm_getTestHTML(conditionInfo.id, false, x) + ' ';
+
+ str += ' ';
+ str += '
';
+ str += '
';
+ str += '
';
+ str += '
';
+
+ str += '';
+ str += fm_I18n.applies_to + ':';
+ str += '
';
+ for(var x=0;x' + fm_getItemHTML(conditionInfo.id, conditionInfo.items[x], x) + '';
+
+ if(conditionInfo.items.length == 0)
+ str += '' + fm_getItemHTML(conditionInfo.id, false, x) + ' ';
+
+ str += ' ';
+ str += '
';
+ str += '
';
+ str += '
';
+
+ str += ' '
+
+ str += '
';
+ str += '
';
+
+ return str;
+}
+
+function fm_getTestHTML(id, testInfo, index){
+ var str = "";
+ var itemID = "";
+ var test = "";
+ var connective = ( index == 0 ? "" : "and" );
+ var val = "";
+ if(testInfo != false){
+ itemID = testInfo.unique_name;
+ test = testInfo.test;
+ connective = testInfo.connective;
+ val = testInfo.val;
+ }
+
+ str += '';
+
+ return str;
+}
+
+function fm_getItemHTML(id, itemID, index){
+ return '';
+}
+
+function fm_getRuleSelect(id, rule){
+ var str = "";
+
+ var ruleKeys = ['none', 'onlyshowif', 'showif', 'hideif', 'requireonlyif', 'addrequireif', 'removerequireif'];
+ var ruleNames = [fm_I18n.choose_a_rule_type, fm_I18n.only_show_elements_if, fm_I18n.show_elements_if, fm_I18n.hide_elements_if, fm_I18n.only_require_elements_if, fm_I18n.require_elements_if, fm_I18n.do_not_require_elements_if];
+
+ str += fm_getSelect(id, ruleKeys, ruleNames, rule);
+
+ return str;
+}
+
+function fm_getTestSelect(id, test){
+ var keys = ['', 'eq', 'neq', 'lt', 'gt', 'lteq', 'gteq', 'isempty', 'nisempty'];
+ var names = [fm_I18n.empty_test, fm_I18n.equals, fm_I18n.does_not_equal, fm_I18n.is_less_than, fm_I18n.is_greater_than, fm_I18n.is_lt_or_equal_to, fm_I18n.is_gt_or_equal_to, fm_I18n.is_empty, fm_I18n.is_not_empty];
+
+ return fm_getSelect(id, keys, names, test);
+}
+
+function fm_getCheckboxTestSelect(id, test){
+ var keys = ['', 'checked', 'unchecked'];
+ var names = [fm_I18n.empty_test, fm_I18n.is_checked, fm_I18n.is_not_checked];
+
+ return fm_getSelect(id, keys, names, test);
+}
+
+function fm_getItemSelect(id, itemID){
+ var itemIDs = [''];
+ var itemNames = ['...'];
+ for(var x=0;x';
+ for(var x=0;x' + names[x] + '';
+ }
+ str += '';
+ return str;
+}
+
+/* functions to register form items with javascript */
+
+var fm_form_items = [];
+
+function fm_register_form_item(itemInfo){
+ fm_form_items.push(itemInfo);
+}
+
+function fm_getItemType(itemID){
+ for(var x=0;x0) IDstr += ",";
+ IDstr += currCondID;
+
+ currTestUL = document.getElementById(currCondID + '-tests');
+
+ str = "";
+ for(var y=0;y0) str += ",";
+ str += id.substr(id.indexOf('_test_li_') + 9);
+ }
+
+ document.getElementById(currCondID + '-test-order').value = str;
+ }
+ document.getElementById('fm-conditions-ids').value = IDstr;
+
+ return true;
+}
+
+
+////////////////////////////////////////////////////////////
+//// HELPERS ///////////////////////////////////////////////
+
+function fm_trim(str){
+ return str.replace(/^\s+|\s+$/g,"");
+}
+function fm_fix_str(str){
+ return str.replace(/[\\]/g,'\\\\\\\\').replace(/[']/g,'\\\\\\$&');
+}
+function fm_htmlEntities(str) {
+ return String(str).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"');
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/js/userscripts.js b/src/wp-content/plugins/wordpress-form-manager/js/userscripts.js
new file mode 100644
index 00000000..cf431567
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/js/userscripts.js
@@ -0,0 +1,158 @@
+var fm_registered_form_items = [];
+var fm_registered_forms = [];
+
+/* PHP passes the form structure to JS using 'fm_register_form_item' and 'fm_register_form' */
+//itemDef is an 'associative array', the item's database entry (unpacked)
+function fm_register_form_item(formID, itemDef){
+ itemDef.formID = formID;
+ fm_registered_form_items.push(itemDef);
+}
+
+//adds the appropriate event handlers to the form: 'fm_submit_onclick' becomes the onclick event handler for any item with the name 'fm_form_submit'
+function fm_register_form(formID){
+ var formElement = document.getElementById('fm-form-' + formID);
+ var submitButtons = document.getElementsByName('fm_form_submit');
+ for(x=0;x /g, '>').replace(/"/g, '"');
+}
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/languages/wordpress-form-manager-it_IT.mo b/src/wp-content/plugins/wordpress-form-manager/languages/wordpress-form-manager-it_IT.mo
new file mode 100644
index 00000000..16a1dfd4
Binary files /dev/null and b/src/wp-content/plugins/wordpress-form-manager/languages/wordpress-form-manager-it_IT.mo differ
diff --git a/src/wp-content/plugins/wordpress-form-manager/languages/wordpress-form-manager-it_IT.po b/src/wp-content/plugins/wordpress-form-manager/languages/wordpress-form-manager-it_IT.po
new file mode 100644
index 00000000..ee7f6207
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/languages/wordpress-form-manager-it_IT.po
@@ -0,0 +1,942 @@
+# Copyright (C) 2010 Form Manager
+# This file is distributed under the same license as the Form Manager package.
+msgid ""
+msgstr ""
+"Project-Id-Version: Form Manager 1.4.15\n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/wordpress-form-manager\n"
+"POT-Creation-Date: 2011-05-27 19:24:47+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2011-05-31 08:47+0100\n"
+"Last-Translator: Andrea Bersi\n"
+"Language-Team: \n"
+
+#: wordpress-form-manager.php:53
+msgid "Form Manager requires WordPress version 3.0 or higher"
+msgstr "Form Manager richiede WordPress version 3.0 or higher"
+
+#: wordpress-form-manager.php:57
+msgid "Form Manager requires PHP version 5.0 or higher"
+msgstr "Form Manager richiede PHP version 5.0 or higher"
+
+#: wordpress-form-manager.php:219
+#: main.php:71
+#: main.php:104
+msgid "Forms"
+msgstr "Moduli"
+
+#: wordpress-form-manager.php:220
+#: main.php:140
+msgid "Edit"
+msgstr "Modifica"
+
+#: wordpress-form-manager.php:221
+#: main.php:142
+msgid "Data"
+msgstr "Dati"
+
+#: wordpress-form-manager.php:226
+#: wordpress-form-manager.php:239
+#: types/recaptcha.php:67
+#: editsettingsadv.php:126
+msgid "Settings"
+msgstr "Impostazioni"
+
+#: wordpress-form-manager.php:227
+#: editform.php:191
+msgid "Advanced Settings"
+msgstr "Impostazioni avanzate"
+
+#: wordpress-form-manager.php:229
+msgid "Edit Form - Advanced"
+msgstr "Modifica modulo - Avanzato"
+
+#: wordpress-form-manager.php:317
+msgid "Error: the shortcode '%s' is already in use. (other changes were saved successfully)"
+msgstr "Errore: lo shortcode '%s' è già utilizzato. (le altre modifiche sono state salvate)"
+
+#. translators: this error is given when saving the form, if there was a
+#. problem with the list of e-mails under 'E-Mail Notifications'.
+#: wordpress-form-manager.php:368
+msgid "Error: There was a problem with the notification e-mail list. Other settings were updated."
+msgstr "Errore: c'è stato un problema con la lista delle email di notifica. Le altre modifiche sono state salvate"
+
+#. translators: This error occurs if the save script failed for some reason.
+#: wordpress-form-manager.php:383
+msgid "Error: Save posted an invalid array expression."
+msgstr "Errore: dati non validi"
+
+#: wordpress-form-manager.php:428
+msgid "m-y-d h-i-s"
+msgstr "m-y-d h-i-s"
+
+#: wordpress-form-manager.php:523
+msgid "Failed to open file"
+msgstr "Impossibile aprire il file"
+
+#. translators: the following are for the options for the default form display
+#. template
+#: templates/fm-form-default.php:59
+msgid "Show border:"
+msgstr "Visualizza bordo:"
+
+#: templates/fm-form-default.php:60
+msgid "Label position:"
+msgstr "Posizione etichetta:"
+
+#: templates/fm-form-default.php:61
+msgid "Labels can be placed to the left or above each field"
+msgstr "Le etichette possono essere situate alla sinistra o sopra ogni campo"
+
+#: templates/fm-form-default.php:62
+msgctxt "template-option"
+msgid "Left"
+msgstr "Sinistra"
+
+#: templates/fm-form-default.php:63
+msgctxt "template-option"
+msgid "Top"
+msgstr "Sopra"
+
+#: templates/fm-form-default.php:64
+msgid "Label width (in pixels):"
+msgstr "Largezza etichetta (in pixels):"
+
+#: templates/fm-form-default.php:65
+msgid "Applies to checkboxes, and when labels are to the left"
+msgstr "Applica ai checkboxes e quando le etichette sono a sinistra"
+
+#: db.php:106
+#: settings.php:24
+msgid "New Form"
+msgstr "Nuovo modulo"
+
+#: db.php:109
+#: settings.php:28
+msgid "\\'%s\\' is required."
+msgstr "\\'%s\\' è obbligatorio."
+
+#: db.php:116
+msgid "Numbers Only"
+msgstr "Solo numeri"
+
+#: db.php:117
+msgid "'%s' must be a valid number"
+msgstr "'%s' deve essere un numero valido"
+
+#: db.php:122
+msgid "Phone Number"
+msgstr "Numero telefono"
+
+#: db.php:123
+msgid "'%s' must be a valid phone number"
+msgstr "'%s' deve essere un numero di telefono valido"
+
+#: db.php:125
+msgid "/^.*[0-9]{3}.*[0-9]{3}.*[0-9]{4}.*$/"
+msgstr "/^.*[0-9]{3}.*[0-9]{3}.*[0-9]{4}.*$/"
+
+#: db.php:129
+msgid "E-Mail"
+msgstr "E-Mail"
+
+#: db.php:130
+msgid "'%s' must be a valid E-Mail address"
+msgstr "'%s' deve essere una email valida"
+
+#: db.php:135
+msgid "Date (MM/DD/YY)"
+msgstr "Data (MM/DD/YY)"
+
+#: db.php:136
+msgid "'%s' must be a date (MM/DD/YY)"
+msgstr "'%s' deve essere una data (MM/DD/YY)"
+
+#: editsettings.php:31
+msgid "Form Manager Settings"
+msgstr "Impoistazioni Form Manager"
+
+#: editsettings.php:33
+#: main.php:141
+#: editformadv.php:75
+msgid "Advanced"
+msgstr "Avanzato"
+
+#: editsettings.php:38
+#: editformadv.php:85
+#: editsettingsadv.php:131
+msgid "Settings Saved."
+msgstr "Impostazioni salvate"
+
+#: editsettings.php:39
+#: editform.php:71
+#: editformadv.php:86
+#: editsettingsadv.php:132
+msgid "Save failed."
+msgstr "Salvataggio fallito"
+
+#: editsettings.php:48
+msgid "Global E-Mail Notifications"
+msgstr "Notifiche email generali"
+
+#: editsettings.php:50
+msgid "These settings will be applied to every form you create."
+msgstr "Queste impostazioni sono valide per ogni modulo creato"
+
+#: editsettings.php:51
+msgid "Send to Administrator"
+msgstr "Invia Amministratore"
+
+#: editsettings.php:52
+msgid "Registered Users"
+msgstr "Utenti registrati"
+
+#: editsettings.php:52
+msgid "A confirmation e-mail will be sent to a registered user only when they submit a form"
+msgstr "Una email di conferma sarà inviata agli utenti registrati solo quando il modulo viene inviato"
+
+#: editsettings.php:55
+msgid "Default Form Settings"
+msgstr "Impostazioni di default modulo"
+
+#: editsettings.php:57
+msgid "Form Title"
+msgstr "Titolo modulo"
+
+#: editsettings.php:58
+msgid "Submit Acknowledgment"
+msgstr "Messaggio di ringraziamento dopo Invio modulo"
+
+#: editsettings.php:59
+msgid "Required Item Message"
+msgstr "Messaggio se campo richiesto"
+
+#: editsettings.php:59
+msgid "This is displayed when a user fails to input a required item. Include '%s' in the message where you would like the item's label to appear."
+msgstr "Viene visualizzato se utente non inserisce il campo. Include la stringa da inserire"
+
+#: editsettings.php:62
+msgid "reCAPTCHA Settings"
+msgstr "Impostazioni reCAPTCHA"
+
+#: editsettings.php:63
+msgid "API Keys for reCAPTCHA can be acquired (for free) by visiting"
+msgstr "API Keys per reCAPTCHA che può essere acquisita gratis visitando"
+
+#: editsettings.php:65
+msgid "reCAPTCHA Public Key"
+msgstr "reCAPTCHA Public Key"
+
+#: editsettings.php:66
+msgid "reCAPTCHA Private Key"
+msgstr "reCAPTCHA Private Key"
+
+#: editsettings.php:67
+msgid "Color Scheme"
+msgstr "Schema colori"
+
+#: editsettings.php:67
+msgid "Red"
+msgstr "Rosso"
+
+#: editsettings.php:67
+msgid "White"
+msgstr "Bianco"
+
+#: editsettings.php:67
+msgid "Black"
+msgstr "Nero"
+
+#: editsettings.php:67
+msgid "Clean"
+msgstr "Pulito"
+
+#: editsettings.php:72
+#: editformadv.php:78
+#: editformadv.php:142
+#: editsettingsadv.php:206
+msgid "Save Changes"
+msgstr "Salva modifiche"
+
+#: types/separator.php:8
+msgid "Separator"
+msgstr "Separatore"
+
+#: types/separator.php:16
+#: types/textarea.php:50
+#: types/list.php:132
+#: types/blank.php:34
+#: types/file.php:80
+#: types/recaptcha.php:73
+#: types/checkbox.php:46
+#: types/text.php:54
+msgid "Label"
+msgstr "Etichetta"
+
+#: types/separator.php:41
+msgid "New Separator"
+msgstr "Nuovo separatore"
+
+#: types/separator.php:42
+#: types/textarea.php:24
+#: types/base.php:102
+#: types/list.php:18
+#: types/note.php:52
+#: types/blank.php:16
+#: types/file.php:19
+#: types/checkbox.php:13
+#: types/text.php:37
+msgid "Item Description"
+msgstr "Descrizione elemento"
+
+#: types/textarea.php:8
+msgid "Text Area"
+msgstr "Area di testo"
+
+#: types/textarea.php:23
+msgid "New Text Area"
+msgstr "Nuova area di testo"
+
+#: types/textarea.php:51
+msgid "Default Value"
+msgstr "Valore di default"
+
+#: types/textarea.php:52
+msgid "Height (in pixels)"
+msgstr "Altezza (in pixels)"
+
+#: types/textarea.php:53
+#: types/list.php:134
+#: types/text.php:56
+msgid "Width (in pixels)"
+msgstr "Larghezza (in pixels)"
+
+#: types/textarea.php:54
+#: types/list.php:135
+#: types/checkbox.php:48
+#: types/text.php:57
+msgid "Required"
+msgstr "Obbligatorio"
+
+#: types/base.php:101
+#: types/blank.php:15
+msgid "Item Label"
+msgstr "Valore etichetta"
+
+#: types/base.php:104
+#: types/blank.php:18
+msgid "Item Nickname"
+msgstr "Valore Nickname"
+
+#: types/list.php:12
+msgid "List"
+msgstr "LIsta"
+
+#: types/list.php:17
+msgid "New List"
+msgstr "Nuova lista"
+
+#: types/list.php:133
+msgid "Style"
+msgstr "Stile"
+
+#: types/list.php:133
+msgid "Dropdown"
+msgstr "Dropdown"
+
+#: types/list.php:133
+msgid "List Box"
+msgstr "List Box"
+
+#: types/list.php:133
+msgid "Radio Buttons"
+msgstr "Bottoni Radio"
+
+#: types/list.php:133
+msgid "Checkboxes"
+msgstr "Checkboxes"
+
+#: types/list.php:136
+msgid "List Items"
+msgstr "Elenco lista"
+
+#: types/note.php:8
+msgid "Note"
+msgstr "Nota"
+
+#: types/note.php:51
+msgid "New Note"
+msgstr "Nuova nota"
+
+#: types/panelhelper.php:74
+msgid "Enter Items as Text"
+msgstr "Inserisci elementi come testo"
+
+#: types/panelhelper.php:79
+msgid "Add"
+msgstr "Aggiungi"
+
+#: types/file.php:9
+msgid "File"
+msgstr "File"
+
+#: types/file.php:18
+msgid "New File Upload"
+msgstr "Nuovo File Upload"
+
+#: types/file.php:39
+msgid "File upload exceeded maximum allowable size."
+msgstr "Il file caricato supera la massima dimensione possibile"
+
+#: types/file.php:42
+msgid "There was an error with the file upload."
+msgstr "Si è verificato un errore con il file caricato"
+
+#: types/file.php:49
+msgid "Cannot be of type"
+msgstr "Non può essere di tipo"
+
+#: types/file.php:54
+msgid "Can only be of types"
+msgstr "Può essere solo di tipo"
+
+#: types/file.php:81
+msgid "Max file size (in kB)"
+msgstr "Dimensione massima del file (in kB)"
+
+#: types/file.php:82
+msgid "Your host restricts uploads to"
+msgstr "Il tuo host limita uploads a"
+
+#: types/file.php:83
+msgid "File Types"
+msgstr "Tipo file"
+
+#: types/file.php:84
+msgid "Enter a list of extensions separated by commas, e.g. \".txt, .rtf, .doc\""
+msgstr "Inserisci lista di estensioni separate da comma, es. \".txt, .rtf, .doc\""
+
+#: types/file.php:85
+msgid "Only allow"
+msgstr "Permetti solo"
+
+#: types/file.php:86
+msgid "Do not allow"
+msgstr "Non permettere"
+
+#: types/file.php:120
+msgid "'Only allow' must be a list of extensions separated by commas"
+msgstr "La lista degli elementi possibili deve essere seprata da comma"
+
+#: types/file.php:124
+msgid "'Do not allow' must be a list of extensions separated by commas"
+msgstr "La lista degli elementi non possibili deve essere seprata da comma"
+
+#: types/recaptcha.php:11
+msgid "reCAPTCHA"
+msgstr "reCAPTCHA"
+
+#: types/recaptcha.php:16
+msgid "(No reCAPTCHA API public key found)"
+msgstr "(Nessuna chiave pubblica reCAPTCHA trovata)"
+
+#: types/recaptcha.php:23
+msgid "The reCAPTCHA was incorrect."
+msgstr "Il codice reCAPTCHA non è corretto"
+
+#: types/recaptcha.php:67
+msgid "You need reCAPTCHA API keys."
+msgstr "Necessiti di una API key reCAPTCHA valida"
+
+#: types/recaptcha.php:67
+msgid "Fix this in"
+msgstr "Fixa in"
+
+#: types/recaptcha.php:68
+msgid "(reCAPTCHA field)"
+msgstr "(campo reCAPTCHA)"
+
+#: types/checkbox.php:8
+msgid "Checkbox"
+msgstr "Checkbox"
+
+#: types/checkbox.php:12
+msgid "New Checkbox"
+msgstr "Nuovo Checkbox"
+
+#: types/checkbox.php:47
+msgid "Checked by Default"
+msgstr "Selezionato di default"
+
+#: types/text.php:16
+msgid "Text"
+msgstr "Testo"
+
+#: types/text.php:36
+msgid "New Text"
+msgstr "Nuovo testo"
+
+#: types/text.php:55
+msgid "Placeholder"
+msgstr "Segnaposto"
+
+#: types/text.php:58
+msgid "Validation"
+msgstr "Validazione"
+
+#: editform.php:64
+#: formdata.php:230
+#: editformadv.php:79
+msgid "Edit Form"
+msgstr "Modifica modulo"
+
+#: editform.php:70
+msgid "Form updated."
+msgstr "Modulo aggiornato."
+
+#: editform.php:86
+msgid "Publish"
+msgstr "Pubblica"
+
+#: editform.php:91
+msgid "Save"
+msgstr "Salva"
+
+#: editform.php:97
+msgid "Cancel Changes"
+msgstr "Annula modifiche"
+
+#: editform.php:112
+msgid "Save Form"
+msgstr "Salva modulo"
+
+#: editform.php:121
+msgid "Submission Data"
+msgstr "Inserimento dati"
+
+#: editform.php:127
+msgid "View Data"
+msgstr "Visualizza Dati"
+
+#. translators: the number of submissions for a form
+#: editform.php:132
+msgid "Submission count:"
+msgstr "Conteggio invii:"
+
+#. translators: label for the date of the most recent submission
+#: editform.php:133
+msgid "Last submission:"
+msgstr "Ultimo invio:"
+
+#: editform.php:143
+msgid "Form Slug"
+msgstr "Slug modulo"
+
+#: editform.php:160
+#: editformadv.php:110
+msgid "E-Mail Notifications"
+msgstr "Notifiche e-mail"
+
+#: editform.php:167
+msgid "Send to (user entry)"
+msgstr "Invia a (inserisci utente)"
+
+#: editform.php:169
+msgid "(none)"
+msgstr "(nessuno)"
+
+#: editform.php:176
+msgid "Make sure the field you choose contains an E-Mail validator"
+msgstr "Assicurati che il campo scelto contenga una validazione di email"
+
+#: editform.php:180
+msgid "Also send notification(s) to"
+msgstr "Inoltre notifica anche a"
+
+#: editform.php:182
+msgid "Enter a list of e-mail addresses separated by commas"
+msgstr "Inserisci lista di indirizzi email separati da comma"
+
+#: editform.php:210
+msgid "Add Form Element:"
+msgstr "Aggiungi elemento del modulo"
+
+#: editform.php:224
+msgid "Insert Saved Form"
+msgstr "INserisci modulo salvato"
+
+#: editform.php:236
+msgid "Insert Fields From:"
+msgstr "Inserisci campo da:"
+
+#: editform.php:243
+msgid "Insert After:"
+msgstr "Inserisci dopo:"
+
+#: editform.php:245
+msgid "(Insert at beginning)"
+msgstr "(Inserisci all'inizio)"
+
+#: editform.php:249
+msgid "(Insert at end)"
+msgstr "(INserisci alal fine)"
+
+#: editform.php:252
+msgid "Load Fields"
+msgstr "Carica campi"
+
+#: editform.php:284
+msgid "Appearance"
+msgstr "Aspetto"
+
+#: editform.php:314
+msgid "Customize"
+msgstr "Personalizzazione"
+
+#: editform.php:318
+msgid "Submit acknowledgement message:"
+msgstr "Messaggio di ringraziamento all'invio del modulo:"
+
+#: editform.php:319
+msgid "This is displayed after the form has been submitted"
+msgstr "E' visualizzato quando il modulo viene spedito"
+
+#: editform.php:324
+msgid "Show summary with acknowledgment:"
+msgstr "Mostra riepilogo insieme al ringraziamento"
+
+#: editform.php:325
+msgid "A summary of the submitted data will be shown along with the acknowledgment message"
+msgstr "Un riepilogo dei dati inseriti nel modulo viene visualizzato insieme al messagio di ringraziamento"
+
+#: editform.php:330
+msgid "Submit button label:"
+msgstr "Etichetta bottone invio:"
+
+#: editform.php:334
+msgid "Required item message:"
+msgstr "Testo del campo obbligatorio:"
+
+#: editform.php:335
+msgid "This is shown if a user leaves a required item blank. The item's label will appear in place of '%s'."
+msgstr "Appare se viene tralasciato un campo obbligatorio. L'etichetta dell'elemento appare al posto di '%s'."
+
+#: main.php:73
+msgid "Are you sure you want to delete:"
+msgstr "Sei sicuro di voler cancellare:"
+
+#: main.php:89
+msgid "Yes"
+msgstr "Si"
+
+#: main.php:90
+#: formdata.php:112
+#: formdata.php:143
+msgid "Cancel"
+msgstr "Annulla"
+
+#: main.php:104
+msgid "Add New"
+msgstr "Aggiungi nuovo"
+
+#: main.php:110
+#: formdata.php:236
+msgid "Bulk Actions"
+msgstr "Azioni di massa"
+
+#: main.php:111
+#: main.php:143
+msgid "Delete"
+msgstr "Cancella"
+
+#: main.php:113
+#: formdata.php:242
+msgid "Apply"
+msgstr "Applica"
+
+#: main.php:123
+#: main.php:130
+#: editsettingsadv.php:145
+msgid "Name"
+msgstr "Nome"
+
+#: main.php:124
+#: main.php:131
+msgid "Slug"
+msgstr "Slug"
+
+#: main.php:140
+#: formdata.php:230
+msgid "Edit this form"
+msgstr "Modifiva questo modulo"
+
+#: main.php:141
+msgid "Advanced form settings"
+msgstr "Impistaioni modulo avanzate"
+
+#: main.php:142
+msgid "View form data"
+msgstr "Vedi i dati del modulo"
+
+#: main.php:143
+msgid "Delete this form"
+msgstr "Cancella modulo"
+
+#. translators: the following is displayed if there are no forms to list
+#: main.php:153
+msgid " No forms yet..."
+msgstr "Nessun modulo ancora creato"
+
+#: formdata.php:111
+#: formdata.php:142
+msgid "Submit Changes"
+msgstr "Applica modifiche"
+
+#: formdata.php:164
+#: formdata.php:181
+msgid "Back to Form Data"
+msgstr "Torna ai dati del modulo"
+
+#: formdata.php:169
+msgid "Data summary:"
+msgstr "Riepilogo dati:"
+
+#: formdata.php:229
+msgid "Download Data (.csv)"
+msgstr "Scarica Dati (.csv)"
+
+#: formdata.php:237
+msgid "Show Summary"
+msgstr "Visualizza sommario"
+
+#: formdata.php:238
+msgid "Delete Selected"
+msgstr "Cancella selezionati"
+
+#: formdata.php:239
+msgid "Delete All Submission Data"
+msgstr "Cancella tutti i dati registrati"
+
+#: formdata.php:240
+msgid "Edit Selected"
+msgstr "Modifica slezionati"
+
+#: formdata.php:258
+msgid "Are you sure you want to delete the selected items?"
+msgstr "Sei sicuro di voler cancellare gli elementi selezionati?"
+
+#: formdata.php:262
+msgid "This will delete all submission data for this form. Are you sure?"
+msgstr "L'operazione cancellerà i dati inviati dai moduli. Confermi?"
+
+#: formdata.php:293
+#: formdata.php:323
+msgid "Timestamp"
+msgstr "Timestamp"
+
+#: formdata.php:296
+#: formdata.php:324
+msgid "User"
+msgstr "Utente"
+
+#: formdata.php:299
+#: formdata.php:325
+msgid "IP Address"
+msgstr "Indirizzo IP"
+
+#: formdata.php:308
+msgid "Download Files"
+msgstr "Download Files"
+
+#: formdata.php:344
+msgid "Download"
+msgstr "Download"
+
+#: editformadv.php:95
+msgid "Behavior"
+msgstr "Funzionamento"
+
+#: editformadv.php:101
+msgid "Behavior Type"
+msgstr "Tipo funzionamento"
+
+#: editformadv.php:101
+msgid "Behavior types other than 'Default' require a registered user"
+msgstr "Altre modalità diverse da 'Default' richiedono un utente registrato"
+
+#: editformadv.php:109
+msgid "Form Display"
+msgstr "Visualizza modulo"
+
+#: editformadv.php:109
+#: editformadv.php:110
+#: editformadv.php:111
+msgid "(use default)"
+msgstr "(usa default)"
+
+#: editformadv.php:111
+msgid "Data Summary"
+msgstr "Riepilogo dati"
+
+#: editformadv.php:115
+msgid "Custom E-Mail Notifications"
+msgstr "Notifiche email personalizzate"
+
+#: editformadv.php:117
+msgid "Use custom e-mail notifications"
+msgstr "Usa notifiche email personalizzate"
+
+#: editformadv.php:118
+msgid "This will override the 'E-Mail Notifications' settings in both the main editor and the plugin settings page with the information entered below"
+msgstr "L'opzione sovrascrive l'impostazione di 'Notifica E-mail' dappertutto cion i valori inseriti sotto"
+
+#: editformadv.php:122
+msgid "Form Item Nicknames"
+msgstr "Nickname del modulo"
+
+#: editformadv.php:124
+msgid "Giving a nickname to form items makes it easier to access their information within custom e-mail notifications and templates"
+msgstr "Attribuendo un nickname al modulo sarà più semplice accedere alle sue informazioni con e-mail di notifica personalizzate e template"
+
+#: editformadv.php:135
+msgid "Publish Submitted Data"
+msgstr "Pubblica dati inseriti"
+
+#: editformadv.php:137
+msgid "Publish submissions as posts"
+msgstr "Pubblica i dati inseriti nel modulo come articoli"
+
+#: editformadv.php:138
+msgid "Post category"
+msgstr "Categoria Articolo"
+
+#: editformadv.php:139
+msgid "Post title"
+msgstr "Titolo Articolo"
+
+#: editformadv.php:149
+msgid "Edit Form Definition:"
+msgstr "Modifica definzione del modulo:"
+
+#: editformadv.php:153
+msgid "Update Form"
+msgstr "Modulo aggiornato"
+
+#: settings.php:26
+msgid "Thank you! Your data has been submitted."
+msgstr "Grazie! I dati inseriti sono stati inviati"
+
+#: settings.php:27
+msgid "Submit"
+msgstr "Invia"
+
+#: settings.php:46
+msgid "Default"
+msgstr "Default"
+
+#: settings.php:47
+msgid "Registered users only"
+msgstr "Solo utenti registrati"
+
+#: settings.php:48
+msgid "Keep only most recent submission"
+msgstr "Mantieni solo invii recenti"
+
+#: settings.php:49
+msgid "Single submission"
+msgstr "Imposta per un solo invio"
+
+#: settings.php:50
+msgid "'User profile' style"
+msgstr "Stile 'Profilo utente'"
+
+#. translators: this will be followed by the name of the template to be removed
+#: editsettingsadv.php:77
+msgid "Are you sure you want to remove"
+msgstr "Sicuro di voler rimuovere?"
+
+#: editsettingsadv.php:81
+msgid "Are you sure? All templates other than the default will be removed."
+msgstr "Confermi? Tutti i templates eccetto quello di default saranno eliminati"
+
+#: editsettingsadv.php:124
+msgid "Form Manager Settings - Advanced"
+msgstr "Impostazioni Form manager - Avanzato"
+
+#: editsettingsadv.php:141
+msgid "Text Validators"
+msgstr "Validatore di testo"
+
+#: editsettingsadv.php:146
+msgid "Error Message"
+msgstr "Messaggio errore"
+
+#: editsettingsadv.php:147
+msgid "Regular Expression"
+msgstr "Espressione regolare (RegExp)"
+
+#: editsettingsadv.php:181
+msgid "Plugin Shortcode"
+msgstr "Plugin Shortcode"
+
+#: editsettingsadv.php:186
+msgid "Default Form Template"
+msgstr "Template di default dei moduli "
+
+#: editsettingsadv.php:187
+msgid "Default E-Mail Template"
+msgstr "Template di default della E-mail"
+
+#: editsettingsadv.php:188
+msgid "Default Summary Template"
+msgstr "Template di default dei dati riassuntivi"
+
+#: editsettingsadv.php:190
+msgid "Reset Templates"
+msgstr "Resetta templates"
+
+#: editsettingsadv.php:198
+msgid "Remove"
+msgstr "Rimuovi"
+
+#. Plugin Name of the plugin/theme
+msgid "Form Manager"
+msgstr "Form Manager"
+
+#. Plugin URI of the plugin/theme
+msgid "http://www.campbellhoffman.com/form-manager/"
+msgstr "http://www.campbellhoffman.com/form-manager/"
+
+#: pages/editform.php:198
+msgid "Auto Redirect"
+msgstr "Redirezionamento"
+
+#: pages/editform.php:204
+msgid "Automatically redirect the user after a successful form submission"
+msgstr "Reindirizza automaticamente l'utente dopo l'invio del form"
+
+#: pages/editform.php:206
+msgid "Enable automatic redirect"
+msgstr "Attiva redirect automatico"
+
+#: pages/editform.php:211
+msgid "Desination page"
+msgstr "Pagina destinazione"
+
+#: pages/editform.php:224
+msgid "Timeout (seconds)"
+msgstr "Timeout (secondi)"
+
+#. Description of the plugin/theme
+msgid "Create custom forms; download entered data in .csv format; validation, required fields, custom acknowledgments;"
+msgstr "Crea moduli personalizzati; download dei dati inseriti in formato csv; validattori, campi richiesti e messaggio di ringraziamento"
+
+#. Author of the plugin/theme
+msgid "Campbell Hoffman"
+msgstr "Campbell Hoffman"
+
+#. Author URI of the plugin/theme
+msgid "http://www.campbellhoffman.com/"
+msgstr "http://www.campbellhoffman.com/"
+
diff --git a/src/wp-content/plugins/wordpress-form-manager/languages/wordpress-form-manager-nl_NL.mo b/src/wp-content/plugins/wordpress-form-manager/languages/wordpress-form-manager-nl_NL.mo
new file mode 100644
index 00000000..bc74b2d3
Binary files /dev/null and b/src/wp-content/plugins/wordpress-form-manager/languages/wordpress-form-manager-nl_NL.mo differ
diff --git a/src/wp-content/plugins/wordpress-form-manager/languages/wordpress-form-manager-nl_NL.po b/src/wp-content/plugins/wordpress-form-manager/languages/wordpress-form-manager-nl_NL.po
new file mode 100644
index 00000000..5dd77996
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/languages/wordpress-form-manager-nl_NL.po
@@ -0,0 +1,973 @@
+# Copyright (C) 2010 Form Manager
+# This file is distributed under the same license as the Form Manager package.
+msgid ""
+msgstr ""
+"Project-Id-Version: Form Manager 1.4.21\n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/wordpress-form-manager\n"
+"POT-Creation-Date: 2011-05-31 00:50:59+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2011-06-01 12:53+0100\n"
+"Last-Translator: Sander Kolthof \n"
+"Language-Team: Full Circle Media \n"
+"X-Poedit-Language: Dutch\n"
+"X-Poedit-Country: NETHERLANDS\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: types/base.php:101
+#: types/blank.php:15
+#: pages/editformadv.php:129
+msgid "Item Label"
+msgstr "Item label"
+
+#: types/base.php:102
+#: types/file.php:19
+#: types/separator.php:42
+#: types/checkbox.php:13
+#: types/textarea.php:24
+#: types/list.php:18
+#: types/note.php:52
+#: types/blank.php:16
+#: types/text.php:34
+msgid "Item Description"
+msgstr "Item omschrijving"
+
+#: types/base.php:104
+#: types/blank.php:18
+msgid "Item Nickname"
+msgstr "Item bijnaam"
+
+#: types/file.php:9
+msgid "File"
+msgstr "Bestand"
+
+#: types/file.php:18
+msgid "New File Upload"
+msgstr "Nieuw bestand uploaden"
+
+#: types/file.php:39
+msgid "File upload exceeded maximum allowable size."
+msgstr "Geuploade bestand groter dan de maximaal toegestane grootte."
+
+#: types/file.php:42
+msgid "There was an error with the file upload."
+msgstr "Er is een fout opgetreden tijden het uploaden van het bestand."
+
+#: types/file.php:49
+msgid "Cannot be of type"
+msgstr "Dit type is niet toegestaan"
+
+#: types/file.php:54
+msgid "Can only be of types"
+msgstr "Alleen deze types zijn toegestaan"
+
+#: types/file.php:80
+#: types/separator.php:16
+#: types/checkbox.php:46
+#: types/textarea.php:50
+#: types/list.php:132
+#: types/recaptcha.php:74
+#: types/blank.php:34
+#: types/text.php:51
+msgid "Label"
+msgstr "Label"
+
+#: types/file.php:81
+msgid "Max file size (in kB)"
+msgstr "Max. bestandsgrootte (in kB)"
+
+#: types/file.php:82
+msgid "Your host restricts uploads to"
+msgstr "Uw provider beperkt uploads naar"
+
+#: types/file.php:83
+msgid "File Types"
+msgstr "Bestandstypes"
+
+#: types/file.php:84
+msgid "Enter a list of extensions separated by commas, e.g. \".txt, .rtf, .doc\""
+msgstr "Voer een lijst in met extensies gescheiden van elkaar door komma's, bijv. \".txt, .rtf, .doc\""
+
+#: types/file.php:85
+msgid "Only allow"
+msgstr "Alleen toegestaan"
+
+#: types/file.php:86
+msgid "Do not allow"
+msgstr "Niet toegestaan"
+
+#: types/file.php:120
+msgid "'Only allow' must be a list of extensions separated by commas"
+msgstr "'Alleen toegestaan' moet een lijst van extensies zijn gescheiden van elkaar met komma's"
+
+#: types/file.php:124
+msgid "'Do not allow' must be a list of extensions separated by commas"
+msgstr "'Niet toegestaan' moet een lijst van extensies zijn gescheiden van elkaar met komma's"
+
+#: types/separator.php:8
+msgid "Separator"
+msgstr "Scheidingsteken"
+
+#: types/separator.php:41
+msgid "New Separator"
+msgstr "Nieuw scheidingsteken"
+
+#: types/checkbox.php:8
+msgid "Checkbox"
+msgstr "Checkbox"
+
+#: types/checkbox.php:12
+msgid "New Checkbox"
+msgstr "Nieuw checkbox"
+
+#: types/checkbox.php:47
+msgid "Checked by Default"
+msgstr "Standaard aangevinkt"
+
+#: types/checkbox.php:48
+#: types/textarea.php:54
+#: types/list.php:135
+#: types/text.php:55
+msgid "Required"
+msgstr "Verplicht"
+
+#: types/textarea.php:8
+msgid "Text Area"
+msgstr "Tekstvak"
+
+#: types/textarea.php:23
+msgid "New Text Area"
+msgstr "Nieuw tekstvak"
+
+#: types/textarea.php:51
+msgid "Default Value"
+msgstr "Standaardwaarde"
+
+#: types/textarea.php:52
+msgid "Height (in pixels)"
+msgstr "Hoogte (in pixels)"
+
+#: types/textarea.php:53
+#: types/list.php:134
+#: types/text.php:53
+msgid "Width (in pixels)"
+msgstr "Breedte (in pixels)"
+
+#: types/list.php:12
+msgid "List"
+msgstr "Lijst"
+
+#: types/list.php:17
+msgid "New List"
+msgstr "Nieuwe lijst"
+
+#: types/list.php:133
+msgid "Style"
+msgstr "Stijl"
+
+#: types/list.php:133
+msgid "Dropdown"
+msgstr "Dropdown"
+
+#: types/list.php:133
+msgid "List Box"
+msgstr "Keuzelijst"
+
+#: types/list.php:133
+msgid "Radio Buttons"
+msgstr "Radio Buttons"
+
+#: types/list.php:133
+msgid "Checkboxes"
+msgstr "Checkboxen"
+
+#: types/list.php:136
+msgid "List Items"
+msgstr "Lijstitems"
+
+#: types/recaptcha.php:11
+msgid "reCAPTCHA"
+msgstr "reCAPTCHA"
+
+#: types/recaptcha.php:16
+msgid "(No reCAPTCHA API public key found)"
+msgstr "(Geen reCAPTCHA API public key gevonden)"
+
+#: types/recaptcha.php:23
+msgid "The reCAPTCHA was incorrect."
+msgstr "De reCAPTCHA is incorrect"
+
+#: types/recaptcha.php:68
+msgid "You need reCAPTCHA API keys."
+msgstr "Je hebt reCAPTCHA API keys nodig."
+
+#: types/recaptcha.php:68
+msgid "Fix this in"
+msgstr "Fix this in"
+
+#: types/recaptcha.php:68
+#: wordpress-form-manager.php:229
+#: wordpress-form-manager.php:242
+msgid "Settings"
+msgstr "Instellingen"
+
+#: types/recaptcha.php:69
+msgid "(reCAPTCHA field)"
+msgstr "(reCAPTCHA veld)"
+
+#: types/note.php:8
+msgid "Note"
+msgstr "Opmerking"
+
+#: types/note.php:51
+msgid "New Note"
+msgstr "Nieuwe opmerking"
+
+#: types/panelhelper.php:74
+msgid "Enter Items as Text"
+msgstr "Voer items in als tekst"
+
+#: types/panelhelper.php:79
+msgid "Add"
+msgstr "Toevoegen"
+
+#: types/text.php:15
+msgid "Text"
+msgstr "Tekst"
+
+#: types/text.php:33
+msgid "New Text"
+msgstr "Nieuwe tekst"
+
+#: types/text.php:52
+msgid "Placeholder"
+msgstr "Plaatsaanduiding"
+
+#: types/text.php:54
+msgid "Max characters"
+msgstr "Max. tekens"
+
+#: types/text.php:56
+msgid "Validation"
+msgstr "Validatie"
+
+#: db.php:109
+#: settings.php:24
+msgid "New Form"
+msgstr "Nieuw formulier"
+
+#: db.php:112
+#: settings.php:28
+msgid "\\'%s\\' is required."
+msgstr "\\'%s\\' is verplicht."
+
+#: db.php:119
+msgid "Numbers Only"
+msgstr "Alleen cijfers"
+
+#: db.php:120
+msgid "'%s' must be a valid number"
+msgstr "'%s' moet een geldig nummer zijn"
+
+#: db.php:125
+msgid "Phone Number"
+msgstr "Telefoonnummer"
+
+#: db.php:126
+msgid "'%s' must be a valid phone number"
+msgstr "'%s' moet een geldig telefoonnummer zijn"
+
+#: db.php:128
+msgid "/^.*[0-9]{3}.*[0-9]{3}.*[0-9]{4}.*$/"
+msgstr "/^.*[0-9]{3}.*[0-9]{3}.*[0-9]{4}.*$/"
+
+#: db.php:132
+msgid "E-Mail"
+msgstr "E-mail"
+
+#: db.php:133
+msgid "'%s' must be a valid E-Mail address"
+msgstr "'%s' moet een geldig e-mail adres zijn"
+
+#: db.php:138
+msgid "Date (MM/DD/YY)"
+msgstr "Datum (MM/DD/YY)"
+
+#: db.php:139
+msgid "'%s' must be a date (MM/DD/YY)"
+msgstr "'%s' moet een datum zijn (MM/DD/YY)"
+
+#: pages/main.php:73
+#: pages/main.php:107
+#: wordpress-form-manager.php:222
+msgid "Forms"
+msgstr "Formulieren"
+
+#: pages/main.php:75
+msgid "Are you sure you want to delete:"
+msgstr "Weet u zeker dat u dit wilt verwijderen:"
+
+#: pages/main.php:91
+msgid "Yes"
+msgstr "Ja"
+
+#: pages/main.php:92
+#: pages/formdata.php:118
+#: pages/formdata.php:149
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: pages/main.php:109
+msgid "Add New"
+msgstr "Nieuwe toevoegen"
+
+#: pages/main.php:117
+#: pages/formdata.php:245
+msgid "Bulk Actions"
+msgstr "Bulkacties"
+
+#: pages/main.php:118
+#: pages/main.php:152
+#: pages/main.php:165
+msgid "Delete"
+msgstr "Verwijderen"
+
+#: pages/main.php:120
+#: pages/formdata.php:255
+msgid "Apply"
+msgstr "Toepassen"
+
+#: pages/main.php:130
+#: pages/main.php:137
+#: pages/editsettingsadv.php:145
+msgid "Name"
+msgstr "Naam"
+
+#: pages/main.php:131
+#: pages/main.php:138
+msgid "Slug"
+msgstr "Afkorting"
+
+#: pages/main.php:149
+#: pages/main.php:159
+#: pages/formdata.php:237
+msgid "Edit this form"
+msgstr "Formulier bewerken"
+
+#: pages/main.php:149
+#: pages/main.php:159
+#: wordpress-form-manager.php:223
+msgid "Edit"
+msgstr "Bewerken"
+
+#: pages/main.php:150
+#: pages/main.php:161
+msgid "Advanced form settings"
+msgstr "Geavanceerde formulier instellingen"
+
+#: pages/main.php:150
+#: pages/main.php:161
+#: pages/editformadv.php:74
+msgid "Advanced"
+msgstr "Geavanceerd"
+
+#: pages/main.php:151
+#: pages/main.php:163
+msgid "View form data"
+msgstr "Bekijk formuliergegevens"
+
+#: pages/main.php:151
+#: pages/main.php:163
+#: wordpress-form-manager.php:224
+msgid "Data"
+msgstr "Gegevens"
+
+#: pages/main.php:152
+#: pages/main.php:165
+msgid "Delete this form"
+msgstr "Formulier verwijderen"
+
+#. translators: the following is displayed if there are no forms to list
+#: pages/main.php:179
+msgid " No forms yet..."
+msgstr "Nog geen formulieren..."
+
+#: pages/editform.php:66
+#: pages/formdata.php:237
+#: pages/editformadv.php:79
+msgid "Edit Form"
+msgstr "Formulier bewerken"
+
+#: pages/editform.php:72
+msgid "Form updated."
+msgstr "Formulier bijgewerkt."
+
+#: pages/editform.php:73
+#: pages/editsettings.php:39
+#: pages/editsettingsadv.php:132
+#: pages/editformadv.php:87
+msgid "Save failed."
+msgstr "Opslaan is mislukt."
+
+#: pages/editform.php:88
+msgid "Publish"
+msgstr "Publiceren"
+
+#: pages/editform.php:93
+msgid "Save"
+msgstr "Opslaan"
+
+#: pages/editform.php:99
+msgid "Cancel Changes"
+msgstr "Wijzigingen annuleren"
+
+#: pages/editform.php:114
+msgid "Save Form"
+msgstr "Formulier opslaan"
+
+#: pages/editform.php:123
+msgid "Submission Data"
+msgstr "Ingevoerde gegevens"
+
+#: pages/editform.php:130
+msgid "View Data"
+msgstr "Bekijk gegevens"
+
+#. translators: the number of submissions for a form
+#: pages/editform.php:136
+msgid "Submission count:"
+msgstr "Invoer aantal:"
+
+#. translators: label for the date of the most recent submission
+#: pages/editform.php:137
+msgid "Last submission:"
+msgstr "Laatste invoer:"
+
+#: pages/editform.php:147
+msgid "Form Slug"
+msgstr "Formulier afkorting"
+
+#: pages/editform.php:164
+#: pages/editformadv.php:111
+msgid "E-Mail Notifications"
+msgstr "E-mail berichten"
+
+#: pages/editform.php:171
+msgid "Send to (user entry)"
+msgstr "Versturen naar (gebruiker)"
+
+#: pages/editform.php:173
+msgid "(none)"
+msgstr "(geen)"
+
+#: pages/editform.php:180
+msgid "Make sure the field you choose contains an E-Mail validator"
+msgstr "Zorg ervoor dat het veld dat u kiest een e-mail validator bevat"
+
+#: pages/editform.php:184
+msgid "Also send notification(s) to"
+msgstr "Stuur ook bericht(en) naar"
+
+#: pages/editform.php:186
+msgid "Enter a list of e-mail addresses separated by commas"
+msgstr "Geef een lijst van e-mail adressen gescheiden door komma's"
+
+#: pages/editform.php:198
+msgid "Auto Redirect"
+msgstr "Automatisch doorsturen"
+
+#: pages/editform.php:204
+msgid "Automatically redirect the user after a successful form submission"
+msgstr "De gebruiker automatisch doorsturen na het succesvol invullen van het formulier"
+
+#: pages/editform.php:206
+msgid "Enable automatic redirect"
+msgstr "Automatisch doorsturen inschakelen"
+
+#: pages/editform.php:211
+msgid "Desination page"
+msgstr "Doelpagina"
+
+#: pages/editform.php:224
+msgid "Timeout (seconds)"
+msgstr "Timeout (secondes)"
+
+#: pages/editform.php:235
+#: wordpress-form-manager.php:230
+msgid "Advanced Settings"
+msgstr "Geavanceerde instellingen"
+
+#: pages/editform.php:255
+msgid "Add Form Element:"
+msgstr "Voeg formulier element toe:"
+
+#: pages/editform.php:269
+msgid "Insert Saved Form"
+msgstr "Voeg formulier in"
+
+#: pages/editform.php:281
+msgid "Insert Fields From:"
+msgstr "Voeg velden in van formulier:"
+
+#: pages/editform.php:288
+msgid "Insert After:"
+msgstr "Voeg in na:"
+
+#: pages/editform.php:290
+msgid "(Insert at beginning)"
+msgstr "(Voeg aan begin toe)"
+
+#: pages/editform.php:294
+msgid "(Insert at end)"
+msgstr "(Voeg aan eind toe)"
+
+#: pages/editform.php:297
+msgid "Load Fields"
+msgstr "Laad velden"
+
+#: pages/editform.php:329
+msgid "Appearance"
+msgstr "Opmaak"
+
+#: pages/editform.php:359
+msgid "Customize"
+msgstr "Personaliseer"
+
+#: pages/editform.php:363
+msgid "Submit acknowledgement message:"
+msgstr "Ontvangstbevestigingsbericht:"
+
+#: pages/editform.php:364
+msgid "This is displayed after the form has been submitted"
+msgstr "Dit wordt weergegeven nadat het formulier is verstuurd"
+
+#: pages/editform.php:369
+msgid "Show summary with acknowledgment:"
+msgstr "Toon overzicht bij ontvangstbevestiging:"
+
+#: pages/editform.php:370
+msgid "A summary of the submitted data will be shown along with the acknowledgment message"
+msgstr "Een samenvatting van de verzonden gegevens worden getoond samen met het ontvangstbevestigingsbericht"
+
+#: pages/editform.php:375
+msgid "Submit button label:"
+msgstr "Verstuur button label:"
+
+#: pages/editform.php:379
+msgid "Required item message:"
+msgstr "Verplicht item bericht:"
+
+#: pages/editform.php:380
+msgid "This is shown if a user leaves a required item blank. The item's label will appear in place of '%s'."
+msgstr "Dit wordt weergegeven als een gebruiker een verplicht item blanco laat. Het item label zal verschijnen in plaats van '%s'."
+
+#: pages/editsettings.php:33
+msgid "Form Manager Settings"
+msgstr "Form manager instellingen"
+
+#: pages/editsettings.php:38
+#: pages/editsettingsadv.php:131
+#: pages/editformadv.php:86
+msgid "Settings Saved."
+msgstr "Instellingen opgeslagen."
+
+#: pages/editsettings.php:48
+msgid "Global E-Mail Notifications"
+msgstr "Algemene e-mail berichtgeving"
+
+#: pages/editsettings.php:50
+msgid "These settings will be applied to every form you create."
+msgstr "Deze instellingen worden toegepast op elk formulier dat u maakt."
+
+#: pages/editsettings.php:51
+msgid "Send to Administrator"
+msgstr "Stuur naar beheerder"
+
+#: pages/editsettings.php:52
+msgid "Registered Users"
+msgstr "Geregistreerde gebruikers"
+
+#: pages/editsettings.php:52
+msgid "A confirmation e-mail will be sent to a registered user only when they submit a form"
+msgstr "Een bevestiging per e-mail zal worden verstuurd naar een geregistreerde gebruiker alleen wanneer zij een formulier versturen"
+
+#: pages/editsettings.php:55
+msgid "Default Form Settings"
+msgstr "Standaard formulier instellingen"
+
+#: pages/editsettings.php:57
+msgid "Form Title"
+msgstr "Formulier titel"
+
+#: pages/editsettings.php:58
+msgid "Submit Acknowledgment"
+msgstr "Ontvangstbevestiging:"
+
+#: pages/editsettings.php:59
+msgid "Required Item Message"
+msgstr "Verplicht item bericht"
+
+#: pages/editsettings.php:59
+msgid "This is displayed when a user fails to input a required item. Include '%s' in the message where you would like the item's label to appear."
+msgstr "Dit wordt weergegeven wanneer een gebruiker een verplicht item niet heeft ingevoerd. Onder '%s' in het bericht waar je zou willen dat het item-label zou verschijnen."
+
+#: pages/editsettings.php:62
+msgid "reCAPTCHA Settings"
+msgstr "reCAPTCHA instellingen"
+
+#: pages/editsettings.php:63
+msgid "API Keys for reCAPTCHA can be acquired (for free) by visiting"
+msgstr "API Keys voor reCAPTCHA kunnen (gratis) worden verkregen op"
+
+#: pages/editsettings.php:65
+msgid "reCAPTCHA Public Key"
+msgstr "reCAPTCHA Public Key"
+
+#: pages/editsettings.php:66
+msgid "reCAPTCHA Private Key"
+msgstr "reCAPTCHA Private Key"
+
+#: pages/editsettings.php:68
+msgid "Red"
+msgstr "Rood"
+
+#: pages/editsettings.php:68
+msgid "White"
+msgstr "Wit"
+
+#: pages/editsettings.php:68
+msgid "Black"
+msgstr "Zwart"
+
+#: pages/editsettings.php:68
+msgid "Clean"
+msgstr "Rood"
+
+#: pages/editsettings.php:73
+msgid "Color Scheme"
+msgstr "Kleur schema"
+
+#: pages/editsettings.php:87
+#: pages/editsettingsadv.php:206
+#: pages/editformadv.php:77
+#: pages/editformadv.php:143
+msgid "Save Changes"
+msgstr "Wijzigingen opslaan"
+
+#. translators: this will be followed by the name of the template to be removed
+#: pages/editsettingsadv.php:79
+msgid "Are you sure you want to remove"
+msgstr "Weet u zeker dat u wilt verwijderen"
+
+#: pages/editsettingsadv.php:83
+msgid "Are you sure? All templates other than the default will be removed."
+msgstr "Ben je zeker? Alle sjablonen anders dan de standaard zullen worden verwijderd."
+
+#: pages/editsettingsadv.php:126
+msgid "Form Manager Settings - Advanced"
+msgstr "Formulieren manager instellingen - geavanceerd"
+
+#: pages/editsettingsadv.php:141
+msgid "Text Validators"
+msgstr "Tekst validators"
+
+#: pages/editsettingsadv.php:146
+msgid "Error Message"
+msgstr "Foutmelding"
+
+#: pages/editsettingsadv.php:147
+msgid "Regular Expression"
+msgstr "Toegestane karakters"
+
+#: pages/editsettingsadv.php:181
+msgid "Plugin Shortcode"
+msgstr "Plugin afkorting"
+
+#: pages/editsettingsadv.php:186
+msgid "Default Form Template"
+msgstr "Standaard formulier sjabloon"
+
+#: pages/editsettingsadv.php:187
+msgid "Default E-Mail Template"
+msgstr "Standaar e-mail sjabloon"
+
+#: pages/editsettingsadv.php:188
+msgid "Default Summary Template"
+msgstr "Standaard overzicht sjabloon"
+
+#: pages/editsettingsadv.php:190
+msgid "Reset Templates"
+msgstr "Reset sjablonen"
+
+#: pages/editsettingsadv.php:198
+msgid "Remove"
+msgstr "Verwijder"
+
+#: pages/formdata.php:117
+#: pages/formdata.php:148
+msgid "Submit Changes"
+msgstr "Aanpassingen versturen"
+
+#: pages/formdata.php:170
+#: pages/formdata.php:187
+msgid "Back to Form Data"
+msgstr "Terug naar formuliergegevens"
+
+#: pages/formdata.php:175
+msgid "Data summary:"
+msgstr "Gegevens overzicht"
+
+#: pages/formdata.php:235
+msgid "Download Data (.csv)"
+msgstr "Download gegevens (.csv)"
+
+#: pages/formdata.php:240
+#: pages/formdata.php:324
+msgid "Working..."
+msgstr "Laden..."
+
+#: pages/formdata.php:246
+msgid "Show Summary"
+msgstr "Laat overzicht zien"
+
+#: pages/formdata.php:248
+msgid "Delete Selected"
+msgstr "Verwijder selectie"
+
+#: pages/formdata.php:249
+msgid "Delete All Submission Data"
+msgstr "Verwijder alle gegevens"
+
+#: pages/formdata.php:252
+msgid "Edit Selected"
+msgstr "Bewerk selectie"
+
+#: pages/formdata.php:271
+msgid "Are you sure you want to delete the selected items?"
+msgstr "Weet u zeker dat u de geselecteerde items wilt verwijderen?"
+
+#: pages/formdata.php:275
+msgid "This will delete all submission data for this form. Are you sure?"
+msgstr "Hierdoor zul je alle gegevens van dit formulier verwijderen. Ben je zeker?"
+
+#: pages/formdata.php:306
+#: pages/formdata.php:336
+msgid "Timestamp"
+msgstr "Tijdstip"
+
+#: pages/formdata.php:309
+#: pages/formdata.php:337
+msgid "User"
+msgstr "Gebruiker"
+
+#: pages/formdata.php:312
+#: pages/formdata.php:338
+msgid "IP Address"
+msgstr "IP adres"
+
+#: pages/formdata.php:321
+msgid "Download Files"
+msgstr "Download bestanden"
+
+#: pages/formdata.php:357
+msgid "Download"
+msgstr "Download"
+
+#: pages/editformadv.php:96
+msgid "Behavior"
+msgstr "Gebruikersvoorwaarde"
+
+#: pages/editformadv.php:102
+msgid "Behavior Type"
+msgstr "Gebruikersvoorwaarde type"
+
+#: pages/editformadv.php:102
+msgid "Behavior types other than 'Default' require a registered user"
+msgstr "Gebruikersvoorwaarde type anders dan 'Standaard' vereisen een geregistreerde gebruiker"
+
+#: pages/editformadv.php:110
+msgid "Form Display"
+msgstr "Formulier weergave"
+
+#: pages/editformadv.php:110
+#: pages/editformadv.php:111
+#: pages/editformadv.php:112
+msgid "(use default)"
+msgstr "(gebruik standaard)"
+
+#: pages/editformadv.php:112
+msgid "Data Summary"
+msgstr "Gegevens overzicht"
+
+#: pages/editformadv.php:116
+msgid "Custom E-Mail Notifications"
+msgstr "Aangepaste e-mailberichten"
+
+#: pages/editformadv.php:118
+msgid "Use custom e-mail notifications"
+msgstr "Gebruik aangepaste e-mailberichten"
+
+#: pages/editformadv.php:119
+msgid "This will override the 'E-Mail Notifications' settings in both the main editor and the plugin settings page with the information entered below"
+msgstr "Dit zal de 'e-mail meldingen' instellingen voor zowel de hoofdredacteur en de plugin-instellingen pagina met de ingevoerde gegevens hieronder"
+
+#: pages/editformadv.php:123
+msgid "Form Item Nicknames"
+msgstr "Formulier item bijnaam"
+
+#: pages/editformadv.php:125
+msgid "Giving a nickname to form items makes it easier to access their information within custom e-mail notifications and templates"
+msgstr "Het geven van een bijnaam aan formulier items maakt het gemakkelijker om toegang tot hun informatie te krijgen binnen de aangepaste e-mail meldingen en sjablonen"
+
+#: pages/editformadv.php:129
+msgid "Nickname"
+msgstr "Bijnaam"
+
+#: pages/editformadv.php:136
+msgid "Publish Submitted Data"
+msgstr "Publiceer gegevens"
+
+#: pages/editformadv.php:138
+msgid "Publish submissions as posts"
+msgstr "Publiceer gegevens als bericht"
+
+#: pages/editformadv.php:139
+msgid "Post category"
+msgstr "Bericht categorie"
+
+#: pages/editformadv.php:140
+msgid "Post title"
+msgstr "Bericht titel"
+
+#: pages/editformadv.php:140
+msgid "Include '%s' where you would like the form title to appear"
+msgstr "Gebruik '%s' op de plek waar je zou willen dat de formulier titel verschijnt"
+
+#: pages/editformadv.php:150
+msgid "Edit Form Definition:"
+msgstr "Bewerk formulier omschrijving:"
+
+#: pages/editformadv.php:154
+msgid "Update Form"
+msgstr "Update formulier"
+
+#: ajax.php:27
+msgid "Error: the shortcode '%s' is already in use. (other changes were saved successfully)"
+msgstr "Fout: de shortcode '%s' is al in gebruik. (andere wijzigingen zijn succesvol opgeslagen)"
+
+#. translators: this error is given when saving the form, if there was a
+#. problem with the list of e-mails under 'E-Mail Notifications'.
+#: ajax.php:81
+msgid "Error: There was a problem with the notification e-mail list. Other settings were updated."
+msgstr "Fout: Er was een probleem met de e-mail melding lijst. Andere instellingen zijn bijgewerkt."
+
+#. translators: This error occurs if the save script failed for some reason.
+#: ajax.php:96
+msgid "Error: Save posted an invalid array expression."
+msgstr "Fout: Opslaan gepost een ongeldige reeks karakters."
+
+#: ajax.php:141
+msgid "m-y-d h-i-s"
+msgstr "m-y-d h-i-s"
+
+#: ajax.php:236
+msgid "Failed to open file"
+msgstr "Kan bestand niet openen"
+
+#. translators: the following are for the options for the default form display
+#. template
+#: templates/fm-form-default.php:59
+msgid "Show form title:"
+msgstr "Toon formulier titel:"
+
+#: templates/fm-form-default.php:60
+msgid "Show border:"
+msgstr "Toon rand:"
+
+#: templates/fm-form-default.php:61
+msgid "Label position:"
+msgstr "Label positie:"
+
+#: templates/fm-form-default.php:62
+msgid "Labels can be placed to the left or above each field"
+msgstr "Labels kunnen worden geplaatst aan de linkerkant of boven elk veld"
+
+#: templates/fm-form-default.php:63
+msgctxt "template-option"
+msgid "Left"
+msgstr "Links"
+
+#: templates/fm-form-default.php:64
+msgctxt "template-option"
+msgid "Top"
+msgstr "Boven"
+
+#: templates/fm-form-default.php:65
+msgid "Label width (in pixels):"
+msgstr "Label breedte (in pixels):"
+
+#: templates/fm-form-default.php:66
+msgid "Applies to checkboxes, and when labels are to the left"
+msgstr "Geldt voor checkboxen, en wanneer labels aan de linkerkant staan"
+
+#: settings.php:26
+msgid "Thank you! Your data has been submitted."
+msgstr "Dank je wel! Uw gegevens zijn opgeslagen."
+
+#: settings.php:27
+msgid "Submit"
+msgstr "Verstuur"
+
+#: settings.php:46
+msgid "Default"
+msgstr "Standaard"
+
+#: settings.php:47
+msgid "Registered users only"
+msgstr "Alleen voor geregistreerde gebruikers"
+
+#: settings.php:48
+msgid "Keep only most recent submission"
+msgstr "Houd alleen de meest recente bijdrage"
+
+#: settings.php:49
+msgid "Single submission"
+msgstr "Enkele invoer"
+
+#: settings.php:50
+msgid "'User profile' style"
+msgstr "'Gebruikersprofiel' stijl"
+
+#: wordpress-form-manager.php:55
+msgid "Form Manager requires WordPress version 3.0 or higher"
+msgstr "Form Manager vereist WordPress versie 3.0 of hoger"
+
+#: wordpress-form-manager.php:59
+msgid "Form Manager requires PHP version 5.0 or higher"
+msgstr "Form Manager vereist PHP version 5.0 or hoger"
+
+#: wordpress-form-manager.php:232
+msgid "Edit Form - Advanced"
+msgstr "Bewerk formulier - geavanceerd"
+
+#. Plugin Name of the plugin/theme
+msgid "Form Manager"
+msgstr "Form Manager"
+
+#. Plugin URI of the plugin/theme
+msgid "http://www.campbellhoffman.com/form-manager/"
+msgstr "http://www.campbellhoffman.com/form-manager/"
+
+#. Description of the plugin/theme
+msgid "Create custom forms; download entered data in .csv format; validation, required fields, custom acknowledgments;"
+msgstr "Maak aangepaste vormen; download ingevoerde gegevens in CSV-formaat;. validatie, verplichte velden, aangepaste bevestigingen;"
+
+#. Author of the plugin/theme
+msgid "Campbell Hoffman"
+msgstr "Sander Kolthof"
+
+#. Author URI of the plugin/theme
+msgid "http://www.campbellhoffman.com/"
+msgstr "http://www.fullcirclemedia.nl/"
+
diff --git a/src/wp-content/plugins/wordpress-form-manager/languages/wordpress-form-manager.pot b/src/wp-content/plugins/wordpress-form-manager/languages/wordpress-form-manager.pot
new file mode 100644
index 00000000..b261a878
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/languages/wordpress-form-manager.pot
@@ -0,0 +1,1174 @@
+# Copyright (C) 2010 Form Manager
+# This file is distributed under the same license as the Form Manager package.
+msgid ""
+msgstr ""
+"Project-Id-Version: Form Manager 1.5.8\n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/wordpress-form-manager\n"
+"POT-Creation-Date: 2011-06-08 22:59:04+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2010-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
+
+#: ajax.php:27
+msgid ""
+"Error: the shortcode '%s' is already in use. (other changes were saved "
+"successfully)"
+msgstr ""
+
+#. translators: this error is given when saving the form, if there was a
+#. problem with the list of e-mails under 'E-Mail Notifications'.
+#: ajax.php:81
+msgid ""
+"Error: There was a problem with the notification e-mail list. Other "
+"settings were updated."
+msgstr ""
+
+#. translators: This error occurs if the save script failed for some reason.
+#: ajax.php:96
+msgid "Error: Save posted an invalid array expression."
+msgstr ""
+
+#: ajax.php:141
+msgid "m-y-d h-i-s"
+msgstr ""
+
+#: ajax.php:246 db.php:789
+msgid "Failed to open file"
+msgstr ""
+
+#: types/list.php:12
+msgid "List"
+msgstr ""
+
+#: types/list.php:17
+msgid "New List"
+msgstr ""
+
+#: types/list.php:18 types/note.php:59 types/checkbox.php:13
+#: types/separator.php:42 types/textarea.php:24 types/text.php:34
+#: types/base.php:102 types/blank.php:16 types/file.php:19
+msgid "Item Description"
+msgstr ""
+
+#: types/list.php:130 types/checkbox.php:47 types/recaptcha.php:74
+#: types/separator.php:16 types/textarea.php:50 types/text.php:51
+#: types/blank.php:34 types/file.php:117
+msgid "Label"
+msgstr ""
+
+#: types/list.php:131
+msgid "Style"
+msgstr ""
+
+#: types/list.php:131
+msgid "Dropdown"
+msgstr ""
+
+#: types/list.php:131
+msgid "List Box"
+msgstr ""
+
+#: types/list.php:131
+msgid "Radio Buttons"
+msgstr ""
+
+#: types/list.php:131
+msgid "Checkboxes"
+msgstr ""
+
+#: types/list.php:132 types/textarea.php:53 types/text.php:53
+msgid "Width (in pixels)"
+msgstr ""
+
+#: types/list.php:133 types/checkbox.php:50 types/textarea.php:54
+#: types/text.php:55
+msgid "Required"
+msgstr ""
+
+#: types/list.php:134
+msgid "List Items"
+msgstr ""
+
+#: types/note.php:8
+msgid "Note"
+msgstr ""
+
+#: types/note.php:23
+msgid "HTML"
+msgstr ""
+
+#: types/note.php:58
+msgid "New Note"
+msgstr ""
+
+#: types/checkbox.php:8
+msgid "Checkbox"
+msgstr ""
+
+#: types/checkbox.php:12
+msgid "New Checkbox"
+msgstr ""
+
+#: types/checkbox.php:37
+msgid "yes"
+msgstr ""
+
+#: types/checkbox.php:37 types/checkbox.php:38
+msgid "no"
+msgstr ""
+
+#: types/checkbox.php:48
+msgid "Position"
+msgstr ""
+
+#: types/checkbox.php:48
+msgid "Left"
+msgstr ""
+
+#: types/checkbox.php:48
+msgid "Right"
+msgstr ""
+
+#: types/checkbox.php:49
+msgid "Checked by Default"
+msgstr ""
+
+#: types/recaptcha.php:11
+msgid "reCAPTCHA"
+msgstr ""
+
+#: types/recaptcha.php:16
+msgid "(No reCAPTCHA API public key found)"
+msgstr ""
+
+#: types/recaptcha.php:23
+msgid "The reCAPTCHA was incorrect."
+msgstr ""
+
+#: types/recaptcha.php:68
+msgid "You need reCAPTCHA API keys."
+msgstr ""
+
+#: types/recaptcha.php:68
+msgid "Fix this in"
+msgstr ""
+
+#: types/recaptcha.php:68 wordpress-form-manager.php:273
+#: wordpress-form-manager.php:286
+msgid "Settings"
+msgstr ""
+
+#: types/recaptcha.php:69
+msgid "(reCAPTCHA field)"
+msgstr ""
+
+#: types/separator.php:8
+msgid "Separator"
+msgstr ""
+
+#: types/separator.php:41
+msgid "New Separator"
+msgstr ""
+
+#: types/textarea.php:8
+msgid "Text Area"
+msgstr ""
+
+#: types/textarea.php:23
+msgid "New Text Area"
+msgstr ""
+
+#: types/textarea.php:51
+msgid "Default Value"
+msgstr ""
+
+#: types/textarea.php:52
+msgid "Height (in pixels)"
+msgstr ""
+
+#: types/text.php:15
+msgid "Text"
+msgstr ""
+
+#: types/text.php:33
+msgid "New Text"
+msgstr ""
+
+#: types/text.php:52
+msgid "Placeholder"
+msgstr ""
+
+#: types/text.php:54
+msgid "Max characters"
+msgstr ""
+
+#: types/text.php:56
+msgid "Validation"
+msgstr ""
+
+#: types/base.php:101 types/blank.php:15 pages/editformnn.php:68
+msgid "Item Label"
+msgstr ""
+
+#: types/base.php:104 types/blank.php:18
+msgid "Item Nickname"
+msgstr ""
+
+#: types/panelhelper.php:74
+msgid "Enter Items as Text"
+msgstr ""
+
+#: types/panelhelper.php:79 pages/editformcond.php:95
+msgid "Add"
+msgstr ""
+
+#: types/file.php:9
+msgid "File"
+msgstr ""
+
+#: types/file.php:18
+msgid "New File Upload"
+msgstr ""
+
+#: types/file.php:39
+msgid "File upload exceeded maximum allowable size."
+msgstr ""
+
+#: types/file.php:42
+msgid "There was an error with the file upload."
+msgstr ""
+
+#: types/file.php:49
+msgid "Cannot be of type"
+msgstr ""
+
+#: types/file.php:54
+msgid "Can only be of types"
+msgstr ""
+
+#: types/file.php:118
+msgid "Max file size (in kB)"
+msgstr ""
+
+#: types/file.php:119
+msgid "Your host restricts uploads to"
+msgstr ""
+
+#: types/file.php:120
+msgid "File Types"
+msgstr ""
+
+#: types/file.php:121
+msgid ""
+"Enter a list of extensions separated by commas, e.g. \".txt, .rtf, .doc\""
+msgstr ""
+
+#: types/file.php:122
+msgid "Only allow"
+msgstr ""
+
+#: types/file.php:123
+msgid "Do not allow"
+msgstr ""
+
+#: types/file.php:124
+msgid "Uploads"
+msgstr ""
+
+#: types/file.php:125
+msgid "Upload directory"
+msgstr ""
+
+#: types/file.php:127
+msgid "This does not appear to be a valid directory "
+msgstr ""
+
+#: types/file.php:128
+msgid ""
+"Using an upload directory will allow you to post links to uploaded files. "
+"Otherwise, Form Manager will manage the uploaded files for you in the "
+"database."
+msgstr ""
+
+#: types/file.php:129
+msgid "Upload URL"
+msgstr ""
+
+#: types/file.php:130
+msgid ""
+"This will be the base URL used for links to the uploaded files. If left "
+"blank, no links will be generated."
+msgstr ""
+
+#: types/file.php:164
+msgid "'Only allow' must be a list of extensions separated by commas"
+msgstr ""
+
+#: types/file.php:168
+msgid "'Do not allow' must be a list of extensions separated by commas"
+msgstr ""
+
+#: settings.php:24 db.php:110
+msgid "New Form"
+msgstr ""
+
+#: settings.php:26
+msgid "Thank you! Your data has been submitted."
+msgstr ""
+
+#: settings.php:27
+msgid "Submit"
+msgstr ""
+
+#: settings.php:28 db.php:113
+msgid "\\'%s\\' is required."
+msgstr ""
+
+#: settings.php:46
+msgid "Default"
+msgstr ""
+
+#: settings.php:47
+msgid "Registered users only"
+msgstr ""
+
+#: settings.php:48
+msgid "Keep only most recent submission"
+msgstr ""
+
+#: settings.php:49
+msgid "Single submission"
+msgstr ""
+
+#: settings.php:50
+msgid "'User profile' style"
+msgstr ""
+
+#: pages/editformcond.php:76 pages/editformcond.php:122
+#: pages/editformadv.php:70 pages/editformadv.php:122 pages/editformnn.php:46
+#: pages/editformnn.php:76 pages/editformdesign.php:96
+msgid "Cancel Changes"
+msgstr ""
+
+#: pages/editformcond.php:77 pages/editformcond.php:123
+#: pages/editsettings.php:87 pages/editformadv.php:71
+#: pages/editformadv.php:123 pages/editsettingsadv.php:228
+#: pages/editformnn.php:47 pages/editformnn.php:77
+msgid "Save Changes"
+msgstr ""
+
+#: pages/editformcond.php:84 pages/editsettings.php:38
+#: pages/editformadv.php:77 pages/editsettingsadv.php:143
+#: pages/editformnn.php:53
+msgid "Settings Saved."
+msgstr ""
+
+#: pages/editformcond.php:85 pages/editsettings.php:39
+#: pages/editformadv.php:78 pages/editsettingsadv.php:144
+#: pages/editformnn.php:54 pages/editformdesign.php:70
+msgid "Save failed."
+msgstr ""
+
+#: pages/editsettings.php:33
+msgid "Form Manager Settings"
+msgstr ""
+
+#: pages/editsettings.php:48
+msgid "Global E-Mail Notifications"
+msgstr ""
+
+#: pages/editsettings.php:50
+msgid "These settings will be applied to every form you create."
+msgstr ""
+
+#: pages/editsettings.php:51
+msgid "Send to Administrator"
+msgstr ""
+
+#: pages/editsettings.php:52
+msgid "Registered Users"
+msgstr ""
+
+#: pages/editsettings.php:52
+msgid ""
+"A confirmation e-mail will be sent to a registered user only when they "
+"submit a form"
+msgstr ""
+
+#: pages/editsettings.php:55
+msgid "Default Form Settings"
+msgstr ""
+
+#: pages/editsettings.php:57
+msgid "Form Title"
+msgstr ""
+
+#: pages/editsettings.php:58
+msgid "Submit Acknowledgment"
+msgstr ""
+
+#: pages/editsettings.php:59
+msgid "Required Item Message"
+msgstr ""
+
+#: pages/editsettings.php:59
+msgid ""
+"This is displayed when a user fails to input a required item. Include '%s' "
+"in the message where you would like the item's label to appear."
+msgstr ""
+
+#: pages/editsettings.php:62
+msgid "reCAPTCHA Settings"
+msgstr ""
+
+#: pages/editsettings.php:63
+msgid "API Keys for reCAPTCHA can be acquired (for free) by visiting"
+msgstr ""
+
+#: pages/editsettings.php:65
+msgid "reCAPTCHA Public Key"
+msgstr ""
+
+#: pages/editsettings.php:66
+msgid "reCAPTCHA Private Key"
+msgstr ""
+
+#: pages/editsettings.php:68
+msgid "Red"
+msgstr ""
+
+#: pages/editsettings.php:68
+msgid "White"
+msgstr ""
+
+#: pages/editsettings.php:68
+msgid "Black"
+msgstr ""
+
+#: pages/editsettings.php:68
+msgid "Clean"
+msgstr ""
+
+#: pages/editsettings.php:73
+msgid "Color Scheme"
+msgstr ""
+
+#: pages/editformadv.php:87
+msgid "Behavior"
+msgstr ""
+
+#: pages/editformadv.php:93
+msgid "Behavior Type"
+msgstr ""
+
+#: pages/editformadv.php:93
+msgid "Behavior types other than 'Default' require a registered user"
+msgstr ""
+
+#: pages/editformadv.php:101
+msgid "Form Display"
+msgstr ""
+
+#: pages/editformadv.php:101 pages/editformadv.php:102
+#: pages/editformadv.php:103
+msgid "(use default)"
+msgstr ""
+
+#: pages/editformadv.php:102 pages/editformdesign.php:153
+msgid "E-Mail Notifications"
+msgstr ""
+
+#: pages/editformadv.php:103
+msgid "Data Summary"
+msgstr ""
+
+#: pages/editformadv.php:107
+msgid "Custom E-Mail Notifications"
+msgstr ""
+
+#: pages/editformadv.php:109
+msgid "Use custom e-mail notifications"
+msgstr ""
+
+#: pages/editformadv.php:110
+msgid ""
+"This will override the 'E-Mail Notifications' settings in both the main "
+"editor and the plugin settings page with the information entered below"
+msgstr ""
+
+#: pages/editformadv.php:114
+msgid "Publish Submitted Data"
+msgstr ""
+
+#: pages/editformadv.php:116
+msgid "Publish submissions as posts"
+msgstr ""
+
+#: pages/editformadv.php:117
+msgid "Post category"
+msgstr ""
+
+#: pages/editformadv.php:118
+msgid "Post title"
+msgstr ""
+
+#: pages/editformadv.php:118
+msgid "Include '%s' where you would like the form title to appear"
+msgstr ""
+
+#: pages/editformadv.php:131
+msgid "Edit Form Definition:"
+msgstr ""
+
+#: pages/editformadv.php:135
+msgid "Update Form"
+msgstr ""
+
+#. translators: this will be followed by the name of the template to be removed
+#: pages/editsettingsadv.php:91
+msgid "Are you sure you want to remove"
+msgstr ""
+
+#: pages/editsettingsadv.php:95
+msgid "Are you sure? All templates other than the default will be removed."
+msgstr ""
+
+#: pages/editsettingsadv.php:138
+msgid "Form Manager Settings - Advanced"
+msgstr ""
+
+#: pages/editsettingsadv.php:153
+msgid "Text Validators"
+msgstr ""
+
+#: pages/editsettingsadv.php:157 pages/main.php:130 pages/main.php:139
+msgid "Name"
+msgstr ""
+
+#: pages/editsettingsadv.php:158
+msgid "Error Message"
+msgstr ""
+
+#: pages/editsettingsadv.php:159
+msgid "Regular Expression"
+msgstr ""
+
+#: pages/editsettingsadv.php:172 wordpress-form-manager.php:196
+msgid "delete"
+msgstr ""
+
+#: pages/editsettingsadv.php:191
+msgid "Shortcode"
+msgstr ""
+
+#: pages/editsettingsadv.php:193
+msgid "Plugin Shortcode"
+msgstr ""
+
+#: pages/editsettingsadv.php:196
+msgid "Display Templates"
+msgstr ""
+
+#: pages/editsettingsadv.php:198
+msgid "Default Form Template"
+msgstr ""
+
+#: pages/editsettingsadv.php:199
+msgid "Default E-Mail Template"
+msgstr ""
+
+#: pages/editsettingsadv.php:200
+msgid "Default Summary Template"
+msgstr ""
+
+#: pages/editsettingsadv.php:202
+msgid "Reset Templates"
+msgstr ""
+
+#: pages/editsettingsadv.php:210
+msgid "Remove"
+msgstr ""
+
+#: pages/editsettingsadv.php:214
+msgid "Database Check"
+msgstr ""
+
+#: pages/editsettingsadv.php:216
+msgid "Check the Form Manager database"
+msgstr ""
+
+#: pages/editsettingsadv.php:216
+msgid "Go"
+msgstr ""
+
+#: pages/editsettingsadv.php:219
+msgid "Post/Page Editor"
+msgstr ""
+
+#: pages/editsettingsadv.php:221
+msgid "Enable the editor button"
+msgstr ""
+
+#: pages/editform.php:7 pages/main.php:153 pages/main.php:163
+msgid "Edit this form"
+msgstr ""
+
+#: pages/editform.php:8 pages/main.php:153 pages/main.php:163
+#: wordpress-form-manager.php:267
+msgid "Edit"
+msgstr ""
+
+#: pages/editform.php:13 pages/main.php:155 pages/main.php:167
+msgid "View form data"
+msgstr ""
+
+#: pages/editform.php:14 pages/editformdesign.php:120
+msgid "Submission Data"
+msgstr ""
+
+#: pages/editform.php:19
+msgid "Form item nicknames"
+msgstr ""
+
+#: pages/editform.php:20
+msgid "Item Nicknames"
+msgstr ""
+
+#: pages/editform.php:25
+msgid "Conditional behavior"
+msgstr ""
+
+#: pages/editform.php:26
+msgid "Conditions"
+msgstr ""
+
+#: pages/editform.php:31 pages/main.php:154 pages/main.php:165
+msgid "Advanced form settings"
+msgstr ""
+
+#: pages/editform.php:32 pages/main.php:154 pages/main.php:165
+msgid "Advanced"
+msgstr ""
+
+#: pages/editform.php:43
+msgid "Edit Form"
+msgstr ""
+
+#: pages/main.php:73 pages/main.php:107 wordpress-form-manager.php:266
+msgid "Forms"
+msgstr ""
+
+#: pages/main.php:75
+msgid "Are you sure you want to delete:"
+msgstr ""
+
+#: pages/main.php:91
+msgid "Yes"
+msgstr ""
+
+#: pages/main.php:92 pages/formdata.php:118 pages/formdata.php:149
+msgid "Cancel"
+msgstr ""
+
+#: pages/main.php:109
+msgid "Add New"
+msgstr ""
+
+#: pages/main.php:117 pages/formdata.php:233
+msgid "Bulk Actions"
+msgstr ""
+
+#: pages/main.php:118 pages/main.php:156 pages/main.php:169
+msgid "Delete"
+msgstr ""
+
+#: pages/main.php:120 pages/formdata.php:243
+msgid "Apply"
+msgstr ""
+
+#: pages/main.php:131 pages/main.php:140
+msgid "Slug"
+msgstr ""
+
+#. translators: the number of submissions for a form
+#: pages/main.php:132 pages/main.php:141 pages/editformdesign.php:125
+msgid "Submission count"
+msgstr ""
+
+#: pages/main.php:133 pages/main.php:142
+msgid "Last Submission"
+msgstr ""
+
+#: pages/main.php:155 pages/main.php:167 pages/formdata.php:115
+#: pages/formdata.php:168
+msgid "Data"
+msgstr ""
+
+#: pages/main.php:156 pages/main.php:169
+msgid "Delete this form"
+msgstr ""
+
+#. translators: the following is displayed if there are no forms to list
+#: pages/main.php:185
+msgid " No forms yet..."
+msgstr ""
+
+#: pages/formdata.php:117 pages/formdata.php:148
+msgid "Submit Changes"
+msgstr ""
+
+#: pages/formdata.php:124
+msgid "Edit data"
+msgstr ""
+
+#: pages/formdata.php:172
+msgid "Data summary:"
+msgstr ""
+
+#: pages/formdata.php:225
+msgid "Download Data (.csv)"
+msgstr ""
+
+#: pages/formdata.php:228 pages/formdata.php:312
+msgid "Working..."
+msgstr ""
+
+#: pages/formdata.php:234
+msgid "Show Summary"
+msgstr ""
+
+#: pages/formdata.php:236
+msgid "Delete Selected"
+msgstr ""
+
+#: pages/formdata.php:237
+msgid "Delete All Submission Data"
+msgstr ""
+
+#: pages/formdata.php:240
+msgid "Edit Selected"
+msgstr ""
+
+#: pages/formdata.php:259
+msgid "Are you sure you want to delete the selected items?"
+msgstr ""
+
+#: pages/formdata.php:263
+msgid "This will delete all submission data for this form. Are you sure?"
+msgstr ""
+
+#: pages/formdata.php:294 pages/formdata.php:324
+msgid "Timestamp"
+msgstr ""
+
+#: pages/formdata.php:297 pages/formdata.php:325
+msgid "User"
+msgstr ""
+
+#: pages/formdata.php:300 pages/formdata.php:326
+msgid "IP Address"
+msgstr ""
+
+#: pages/formdata.php:309
+msgid "Download Files"
+msgstr ""
+
+#: pages/formdata.php:347
+msgid "Download"
+msgstr ""
+
+#: pages/editformnn.php:64
+msgid ""
+"Giving a nickname to form items makes it easier to access their information "
+"within custom e-mail notifications and templates"
+msgstr ""
+
+#: pages/editformnn.php:68
+msgid "Nickname"
+msgstr ""
+
+#: pages/editformdesign.php:69
+msgid "Form updated."
+msgstr ""
+
+#: pages/editformdesign.php:85
+msgid "Publish"
+msgstr ""
+
+#: pages/editformdesign.php:90
+msgid "Save"
+msgstr ""
+
+#: pages/editformdesign.php:111
+msgid "Save Form"
+msgstr ""
+
+#. translators: label for the date of the most recent submission
+#: pages/editformdesign.php:126
+msgid "Last submission"
+msgstr ""
+
+#: pages/editformdesign.php:136
+msgid "Form Slug"
+msgstr ""
+
+#: pages/editformdesign.php:160
+msgid "Send to (user entry)"
+msgstr ""
+
+#: pages/editformdesign.php:162
+msgid "(none)"
+msgstr ""
+
+#: pages/editformdesign.php:169
+msgid "Make sure the field you choose contains an E-Mail validator"
+msgstr ""
+
+#: pages/editformdesign.php:173
+msgid "Also send notification(s) to"
+msgstr ""
+
+#: pages/editformdesign.php:175
+msgid "Enter a list of e-mail addresses separated by commas"
+msgstr ""
+
+#: pages/editformdesign.php:187
+msgid "Auto Redirect"
+msgstr ""
+
+#: pages/editformdesign.php:193
+msgid "Automatically redirect the user after a successful form submission"
+msgstr ""
+
+#: pages/editformdesign.php:195
+msgid "Enable automatic redirect"
+msgstr ""
+
+#: pages/editformdesign.php:200
+msgid "Desination page"
+msgstr ""
+
+#: pages/editformdesign.php:213
+msgid "Timeout (seconds)"
+msgstr ""
+
+#: pages/editformdesign.php:240
+msgid "Add Form Element:"
+msgstr ""
+
+#: pages/editformdesign.php:254
+msgid "Insert Saved Form"
+msgstr ""
+
+#: pages/editformdesign.php:266
+msgid "Insert Fields From:"
+msgstr ""
+
+#: pages/editformdesign.php:273
+msgid "Insert After:"
+msgstr ""
+
+#: pages/editformdesign.php:275
+msgid "(Insert at beginning)"
+msgstr ""
+
+#: pages/editformdesign.php:279
+msgid "(Insert at end)"
+msgstr ""
+
+#: pages/editformdesign.php:282
+msgid "Load Fields"
+msgstr ""
+
+#: pages/editformdesign.php:314
+msgid "Appearance"
+msgstr ""
+
+#: pages/editformdesign.php:344
+msgid "Customize"
+msgstr ""
+
+#: pages/editformdesign.php:348
+msgid "Submit acknowledgement message:"
+msgstr ""
+
+#: pages/editformdesign.php:349
+msgid "This is displayed after the form has been submitted"
+msgstr ""
+
+#: pages/editformdesign.php:354
+msgid "Show summary with acknowledgment:"
+msgstr ""
+
+#: pages/editformdesign.php:355
+msgid ""
+"A summary of the submitted data will be shown along with the acknowledgment "
+"message"
+msgstr ""
+
+#: pages/editformdesign.php:360
+msgid "Submit button label:"
+msgstr ""
+
+#: pages/editformdesign.php:364
+msgid "Required item message:"
+msgstr ""
+
+#: pages/editformdesign.php:365
+msgid ""
+"This is shown if a user leaves a required item blank. The item's label will "
+"appear in place of '%s'."
+msgstr ""
+
+#: db.php:120
+msgid "Numbers Only"
+msgstr ""
+
+#: db.php:121
+msgid "'%s' must be a valid number"
+msgstr ""
+
+#: db.php:126
+msgid "Phone Number"
+msgstr ""
+
+#: db.php:127
+msgid "'%s' must be a valid phone number"
+msgstr ""
+
+#: db.php:129
+msgid "/^.*[0-9]{3}.*[0-9]{3}.*[0-9]{4}.*$/"
+msgstr ""
+
+#: db.php:133
+msgid "E-Mail"
+msgstr ""
+
+#: db.php:134
+msgid "'%s' must be a valid E-Mail address"
+msgstr ""
+
+#: db.php:139
+msgid "Date (MM/DD/YY)"
+msgstr ""
+
+#: db.php:140
+msgid "'%s' must be a date (MM/DD/YY)"
+msgstr ""
+
+#. translators: the following are for the options for the default form display
+#. template
+#: templates/fm-form-default.php:61
+msgid "Show form title:"
+msgstr ""
+
+#: templates/fm-form-default.php:62
+msgid "Show border:"
+msgstr ""
+
+#: templates/fm-form-default.php:63
+msgid "Label position:"
+msgstr ""
+
+#: templates/fm-form-default.php:64
+msgid "Labels can be placed to the left or above each field"
+msgstr ""
+
+#: templates/fm-form-default.php:65
+msgctxt "template-option"
+msgid "Left"
+msgstr ""
+
+#: templates/fm-form-default.php:66
+msgctxt "template-option"
+msgid "Top"
+msgstr ""
+
+#: templates/fm-form-default.php:67
+msgid "Label width (in pixels):"
+msgstr ""
+
+#: templates/fm-form-default.php:68
+msgid "Applies to checkboxes, and when labels are to the left"
+msgstr ""
+
+#: wordpress-form-manager.php:55
+msgid "Form Manager requires WordPress version 3.0 or higher"
+msgstr ""
+
+#: wordpress-form-manager.php:59
+msgid "Form Manager requires PHP version 5.2 or higher"
+msgstr ""
+
+#: wordpress-form-manager.php:64
+msgid "Form manager requires MySQL version 5.0.3 or higher"
+msgstr ""
+
+#: wordpress-form-manager.php:190
+msgid ""
+"There may be (data) associated with the form item(s) you removed. Are you "
+"sure you want to save?"
+msgstr ""
+
+#: wordpress-form-manager.php:191
+msgid "Any unsaved changes will be lost. Are you sure?"
+msgstr ""
+
+#: wordpress-form-manager.php:192
+msgid "Click here to download"
+msgstr ""
+
+#: wordpress-form-manager.php:193
+msgid "There are no files to download"
+msgstr ""
+
+#: wordpress-form-manager.php:194
+msgid "Unable to create .ZIP file"
+msgstr ""
+
+#: wordpress-form-manager.php:195
+msgid "move"
+msgstr ""
+
+#: wordpress-form-manager.php:197
+msgid "Enter items separated by commas"
+msgstr ""
+
+#: wordpress-form-manager.php:198
+msgid "hide"
+msgstr ""
+
+#: wordpress-form-manager.php:199
+msgid "show"
+msgstr ""
+
+#: wordpress-form-manager.php:200
+msgid "Add Test"
+msgstr ""
+
+#: wordpress-form-manager.php:201
+msgid "Add Item"
+msgstr ""
+
+#: wordpress-form-manager.php:202
+msgid "Applies to"
+msgstr ""
+
+#: wordpress-form-manager.php:203
+msgid "AND"
+msgstr ""
+
+#: wordpress-form-manager.php:204
+msgid "OR"
+msgstr ""
+
+#: wordpress-form-manager.php:205
+msgid "(Choose a rule type)"
+msgstr ""
+
+#: wordpress-form-manager.php:206
+msgid "Only show elements if..."
+msgstr ""
+
+#: wordpress-form-manager.php:207
+msgid "Show elements if..."
+msgstr ""
+
+#: wordpress-form-manager.php:208
+msgid "Hide elements if..."
+msgstr ""
+
+#: wordpress-form-manager.php:209
+msgid "Only require elements if..."
+msgstr ""
+
+#: wordpress-form-manager.php:210
+msgid "Require elements if"
+msgstr ""
+
+#: wordpress-form-manager.php:211
+msgid "Do not require elements if"
+msgstr ""
+
+#: wordpress-form-manager.php:212
+msgid "..."
+msgstr ""
+
+#: wordpress-form-manager.php:213
+msgid "equals"
+msgstr ""
+
+#: wordpress-form-manager.php:214
+msgid "does not equal"
+msgstr ""
+
+#: wordpress-form-manager.php:215
+msgid "is less than"
+msgstr ""
+
+#: wordpress-form-manager.php:216
+msgid "is greater than"
+msgstr ""
+
+#: wordpress-form-manager.php:217
+msgid "is less than or equal to"
+msgstr ""
+
+#: wordpress-form-manager.php:218
+msgid "is greater than or equal to"
+msgstr ""
+
+#: wordpress-form-manager.php:219
+msgid "is empty"
+msgstr ""
+
+#: wordpress-form-manager.php:220
+msgid "is not empty"
+msgstr ""
+
+#: wordpress-form-manager.php:221
+msgid "is checked"
+msgstr ""
+
+#: wordpress-form-manager.php:222
+msgid "is not checked"
+msgstr ""
+
+#: wordpress-form-manager.php:274
+msgid "Advanced Settings"
+msgstr ""
+
+#: wordpress-form-manager.php:368 wordpress-form-manager.php:374
+msgid ""
+"Form Manager: shortcode must include a form slug. For example, something "
+"like '%s'"
+msgstr ""
+
+#: api.php:96
+msgid "(form %s not found)"
+msgstr ""
+
+#. Plugin Name of the plugin/theme
+msgid "Form Manager"
+msgstr ""
+
+#. Plugin URI of the plugin/theme
+msgid "http://www.campbellhoffman.com/form-manager/"
+msgstr ""
+
+#. Description of the plugin/theme
+msgid ""
+"Create custom forms; download entered data in .csv format; validation, "
+"required fields, custom acknowledgments;"
+msgstr ""
+
+#. Author of the plugin/theme
+msgid "Campbell Hoffman"
+msgstr ""
+
+#. Author URI of the plugin/theme
+msgid "http://www.campbellhoffman.com/"
+msgstr ""
diff --git a/src/wp-content/plugins/wordpress-form-manager/mce_plugins/editor_plugin.js b/src/wp-content/plugins/wordpress-form-manager/mce_plugins/editor_plugin.js
new file mode 100644
index 00000000..c4414037
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/mce_plugins/editor_plugin.js
@@ -0,0 +1,37 @@
+(function() {
+ tinymce.create('tinymce.plugins.FormManager', {
+ init : function(ed, url) {
+ // Register commands
+ ed.addCommand('wp_cmd_form_manager', function() {
+ ed.windowManager.open({
+ file : url + '/form.php',
+ width : 350 ,
+ height : 130,
+ inline : 1
+ }, {
+ plugin_url : url
+ });
+ });
+
+
+ ed.addButton('WPformManager', {
+ title : 'WordPress Form Manager',
+ image : url+'/formmanager.png',
+ cmd: 'wp_cmd_form_manager'
+ });
+ },
+ createControl : function(n, cm) {
+ return null;
+ },
+ getInfo : function() {
+ return {
+ longname : "WordPress Form Manager Shortcode",
+ author : 'Campbell Hoffman',
+ authorurl : 'http://www.campbellhoffman.com/',
+ infourl : 'http://www.campbellhoffman.com/',
+ version : "1.0"
+ };
+ }
+ });
+ tinymce.PluginManager.add('WPformManager', tinymce.plugins.FormManager);
+})();
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/mce_plugins/form.php b/src/wp-content/plugins/wordpress-form-manager/mce_plugins/form.php
new file mode 100644
index 00000000..043f893a
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/mce_plugins/form.php
@@ -0,0 +1,77 @@
+getFormList();
+?>
+
+
+ Form Manager
+
+
+
+
+
+
+
+
{#wordpress_form_manager_dlg.desc}
+
+
{#wordpress_form_manager_dlg.label}:
+
+
+ '>
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wp-content/plugins/wordpress-form-manager/mce_plugins/formmanager.png b/src/wp-content/plugins/wordpress-form-manager/mce_plugins/formmanager.png
new file mode 100644
index 00000000..4c4870d5
Binary files /dev/null and b/src/wp-content/plugins/wordpress-form-manager/mce_plugins/formmanager.png differ
diff --git a/src/wp-content/plugins/wordpress-form-manager/mce_plugins/langs/en_dlg.js b/src/wp-content/plugins/wordpress-form-manager/mce_plugins/langs/en_dlg.js
new file mode 100644
index 00000000..fd90098c
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/mce_plugins/langs/en_dlg.js
@@ -0,0 +1,4 @@
+tinyMCE.addI18n('en.wordpress_form_manager_dlg',{
+ label:"Select form",
+ desc:"Insert form",
+});
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/mce_plugins/langs/it_dlg.js b/src/wp-content/plugins/wordpress-form-manager/mce_plugins/langs/it_dlg.js
new file mode 100644
index 00000000..286403f3
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/mce_plugins/langs/it_dlg.js
@@ -0,0 +1,4 @@
+tinyMCE.addI18n('it.wordpress_form_manager_dlg',{
+label:"Seleziona modulo",
+desc:"Inserisci un modulo",
+});
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/mce_plugins/rule.js b/src/wp-content/plugins/wordpress-form-manager/mce_plugins/rule.js
new file mode 100644
index 00000000..59921f18
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/mce_plugins/rule.js
@@ -0,0 +1,23 @@
+var WPformManagerDialog = {
+ init : function(ed) {
+ var dom = ed.dom, f = document.forms[0], n = ed.selection.getNode(), w;
+ },
+
+ update : function() {
+ var ed = tinyMCEPopup.editor, h, f = document.forms[0], st = '';
+ var select_form=f.form_slug;
+ var x = select_form.selectedIndex;
+ var form_=select_form.options[x].value;
+
+ h='[' + fm_shortcode + ' '+form_+']';
+
+
+ ed.execCommand("mceInsertContent", false, h);
+ tinyMCEPopup.close();
+ }
+};
+function setFormValue(name, value) {
+ document.forms[0].elements[name].value = value;
+}
+tinyMCEPopup.requireLangPack();
+tinyMCEPopup.onInit.add(WPformManagerDialog.init, WPformManagerDialog);
diff --git a/src/wp-content/plugins/wordpress-form-manager/mce_plugins/tiny_mce_popup.js b/src/wp-content/plugins/wordpress-form-manager/mce_plugins/tiny_mce_popup.js
new file mode 100644
index 00000000..c9bf1fe4
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/mce_plugins/tiny_mce_popup.js
@@ -0,0 +1,5 @@
+
+// Uncomment and change this document.domain value if you are loading the script cross subdomains
+// document.domain = 'moxiecode.com';
+
+var tinymce=null,tinyMCEPopup,tinyMCE;tinyMCEPopup={init:function(){var b=this,a,c;a=b.getWin();tinymce=a.tinymce;tinyMCE=a.tinyMCE;b.editor=tinymce.EditorManager.activeEditor;b.params=b.editor.windowManager.params;b.features=b.editor.windowManager.features;b.dom=b.editor.windowManager.createInstance("tinymce.dom.DOMUtils",document);if(b.features.popup_css!==false){b.dom.loadCSS(b.features.popup_css||b.editor.settings.popup_css)}b.listeners=[];b.onInit={add:function(e,d){b.listeners.push({func:e,scope:d})}};b.isWindow=!b.getWindowArg("mce_inline");b.id=b.getWindowArg("mce_window_id");b.editor.windowManager.onOpen.dispatch(b.editor.windowManager,window)},getWin:function(){return(!window.frameElement&&window.dialogArguments)||opener||parent||top},getWindowArg:function(c,b){var a=this.params[c];return tinymce.is(a)?a:b},getParam:function(b,a){return this.editor.getParam(b,a)},getLang:function(b,a){return this.editor.getLang(b,a)},execCommand:function(d,c,e,b){b=b||{};b.skip_focus=1;this.restoreSelection();return this.editor.execCommand(d,c,e,b)},resizeToInnerSize:function(){var e=this,g,a=document.body,c=e.dom.getViewPort(window),d,f;d=e.getWindowArg("mce_width")-c.w;f=e.getWindowArg("mce_height")-c.h;if(e.isWindow){window.resizeBy(d,f)}else{e.editor.windowManager.resizeBy(d,f,e.id)}},executeOnLoad:function(s){this.onInit.add(function(){eval(s)})},storeSelection:function(){this.editor.windowManager.bookmark=tinyMCEPopup.editor.selection.getBookmark(1)},restoreSelection:function(){var a=tinyMCEPopup;if(!a.isWindow&&tinymce.isIE){a.editor.selection.moveToBookmark(a.editor.windowManager.bookmark)}},requireLangPack:function(){var b=this,a=b.getWindowArg("plugin_url")||b.getWindowArg("theme_url");if(a&&b.editor.settings.language&&b.features.translate_i18n!==false){a+="/langs/"+b.editor.settings.language+"_dlg.js";if(!tinymce.ScriptLoader.isDone(a)){document.write('
+
+
+ " />
+ " onclick="return fm_saveConditions();" />
+
+
+
+
+
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/pages/editformdesign.php b/src/wp-content/plugins/wordpress-form-manager/pages/editformdesign.php
new file mode 100644
index 00000000..3e1235fa
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/pages/editformdesign.php
@@ -0,0 +1,379 @@
+getForm($_REQUEST['id']);
+
+$formList = $fmdb->getFormList();
+
+$formTemplateFile = $form['form_template'];
+ if($formTemplateFile == '') $formTemplateFile = $fmdb->getGlobalSetting('template_form');
+ if($formTemplateFile == '') $formTemplateFile = get_option('fm-default-form-template');
+
+$formTemplate = $fm_templates->getTemplateAttributes($formTemplateFile);
+
+$templateList = $fm_templates->getTemplateFilesByType();
+
+/// LOAD FIELDS //////////////////////////////////////////
+
+if(isset($_POST['load-fields'])){
+ $loadedForm = $fmdb->copyForm($_POST['load-fields-id']);
+ if($_POST['load-fields-insert-after'] == "0"){ //insert at beginning
+ $temp = $form['items'];
+ $form['items'] = $loadedForm['items'];
+ foreach($temp as $item)
+ $form['items'][] = $item;
+ }
+ else if($_POST['load-fields-insert-after'] == "1"){ //insert at end
+ foreach($loadedForm['items'] as $item)
+ $form['items'][] = $item;
+ }
+ else{
+ $temp = array();
+ foreach($form['items'] as $oldItem){
+ $temp[] = $oldItem;
+ if($oldItem['unique_name'] == $_POST['load-fields-insert-after']){
+ foreach($loadedForm['items'] as $newItem)
+ $temp[] = $newItem;
+ }
+ }
+ $form['items'] = $temp;
+ }
+}
+
+// parse e-mail list
+$email_list = explode(",", $form['email_list']);
+
+///////////////////////////////////////////////////////
+?>
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/pages/editformnn.php b/src/wp-content/plugins/wordpress-form-manager/pages/editformnn.php
new file mode 100644
index 00000000..5ce59b8e
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/pages/editformnn.php
@@ -0,0 +1,82 @@
+getForm($_POST['fm-form-id']);
+
+ $formInfo = array();
+
+ $formInfo['items'] = $form['items'];
+ foreach($form['items'] as $index => $item){
+ $formInfo['items'][$index]['nickname'] = sanitize_title($_POST[$item['unique_name'].'-nickname']);
+ }
+ $fmdb->updateForm($_POST['fm-form-id'], $formInfo);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////
+
+$form = null;
+if($_REQUEST['id']!="")
+ $form = $fmdb->getForm($_REQUEST['id']);
+
+/////////////////////////////////////////////////////////////////////////////////////
+
+$fm_globalSettings = $fmdb->getGlobalSettings();
+
+?>
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/pages/editsettings.php b/src/wp-content/plugins/wordpress-form-manager/pages/editsettings.php
new file mode 100644
index 00000000..c9ceff74
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/pages/editsettings.php
@@ -0,0 +1,88 @@
+setGlobalSetting('title', $_POST['title']);
+ $fmdb->setGlobalSetting('submitted_msg', $_POST['submitted_msg']);
+ $fmdb->setGlobalSetting('required_msg', $_POST['required_msg']);
+ $fmdb->setGlobalSetting('recaptcha_public', $_POST['recaptcha_public']);
+ $fmdb->setGlobalSetting('recaptcha_private', $_POST['recaptcha_private']);
+ $fmdb->setGlobalSetting('recaptcha_theme', (trim($_POST['recaptcha_theme_custom']) == "" ? $_POST['recaptcha_theme'] : $_POST['recaptcha_theme_custom']));
+ $fmdb->setGlobalSetting('email_admin', $_POST['email_admin'] == "on" ? "YES" : "");
+ $fmdb->setGlobalSetting('email_reg_users', $_POST['email_reg_users'] == "on" ? "YES" : "");
+}
+
+/////////////////////////////////////////////////////////////////////////////////////
+$fm_globalSettings = $fmdb->getGlobalSettings();
+
+?>
+
+
+
+
+
+ " />
+
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/pages/editsettingsadv.php b/src/wp-content/plugins/wordpress-form-manager/pages/editsettingsadv.php
new file mode 100644
index 00000000..3ee998aa
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/pages/editsettingsadv.php
@@ -0,0 +1,229 @@
+setTextValidators($validators);
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ //Process shortcode
+
+ $newShortcode = sanitize_title($_POST['shortcode']);
+ $oldShortcode = get_option('fm-shortcode');
+ if($newShortcode != $oldShortcode){
+ remove_shortcode($oldShortcode);
+ update_option('fm-shortcode', $newShortcode);
+ add_shortcode($newShortcode, 'fm_shortcodeHandler');
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ //Process template settings
+
+ $fmdb->setGlobalSetting('template_form', $_POST['template_form']);
+ $fmdb->setGlobalSetting('template_email', $_POST['template_email']);
+ $fmdb->setGlobalSetting('template_summary', $_POST['template_summary']);
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ //Other
+
+ update_option('fm-enable-mce-button', $_POST['enable_mce_button']?"YES":"");
+
+}
+elseif(isset($_POST['remove-template'])){
+ $fm_templates->removeTemplate($_POST['remove-template-filename']);
+}
+else if(isset($_POST['reset-templates'])){
+ $fm_templates->resetTemplates();
+}
+else if(isset($_POST['check-db'])){
+ echo '';
+ $fmdb->consistencyCheck();
+ echo ' ';
+ die();
+}
+
+/////////////////////////////////////////////////////////////////////////////////////
+$fm_globalSettings = $fmdb->getGlobalSettings();
+
+/////////////////////////////////////////////////////////////////////////////////////
+// Load the templates
+
+$templateList = $fm_templates->getTemplateFilesByType();
+$templateFiles = $fm_templates->getTemplateList();
+
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
" onclick="return fm_resetTemplatesSubmit()" />
+
+
+
+
+
+
+
+
+
+
+
+
+ " onclick="return fm_saveSettingsAdvanced()" />
+
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/pages/formdata.php b/src/wp-content/plugins/wordpress-form-manager/pages/formdata.php
new file mode 100644
index 00000000..0120b500
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/pages/formdata.php
@@ -0,0 +1,396 @@
+getForm($_REQUEST['id']);
+if($form != null){
+ $orderBy = isset($_REQUEST['orderby']) ? $_REQUEST['orderby'] : 'timestamp';
+ $orderBy = $fmdb->isValidItem($form, $orderBy) ? $orderBy : 'timestamp';
+ $ord = $_REQUEST['ord'] == 'ASC' ? 'ASC' : 'DESC';
+ $formData = $fmdb->getFormSubmissionData($form['ID'], $orderBy, $ord, ($set*$itemsPerPage), $itemsPerPage);
+
+ $numDataPages = ceil($formData['count'] / $itemsPerPage);
+}
+
+$hasPosts = $fmdb->dataHasPublishedSubmissions($form['ID']);
+
+// PARSE THE QUERY STRING
+parse_str($_SERVER['QUERY_STRING'], $queryVars);
+
+////////////////////////////////////////////////////////////////////////////////
+//ACTIONS
+
+//Delete data row(s):
+if(isset($_POST['fm-action-select'])){
+
+ switch($_POST['fm-action-select']){
+ case "delete":
+ if(!$fm_MEMBERS_EXISTS || current_user_can('form_manager_delete_data')){
+ $toDelete = fm_data_getCheckedRows();
+ foreach($toDelete as $del)
+ $fmdb->deleteSubmissionDataRow($form['ID'], $formData['data'][$del]);
+ }
+ //clean up the mess we made
+ $formData = $fmdb->getFormSubmissionData($form['ID'], $orderBy, $ord, ($set*$itemsPerPage), $itemsPerPage);
+ break;
+ case "delete_all":
+ if(!$fm_MEMBERS_EXISTS || current_user_can('form_manager_delete_data'))
+ $fmdb->clearSubmissionData($form['ID']);
+ //clean up the mess we made
+ $formData = $fmdb->getFormSubmissionData($form['ID'], $orderBy, $ord, ($set*$itemsPerPage), $itemsPerPage);
+ break;
+ case "edit":
+ if(!$fm_MEMBERS_EXISTS || current_user_can('form_manager_edit_data'))
+ $fm_dataDialog = "edit";
+ break;
+ case "summary":
+ $fm_dataDialog = "summary";
+ break;
+ }
+}
+
+//Edit data rows(s)
+else if((!$fm_MEMBERS_EXISTS || current_user_can('form_manager_edit_data')) && isset($_POST['fm-edit-data-ok'])){
+ $numRows = $_POST['fm-num-edit-rows'];
+ $postFailed = false;
+
+ for($x=0;$x<$numRows;$x++){
+ $dataIndex = $_POST['fm-edit-row-'.$x];
+
+ $newData = array();
+ $postData = array();
+ foreach($form['items'] as $item){
+ if($item['type'] != 'file'
+ && $item['type'] != 'separator'
+ && $item['type'] != 'note'
+ && $item['type'] != 'recaptcha'){
+ $processed = $fm_controls[$item['type']]->processPost($item['unique_name']."-".$x, $item);
+ if($processed === false){
+ $postFailed = true;
+ }
+ if($item['db_type'] != "NONE")
+ $postData[$item['unique_name']] = $processed;
+ }
+ }
+
+ $fmdb->updateDataSubmissionRow($form['ID'],
+ $formData['data'][$dataIndex]['timestamp'],
+ $formData['data'][$dataIndex]['user'],
+ $formData['data'][$dataIndex]['user_ip'],
+ $postData
+ );
+ }
+ //clean up the mess we made
+ $formData = $fmdb->getFormSubmissionData($form['ID'], $orderBy, $ord, ($set*$itemsPerPage), $itemsPerPage);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// BEGIN OUTPUT
+
+switch($fm_dataDialog){
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//EDIT DIALOG
+
+case "edit":
+
+if($formData !== false){
+ $numRows = (int)$_POST['fm-num-data-rows'];
+
+ ?>
+
+
+
+
:
+
+ " />
+ " />
+
+
+
+
+
+ :
+ 'fm_data_displayTextEdit',
+ 'textarea' => 'fm_data_displayTextAreaEdit',
+ 'file' => 'fm_data_displayFileEdit'
+ );
+ $exclude_types = array('note', 'recaptcha');
+
+ $editRowCount = 0;
+ for($x=0;$x<$numRows;$x++){
+ if(isset($_POST['fm-checked-'.$x])){
+ echo "
".$fm_display->displayFormBare($form, array('exclude_types' => $exclude_types, 'display_callbacks' => $callbacks, 'unique_name_suffix' => '-'.$x), $formData['data'][$x])."
\n";
+ echo "
\n";
+ $editRowCount++;
+ }
+ }
+ ?>
+
+
+
+
+
+
+
+
+
+
:
+
+
+
+
+ ".$fm_display->displayDataSummaryNoTemplate($form, $formData['data'][$x], "", "", true)."
\n";
+ }
+ }
+ ?>
+
+
+
+ $colMaxChars[$x]) $colMaxChars[$x] = $len;
+ $x++;
+ }
+ }
+}
+
+//'total' character width
+$totalCharWidth = 0;
+for($x=0;$x
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ " name="fm-doaction" id="fm-doaction" onclick="return fm_confirmSubmit()" class="button-secondary action" />
+
+
+
+
+
+
+
+ Showing page ( Rows - out of ):
+
+
+
+
+
+
+
+
+
+
+"; }
+function fm_data_displayTextAreaEdit($uniqueName, $itemInfo){ return "".$itemInfo['extra']['value']." "; }
+function fm_data_displayFileEdit($uniqueName, $itemInfo){ return $itemInfo['extra']['value']; }
+
+?>
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/pages/main.php b/src/wp-content/plugins/wordpress-form-manager/pages/main.php
new file mode 100644
index 00000000..c76dc014
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/pages/main.php
@@ -0,0 +1,188 @@
+createForm(null);
+
+
+//APPLY ACTION$wpdb->prefix.get_option('fm-data-table-prefix')
+if(isset($_POST['fm-doaction'])){
+ //check for 'delete'
+ if($_POST['fm-action-select'] == "delete"){
+ //get a list of selected IDs
+ $fList = $fmdb->getFormList();
+ $deleteIds = array();
+ foreach($fList as $form){
+ if(isset($_POST['fm-checked-'.$form['ID']])) $deleteIds[] = $form['ID'];
+ }
+ if(sizeof($deleteIds)>0) $currentDialog = "verify-delete";
+ }
+}
+
+//SINGLE DELETE
+if((!$fm_MEMBERS_EXISTS || current_user_can('form_manager_delete_forms')) && $_POST['fm-action'] == "delete"){
+ $deleteIds = array();
+ $deleteIds[0] = $_POST['fm-id'];
+ $currentDialog = "verify-delete";
+}
+
+//VERIFY DELETE
+if((!$fm_MEMBERS_EXISTS || current_user_can('form_manager_delete_forms')) && isset($_POST['fm-delete-yes'])){
+ $index=0;
+ while(isset($_POST['fm-delete-id-'.$index])){
+ $fmdb->deleteForm($_POST['fm-delete-id-'.$index]);
+ $index++;
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+// DISPLAY UI
+
+$formList = $fmdb->getFormList();
+
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ " />
+
+
+ 0): ?>
+
+
+
+
+
+
+
+ " name="fm-doaction" id="fm-doaction" class="button-secondary action" />
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/readme.txt b/src/wp-content/plugins/wordpress-form-manager/readme.txt
new file mode 100644
index 00000000..05de75c1
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/readme.txt
@@ -0,0 +1,277 @@
+=== WordPress Form Manager ===
+Contributors: hoffcamp
+Donate link: http://www.campbellhoffman.com/
+Tags: form, forms, form manager
+Requires at least: 3.0.0
+Tested up to: 3.1.1
+Stable tag: 1.5.9
+
+Put custom forms into posts and pages using shortcodes. Download submissions in .csv format.
+
+== Description ==
+
+Form Manager is a tool for creating forms to collect and download data from visitors to your WordPress site, and keeps track of time/date and registered users as well. Forms are added to posts or pages using a simple shortcode format, or can be added to your theme with a simple API.
+
+= Features =
+* validation
+* required fields
+* custom acknowledgments
+* e-mail notifications.
+* form display templates
+
+= Supported field types =
+
+* text field
+* text area
+* dropdown
+* radio buttons
+* checkbox / checkbox list
+* multiline select
+* file upload
+* reCAPTCHA
+
+Subtitles and notes can also be added to the form in any location.
+
+= Publishing a Form =
+Forms are placed within posts or pages. Look for the Form Manager button in your post editor towards the right (Thanks to [Andrea Bersi](http://www.andreabersi.com)).
+
+You can also type in shortcodes yourself. For example, if your form's slug is 'form-1', put the following within a post or page:
+
+`[form form-1]`
+
+
+
+= Languages =
+* Italiano (it_IT) - [Andrea Bersi](http://www.andreabersi.com)
+* Nederlands (nl_NL) - [Sander Kolthof](http://www.fullcirclemedia.nl)
+
+== Changelog ==
+= 1.5.9 =
+* Added links to published submissions in the data page
+
+= 1.5.8 =
+* Improved conditions editor
+* Fixed bug when uploading files with Unicode file names
+* Added some missing internationalization handles
+* Conditions can apply to 'file' inputs
+* Added submission information to the main page
+
+= 1.5.7 =
+* Fixed a bug when updating a form element's nickname
+
+= 1.5.6 =
+* Fixed permissions bug
+* Fixed CSV download bug
+* Added separators, notes, and recaptchas to the items you can show/hide with conditions.
+
+= 1.5.4 =
+* Fixed install issues on certain platforms. Thanks to Metin Kale.
+
+= 1.5.3 =
+* Added an option to disable the TinyMCE button in the 'Advanced' settings page
+
+= 1.5.2 =
+* Files can be uploaded to a directory of your choosing
+* Links in summaries / e-mails to uploaded files, if they are in a directory
+
+= 1.5.1 =
+* Fixed script loading bug in certain environments
+
+= 1.5.0 =
+* Added conditional behavior, e.g., only show certain items based on the values of other items
+* Dutch language support (Thanks to [Sander Kolthof](www.fullcirclemedia.nl))
+* Fixed '0 kB' summary bug
+* Fixed checkbox default value bug
+
+= 1.4.23 =
+* Editor/Data/Advanced for forms now uses a 'tabbed' interface
+* Added database check for troubleshooting
+* Added checkbox positioning option
+* Added more specific capabilities for Members plugin
+
+= 1.4.22 =
+* Notes can display HTML
+
+= 1.4.21 =
+* Added 'maximum length' attribute for text inputs
+* Added tinyMCE button. (Many thanks to [Andrea Bersi](http://www.andreabersi.com))
+
+= 1.4.20 =
+* Fixed install error
+
+= 1.4.19 =
+* Added auto-redirect option
+
+= 1.4.18 =
+* Added fm_getFormID() to API, returns a form's ID number from a slug
+* Fixed bug in formdata shortcode 'orderby' attribute
+* Fixed reCAPTCHA bug
+* Added support for placeholders in non HTML 5 browsers
+
+= 1.4.17 =
+* Italian language support (Thanks to [Andrea Bersi](http://www.andreabersi.com))
+* Specify custom theme for reCAPTCHA
+* Fixed problems when trying to edit submission data
+* Added more capabilites to the Members plugin
+
+= 1.4.16 =
+* Publish submitted data to posts
+* Show a table of all submissions within a post
+* Fixed IE download issues
+* Fixed Unicode issues with CSV / ZIP downloads
+* Integration with WP-SlimStat
+
+= 1.4.15 =
+* Fixed 'show summary' error
+* Fixed CSV download with international characters
+* Admins can edit posted data
+* Minor interface changes
+* Compatibility for internationalization added
+* CSS class names for each form item
+* Custom capabilities, integration with the Members plugin
+
+= 1.4.14 =
+* Fixed install error
+
+= 1.4.13 =
+* Minor bug fixes
+
+= 1.4.12 =
+* Added 'template reset' in advanced settings
+
+= 1.4.11 =
+* Minor bug fixes
+
+= 1.4.10 =
+* Minor bug fixes
+
+= 1.4.9 =
+* Added e-mail notification customization to 'Advanced' form settings
+
+= 1.4.8 =
+* Fixed install error for 1.4.7
+
+= 1.4.7 =
+* Fixed e-mail list
+
+= 1.4.6 =
+* Added text entry for list options
+* Moved 'Templates' and 'Behavior' to a new 'Advanced' settings page for forms
+
+= 1.4.5 =
+* Fixed summary template formatting
+
+= 1.4.4 =
+* Added file upload form element
+* Save script bug fixes
+
+= 1.4.3 =
+* Added IP address to submission data
+* Fixed the summary template timestamp label
+
+= 1.4.2 =
+* Fixed e-mail list bug
+
+= 1.4.1 =
+* Fixed saved bug
+
+= 1.4.0 =
+* Templates for e-mail notifications and form display, similar to WordPress theme functionality
+* HTML 5 placeholders in supported browsers
+* E-mail notification conflict with certain hosts
+* Fixed 'list' option bug when creating a new list
+
+= 1.3.15 =
+* Fixed asterisks appearing below labels
+* Fixed include bug with XAMPP
+
+= 1.3.14 =
+* Added reCAPTCHA color scheme option in settings
+* Fixed conflict with other plugins using Google RECAPTCHA
+
+= 1.3.13 =
+* Changed upgrade mechanism
+
+= 1.3.12 =
+* Added 'required item message' to form editor
+* Fixed upgrade from 1.3.3 and older
+
+= 1.3.11 =
+* Full Unicode support
+* Added date validator for text fields
+
+= 1.3.10 =
+* Added API stable fm_doFormBySlug($formSlug) to show forms within templates
+* Admin can change plugin's shortcode in 'Advanced Settings'
+
+= 1.3.9 =
+* Fixed form behavior selection bug
+
+= 1.3.8 =
+* Fixed possible style conflict with Kubric (Default) theme
+
+= 1.3.7 =
+* Fixed 'fm_settiings' table install error
+
+= 1.3.6 =
+* Advanced settings page
+* Custom text validators using regular expressions
+
+= 1.3.5 =
+* E-mail notifications for registered users
+* Admin and registered user e-mail notifications are now a global rather than per form setting.
+
+= 1.3.4 =
+* Added e-mail notification for user input (acknowledgment e-mail)
+* Changed editor interface
+
+= 1.3.3 =
+* Adjusted for register_activation_hook() change
+* Fixed some CSS style names likely to have conflicts
+
+= 1.3.2 =
+* Added reCAPTCHA field
+* Added Settings page
+* Multiple forms per page
+* Fixed CSV data double quote bug
+* Improved acknowledgement formatting
+
+= 1.3.1 =
+* Fixed 'Single submission' behavior bug
+* Items in form editor update when 'done' is clicked
+* Fixed list option editor bug
+
+= 1.3.0 =
+* Added form behaviors for registered users
+* Cleaned up data page
+* Added data summary to data page
+
+= 1.2.10 =
+* Rearranged editor sections
+* Fixed checkbox list 'required' test
+* Added single checkbox 'requried' test
+
+= 1.2.9 =
+* Fixed .csv download bug
+
+= 1.2.8 =
+* Added e-mail notifications.
+
+= 1.2.5 =
+* Fixes multisite edit/data page bug.
+
+= 1.2.4 =
+* Fixes an installation error when starting with a fresh plugin install.
+
+
+*** I am starting work on version 2. If you have suggestions or requests, please let me know! ***
+
+== Installation ==
+
+Method 1: Activate the 'WordPress Form Manager' plugin through the 'Plugins' menu in WordPress.
+
+Method 2: Download the source code for the plugin, and upload the 'wordpress-form-manager' directory to the '/wp-content/plugins/' directory.
+
+== Frequently Asked Questions ==
+
+Please visit [www.campbellhoffman.com/form-manager-faq/](http://www.campbellhoffman.com/form-manager-faq/) for FAQ and tutorials.
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/settings.php b/src/wp-content/plugins/wordpress-form-manager/settings.php
new file mode 100644
index 00000000..db9ec3a9
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/settings.php
@@ -0,0 +1,54 @@
+ __("New Form", 'wordpress-form-manager'),
+ 'labels_on_top' => 0,
+ 'submitted_msg' => __('Thank you! Your data has been submitted.', 'wordpress-form-manager'),
+ 'submit_btn_text' => __('Submit', 'wordpress-form-manager'),
+ 'required_msg' => __("\'%s\' is required.", 'wordpress-form-manager'),
+ 'show_title' => 1,
+ 'show_border' => 1,
+ 'label_width' => 200
+ ));
+
+$fm_registered_user_only_msg = "'%s' is only available to registered users.";
+
+/*
+reg_user_only - only show form to registered users
+display_summ - show the previous submission rather than the form
+no_dup - do not allow a submission after the first
+edit - give an 'edit' button after the previous submission summary
+overwrite - only store the latest submission
+*/
+
+/* translators: the following are descriptions of the different behavior types */
+
+$fm_form_behavior_types = array( __("Default", 'wordpress-form-manager') => '',
+ __("Registered users only", 'wordpress-form-manager') => 'reg_user_only',
+ __("Keep only most recent submission", 'wordpress-form-manager') => 'reg_user_only,overwrite',
+ __("Single submission", 'wordpress-form-manager') => 'reg_user_only,display_summ,single_submission',
+ __("'User profile' style", 'wordpress-form-manager') => 'reg_user_only,display_summ,edit'
+ );
+
+$fm_controls['text']->initValidators();
+?>
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/template.php b/src/wp-content/plugins/wordpress-form-manager/template.php
new file mode 100644
index 00000000..e7d29b5e
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/template.php
@@ -0,0 +1,227 @@
+ 'fm_templateControlSelect',
+ 'checkbox' => 'fm_templateControlCheckbox',
+ 'text' => 'fm_templateControlText'
+ );
+class fm_templateControlBase{
+
+ function getEditor($value, $option){
+ $id = $this->getVarId($option);
+ return " ";
+ }
+
+ function parseStoredValue($value, $option){
+ return $value;
+ }
+
+ function getVarId($option){
+ return 'fm-'.str_replace("\$", "", $option['var']);
+ }
+ //used for the javascript function that collects values for AJAX save; mostly to accomodate the checkbox type
+ function getElementValueAttribute(){ return 'value'; }
+}
+
+class fm_templateControlSelect extends fm_templateControlBase{
+ function getEditor($value, $option){
+ $id = $this->getVarId($option);
+ $str = "";
+ foreach($option['options'] as $k => $v){
+ $str.= ""._x(trim($v), 'template-option', 'wordpress-form-manager')." ";
+ }
+ $str.= " ";
+ return $str;
+ }
+}
+class fm_templateControlCheckbox extends fm_templateControlBase{
+ function getEditor($value, $option){
+ $id = $this->getVarId($option);
+ return " ";
+ }
+ function parseStoredValue($value, $option){
+ return ($value == "true");
+ }
+ function getElementValueAttribute(){ return 'checked'; }
+}
+class fm_templateControlText extends fm_templateControlBase{
+}
+////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////
+
+class fm_template_manager{
+
+////////////////////////////////////////////////////////////////////
+
+var $templatesDir;
+
+var $headers = array('option' => 'option',
+ 'label' => 'label',
+ 'description' => 'description',
+ 'options' => 'options',
+ 'default' => 'default',
+ 'template_name' => 'Template Name',
+ 'template_desc' => 'Template Description',
+ 'template_type' => 'Template Type'
+ );
+
+function __construct(){
+ $this->templatesDir = dirname(__FILE__).'/templates';
+}
+
+function getTemplateAttributes($fileName){
+ $file_data = fm_get_file_data($this->templatesDir.'/'.$fileName, $this->headers);
+ $templateAtts = array();
+ $templateAtts['options'] = array();
+ $currentOption = false;
+ foreach($file_data as $option){
+ switch($option['field']){
+ case 'option':
+ //closeout the current option if there is one
+ if($currentOption !== false) $templateAtts['options'][] = $currentOption;
+
+ $currentOption = array();
+ $opt = explode(",", $option['value']);
+ $currentOption['var'] = trim($opt[0]);
+ $currentOption['type'] = trim($opt[1]);
+ break;
+ case 'label':
+ $currentOption['label'] = trim($option['value']);
+ break;
+ case 'description':
+ $currentOption['description'] = trim($option['value']);
+ break;
+ case 'options':
+ eval("\$arr = array(" . trim($option['value']) . ");");
+ $currentOption['options'] = $arr;
+ break;
+ case 'default':
+ $currentOption['default'] = $option['value'];
+ break;
+ default:
+ $templateAtts[$option['field']] = $option['value'];
+ break;
+ }
+ }
+
+ if($currentOption !== false) $templateAtts['options'][] = $currentOption;
+
+ return $templateAtts;
+}
+
+function resetTemplates(){
+ global $fmdb;
+ $fmdb->flushTemplates();
+ $this->initTemplates();
+}
+
+function initTemplates(){
+ global $fmdb;
+
+ //compare the stored templates with those in the templates directory. Files that exist in the database but not on disk are re-created on disk; files that exist on disk are all stored in the database.
+ $files = $this->getTemplateFiles($this->templatesDir);
+ $dbTemplates = $fmdb->getTemplateList();
+
+ //echo ''.print_r($files, true).' ';
+ //echo ''.print_r($dbTemplates, true).' ';
+
+ //replace any 'lost' templates (this is primarily to keep template files across an update)
+ foreach($dbTemplates as $dbFile => $dbTemp){
+ $dbFile = trim($dbFile);
+ $templateInfo = $fmdb->getTemplate($dbFile, false);
+ if(isset($files[$dbFile])){ // file exists on disk
+ unset($files[$dbFile]); //unset the file; the list of files will be used later to load in new files
+ $filemtime = filemtime($this->templatesDir.'/'.$dbFile);
+ if( $filemtime > $templateInfo['modified']){ //file is a newer version than the one in the db
+ $content = file_get_contents($this->templatesDir.'/'.$dbFile);
+ $template = $this->getTemplateAttributes($dbFile);
+ $title = $template['template_name'];
+ //echo $title." updated ";
+ $fmdb->storeTemplate($dbFile, $title, $content, $filemtime);
+ }
+ }
+ else{ // file does not exist on disk
+ //echo $dbFile." recreated ";
+ $templateInfo = $fmdb->getTemplate($dbFile);
+
+ $fp = fopen($this->templatesDir."/".$dbFile, "w");
+ fwrite($fp, $templateInfo['content']);
+ fclose($fp);
+
+ }
+ }
+
+ foreach($files as $file){
+ $filemtime = filemtime($this->templatesDir.'/'.$file);
+ $content = file_get_contents($this->templatesDir.'/'.$file);
+ $title = $template['template_name'];
+ //echo $title." loaded ";
+ $fmdb->storeTemplate($file, $title, $content, $filemtime);
+ }
+}
+
+function getTemplateList(){
+ $files = $this->getTemplateFiles($this->templatesDir);
+ $arr = array();
+ foreach($files as $file){
+ $arr[$file] = $this->getTemplateAttributes($file);
+ }
+ return $arr;
+}
+
+function getTemplateFilesByType(){
+ $templates = $this->getTemplateList();
+
+ $templateList = array();
+ $templateList['form'] = array();
+ $templateList['email'] = array();
+ $templateList['summary'] = array();
+
+ foreach($templates as $file=>$temp){
+ if(strpos($temp['template_type'], 'form') !== false) $templateList['form'][$file] = $temp['template_name'];
+ if(strpos($temp['template_type'], 'email') !== false) $templateList['email'][$file] = $temp['template_name'];
+ if(strpos($temp['template_type'], 'summary') !== false) $templateList['summary'][$file] = $temp['template_name'];
+ }
+
+ return $templateList;
+}
+
+protected function getTemplateFiles($dir){
+ if($handle = opendir($dir)){
+ $arr = array();
+ while(($file = readdir($handle)) !== false){
+ if($file != "." && $file != ".." && is_file($dir."/".$file))
+ $arr[$file] = $file;
+ }
+ closedir($handle);
+ return $arr;
+ }
+ return false;
+}
+
+function removeTemplate($filename){
+ global $fmdb;
+ $fullpath = $this->templatesDir.'/'.$filename;
+ if(is_file($fullpath)) unlink($fullpath);
+ $fmdb->removeTemplate($filename);
+}
+
+function isTemplate($filename){
+ return file_exists($this->templatesDir.'/'.$filename);
+}
+
+////////////////////////////////////////////////////////////////////
+}
+////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////
+
+function fm_buildTemplateControlTypes($controlTypes){
+ $arr = array();
+ foreach($controlTypes as $name=>$class){
+ $arr[$name] = new $class();
+ }
+ return $arr;
+}
+global $fm_template_controls;
+
+$fm_template_controls = fm_buildTemplateControlTypes($fm_templateControlTypes);
+
+?>
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/templates/fm-form-default.php b/src/wp-content/plugins/wordpress-form-manager/templates/fm-form-default.php
new file mode 100644
index 00000000..47207ed6
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/templates/fm-form-default.php
@@ -0,0 +1,105 @@
+ 'Left', 'top' => 'Top'
+ default: left
+option: $labelWidth, text
+ label: Label width (in pixels):
+ description: Applies to checkboxes, and when labels are to the left
+ default: 200
+
+
+//////////////////////////////////////////////////////////////////////////////////////////
+
+Below are the functions that can be used within a form display template:
+
+fm_form_start(), fm_form_end() - These can be called (not echo'ed) to open and close the form, respectively.
+fm_form_hidden() - Nonce and other hidden values required for the form; can be omitted if fm_form_end() is used.
+fm_form_the_title() - The form's title
+
+The following can be used in place of the fm_form_start() function:
+fm_form_class() - The default form CSS class
+fm_form_action() - The default form action
+fm_form_ID() - Used for the opening form tag's 'name' and 'id' attributes.
+
+fm_form_the_submit_btn() - A properly formed submit button
+fm_form_submit_btn_name() - Submit button's 'name' attribute
+fm_form_submit_btn_text() - Submit button's 'value' attribute, as set in the form editor.
+fm_form_submit_btn_script() - Validation script
+
+fm_form_have_items() - Returns true if there are more items (used to loop through the form items, similar to have_posts() in wordpress themes)
+fm_form_the_item() - Sets up the current item (similar to the_post() in wordpress themes)
+fm_form_the_label() - The current item's label
+fm_form_the_input() - The current item's input element
+fm_form_the_nickname() - The current item's nickname
+
+fm_form_is_separator() - Returns true if the current element is a horizontal line
+fm_form_is_note() - Returns true if the current element is a note
+fm_form_is_required() - Returns true if the current item is set as required
+fm_form_item_type() - The current item's type
+
+fm_form_get_item_input($nickname) - get an item's input by nickname
+fm_form_get_item_label($nickname) - get an item's label by nickname
+
+//////////////////////////////////////////////////////////////////////////////////////////
+
+*/
+
+/* translators: the following are for the options for the default form display template */
+__("Show form title:", 'wordpress-form-manager');
+__("Show border:", 'wordpress-form-manager');
+__("Label position:", 'wordpress-form-manager');
+__("Labels can be placed to the left or above each field", 'wordpress-form-manager');
+_x('Left', 'template-option', 'wordpress-form-manager');
+_x('Top', 'template-option', 'wordpress-form-manager');
+__("Label width (in pixels):", 'wordpress-form-manager');
+__("Applies to checkboxes, and when labels are to the left", 'wordpress-form-manager');
+
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ">
+
+ *"; ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/templates/fm-summary-default.php b/src/wp-content/plugins/wordpress-form-manager/templates/fm-summary-default.php
new file mode 100644
index 00000000..61eb0b0b
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/templates/fm-summary-default.php
@@ -0,0 +1,56 @@
+
+
+
+
+
+".$userData->last_name.", ".$userData->first_name." ";
+}
+?>
+
+
+On:
+IP:
+
+
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/templates/fm-summary-multi.php b/src/wp-content/plugins/wordpress-form-manager/templates/fm-summary-multi.php
new file mode 100644
index 00000000..8123d137
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/templates/fm-summary-multi.php
@@ -0,0 +1,33 @@
+
+
+".$userData->last_name.", ".$userData->first_name." ";
+}
+?>
+
+
+On:
+IP:
+
+
+
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/tinymce.php b/src/wp-content/plugins/wordpress-form-manager/tinymce.php
new file mode 100644
index 00000000..20e86f0f
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/tinymce.php
@@ -0,0 +1,38 @@
+
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/types.php b/src/wp-content/plugins/wordpress-form-manager/types.php
new file mode 100644
index 00000000..687802a0
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/types.php
@@ -0,0 +1,76 @@
+ 'class name'
+// the keys in this array are used in the 'addItem' AJAX to create new items, and as the 'type' db field for form items
+$fm_controlTypes = array('default' => 'fm_controlBase',
+ 'text' => 'fm_textControl',
+ 'textarea' => 'fm_textareaControl',
+ 'checkbox' => 'fm_checkboxControl',
+ 'custom_list' => 'fm_customListControl',
+ 'separator' => 'fm_separatorControl',
+ 'note' => 'fm_noteControl',
+ 'recaptcha' => 'fm_recaptchaControl',
+ 'file' => 'fm_fileControl'
+);
+///////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+//control base class
+include 'types/base.php';
+
+//control types
+include 'types/separator.php';
+include 'types/text.php';
+include 'types/textarea.php';
+include 'types/checkbox.php';
+include 'types/list.php';
+include 'types/note.php';
+include 'types/recaptcha.php';
+include 'types/file.php';
+
+//'panel' helpers
+include 'types/panelhelper.php';
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+function fm_showControlScripts(){
+ ?>$class){
+ $arr[$name] = new $class();
+ }
+ return $arr;
+}
+
+global $fm_controls;
+
+$fm_controls = fm_buildControlTypes($fm_controlTypes);
+
+?>
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/types/base.php b/src/wp-content/plugins/wordpress-form-manager/types/base.php
new file mode 100644
index 00000000..84643738
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/types/base.php
@@ -0,0 +1,226 @@
+";
+ }
+
+ //HTML returned for the editor (admin) version of the form
+ public function editItem($uniqueName, $itemInfo){
+ return " ";
+ }
+
+ //returns an array of fm_editPanelItemBase (or derived) objects that define the editor 'panel'
+ public function getPanelItems($uniqueName, $itemInfo){
+ global $fmdb;
+ $arr=array();
+ foreach($fmdb->itemKeys as $key=>$v){
+ $arr[] = new fm_editPanelItemBase($uniqueName, $key, $key, array('value'=>$itemInfo[$key]));
+ }
+ return $arr;
+ }
+
+ //returns an associative array (keyed by the db field names for items) of javascript for use in the 'get' script; see showPanelScript()
+ public function getPanelScriptOptions(){
+ $opt = $this->getPanelScriptOptionDefaults();
+ $opt['extra'] = "fm_get_item_value(itemID, 'extra')";
+ return $opt;
+ }
+
+ //returns the name of a javascript function to be called whenever the user clicks the 'edit'/'done' button;
+ // the function is passed two variables: the first is the itemID, the second is a boolean indicating if 'edit' or 'done' was clicked (true or false respectively)
+ public function getShowHideCallbackName(){
+ return "";
+ }
+
+ //returns the name of a javascript function called when saving the form. If the function returns false, that means the save failed; otherwise, it should return true.
+ //The save validators are responsible for displaying any alerts
+ public function getSaveValidatorName(){
+ return "";
+ }
+
+ //this function is called in the header; you can place scripts here (like whatever getShowHideCallbackName() returns) etc.
+ protected function showExtraScripts(){}
+
+ //called when displaying the user form; used for validation scripts, etc.
+ public function showUserScripts(){
+ if($this->getTypeName() == "basic"){
+ ?>
+
+ getTypeName() == "basic") return 'fm_base_required_validator'; //this validator is defined in fm_showControlScripts()
+ return "";
+ }
+
+ //gets the name of a general validator function, which is passed the form ID,item's unique name, and whatever is stored in $item['extra']['validation']
+ public function getGeneralValidatorName(){
+ return "";
+ }
+
+ public function getGeneralValidatorMessage($type){
+ return "";
+ }
+
+ //called when processing a submission from the user version of the form; $itemInfo is an associative array of the db row defining the form item
+ public function processPost($uniqueName, $itemInfo){
+ if($_POST[$uniqueName] != null)
+ return strip_tags($_POST[$uniqueName]);
+ return "";
+ }
+
+ //called when viewing submission data. $data contains (hopefully) the same value (in string form) as the value returned from processPost()
+ public function parseData($uniqueName, $itemInfo, $data){
+ return $data;
+ }
+
+ //returns an associative array keyed by the item db fields; used in the AJAX for creating a new form item in the back end / admin side
+ public function itemDefaults(){
+ $itemInfo = array();
+ $itemInfo['label'] = __("Item Label", 'wordpress-form-manager');
+ $itemInfo['description'] = __("Item Description", 'wordpress-form-manager');
+ $itemInfo['extra'] = array();
+ $itemInfo['nickname'] = __("Item Nickname", 'wordpress-form-manager');
+ $itemInfo['required'] = 0;
+ $itemInfo['validator'] = "";
+ $ItemInfo['validation_msg'] = "";
+ $itemInfo['db_type'] = "VARCHAR(1000) DEFAULT ''";
+
+ return $itemInfo;
+ }
+
+ //item keys that are handled in the 'panel'
+ protected function getPanelKeys(){
+ return array();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////////
+
+ public function showScripts(){
+ $this->showExtraScripts();
+ $this->showPanelScript();
+ }
+ protected function getPanelScriptName(){
+ return "fm_".$this->getTypeName()."_panel_get";
+ }
+ protected function extraScriptHelper($items){
+ $str = "\"array(";
+ foreach($items as $k=>$v){
+ if(strpos($v, "cb:") !== false)
+ $items[$k] = "'{$k}'=>'\" + ".$this->checkboxScriptHelper(substr($v,3), array('onValue'=>'checked', 'offValue'=>""))." + \"'";
+ else
+ $items[$k] = "'{$k}'=>'\" + fm_fix_str(fm_get_item_value(itemID, '{$v}')) + \"'";
+ }
+ $str.=implode(", ",$items);
+ $str.= ")\"";
+ return $str;
+ }
+ //$options: 'onValue', 'offValue'
+ protected function checkboxScriptHelper($name, $options = null){
+ if($options == null) $options = array('onValue'=>'1', 'offValue'=>'0');
+ return "((document.getElementById(itemID + '-{$name}').checked==true)?'".$options['onValue']."':'".$options['offValue']."')";
+ }
+ protected function getPanelScriptOptionDefaults(){
+ global $fmdb;
+ $opt=array();
+ foreach($fmdb->itemKeys as $key=>$value){
+ $opt[$key] = "fm_get_item_value(itemID, '{$key}')";
+ }
+ $opt['index'] = 'index';
+ $opt['extra'] = "\"array()\"";
+ return $opt;
+ }
+ public function showPanelScript(){
+ $items=array();
+ $items['unique_name'] = 'itemID';
+ $items['index'] = 'index';
+ $items = array_merge($items, $this->getPanelScriptOptions());
+ foreach($items as $k=>$v){
+ $items[$k] = "'{$k}': {$v}";
+ }
+ ?>".
+ "".
+ "".($itemInfo['label']==""?" ":htmlspecialchars($itemInfo['label']))." ".(($itemInfo['required']=='1')?'* ':"")." ".
+ "".$this->editItem($uniqueName, $itemInfo)." ".
+ " ";
+ $str.="
";
+ $str.="".$this->editPanel($uniqueName, $itemInfo)."
";
+ $str.= $this->showHiddenVars($uniqueName, $itemInfo, $this->getPanelKeys(), $this->getPanelScriptName()."(itemID, index)");
+ return $str;
+ }
+
+ public function editPanel($uniqueName, $itemInfo){
+ global $fm_editPanelItems;
+ $str="";
+ $str.="";
+ $str.=" ";
+ $items = $this->getPanelItems($uniqueName, $itemInfo);
+ foreach($items as $item){
+ $str.=$item->getPanelItem();
+ }
+ $str.="
";
+ return $str;
+ }
+
+ function showHiddenVars($uniqueName, $itemInfo, $hideKeys = null, $script = "fm_base_get(itemID, index)"){
+ global $fmdb;
+ $itemInfo['extra'] = serialize($itemInfo['extra']);
+ if($hideKeys==null) $hideKeys = array();
+ $str.= $this->getScriptHidden($uniqueName, $script)."\n";
+ $str.= $this->getTypeHidden($uniqueName, $itemInfo);
+ foreach($fmdb->itemKeys as $key=>$value){
+ if(!in_array($key,$hideKeys,true))
+ $str.= " ";
+ }
+ return $str;
+ }
+
+ protected function getScriptHidden($uniqueName, $script){
+ return " ";
+ }
+ protected function getHiddenValue($uniqueName, $key, $value){
+ return " ";
+ }
+ protected function getTypeHidden($uniqueName, $itemInfo){
+ return " ";
+ }
+}
+
+?>
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/types/blank.php b/src/wp-content/plugins/wordpress-form-manager/types/blank.php
new file mode 100644
index 00000000..ae68d7a3
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/types/blank.php
@@ -0,0 +1,80 @@
+ $itemInfo['label']));
+ /*
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'value', 'Default Value', array('value' => $itemInfo['extra']['value']));
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'size', 'Width (in pixels)', array('value' => $itemInfo['extra']['size']));
+ $arr[] = new fm_editPanelItemCheckbox($uniqueName, 'required', 'Required', array('checked'=>$itemInfo['required']));
+ $arr[] = new fm_editPanelItemDropdown($uniqueName, 'validation', 'Validation', array('options' => array_merge(array('none' => "..."), $this->getValidatorList()), 'value' => $itemInfo['extra']['validation']));
+ */
+ return $arr;
+ }
+
+ public function getPanelScriptOptions(){
+ $opt = $this->getPanelScriptOptionDefaults();
+ /*$opt['extra'] = $this->extraScriptHelper(array('value'=>'value', 'size'=>'size', 'validation'=>'validation'));
+ $opt['required'] = $this->checkboxScriptHelper('required');
+ */
+ return $opt;
+ }
+
+ public function getShowHideCallbackName(){
+ return "fm_".$this->getTypeName()."_show_hide";
+ }
+
+ /*
+ public function getRequiredValidatorName(){
+ return 'fm_base_required_validator';
+ }*/
+
+ protected function showExtraScripts(){
+ ?>
+
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/types/checkbox.php b/src/wp-content/plugins/wordpress-form-manager/types/checkbox.php
new file mode 100644
index 00000000..9a5d7fa8
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/types/checkbox.php
@@ -0,0 +1,100 @@
+ 'checkbox',
+ 'attributes' => array('name' => $uniqueName,
+ 'id'=> $uniqueName,
+ 'style'=> ($itemInfo['extra']['position'] == "right" ? "float:right;" : "")
+ ),
+ 'checked'=> ($itemInfo['extra']['value']=='checked')
+ );
+ return fe_getElementHTML($elem);
+ }
+
+ public function processPost($uniqueName, $itemInfo){
+ if(isset($_POST[$uniqueName]))
+ return $_POST[$uniqueName]=="on"?__("yes",'wordpress-form-manager'):__("no",'wordpress-form-manager');
+ return __("no",'wordpress-form-manager');
+ }
+
+ public function editItem($uniqueName, $itemInfo){
+ return " ";
+ }
+
+ public function getPanelItems($uniqueName, $itemInfo){
+ $arr=array();
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'label', __('Label', 'wordpress-form-manager'), array('value' => $itemInfo['label']));
+ $arr[] = new fm_editPanelItemDropdown($uniqueName, 'position', __('Position', 'wordpress-form-manager'), array('options' => array('left' => __("Left", 'wordpress-form-manager'), 'right' => __("Right", 'wordpress-form-manager')), 'value' => $itemInfo['extra']['position']));
+ $arr[] = new fm_editPanelItemCheckbox($uniqueName, 'value', __('Checked by Default', 'wordpress-form-manager'), array('checked'=>($itemInfo['extra']['value']=='checked')));
+ $arr[] = new fm_editPanelItemCheckbox($uniqueName, 'required', __('Required', 'wordpress-form-manager'), array('checked'=>$itemInfo['required']));
+ return $arr;
+ }
+
+ public function getPanelScriptOptions(){
+ $opt = $this->getPanelScriptOptionDefaults();
+ $opt['extra'] = "\"array('value' => '\" + ".$this->checkboxScriptHelper('value',array('onValue'=>'checked', 'offValue'=>""))." + \"', 'position' => '\" + fm_fix_str(fm_get_item_value(itemID, 'position')) + \"')\"";
+ $opt['required'] = $this->checkboxScriptHelper('required');
+ return $opt;
+ }
+
+ public function getShowHideCallbackName(){
+ return "fm_".$this->getTypeName()."_show_hide";
+ }
+
+ protected function showExtraScripts(){
+ ?>
+
+
+
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/types/file.php b/src/wp-content/plugins/wordpress-form-manager/types/file.php
new file mode 100644
index 00000000..7f72336b
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/types/file.php
@@ -0,0 +1,186 @@
+".
+ " ";
+ }
+
+ public function itemDefaults(){
+ $itemInfo = array();
+ $itemInfo['label'] = __("New File Upload", 'wordpress-form-manager');
+ $itemInfo['description'] = __("Item Description", 'wordpress-form-manager');
+ $itemInfo['extra'] = array('max_size' => 1000);
+ $itemInfo['nickname'] = '';
+ $itemInfo['required'] = 0;
+ $itemInfo['validator'] = "";
+ $ItemInfo['validation_msg'] = "";
+ $itemInfo['db_type'] = "LONGBLOB";
+
+ return $itemInfo;
+ }
+
+ public function editItem($uniqueName, $itemInfo){
+ return " ";
+ }
+
+ public function processPost($uniqueName, $itemInfo){
+ global $fmdb;
+
+ if($_FILES[$uniqueName]['error'] > 0){
+ if($_FILES[$uniqueName]['error'] == 2)
+ $fmdb->setErrorMessage("(".$itemInfo['label'].") ".__("File upload exceeded maximum allowable size.", 'wordpress-form-manager'));
+ else if($_FILES[$uniqueName]['error'] == 4) // no file
+ return "";
+ $fmdb->setErrorMessage("(".$itemInfo['label'].") ".__("There was an error with the file upload.", 'wordpress-form-manager'));
+ return false;
+ }
+
+ $ext = pathinfo($_FILES[$uniqueName]['name'], PATHINFO_EXTENSION);
+ if(strpos($itemInfo['extra']['exclude'], $ext) !== false){
+ /* translators: this will be shown along with the item label and file extension, as in, "(File Upload) Cannot be of type '.txt'" */
+ $fmdb->setErrorMessage("(".$itemInfo['label'].") ".__("Cannot be of type", 'wordpress-form-manager')." '.".$ext."'");
+ return false;
+ }
+ else if(trim($itemInfo['extra']['restrict'] != "") && strpos($itemInfo['extra']['restrict'], $ext) === false){
+ /* translators: this will be shown along with the item label and a list of file extensions, as in, "(File Upload) Can only be of types '.txt, .doc, .pdf'" */
+ $fmdb->setErrorMessage("(".$itemInfo['label'].") ".__("Can only be of types", 'wordpress-form-manager')." ".$itemInfo['extra']['restrict']);
+ return false;
+ }
+
+ if(trim($itemInfo['extra']['upload_dir']) == ""){ //keep the upload in the form manager database
+ $filename = $_FILES[$uniqueName]['tmp_name'];
+ $handle = fopen($filename, "rb");
+ $contents = fread($handle, filesize($filename));
+ fclose($handle);
+
+ $saveVal = array('filename' => $_FILES[$uniqueName]['name'],
+ 'contents' => $contents,
+ 'size' => $_FILES[$uniqueName]['size']);
+
+ return addslashes(serialize($saveVal));
+ }
+ else{
+ //make sure to add a trailing slash if this was forgotten.
+ $uploadDir = $this->parseUploadDir($itemInfo['extra']['upload_dir']);
+ $pathInfo = pathinfo($_FILES[$uniqueName]['name']);
+ $newFileName = substr($_FILES[$uniqueName]['name'], 0, (-1*(strlen($pathInfo['extension'])+1))).' ('.date('m-d-y-h-i-s').').'.$pathInfo['extension'];
+
+ move_uploaded_file($_FILES[$uniqueName]['tmp_name'], $uploadDir.$newFileName);
+ $saveVal = array('filename' => $newFileName,
+ 'contents' => '',
+ 'upload_dir' => true,
+ 'size' => $_FILES[$uniqueName]['size']);
+ return addslashes(serialize($saveVal));
+ }
+ }
+
+ public function parseData($uniqueName, $itemInfo, $data){
+ if(trim($data) == "") return "";
+ $fileInfo = unserialize($data);
+ if($fileInfo['size'] < 1024)
+ $sizeStr = $fileInfo['size']." B";
+ else
+ $sizeStr = ((int)($fileInfo['size']/1024))." kB";
+
+ if(!isset($fileInfo['upload_dir']))
+ return $fileInfo['filename']." (".$sizeStr.")";
+ elseif(trim($itemInfo['extra']['upload_url']) == "")
+ return $fileInfo['filename']." (".$sizeStr.")";
+ else{
+ $uploadURL = $this->parseUploadURL($itemInfo['extra']['upload_url']);
+ return ''.$fileInfo['filename'].' ('.$sizeStr.')'.' ';
+ }
+ }
+
+ public function parseUploadDir($dir){
+ $dir = str_replace("%doc_root%", $_SERVER['DOCUMENT_ROOT'], $dir);
+ if(substr($dir, -1) != "/" && substr($dir, -1) != "\\") $dir.="/";
+ return $dir;
+ }
+
+ public function parseUploadURL($url){
+ if(substr($url, -1) != "/") $url.="/";
+ return $url;
+ }
+
+ public function getPanelItems($uniqueName, $itemInfo){
+ $arr=array();
+
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'label', __('Label', 'wordpress-form-manager'), array('value' => $itemInfo['label']));
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'max_size', __('Max file size (in kB)', 'wordpress-form-manager'), array('value' => $itemInfo['extra']['max_size']));
+ $arr[] = new fm_editPanelItemNote($uniqueName, '', "".__("Your host restricts uploads to", 'wordpress-form-manager')." ".ini_get('upload_max_filesize')."B ", '');
+ $arr[] = new fm_editPanelItemNote($uniqueName, '', "".__("File Types", 'wordpress-form-manager')." ", '');
+ $arr[] = new fm_editPanelItemNote($uniqueName, '', "".__("Enter a list of extensions separated by commas, e.g. \".txt, .rtf, .doc\"", 'wordpress-form-manager')." ", '');
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'restrict', __('Only allow', 'wordpress-form-manager'), array('value' => $itemInfo['extra']['restrict']));
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'exclude', __('Do not allow', 'wordpress-form-manager'), array('value' => $itemInfo['extra']['exclude']));
+ $arr[] = new fm_editPanelItemNote($uniqueName, '', "".__("Uploads", 'wordpress-form-manager')."
", '');
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'upload_dir', __('Upload directory', 'wordpress-form-manager'), array('value' => $itemInfo['extra']['upload_dir']));
+ if(trim($itemInfo['extra']['upload_dir']) != "" && !is_dir($this->parseUploadDir($itemInfo['extra']['upload_dir'])))
+ $arr[] = new fm_editPanelItemNote($uniqueName, '', "".__("This does not appear to be a valid directory ", 'wordpress-form-manager')." ", '');
+ $arr[] = new fm_editPanelItemNote($uniqueName, '', "".__("Using an upload directory will allow you to post links to uploaded files. Otherwise, Form Manager will manage the uploaded files for you in the database.", 'wordpress-form-manager')."
", '');
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'upload_url', __('Upload URL', 'wordpress-form-manager'), array('value' => $itemInfo['extra']['upload_url']));
+ $arr[] = new fm_editPanelItemNote($uniqueName, '', "".__("This will be the base URL used for links to the uploaded files. If left blank, no links will be generated.", 'wordpress-form-manager')." ", '');
+
+ return $arr;
+ }
+
+ public function getPanelScriptOptions(){
+ $opt = $this->getPanelScriptOptionDefaults();
+ $opt['extra'] = $this->extraScriptHelper(array('restrict' => 'restrict', 'exclude' => 'exclude', 'max_size' => 'max_size', 'upload_dir' => 'upload_dir', 'upload_url' => 'upload_url' ));
+ return $opt;
+ }
+
+ public function getShowHideCallbackName(){
+ return "fm_".$this->getTypeName()."_show_hide";
+ }
+
+ public function getSaveValidatorName(){
+ return "fm_file_save_validator";
+ }
+
+ protected function showExtraScripts(){
+ ?>
+
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/types/list.php b/src/wp-content/plugins/wordpress-form-manager/types/list.php
new file mode 100644
index 00000000..3a6925e5
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/types/list.php
@@ -0,0 +1,294 @@
+ 'select');
+ $itemInfo['nickname'] = '';
+ $itemInfo['required'] = 0;
+ $itemInfo['validator'] = "";
+ $ItemInfo['validation_msg'] = "";
+ $itemInfo['db_type'] = "VARCHAR(255) DEFAULT ''";
+
+ return $itemInfo;
+ }
+
+ public function showItem($uniqueName, $itemInfo){
+ $fn = $itemInfo['extra']['list_type']."_showItem";
+ return $this->$fn($uniqueName, $itemInfo).
+ " ".
+ " ";
+
+ }
+ public function select_showItem($uniqueName, $itemInfo, $disabled = false){
+ $elem=array('type' => 'select',
+ 'attributes' => array('name' => $uniqueName,
+ 'id'=> $uniqueName,
+ 'style' => "width:".$itemInfo['extra']['size']."px;"
+ ),
+ 'value' => $itemInfo['extra']['value'],
+ 'options' => $itemInfo['extra']['options']
+ );
+ if($itemInfo['required'] == "1")
+ $elem['options'] = array_merge(array('-1' => "..."), $elem['options']);
+ if($disabled)
+ $elem['attributes']['disabled'] = 'disabled';
+ return fe_getElementHTML($elem);
+ }
+ public function list_showItem($uniqueName, $itemInfo, $disabled = false){
+ $elem=array('type' => 'select',
+ 'attributes' => array('name' => $uniqueName,
+ 'id'=> $uniqueName,
+ 'style' => "width:".$itemInfo['extra']['size']."px;",
+ 'size' => sizeof($itemInfo['extra']['options'])
+ ),
+ 'value' => $itemInfo['extra']['value'],
+ 'options' => $itemInfo['extra']['options']
+ );
+ if($disabled)
+ $elem['attributes']['disabled'] = 'disabled';
+ return fe_getElementHTML($elem);
+ }
+ public function radio_showItem($uniqueName, $itemInfo, $disabled = false){
+ $elem=array('type' => 'radio',
+ 'attributes' => array('name' => $uniqueName,
+ 'id'=> $uniqueName
+ ),
+ 'separator' => ' ',
+ 'options' => $itemInfo['extra']['options'],
+ 'value' => $itemInfo['extra']['value']
+ );
+ if($disabled)
+ $elem['attributes']['disabled'] = 'disabled';
+ return fe_getElementHTML($elem);
+ }
+ public function checkbox_showItem($uniqueName, $itemInfo, $disabled = false){
+ $elem=array('type' => 'checkbox_list',
+ 'separator' => ' ',
+ 'value' => $itemInfo['extra']['value']
+ );
+ $elem['options'] = array();
+ for($x=0;$x'.fe_getElementHTML($elem).'';
+ }
+
+
+ public function editItem($uniqueName, $itemInfo){
+ $fn = $itemInfo['extra']['list_type']."_showItem";
+ unset($itemInfo['extra']['size']);
+ return "".$this->$fn($uniqueName, $itemInfo, true)."
";
+ }
+
+ public function processPost($uniqueName, $itemInfo){
+ $fn = $itemInfo['extra']['list_type']."_processPost";
+ return $this->$fn($uniqueName, $itemInfo);
+ }
+ public function select_processPost($uniqueName, $itemInfo){
+ if(isset($_POST[$uniqueName])){
+ if($itemInfo['required'] == "1")
+ return addslashes($itemInfo['extra']['options'][$_POST[$uniqueName]-1]);
+ else
+ return addslashes($itemInfo['extra']['options'][$_POST[$uniqueName]]);
+ }
+ return "";
+ }
+ public function list_processPost($uniqueName, $itemInfo){
+ return $this->select_processPost($uniqueName, $itemInfo);
+ }
+ public function radio_processPost($uniqueName, $itemInfo){
+ if(isset($_POST[$uniqueName]))
+ return addslashes($itemInfo['extra']['options'][$_POST[$uniqueName]]);
+ return "";
+ }
+ public function checkbox_processPost($uniqueName, $itemInfo){
+ $arr=array();
+ for($x=0;$x $itemInfo['label']));
+ $arr[] = new fm_editPanelItemDropdown($uniqueName, 'list_type', __('Style', 'wordpress-form-manager'), array('options' => array('select' => __("Dropdown", 'wordpress-form-manager'), 'list' => __("List Box", 'wordpress-form-manager'), 'radio' => __("Radio Buttons", 'wordpress-form-manager'), 'checkbox' => __("Checkboxes", 'wordpress-form-manager')), 'value' => $itemInfo['extra']['list_type']));
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'size', __('Width (in pixels)', 'wordpress-form-manager'), array('value' => $itemInfo['extra']['size']));
+ $arr[] = new fm_editPanelItemCheckbox($uniqueName, 'required', __('Required', 'wordpress-form-manager'), array('checked'=>$itemInfo['required']));
+ $arr[] = new fm_editPanelItemMulti($uniqueName, 'options', __('List Items', 'wordpress-form-manager'), array('options' => $itemInfo['extra']['options'], 'get_item_script' => 'fm_custom_list_options_panel_item', 'get_item_value_script' => 'fm_custom_list_option_get'));
+ return $arr;
+ }
+
+ public function getPanelScriptOptions(){
+ $opt = $this->getPanelScriptOptionDefaults();
+ $opt['extra'] = "\"array('options' => \" + js_multi_item_get_php_array('multi-panel-' + itemID, 'fm_custom_list_option_get') + \", 'size' => '\" + fm_get_item_value(itemID, 'size') + \"', 'list_type' => '\" + fm_get_item_value(itemID, 'list_type') + \"')\"";
+ $opt['required'] = $this->checkboxScriptHelper('required');
+
+ return $opt;
+ }
+
+ //called when displaying the user form; used for validation scripts, etc.
+ public function showUserScripts(){
+ ?>
+
+
+ ".htmlspecialchars(fm_restrictString($itemInfo['extra']['content'], 25)).""; }
+
+ public function getPanelItems($uniqueName, $itemInfo){
+ $arr=array();
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'label', 'Label', array('value' => $itemInfo['label']));
+ $arr[] = new fm_editPanelTextarea($uniqueName, 'content', 'Note', array('value' => $itemInfo['extra']['content'], 'rows'=> 10, 'cols' => 25));
+ $arr[] = new fm_editPanelItemCheckbox($uniqueName, 'allow_markup', __('HTML', 'wordpress-form-manager'), array('checked'=>$itemInfo['extra']['allow_markup']));
+ return $arr;
+ }
+
+ public function getPanelKeys(){
+ return array('label');
+ }
+
+ public function getShowHideCallbackName(){
+ return "fm_note_show_hide";
+ }
+
+ protected function showExtraScripts(){
+ ?>
+ getPanelScriptOptionDefaults();
+ //$opt['extra'] = $this->extraScriptHelper(array('content'=>'content'));
+ $opt['extra'] = "\"array('allow_markup' => '\" + ".$this->checkboxScriptHelper('allow_markup',array('onValue'=>'checked', 'offValue'=>""))." + \"', 'content' => '\" + fm_fix_str(fm_get_item_value(itemID, 'content')) + \"')\"";
+ // $opt['extra'] = "\"array('value' => '\" + ".$this->checkboxScriptHelper('value',array('onValue'=>'checked', 'offValue'=>""))." + \"')\"";
+ return $opt;
+ }
+ public function itemDefaults(){
+ $itemInfo = array();
+ $itemInfo['label'] = __("New Note", 'wordpress-form-manager');
+ $itemInfo['description'] = __("Item Description", 'wordpress-form-manager');
+ $itemInfo['extra'] = array('content'=>'');
+ $itemInfo['nickname'] = '';
+ $itemInfo['required'] = 0;
+ $itemInfo['validator'] = "";
+ $ItemInfo['validation_msg'] = "";
+ $itemInfo['db_type'] = "NONE";
+
+ return $itemInfo;
+ }
+}
+?>
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/types/panelhelper.php b/src/wp-content/plugins/wordpress-form-manager/types/panelhelper.php
new file mode 100644
index 00000000..1d70621c
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/types/panelhelper.php
@@ -0,0 +1,100 @@
+uniqueName = $uniqueName;
+ $this->itemName = $itemName;
+ $this->itemLabel = $itemLabel;
+ $this->options = $options;
+ $this->notags = $notags;
+ }
+ function getPanelItem(){
+ $str = "";
+ if(!$this->notags) $str.="";
+ $str.= "{$this->itemLabel} ";
+ if(!$this->notags) $str.=" ";
+ $str.=$this->getPanelItemInner();
+ if(!$this->notags) $str.=" ";
+ return $str;
+ }
+ function getPanelItemInner(){
+ return " uniqueName}-{$this->itemName}\" value=\"".htmlspecialchars($this->options['value'])."\" />";
+ }
+}
+
+class fm_editPanelItemMultiText extends fm_editPanelItemBase{
+ function getPanelItemInner(){
+ $arr = array();
+ $x=0;
+ foreach($this->options['fields'] as $field){
+ $arr[] = "{$field['label']} uniqueName}-{$field['name']}\" value=\"".htmlspecialchars($this->options['value'][$field['name']])."\" style=\"width:{$field['size']};\">";
+ }
+ return implode($this->options['separator'], $arr);
+ }
+}
+
+class fm_editPanelTextArea extends fm_editPanelItemBase{
+ function getPanelItemInner(){
+ return "options['rows']."\" cols=\"".$this->options['cols']."\" id=\"{$this->uniqueName}-{$this->itemName}\" >".htmlspecialchars($this->options['value'])." ";
+ }
+}
+
+class fm_editPanelItemCheckbox extends fm_editPanelItemBase{
+ //$options:
+ // 'checked': value of 'checked' attribute (true/false, 1/0)
+ function getPanelItemInner(){
+ return " uniqueName}-{$this->itemName}\" ".(($this->options['checked']==true || $this->options['checked']==1)?"checked=\"checked\"":"")."/>";
+ }
+}
+
+class fm_editPanelItemDropdown extends fm_editPanelItemBase{
+ function getPanelItemInner(){
+ $str="uniqueName}-{$this->itemName}\">";
+ foreach($this->options['options'] as $k=>$v){
+ if($this->options['value'] == $k) $str.="".htmlspecialchars($v)." ";
+ else $str.="{$v} ";
+ }
+ $str.=" ";
+ return $str;
+ }
+}
+
+class fm_editPanelItemMulti extends fm_editPanelItemBase{
+ function getPanelItemInner(){
+ $str.="";
+ $str.="uniqueName}\">";
+ $str.=" ";
+ $str.="";
+ $str.="";
+ return $str;
+ }
+}
+
+class fm_editPanelItemNote extends fm_editPanelItemBase{
+ function getPanelItem(){
+ return "".
+ $this->itemLabel.
+ " ";
+ }
+}
+?>
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/types/recaptcha.php b/src/wp-content/plugins/wordpress-form-manager/types/recaptcha.php
new file mode 100644
index 00000000..13ba74e9
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/types/recaptcha.php
@@ -0,0 +1,106 @@
+getGlobalSetting('recaptcha_public');
+ if($publickey == "") return __("(No reCAPTCHA API public key found)", 'wordpress-form-manager');
+
+ if(!function_exists('recaptcha_get_html'))
+ require_once('recaptcha/recaptchalib.php');
+
+ return "".
+ recaptcha_get_html($publickey).
+ (isset($_POST['recaptcha_challenge_field'])?" ".__("The reCAPTCHA was incorrect.", 'wordpress-form-manager')." ":"");
+ }
+
+ public function processPost($uniqueName, $itemInfo){
+ global $fmdb;
+ $publickey = $fmdb->getGlobalSetting('recaptcha_public');
+ $privatekey = $fmdb->getGlobalSetting('recaptcha_private');
+ if($privatekey == "" || $publickey == "" ) return "";
+
+ if(!function_exists('recaptcha_check_answer'))
+ require_once('recaptcha/recaptchalib.php');
+
+ $resp = recaptcha_check_answer ($privatekey,
+ $_SERVER["REMOTE_ADDR"],
+ $_POST["recaptcha_challenge_field"],
+ $_POST["recaptcha_response_field"]);
+
+ //return false;
+ if (!$resp->is_valid === true) {
+ // What happens when the CAPTCHA was entered incorrectly
+ $this->err = $resp->error;
+ return false;
+ }
+ $this->err = false;
+ return "";
+ }
+
+ public function itemDefaults(){
+ $itemInfo = array();
+ $itemInfo['label'] = "New reCAPTCHA";
+ $itemInfo['description'] = "Item Description";
+ $itemInfo['extra'] = array();
+ $itemInfo['nickname'] = '';
+ $itemInfo['required'] = 0;
+ $itemInfo['validator'] = "";
+ $ItemInfo['validation_msg'] = "";
+ $itemInfo['db_type'] = "NONE";
+
+ return $itemInfo;
+ }
+
+ public function editItem($uniqueName, $itemInfo){
+ global $fmdb;
+ $publickey = $fmdb->getGlobalSetting('recaptcha_public');
+ $privatekey = $fmdb->getGlobalSetting('recaptcha_private');
+ if($publickey == "" || $privatekey == "") return __("You need reCAPTCHA API keys.", 'wordpress-form-manager')." ".__("Fix this in", 'wordpress-form-manager')." ".__("Settings", 'wordpress-form-manager')." .";
+ return __("(reCAPTCHA field)", 'wordpress-form-manager');
+ }
+
+ public function getPanelItems($uniqueName, $itemInfo){
+ $arr=array();
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'label', __('Label', 'wordpress-form-manager'), array('value' => $itemInfo['label']));
+ return $arr;
+ }
+
+ public function getPanelScriptOptions(){
+ $opt = $this->getPanelScriptOptionDefaults();
+ return $opt;
+ }
+
+ public function getShowHideCallbackName(){
+ return "fm_".$this->getTypeName()."_show_hide";
+ }
+
+ protected function showExtraScripts(){
+ ?>
+
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/types/recaptcha/recaptchalib.php b/src/wp-content/plugins/wordpress-form-manager/types/recaptcha/recaptchalib.php
new file mode 100644
index 00000000..32c4f4d7
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/types/recaptcha/recaptchalib.php
@@ -0,0 +1,277 @@
+ $value )
+ $req .= $key . '=' . urlencode( stripslashes($value) ) . '&';
+
+ // Cut the last '&'
+ $req=substr($req,0,strlen($req)-1);
+ return $req;
+}
+
+
+
+/**
+ * Submits an HTTP POST to a reCAPTCHA server
+ * @param string $host
+ * @param string $path
+ * @param array $data
+ * @param int port
+ * @return array response
+ */
+function _recaptcha_http_post($host, $path, $data, $port = 80) {
+
+ $req = _recaptcha_qsencode ($data);
+
+ $http_request = "POST $path HTTP/1.0\r\n";
+ $http_request .= "Host: $host\r\n";
+ $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";
+ $http_request .= "Content-Length: " . strlen($req) . "\r\n";
+ $http_request .= "User-Agent: reCAPTCHA/PHP\r\n";
+ $http_request .= "\r\n";
+ $http_request .= $req;
+
+ $response = '';
+ if( false == ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) {
+ die ('Could not open socket');
+ }
+
+ fwrite($fs, $http_request);
+
+ while ( !feof($fs) )
+ $response .= fgets($fs, 1160); // One TCP-IP packet
+ fclose($fs);
+ $response = explode("\r\n\r\n", $response, 2);
+
+ return $response;
+}
+
+
+
+/**
+ * Gets the challenge HTML (javascript and non-javascript version).
+ * This is called from the browser, and the resulting reCAPTCHA HTML widget
+ * is embedded within the HTML form it was called from.
+ * @param string $pubkey A public key for reCAPTCHA
+ * @param string $error The error given by reCAPTCHA (optional, default is null)
+ * @param boolean $use_ssl Should the request be made over ssl? (optional, default is false)
+
+ * @return string - The HTML to be embedded in the user's form.
+ */
+function recaptcha_get_html ($pubkey, $error = null, $use_ssl = false)
+{
+ if ($pubkey == null || $pubkey == '') {
+ die ("To use reCAPTCHA you must get an API key from https://www.google.com/recaptcha/admin/create ");
+ }
+
+ if ($use_ssl) {
+ $server = RECAPTCHA_API_SECURE_SERVER;
+ } else {
+ $server = RECAPTCHA_API_SERVER;
+ }
+
+ $errorpart = "";
+ if ($error) {
+ $errorpart = "&error=" . $error;
+ }
+ return '
+
+
+
+
+
+ ';
+}
+
+
+
+
+/**
+ * A ReCaptchaResponse is returned from recaptcha_check_answer()
+ */
+class ReCaptchaResponse {
+ var $is_valid;
+ var $error;
+}
+
+
+/**
+ * Calls an HTTP POST function to verify if the user's guess was correct
+ * @param string $privkey
+ * @param string $remoteip
+ * @param string $challenge
+ * @param string $response
+ * @param array $extra_params an array of extra variables to post to the server
+ * @return ReCaptchaResponse
+ */
+function recaptcha_check_answer ($privkey, $remoteip, $challenge, $response, $extra_params = array())
+{
+ if ($privkey == null || $privkey == '') {
+ die ("To use reCAPTCHA you must get an API key from https://www.google.com/recaptcha/admin/create ");
+ }
+
+ if ($remoteip == null || $remoteip == '') {
+ die ("For security reasons, you must pass the remote ip to reCAPTCHA");
+ }
+
+
+
+ //discard spam submissions
+ if ($challenge == null || strlen($challenge) == 0 || $response == null || strlen($response) == 0) {
+ $recaptcha_response = new ReCaptchaResponse();
+ $recaptcha_response->is_valid = false;
+ $recaptcha_response->error = 'incorrect-captcha-sol';
+ return $recaptcha_response;
+ }
+
+ $response = _recaptcha_http_post (RECAPTCHA_VERIFY_SERVER, "/recaptcha/api/verify",
+ array (
+ 'privatekey' => $privkey,
+ 'remoteip' => $remoteip,
+ 'challenge' => $challenge,
+ 'response' => $response
+ ) + $extra_params
+ );
+
+ $answers = explode ("\n", $response [1]);
+ $recaptcha_response = new ReCaptchaResponse();
+
+ if (trim ($answers [0]) == 'true') {
+ $recaptcha_response->is_valid = true;
+ }
+ else {
+ $recaptcha_response->is_valid = false;
+ $recaptcha_response->error = $answers [1];
+ }
+ return $recaptcha_response;
+
+}
+
+/**
+ * gets a URL where the user can sign up for reCAPTCHA. If your application
+ * has a configuration page where you enter a key, you should provide a link
+ * using this function.
+ * @param string $domain The domain where the page is hosted
+ * @param string $appname The name of your application
+ */
+function recaptcha_get_signup_url ($domain = null, $appname = null) {
+ return "https://www.google.com/recaptcha/admin/create?" . _recaptcha_qsencode (array ('domains' => $domain, 'app' => $appname));
+}
+
+function _recaptcha_aes_pad($val) {
+ $block_size = 16;
+ $numpad = $block_size - (strlen ($val) % $block_size);
+ return str_pad($val, strlen ($val) + $numpad, chr($numpad));
+}
+
+/* Mailhide related code */
+
+function _recaptcha_aes_encrypt($val,$ky) {
+ if (! function_exists ("mcrypt_encrypt")) {
+ die ("To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed.");
+ }
+ $mode=MCRYPT_MODE_CBC;
+ $enc=MCRYPT_RIJNDAEL_128;
+ $val=_recaptcha_aes_pad($val);
+ return mcrypt_encrypt($enc, $ky, $val, $mode, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");
+}
+
+
+function _recaptcha_mailhide_urlbase64 ($x) {
+ return strtr(base64_encode ($x), '+/', '-_');
+}
+
+/* gets the reCAPTCHA Mailhide url for a given email, public key and private key */
+function recaptcha_mailhide_url($pubkey, $privkey, $email) {
+ if ($pubkey == '' || $pubkey == null || $privkey == "" || $privkey == null) {
+ die ("To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " .
+ "you can do so at http://www.google.com/recaptcha/mailhide/apikey ");
+ }
+
+
+ $ky = pack('H*', $privkey);
+ $cryptmail = _recaptcha_aes_encrypt ($email, $ky);
+
+ return "http://www.google.com/recaptcha/mailhide/d?k=" . $pubkey . "&c=" . _recaptcha_mailhide_urlbase64 ($cryptmail);
+}
+
+/**
+ * gets the parts of the email to expose to the user.
+ * eg, given johndoe@example,com return ["john", "example.com"].
+ * the email is then displayed as john...@example.com
+ */
+function _recaptcha_mailhide_email_parts ($email) {
+ $arr = preg_split("/@/", $email );
+
+ if (strlen ($arr[0]) <= 4) {
+ $arr[0] = substr ($arr[0], 0, 1);
+ } else if (strlen ($arr[0]) <= 6) {
+ $arr[0] = substr ($arr[0], 0, 3);
+ } else {
+ $arr[0] = substr ($arr[0], 0, 4);
+ }
+ return $arr;
+}
+
+/**
+ * Gets html to display an email address given a public an private key.
+ * to get a key, go to:
+ *
+ * http://www.google.com/recaptcha/mailhide/apikey
+ */
+function recaptcha_mailhide_html($pubkey, $privkey, $email) {
+ $emailparts = _recaptcha_mailhide_email_parts ($email);
+ $url = recaptcha_mailhide_url ($pubkey, $privkey, $email);
+
+ return htmlentities($emailparts[0]) . "... @" . htmlentities ($emailparts [1]);
+
+}
+
+
+?>
diff --git a/src/wp-content/plugins/wordpress-form-manager/types/separator.php b/src/wp-content/plugins/wordpress-form-manager/types/separator.php
new file mode 100644
index 00000000..d10aaf20
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/types/separator.php
@@ -0,0 +1,53 @@
+"; }
+
+ public function editItem($uniqueName, $itemInfo){ return " "; }
+
+ public function getPanelItems($uniqueName, $itemInfo){
+ $arr=array();
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'label', __('Label', 'wordpress-form-manager'), array('value' => $itemInfo['label']));
+ return $arr;
+ }
+
+ public function getPanelKeys(){
+ return array('label');
+ }
+
+ public function getShowHideCallbackName(){
+ return "fm_sep_show_hide";
+ }
+
+ protected function showExtraScripts(){
+ ?>
+
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/types/text.php b/src/wp-content/plugins/wordpress-form-manager/types/text.php
new file mode 100644
index 00000000..53faa5dc
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/types/text.php
@@ -0,0 +1,134 @@
+validators = array();
+ }
+
+ public function getTypeName(){ return "text"; }
+
+ /* translators: this appears in the 'Add Form Element' menu */
+ public function getTypeLabel(){ return __("Text", 'wordpress-form-manager'); }
+
+ public function showItem($uniqueName, $itemInfo){
+ $elem=array('type' => 'text',
+ 'attributes' => array('name' => $uniqueName,
+ 'id'=> $uniqueName,
+ 'placeholder' => htmlspecialchars($itemInfo['extra']['value']),
+ 'style' => "width:".$itemInfo['extra']['size']."px;",
+ 'maxlength' => $itemInfo['extra']['maxlength']
+ )
+ );
+
+ return fe_getElementHTML($elem);
+ }
+
+ //returns an associative array keyed by the item db fields; used in the AJAX for creating a new form item in the back end / admin side
+ public function itemDefaults(){
+ $itemInfo = array();
+ $itemInfo['label'] = __("New Text", 'wordpress-form-manager');
+ $itemInfo['description'] = __("Item Description", 'wordpress-form-manager');
+ $itemInfo['extra'] = array('size' => '300');
+ $itemInfo['nickname'] = '';
+ $itemInfo['required'] = 0;
+ $itemInfo['validator'] = "";
+ $ItemInfo['validation_msg'] = "";
+ $itemInfo['db_type'] = "VARCHAR(1000) DEFAULT ''";
+
+ return $itemInfo;
+ }
+
+ public function editItem($uniqueName, $itemInfo){
+ return " ";
+ }
+
+ public function getPanelItems($uniqueName, $itemInfo){
+ $arr=array();
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'label', __('Label', 'wordpress-form-manager'), array('value' => $itemInfo['label']));
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'value', __('Placeholder', 'wordpress-form-manager'), array('value' => $itemInfo['extra']['value']));
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'size', __('Width (in pixels)', 'wordpress-form-manager'), array('value' => $itemInfo['extra']['size']));
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'maxlength', __('Max characters', 'wordpress-form-manager'), array('value' => $itemInfo['extra']['maxlength']));
+ $arr[] = new fm_editPanelItemCheckbox($uniqueName, 'required', __('Required', 'wordpress-form-manager'), array('checked'=>$itemInfo['required']));
+ $arr[] = new fm_editPanelItemDropdown($uniqueName, 'validation', __('Validation', 'wordpress-form-manager'), array('options' => array_merge(array('none' => "..."), $this->getValidatorList()), 'value' => $itemInfo['extra']['validation']));
+ return $arr;
+ }
+
+ public function getPanelScriptOptions(){
+ $opt = $this->getPanelScriptOptionDefaults();
+ $opt['extra'] = $this->extraScriptHelper(array('value'=>'value', 'size'=>'size', 'validation'=>'validation', 'maxlength'=>'maxlength'));
+ $opt['required'] = $this->checkboxScriptHelper('required');
+ return $opt;
+ }
+
+ public function getShowHideCallbackName(){
+ return "fm_".$this->getTypeName()."_show_hide";
+ }
+
+ public function getRequiredValidatorName(){
+ return 'fm_base_required_validator';
+ }
+
+ public function getGeneralValidatorName(){
+ return 'fm_text_validation';
+ }
+
+ public function getGeneralValidatorMessage($type){
+ return $this->validators[$type]['message'];
+ }
+
+ protected function showExtraScripts(){
+ ?>
+ validators as $val){
+ $list[$val['name']] = $val['label'];
+ }
+ return $list;
+ }
+
+ public function initValidators(){
+ global $fmdb;
+ $this->validators = $fmdb->getTextValidators();
+ }
+}
+
+
+?>
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/types/textarea.php b/src/wp-content/plugins/wordpress-form-manager/types/textarea.php
new file mode 100644
index 00000000..5358d0b3
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/types/textarea.php
@@ -0,0 +1,95 @@
+ 'textarea',
+ 'default' => $itemInfo['extra']['value'],
+ 'attributes' => array('name' => $uniqueName,
+ 'id'=> $uniqueName,
+ 'style' => "width:".$itemInfo['extra']['cols']."px;height:".$itemInfo['extra']['rows']."px;"
+ )
+ );
+ return fe_getElementHTML($elem);
+ }
+
+ public function itemDefaults(){
+ $itemInfo = array();
+ $itemInfo['label'] = __("New Text Area", 'wordpress-form-manager');
+ $itemInfo['description'] = __("Item Description", 'wordpress-form-manager');
+ $itemInfo['extra'] = array('cols'=>'300', 'rows' => '100');
+ $itemInfo['nickname'] = '';
+ $itemInfo['required'] = 0;
+ $itemInfo['validator'] = "";
+ $ItemInfo['validation_msg'] = "";
+ $itemInfo['db_type'] = "TEXT";
+
+ return $itemInfo;
+ }
+
+ public function editItem($uniqueName, $itemInfo){
+ $elem=array('type' => 'textarea',
+ 'default' => $itemInfo['extra']['value'],
+ 'attributes' => array('name' => $uniqueName."-edit-value",
+ 'id'=> $uniqueName."-edit-value",
+ 'rows'=> 2,
+ 'cols'=> 18,
+ 'readonly' => 'readonly'
+ )
+ );
+ return fe_getElementHTML($elem);
+ }
+
+ public function getPanelItems($uniqueName, $itemInfo){
+ $arr=array();
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'label', __('Label', 'wordpress-form-manager'), array('value' => $itemInfo['label']));
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'value', __('Default Value', 'wordpress-form-manager'), array('value' => $itemInfo['extra']['value']));
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'rows', __('Height (in pixels)', 'wordpress-form-manager'), array('value' => $itemInfo['extra']['rows']));
+ $arr[] = new fm_editPanelItemBase($uniqueName, 'cols', __('Width (in pixels)', 'wordpress-form-manager'), array('value' => $itemInfo['extra']['cols']));
+ $arr[] = new fm_editPanelItemCheckbox($uniqueName, 'required', __('Required', 'wordpress-form-manager'), array('checked'=>$itemInfo['required']));
+ return $arr;
+ }
+
+ public function getPanelScriptOptions(){
+ $opt = $this->getPanelScriptOptionDefaults();
+ $opt['extra'] = $this->extraScriptHelper(array('value'=>'value', 'rows'=>'rows', 'cols'=>'cols'));
+ $opt['required'] = $this->checkboxScriptHelper('required');
+
+ return $opt;
+ }
+
+ public function getShowHideCallbackName(){
+ return "fm_textarea_show_hide";
+ }
+
+ public function getRequiredValidatorName(){
+ return 'fm_base_required_validator';
+ }
+
+ protected function showExtraScripts(){
+ ?>
+
\ No newline at end of file
diff --git a/src/wp-content/plugins/wordpress-form-manager/wordpress-form-manager.php b/src/wp-content/plugins/wordpress-form-manager/wordpress-form-manager.php
new file mode 100644
index 00000000..e83975b8
--- /dev/null
+++ b/src/wp-content/plugins/wordpress-form-manager/wordpress-form-manager.php
@@ -0,0 +1,417 @@
+db_version(), '5.0.3', '<') )
+ wp_die( __('Form manager requires MySQL version 5.0.3 or higher', 'wordpress-form-manager') );
+
+include 'helpers.php';
+
+include 'db.php';
+include 'display.php';
+include 'template.php';
+include 'email.php';
+include 'formdefinition.php';
+
+/**************************************************************/
+/******* PLUGIN OPTIONS ***************************************/
+
+if(get_option('fm-shortcode') === false)
+ update_option("fm-shortcode", "form");
+if(get_option('fm-enable-mce-button') === false)
+ update_option("fm-enable-mce-button", "YES");
+
+update_option("fm-forms-table-name", "fm_forms");
+update_option("fm-items-table-name", "fm_items");
+update_option("fm-settings-table-name", "fm_settings");
+update_option("fm-templates-table-name", "fm_templates");
+update_option("fm-data-table-prefix", "fm_data");
+update_option("fm-query-table-prefix", "fm_queries");
+update_option("fm-default-form-template", "fm-form-default.php");
+update_option("fm-default-summary-template", "fm-summary-default.php");
+update_option("fm-temp-dir", "tmp");
+update_option("fm-data-shortcode", "formdata");
+
+global $wpdb;
+global $fmdb;
+global $fm_display;
+global $fm_templates;
+
+$fmdb = new fm_db_class($wpdb->prefix.get_option('fm-forms-table-name'),
+ $wpdb->prefix.get_option('fm-items-table-name'),
+ $wpdb->prefix.get_option('fm-settings-table-name'),
+ $wpdb->prefix.get_option('fm-templates-table-name'),
+ $wpdb->dbh
+ );
+$fm_display = new fm_display_class();
+$fm_templates = new fm_template_manager();
+
+/**************************************************************/
+/******* DATABASE SETUP ***************************************/
+
+function fm_install(){
+ global $fmdb;
+ global $fm_currentVersion;
+
+ //from any version before 1.4.0; must be done before the old columns are removed
+ $fmdb->convertAppearanceSettings();
+
+ //initialize the database
+ $fmdb->setupFormManager();
+
+ // covers updates from 1.3.0
+ $q = "UPDATE `{$fmdb->formsTable}` SET `behaviors` = 'reg_user_only,display_summ,single_submission' WHERE `behaviors` = 'reg_user_only,no_dup'";
+ $fmdb->query($q);
+ $q = "UPDATE `{$fmdb->formsTable}` SET `behaviors` = 'reg_user_only,display_summ,edit' WHERE `behaviors` = 'reg_user_only,no_dup,edit'";
+ $fmdb->query($q);
+
+ //updates from 1.4.10 and previous
+ $fmdb->fixTemplatesTableModified();
+
+ // covers versions up to and including 1.3.10
+ $fmdb->fixCollation();
+
+ $fmdb->updateDataTables();
+
+ $fmdb->fixDBTypeBug();
+
+ update_option('fm-version', $fm_currentVersion);
+}
+register_activation_hook(__FILE__,'fm_install');
+
+//uninstall - delete the table(s).
+function fm_uninstall(){
+ global $fmdb;
+ $fmdb->removeFormManager();
+
+ delete_option('fm-shortcode');
+ delete_option('fm-forms-table-name');
+ delete_option('fm-items-table-name');
+ delete_option('fm-settings-table-name');
+ delete_option('fm-templates-table-name');
+ delete_option('fm-data-table-prefix');
+ delete_option('fm-query-table-prefix');
+ delete_option('fm-default-form-template');
+ delete_option('fm-default-summary-template');
+ delete_option('fm-version');
+ delete_option('fm-temp-dir');
+ delete_option('fm-data-shortcode');
+ delete_option('fm-enable-mce-button');
+}
+register_uninstall_hook(__FILE__,'fm_uninstall');
+
+
+/**************************************************************/
+/******* HOUSEKEEPING *****************************************/
+
+//delete .csv files on each login
+add_action('wp_login', 'fm_cleanCSVData');
+function fm_cleanCSVData(){
+ $dirName = @dirname(__FILE__)."/".get_option("fm-temp-dir");
+ $dir = @opendir($dirName);
+ while($fname = @readdir($dir)) {
+ if(file_exists(dirname(__FILE__)."/".get_option("fm-temp-dir")."/".$fname))
+ @unlink($dirName."/".$fname);
+ }
+ @closedir($dir);
+}
+
+/**************************************************************/
+/******* INIT, SCRIPTS & CSS **********************************/
+
+add_action('admin_init', 'fm_adminInit');
+function fm_adminInit(){
+ global $fm_SLIMSTAT_EXISTS;
+ if(get_option('slimstat_secret') !== false) $fm_SLIMSTAT_EXISTS = true;
+}
+
+add_action('admin_enqueue_scripts', 'fm_adminEnqueueScripts');
+function fm_adminEnqueueScripts(){
+ wp_enqueue_script('form-manager-js', plugins_url('/js/scripts.js', __FILE__), array('scriptaculous'));
+
+ wp_localize_script('form-manager-js', 'fm_I18n', array( 'save_with_deleted_items' => __("There may be (data) associated with the form item(s) you removed. Are you sure you want to save?", 'wordpress-form-manager'),
+ 'unsaved_changes' => __("Any unsaved changes will be lost. Are you sure?", 'wordpress-form-manager'),
+ 'click_here_to_download' => __("Click here to download", 'wordpress-form-manager'),
+ 'there_are_no_files' => __("There are no files to download", 'wordpress-form-manager'),
+ 'unable_to_create_zip' => __("Unable to create .ZIP file", 'wordpress-form-manager'),
+ 'move_button' => __("move", 'wordpress-form-manager'),
+ 'delete_button' => __("delete", 'wordpress-form-manager'),
+ 'enter_items_separated_by_commas' => __("Enter items separated by commas", 'wordpress-form-manager'),
+ 'hide_button' => __("hide", 'wordpress-form-manager'),
+ 'show_button' => __("show", 'wordpress-form-manager'),
+ 'add_test' => __("Add Test", 'conditions', 'wordpress-form-manager'),
+ 'add_item' => __("Add Item", 'conditions', 'wordpress-form-manager'),
+ 'applies_to' => __("Applies to", 'conditions', 'wordpress-form-manager'),
+ 'and_connective' => __("AND", 'conditions', 'wordpress-form-manager'),
+ 'or_connective' => __("OR", 'conditions', 'wordpress-form-manager'),
+ 'choose_a_rule_type' => __("(Choose a rule type)", 'conditions', 'wordpress-form-manager'),
+ 'only_show_elements_if' => __("Only show elements if...", 'wordpress-form-manager'),
+ 'show_elements_if' => __("Show elements if...", 'conditions', 'wordpress-form-manager'),
+ 'hide_elements_if' => __("Hide elements if...", 'conditions', 'wordpress-form-manager'),
+ 'only_require_elements_if' => __("Only require elements if...", 'conditions', 'wordpress-form-manager'),
+ 'require_elements_if' => __("Require elements if", 'conditions', 'wordpress-form-manager'),
+ 'do_not_require_elements_if' => __("Do not require elements if", 'wordpress-form-manager'),
+ 'empty_test' => __("...", 'conditions', 'wordpress-form-manager'),
+ 'equals' => __("equals", 'conditions', 'wordpress-form-manager'),
+ 'does_not_equal' => __("does not equal", 'conditions', 'wordpress-form-manager'),
+ 'is_less_than' => __("is less than", 'conditions', 'wordpress-form-manager'),
+ 'is_greater_than' => __("is greater than", 'conditions', 'wordpress-form-manager'),
+ 'is_lt_or_equal_to' => __("is less than or equal to", 'conditions', 'wordpress-form-manager'),
+ 'is_gt_or_equal_to' => __("is greater than or equal to", 'conditions', 'wordpress-form-manager'),
+ 'is_empty' => __("is empty", 'conditions', 'wordpress-form-manager'),
+ 'is_not_empty' => __("is not empty", 'conditions', 'wordpress-form-manager'),
+ 'is_checked' => __("is checked", 'conditions', 'wordpress-form-manager'),
+ 'is_not_checked' => __("is not checked", 'conditions', 'wordpress-form-manager')
+ ) );
+
+ wp_register_style('form-manager-css', plugins_url('/css/style.css', __FILE__));
+ wp_enqueue_style('form-manager-css');
+}
+
+add_action('init', 'fm_userInit');
+function fm_userInit(){
+ global $fm_currentVersion;
+ global $fm_templates;
+
+ load_plugin_textdomain('wordpress-form-manager', false, dirname(plugin_basename(__FILE__)).'/languages/' );
+
+ //update check, since the snarky wordpress dev changed the behavior of a function based on its english name, rather than its widely accepted usage.
+ //"The perfect is the enemy of the good".
+ $ver = get_option('fm-version');
+ if($ver != $fm_currentVersion){
+ fm_install();
+ }
+
+ include 'settings.php';
+
+ $fm_templates->initTemplates();
+
+ wp_enqueue_script('form-manager-js-user', plugins_url('/js/userscripts.js', __FILE__));
+
+ wp_register_style('form-manager-css', plugins_url('/css/style.css', __FILE__));
+ wp_enqueue_style('form-manager-css');
+}
+
+add_action('wp_head', 'fm_userHead');
+function fm_userHead(){
+ global $fm_controls;
+ foreach($fm_controls as $control){
+ $control->showUserScripts();
+ }
+}
+
+/**************************************************************/
+/******* ADMIN PAGES ******************************************/
+
+add_action('admin_menu', 'fm_setupAdminMenu');
+function fm_setupAdminMenu(){
+ $pages[] = add_object_page(__("Forms", 'wordpress-form-manager'), __("Forms", 'wordpress-form-manager'), apply_filters('fm_main_capability', 'manage_options'), "fm-admin-main", 'fm_showMainPage', plugins_url('/mce_plugins/formmanager.png', __FILE__));
+ $pages[] = add_submenu_page("fm-admin-main", __("Edit", 'wordpress-form-manager'), __("Edit", 'wordpress-form-manager'), apply_filters('fm_main_capability', 'manage_options'), "fm-edit-form", 'fm_showEditPage');
+ //$pages[] = add_submenu_page("fm-admin-main", __("Data", 'wordpress-form-manager'), __("Data", 'wordpress-form-manager'), apply_filters('fm_data_capability', 'manage_options'), "fm-form-data", 'fm_showDataPage');
+
+ //at some point, make this link go to a fresh form
+ //$pages[] = add_submenu_page("fm-admin-main", "Add New", "Add New", "manage_options", "fm-add-new", 'fm_showMainPage');
+
+ $pages[] = add_submenu_page("fm-admin-main", __("Settings", 'wordpress-form-manager'), __("Settings", 'wordpress-form-manager'), apply_filters('fm_settings_capability', 'manage_options'), "fm-global-settings", 'fm_showSettingsPage');
+ $pages[] = add_submenu_page("fm-admin-main", __("Advanced Settings", 'wordpress-form-manager'), __("Advanced Settings", 'wordpress-form-manager'), apply_filters('fm_settings_advanced_capability', 'manage_options'), "fm-global-settings-advanced", 'fm_showSettingsAdvancedPage');
+
+ //$pages[] = add_submenu_page("fm-admin-main", __("Edit Form - Advanced", 'wordpress-form-manager'), __("Edit Form - Advanced", 'wordpress-form-manager'), apply_filters('fm_forms_advanced_capability', 'manage_options'), "fm-edit-form-advanced", 'fm_showEditAdvancedPage');
+
+ foreach($pages as $page)
+ add_action('admin_head-'.$page, 'fm_adminHeadPluginOnly');
+
+ $pluginName = plugin_basename(__FILE__);
+ add_filter( 'plugin_action_links_' . $pluginName, 'fm_pluginActions' );
+}
+
+function fm_pluginActions($links){
+ $settings_link = '' . __('Settings', 'wordpress-form-manager') . ' ';
+ array_unshift( $links, $settings_link );
+ return $links;
+}
+
+add_action('admin_head', 'fm_adminHead');
+function fm_adminHead(){
+ global $submenu;
+
+ $toUnset = array('fm-edit-form');
+
+ if(isset($submenu['fm-admin-main']) && is_array($submenu['fm-admin-main']))
+ foreach($submenu['fm-admin-main'] as $index => $submenuItem)
+ if(in_array($submenuItem[2], $toUnset, true))
+ unset($submenu['fm-admin-main'][$index]);
+
+}
+
+//only show this stuff when viewing a plugin page, since some of it is messy
+function fm_adminHeadPluginOnly(){
+ global $fm_controls;
+ //show the control scripts
+ fm_showControlScripts();
+ foreach($fm_controls as $control){
+ $control->showScripts();
+ }
+}
+
+function fm_showEditPage(){ include 'pages/editform.php'; }
+function fm_showEditAdvancedPage(){ include 'pages/editformadv.php'; }
+function fm_showDataPage(){ include 'pages/formdata.php'; }
+function fm_showMainPage(){ include 'pages/main.php'; }
+function fm_showSettingsPage(){ include 'pages/editsettings.php'; }
+function fm_showSettingsAdvancedPage(){ include 'pages/editsettingsadv.php'; }
+
+// capabilities
+
+if (function_exists( 'members_plugin_init' )){
+ $fm_MEMBERS_EXISTS = true;
+
+ add_filter('fm_main_capability', 'fm_main_capability');
+ add_filter('fm_forms_capability', 'fm_forms_capability');
+ add_filter('fm_forms_advanced_capability', 'fm_forms_advanced_capability');
+ add_filter('fm_data_capability', 'fm_data_capability');
+ add_filter('fm_settings_capability', 'fm_settings_capability');
+ add_filter('fm_settings_advanced_capability', 'fm_settings_advanced_capability');
+
+ add_filter('members_get_capabilities', 'fm_add_members_capabilities' );
+}
+
+function fm_main_capability( $cap ) { return 'form_manager_main'; }
+function fm_forms_capability( $cap ) { return 'form_manager_forms'; }
+function fm_forms_advanced_capability( $cap ) { return 'form_manager_forms_advanced'; }
+function fm_data_capability( $cap ) { return 'form_manager_data'; }
+function fm_settings_capability( $cap ) { return 'form_manager_settings'; }
+function fm_settings_advanced_capability( $cap ) { return 'form_manager_settings_advanced'; }
+
+function fm_add_members_capabilities( $caps ) {
+ $caps[] = 'form_manager_main';
+ $caps[] = 'form_manager_forms';
+ $caps[] = 'form_manager_delete_forms';
+ $caps[] = 'form_manager_add_forms';
+ $caps[] = 'form_manager_forms_advanced';
+ $caps[] = 'form_manager_data';
+ $caps[] = 'form_manager_settings';
+ $caps[] = 'form_manager_settings_advanced';
+
+ $caps[] = 'form_manager_edit_data';
+ $caps[] = 'form_manager_delete_data';
+ $caps[] = 'form_manager_nicknames';
+ $caps[] = 'form_manager_conditions';
+
+ return $caps;
+}
+
+include 'ajax.php';
+
+/**************************************************************/
+/******* SHORTCODES *******************************************/
+
+add_shortcode(get_option('fm-shortcode'), 'fm_shortcodeHandler');
+function fm_shortcodeHandler($atts){
+ if(!isset($atts[0])) return sprintf(__("Form Manager: shortcode must include a form slug. For example, something like '%s'", 'wordpress-form-manager'), "[form form-1]");
+ return fm_doFormBySlug($atts[0]);
+}
+
+add_shortcode(get_option('fm-data-shortcode'), 'fm_dataShortcodeHandler');
+function fm_dataShortcodeHandler($atts){
+ if(!isset($atts[0])) return sprintf(__("Form Manager: shortcode must include a form slug. For example, something like '%s'", 'wordpress-form-manager'), "[formdata form-1]");
+ $formSlug = $atts[0];
+
+ $atts = shortcode_atts(array(
+ 'orderby' => 'timestamp',
+ 'order' => 'desc',
+ 'dataperpage' => 30,
+ 'template' => 'fm-summary-multi'
+ ), $atts);
+
+ return fm_doDataListBySlug($formSlug, $atts['template'], $atts['orderby'], $atts['order'], $atts['dataperpage']);
+}
+
+/**************************************************************/
+/******* HELPERS **********************************************/
+
+//allow scheduling of clearing the temporary directory
+
+function fm_deleteTemporaryFiles($filename){
+ //for now, just clear the directory.
+ $dir = dirname(__FILE__)."/".get_option("fm-temp-dir");
+ if($handle = opendir($dir)){
+ while(($file = readdir($handle)) !== false){
+ if($file != "." && $file != ".." && is_file($dir."/".$file))
+ unlink($dir."/".$file);
+ }
+ closedir($handle);
+ }
+}
+add_action('fm_delete_temporary_file', 'fm_deleteTemporaryFiles');
+
+/**************************************************************/
+
+include 'api.php';
+
+/* ANDREA : include php for create TinyMCE Button */
+if(get_option('fm-enable-mce-button') == "YES")
+ include 'tinymce.php';
+
+
+//set the include path back to whatever it was before:
+set_include_path($fm_oldIncludePath);
+
+?>
\ No newline at end of file
diff --git a/src/wp-content/themes/bloggingstream/functions.php b/src/wp-content/themes/bloggingstream/functions.php
index 39482177..642400ab 100644
--- a/src/wp-content/themes/bloggingstream/functions.php
+++ b/src/wp-content/themes/bloggingstream/functions.php
@@ -25,4 +25,7 @@ require_once ($includes_path . 'theme-widgets.php'); // Theme widgets
/* End WooThemes Functions - You can add custom functions below */
/*-----------------------------------------------------------------------------------*/
+require_once ($includes_path . 'save_application_form.php');
+
+
?>
\ No newline at end of file
diff --git a/src/wp-content/themes/bloggingstream/includes/save_application_form.php b/src/wp-content/themes/bloggingstream/includes/save_application_form.php
new file mode 100644
index 00000000..87b73541
--- /dev/null
+++ b/src/wp-content/themes/bloggingstream/includes/save_application_form.php
@@ -0,0 +1,27 @@
+posted_data["tu-mensaje"])) {
+ $table_name = $wpdb->prefix."ltw_testimonials";
+ $results = $wpdb->insert(
+ $table_name,
+ array('group_id' => 1,
+ 'testimonial' => $cf7->posted_data["tu-mensaje"],
+ 'client_name' => $cf7->posted_data["tu-nombre"],
+ 'client_pic' => 'http://localhost/lqdvi/webcam/images/'.$cf7->posted_data["id"],
+ 'client_website' => $cf7->posted_data["tu-email"],
+ 'client_company' => '',
+ 'show_in_widget' => 0,
+ 'order' => 0));
+
+ return $result;
+ } else {
+ return false;
+ }
+}
+
+
+add_action( 'wpcf7_before_send_mail', 'save_application_form');
+?>
diff --git a/src/wp-content/themes/bloggingstream/template-webcam.php b/src/wp-content/themes/bloggingstream/template-webcam.php
index 0f33fde2..5192420c 100644
--- a/src/wp-content/themes/bloggingstream/template-webcam.php
+++ b/src/wp-content/themes/bloggingstream/template-webcam.php
@@ -5,41 +5,42 @@ Template Name: Webcam
?>
+
+