-
Notifications
You must be signed in to change notification settings - Fork 0
/
pwa_push.module
125 lines (112 loc) · 3.97 KB
/
pwa_push.module
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?php
/**
* @file
* Contains pwa_push.module.
*/
use Drupal\Core\Form\FormStateInterface;
use Drupal\pwa_push\Model\SubscriptionsDatastorage;
use Drupal\Component\Serialization\Json;
use Drupal\Core\Url;
/**
* Implements hook_page_attachments().
*/
function pwa_push_page_attachments(array &$page) {
$public_key = \Drupal::config('pwa_push.pwa_push')->get('public_key');
$status_all = \Drupal::config('pwa_push.settings')->get('status.all');
$page['#attached']['drupalSettings']['pwa_push']['public_key'] = $public_key;
$page['#attached']['drupalSettings']['pwa_push']['status_all'] = $status_all;
if (isset($public_key)) {
$page['#attached']['library'][] = 'pwa_push/pwa_push';
}
}
/**
* Implements hook_form_entity_type_alter().
*/
function pwa_push_form_node_form_alter(&$form, FormStateInterface $form_state) {
$node = $form_state->getFormObject()->getEntity();
$nid = $node->id();
if (!($node->load($nid))) {
foreach (array_keys($form['actions']) as $action) {
if ($action != 'preview' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] === 'submit') {
$form['actions'][$action]['#submit'][] = 'pwa_push_node_form_submit';
}
}
}
}
/**
* Submit handler.
*/
function pwa_push_node_form_submit($form, FormStateInterface $form_state) {
$node = $form_state->getFormObject()->getEntity();
$config = \Drupal::config('pwa_push.pwa_push.subscription');
$publish_notify = $config->get('activate_feature');
$nodeIsPublished = $node->isPublished();
$enabled_content_types = $config->get('enabled_content_types');
$node_type = $form_state->getFormObject()->getEntity()->getType();
foreach ($enabled_content_types as $types) {
if ($types == $node_type) {
$send_notifications = 1;
}
}
if (!empty($nodeIsPublished) && !empty($send_notifications) && !empty($publish_notify)) {
$pwa_push_config = \Drupal::config('pwa_push.pwa_push');
$icon = $pwa_push_config->get('icon_path');
$icon_path = file_create_url($icon);
// Get url.
$ifSendUrl = $config->get('url_to_content');
$options = ['absolute' => TRUE];
$url = Url::fromRoute('entity.node.canonical', ['node' => $node->id()], $options);
$url = $url->toString();
$url = $ifSendUrl ? $url : "";
// Get title and message.
$ifSendNodeData = $config->get('insert_node_data');
if ($ifSendNodeData) {
$title = $node->get('title')->value;
$message = $node->get('body')->summary;
}
else {
$title = "New '$node_type' content is published. Click to view.";
$message = "";
}
// Get image.
$image_path = "";
$ifSendImage = $config->get('send_image');
if ($ifSendImage) {
$imageEntity = $node->get('field_image')->entity;
if (!empty($imageEntity)) {
$uri = $imageEntity->getFileUri();
$image_path = Url::fromUri(file_create_url($uri));
}
else {
\Drupal::logger('PWA Push')
->error("Image missing or not saved. Its not will be send.");
}
}
$entry = [
'title' => $title,
'message' => $message,
'icon' => $icon_path,
'image' => $image_path,
'url' => $url,
'content-details' => [
'nodeid' => $node->id(),
'nodetype' => $node_type,
],
];
$notification_data = Json::encode($entry);
// Add item to query.
$subscriptions = SubscriptionsDatastorage::loadAll();
$pwa_push_public_key = $pwa_push_config->get('public_key');
$pwa_push_private_key = $pwa_push_config->get('private_key');
if (!empty($subscriptions) && !empty($pwa_push_public_key) && !empty($pwa_push_private_key)) {
/** @var QueueFactory $queue_factory */
$queue_factory = \Drupal::service('queue');
/** @var QueueInterface $queue */
$queue = $queue_factory->get('cron_send_notification');
$item = new \stdClass();
$item->subscriptions = $subscriptions;
$item->notification_data = $notification_data;
$queue->createItem($item);
}
}
}