Commit c435b714 authored by webchick's avatar webchick

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

parent 4009f8f7
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
......
......@@ -60,14 +60,4 @@ public function testLanguageEditLocalTasks() {
));
}
/**
* Tests language date format local tasks.
*/
public function testLanguageDateLocalTasks() {
$this->assertLocalTasks('system.date_format_language_overview', array(
0 => array('system.date_format_language_overview'),
));
}
}
......@@ -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'
......
......@@ -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'
......@@ -4,7 +4,6 @@ label: 'HTML Date'
status: true
langcode: en
locked: true
locales: { }
pattern:
php: Y-m-d
intl: yyyy-MM-dd
......@@ -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'
......@@ -4,7 +4,6 @@ label: 'HTML Month'
status: true
langcode: en
locked: true
locales: { }
pattern:
php: Y-m
intl: Y-MM
......@@ -4,7 +4,6 @@ label: 'HTML Time'
status: true
langcode: en
locked: true
locales: { }
pattern:
php: 'H:i:s'
intl: 'H:mm:ss'
......@@ -4,7 +4,6 @@ label: 'HTML Week'
status: true
langcode: en
locked: true
locales: { }
pattern:
php: Y-\WW
intl: 'Y-''W''WW'
......@@ -4,7 +4,6 @@ label: 'HTML Year'
status: true
langcode: en
locked: true
locales: { }
pattern:
php: Y
intl: Y
......@@ -4,7 +4,6 @@ label: 'HTML Yearless date'
status: true
langcode: en
locked: true
locales: { }
pattern:
php: m-d
intl: MM-d
......@@ -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'
......@@ -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'
......@@ -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'
<?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);
}
}
......@@ -39,44 +39,6 @@ public function getPattern($type = DrupalDateTime::PHP);
*/
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.
*
......
......@@ -78,11 +78,6 @@ class DateFormat extends ConfigEntityBase implements DateFormatInterface {
*/
protected $locked = FALSE;
/**
* @var array
*/
protected $locales = array();
/**
* {@inheritdoc}
*/
......@@ -90,7 +85,6 @@ public function getExportProperties() {
$properties = parent::getExportProperties();
$names = array(
'locked',
'locales',
'pattern',
);
foreach ($names as $name) {
......@@ -114,37 +108,6 @@ public function setPattern($pattern, $type = DrupalDateTime::PHP) {
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 @@ public function isLocked() {
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();
}
}
}
}
}
......@@ -11,6 +11,7 @@
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 @@ public function form(array $form, array &$form_state) {
'#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);
}
......
<?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';
}
}
<?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);
}
}
<?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');
}
}
......@@ -124,28 +124,6 @@ function testDateFormatConfiguration() {
$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.
*/
......
......@@ -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.