groups/groups.install

436 lines
11 KiB
Plaintext

<?php
/**
* @file
* Install, update and uninstall functions for the Groups install profile.
*/
/**
* Implements hook_requirements().
* Set minimum 'max_execution_time' requirement
*/
function groups_requirements($phase) {
$requirements = array();
// Ensure translations don't break during installation.
$t = get_t();
if($phase == 'install') {
// Test PHP minimum execution time
$requirements['php_max_execution_time'] = array(
'title' => $t('PHP Max Execution Time'),
'value' => ini_get('max_execution_time'),
);
$max_execution_time = (int)ini_get('max_execution_time');
// Don't set the error when max_execution_time is 0 (Infinite).
if ($max_execution_time && $max_execution_time < DRUPAL_MINIMUM_MAX_EXECUTION_TIME) {
$requirements['php_max_execution_time']['description'] = $t('Your PHP execution time is too low, please set it greater than or equal to %time seconds.', array('%time' => DRUPAL_MINIMUM_MAX_EXECUTION_TIME));
$requirements['php_max_execution_time']['severity'] = REQUIREMENT_ERROR;
}
}
return $requirements;
}
/**
* Implements hook_install().
*
* Perform actions to set up the site for this profile.
*
* @see system_install()
*/
function groups_install() {
// Enable the openstack_bootstrap theme and set it as the default.
theme_enable(array('adaptivetheme', 'adaptivetheme_admin', 'openstack', 'openstack_bootstrap'));
// The Bartik theme is automatically enabled during installation. Disable it.
db_update('system')
->fields(array('status' => 0))
->condition('type', 'theme')
->condition('name', 'bartik')
->execute();
// Set the default and administration themes.
variable_set('theme_default', 'openstack_bootstrap');
// Set a default administrative theme:
variable_set('admin_theme', 'adaptivetheme_admin');
variable_set('node_admin_theme', FALSE);
// Do not use the administration theme when editing or creating content.
variable_set('node_admin_theme', '0');
// Set a default user avatar.
groups_set_default_avatar();
// Create openstack.org menu item
$item = array(
'link_title' => st('OpenStack.org'),
'link_path' => 'http://openstack.org',
'menu_name' => 'main-menu',
'weight' => -5,
);
menu_link_save($item);
_groups_enable_default_languages();
_groups_add_language_selector_block();
// Create a default role for site administrators, with all available permissions assigned.
// $admin_role = new stdClass();
// $admin_role->name = 'administrator';
// $admin_role->weight = 2;
// user_role_save($admin_role);
// Set this as the administrator role.
variable_set('user_admin_role', $admin_role->rid);
// disable automatic cron run
variable_set('cron_safe_threshold', 0);
variable_set('elysia_cron_disabled', true);
// Assign user 1 the "administrator" role.
// db_insert('users_roles')
// ->fields(array('uid' => 1, 'rid' => $admin_role->rid))
// ->execute();
// AdaptiveTheme requires that the system theme settings form
// be submitted in order for its themes' settings to be properly set
// and the resulting css files generated.
// For more background, see http://drupal.org/node/1776730.
module_load_include('inc', 'system', 'system.admin');
foreach (array('adaptivetheme') as $theme_name) {
$form_state = form_state_defaults();
$form_state['build_info']['args'][0] = $theme_name;
$form_state['values'] = array();
drupal_form_submit('system_theme_settings', $form_state);
}
// add markdown filter format
_groups_add_markdown_filter();
}
/**
* Add language selector block to header region.
*
* @see groups_install()
*/
function _groups_add_language_selector_block() {
$block = array(
'module' => 'locale',
'delta' => 'language',
'theme' => 'openstack_bootstrap',
'visibility' => 0,
'region' => 'header',
'status' => 1,
'pages' => '',
'weight' => 2,
'title' => '<none>',
);
drupal_write_record('block', $block);
}
/**
* Enable default languages.
*/
function _groups_enable_default_languages() {
include_once DRUPAL_ROOT . '/includes/locale.inc';
include_once DRUPAL_ROOT . '/includes/iso.inc';
$default_languages = variable_get('groups_default_languages', 'hu,es,de,ru,zh-hans,ja,fi');
$languages = explode(',', $default_languages);
foreach ($languages as $langcode) {
locale_add_language($langcode);
}
}
/**
* Enable markdown module if it is not already enabled.
*/
function groups_update_7100() {
module_enable(array('markdown'));
if (!module_exists('markdown')) {
throw new DrupalUpdateException('The <a href="https://drupal.org/project/markdown">Markdown module</a> must be downloaded and available for groups updates to proceed.');
}
_groups_add_markdown_filter();
}
/**
* Enable feeds_jsonpath_parser module if it is not already enabled.
*/
function groups_update_7101() {
module_enable(array('feeds_jsonpath_parser'));
}
/**
* Enable groups_events_pages module if it is not already enabled.
*/
function groups_update_7102() {
module_enable(array('groups_events_pages'));
}
/**
* Enable commons_wikis module to fix missing og_group_ref
* fields from group contents.
*/
function groups_update_7103() {
if (!module_exists('commons_wikis')) {
module_enable(array('commons_wikis'));
drupal_flush_all_caches();
}
}
/**
* Switch default theme to "openstack_bootstrap"
*/
function groups_update_7105() {
theme_enable(array('openstack_bootstrap'));
variable_set('theme_default', 'openstack_bootstrap');
}
/**
* Enable groups_pages module.
*/
function groups_update_7104() {
if (!module_exists('groups_pages')) {
module_enable(array('groups_pages'));
drupal_flush_all_caches();
}
}
/**
* Fix groups update order issue.
* groups_pages module must be enabled after update #7105.
*/
function groups_update_7106() {
groups_update_7104();
}
/**
* Enable groups_events module.
*/
function groups_update_7107() {
if (!module_exists('groups_events')) {
module_enable(array('groups_events'));
drupal_flush_all_caches();
}
}
/**
* Enable groups_oauth2 modules.
*/
function groups_update_7108() {
if ((!module_exists('groups_oauth2')) && (!module_exists('groups_oauth2_picture'))) {
module_enable(array('groups_oauth2', 'groups_oauth2_picture'));
drupal_flush_all_caches();
}
}
/**
* Enable groups_comment module.
*/
function groups_update_7109() {
if ((!module_exists('groups_comment')) && (!module_exists('groups_comment'))) {
module_enable(array('groups_comment'));
drupal_flush_all_caches();
}
}
/**
* Disable commons_wiki module.
*/
function groups_update_7110() {
if (module_exists('commons_wiki')) {
module_disable(array('groups_comment'));
drupal_flush_all_caches();
}
}
/**
* Re-enable commons_wikis and enable groups_wikis module.
*/
function groups_update_7111() {
if (!module_exists('commons_wikis')) {
module_enable(array('commons_wikis'));
}
if (!module_exists('groups_wikis')) {
module_enable(array('groups_wikis'));
}
drupal_flush_all_caches();
}
/**
* Enable smtp module.
*/
function groups_update_7112() {
if (!module_exists('smtp')) {
module_enable(array('smtp'));
drupal_flush_all_caches();
}
}
/**
* Add language selector as a block and enable locale, l10n_update modules.
*/
function groups_update_7113() {
drupal_uninstall_schema('locale');
drupal_flush_all_caches();
module_enable(array('locale', 'l10n_update'));
module_disable(array('groups_language_switcher'));
_groups_add_language_selector_block();
_groups_enable_default_languages();
_groups_set_language_negotiation();
}
/**
* Enable elysia_cron module.
*/
function groups_update_7114() {
if (!module_exists('elysia_cron')) {
module_enable(array('elysia_cron'));
}
// remove job_scheduler's jobs
db_delete('job_schedule')->execute();
// disable automatic cron run
variable_set('cron_safe_threshold', 0);
variable_set('elysia_cron_disabled', true);
drupal_flush_all_caches();
}
/**
* Enable groups_reports module.
*/
function groups_update_7115() {
if (!module_exists('groups_reports')) {
module_enable(array('groups_reports'));
}
drupal_flush_all_caches();
}
/**
* Enable chartjs module.
*/
function groups_update_7116() {
if (!module_exists('chartjs')) {
module_enable(array('chartjs'));
}
drupal_flush_all_caches();
}
/**
* Enable groups ambassador modules.
*/
function groups_update_7117() {
if (!module_exists('groups_ambassador')) {
module_enable(array('groups_ambassador'));
}
if (!module_exists('groups_ambassador_pages')) {
module_enable(array('groups_ambassador_pages'));
}
drupal_flush_all_caches();
}
/**
* Enable groups social link module.
*/
function groups_update_7118() {
if (!module_exists('groups_social_link')) {
module_enable(array('groups_social_link'));
}
drupal_flush_all_caches();
}
/**
* Enable groups user profile module.
*/
function groups_update_7119() {
if (!module_exists('groups_user_profile')) {
module_enable(array('groups_user_profile'));
}
drupal_flush_all_caches();
}
/**
* Enable groups messages and privatemsg_notify_sender contrib module.
*/
function groups_update_7120() {
if (!module_exists('groups_messages')) {
module_enable(array('groups_messages'));
}
if (!module_exists('privatemsg_notify_sender')) {
module_enable(array('privatemsg_notify_sender'));
}
drupal_flush_all_caches();
}
/**
* Disable leaflet_more_maps module.
*
* The site no longer depends on this module, disabled now, so the entire
* module should be removed in a later version.
*/
function groups_update_7121() {
if (module_exists('leaflet_more_maps')) {
module_disable(array('leaflet_more_maps'));
drupal_flush_all_caches();
}
}
/**
* Enable tzfield module related to https://review.openstack.org/#/c/341385/
*/
function groups_update_7122() {
if (!module_exists('tzfield')) {
module_enable(array('tzfield'));
}
drupal_flush_all_caches();
}
/**
* Set language negotiation to URL based.
*/
function _groups_set_language_negotiation() {
require_once DRUPAL_ROOT . '/includes/language.inc';
require_once DRUPAL_ROOT . '/includes/locale.inc';
$negotiation = array(
LOCALE_LANGUAGE_NEGOTIATION_URL => 2,
LANGUAGE_NEGOTIATION_DEFAULT => 10,
);
language_negotiation_set(LANGUAGE_TYPE_INTERFACE, $negotiation);
}
/**
* Add markdown filter with permissions.
*/
function _groups_add_markdown_filter() {
// add markdown format filter
$markdown_format = array(
'format' => 'markdown',
'name' => 'Markdown',
'weight' => 1,
'filters' => array(
// Markdown filter.
'filter_markdown' => array(
'weight' => 0,
'status' => 1,
'settings' => array(),
),
// URL filter.
'filter_url' => array(
'weight' => 0,
'status' => 1,
),
),
);
$markdown_format = (object) $markdown_format;
filter_format_save($markdown_format);
// assign default permissions to filter
if ($roles = user_roles(FALSE)) {
$permissions = array('use text format markdown');
foreach ($roles as $rid => $name) {
$module = 'filter';
foreach ($permissions as $name) {
db_merge('role_permission')->key(array(
'rid' => $rid,
'permission' => $name,
))->fields(array(
'module' => $module,
))->execute();
}
}
}
}