From 60f63ccfe674e8a35ec13cec97ad6604ada00011 Mon Sep 17 00:00:00 2001 From: marco Date: Thu, 13 Aug 2015 21:57:05 +0200 Subject: [PATCH 2/6] Router skeleton. --- lib/Router/Router.php | 36 +++++++++++++++++++++++ lib/Router/Settings.php | 18 ++++++++++++ views/settings.html | 63 +++++++++++++++++++++++++++++++++++++++-- 3 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 lib/Router/Router.php create mode 100644 lib/Router/Settings.php diff --git a/lib/Router/Router.php b/lib/Router/Router.php new file mode 100644 index 0000000000..e8241603b4 --- /dev/null +++ b/lib/Router/Router.php @@ -0,0 +1,36 @@ +setToken(); + } + + function setup() { + $this->securityCheck(); + $endpoint = ucfirst($_POST['endpoint']); + $action = $_POST['action']; + $args = $_POST['args']; + $route = new $endpoint(); + $route->$action($args); + } + + function setToken() { + $token = wp_create_nonce('mailpoet_token'); + wp_localize_script($token); + } + + function securityCheck() { + if (!current_user_can('manage_options')) {die();} + if (!wp_verify_nonce($_POST['token'])) {die();} + } +} diff --git a/lib/Router/Settings.php b/lib/Router/Settings.php new file mode 100644 index 0000000000..98b741a6b0 --- /dev/null +++ b/lib/Router/Settings.php @@ -0,0 +1,18 @@ + 'John', + 'last_name' => 'Mailer', + 'email' => 'john@mailpoet.com' + ); + echo json_encode($data); + } +} diff --git a/views/settings.html b/views/settings.html index ff5dced7ee..857d874c4d 100644 --- a/views/settings.html +++ b/views/settings.html @@ -2,7 +2,64 @@ <% block content %>

<%= 'Settings' %>

-

<%= __('First Name') %>

-

<%= __('Last Name') %>

-

<%= __('Email') %>

+ +
+

+ +

+ +

+ +

+ +

+ +

+ +

+ +

+
+ + <% endblock %> From 0b0539dc8391ee0d7b6b1898a968bc2fac576e47 Mon Sep 17 00:00:00 2001 From: Laurent Szyster Date: Fri, 14 Aug 2015 12:01:08 +0200 Subject: [PATCH 3/6] #66 added a build command to RoboFile.php --- RoboFile.php | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/RoboFile.php b/RoboFile.php index 8ad4575275..8dd214241b 100644 --- a/RoboFile.php +++ b/RoboFile.php @@ -88,7 +88,7 @@ class RoboFile extends \Robo\Tasks { } function testAll() { - $this->loadEnv(); + $this->loadEnv(); $this->_exec('vendor/bin/codecept build'); $this ->taskexec('phantomjs --webdriver=4444') @@ -104,6 +104,53 @@ class RoboFile extends \Robo\Tasks { $this->_exec('vendor/bin/codecept run unit --debug'); } + function zip() { + $rootPath = realpath('wysija-newsletters'); + $zip = new ZipArchive(); + $zip->open('mailpoet.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE); + $directory = new \RecursiveDirectoryIterator( + $rootPath, \FilesystemIterator::FOLLOW_SYMLINKS + ); + $filter = new \RecursiveCallbackFilterIterator( + $directory, function ($current, $key, $iterator) { + return ($current->getFilename()[0] !== '.'); + } + ); + $files = new \RecursiveIteratorIterator($filter); + foreach ($files as $name => $file) { + $filePath = $file->getRealPath(); + $relativePath = substr($filePath, strlen($rootPath) + 1); + $zip->addFile($filePath, $relativePath); + } + $zip->close(); + } + + function build() { + $this->_exec('mkdir wysija-newsletters'); + $this->_exec('mkdir wysija-newsletters/vendor'); + $this->_exec('cp index.php wysija-newsletters/index.php'); + $this->_exec('cp mailpoet.php wysija-newsletters/mailpoet.php'); + $this->_exec('cp package.json wysija-newsletters/package.json'); + $this->_exec('cp composer.* wysija-newsletters/'); + $this->taskCopyDir(array( + 'assets' => 'wysija-newsletters/assets', + 'lang' => 'wysija-newsletters/lang', + 'lib' => 'wysija-newsletters/lib', + 'views' => 'wysija-newsletters/views' + ))->run(); + chdir('./wysija-newsletters'); + $this->taskExecStack() + ->stopOnFail() + // ->exec('cd wysija-newsletters') does not work as intended + ->exec('./composer.phar install --no-dev') + ->run(); + chdir('..'); + $this->_exec('rm wysija-newsletters/package.json'); + $this->_exec('rm wysija-newsletters/composer.*'); + $this->zip(); + $this->taskDeleteDir('wysija-newsletters')->run(); + } + protected function loadEnv() { $dotenv = new Dotenv\Dotenv(__DIR__); $dotenv->load(); From 745700e5fe331b5a09a4a7bccafeedb819311d86 Mon Sep 17 00:00:00 2001 From: marco Date: Fri, 14 Aug 2015 23:39:38 +0200 Subject: [PATCH 4/6] Global bash script with Linux and OSX compatibility. --- .gitignore | 1 + RoboFile.php | 55 ++++----------------------------------------------- build | 47 +++++++++++++++++++++++++++++++++++++++++++ composer.lock | 2 +- 4 files changed, 53 insertions(+), 52 deletions(-) create mode 100755 build diff --git a/.gitignore b/.gitignore index beaa2e65f5..084ddd26a0 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ npm-debug.log /views/cache/** temp .idea +wysija-newsletters.zip diff --git a/RoboFile.php b/RoboFile.php index 8dd214241b..54936dcfdb 100644 --- a/RoboFile.php +++ b/RoboFile.php @@ -48,15 +48,15 @@ class RoboFile extends \Robo\Tasks { function makepot() { $this->_exec('grunt makepot'. - ' --gruntfile '.__DIR__.'/tasks/makepot/makepot.js'. - ' --base_path '.__DIR__ + ' --gruntfile '.__DIR__.'/tasks/makepot/makepot.js'. + ' --base_path '.__DIR__ ); } function pushpot() { $this->_exec('grunt pushpot'. - ' --gruntfile '.__DIR__.'/tasks/makepot/makepot.js'. - ' --base_path '.__DIR__ + ' --gruntfile '.__DIR__.'/tasks/makepot/makepot.js'. + ' --base_path '.__DIR__ ); } @@ -104,53 +104,6 @@ class RoboFile extends \Robo\Tasks { $this->_exec('vendor/bin/codecept run unit --debug'); } - function zip() { - $rootPath = realpath('wysija-newsletters'); - $zip = new ZipArchive(); - $zip->open('mailpoet.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE); - $directory = new \RecursiveDirectoryIterator( - $rootPath, \FilesystemIterator::FOLLOW_SYMLINKS - ); - $filter = new \RecursiveCallbackFilterIterator( - $directory, function ($current, $key, $iterator) { - return ($current->getFilename()[0] !== '.'); - } - ); - $files = new \RecursiveIteratorIterator($filter); - foreach ($files as $name => $file) { - $filePath = $file->getRealPath(); - $relativePath = substr($filePath, strlen($rootPath) + 1); - $zip->addFile($filePath, $relativePath); - } - $zip->close(); - } - - function build() { - $this->_exec('mkdir wysija-newsletters'); - $this->_exec('mkdir wysija-newsletters/vendor'); - $this->_exec('cp index.php wysija-newsletters/index.php'); - $this->_exec('cp mailpoet.php wysija-newsletters/mailpoet.php'); - $this->_exec('cp package.json wysija-newsletters/package.json'); - $this->_exec('cp composer.* wysija-newsletters/'); - $this->taskCopyDir(array( - 'assets' => 'wysija-newsletters/assets', - 'lang' => 'wysija-newsletters/lang', - 'lib' => 'wysija-newsletters/lib', - 'views' => 'wysija-newsletters/views' - ))->run(); - chdir('./wysija-newsletters'); - $this->taskExecStack() - ->stopOnFail() - // ->exec('cd wysija-newsletters') does not work as intended - ->exec('./composer.phar install --no-dev') - ->run(); - chdir('..'); - $this->_exec('rm wysija-newsletters/package.json'); - $this->_exec('rm wysija-newsletters/composer.*'); - $this->zip(); - $this->taskDeleteDir('wysija-newsletters')->run(); - } - protected function loadEnv() { $dotenv = new Dotenv\Dotenv(__DIR__); $dotenv->load(); diff --git a/build b/build new file mode 100755 index 0000000000..c298b18bb3 --- /dev/null +++ b/build @@ -0,0 +1,47 @@ +#!/bin/sh + +# remove previouz build. +rm wysija-newsletters.zip; + +# Create temp dir. +mkdir wysija-newsletters; + +# Cleanup Composer and NPM. +rm -rf vendor; +rm -rf node_modules; +rm composer.lock; + +# Install Composer and NPM deps. +./composer.phar install --no-dev; +npm install --production; + +# Copy release folders. +cp -rf lang wysija-newsletters; +cp -rf assets wysija-newsletters; +cp -rf lib wysija-newsletters; +# cp -rf node_modules wysija-newsletters; +cp -rf vendor wysija-newsletters; +cp -rf views wysija-newsletters; + +# Copy release files. +cp LICENSE wysija-newsletters; +cp index.php wysija-newsletters; +cp mailpoet.php wysija-newsletters; +cp readme.txt wysija-newsletters; +cp uninstall.php wysija-newsletters; +cp webpack.config.js wysija-newsletters; + +# Zip final release. +zip -r wysija-newsletters.zip wysija-newsletters; + +# Remove temp dir. +rm -rf wysija-newsletters; + +# Cleanup Composer and NPM. +rm -rf vendor; +rm -rf node_modules; +rm composer.lock; + +# Reinstall dev dependencies. +./composer.phar install; +./do install; diff --git a/composer.lock b/composer.lock index c2e547a0a7..ccf94fe148 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "ff54fd1b75cd31ce67aaf2fa0ee617da", + "hash": "0e2b177a6de46c3a1263386f1b803faf", "packages": [ { "name": "cerdic/css-tidy", From 5c1f3f43deb91c318aa6ce989bb7da71dc1f7ae2 Mon Sep 17 00:00:00 2001 From: marco Date: Fri, 14 Aug 2015 23:41:46 +0200 Subject: [PATCH 5/6] There's no need to copy node_modules. --- build | 1 - 1 file changed, 1 deletion(-) diff --git a/build b/build index c298b18bb3..4f3331b2ca 100755 --- a/build +++ b/build @@ -19,7 +19,6 @@ npm install --production; cp -rf lang wysija-newsletters; cp -rf assets wysija-newsletters; cp -rf lib wysija-newsletters; -# cp -rf node_modules wysija-newsletters; cp -rf vendor wysija-newsletters; cp -rf views wysija-newsletters; From 60919e6171fa072187fd4a42a45716e9fa209d1a Mon Sep 17 00:00:00 2001 From: marco Date: Sun, 16 Aug 2015 20:21:34 +0200 Subject: [PATCH 6/6] Router works for POST requests. --- lib/Config/Initializer.php | 7 ++++++ lib/Router/Router.php | 21 +++++++++++------ lib/Router/Settings.php | 2 +- views/settings.html | 46 +++++++++++++++----------------------- 4 files changed, 40 insertions(+), 36 deletions(-) diff --git a/lib/Config/Initializer.php b/lib/Config/Initializer.php index 94acae3ad4..6235aef037 100644 --- a/lib/Config/Initializer.php +++ b/lib/Config/Initializer.php @@ -1,6 +1,7 @@ setupRenderer(); $this->setupLocalizer(); $this->setupMenu(); + $this->setupRouter(); } function setupDB() { @@ -54,4 +56,9 @@ class Initializer { ); $menu->init(); } + + function setupRouter() { + $router = new Router\Router(); + $router->init(); + } } diff --git a/lib/Router/Router.php b/lib/Router/Router.php index e8241603b4..9e01381a84 100644 --- a/lib/Router/Router.php +++ b/lib/Router/Router.php @@ -8,29 +8,36 @@ class Router { } function init() { + add_action( + 'admin_head', + array($this, 'setToken') + ); add_action( 'wp_ajax_mailpoet', array($this, 'setup') ); - $this->setToken(); } function setup() { $this->securityCheck(); - $endpoint = ucfirst($_POST['endpoint']); - $action = $_POST['action']; + $class = ucfirst($_POST['endpoint']); + $endpoint = __NAMESPACE__ . "\\" . $class; + $method = $_POST['method']; $args = $_POST['args']; - $route = new $endpoint(); - $route->$action($args); + $endpoint = new $endpoint(); + $endpoint->$method(json_encode($args)); } function setToken() { $token = wp_create_nonce('mailpoet_token'); - wp_localize_script($token); + $global = '/n"; + echo $global; } function securityCheck() { if (!current_user_can('manage_options')) {die();} - if (!wp_verify_nonce($_POST['token'])) {die();} + if (!wp_verify_nonce($_POST['token'], 'mailpoet_token')) {die();} } } diff --git a/lib/Router/Settings.php b/lib/Router/Settings.php index 98b741a6b0..0b4d27be4b 100644 --- a/lib/Router/Settings.php +++ b/lib/Router/Settings.php @@ -13,6 +13,6 @@ class Settings { 'last_name' => 'Mailer', 'email' => 'john@mailpoet.com' ); - echo json_encode($data); + wp_send_json($params); } } diff --git a/views/settings.html b/views/settings.html index 857d874c4d..e3e1500ea6 100644 --- a/views/settings.html +++ b/views/settings.html @@ -32,34 +32,24 @@

- +}); + <% endblock %>