/** * Form submit handler for the theme settings form. */ function at_core_submit_layouts(&$form, &$form_state) { $build_info = $form_state->getBuildInfo(); $values = $form_state->getValues(); $theme = $build_info['args'][0]; // Generate and save a new layout. if (isset($values['settings_layouts_enable']) && $values['settings_layouts_enable'] == 1) { $generateLayout = new LayoutSubmit($theme, $values); // Update the themes info file with new regions. $generateLayout->saveLayoutRegions(); // Build and save the suggestions layout css files. $generateLayout->saveLayoutSuggestionsCSS(); // Build and save the suggestions twig templates. $generateLayout->saveLayoutSuggestionsMarkup(); // Add a new suggestion to the page suggestions array in config. if (!empty($values['ts_name'])) { $suggestion = trim($values['ts_name']); $clean_suggestion = str_replace('-', '_', $suggestion); $values["settings_suggestion_page__$clean_suggestion"] = $clean_suggestion; } // Delete suggestion files $templates_directory = drupal_get_path('theme', $theme) . '/templates/page'; $css_directory = $values['settings_generated_files_path']; foreach ($values as $values_key => $values_value) { if (substr($values_key, 0, 18) === 'delete_suggestion_') { if ($values_value === 1) { $delete_suggestion_keys[] = Unicode::substr($values_key, 18); } } } if (isset($delete_suggestion_keys)) { foreach ($delete_suggestion_keys as $suggestion_to_remove) { $formatted_suggestion = str_replace('_', '-', $suggestion_to_remove); $template_file_path = $templates_directory . '/' . $formatted_suggestion . '.html.twig'; $css_file_path = $css_directory . '/' . $theme . '--layout__' . $formatted_suggestion . '.css'; if (file_exists($template_file_path)) {unlink($template_file_path);} if (file_exists($css_file_path)) {unlink($css_file_path);} } } } // Flush all caches. This is the only realy reliable way I have found to ensure // new templates and layouts work correctly. drupal_flush_all_caches(); // Manage settings and configuration. // Must get mutable config otherwise bad things happen. $config = \Drupal::configFactory()->getEditable($theme . '.settings'); $convertToConfig = new ThemeSettingsConfig(); $convertToConfig->settingsConvertToConfig($values, $config); }
/** * Form submit handler for the Extension settings. * @param $form * @param $form_state */ function at_core_submit_extension_settings(&$form, &$form_state) { $build_info = $form_state->getBuildInfo(); $values = $form_state->getValues(); $theme = $build_info['args'][0]; $at_core_path = drupal_get_path('theme', 'at_core'); // Don't let this timeout easily. set_time_limit(60); // Path to save generated CSS files. $generated_files_path = $values['settings_generated_files_path']; if ($values['settings_enable_extensions'] === 1) { // Require submit handlers and helper functions for extensions. if (isset($values['settings_enable_fonts']) && $values['settings_enable_fonts'] === 1 || isset($values['settings_enable_titles']) && $values['settings_enable_titles'] === 1) { require_once $at_core_path . '/forms/ext/fonts.inc'; require_once $at_core_path . '/forms/ext/fonts_submit.php'; require_once $at_core_path . '/forms/ext/titles_submit.php'; } // Submit handler for Fonts. if (isset($values['settings_enable_fonts']) && $values['settings_enable_fonts'] === 1) { // Returns modified values to pass in new settings for typekit and google fonts. $values = at_core_submit_fonts($values, $generated_files_path); } // Submit handler for Titles. if (isset($values['settings_enable_titles']) && $values['settings_enable_titles'] === 1) { at_core_submit_titles($values, $generated_files_path); } // Submit handler for Markup Overrides. if (isset($values['settings_enable_markup_overrides']) && $values['settings_enable_markup_overrides'] === 1) { // Breadcrumbs if (!empty($values['settings_breadcrumb_separator'])) { require_once $at_core_path . '/forms/ext/breadcrumb_submit.php'; at_core_submit_breadcrumb($values, $generated_files_path); } } // Submit handler for Mobile blocks. if (isset($values['settings_enable_mobile_blocks']) && $values['settings_enable_mobile_blocks'] === 1) { require_once $at_core_path . '/forms/ext/mobile_blocks_submit.php'; at_core_submit_mobile_blocks($values, $theme, $generated_files_path); } // Submit handler for Custom CSS. if (isset($values['settings_enable_custom_css']) && $values['settings_enable_custom_css'] === 1) { require_once $at_core_path . '/forms/ext/custom_css_submit.php'; at_core_submit_custom_css($values, $generated_files_path); } } // Flush caches. I really, really tried to avoid this, but if you know a better // way of always clearing twig, CSS and the registry? drupal_flush_all_caches(); // Manage settings and configuration. // Must get mutable config otherwise bad things happen. $config = \Drupal::configFactory()->getEditable($theme . '.settings'); $convertToConfig = new ThemeSettingsConfig(); $convertToConfig->settingsExtensionsConvertToConfig($values, $config); drupal_set_message(t('Extensions configuration saved.'), 'status'); //$performance_url = Url::fromRoute('system.performance_settings')->setOptions(array('attributes' => array('target' => '_blank'))); //drupal_set_message(t('Extensions configuration saved. If settings have not taken effect, please <b>@perm</b>.', array('@perm' => \Drupal::l(t('clear the cache'), $performance_url))), 'status'); }
/** * Form submit handler for the theme settings form. */ function at_core_submit_extension_settings(&$form, &$form_state) { $build_info = $form_state->getBuildInfo(); $values = $form_state->getValues(); $theme = $build_info['args'][0]; $at_core_path = drupal_get_path('theme', 'at_core'); // Path to save generated CSS files. $generated_files_path = $values['settings_generated_files_path']; if ($values['settings_enable_extensions'] === 1) { // Require submit handlers and helper functions for extensions. TODO - convert to classes and methods? if ((isset($values['settings_enable_fonts']) && $values['settings_enable_fonts'] === 1) || (isset($values['settings_enable_titles']) && $values['settings_enable_titles'] === 1)) { require_once($at_core_path . '/forms/ext/fonts.inc'); require_once($at_core_path . '/forms/ext/fonts_submit.php'); require_once($at_core_path . '/forms/ext/titles_submit.php'); } // Submit handler for Fonts. if (isset($values['settings_enable_fonts']) && $values['settings_enable_fonts'] === 1) { at_core_submit_fonts($values, $theme, $generated_files_path); } // Submit handler for Titles. if (isset($values['settings_enable_titles']) && $values['settings_enable_titles'] === 1) { at_core_submit_titles($values, $theme, $generated_files_path); } // Submit handler for Markup Overrides. if (isset($values['settings_enable_markup_overrides']) && $values['settings_enable_markup_overrides'] === 1) { // Breadcrumbs if (!empty($values['settings_breadcrumb_separator'])) { require_once($at_core_path . '/forms/ext/breadcrumb_submit.php'); at_core_submit_breadcrumb($values, $theme, $generated_files_path); } // Login block. if (isset($values['settings_horizontal_login_block']) && $values['settings_horizontal_login_block'] === 1) { require_once($at_core_path . '/forms/ext/login_block_submit.php'); at_core_submit_login_block($values, $theme, $generated_files_path); } } // Submit handler for Mobile blocks. if (isset($values['settings_enable_mobile_blocks']) && $values['settings_enable_mobile_blocks'] === 1) { require_once($at_core_path . '/forms/ext/mobile_blocks_submit.php'); at_core_submit_mobile_blocks($values, $theme, $generated_files_path); } // Submit handler for Custom CSS. if (isset($values['settings_enable_custom_css']) && $values['settings_enable_custom_css'] === 1) { require_once($at_core_path . '/forms/ext/custom_css_submit.php'); at_core_submit_custom_css($values, $theme, $generated_files_path); } } // Flush all caches, this is the only 100% reliable way to make sure all settings are applied. drupal_flush_all_caches(); // Manage settings and configuration. // Must get mutable config otherwise bad things happen. $config = \Drupal::configFactory()->getEditable($theme . '.settings'); $convertToConfig = new ThemeSettingsConfig(); $convertToConfig->settingsConvertToConfig($values, $config); drupal_set_message(t('Extensions configuration saved. Cache cleared.'), 'status'); }
/** * Form submit handler for the Layout settings. * @param $form * @param $form_state */ function at_core_submit_layouts(&$form, &$form_state) { $build_info = $form_state->getBuildInfo(); $values = $form_state->getValues(); $theme = $build_info['args'][0]; // Don't let this timeout easily. set_time_limit(60); // Generate and save a new layout. if (isset($values['settings_layouts_enable']) && $values['settings_layouts_enable'] == 1) { $generateLayout = new LayoutSubmit($theme, $values); // Update the themes info file with new regions. $generateLayout->saveLayoutRegions(); // Build and save the suggestions layout css files. $generateLayout->saveLayoutSuggestionsCSS(); // Build and save the suggestions twig templates. $generateLayout->saveLayoutSuggestionsMarkup(); // Add a new suggestion to the page suggestions array in config. if (!empty($values['ts_name'])) { $suggestion = trim($values['ts_name']); $clean_suggestion = str_replace('-', '_', $suggestion); $values["settings_suggestion_page__{$clean_suggestion}"] = $clean_suggestion; } // Delete suggestion files $templates_directory = drupal_get_path('theme', $theme) . '/templates/generated'; $css_directory = $values['settings_generated_files_path']; foreach ($values as $values_key => $values_value) { if (substr($values_key, 0, 18) === 'delete_suggestion_') { if ($values_value === 1) { $delete_suggestion_keys[] = Unicode::substr($values_key, 18); } } } if (isset($delete_suggestion_keys)) { foreach ($delete_suggestion_keys as $suggestion_to_remove) { $formatted_suggestion = str_replace('_', '-', $suggestion_to_remove); $template_file_name = $formatted_suggestion . '.html.twig'; $css_file_name = $theme . '.layout.' . $formatted_suggestion . '.css'; $template_file_path = "{$templates_directory}/{$template_file_name}"; $css_file_path = "{$css_directory}/{$css_file_name}"; $files_to_delete[] = $template_file_name; $files_to_delete[] = $css_file_name; if (file_exists($template_file_path)) { unlink($template_file_path); } if (file_exists($css_file_path)) { unlink($css_file_path); } } } } if (isset($files_to_delete)) { $deleted_files_message_list = array('#theme' => 'item_list', '#items' => $files_to_delete); drupal_set_message(t('The following <b>files</b> were removed: @removed_files', array('@removed_files' => \Drupal::service('renderer')->renderPlain($deleted_files_message_list))), 'status'); } // Flush caches. I really, really tried to avoid this, but if you know a better // way of always clearing twig, CSS and the registry? drupal_flush_all_caches(); // Manage settings and configuration. $config = \Drupal::configFactory()->getEditable($theme . '.settings'); $convertToConfig = new ThemeSettingsConfig(); $convertToConfig->settingsLayoutConvertToConfig($values, $config); //$performance_url = Url::fromRoute('system.performance_settings')->setOptions(array('attributes' => array('target' => '_blank'))); //drupal_set_message(t('Layout settings saved. If settings have not taken effect, please <b>@perm</b>.', array('@perm' => \Drupal::l(t('clear the cache'), $performance_url))), 'status'); }