-
Notifications
You must be signed in to change notification settings - Fork 0
/
survey_manager.module
84 lines (76 loc) · 2.33 KB
/
survey_manager.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
<?php
/**
* @file
* Contains survey_manager.module.
*/
use Drupal\block\Entity\Block;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
/**
* Implements hook_help().
*/
function survey_manager_help($route_name, RouteMatchInterface $route_match) {
if ($route_name === 'help.page.survey_manager') {
$output = '<p>' . t('Manage third-party surveys.') . '</p>';
return $output;
}
}
/**
* Implements hook_page_bottom().
*/
function survey_manager_page_bottom(array &$page_bottom) {
// Get embedable suryves.
$surveys = _survey_manager_get_surveys('survey-embed');
foreach ($surveys as $block) {
// Check this answer http://drupal.stackexchange.com/a/185691/23477.
if ($block->access('view')) {
$page_bottom['survey_manager'][] = [
'#markup' => $block->get('settings')['embed_code'],
'#allowed_tags' => ['script'],
];
}
}
}
/**
* Get list of survey blocks by type.
*
* @return array
* Array of survey blocks.
*/
function _survey_manager_get_surveys($survey_plugin_id) {
$query = \Drupal::entityQuery('block')->condition('plugin', $survey_plugin_id);
return Block::loadMultiple($query->execute());
}
/**
* Implements hook_form_alter().
*/
function survey_manager_form_alter(&$form, FormStateInterface $form_state, $form_id) {
switch ($form_id) {
case 'block_form':
if ($form['settings']['#attributes']['class'][0] == 'block-survey-form') {
$form['actions']['submit']['#submit'][] = 'survey_manager_block_submit_callback';
}
break;
case 'block_admin_display_form':
foreach ($form['blocks'] as $key => $block) {
if (!empty($block['operations']['#links']['edit']['url'])) {
$block_plugin_id = $block['operations']['#links']['edit']['url']->getOptions()['entity']->getPluginId();
if ($block_plugin_id == 'survey_embed_code_block') {
unset($form['blocks'][$key]);
}
}
}
break;
}
}
/**
* Custom block submit callback.
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
* Redirects to the survey list page.
*/
function survey_manager_block_submit_callback() {
$response = new RedirectResponse(\Drupal::url('survey_manager.survey_list_controller_index'));
return $response->send();
}