Issue #2127941 by Gábor Hojtsy: Remove two (out of 3) bogus and duplicate date languages UIs.

8.0.x
webchick 2013-11-11 10:16:09 -08:00
parent 4009f8f723
commit c435b714e6
25 changed files with 7 additions and 673 deletions

View File

@ -1,9 +1,3 @@
system.date_format_language_overview:
title: 'Localize'
route_name: system.date_format_language_overview
tab_root_id: system.date_format_list
weight: -8
language.admin_overview:
title: 'List'
route_name: language.admin_overview

View File

@ -60,14 +60,4 @@ class LanguageLocalTasks extends LocalTaskIntegrationTest {
));
}
/**
* Tests language date format local tasks.
*/
public function testLanguageDateLocalTasks() {
$this->assertLocalTasks('system.date_format_language_overview', array(
0 => array('system.date_format_language_overview'),
));
}
}

View File

@ -130,12 +130,6 @@ system.date_format.*:
locked:
type: boolean
label: 'Locked'
locales:
type: sequence
label: 'Languages'
sequence:
- type: string
label: 'Language'
pattern:
type: mapping
label: 'Format string'

View File

@ -4,7 +4,6 @@ label: 'Fallback date format'
status: true
langcode: en
locked: true
locales: { }
pattern:
php: 'D, m/d/Y - H:i'
intl: 'ccc, MM/dd/yyyy - kk:mm'

View File

@ -4,7 +4,6 @@ label: 'HTML Date'
status: true
langcode: en
locked: true
locales: { }
pattern:
php: Y-m-d
intl: yyyy-MM-dd

View File

@ -4,7 +4,6 @@ label: 'HTML Datetime'
status: true
langcode: en
locked: true
locales: { }
pattern:
php: 'Y-m-d\TH:i:sO'
intl: 'yyyy-MM-dd''T''kk:mm:ssZZ'

View File

@ -4,7 +4,6 @@ label: 'HTML Month'
status: true
langcode: en
locked: true
locales: { }
pattern:
php: Y-m
intl: Y-MM

View File

@ -4,7 +4,6 @@ label: 'HTML Time'
status: true
langcode: en
locked: true
locales: { }
pattern:
php: 'H:i:s'
intl: 'H:mm:ss'

View File

@ -4,7 +4,6 @@ label: 'HTML Week'
status: true
langcode: en
locked: true
locales: { }
pattern:
php: Y-\WW
intl: 'Y-''W''WW'

View File

@ -4,7 +4,6 @@ label: 'HTML Year'
status: true
langcode: en
locked: true
locales: { }
pattern:
php: Y
intl: Y

View File

@ -4,7 +4,6 @@ label: 'HTML Yearless date'
status: true
langcode: en
locked: true
locales: { }
pattern:
php: m-d
intl: MM-d

View File

@ -4,7 +4,6 @@ label: 'Default long date'
status: true
langcode: en
locked: false
locales: { }
pattern:
php: 'l, F j, Y - H:i'
intl: 'EEEE, LLLL d, yyyy - kk:mm'

View File

@ -4,7 +4,6 @@ label: 'Default medium date'
status: true
langcode: en
locked: false
locales: { }
pattern:
php: 'D, m/d/Y - H:i'
intl: 'ccc, MM/dd/yyyy - kk:mm'

View File

@ -4,7 +4,6 @@ label: 'Default short date'
status: true
langcode: en
locked: false
locales: { }
pattern:
php: 'm/d/Y - H:i'
intl: 'MM/dd/yyyy - kk:mm'

View File

@ -1,51 +0,0 @@
<?php
/**
* @file
* Contains \Drupal\system\Controller\LanguageDateFormatController.
*/
namespace Drupal\system\Controller;
/**
* Controller for Language Date Format handling.
*/
class DateFormatLanguageController {
/**
* Displays edit date format links for each language.
*
* @return array
* Render array of overview page.
*/
public function overviewPage() {
$header = array(t('Language'), t('Operations'));
$languages = language_list();
foreach ($languages as $langcode => $language) {
$row = array();
$row[] = $language->name;
$links = array();
$links['edit'] = array(
'title' => t('Edit'),
'href' => 'admin/config/regional/date-time/locale/' . $langcode . '/edit',
);
$links['reset'] = array(
'title' => t('Reset'),
'href' => 'admin/config/regional/date-time/locale/' . $langcode . '/reset',
);
$row[] = array(
'data' => array(
'#type' => 'operations',
'#links' => $links,
),
);
$rows[] = $row;
}
return array('#theme' => 'table', '#header' => $header, '#rows' => $rows);
}
}

View File

@ -39,44 +39,6 @@ interface DateFormatInterface extends ConfigEntityInterface {
*/
public function setPattern($pattern, $type = DrupalDateTime::PHP);
/**
* Adds a locale for this date format.
*
* @param string $locale
* The locale to add for this format.
*
* @return self
* Returns the date format.
*/
public function addLocale($locale);
/**
* Sets the locales for this date format. This overwrites existing locales.
*
* @param array $locales
* The array of locales to set for this format.
*
* @return self
* Returns the date format.
*/
public function setLocales(array $locales);
/**
* Returns an array of the locales for this date format.
*
* @return array
* An array of locale names.
*/
public function getLocales();
/**
* Determines if this data format has any locales.
*
* @return bool
* TRUE if the date format has locales, FALSE otherwise.
*/
public function hasLocales();
/**
* Determines if this date format is locked.
*

View File

@ -78,11 +78,6 @@ class DateFormat extends ConfigEntityBase implements DateFormatInterface {
*/
protected $locked = FALSE;
/**
* @var array
*/
protected $locales = array();
/**
* {@inheritdoc}
*/
@ -90,7 +85,6 @@ class DateFormat extends ConfigEntityBase implements DateFormatInterface {
$properties = parent::getExportProperties();
$names = array(
'locked',
'locales',
'pattern',
);
foreach ($names as $name) {
@ -114,37 +108,6 @@ class DateFormat extends ConfigEntityBase implements DateFormatInterface {
return $this;
}
/**
* {@inheritdoc}
*/
public function getLocales() {
return $this->locales;
}
/**
* {@inheritdoc}
*/
public function setLocales(array $locales) {
$this->locales = $locales;
return $this;
}
/**
* {@inheritdoc}
*/
public function hasLocales() {
return !empty($this->locales);
}
/**
* {@inheritdoc}
*/
public function addLocale($locale) {
$this->locales[] = $locale;
$this->locales = array_unique($this->locales);
return $this;
}
/**
* {@inheritdoc}
*/
@ -152,43 +115,4 @@ class DateFormat extends ConfigEntityBase implements DateFormatInterface {
return (bool) $this->locked;
}
/**
* {@inheritdoc}
*/
public function preSave(EntityStorageControllerInterface $storage_controller) {
parent::preSave($storage_controller);
if ($this->hasLocales()) {
$config_factory = \Drupal::service('config.factory');
$properties = $this->getExportProperties();
$languages = language_list();
// Check if the suggested language codes are configured.
foreach ($this->getLocales() as $langcode) {
if (isset($languages[$langcode])) {
$config_factory->get('locale.config.' . $langcode . '.system.date_format.' . $this->id())
->setData($properties)
->save();
}
}
}
}
/**
* {@inheritdoc}
*/
public static function postDelete(EntityStorageControllerInterface $storage_controller, array $entities) {
parent::postDelete($storage_controller, $entities);
// Clean up the localized entry if required.
if (\Drupal::moduleHandler()->moduleExists('language')) {
$languages = language_list();
foreach ($entities as $entity) {
$format_id = $entity->id();
foreach ($languages as $langcode => $data) {
\Drupal::config("locale.config.$langcode.system.date_format.$format_id")->delete();
}
}
}
}
}

View File

@ -11,6 +11,7 @@ use Drupal\Core\Ajax\AjaxResponse;
use Drupal\Core\Ajax\ReplaceCommand;
use Drupal\Core\Config\Entity\ConfigStorageController;
use Drupal\Core\Datetime\Date;
use Drupal\Core\Language\Language;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Entity\Query\QueryFactory;
@ -168,22 +169,12 @@ abstract class DateFormatFormBase extends EntityFormController {
'#required' => TRUE,
);
$languages = language_list();
$options = array();
foreach ($languages as $langcode => $data) {
$options[$langcode] = $data->name;
}
if (!empty($options)) {
$form['locales'] = array(
'#title' => t('Languages'),
'#type' => 'select',
'#options' => $options,
'#multiple' => TRUE,
'#default_value' => $this->entity->getLocales(),
);
}
$form['langcode'] = array(
'#type' => 'language_select',
'#title' => t('Language'),
'#languages' => Language::STATE_ALL,
'#default_value' => $this->entity->langcode,
);
return parent::form($form, $form_state);
}

View File

@ -1,117 +0,0 @@
<?php
/**
* @file
* Contains \Drupal\system\Form\DateFormatLocalizeResetForm.
*/
namespace Drupal\system\Form;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Form\ConfirmFormBase;
use Drupal\Core\Config\ConfigFactory;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Builds a form for enabling a module.
*/
class DateFormatLocalizeResetForm extends ConfirmFormBase implements ContainerInjectionInterface {
/**
* The language to be reset.
*
* @var \Drupal\Core\Language\Language;
*/
protected $language;
/**
* The config factory.
*
* @var \Drupal\Core\Config\ConfigFactory
*/
protected $configFactory;
/**
* Constructs a DateFormatLocalizeResetForm object.
*
* @param \Drupal\Core\Config\ConfigFactory $config_factory
* The config factory.
*/
public function __construct(ConfigFactory $config_factory) {
$this->configFactory = $config_factory;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('config.factory')
);
}
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'system_date_format_localize_reset_form';
}
/**
* {@inheritdoc}
*/
public function getQuestion() {
return t('Are you sure you want to reset the date formats for %language to the global defaults?', array(
'%language' => $this->language->name,
));
}
/**
* {@inheritdoc}
*/
public function getConfirmText() {
return t('Reset');
}
/**
* {@inheritdoc}
*/
public function getCancelRoute() {
return array(
'route_name' => 'system.date_format_language_overview',
);
}
/**
* {@inheritdoc}
*/
public function getDescription() {
return t('Resetting will remove all localized date formats for this language. This action cannot be undone.');
}
/**
* {@inheritdoc}
*
* @param string $langcode
* The language code.
*
*/
public function buildForm(array $form, array &$form_state, $langcode = NULL) {
$this->language = language_load($langcode);
return parent::buildForm($form, $form_state);
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, array &$form_state) {
foreach (config_get_storage_names_with_prefix('locale.config.' . $this->language->id . '.system.date_format.') as $config_id) {
$this->configFactory->get($config_id)->delete();
}
entity_render_cache_clear();
$form_state['redirect'] = 'admin/config/regional/date-time/locale';
}
}

View File

@ -1,24 +0,0 @@
<?php
/**
* @file
* Contains \Drupal\system\Form\SystemForm.
*/
namespace Drupal\system\Form;
/**
* Temporary form controller for system module.
*/
class SystemForm {
/**
* Wraps system_date_format_localize_form().
*
* @todo Remove system_date_format_localize_form().
*/
public function localizeDateFormat($langcode) {
module_load_include('admin.inc', 'system');
return drupal_get_form('system_date_format_localize_form', $langcode);
}
}

View File

@ -1,114 +0,0 @@
<?php
/**
* @file
* Definition of Drupal\system\Tests\System\DateFormatsLanguageTest.
*/
namespace Drupal\system\Tests\System;
use Drupal\Core\Language\Language;
use Drupal\simpletest\WebTestBase;
/**
* Functional tests for localizing date formats.
*/
class DateFormatsLanguageTest extends WebTestBase {
/**
* Modules to enable.
*
* @var array
*/
public static $modules = array('node', 'locale');
public static function getInfo() {
return array(
'name' => 'Localize date formats',
'description' => 'Tests for the localization of date formats.',
'group' => 'System',
);
}
function setUp() {
parent::setUp();
// Create Article node type.
$this->drupalCreateContentType(array('type' => 'article', 'name' => 'Article'));
// Create and login user.
$admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer languages', 'access administration pages', 'create article content'));
$this->drupalLogin($admin_user);
}
/**
* Functional tests for localizing date formats.
*/
function testLocalizeDateFormats() {
// Add language.
$edit = array(
'predefined_langcode' => 'fr',
);
$this->drupalPostForm('admin/config/regional/language/add', $edit, t('Add language'));
// Set language negotiation.
$language_type = Language::TYPE_INTERFACE;
$edit = array(
"{$language_type}[enabled][language-url]" => TRUE,
);
$this->drupalPostForm('admin/config/regional/language/detection', $edit, t('Save settings'));
// Add new date format for French.
$edit = array(
'id' => 'example_style_fr',
'label' => 'Example Style',
'date_format_pattern' => 'd.m.Y - H:i',
'locales[]' => array('fr'),
);
$this->drupalPostForm('admin/config/regional/date-time/formats/add', $edit, t('Add format'));
// Add new date format for English.
$edit = array(
'id' => 'example_style_en',
'label' => 'Example Style',
'date_format_pattern' => 'j M Y - g:ia',
'locales[]' => array('en'),
);
$this->drupalPostForm('admin/config/regional/date-time/formats/add', $edit, t('Add format'));
// Configure date formats.
$this->drupalGet('admin/config/regional/date-time/locale');
$this->assertText('French', 'Configured languages appear.');
$edit = array(
'date_format_long' => 'example_style_fr',
'date_format_medium' => 'example_style_fr',
'date_format_short' => 'example_style_fr',
);
$this->drupalPostForm('admin/config/regional/date-time/locale/fr/edit', $edit, t('Save configuration'));
$this->assertText(t('Configuration saved.'), 'French date formats updated.');
$edit = array(
'date_format_long' => 'example_style_en',
'date_format_medium' => 'example_style_en',
'date_format_short' => 'example_style_en',
);
$this->drupalPostForm('admin/config/regional/date-time/locale/en/edit', $edit, t('Save configuration'));
$this->assertText(t('Configuration saved.'), 'English date formats updated.');
// Create node content.
$node = $this->drupalCreateNode(array('type' => 'article'));
// Configure format for the node posted date changes with the language.
$this->drupalGet('node/' . $node->id());
$english_date = format_date($node->getCreatedTime(), 'custom', 'j M Y');
$this->assertText($english_date, 'English date format appears');
$this->drupalGet('fr/node/' . $node->id());
$french_date = format_date($node->getCreatedTime(), 'custom', 'd.m.Y');
$this->assertText($french_date, 'French date format appears');
// Make sure we can reset dates back to default.
$this->drupalPostForm('admin/config/regional/date-time/locale/en/reset', array(), t('Reset'));
$this->drupalGet('node/' . $node->id());
$this->assertNoText($english_date, 'English date format does not appear');
}
}

View File

@ -124,28 +124,6 @@ class DateTimeTest extends WebTestBase {
$this->assertFalse($date_format);
}
/**
* Test if the date formats are stored properly.
*/
function testDateFormatStorage() {
$date_format = entity_create('date_format', array(
'id' => 'test_short',
'label' => 'testDateFormatStorage Short Format',
'pattern' => array('php' => 'dmYHis'),
));
$date_format->save();
$format = $date_format->getPattern();
$this->assertEqual('dmYHis', $format, 'Unlocalized date format resides in general config.');
$date_format->addLocale('en')->save();
$format = $date_format->getPattern();
$this->assertEqual('dmYHis', $format, 'Localized date format resides in general config too.');
$format = \Drupal::config('locale.config.en.system.date_format.test_short')->get('pattern.php');
$this->assertEqual('dmYHis', $format, 'Localized date format resides in localized config.');
}
/**
* Test that date formats are sanitized.
*/

View File

@ -779,140 +779,3 @@ function theme_system_themes_page($variables) {
return $output;
}
/**
* Form constructor for the date localization configuration form.
*
* @param $langcode
* The code for the current language.
*
* @see locale_menu()
* @see system_date_format_localize_form_submit()
* @ingroup forms
*
* @deprecated Use \Drupal\system\Form\SystemForm::localizeDateFormat()
*/
function system_date_format_localize_form($form, &$form_state, $langcode) {
// Display the current language name.
$form['language'] = array(
'#type' => 'item',
'#title' => t('Language'),
'#markup' => language_load($langcode)->name,
'#weight' => -10,
);
$form['langcode'] = array(
'#type' => 'value',
'#value' => $langcode,
);
// Get list of available formats.
$date_service = \Drupal::service('date');
$formats = \Drupal::entityManager()
->getStorageController('date_format')
->loadMultiple();
$choices = array();
foreach ($formats as $date_format_id => $format_info) {
// Ignore values that are localized.
if (!$format_info->hasLocales()) {
$choices[$date_format_id] = $date_service->format(REQUEST_TIME, $date_format_id);
}
}
// Get configured formats for each language.
$config_prefix = 'locale.config.' . $langcode . '.system.date_format.';
foreach (config_get_storage_names_with_prefix($config_prefix) as $config_id) {
$date_format_id = substr($config_id, strlen($config_prefix));
$choices[$date_format_id] = $date_service->format(REQUEST_TIME, $date_format_id);
}
// Display a form field for each format type.
foreach ($formats as $date_format_id => $format_info) {
// Show date format select list.
$form['date_formats']['date_format_' . $date_format_id] = array(
'#type' => 'select',
'#title' => check_plain($format_info->label()),
'#attributes' => array('class' => array('date-format')),
'#default_value' => isset($choices[$date_format_id]) ? $date_format_id : 'custom',
'#options' => $choices,
);
}
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save configuration'),
);
return $form;
}
/**
* Form submission handler for system_date_format_localize_form().
*/
function system_date_format_localize_form_submit($form, &$form_state) {
$langcode = $form_state['values']['langcode'];
$formats = entity_load_multiple('date_format');
foreach ($formats as $date_format_id => $format_info) {
if (isset($form_state['values']['date_format_' . $date_format_id])) {
$format = $form_state['values']['date_format_' . $date_format_id];
system_date_format_localize_form_save($langcode, $date_format_id, $formats[$format]);
}
}
drupal_set_message(t('Configuration saved.'));
$form_state['redirect'] = 'admin/config/regional/date-time/locale';
}
/**
* Returns HTML for a locale date format form.
*
* @param $variables
* An associative array containing:
* - form: A render element representing the form.
*
* @ingroup themeable
*/
function theme_system_date_format_localize_form($variables) {
$form = $variables['form'];
$header = array(
'machine_name' => t('Machine Name'),
'pattern' => t('Format'),
);
foreach (element_children($form['date_formats']) as $key) {
$row = array();
$row[] = $form['date_formats'][$key]['#title'];
unset($form['date_formats'][$key]['#title']);
$row[] = array('data' => drupal_render($form['date_formats'][$key]));
$rows[] = $row;
}
$table = array(
'#theme' => 'table',
'#header' => $header,
'#rows' => $rows,
);
$output = drupal_render($form['language']);
$output .= drupal_render($table);
$output .= drupal_render_children($form);
return $output;
}
/**
* Save locale specific date formats to the database.
*
* @param string $langcode
* Language code, can be 2 characters, e.g. 'en' or 5 characters, e.g.
* 'en-CA'.
* @param string $date_format_id
* Date format id, e.g. 'short', 'medium'.
* @param \Drupal\system\DateFormatInterface $format
* The date format entity.
*/
function system_date_format_localize_form_save($langcode, $date_format_id, DateFormatInterface $format) {
$format->addLocale($langcode)->save();
\Drupal::config('locale.config.' . $langcode . '.system.date_format.' . $date_format_id)
->set('pattern', $format->get('pattern'))
->save();
}

View File

@ -189,9 +189,6 @@ function system_theme() {
'system_compact_link' => array(
'variables' => array(),
),
'system_date_format_localize_form' => array(
'render element' => 'form',
),
));
}
@ -815,26 +812,6 @@ function system_menu() {
'type' => MENU_CALLBACK,
);
// Localize date formats.
if (\Drupal::moduleHandler()->moduleExists('language')) {
$items['admin/config/regional/date-time/locale'] = array(
'title' => 'Localize',
'description' => 'Configure date formats for each locale',
'weight' => -8,
'route_name' => 'system.date_format_language_overview',
);
$items['admin/config/regional/date-time/locale/%/edit'] = array(
'title' => 'Localize date formats',
'route_name' => 'system.localize_date_format',
'description' => 'Configure date formats for each locale',
);
$items['admin/config/regional/date-time/locale/%/reset'] = array(
'title' => 'Reset date formats',
'description' => 'Reset localized date formats to global defaults',
'route_name' => 'system.date_format_localize_reset',
);
}
return $items;
}

View File

@ -214,13 +214,6 @@ system.date_format_edit:
requirements:
_entity_access: 'date_format.update'
system.date_format_language_overview:
path: '/admin/config/regional/date-time/locale'
defaults:
_controller: '\Drupal\system\Controller\DateFormatLanguageController::overviewPage'
requirements:
_permission: 'administer site configuration'
system.date_format_delete:
path: '/admin/config/regional/date-time/formats/manage/{date_format}/delete'
defaults:
@ -229,13 +222,6 @@ system.date_format_delete:
requirements:
_entity_access: 'date_format.delete'
system.date_format_localize_reset:
path: '/admin/config/regional/date-time/locale/{langcode}/reset'
defaults:
_form: '\Drupal\system\Form\DateFormatLocalizeResetForm'
requirements:
_permission: 'administer site configuration'
system.modules_list:
path: '/admin/modules'
defaults:
@ -377,13 +363,5 @@ system.batch_page:
requirements:
_access: 'TRUE'
system.localize_date_format:
path: '/admin/config/regional/date-time/locale/{langcode}/edit'
defaults:
_content: '\Drupal\system\Form\SystemForm::localizeDateFormat'
_title: 'Localize date formats'
requirements:
_permission: 'administer site configuration'
system.update:
path: '/core/update.php'