View source
<?php
define('DRUPAL_COMMONS_EDITOR', 'ckeditor');
define('DRUPAL_COMMONS_DEFAULT_THEME', 'commons_origins');
function drupal_commons_profile_modules() {
$modules = array(
'color',
'comment',
'help',
'menu',
'taxonomy',
'dblog',
'profile',
'search',
'tracker',
'php',
'path',
'contact',
'ctools',
'context',
'date_api',
'date_timezone',
'vertical_tabs',
'transliteration',
'password_policy',
'strongarm',
'features',
);
return $modules;
}
function drupal_commons_profile_details() {
$logo = '<a href="http://drupal.org/project/commons" target="_blank"><img alt="Commons" title="Commons" src="./profiles/drupal_commons/images/logo.png"></img></a>';
$description = st('Select this profile to install the Commons distribution for powering your community website. Commons provides provides blogging, discussions, user profiles, and other useful community features for both private communities (e.g. an Intranet), or public communities (e.g. a customer community).');
$description .= '<br/>' . $logo;
return array(
'name' => 'Commons',
'description' => $description,
);
}
function drupal_commons_profile_task_list() {
$tasks = array();
$tasks['configure-features'] = st('Select features');
$tasks['configure-theme'] = st('Select theme');
$tasks['install-commons'] = st('Install Commons');
return $tasks;
}
function drupal_commons_profile_tasks(&$task, $url) {
if ($task == 'profile') {
$task = 'configure-features';
}
if (defined('DRUSH_BASE_PATH')) {
drupal_commons_include('drush');
_drupal_commons_drush_tasks($task);
}
if ($task == 'configure-features') {
drupal_commons_include('form');
$output = drupal_get_form('drupal_commons_features_form', $url);
}
if ($task == 'configure-theme') {
drupal_commons_include('form');
$output = drupal_get_form('drupal_commons_theme_form', $url);
}
if ($task == 'install-commons') {
$operations = array();
$operations[] = array(
'drupal_commons_build_directories',
array(),
);
$operations[] = array(
'drupal_commons_config_taxonomy',
array(),
);
$features = variable_get('commons_selected_features', array());
if (in_array('acquia_network_subscription', $features)) {
unset($features['feature-acquia_network_subscription']);
drupal_install_modules(array(
'acquia_agent',
'acquia_spi',
));
}
foreach ($features as $feature) {
$operations[] = array(
'features_install_modules',
array(
array(
$feature,
),
),
);
}
$operations[] = array(
'drupal_commons_config_filter',
array(),
);
$operations[] = array(
'drupal_commons_config_password',
array(),
);
$operations[] = array(
'drupal_commons_config_wysiwyg',
array(),
);
$operations[] = array(
'drupal_commons_config_ur',
array(),
);
$operations[] = array(
'drupal_commons_config_views',
array(),
);
$operations[] = array(
'drupal_commons_config_images',
array(),
);
$operations[] = array(
'drupal_commons_config_vars',
array(),
);
$operations[] = array(
'drupal_commons_config_tidy_node_links',
array(),
);
$batch = array(
'operations' => $operations,
'title' => st('Configuring Commons'),
'error_message' => st('An error occurred. Please try reinstalling again.'),
'finished' => 'drupal_commons_cleanup',
);
variable_set('install_task', 'install-commons-batch');
batch_set($batch);
batch_process($url, $url);
}
if ($task == 'install-commons-batch') {
include_once 'includes/batch.inc';
$output = _batch_page();
}
return $output;
}
function drupal_commons_build_directories() {
$dirs = array(
'ctools',
'ctools/css',
'pictures',
'imagecache',
'css',
'js',
);
foreach ($dirs as $dir) {
$dir = file_directory_path() . '/' . $dir;
file_check_directory($dir, TRUE);
}
}
function drupal_commons_config_taxonomy() {
$vocab = array(
'name' => st('Tags'),
'description' => st('Free-tagging vocabulary for all content items'),
'multiple' => '0',
'required' => '0',
'hierarchy' => '0',
'relations' => '1',
'tags' => '1',
'module' => 'taxonomy',
);
taxonomy_save_vocabulary($vocab);
variable_set('commons_tags_vid', $vocab['vid']);
}
function drupal_commons_config_filter() {
$filters_sql = "UPDATE {filters} f INNER JOIN {filter_formats} ff ON f.format = ff.format SET f.format = %d WHERE ff.name = '%s'";
$filter_formats = "UPDATE {filter_formats} SET format = %d WHERE name = '%s'";
db_query($filters_sql, 1, 'Filtered HTML');
db_query($filter_formats, 1, 'Filtered HTML');
db_query($filters_sql, 2, 'Full HTML');
db_query($filter_formats, 2, 'Full HTML');
db_query($filters_sql, 3, 'PHP code');
db_query($filter_formats, 3, 'PHP code');
db_query($filters_sql, 4, 'Messaging plain text');
db_query($filter_formats, 4, 'Messaging plain text');
db_query("UPDATE {filter_formats} SET roles = ',3,4,' WHERE name = 'Full HTML'");
$format = new stdClass();
$format->format = 5;
$format->name = st('Links only');
$format->cache = 1;
drupal_write_record('filter_formats', $format);
$filter = new stdClass();
$filter->format = 5;
$filter->module = 'filter';
$filter->delta = 0;
$filter->weight = -10;
drupal_write_record('filters', $filter);
$filter = new stdClass();
$filter->format = 5;
$filter->module = 'filter';
$filter->delta = 2;
$filter->weight = -9;
drupal_write_record('filters', $filter);
variable_set('filter_url_length_5', 60);
variable_set('filter_html_5', 1);
variable_set('filter_html_help_5', 0);
variable_set('allowed_html_5', '');
db_query("DELETE FROM {filters} WHERE format = 1 AND module = 'filter' AND delta = 0");
$filter = new stdClass();
$filter->format = 1;
$filter->module = 'wysiwyg_filter';
$filter->delta = 0;
$filter->weight = -8;
drupal_write_record('filters', $filter);
db_query("UPDATE {filters} SET weight = -7 WHERE module = 'filter' AND delta = 3");
}
function drupal_commons_config_password() {
$policy = new stdClass();
$policy->pid = 1;
$policy->name = st('Constraints');
$policy->description = st('Default list of password constraints');
$policy->enabled = 1;
$policy->policy = array(
'alphanumeric' => 7,
'username' => 1,
'length' => 7,
'punctuation' => 0,
);
$policy->policy = serialize($policy->policy);
$policy->created = time();
drupal_write_record('password_policy', $policy);
$policy_role = new stdClass();
$policy_role->rid = 2;
$policy_role->pid = $policy->pid;
drupal_write_record('password_policy_role', $policy_role);
variable_set('password_policy_show_restrictions', 1);
}
function drupal_commons_config_wysiwyg() {
drupal_commons_include('editor');
$settings = drupal_commons_editor_settings();
$item = new stdClass();
$item->format = 1;
$item->editor = DRUPAL_COMMONS_EDITOR;
$item->settings = serialize($settings['Filtered HTML']);
drupal_write_record('wysiwyg', $item);
$item = new stdClass();
$item->format = 2;
$item->editor = DRUPAL_COMMONS_EDITOR;
$item->settings = serialize($settings['Full HTML']);
drupal_write_record('wysiwyg', $item);
}
function drupal_commons_config_ur() {
$relationship = new stdClass();
$relationship->name = st('follower');
$relationship->plural_name = st('users you follow');
$relationship->requires_approval = 0;
$relationship->expires_val = 0;
$relationship->is_oneway = 1;
$relationship->is_reciprocal = 1;
$type = 'insert';
drupal_write_record('user_relationship_types', $relationship);
$hook = 'user_relationships_type';
foreach (module_implements($hook) as $module) {
$function = $module . '_' . $hook;
$function($type, $relationship);
}
}
function drupal_commons_config_views() {
$disabled = variable_get('views_defaults', array());
$disabled['og'] = TRUE;
$disabled['og_members_block'] = TRUE;
$disabled['og_my'] = TRUE;
variable_set('views_defaults', $disabled);
views_invalidate_cache();
}
function drupal_commons_config_images() {
$user_image = 'profiles/drupal_commons/images/default-user.png';
file_copy($user_image, 0, FILE_EXISTS_REPLACE);
$group_image = 'profiles/drupal_commons/images/default-group.png';
file_copy($group_image, 0, FILE_EXISTS_REPLACE);
$preset = imagecache_preset_by_name('profile_pictures');
imagecache_build_derivative($preset['actions'], $user_image, file_directory_path() . '/imagecache/profile_pictures/default-user.png');
$preset = imagecache_preset_by_name('user_picture_meta');
imagecache_build_derivative($preset['actions'], $user_image, file_directory_path() . '/imagecache/user_picture_meta/default-user.png');
variable_set('user_picture_default', 'default-user.png');
$preset = imagecache_preset_by_name('group_images');
imagecache_build_derivative($preset['actions'], $group_image, file_directory_path() . '/imagecache/group_images/imagefield_default_images/default-group.png');
$preset = imagecache_preset_by_name('group_images_thumb');
imagecache_build_derivative($preset['actions'], $group_image, file_directory_path() . '/imagecache/group_images_thumb/imagefield_default_images/default-group.png');
$file = new stdClass();
$file->uid = 1;
$file->filename = 'default-group.png';
$file->filepath = file_directory_path() . '/' . $file->filename;
$file->filemime = 'image/png';
$file->filesize = filesize($group_image);
$file->status = 1;
$file->timestamp = time();
drupal_write_record('files', $file);
}
function drupal_commons_config_vars() {
variable_set('tagadelic_page_amount', 500);
variable_set('preprocess_css', 1);
variable_set('preprocess_js', 1);
variable_set('error_level', 0);
variable_set('user_picture_file_size', '');
$vid = variable_get('commons_tags_vid', 1);
variable_set('user_terms_vocabs', array(
$vid => $vid,
));
}
function drupal_commons_config_tidy_node_links() {
$theme = variable_get('theme_default', 'garland');
if ($theme == 'commons_origins') {
drupal_install_modules(array(
'tidy_node_links',
));
}
}
function drupal_commons_create_group() {
drupal_commons_include('node');
$group = _drupal_commons_default_group_node();
node_save($group);
if (in_array('commons_discussion', variable_get('commons_selected_features', array()))) {
$node = _drupal_commons_default_discussion_node();
$node->og_groups = array(
$group->nid => $group->nid,
);
node_save($node);
}
}
function drupal_commons_cleanup() {
node_access_rebuild();
node_types_rebuild();
drupal_get_messages('status', TRUE);
$core = array(
'cache',
'cache_block',
'cache_filter',
'cache_page',
);
$cache_tables = array_merge(module_invoke_all('flush_caches'), $core);
foreach ($cache_tables as $table) {
cache_clear_all('*', $table, TRUE);
}
drupal_clear_css_cache();
drupal_clear_js_cache();
$revert = array(
'commons_core' => array(
'menu_links',
),
'commons_notifications' => array(
'variable',
),
'commons_seo' => array(
'variable',
),
'commons_blog' => array(
'menu_links',
'user_permission',
),
'commons_event' => array(
'menu_links',
),
'commons_poll' => array(
'menu_links',
),
'commons_document' => array(
'menu_links',
),
'commons_discussion' => array(
'menu_links',
),
'commons_wiki' => array(
'menu_links',
'variable',
),
'commons_home' => array(
'page_manager_pages',
),
'commons_reputation' => array(
'menu_links',
),
'commons_admin' => array(
'user_permission',
),
'commons_answers' => array(
'user_permission',
),
);
$enabled = variable_get('commons_selected_features', array(
'commons_core',
));
foreach ($revert as $feature => $value) {
if (!in_array($feature, $enabled)) {
unset($revert[$feature]);
}
}
features_revert($revert);
watchdog('commons', st('Welcome to Commons from Acquia!'));
drupal_commons_create_group();
activity_log_rebuild_everything();
variable_del('commons_selected_features');
variable_set('install_task', 'profile-finished');
}
function drupal_commons_include($name, $dir = 'includes') {
require_once "profiles/drupal_commons/{$dir}/{$name}.inc";
}
function system_form_install_select_profile_form_alter(&$form, $form_state) {
foreach ($form['profile'] as $key => $element) {
$form['profile'][$key]['#value'] = 'drupal_commons';
}
}
function system_form_install_configure_form_alter(&$form, $form_state) {
$form['site_information']['commons_force_login'] = array(
'#type' => 'checkbox',
'#title' => t('Force users to login'),
'#description' => t('If checked, users will be required to log into the site to access it. Users who are not logged in will be redirected to a login page. Select this setting if your Commons site must be closed to the public, such as a company intranet.'),
);
if (function_exists('date_timezone_names') && function_exists('date_timezone_update_site')) {
$form['server_settings']['date_default_timezone']['#access'] = FALSE;
$form['server_settings']['#element_validate'] = array(
'date_timezone_update_site',
);
$form['server_settings']['date_default_timezone_name'] = array(
'#type' => 'select',
'#title' => t('Default time zone'),
'#default_value' => NULL,
'#options' => date_timezone_names(FALSE, TRUE),
'#description' => st('Select the default site time zone. If in doubt, choose the timezone that is closest to your location which has the same rules for daylight saving time.'),
'#required' => TRUE,
);
}
$form['#submit'][] = 'drupal_commons_install_configure_form_submit';
}
function drupal_commons_install_configure_form_submit(&$form, &$form_state) {
variable_set('commons_force_login', $form_state['values']['commons_force_login']);
}