push_notification_plugin.rb
2.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
class PushNotificationPlugin < Noosfero::Plugin
include Noosfero::Plugin::HotSpot
include PushNotificationPlugin::Observers
def self.plugin_name
I18n.t("push_notification_plugin.lib.plugin.name")
end
def self.subscribe environment, notification, klass
return nil unless PushNotificationPlugin::NotificationSettings::NOTIFICATIONS.keys.include?(notification)
return nil unless klass.name.constantize.respond_to?("push_notification_#{notification}_additional_users".to_sym)
notification_subscription = PushNotificationPlugin::NotificationSubscription.where(:notification => notification).first
notification_subscription ||= PushNotificationPlugin::NotificationSubscription.new({:notification => notification,
:environment => environment, :subscribers => [klass.name]})
notification_subscription.subscribers |= [klass.name]
notification_subscription.save
end
def self.unsubscribe environment, notification, klass
return nil unless PushNotificationPlugin::NotificationSettings::NOTIFICATIONS.keys.include?(notification)
notification_subscription = PushNotificationPlugin::NotificationSubscription.where(:notification => notification, :environment => environment).first
unless notification_subscription.blank?
if notification_subscription.subscribers.include?(klass.name)
notification_subscription.subscribers -= [klass.name]
return notification_subscription.save
end
end
return false
end
def self.subscribers environment, notification
return nil unless PushNotificationPlugin::NotificationSettings::NOTIFICATIONS.keys.include?(notification)
notification_subscription = PushNotificationPlugin::NotificationSubscription.where(:notification => notification, :environment => environment)
return [] if notification_subscription.blank?
notification_subscription.first.subscribers.map{|s| s.constantize}
end
def self.api_mount_points
[PushNotificationPlugin::API]
end
def self.plugin_description
I18n.t("push_notification_plugin.lib.plugin.description")
end
def stylesheet?
true
end
def control_panel_buttons
if context.profile.person?
{
title: I18n.t("push_notification_plugin.lib.plugin.panel_button"),
icon: 'push-notifications',
url: {controller: 'push_notification_plugin_myprofile', action: 'index'}
}
end
end
end