diff --git a/README.md b/README.md
index a1cb321..1134ef8 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,22 @@
# WooTrain
-a quick hack plugin to allow people to sign up for Mailtrain newsletters at WooCommerce checkout.
\ No newline at end of file
+a quick hack plugin to allow people to sign up for Mailtrain newsletters at WooCommerce checkout.
+
+## Install
+
+1. First, you'll need [CheckoutFieldEditor](https://woocommerce.com/products/woocommerce-checkout-field-editor/) installed and add a field with name `newsletter_`
+2. Get your API key from Mailtrain
+3. Get your ListID from Mailtrain
+4. Edit line 28 in wootrain.php replacing your Mailtrain URL, Mailtrain list ID and mailtrain API key
+ ```$url = '[your mailtrain URL here]/api/subscribe/[your mailtrain list ID here]?access_token=[your mailtrain API key here]';```
+
+for example:
+
+ ```$url = 'https://mailtrain.example.come/api/subscribe/xxxxxx?access_token=xxxxxxxxxxxxxxxxx';```
+
+5. Zip the `wootrain` folder in this repo
+6. Navigate to Add Plugins in your Wordpress repo, click upload plugin, select wootrain.zip
+7. activate the plugin! :)
+
+
+
diff --git a/wootrain/.distignore b/wootrain/.distignore
new file mode 100644
index 0000000..a2c3490
--- /dev/null
+++ b/wootrain/.distignore
@@ -0,0 +1,41 @@
+# A set of files you probably don't want in your WordPress.org distribution
+.babelrc
+.deployignore
+.distignore
+.editorconfig
+.eslintignore
+.eslintrc
+.git
+.gitignore
+.gitlab-ci.yml
+.travis.yml
+.DS_Store
+Thumbs.db
+behat.yml
+bitbucket-pipelines.yml
+bin
+.circleci/config.yml
+composer.json
+composer.lock
+dependencies.yml
+Gruntfile.js
+package.json
+package-lock.json
+phpunit.xml
+phpunit.xml.dist
+multisite.xml
+multisite.xml.dist
+.phpcs.xml
+phpcs.xml
+.phpcs.xml.dist
+phpcs.xml.dist
+README.md
+webpack.config.js
+wp-cli.local.yml
+yarn.lock
+tests
+vendor
+node_modules
+*.sql
+*.tar.gz
+*.zip
diff --git a/wootrain/.editorconfig b/wootrain/.editorconfig
new file mode 100644
index 0000000..79207a4
--- /dev/null
+++ b/wootrain/.editorconfig
@@ -0,0 +1,22 @@
+# This file is for unifying the coding style for different editors and IDEs
+# editorconfig.org
+
+# WordPress Coding Standards
+# https://make.wordpress.org/core/handbook/coding-standards/
+
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+indent_style = tab
+indent_size = 4
+
+[{.jshintrc,*.json,*.yml}]
+indent_style = space
+indent_size = 2
+
+[{*.txt,wp-config-sample.php}]
+end_of_line = crlf
diff --git a/wootrain/.gitignore b/wootrain/.gitignore
new file mode 100644
index 0000000..6f68bc7
--- /dev/null
+++ b/wootrain/.gitignore
@@ -0,0 +1,9 @@
+.DS_Store
+phpcs.xml
+phpunit.xml
+Thumbs.db
+wp-cli.local.yml
+node_modules/
+*.sql
+*.tar.gz
+*.zip
diff --git a/wootrain/.phpcs.xml.dist b/wootrain/.phpcs.xml.dist
new file mode 100644
index 0000000..067d574
--- /dev/null
+++ b/wootrain/.phpcs.xml.dist
@@ -0,0 +1,49 @@
+
+
+ Generally-applicable sniffs for WordPress plugins.
+
+
+ .
+ /vendor/
+ /node_modules/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wootrain/.travis.yml b/wootrain/.travis.yml
new file mode 100644
index 0000000..75a4b94
--- /dev/null
+++ b/wootrain/.travis.yml
@@ -0,0 +1,67 @@
+sudo: false
+dist: trusty
+
+language: php
+
+notifications:
+ email:
+ on_success: never
+ on_failure: change
+
+branches:
+ only:
+ - master
+
+cache:
+ directories:
+ - $HOME/.composer/cache
+
+matrix:
+ include:
+ - php: 7.2
+ env: WP_VERSION=latest
+ - php: 7.1
+ env: WP_VERSION=latest
+ - php: 7.0
+ env: WP_VERSION=latest
+ - php: 5.6
+ env: WP_VERSION=4.5
+ - php: 5.6
+ env: WP_VERSION=latest
+ - php: 5.6
+ env: WP_VERSION=trunk
+ - php: 5.6
+ env: WP_TRAVISCI=phpcs
+ - php: 5.3
+ env: WP_VERSION=latest
+ dist: precise
+
+before_script:
+ - export PATH="$HOME/.composer/vendor/bin:$PATH"
+ - |
+ if [ -f ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/xdebug.ini ]; then
+ phpenv config-rm xdebug.ini
+ else
+ echo "xdebug.ini does not exist"
+ fi
+ - |
+ if [[ ! -z "$WP_VERSION" ]] ; then
+ bash bin/install-wp-tests.sh wordpress_test root '' localhost $WP_VERSION
+ composer global require "phpunit/phpunit=4.8.*|5.7.*"
+ fi
+ - |
+ if [[ "$WP_TRAVISCI" == "phpcs" ]] ; then
+ composer global require wp-coding-standards/wpcs
+ phpcs --config-set installed_paths $HOME/.composer/vendor/wp-coding-standards/wpcs
+ fi
+
+script:
+ - |
+ if [[ ! -z "$WP_VERSION" ]] ; then
+ phpunit
+ WP_MULTISITE=1 phpunit
+ fi
+ - |
+ if [[ "$WP_TRAVISCI" == "phpcs" ]] ; then
+ phpcs
+ fi
diff --git a/wootrain/Gruntfile.js b/wootrain/Gruntfile.js
new file mode 100644
index 0000000..8ed7a82
--- /dev/null
+++ b/wootrain/Gruntfile.js
@@ -0,0 +1,56 @@
+module.exports = function( grunt ) {
+
+ 'use strict';
+
+ // Project configuration
+ grunt.initConfig( {
+
+ pkg: grunt.file.readJSON( 'package.json' ),
+
+ addtextdomain: {
+ options: {
+ textdomain: 'wootrain',
+ },
+ update_all_domains: {
+ options: {
+ updateDomains: true
+ },
+ src: [ '*.php', '**/*.php', '!\.git/**/*', '!bin/**/*', '!node_modules/**/*', '!tests/**/*' ]
+ }
+ },
+
+ wp_readme_to_markdown: {
+ your_target: {
+ files: {
+ 'README.md': 'readme.txt'
+ }
+ },
+ },
+
+ makepot: {
+ target: {
+ options: {
+ domainPath: '/languages',
+ exclude: [ '\.git/*', 'bin/*', 'node_modules/*', 'tests/*' ],
+ mainFile: 'wootrain.php',
+ potFilename: 'wootrain.pot',
+ potHeaders: {
+ poedit: true,
+ 'x-poedit-keywordslist': true
+ },
+ type: 'wp-plugin',
+ updateTimestamp: true
+ }
+ }
+ },
+ } );
+
+ grunt.loadNpmTasks( 'grunt-wp-i18n' );
+ grunt.loadNpmTasks( 'grunt-wp-readme-to-markdown' );
+ grunt.registerTask( 'default', [ 'i18n','readme' ] );
+ grunt.registerTask( 'i18n', ['addtextdomain', 'makepot'] );
+ grunt.registerTask( 'readme', ['wp_readme_to_markdown'] );
+
+ grunt.util.linefeed = '\n';
+
+};
diff --git a/wootrain/bin/install-wp-tests.sh b/wootrain/bin/install-wp-tests.sh
new file mode 100755
index 0000000..5ceac4b
--- /dev/null
+++ b/wootrain/bin/install-wp-tests.sh
@@ -0,0 +1,155 @@
+#!/usr/bin/env bash
+
+if [ $# -lt 3 ]; then
+ echo "usage: $0 [db-host] [wp-version] [skip-database-creation]"
+ exit 1
+fi
+
+DB_NAME=$1
+DB_USER=$2
+DB_PASS=$3
+DB_HOST=${4-localhost}
+WP_VERSION=${5-latest}
+SKIP_DB_CREATE=${6-false}
+
+TMPDIR=${TMPDIR-/tmp}
+TMPDIR=$(echo $TMPDIR | sed -e "s/\/$//")
+WP_TESTS_DIR=${WP_TESTS_DIR-$TMPDIR/wordpress-tests-lib}
+WP_CORE_DIR=${WP_CORE_DIR-$TMPDIR/wordpress/}
+
+download() {
+ if [ `which curl` ]; then
+ curl -s "$1" > "$2";
+ elif [ `which wget` ]; then
+ wget -nv -O "$2" "$1"
+ fi
+}
+
+if [[ $WP_VERSION =~ ^[0-9]+\.[0-9]+\-(beta|RC)[0-9]+$ ]]; then
+ WP_BRANCH=${WP_VERSION%\-*}
+ WP_TESTS_TAG="branches/$WP_BRANCH"
+
+elif [[ $WP_VERSION =~ ^[0-9]+\.[0-9]+$ ]]; then
+ WP_TESTS_TAG="branches/$WP_VERSION"
+elif [[ $WP_VERSION =~ [0-9]+\.[0-9]+\.[0-9]+ ]]; then
+ if [[ $WP_VERSION =~ [0-9]+\.[0-9]+\.[0] ]]; then
+ # version x.x.0 means the first release of the major version, so strip off the .0 and download version x.x
+ WP_TESTS_TAG="tags/${WP_VERSION%??}"
+ else
+ WP_TESTS_TAG="tags/$WP_VERSION"
+ fi
+elif [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then
+ WP_TESTS_TAG="trunk"
+else
+ # http serves a single offer, whereas https serves multiple. we only want one
+ download http://api.wordpress.org/core/version-check/1.7/ /tmp/wp-latest.json
+ grep '[0-9]+\.[0-9]+(\.[0-9]+)?' /tmp/wp-latest.json
+ LATEST_VERSION=$(grep -o '"version":"[^"]*' /tmp/wp-latest.json | sed 's/"version":"//')
+ if [[ -z "$LATEST_VERSION" ]]; then
+ echo "Latest WordPress version could not be found"
+ exit 1
+ fi
+ WP_TESTS_TAG="tags/$LATEST_VERSION"
+fi
+set -ex
+
+install_wp() {
+
+ if [ -d $WP_CORE_DIR ]; then
+ return;
+ fi
+
+ mkdir -p $WP_CORE_DIR
+
+ if [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then
+ mkdir -p $TMPDIR/wordpress-nightly
+ download https://wordpress.org/nightly-builds/wordpress-latest.zip $TMPDIR/wordpress-nightly/wordpress-nightly.zip
+ unzip -q $TMPDIR/wordpress-nightly/wordpress-nightly.zip -d $TMPDIR/wordpress-nightly/
+ mv $TMPDIR/wordpress-nightly/wordpress/* $WP_CORE_DIR
+ else
+ if [ $WP_VERSION == 'latest' ]; then
+ local ARCHIVE_NAME='latest'
+ elif [[ $WP_VERSION =~ [0-9]+\.[0-9]+ ]]; then
+ # https serves multiple offers, whereas http serves single.
+ download https://api.wordpress.org/core/version-check/1.7/ $TMPDIR/wp-latest.json
+ if [[ $WP_VERSION =~ [0-9]+\.[0-9]+\.[0] ]]; then
+ # version x.x.0 means the first release of the major version, so strip off the .0 and download version x.x
+ LATEST_VERSION=${WP_VERSION%??}
+ else
+ # otherwise, scan the releases and get the most up to date minor version of the major release
+ local VERSION_ESCAPED=`echo $WP_VERSION | sed 's/\./\\\\./g'`
+ LATEST_VERSION=$(grep -o '"version":"'$VERSION_ESCAPED'[^"]*' $TMPDIR/wp-latest.json | sed 's/"version":"//' | head -1)
+ fi
+ if [[ -z "$LATEST_VERSION" ]]; then
+ local ARCHIVE_NAME="wordpress-$WP_VERSION"
+ else
+ local ARCHIVE_NAME="wordpress-$LATEST_VERSION"
+ fi
+ else
+ local ARCHIVE_NAME="wordpress-$WP_VERSION"
+ fi
+ download https://wordpress.org/${ARCHIVE_NAME}.tar.gz $TMPDIR/wordpress.tar.gz
+ tar --strip-components=1 -zxmf $TMPDIR/wordpress.tar.gz -C $WP_CORE_DIR
+ fi
+
+ download https://raw.github.com/markoheijnen/wp-mysqli/master/db.php $WP_CORE_DIR/wp-content/db.php
+}
+
+install_test_suite() {
+ # portable in-place argument for both GNU sed and Mac OSX sed
+ if [[ $(uname -s) == 'Darwin' ]]; then
+ local ioption='-i.bak'
+ else
+ local ioption='-i'
+ fi
+
+ # set up testing suite if it doesn't yet exist
+ if [ ! -d $WP_TESTS_DIR ]; then
+ # set up testing suite
+ mkdir -p $WP_TESTS_DIR
+ svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/includes/ $WP_TESTS_DIR/includes
+ svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/data/ $WP_TESTS_DIR/data
+ fi
+
+ if [ ! -f wp-tests-config.php ]; then
+ download https://develop.svn.wordpress.org/${WP_TESTS_TAG}/wp-tests-config-sample.php "$WP_TESTS_DIR"/wp-tests-config.php
+ # remove all forward slashes in the end
+ WP_CORE_DIR=$(echo $WP_CORE_DIR | sed "s:/\+$::")
+ sed $ioption "s:dirname( __FILE__ ) . '/src/':'$WP_CORE_DIR/':" "$WP_TESTS_DIR"/wp-tests-config.php
+ sed $ioption "s/youremptytestdbnamehere/$DB_NAME/" "$WP_TESTS_DIR"/wp-tests-config.php
+ sed $ioption "s/yourusernamehere/$DB_USER/" "$WP_TESTS_DIR"/wp-tests-config.php
+ sed $ioption "s/yourpasswordhere/$DB_PASS/" "$WP_TESTS_DIR"/wp-tests-config.php
+ sed $ioption "s|localhost|${DB_HOST}|" "$WP_TESTS_DIR"/wp-tests-config.php
+ fi
+
+}
+
+install_db() {
+
+ if [ ${SKIP_DB_CREATE} = "true" ]; then
+ return 0
+ fi
+
+ # parse DB_HOST for port or socket references
+ local PARTS=(${DB_HOST//\:/ })
+ local DB_HOSTNAME=${PARTS[0]};
+ local DB_SOCK_OR_PORT=${PARTS[1]};
+ local EXTRA=""
+
+ if ! [ -z $DB_HOSTNAME ] ; then
+ if [ $(echo $DB_SOCK_OR_PORT | grep -e '^[0-9]\{1,\}$') ]; then
+ EXTRA=" --host=$DB_HOSTNAME --port=$DB_SOCK_OR_PORT --protocol=tcp"
+ elif ! [ -z $DB_SOCK_OR_PORT ] ; then
+ EXTRA=" --socket=$DB_SOCK_OR_PORT"
+ elif ! [ -z $DB_HOSTNAME ] ; then
+ EXTRA=" --host=$DB_HOSTNAME --protocol=tcp"
+ fi
+ fi
+
+ # create database
+ mysqladmin create $DB_NAME --user="$DB_USER" --password="$DB_PASS"$EXTRA
+}
+
+install_wp
+install_test_suite
+install_db
diff --git a/wootrain/package.json b/wootrain/package.json
new file mode 100644
index 0000000..2282337
--- /dev/null
+++ b/wootrain/package.json
@@ -0,0 +1,17 @@
+
+{
+ "name": "wootrain",
+ "version": "0.1.0",
+ "main": "Gruntfile.js",
+ "author": "YOUR NAME HERE",
+ "scripts" : {
+ "start" : "grunt default" ,
+ "readme" : "grunt readme",
+ "i18n" : "grunt i18n"
+ },
+ "devDependencies": {
+ "grunt": "~0.4.5",
+ "grunt-wp-i18n": "~0.5.0",
+ "grunt-wp-readme-to-markdown": "~1.0.0"
+ }
+}
diff --git a/wootrain/phpunit.xml.dist b/wootrain/phpunit.xml.dist
new file mode 100644
index 0000000..16a3902
--- /dev/null
+++ b/wootrain/phpunit.xml.dist
@@ -0,0 +1,16 @@
+
+
+
+
+ ./tests/
+ ./tests/test-sample.php
+
+
+
diff --git a/wootrain/readme.txt b/wootrain/readme.txt
new file mode 100644
index 0000000..dd58bf5
--- /dev/null
+++ b/wootrain/readme.txt
@@ -0,0 +1,115 @@
+=== Wootrain ===
+Contributors: (this should be a list of wordpress.org userid's)
+Donate link: https://example.com/
+Tags: comments, spam
+Requires at least: 4.5
+Tested up to: 5.7
+Requires PHP: 5.6
+Stable tag: 0.1.0
+License: GPLv2 or later
+License URI: https://www.gnu.org/licenses/gpl-2.0.html
+
+Here is a short description of the plugin. This should be no more than 150 characters. No markup here.
+
+== Description ==
+
+This is the long description. No limit, and you can use Markdown (as well as in the following sections).
+
+For backwards compatibility, if this section is missing, the full length of the short description will be used, and
+Markdown parsed.
+
+A few notes about the sections above:
+
+* "Contributors" is a comma separated list of wp.org/wp-plugins.org usernames
+* "Tags" is a comma separated list of tags that apply to the plugin
+* "Requires at least" is the lowest version that the plugin will work on
+* "Tested up to" is the highest version that you've *successfully used to test the plugin*. Note that it might work on
+higher versions... this is just the highest one you've verified.
+* Stable tag should indicate the Subversion "tag" of the latest stable version, or "trunk," if you use `/trunk/` for
+stable.
+
+ Note that the `readme.txt` of the stable tag is the one that is considered the defining one for the plugin, so
+if the `/trunk/readme.txt` file says that the stable tag is `4.3`, then it is `/tags/4.3/readme.txt` that'll be used
+for displaying information about the plugin. In this situation, the only thing considered from the trunk `readme.txt`
+is the stable tag pointer. Thus, if you develop in trunk, you can update the trunk `readme.txt` to reflect changes in
+your in-development version, without having that information incorrectly disclosed about the current stable version
+that lacks those changes -- as long as the trunk's `readme.txt` points to the correct stable tag.
+
+ If no stable tag is provided, it is assumed that trunk is stable, but you should specify "trunk" if that's where
+you put the stable version, in order to eliminate any doubt.
+
+== Installation ==
+
+This section describes how to install the plugin and get it working.
+
+e.g.
+
+1. Upload `plugin-name.php` to the `/wp-content/plugins/` directory
+1. Activate the plugin through the 'Plugins' menu in WordPress
+1. Place `` in your templates
+
+== Frequently Asked Questions ==
+
+= A question that someone might have =
+
+An answer to that question.
+
+= What about foo bar? =
+
+Answer to foo bar dilemma.
+
+== Screenshots ==
+
+1. This screen shot description corresponds to screenshot-1.(png|jpg|jpeg|gif). Note that the screenshot is taken from
+the /assets directory or the directory that contains the stable readme.txt (tags or trunk). Screenshots in the /assets
+directory take precedence. For example, `/assets/screenshot-1.png` would win over `/tags/4.3/screenshot-1.png`
+(or jpg, jpeg, gif).
+2. This is the second screen shot
+
+== Changelog ==
+
+= 1.0 =
+* A change since the previous version.
+* Another change.
+
+= 0.5 =
+* List versions from most recent at top to oldest at bottom.
+
+== Upgrade Notice ==
+
+= 1.0 =
+Upgrade notices describe the reason a user should upgrade. No more than 300 characters.
+
+= 0.5 =
+This version fixes a security related bug. Upgrade immediately.
+
+== Arbitrary section ==
+
+You may provide arbitrary sections, in the same format as the ones above. This may be of use for extremely complicated
+plugins where more information needs to be conveyed that doesn't fit into the categories of "description" or
+"installation." Arbitrary sections will be shown below the built-in sections outlined above.
+
+== A brief Markdown Example ==
+
+Ordered list:
+
+1. Some feature
+1. Another feature
+1. Something else about the plugin
+
+Unordered list:
+
+* something
+* something else
+* third thing
+
+Here's a link to [WordPress](https://wordpress.org/ "Your favorite software") and one to [Markdown's Syntax Documentation][markdown syntax].
+Titles are optional, naturally.
+
+[markdown syntax]: https://daringfireball.net/projects/markdown/syntax
+ "Markdown is what the parser uses to process much of the readme file"
+
+Markdown uses email style notation for blockquotes and I've been told:
+> Asterisks for *emphasis*. Double it up for **strong**.
+
+``
diff --git a/wootrain/tests/bootstrap.php b/wootrain/tests/bootstrap.php
new file mode 100644
index 0000000..b5f4521
--- /dev/null
+++ b/wootrain/tests/bootstrap.php
@@ -0,0 +1,31 @@
+assertTrue( true );
+ }
+}
diff --git a/wootrain/wootrain.php b/wootrain/wootrain.php
new file mode 100644
index 0000000..1fd4d4b
--- /dev/null
+++ b/wootrain/wootrain.php
@@ -0,0 +1,46 @@
+ wootrain link
+ * Author: trav n calix
+ * Text Domain: wootrain
+ * Domain Path: /languages
+ * Version: 0.1.0
+ * @package Wootrain
+ */
+
+add_action( 'woocommerce_thankyou', 'my_api_call');
+function my_api_call( $order_id ){
+
+ // Order Setup Via WooCommerce
+ $order = new WC_Order( $order_id );
+
+ // if they want to receive the newsletter
+ if (get_post_meta( $order->id, 'newsletter_', "No")== "Yes"){
+
+ //get the email
+ $email = $order->billing_email;
+
+ // build API payload
+ $url = '[your mailtrain URL here]/api/subscribe/[your mailtrain list ID here]?access_token=[your mailtrain API key here]';
+ $body = array(
+ 'EMAIL' => $email,
+ 'FORCE_SUBSCRIBE' => "yes"
+ );
+
+
+ //Call the API
+ $response = wp_remote_post( $url,
+ array(
+ 'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
+ 'method' => 'POST',
+ 'timeout' => 75,
+ 'body' => json_encode($body),
+ )
+ );
+
+ //see if the response was good
+ //$vars = json_decode($response['body'],true);
+ }
+ }