From 2bc9b942ede75b8db2c4fe47b3e15bb6bdc71d3b Mon Sep 17 00:00:00 2001 From: Toby Zerner Date: Sun, 11 Oct 2015 23:17:51 +1030 Subject: [PATCH] Update for composer branch --- extensions/akismet/.gitignore | 2 + extensions/akismet/bootstrap.php | 8 ++- extensions/akismet/composer.json | 34 +++++++-- extensions/akismet/composer.lock | 57 --------------- extensions/akismet/flarum.json | 26 ------- extensions/akismet/icon.jpg | Bin 0 -> 5510 bytes extensions/akismet/js/.gitignore | 3 - extensions/akismet/js/admin/Gulpfile.js | 2 +- extensions/akismet/js/admin/dist/extension.js | 68 ++++++++++++++++++ .../src/components/AkismetSettingsModal.js | 2 +- extensions/akismet/js/admin/src/main.js | 6 +- extensions/akismet/js/forum/Gulpfile.js | 2 +- extensions/akismet/js/forum/dist/extension.js | 43 +++++++++++ extensions/akismet/js/forum/src/main.js | 2 +- extensions/akismet/locale/en.yml | 2 - extensions/akismet/scripts/compile.sh | 27 +++++++ extensions/akismet/src/Extension.php | 23 ------ .../akismet/src/Listener/AddClientAssets.php | 47 ++++++++++++ .../FilterNewPosts.php} | 42 ++++++++--- .../akismet/src/Listeners/AddClientAssets.php | 52 -------------- 20 files changed, 261 insertions(+), 187 deletions(-) delete mode 100644 extensions/akismet/composer.lock delete mode 100644 extensions/akismet/flarum.json create mode 100644 extensions/akismet/icon.jpg delete mode 100644 extensions/akismet/js/.gitignore create mode 100644 extensions/akismet/js/admin/dist/extension.js create mode 100644 extensions/akismet/js/forum/dist/extension.js delete mode 100644 extensions/akismet/locale/en.yml create mode 100755 extensions/akismet/scripts/compile.sh delete mode 100644 extensions/akismet/src/Extension.php create mode 100644 extensions/akismet/src/Listener/AddClientAssets.php rename extensions/akismet/src/{Listeners/ValidatePost.php => Listener/FilterNewPosts.php} (66%) delete mode 100644 extensions/akismet/src/Listeners/AddClientAssets.php diff --git a/extensions/akismet/.gitignore b/extensions/akismet/.gitignore index a4f3b125e..43eeee7fe 100644 --- a/extensions/akismet/.gitignore +++ b/extensions/akismet/.gitignore @@ -2,3 +2,5 @@ composer.phar .DS_Store Thumbs.db +bower_components +node_modules \ No newline at end of file diff --git a/extensions/akismet/bootstrap.php b/extensions/akismet/bootstrap.php index 763eda504..6759fa119 100644 --- a/extensions/akismet/bootstrap.php +++ b/extensions/akismet/bootstrap.php @@ -9,6 +9,10 @@ * file that was distributed with this source code. */ -require __DIR__.'/vendor/autoload.php'; +use Flarum\Akismet\Listener; +use Illuminate\Contracts\Events\Dispatcher; -return 'Flarum\Akismet\Extension'; +return function (Dispatcher $events) { + $events->subscribe(Listener\AddClientAssets::class); + $events->subscribe(Listener\FilterNewPosts::class); +}; \ No newline at end of file diff --git a/extensions/akismet/composer.json b/extensions/akismet/composer.json index a80d21fab..8fd456725 100644 --- a/extensions/akismet/composer.json +++ b/extensions/akismet/composer.json @@ -1,13 +1,37 @@ { + "name": "flarum/akismet", + "description": "Stop spam using the Akismet anti-spam service.", + "type": "flarum-extension", + "license": "MIT", + "authors": [ + { + "name": "Toby Zerner", + "email": "toby.zerner@gmail.com" + } + ], + "support": { + "issues": "https://github.com/flarum/core/issues", + "source": "https://github.com/flarum/akismet" + }, + "require": { + "flarum/core": "^0.1.0-beta.3", + "flarum/approval": "^0.1.0-beta.3", + "tijsverkoyen/akismet": "^1.1" + }, "autoload": { "psr-4": { "Flarum\\Akismet\\": "src/" } }, - "require": { - "tijsverkoyen/akismet": "^1.1" - }, - "scripts": { - "style": "phpcs --standard=PSR2 -np src" + "extra": { + "flarum-extension": { + "title": "Akismet", + "icon": { + "image": "icon.jpg", + "backgroundSize": "cover", + "backgroundColor": "#5e8e14", + "color": "#fff" + } + } } } diff --git a/extensions/akismet/composer.lock b/extensions/akismet/composer.lock deleted file mode 100644 index c47b9ab9e..000000000 --- a/extensions/akismet/composer.lock +++ /dev/null @@ -1,57 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", - "This file is @generated automatically" - ], - "hash": "f4f26918432f8f6ed40008ffd516708d", - "packages": [ - { - "name": "tijsverkoyen/akismet", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/tijsverkoyen/Akismet.git", - "reference": "0c5185956e11824ed310d134d38d0b2c936f3d3a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/Akismet/zipball/0c5185956e11824ed310d134d38d0b2c936f3d3a", - "reference": "0c5185956e11824ed310d134d38d0b2c936f3d3a", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "php": ">=5.2.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD" - ], - "authors": [ - { - "name": "Tijs Verkoyen", - "email": "akismet@verkoyen.eu", - "role": "Developer" - } - ], - "description": "Akismet is a wrapper-class to communicate with the Akismet API.", - "homepage": "https://github.com/tijsverkoyen/Akismet", - "time": "2012-10-13 17:59:41" - } - ], - "packages-dev": [], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": [], - "platform-dev": [] -} diff --git a/extensions/akismet/flarum.json b/extensions/akismet/flarum.json deleted file mode 100644 index 5489efdac..000000000 --- a/extensions/akismet/flarum.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "akismet", - "title": "Akismet", - "description": "Stop spam using the Akismet anti-spam service.", - "keywords": [], - "version": "0.1.0-beta.2", - "author": { - "name": "Toby Zerner", - "email": "toby@flarum.org", - "homepage": "http://tobyzerner.com" - }, - "license": "MIT", - "require": { - "flarum": ">=0.1.0-beta.2", - "reports": ">=0.1.0-beta.2" - }, - "support": { - "source": "https://github.com/flarum/akismet", - "issues": "https://github.com/flarum/core/issues" - }, - "icon": { - "name": "filter", - "backgroundColor": "#5e8e14", - "color": "#fff" - } -} diff --git a/extensions/akismet/icon.jpg b/extensions/akismet/icon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe675a881ba76a69c309ef2d255c6ec781e8694a GIT binary patch literal 5510 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 SrIWpR%?qYz7|^X{&ioJ69 - + ]; } diff --git a/extensions/akismet/js/admin/src/main.js b/extensions/akismet/js/admin/src/main.js index ed8b1dac9..548fee185 100644 --- a/extensions/akismet/js/admin/src/main.js +++ b/extensions/akismet/js/admin/src/main.js @@ -1,7 +1,7 @@ import app from 'flarum/app'; -import AkismetSettingsModal from 'akismet/components/AkismetSettingsModal'; +import AkismetSettingsModal from 'flarum/akismet/components/AkismetSettingsModal'; -app.initializers.add('akismet', () => { - app.extensionSettings.akismet = () => app.modal.show(new AkismetSettingsModal()); +app.initializers.add('flarum-akismet', () => { + app.extensionSettings['flarum-akismet'] = () => app.modal.show(new AkismetSettingsModal()); }); diff --git a/extensions/akismet/js/forum/Gulpfile.js b/extensions/akismet/js/forum/Gulpfile.js index d67501f07..e171a7ec4 100644 --- a/extensions/akismet/js/forum/Gulpfile.js +++ b/extensions/akismet/js/forum/Gulpfile.js @@ -2,6 +2,6 @@ var gulp = require('flarum-gulp'); gulp({ modules: { - 'akismet': 'src/**/*.js' + 'flarum/akismet': 'src/**/*.js' } }); diff --git a/extensions/akismet/js/forum/dist/extension.js b/extensions/akismet/js/forum/dist/extension.js new file mode 100644 index 000000000..9b60b19d9 --- /dev/null +++ b/extensions/akismet/js/forum/dist/extension.js @@ -0,0 +1,43 @@ +System.register('flarum/akismet/main', ['flarum/extend', 'flarum/app', 'flarum/utils/PostControls', 'flarum/components/CommentPost'], function (_export) { + 'use strict'; + + var extend, override, app, PostControls, CommentPost; + return { + setters: [function (_flarumExtend) { + extend = _flarumExtend.extend; + override = _flarumExtend.override; + }, function (_flarumApp) { + app = _flarumApp['default']; + }, function (_flarumUtilsPostControls) { + PostControls = _flarumUtilsPostControls['default']; + }, function (_flarumComponentsCommentPost) { + CommentPost = _flarumComponentsCommentPost['default']; + }], + execute: function () { + + app.initializers.add('flarum-akismet', function () { + extend(PostControls, 'destructiveControls', function (items, post) { + if (items.approve) { + var flags = post.flags(); + + if (flags && flags.some(function (flag) { + return flag.type() === 'akismet'; + })) { + babelHelpers._extends(items.approve.content.props, { + children: 'Not Spam' + }); + } + } + }); + + override(CommentPost.prototype, 'flagReason', function (original, flag) { + if (flag.type() === 'akismet') { + return 'Akismet flagged as Spam'; + } + + return original(flag); + }); + }, -20); // run after the approval extension + } + }; +}); \ No newline at end of file diff --git a/extensions/akismet/js/forum/src/main.js b/extensions/akismet/js/forum/src/main.js index 8d559d81a..53205a863 100644 --- a/extensions/akismet/js/forum/src/main.js +++ b/extensions/akismet/js/forum/src/main.js @@ -4,7 +4,7 @@ import app from 'flarum/app'; import PostControls from 'flarum/utils/PostControls'; import CommentPost from 'flarum/components/CommentPost'; -app.initializers.add('akismet', () => { +app.initializers.add('flarum-akismet', () => { extend(PostControls, 'destructiveControls', function(items, post) { if (items.approve) { const flags = post.flags(); diff --git a/extensions/akismet/locale/en.yml b/extensions/akismet/locale/en.yml deleted file mode 100644 index 4df16ec26..000000000 --- a/extensions/akismet/locale/en.yml +++ /dev/null @@ -1,2 +0,0 @@ -akismet: - # hello_world: "Hello, world!" diff --git a/extensions/akismet/scripts/compile.sh b/extensions/akismet/scripts/compile.sh new file mode 100755 index 000000000..b0d8e8bd3 --- /dev/null +++ b/extensions/akismet/scripts/compile.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +# This script compiles the extension so that it can be used in a Flarum +# installation. It should be run from the root directory of the extension. + +base=$PWD + +cd "${base}/js" + +if [ -f bower.json ]; then + bower install +fi + +for app in forum admin; do + cd "${base}/js" + + if [ -d $app ]; then + cd $app + + if [ -f bower.json ]; then + bower install + fi + + npm install + gulp --production + fi +done diff --git a/extensions/akismet/src/Extension.php b/extensions/akismet/src/Extension.php deleted file mode 100644 index acb4901f6..000000000 --- a/extensions/akismet/src/Extension.php +++ /dev/null @@ -1,23 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Flarum\Akismet; - -use Flarum\Support\Extension as BaseExtension; -use Illuminate\Events\Dispatcher; - -class Extension extends BaseExtension -{ - public function listen(Dispatcher $events) - { - $events->subscribe('Flarum\Akismet\Listeners\AddClientAssets'); - $events->subscribe('Flarum\Akismet\Listeners\ValidatePost'); - } -} diff --git a/extensions/akismet/src/Listener/AddClientAssets.php b/extensions/akismet/src/Listener/AddClientAssets.php new file mode 100644 index 000000000..c6a48ad92 --- /dev/null +++ b/extensions/akismet/src/Listener/AddClientAssets.php @@ -0,0 +1,47 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Flarum\Akismet\Listener; + +use Flarum\Event\ConfigureClientView; +use Illuminate\Contracts\Events\Dispatcher; + +class AddClientAssets +{ + /** + * @param Dispatcher $events + */ + public function subscribe(Dispatcher $events) + { + $events->listen(ConfigureClientView::class, [$this, 'addAssets']); + } + + /** + * @param ConfigureClientView $event + */ + public function addAssets(ConfigureClientView $event) + { + if ($event->isForum()) { + $event->addAssets([ + __DIR__.'/../../js/forum/dist/extension.js' + ]); + $event->addBootstrapper('flarum/akismet/main'); + $event->addTranslations('flarum-akismet.forum'); + } + + if ($event->isAdmin()) { + $event->addAssets([ + __DIR__ . '/../../js/admin/dist/extension.js' + ]); + $event->addBootstrapper('flarum/akismet/main'); + $event->addTranslations('flarum-akismet.admin'); + } + } +} diff --git a/extensions/akismet/src/Listeners/ValidatePost.php b/extensions/akismet/src/Listener/FilterNewPosts.php similarity index 66% rename from extensions/akismet/src/Listeners/ValidatePost.php rename to extensions/akismet/src/Listener/FilterNewPosts.php index 1b70d6a31..055be379e 100644 --- a/extensions/akismet/src/Listeners/ValidatePost.php +++ b/extensions/akismet/src/Listener/FilterNewPosts.php @@ -8,32 +8,51 @@ * file that was distributed with this source code. */ -namespace Flarum\Akismet\Listeners; +namespace Flarum\Akismet\Listener; -use Flarum\Events\PostWillBeSaved; +use Flarum\Approval\Event\PostWasApproved; +use Flarum\Core; +use Flarum\Event\PostWillBeSaved; +use Flarum\Flags\Flag; +use Flarum\Foundation\Application; +use Flarum\Settings\SettingsRepository; use Illuminate\Contracts\Events\Dispatcher; use TijsVerkoyen\Akismet\Akismet; -use Flarum\Core; -use Flarum\Core\Posts\CommentPost; -use Flarum\Core\Settings\SettingsRepository; -use Flarum\Flags\Flag; -use Flarum\Approval\Events\PostWasApproved; -class ValidatePost +class FilterNewPosts { + /** + * @var SettingsRepository + */ protected $settings; - public function __construct(SettingsRepository $settings) + /** + * @var Application + */ + protected $app; + + /** + * @param SettingsRepository $settings + * @param Application $app + */ + public function __construct(SettingsRepository $settings, Application $app) { $this->settings = $settings; + $this->app = $app; } + /** + * @param Dispatcher $events + */ public function subscribe(Dispatcher $events) { $events->listen(PostWillBeSaved::class, [$this, 'validatePost']); $events->listen(PostWasApproved::class, [$this, 'submitHam']); } + /** + * @param PostWillBeSaved $event + */ public function validatePost(PostWillBeSaved $event) { $post = $event->post; @@ -42,7 +61,7 @@ class ValidatePost return; } - $akismet = new Akismet($this->settings->get('akismet.api_key'), Core::url()); + $akismet = new Akismet($this->settings->get('flarum-akismet.api_key'), $this->app->url()); $isSpam = $akismet->isSpam( $post->content, @@ -70,6 +89,9 @@ class ValidatePost } } + /** + * @param PostWasApproved $event + */ public function submitHam(PostWasApproved $event) { // TODO diff --git a/extensions/akismet/src/Listeners/AddClientAssets.php b/extensions/akismet/src/Listeners/AddClientAssets.php deleted file mode 100644 index 854d60c77..000000000 --- a/extensions/akismet/src/Listeners/AddClientAssets.php +++ /dev/null @@ -1,52 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Flarum\Akismet\Listeners; - -use Flarum\Events\RegisterLocales; -use Flarum\Events\BuildClientView; -use Illuminate\Contracts\Events\Dispatcher; - -class AddClientAssets -{ - public function subscribe(Dispatcher $events) - { - $events->listen(RegisterLocales::class, [$this, 'addLocale']); - $events->listen(BuildClientView::class, [$this, 'addAssets']); - } - - public function addLocale(RegisterLocales $event) - { - $event->addTranslations('en', __DIR__.'/../../locale/en.yml'); - } - - public function addAssets(BuildClientView $event) - { - $event->forumAssets([ - __DIR__.'/../../js/forum/dist/extension.js' - ]); - - $event->forumBootstrapper('akismet/main'); - - $event->forumTranslations([ - // 'akismet.hello_world' - ]); - - $event->adminAssets([ - __DIR__.'/../../js/admin/dist/extension.js' - ]); - - $event->adminBootstrapper('akismet/main'); - - $event->adminTranslations([ - // 'akismet.hello_world' - ]); - } -}