-
Notifications
You must be signed in to change notification settings - Fork 0
/
social_geolocation.install
109 lines (93 loc) · 3.15 KB
/
social_geolocation.install
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
<?php
/**
* @file
* Install, update and uninstall functions for the social_geolocation module.
*/
use Drupal\user\Entity\Role;
use Drupal\search_api\Entity\Index;
use Drupal\user\Entity\User;
/**
* Implements hook_install().
*/
function social_geolocation_install() {
$indexes = [
'social_users',
'social_groups',
'social_content',
'social_all',
];
// Disable indexes on install. This is because we first need to install
// our dependencies. Otherwise config override will destroy search api.
// Also see social_tagging.install.
foreach ($indexes as $key => $index) {
/* @var Drupal\search_api\Entity\Index $index */
$index = Index::load($index);
if (!$index instanceof Index) {
\Drupal::logger('social_geolocation')->info('Invalid search index');
return;
}
\Drupal::logger('social_geolocation')->info('Loaded search index');
// If currently enabled we will first disabled and enable the index.
if ($index !== NULL && $index->status()) {
\Drupal::logger('social_geolocation')->info('Search index exists');
// Elevate permissions so we can index *all* the items.
$accountSwitcher = Drupal::service('account_switcher');
$account = User::load(1);
$accountSwitcher->switchTo($account);
// Disable and enable the index so the social_geolocation field is
// properly added.
$index->disable()->save();
\Drupal::logger('social_geolocation')->info('Search index disabled');
$index->enable()->save();
\Drupal::logger('social_geolocation')->info('Search index enabled');
// Restore user account.
$accountSwitcher->switchBack();
}
}
// Enable permissions.
_social_geolocation_set_permissions();
// Make sure for new installations we choose the free OSM version.
\Drupal::service('config.factory')->getEditable('social_geolocation.settings')
->set('geolocation_provider', 'openstreetmaps')->save();
// Update the correct provider.
\Drupal::service('config.factory')->getEditable('geocoder.settings')
->set('plugins_options', [
'nominatim' => [
'rooturl' => 'https://nominatim.openstreetmap.org/search/',
'locale' => '',
],
])->save();
}
/**
* This hook won't do anything and is needed only to make sure next one is 8003.
*/
function social_geolocation_update_8002(&$sandbox) {
}
/**
* This hook won't do anything and is needed only to make sure next one is 8003.
*/
function social_geolocation_update_8003(&$sandbox) {
// Update the correct provider.
\Drupal::service('config.factory')->getEditable('geocoder.settings')
->set('plugins_options', [
'nominatim' => [
'rooturl' => 'https://nominatim.openstreetmap.org/search/',
'locale' => '',
],
])->save();
}
/**
* Function to set default permissions.
*/
function _social_geolocation_set_permissions() {
$roles = Role::loadMultiple();
/** @var \Drupal\user\Entity\Role $role */
foreach ($roles as $role) {
if ($role->id() === 'administrator') {
continue;
}
if ($role->id() === 'sitemanager') {
user_role_grant_permissions('sitemanager', ['set social geolocation settings']);
}
}
}