Skip to content

Commit

Permalink
Add setting to automatically follow after reply. closes flarum/framew…
Browse files Browse the repository at this point in the history
  • Loading branch information
petermein authored and tobyzerner committed Mar 7, 2016
1 parent e9739e9 commit 98276f9
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 2 deletions.
1 change: 1 addition & 0 deletions bootstrap.php
Expand Up @@ -19,6 +19,7 @@
$events->subscribe(Listener\FilterDiscussionListBySubscription::class);
$events->subscribe(Listener\SaveSubscriptionToDatabase::class);
$events->subscribe(Listener\SendNotificationWhenReplyIsPosted::class);
$events->subscribe(Listener\FollowAfterReply::class);

$views->addNamespace('flarum-subscriptions', __DIR__.'/views');
};
36 changes: 34 additions & 2 deletions js/forum/dist/extension.js
Expand Up @@ -372,10 +372,10 @@ System.register('flarum/subscriptions/components/SubscriptionMenuItem', ['flarum
}
};
});;
System.register('flarum/subscriptions/main', ['flarum/extend', 'flarum/app', 'flarum/Model', 'flarum/models/Discussion', 'flarum/components/NotificationGrid', 'flarum/subscriptions/addSubscriptionBadge', 'flarum/subscriptions/addSubscriptionControls', 'flarum/subscriptions/addSubscriptionFilter', 'flarum/subscriptions/components/NewPostNotification'], function (_export) {
System.register('flarum/subscriptions/main', ['flarum/extend', 'flarum/app', 'flarum/Model', 'flarum/models/Discussion', 'flarum/components/NotificationGrid', 'flarum/subscriptions/addSubscriptionBadge', 'flarum/subscriptions/addSubscriptionControls', 'flarum/subscriptions/addSubscriptionFilter', 'flarum/subscriptions/addSubscriptionSettings', 'flarum/subscriptions/components/NewPostNotification'], function (_export) {
'use strict';

var extend, app, Model, Discussion, NotificationGrid, addSubscriptionBadge, addSubscriptionControls, addSubscriptionFilter, NewPostNotification;
var extend, app, Model, Discussion, NotificationGrid, addSubscriptionBadge, addSubscriptionControls, addSubscriptionFilter, addSubscriptionSettings, NewPostNotification;
return {
setters: [function (_flarumExtend) {
extend = _flarumExtend.extend;
Expand All @@ -393,6 +393,8 @@ System.register('flarum/subscriptions/main', ['flarum/extend', 'flarum/app', 'fl
addSubscriptionControls = _flarumSubscriptionsAddSubscriptionControls['default'];
}, function (_flarumSubscriptionsAddSubscriptionFilter) {
addSubscriptionFilter = _flarumSubscriptionsAddSubscriptionFilter['default'];
}, function (_flarumSubscriptionsAddSubscriptionSettings) {
addSubscriptionSettings = _flarumSubscriptionsAddSubscriptionSettings['default'];
}, function (_flarumSubscriptionsComponentsNewPostNotification) {
NewPostNotification = _flarumSubscriptionsComponentsNewPostNotification['default'];
}],
Expand All @@ -406,6 +408,7 @@ System.register('flarum/subscriptions/main', ['flarum/extend', 'flarum/app', 'fl
addSubscriptionBadge();
addSubscriptionControls();
addSubscriptionFilter();
addSubscriptionSettings();

extend(NotificationGrid.prototype, 'notificationTypes', function (items) {
items.add('newPost', {
Expand All @@ -417,4 +420,33 @@ System.register('flarum/subscriptions/main', ['flarum/extend', 'flarum/app', 'fl
});
}
};
});;
System.register('flarum/subscriptions/addSubscriptionSettings', ['flarum/extend', 'flarum/components/SettingsPage', 'flarum/components/FieldSet', 'flarum/components/Switch', 'flarum/utils/ItemList'], function (_export) {
'use strict';

var extend, SettingsPage, FieldSet, Switch, ItemList;
return {
setters: [function (_flarumExtend) {
extend = _flarumExtend.extend;
}, function (_flarumComponentsSettingsPage) {
SettingsPage = _flarumComponentsSettingsPage['default'];
}, function (_flarumComponentsFieldSet) {
FieldSet = _flarumComponentsFieldSet['default'];
}, function (_flarumComponentsSwitch) {
Switch = _flarumComponentsSwitch['default'];
}, function (_flarumUtilsItemList) {
ItemList = _flarumUtilsItemList['default'];
}],
execute: function () {
_export('default', function () {
extend(SettingsPage.prototype, 'notificationsItems', function (items) {
items.add('followAfterReply', Switch.component({
children: app.translator.trans('flarum-subscriptions.forum.settings.forum_follow_after_reply_label'),
state: this.user.preferences().followAfterReply,
onchange: this.preferenceSaver('followAfterReply')
}));
});
});
}
};
});
17 changes: 17 additions & 0 deletions js/forum/src/addSubscriptionSettings.js
@@ -0,0 +1,17 @@
import { extend } from 'flarum/extend';
import SettingsPage from 'flarum/components/SettingsPage';
import FieldSet from 'flarum/components/FieldSet';
import Switch from 'flarum/components/Switch';
import ItemList from 'flarum/utils/ItemList';

export default function() {
extend(SettingsPage.prototype, 'notificationsItems', function(items) {
items.add('followAfterReply',
Switch.component({
children: app.translator.trans('flarum-subscriptions.forum.settings.forum_follow_after_reply_label'),
state: this.user.preferences().followAfterReply,
onchange: this.preferenceSaver('followAfterReply')
})
);
});
}
3 changes: 3 additions & 0 deletions js/forum/src/main.js
Expand Up @@ -7,6 +7,8 @@ import NotificationGrid from 'flarum/components/NotificationGrid';
import addSubscriptionBadge from 'flarum/subscriptions/addSubscriptionBadge';
import addSubscriptionControls from 'flarum/subscriptions/addSubscriptionControls';
import addSubscriptionFilter from 'flarum/subscriptions/addSubscriptionFilter';
import addSubscriptionSettings from 'flarum/subscriptions/addSubscriptionSettings';

import NewPostNotification from 'flarum/subscriptions/components/NewPostNotification';

app.initializers.add('subscriptions', function() {
Expand All @@ -17,6 +19,7 @@ app.initializers.add('subscriptions', function() {
addSubscriptionBadge();
addSubscriptionControls();
addSubscriptionFilter();
addSubscriptionSettings();

extend(NotificationGrid.prototype, 'notificationTypes', function(items) {
items.add('newPost', {
Expand Down
55 changes: 55 additions & 0 deletions src/Listener/FollowAfterReply.php
@@ -0,0 +1,55 @@
<?php
/*
* This file is part of Flarum.
*
* (c) Toby Zerner <toby.zerner@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Flarum\Subscriptions\Listener;

use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Event\ConfigureUserPreferences;
use Flarum\Event\PostWasPosted;
use Illuminate\Contracts\Events\Dispatcher;

class FollowAfterReply
{
use AssertPermissionTrait;

/**
* @param Dispatcher $events
*/
public function subscribe(Dispatcher $events)
{
$events->listen(ConfigureUserPreferences::class, [$this, 'addUserPreference']);
$events->listen(PostWasPosted::class, [$this, 'whenPostWasPosted']);
}

/**
* @param ConfigureUserPreferences $event
*/
public function addUserPreference(ConfigureUserPreferences $event)
{
$event->add('followAfterReply', 'boolval', false);
}

/**
* @param PostWasPosted $event
*/
public function whenPostWasPosted(PostWasPosted $event)
{
$actor = $event->actor;

if ($actor && $actor->exists && $actor->getPreference('followAfterReply')) {
$this->assertRegistered($actor);

$state = $event->post->discussion->stateFor($actor);

$state->subscription = 'follow';
$state->save();
}
}
}

0 comments on commit 98276f9

Please sign in to comment.