commerce_kickstart.install in Commerce Kickstart 7.2
Same filename and directory in other branches
Installation code for Commerce Kickstart.
File
commerce_kickstart.installView source
<?php
/**
* @file
* Installation code for Commerce Kickstart.
*/
/**
* Implements hook_install_tasks().
*/
function commerce_kickstart_install_tasks() {
// Increase maximum function nesting level to prevent install errors.
$max_nesting_level = ini_get('xdebug.max_nesting_level');
if ($max_nesting_level > 0 && $max_nesting_level <= '200') {
ini_set('xdebug.max_nesting_level', 200);
}
// Remove any status messages that might have been set. They are unneeded.
drupal_get_messages('status', TRUE);
$tasks = array();
$current_task = variable_get('install_task', 'done');
$install_demo_store = variable_get('commerce_kickstart_demo_store', FALSE);
$tasks['commerce_kickstart_configure_store_form'] = array(
'display_name' => st('Configure store'),
'type' => 'form',
);
$tasks['commerce_kickstart_install_additional_modules'] = array(
'display_name' => $install_demo_store ? st('Install demo store') : st('Install additional functionality'),
'type' => 'batch',
// Show this task only after the Kickstart steps have been reached.
'display' => strpos($current_task, 'commerce_kickstart_') !== FALSE,
);
$tasks['commerce_kickstart_import_content'] = array(
'display_name' => st('Import content'),
'type' => 'batch',
// Show this task only after the Kickstart steps have been reached.
'display' => strpos($current_task, 'commerce_kickstart_') !== FALSE,
);
return $tasks;
}
/**
* Implements hook_install_tasks_alter().
*/
function commerce_kickstart_install_tasks_alter(&$tasks, $install_state) {
$tasks['install_finished']['function'] = 'commerce_kickstart_install_finished';
$tasks['install_select_profile']['display'] = FALSE;
$tasks['install_select_locale']['display'] = FALSE;
$tasks['install_select_locale']['run'] = INSTALL_TASK_SKIP;
$tasks['install_profile_modules']['display_name'] = st('Install Commerce Kickstart 2');
if (PHP_SAPI !== 'cli') {
// The "Welcome" screen needs to come after the first two steps
// (profile and language selection), despite the fact that they are disabled.
$new_task['install_welcome'] = array(
'display' => TRUE,
'display_name' => st('Welcome'),
'type' => 'form',
'run' => isset($install_state['parameters']['welcome']) ? INSTALL_TASK_SKIP : INSTALL_TASK_RUN_IF_REACHED,
);
$old_tasks = $tasks;
$tasks = array_slice($old_tasks, 0, 2) + $new_task + array_slice($old_tasks, 2);
}
// Set the installation theme.
_commerce_kickstart_set_theme('commerce_kickstart_admin');
}
/**
* Force-set a theme at any point during the execution of the request.
*
* Drupal doesn't give us the option to set the theme during the installation
* process and forces enable the maintenance theme too early in the request
* for us to modify it in a clean way.
*/
function _commerce_kickstart_set_theme($target_theme) {
if ($GLOBALS['theme'] != $target_theme) {
unset($GLOBALS['theme']);
drupal_static_reset();
$GLOBALS['conf']['maintenance_theme'] = $target_theme;
_drupal_maintenance_theme();
}
}
/**
* Task callback: shows the welcome screen.
*/
function install_welcome($form, &$form_state, &$install_state) {
drupal_set_title(st('Welcome to Commerce Kickstart 2'));
$message = '<p>' . st('Thank you for choosing Commerce Kickstart!') . '</p>';
$message .= '<p>' . st('This distribution installs Drupal Commerce jam-packed with
the best community features, more than we could hope to mention here.') . '</p>';
$form = array();
$form['welcome_message'] = array(
'#markup' => $message,
);
$form['actions'] = array(
'#type' => 'actions',
);
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => st("Let's Get Started!"),
'#weight' => 10,
);
return $form;
}
function install_welcome_submit($form, &$form_state) {
global $install_state;
$install_state['parameters']['welcome'] = 'done';
$install_state['parameters']['locale'] = 'en';
}
/**
* Task callback: returns the form allowing the user to add example store content on install.
*/
function commerce_kickstart_configure_store_form() {
include_once DRUPAL_ROOT . '/includes/iso.inc';
drupal_set_title(st('Configure store'));
$form['country'] = array(
'#type' => 'fieldset',
'#title' => st('Country'),
);
$form['country']['country_list'] = array(
'#title' => t('Default store country'),
'#description' => t('Services specific to the selected country will be installed if they exist.'),
'#options' => _country_get_predefined_list(),
'#type' => 'select',
'#default_value' => variable_get('site_default_country'),
// This field is not required when installing through drush.
'#required' => !drupal_is_cli(),
);
// Prepare all the options for sample content.
$options = array(
'1' => st('Yes'),
'0' => st('No'),
);
$form['functionality'] = array(
'#type' => 'fieldset',
'#title' => st('Functionality'),
);
$form['functionality']['install_demo_store'] = array(
'#type' => 'radios',
'#title' => st('Do you want to install the demo store?'),
'#description' => st('Shows you everything Commerce Kickstart can do. Includes a custom theme, sample content and products.'),
'#options' => $options,
'#default_value' => '1',
);
$form['functionality']['notice'] = array(
'#type' => 'item',
'#markup' => '<p>' . t('<strong>Important</strong>: Once installed, products type cannot be deleted. Not recommended for development.') . '</p>',
'#attributes' => array(
'style' => 'clear: both;',
),
'#states' => array(
'visible' => array(
':input[name="install_demo_store"]' => array(
'value' => '1',
),
),
),
);
$form['localization'] = array(
'#type' => 'fieldset',
'#title' => st('Localization'),
);
$form['localization']['install_localization'] = array(
'#type' => 'radios',
'#title' => st('Do you want to be able to translate the interface of your store?'),
'#options' => $options,
'#default_value' => '0',
);
$options_selection = array(
'anonymous_checkout' => 'Allow checkout for <strong>anonymous users</strong>.',
'merchandising' => 'Additional <strong>blocks</strong> for featuring specific content.',
'slideshow' => 'Frontpage <strong>slideshow</strong>.',
'menus' => 'Custom <strong>admin menu</strong> designed for store owners.',
'blog' => '<strong>Blog</strong> functionality.',
'social' => '<strong>Social</strong> logins and links for sharing products via social networks.',
'zoom_cloud' => '<strong>Zoom & Gallery</strong> mode for products.',
);
$form['functionality']['extras'] = array(
'#type' => 'checkboxes',
'#options' => $options_selection,
'#title' => t("Install additional functionality"),
'#states' => array(
'visible' => array(
':input[name="install_demo_store"]' => array(
'value' => '0',
),
),
),
);
// Build a currency options list from all defined currencies.
$options = array();
foreach (commerce_currencies(FALSE, TRUE) as $currency_code => $currency) {
$options[$currency_code] = t('@code - !name', array(
'@code' => $currency['code'],
'@symbol' => $currency['symbol'],
'!name' => $currency['name'],
));
if (!empty($currency['symbol'])) {
$options[$currency_code] .= ' - ' . check_plain($currency['symbol']);
}
}
$form['commerce_default_currency_wrapper'] = array(
'#type' => 'fieldset',
'#title' => st('Currency'),
);
$form['commerce_default_currency_wrapper']['commerce_default_currency'] = array(
'#type' => 'select',
'#title' => t('Default store currency'),
'#options' => $options,
'#default_value' => commerce_default_currency(),
);
// Prepare all the options for sample content.
$options = array(
'none' => st("No sample tax rate."),
'us' => st('US - Sales taxes displayed in checkout'),
'europe' => st('European - Inclusive tax rates (VAT)'),
);
$form['commerce_kickstart_tax_wrapper'] = array(
'#type' => 'fieldset',
'#title' => st('Tax Rate'),
);
$form['commerce_kickstart_tax_wrapper']['commerce_kickstart_choose_tax_country'] = array(
'#type' => 'radios',
'#title' => st('Tax rate examples'),
'#description' => st('Example tax rates will be created in this style.'),
'#options' => $options,
'#default_value' => key($options),
);
$form['actions'] = array(
'#type' => 'actions',
);
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => st('Create and Finish'),
'#weight' => 15,
);
return $form;
}
/**
* Submit callback: creates the requested sample content.
*/
function commerce_kickstart_configure_store_form_submit(&$form, &$form_state) {
variable_set('commerce_kickstart_store_country', $form_state['values']['country_list']);
variable_set('commerce_kickstart_demo_store', $form_state['values']['install_demo_store']);
variable_set('commerce_kickstart_localization', $form_state['values']['install_localization']);
variable_set('commerce_kickstart_selected_extras', $form_state['values']['extras']);
variable_set('commerce_kickstart_choose_tax_country', $form_state['values']['commerce_kickstart_choose_tax_country']);
variable_set('commerce_default_currency', $form_state['values']['commerce_default_currency']);
variable_set('commerce_enabled_currencies', array(
$form_state['values']['commerce_default_currency'] => $form_state['values']['commerce_default_currency'],
));
// Kickstart features rebuild themselves in their hook_enable() hooks, disable
// features_modules_enabled() until the end of install.
variable_set('features_rebuild_on_module_install', FALSE);
}
/**
* Task callback: uses Batch API to import modules based on user selection.
* Installs all demo store modules if requested, or any modules providing
* additional functionality to the base install.
*
* Any modules providing custom blocks should be enabled here, and not before
* (as an install profile dependency), because the themes are setup during
* commerce_kickstart_install(), which means region assignment can only happen
* after that.
*/
function commerce_kickstart_install_additional_modules() {
global $install_state;
$install_demo_store = variable_get('commerce_kickstart_demo_store', FALSE);
if ($install_demo_store) {
$modules = array(
'commerce_kickstart_reset',
'commerce_kickstart_block',
'commerce_kickstart_user',
'commerce_checkout_redirect',
'commerce_kickstart_social',
'commerce_kickstart_product',
'commerce_kickstart_product_ui',
'commerce_kickstart_blog',
'commerce_kickstart_slideshow',
'commerce_kickstart_merchandising',
'commerce_kickstart_menus',
'commerce_kickstart_search',
'commerce_kickstart_taxonomy',
);
}
else {
$modules = array(
'commerce_kickstart_block',
'commerce_kickstart_user',
'commerce_kickstart_lite_product',
'commerce_kickstart_product_ui',
'commerce_kickstart_search',
'commerce_kickstart_taxonomy',
);
$selected_extras = variable_get('commerce_kickstart_selected_extras', array());
if (empty($selected_extras['anonymous_checkout'])) {
$modules[] = 'commerce_checkout_redirect';
}
if (!empty($selected_extras['merchandising'])) {
$modules[] = 'commerce_kickstart_merchandising';
}
if (!empty($selected_extras['slideshow'])) {
$modules[] = 'commerce_kickstart_slideshow';
}
if (!empty($selected_extras['menus'])) {
$modules[] = 'commerce_kickstart_menus';
}
if (!empty($selected_extras['blog'])) {
$modules[] = 'commerce_kickstart_blog';
}
if (!empty($selected_extras['social'])) {
$modules[] = 'commerce_kickstart_social';
}
if (!empty($selected_extras['zoom_cloud'])) {
variable_set('commerce_kickstart_product_zoom_enabled', TRUE);
}
}
$install_localization = variable_get('commerce_kickstart_localization', FALSE);
if ($install_localization) {
$modules[] = 'locale';
$modules[] = 'variable';
$modules[] = 'i18n';
$modules[] = 'i18n_field';
}
$store_country = variable_get('commerce_kickstart_store_country', 'US');
// Enable Payleap and Paypal for North America.
if (in_array($store_country, array(
'CA',
'US',
))) {
$modules[] = 'commerce_payleap';
$modules[] = 'commerce_payflow';
$modules[] = 'commerce_paypal_ec';
}
// Resolve the dependencies now, so that module_enable() doesn't need
// to do it later for each individual module (which kills performance).
$files = system_rebuild_module_data();
$modules_sorted = array();
foreach ($modules as $module) {
if ($files[$module]->requires) {
// Create a list of dependencies that haven't been installed yet.
$dependencies = array_keys($files[$module]->requires);
$dependencies = array_filter($dependencies, '_commerce_kickstart_filter_dependencies');
// Add them to the module list.
$modules = array_merge($modules, $dependencies);
}
}
$modules = array_unique($modules);
foreach ($modules as $module) {
$modules_sorted[$module] = $files[$module]->sort;
}
arsort($modules_sorted);
$operations = array();
// Enable and set as default the correct theme.
$theme = $install_demo_store ? 'commerce_kickstart_theme' : 'omega_kickstart';
$operations[] = array(
'_commerce_kickstart_enable_theme',
array(
$theme,
),
);
// Enable the selected modules.
foreach ($modules_sorted as $module => $weight) {
$operations[] = array(
'_commerce_kickstart_enable_module',
array(
$module,
$files[$module]->info['name'],
),
);
}
if ($install_localization) {
$operations[] = array(
'_commerce_kickstart_setup_localization',
array(
t('Configured localization.'),
),
);
}
$operations[] = array(
'_commerce_kickstart_flush_caches',
array(
t('Flushed caches.'),
),
);
$batch = array(
'title' => $install_demo_store ? t('Installing demo store') : t('Installing additional functionality'),
'operations' => $operations,
'file' => drupal_get_path('profile', 'commerce_kickstart') . '/commerce_kickstart.install_callbacks.inc',
);
return $batch;
}
/**
* array_filter() callback used to filter out already installed dependencies.
*/
function _commerce_kickstart_filter_dependencies($dependency) {
return !module_exists($dependency);
}
/**
* Task callback: return a batch API array with the products to be imported.
*/
function commerce_kickstart_import_content() {
// Fixes problems when the CSV files used for importing have been created
// on a Mac, by forcing PHP to detect the appropriate line endings.
ini_set("auto_detect_line_endings", TRUE);
$operations = array();
$operations[] = array(
'_commerce_kickstart_example_taxes',
array(
t('Setting up taxes.'),
),
);
$install_demo_store = variable_get('commerce_kickstart_demo_store', FALSE);
$operations[] = array(
'_commerce_kickstart_taxonomy_menu',
array(
t('Setting up menus.'),
),
);
// Run all available migrations.
$migrations = migrate_migrations();
foreach ($migrations as $machine_name => $migration) {
$operations[] = array(
'_commerce_kickstart_import',
array(
$machine_name,
t('Importing content.'),
),
);
}
if ($install_demo_store) {
$operations[] = array(
'_commerce_kickstart_example_user',
array(
t('Setting up users.'),
),
);
}
// Perform post-import tasks.
$operations[] = array(
'_commerce_kickstart_post_import',
array(
t('Completing setup.'),
),
);
$batch = array(
'title' => t('Importing content'),
'operations' => $operations,
'file' => drupal_get_path('profile', 'commerce_kickstart') . '/commerce_kickstart.install_callbacks.inc',
);
return $batch;
}
/**
* Custom installation task; perform final steps and redirect the user to the new site if there are no errors.
*
* @param $install_state
* An array of information about the current installation state.
*
* @return
* A message informing the user about errors if there was some.
*/
function commerce_kickstart_install_finished(&$install_state) {
drupal_set_title(st('@drupal installation complete', array(
'@drupal' => drupal_install_profile_distribution_name(),
)), PASS_THROUGH);
$messages = drupal_set_message();
// Remember the profile which was used.
variable_set('install_profile', drupal_get_profile());
variable_set('install_task', 'done');
// Restore features behavior.
variable_set('features_rebuild_on_module_install', TRUE);
// There is an issue with Features and menu_links when profile installed
// through Drush. We need to revert the menu_links and autosku patterns.
if (drupal_is_cli()) {
$feature_install_fix = array(
// Fix AutoSKU
'commerce_kickstart_product' => array(
'commerce_autosku_patterns',
),
// Fences has issues in Features
'commerce_kickstart_blog' => array(
'field_instance',
),
'commerce_kickstart_merchandising' => array(
'field_instance',
),
);
features_revert($feature_install_fix);
// Fix Menu Links
$features_menu_link_fix = array(
'commerce_kickstart_block',
'commerce_kickstart_social',
'commerce_kickstart_user',
);
foreach ($features_menu_link_fix as $module) {
if ($menu_links = features_get_default('menu_links', $module)) {
menu_links_features_rebuild_ordered($menu_links, TRUE);
}
}
}
// Flush all caches to ensure that any full bootstraps during the installer
// do not leave stale cached data, and that any content types or other items
// registered by the install profile are registered correctly.
drupal_flush_all_caches();
// Install profiles are always loaded last
db_update('system')
->fields(array(
'weight' => 1000,
))
->condition('type', 'module')
->condition('name', drupal_get_profile())
->execute();
// Cache a fully-built schema.
drupal_get_schema(NULL, TRUE);
// Run cron to populate update status tables (if available) so that users
// will be warned if they've installed an out of date Drupal version.
// Will also trigger indexing of profile-supplied content or feeds.
drupal_cron_run();
if (isset($messages['error'])) {
$output = '<p>' . (isset($messages['error']) ? st('Review the messages above before visiting <a href="@url">your new site</a>.', array(
'@url' => url(''),
)) : st('<a href="@url">Visit your new site</a>.', array(
'@url' => url(''),
))) . '</p>';
return $output;
}
else {
// Since any module can add a drupal_set_message, this can bug the user
// when we redirect him to the front page. For a better user experience,
// remove all the message that are only "notifications" message.
drupal_get_messages('status', TRUE);
drupal_get_messages('completed', TRUE);
// Migrate adds its messages under the wrong type, see #1659150.
drupal_get_messages('ok', TRUE);
// If we don't install drupal using Drush, redirect the user to the front
// page.
if (!drupal_is_cli()) {
if (module_exists('overlay')) {
// Special case when no clean urls.
$fragment = empty($GLOBALS['conf']['clean_url']) ? urlencode('?q=admin/help/getting-started') : 'admin/help/getting-started';
drupal_goto('', array(
'fragment' => 'overlay=' . $fragment,
));
}
else {
drupal_goto('admin/help/getting-started');
}
}
}
}
/**
* Implements hook_install().
*/
function commerce_kickstart_install() {
// Add text formats.
$filtered_html_format = array(
'format' => 'filtered_html',
'name' => 'Filtered HTML',
'weight' => 0,
'filters' => array(
// URL filter.
'filter_url' => array(
'weight' => 0,
'status' => 1,
),
// HTML filter.
'filter_html' => array(
'weight' => 1,
'status' => 1,
),
// Line break filter.
'filter_autop' => array(
'weight' => 2,
'status' => 1,
),
// HTML corrector filter.
'filter_htmlcorrector' => array(
'weight' => 10,
'status' => 1,
),
),
);
$filtered_html_format = (object) $filtered_html_format;
filter_format_save($filtered_html_format);
$full_html_format = array(
'format' => 'full_html',
'name' => 'Full HTML',
'weight' => 1,
'filters' => array(
// URL filter.
'filter_url' => array(
'weight' => 0,
'status' => 1,
),
// Line break filter.
'filter_autop' => array(
'weight' => 1,
'status' => 1,
),
// HTML corrector filter.
'filter_htmlcorrector' => array(
'weight' => 10,
'status' => 1,
),
),
);
$full_html_format = (object) $full_html_format;
filter_format_save($full_html_format);
// Enable the admin theme.
$admin_theme = 'commerce_kickstart_admin';
theme_enable(array(
$admin_theme,
));
variable_set('admin_theme', $admin_theme);
variable_set('node_admin_theme', '1');
// Insert default pre-defined node types into the database.
$types = array(
array(
'type' => 'page',
'name' => st('Basic page'),
'base' => 'node_content',
'description' => st("Use <em>basic pages</em> for your static content, such as an 'About us' page."),
'custom' => 1,
'modified' => 1,
'locked' => 0,
),
);
foreach ($types as $type) {
$type = node_type_set_defaults($type);
node_type_save($type);
node_add_body_field($type);
}
// "Basic page" configuration.
variable_set('node_options_page', array(
'status',
));
variable_set('comment_page', COMMENT_NODE_HIDDEN);
variable_set('node_submitted_page', FALSE);
variable_set('pathauto_node_page_pattern', '[node:title]');
// Enable default permissions for system roles.
$filtered_html_permission = filter_permission_name($filtered_html_format);
user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array(
'access content',
'access comments',
'access checkout',
'view own commerce_order entities',
'view any commerce_product entity',
$filtered_html_permission,
));
user_role_grant_permissions(DRUPAL_AUTHENTICATED_RID, array(
'access content',
'access comments',
'access checkout',
'view own commerce_order entities',
'view any commerce_product entity',
'post comments',
'skip comment approval',
$filtered_html_permission,
));
// 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);
user_role_grant_permissions($admin_role->rid, array_keys(module_invoke_all('permission')));
// Set this as the administrator role.
variable_set('user_admin_role', $admin_role->rid);
// Assign user 1 the "administrator" role.
db_insert('users_roles')
->fields(array(
'uid' => 1,
'rid' => $admin_role->rid,
))
->execute();
// Update the menu router information.
menu_rebuild();
// Set Mimemail.
variable_set('mimemail_format', 'full_html');
// Set checkout progress.
variable_set('commerce_checkout_progress_link', 0);
variable_set('commerce_checkout_progress_list_type', 'ol');
variable_set('commerce_checkout_progress_block_pages', array_keys(commerce_checkout_pages()));
// Configure Chosen.
variable_set('chosen_jquery_selector', '.view-filters .views-exposed-form select');
variable_set('chosen_minimum_single', 'Always Apply');
variable_set('chosen_minimum_multiple', 'Always Apply');
variable_set('chosen_minimum_width', 200);
variable_set('chosen_search_contains', TRUE);
// Create the default Search API server.
$values = array(
'machine_name' => 'frontend',
'name' => 'Frontend',
'description' => '',
'class' => 'search_api_db_service',
'options' => array(
'database' => 'default:default',
'min_chars' => 3,
),
);
search_api_server_insert($values);
// Enable automatic title replacement for node and commerce product bundles.
foreach (array(
'node',
'commerce_product',
) as $entity_type) {
$title_settings = array(
'auto_attach' => array(
'title' => 'title',
),
'hide_label' => array(
'entity' => 'entity',
'page' => 0,
),
);
variable_set('title_' . $entity_type, $title_settings);
}
// Disable migrate autoregistration.
variable_set('migrate_disable_autoregistration', TRUE);
// Creating needed fields
$field_image = array(
'active' => 1,
'cardinality' => 1,
'deleted' => 0,
'entity_types' => array(),
'field_name' => 'field_image',
'foreign keys' => array(
'fid' => array(
'columns' => array(
'fid' => 'fid',
),
'table' => 'file_managed',
),
),
'indexes' => array(
'fid' => array(
0 => 'fid',
),
),
'locked' => 0,
'module' => 'image',
'settings' => array(
'default_image' => 0,
'uri_scheme' => 'public',
),
'translatable' => 1,
'type' => 'image',
);
field_create_field($field_image);
}
/**
* Disables the passed modules by removing their entries from the system table.
*
* Used for modules that have already disappeared from the filesystem.
* Implemented in order to avoid the core issue described in #1081266.
*
* @param $modules
* The modules to disable.
*/
function _commerce_kickstart_disable_modules($modules) {
// Disable the removed modules.
db_update('system')
->fields(array(
'status' => 0,
))
->condition('name', $modules)
->condition('type', 'module')
->execute();
}
/**
* Implements hook_update_dependencies().
*/
function commerce_kickstart_update_dependencies() {
$deps = array();
$deps['commerce_kickstart'][7200] = array(
'rules' => 7210,
'rules' => 7211,
'rules' => 7212,
'rules' => 7213,
);
$deps['commerce_kickstart'][7212] = array(
'rules' => 7210,
'rules' => 7211,
'rules' => 7212,
'rules' => 7213,
);
if (module_exists('commerce_discount')) {
$deps['commerce_kickstart'][7213] = array(
'commerce_discount' => 7101,
'commerce_discount' => 7102,
);
}
$deps['commerce_kickstart'][7214] = array(
'rules' => 7210,
'rules' => 7211,
'rules' => 7212,
'rules' => 7213,
);
if (module_exists('commerce_discount')) {
$deps['commerce_kickstart'][7219] = array(
'commerce_discount' => 7104,
);
}
return $deps;
}
/**
* Update the admin theme from "Commerce Kickstart Admin Theme" to "Shiny".
*/
function commerce_kickstart_update_7200() {
// Enable the new theme.
theme_enable(array(
'shiny',
));
variable_set('admin_theme', 'shiny');
drupal_static_reset();
_block_rehash('shiny');
// Disable all blocks in the content region except "Main page content".
db_update('block')
->fields(array(
'region' => '-1',
))
->condition('theme', 'shiny')
->condition('region', 'content')
->condition(db_and()
->condition('module', 'system', '<>')
->condition('delta', 'main', '<>'))
->execute();
// Move help to the correct region.
db_update('block')
->fields(array(
'region' => 'help',
))
->condition('module', 'system')
->condition('delta', 'help')
->condition('theme', 'shiny')
->execute();
// Disable the old theme.
theme_disable(array(
'commerce_kickstart_admin',
));
}
/**
* Flush caches and rebuild features.
*/
function commerce_kickstart_update_7201() {
// install_task wasn't set properly on older installs, which affects
// feature rebuilding.
variable_set('install_task', 'done');
// Only non-overridden indexes get processed in 7202, no reason to do a
// cache clear this early otherwise.
$index = search_api_index_load('product_display');
if (!empty($index) && !$index
->hasStatus(ENTITY_OVERRIDDEN)) {
entity_property_info_cache_clear();
drupal_flush_all_caches();
}
}
/**
* Update Search API integration to work with Commerce 1.4
*/
function commerce_kickstart_update_7202() {
// The price property has changed. A reindex is necessary.
drupal_load('module', 'search_api');
$index = search_api_index_load('product_display');
if (!empty($index) && !$index
->hasStatus(ENTITY_OVERRIDDEN)) {
// Refresh the list of blocks and enable the new Price facet block.
$default_theme = variable_get('theme_default', 'omega_kickstart');
drupal_static_reset();
_block_rehash($default_theme);
db_update('block')
->fields(array(
'region' => 'sidebar_first',
'status' => 1,
'weight' => -1,
))
->condition('module', 'facetapi')
->condition('delta', 'TFVaQKSORCPdrULxfXDnLQZ40xH0Nper')
->condition('theme', $default_theme)
->execute();
$index
->clear();
search_api_index_items($index, 100);
}
else {
// The index is overridden and can't be modified, so point the user
// to the documentation page.
return '<strong style="color: red">' . t('Important: To complete the update process, please visit http://drupal.org/node/1819842 and follow the instructions.') . '</strong>';
}
}
/**
* Remove the old price sort.
*/
function commerce_kickstart_update_7203() {
$sorts = entity_load('search_api_sort', FALSE, array(
'field' => 'field_product_commerce_price_amount_float_asc',
));
if (!empty($sorts)) {
$sort = reset($sorts);
$sort
->delete();
}
}
/**
* Enable the commerce_backoffice_content module.
*/
function commerce_kickstart_update_7204() {
_commerce_kickstart_disable_modules('commerce_kickstart_content_ui');
drupal_flush_all_caches();
module_enable(array(
'commerce_backoffice_content',
));
}
/**
* Replace the collection view by a view based on the product display index.
*/
function commerce_kickstart_update_7205(&$sandbox) {
$install_demo_store = variable_get('commerce_kickstart_demo_store', FALSE);
// Batching the update
if (!isset($sandbox['progress'])) {
$sandbox['progress'] = 1;
$sandbox['max'] = 6;
}
if ($sandbox['progress'] == 1) {
// Enable commerce_kickstart_taxonomy.
module_enable(array(
'commerce_kickstart_taxonomy',
));
menu_rebuild();
$sandbox['progress']++;
}
elseif ($sandbox['progress'] == 2) {
// Disable the old taxonomy/term/% view.
$view = views_get_view('collection_taxonomy_term');
if (isset($view->disabled) && $view->disabled === FALSE) {
views_export_status($view, TRUE);
}
$default_theme = variable_get('theme_default', 'omega_kickstart');
// Set the facets blocks only visibile on the "all products" view.
db_update('block')
->fields(array(
'pages' => 'products',
'visibility' => BLOCK_VISIBILITY_LISTED,
))
->condition('module', array(
'facetapi',
'search_api_sorts',
))
->condition('theme', $default_theme)
->execute();
$sandbox['progress']++;
}
elseif ($sandbox['progress'] == 3) {
// Set up taxonomy main menu..
if ($install_demo_store) {
$vocabulary_machine_name = 'collection';
}
else {
$vocabulary_machine_name = 'product_category';
}
if (($collection = taxonomy_vocabulary_machine_name_load($vocabulary_machine_name)) && module_exists('taxonomy_menu')) {
drupal_load('module', 'taxonomy_menu');
$variable_name = _taxonomy_menu_build_variable('vocab_menu', $collection->vid);
variable_set($variable_name, 'main-menu');
$variable_name = _taxonomy_menu_build_variable('path', $collection->vid);
variable_set($variable_name, 'commerce_kickstart_taxonomy_term_path');
// Remove the previous menu entries.
_taxonomy_menu_delete_all($collection->vid);
// Taxonomy menu links
$terms = taxonomy_get_tree($collection->vid, 0, 1);
// Loop through $terms to process each term.
foreach ($terms as $term) {
$args = array(
'term' => $term,
'menu_name' => 'main-menu',
);
$mlid = taxonomy_menu_handler('insert', $args);
}
}
$sandbox['progress']++;
}
elseif ($sandbox['progress'] == 4) {
// Add fields to the index (Needed for the new view).
drupal_load('module', 'search_api');
$index = search_api_index_load('product_display');
if (!empty($index)) {
$indexed_fields = $index
->getFields();
$options = $index->options;
if ($index
->hasStatus(ENTITY_OVERRIDDEN)) {
$options['fields'] += array(
'status' => array(
'type' => 'integer',
),
);
if ($install_demo_store) {
$options['fields'] += array(
'field_category:name' => array(
'type' => 'string',
),
);
}
if (!$index
->update(array(
'options' => $options,
))) {
$sandbox['error_message'] = '<strong style="color: red;">' . t("Important: We couldn't add the new fields to the index.") . '</strong>';
}
}
// Schedule the reindexing.
$index
->clear();
search_api_index_items($index, 100);
}
$sandbox['progress']++;
}
elseif ($sandbox['progress'] >= 5) {
if (empty($sandbox['pathauto'])) {
// Delete old pathauto aliases that are now no longer valid.
db_delete('url_alias')
->condition('source', db_like('taxonomy/term/') . '%', 'LIKE')
->execute();
$sandbox['pathauto'] = array(
'sandbox' => array(),
'finished' => 0,
);
}
// Generate new aliases by running the pathauto batch.
module_load_include('inc', 'pathauto', 'pathauto.pathauto');
taxonomy_pathauto_bulk_update_batch_process($sandbox['pathauto']);
$sandbox['progress'] += $sandbox['pathauto']['finished'];
}
$sandbox['#finished'] = $sandbox['progress'] / $sandbox['max'];
if (!empty($sandbox['error_message'])) {
return $sandbox['error_message'];
}
}
/**
* Enable the commerce_kickstart_product_ui on the no demo store.
*/
function commerce_kickstart_update_7206() {
if (!variable_get('commerce_kickstart_demo_store', FALSE)) {
// Disable the removed lite modules.
_commerce_kickstart_disable_modules(array(
'commerce_kickstart_lite_product_ui',
'commerce_kickstart_lite_product_zoom',
));
drupal_flush_all_caches();
module_enable(array(
'commerce_kickstart_product_ui',
));
}
}
/**
* Enable facetapi blocks + assign them in the sidebar_first region.
*/
function commerce_kickstart_update_7207() {
$default_theme = variable_get('theme_default', 'omega_kickstart');
_block_rehash($default_theme);
// Put the facets blocks in the right place.
db_update('block')
->fields(array(
'region' => 'sidebar_first',
'pages' => 'products',
'visibility' => BLOCK_VISIBILITY_LISTED,
'status' => (int) '1',
))
->condition('module', 'facetapi')
->condition('delta', '0', '<>')
->condition('theme', $default_theme)
->execute();
}
/**
* Enable commerce_add_to_cart_confirmation.
*/
function commerce_kickstart_update_7208() {
module_enable(array(
'commerce_add_to_cart_confirmation',
));
}
/**
* Check and remove sorts on non indexed fields.
*/
function commerce_kickstart_update_7209() {
if ($index = search_api_index_load('product_display')) {
$fields = $index->options['fields'];
$query = new EntityFieldQuery();
$query
->entityCondition('entity_type', 'search_api_sort')
->propertyCondition('field', array_keys($fields), 'NOT IN');
$results = $query
->execute();
if (!empty($results['search_api_sort'])) {
entity_delete_multiple('search_api_sort', array_keys($results['search_api_sort']));
}
}
}
/**
* Enable automatic title replacement for node and commerce product bundles.
*/
function commerce_kickstart_update_7210() {
foreach (array(
'node',
'commerce_product',
) as $entity_type) {
$title_settings = array(
'auto_attach' => array(
'title' => 'title',
),
'hide_label' => array(
'entity' => 'entity',
'page' => 0,
),
);
variable_set('title_' . $entity_type, $title_settings);
}
}
/**
* Enable commerce_message.
*/
function commerce_kickstart_update_7211() {
module_enable(array(
'commerce_message',
));
}
/**
* Disable commerce_kickstart_checkout_redirect.
*/
function commerce_kickstart_update_7212() {
_commerce_kickstart_disable_modules('commerce_kickstart_checkout_redirect');
}
/**
* Update the admin theme from "Shiny" to "Commerce Kickstart Admin Theme".
*/
function commerce_kickstart_update_7213() {
if (variable_get('admin_theme', 'shiny') == 'shiny') {
// Enable the new theme.
theme_enable(array(
'commerce_kickstart_admin',
));
variable_set('admin_theme', 'commerce_kickstart_admin');
drupal_static_reset();
_block_rehash('commerce_kickstart_admin');
// Disable all blocks in the content region except "Main page content".
db_update('block')
->fields(array(
'region' => '-1',
))
->condition('theme', 'commerce_kickstart_admin')
->condition('region', 'content')
->condition(db_and()
->condition('module', 'system', '<>')
->condition('delta', 'main', '<>'))
->execute();
// Move help to the correct region.
db_update('block')
->fields(array(
'region' => 'help',
))
->condition('module', 'system')
->condition('delta', 'help')
->condition('theme', 'commerce_kickstart_admin')
->execute();
// Disable the old theme.
theme_disable(array(
'shiny',
));
}
}
/**
* Enable the Commerce Guys Marketplace module.
*/
function commerce_kickstart_update_7214() {
module_enable(array(
'commerceguys_marketplace',
));
}
/**
* Disable commerce_kickstart_service_provider.
*/
function commerce_kickstart_update_7215() {
_commerce_kickstart_disable_modules('commerce_kickstart_service_provider');
}
/**
* Revert body field to text with summary type.
*/
function commerce_kickstart_update_7216() {
if (db_table_exists('field_data_body') && !db_field_exists('field_data_body', 'body_summary')) {
// Force field type change.
db_update('field_config')
->fields(array(
'type' => 'text_with_summary',
))
->condition('field_name', 'body')
->execute();
// Add summary field to Body field tables.
$summary_field = array(
'type' => 'text',
'size' => 'big',
'not null' => FALSE,
);
db_add_field('field_data_body', 'body_summary', $summary_field);
db_add_field('field_revision_body', 'body_summary', $summary_field);
// Revert field components of features with body field features.
$modules = array_filter(array(
'commerce_kickstart_product',
'commerce_kickstart_lite_product',
'commerce_kickstart_blog',
), 'module_exists');
$revert = array();
foreach ($modules as $module) {
$revert[$module][] = 'field';
}
if (!empty($revert)) {
features_revert($revert);
}
}
}
/**
* Enable Inline Conditions (Needed by Commerce Discount).
*/
function commerce_kickstart_update_7217() {
if (module_exists('commerce_discount')) {
module_enable(array(
'inline_conditions',
));
}
}
/**
* Remove jirafe.
*/
function commerce_kickstart_update_7218() {
_commerce_kickstart_disable_modules(array(
'jirafe',
));
variable_del('jirafe_config');
variable_del('jirafe_create_account_link');
}
/**
* Remove Commerce Kickstart payment example and enable Commerce payment example.
*/
function commerce_kickstart_update_7219() {
_commerce_kickstart_disable_modules(array(
'commerce_kickstart_payment',
));
module_enable(array(
'commerce_payment_example',
));
}
/**
* Configure Chosen.
*/
function commerce_kickstart_update_7220() {
variable_del('chosen_minimum');
variable_set('chosen_minimum_single', 'Always Apply');
variable_set('chosen_minimum_multiple', 'Always Apply');
}
/**
* Remove modules that are no longer used (bean, commerce_bean).
*/
function commerce_kickstart_update_7221() {
_commerce_kickstart_disable_modules(array(
'bean',
'commerce_bean',
));
}
/**
* Disable commerceguys_marketplace.
*/
function commerce_kickstart_update_7222() {
_commerce_kickstart_disable_modules(array(
'commerceguys_marketplace',
));
}
/**
* Rebuild registry now that contributed themes are in contrib subfolder.
*/
function commerce_kickstart_update_7223() {
registry_rebuild();
}
/**
* Enable Administration Views.
*/
function commerce_kickstart_update_7224() {
module_enable(array(
'admin_views',
));
}
/**
* Enable the Distribution Update Status Manager module.
*/
function commerce_kickstart_update_7225() {
module_enable(array(
'distro_update',
));
}
/**
* Disable the Distribution Update Status Manager module.
*/
function commerce_kickstart_update_7226() {
// Causing too much grief with security warnings about modules.
module_disable(array(
'distro_update',
));
}
/**
* Re-enable the Distribution Update Status Manager module.
*/
function commerce_kickstart_update_7227() {
module_enable(array(
'distro_update',
));
}
/**
* Remove commerce_kickstart_dfp.
*/
function commerce_kickstart_update_7228() {
db_delete('system')
->condition('name', 'commerce_kickstart_dfp')
->condition('type', 'module')
->execute();
variable_del('commerce_kickstart_dfp_eula');
}
/**
* Rebuild registry after Rules 2.12 update.
*/
function commerce_kickstart_update_7229() {
registry_rebuild();
}
Functions
Name | Description |
---|---|
commerce_kickstart_configure_store_form | Task callback: returns the form allowing the user to add example store content on install. |
commerce_kickstart_configure_store_form_submit | Submit callback: creates the requested sample content. |
commerce_kickstart_import_content | Task callback: return a batch API array with the products to be imported. |
commerce_kickstart_install | Implements hook_install(). |
commerce_kickstart_install_additional_modules | Task callback: uses Batch API to import modules based on user selection. Installs all demo store modules if requested, or any modules providing additional functionality to the base install. |
commerce_kickstart_install_finished | Custom installation task; perform final steps and redirect the user to the new site if there are no errors. |
commerce_kickstart_install_tasks | Implements hook_install_tasks(). |
commerce_kickstart_install_tasks_alter | Implements hook_install_tasks_alter(). |
commerce_kickstart_update_7200 | Update the admin theme from "Commerce Kickstart Admin Theme" to "Shiny". |
commerce_kickstart_update_7201 | Flush caches and rebuild features. |
commerce_kickstart_update_7202 | Update Search API integration to work with Commerce 1.4 |
commerce_kickstart_update_7203 | Remove the old price sort. |
commerce_kickstart_update_7204 | Enable the commerce_backoffice_content module. |
commerce_kickstart_update_7205 | Replace the collection view by a view based on the product display index. |
commerce_kickstart_update_7206 | Enable the commerce_kickstart_product_ui on the no demo store. |
commerce_kickstart_update_7207 | Enable facetapi blocks + assign them in the sidebar_first region. |
commerce_kickstart_update_7208 | Enable commerce_add_to_cart_confirmation. |
commerce_kickstart_update_7209 | Check and remove sorts on non indexed fields. |
commerce_kickstart_update_7210 | Enable automatic title replacement for node and commerce product bundles. |
commerce_kickstart_update_7211 | Enable commerce_message. |
commerce_kickstart_update_7212 | Disable commerce_kickstart_checkout_redirect. |
commerce_kickstart_update_7213 | Update the admin theme from "Shiny" to "Commerce Kickstart Admin Theme". |
commerce_kickstart_update_7214 | Enable the Commerce Guys Marketplace module. |
commerce_kickstart_update_7215 | Disable commerce_kickstart_service_provider. |
commerce_kickstart_update_7216 | Revert body field to text with summary type. |
commerce_kickstart_update_7217 | Enable Inline Conditions (Needed by Commerce Discount). |
commerce_kickstart_update_7218 | Remove jirafe. |
commerce_kickstart_update_7219 | Remove Commerce Kickstart payment example and enable Commerce payment example. |
commerce_kickstart_update_7220 | Configure Chosen. |
commerce_kickstart_update_7221 | Remove modules that are no longer used (bean, commerce_bean). |
commerce_kickstart_update_7222 | Disable commerceguys_marketplace. |
commerce_kickstart_update_7223 | Rebuild registry now that contributed themes are in contrib subfolder. |
commerce_kickstart_update_7224 | Enable Administration Views. |
commerce_kickstart_update_7225 | Enable the Distribution Update Status Manager module. |
commerce_kickstart_update_7226 | Disable the Distribution Update Status Manager module. |
commerce_kickstart_update_7227 | Re-enable the Distribution Update Status Manager module. |
commerce_kickstart_update_7228 | Remove commerce_kickstart_dfp. |
commerce_kickstart_update_7229 | Rebuild registry after Rules 2.12 update. |
commerce_kickstart_update_dependencies | Implements hook_update_dependencies(). |
install_welcome | Task callback: shows the welcome screen. |
install_welcome_submit | |
_commerce_kickstart_disable_modules | Disables the passed modules by removing their entries from the system table. |
_commerce_kickstart_filter_dependencies | array_filter() callback used to filter out already installed dependencies. |
_commerce_kickstart_set_theme | Force-set a theme at any point during the execution of the request. |