FINAL suepr merge step : added all modules to this super repos
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
; $Id: xmlsitemap_i18n.info,v 1.3 2009/12/22 23:56:59 davereid Exp $
|
||||
name = XML sitemap internationalization
|
||||
description = Enables multilingual XML sitemaps.
|
||||
package = XML sitemap
|
||||
core = 7.x
|
||||
dependencies[] = xmlsitemap
|
||||
dependencies[] = i18n
|
||||
files[] = xmlsitemap_i18n.module
|
||||
files[] = xmlsitemap_i18n.test
|
||||
|
||||
; Information added by drupal.org packaging script on 2010-01-24
|
||||
version = "7.x-2.x-dev"
|
||||
core = "7.x"
|
||||
project = "xmlsitemap"
|
||||
datestamp = "1264335489"
|
||||
|
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
// $Id: xmlsitemap_i18n.module,v 1.4 2009/12/23 22:29:16 davereid Exp $
|
||||
|
||||
/**
|
||||
* Implements hook_form_FORM_ID_alter().
|
||||
*
|
||||
* Set the regeneration needed flag if multilingual settings are changed.
|
||||
*/
|
||||
function xmlsitemap_i18n_form_i18n_admin_settings_alter(&$form, $form_state) {
|
||||
array_unshift($form['#submit'], 'xmlsitemap_form_submit_flag_regenerate');
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_form_FORM_ID_alter().
|
||||
*
|
||||
* Allow the user to have multilingual sitemaps.
|
||||
*/
|
||||
function xmlsitemap_i18n_form_xmlsitemap_settings_form_alter(&$form, $form_state) {
|
||||
$form['xmlsitemap']['xmlsitemap_languages']['#options'] = locale_language_list();
|
||||
$form['xmlsitemap']['xmlsitemap_languages']['#description'] = t("Each language's sitemap will respect the <a href=\"@i18n-settings\">multilingual content selection mode</a>.", array('@i18n-settings' => url('admin/settings/language/i18n')));
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_query_TAG_alter().
|
||||
*
|
||||
* @see i18n_db_rewrite_where()
|
||||
*/
|
||||
function xmlsitemap_i18n_query_xmlsitemap_alter(QueryAlterableInterface $query) {
|
||||
// Get languages to simplify query building.
|
||||
$mode = variable_get('i18n_selection_mode', 'simple');
|
||||
$current = $query->getMetaData('language')->language;
|
||||
$default = i18n_default_language();
|
||||
|
||||
if ($mode == 'mixed' && $current == $default) {
|
||||
// If mode is mixed but current = default, is the same as 'simple'.
|
||||
$mode = 'simple';
|
||||
}
|
||||
|
||||
switch ($mode) {
|
||||
case 'simple':
|
||||
// Current language and language neutral.
|
||||
$query->condition('language', array($current, LANGUAGE_NONE));
|
||||
break;
|
||||
case 'mixed':
|
||||
// Mixed current language (if available) or default language (if not) and language neutral.
|
||||
$query->condition('language', array($current, $default, LANGUAGE_NONE));
|
||||
break;
|
||||
case 'default':
|
||||
// Only default language and language neutral.
|
||||
$query->condition('language', array($default, LANGUAGE_NONE));
|
||||
break;
|
||||
case 'strict':
|
||||
// Only current language (for nodes), simple for all other types.
|
||||
$node_condition = db_and();
|
||||
$node_condition->condition('type', 'node');
|
||||
$node_condition->condition('language', $current);
|
||||
$normal_condition = db_and();
|
||||
$normal_condition->condition('type', 'node', '<>');
|
||||
$normal_condition->condition('language', array($current, LANGUAGE_NONE));
|
||||
$condition = db_or();
|
||||
$condition->condition($node_condition);
|
||||
$condition->condition($normal_condition);
|
||||
$query->condition($condition);
|
||||
break;
|
||||
case 'off':
|
||||
// All content. No language conditions apply.
|
||||
break;
|
||||
}
|
||||
}
|
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
// $Id: xmlsitemap_i18n.test,v 1.5 2010/01/24 03:56:51 davereid Exp $
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Unit tests for the xmlsitemap_i18n module.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Common base test class for XML sitemap internationalization tests.
|
||||
*/
|
||||
class XMLSitemapI18nWebTestCase extends XMLSitemapTestHelper {
|
||||
protected $admin_user;
|
||||
|
||||
/**
|
||||
* Set up an administrative user account and testing keys.
|
||||
*/
|
||||
function setUp() {
|
||||
// Call parent::setUp() allowing test cases to pass further modules.
|
||||
$modules = func_get_args();
|
||||
$modules = array_merge(array('locale', 'translation', 'i18n', 'xmlsitemap_i18n'), $modules);
|
||||
call_user_func_array(array('parent', 'setUp'), $modules);
|
||||
|
||||
// Add predefined language and reset the locale cache.
|
||||
require_once DRUPAL_ROOT . '/includes/locale.inc';
|
||||
locale_add_language('fr', NULL, NULL, LANGUAGE_LTR, '', 'fr');
|
||||
|
||||
variable_set('xmlsitemap_languages', array('en', 'fr'));
|
||||
variable_set('language_negotiation', LANGUAGE_NEGOTIATION_PATH);
|
||||
}
|
||||
}
|
||||
|
||||
class XMLSitemapI18nTest extends XMLSitemapI18nWebTestCase {
|
||||
public static function getInfo() {
|
||||
return array(
|
||||
'name' => 'XML sitemap i18n tests',
|
||||
'description' => 'Functional and integration tests for the XML sitemap and internationalization modules.',
|
||||
'group' => 'XML sitemap',
|
||||
'dependencies' => array('i18n'),
|
||||
);
|
||||
}
|
||||
|
||||
function testLanguageSelection() {
|
||||
// Create our three different language nodes.
|
||||
$node = $this->addSitemapLink(array('type' => 'node', 'language' => LANGUAGE_NONE));
|
||||
$node_en = $this->addSitemapLink(array('type' => 'node', 'language' => 'en'));
|
||||
$node_fr = $this->addSitemapLink(array('type' => 'node', 'language' => 'fr'));
|
||||
|
||||
// Create three non-node language nodes.
|
||||
$link = $this->addSitemapLink(array('language' => LANGUAGE_NONE));
|
||||
$link_en = $this->addSitemapLink(array('language' => 'en'));
|
||||
$link_fr = $this->addSitemapLink(array('language' => 'fr'));
|
||||
|
||||
variable_set('i18n_selection_mode', 'off');
|
||||
$this->regenerateSitemap();
|
||||
$this->drupalGetSitemap('en');
|
||||
$this->assertRawSitemapLinks($node, $node_en, $node_fr, $link, $link_en, $link_fr);
|
||||
$this->drupalGetSitemap('fr');
|
||||
$this->assertRawSitemapLinks($node, $node_en, $node_fr, $link, $link_en, $link_fr);
|
||||
|
||||
variable_set('i18n_selection_mode', 'simple');
|
||||
$this->regenerateSitemap();
|
||||
$this->drupalGetSitemap('en');
|
||||
$this->assertRawSitemapLinks($node, $node_en, $link, $link_en);
|
||||
$this->assertNoRawSitemapLinks($node_fr, $link_fr);
|
||||
$this->drupalGetSitemap('fr');
|
||||
$this->assertRawSitemapLinks($node, $node_fr, $link, $link_fr);
|
||||
$this->assertNoRawSitemapLinks($node_en, $link_en);
|
||||
|
||||
variable_set('i18n_selection_mode', 'mixed');
|
||||
$this->regenerateSitemap();
|
||||
$this->drupalGetSitemap('en');
|
||||
$this->assertRawSitemapLinks($node, $node_en, $link, $link_en);
|
||||
$this->assertNoRawSitemapLinks($node_fr, $link_fr);
|
||||
$this->drupalGetSitemap('fr');
|
||||
$this->assertRawSitemapLinks($node, $node_en, $node_fr, $link, $link_en, $link_fr);
|
||||
|
||||
variable_set('i18n_selection_mode', 'default');
|
||||
$this->regenerateSitemap();
|
||||
$this->drupalGetSitemap('en');
|
||||
$this->assertRawSitemapLinks($node, $node_en, $link, $link_en);
|
||||
$this->assertNoRawSitemapLinks($node_fr, $link_fr);
|
||||
$this->drupalGetSitemap('fr');
|
||||
$this->assertRawSitemapLinks($node, $node_en, $link, $link_en);
|
||||
$this->assertNoRawSitemapLinks($node_fr, $link_fr);
|
||||
|
||||
// With strict mode, the language neutral node should not be found, but the
|
||||
// language neutral non-node should be.
|
||||
variable_set('i18n_selection_mode', 'strict');
|
||||
$this->regenerateSitemap();
|
||||
$this->drupalGetSitemap('en');
|
||||
$this->assertRawSitemapLinks($node_en, $link, $link_en);
|
||||
$this->assertNoRawSitemapLinks($node, $node_fr, $link_fr);
|
||||
$this->drupalGetSitemap('fr');
|
||||
$this->assertRawSitemapLinks($node_fr, $link, $link_fr);
|
||||
$this->assertNoRawSitemapLinks($node, $node_en, $link_en);
|
||||
}
|
||||
}
|
||||
|
||||
class XMLSitemapI18nNodeTest extends XMLSitemapI18nWebTestCase {
|
||||
public static function getInfo() {
|
||||
return array(
|
||||
'name' => 'XML sitemap i18n node tests',
|
||||
'description' => 'Functional and integration tests for the XML sitemap node and internationalization modules.',
|
||||
'group' => 'XML sitemap',
|
||||
'dependencies' => array('i18n'),
|
||||
);
|
||||
}
|
||||
|
||||
function setUp() {
|
||||
parent::setUp('xmlsitemap_node');
|
||||
|
||||
variable_set('language_content_type_page', 1);
|
||||
$this->admin_user = $this->drupalCreateUser(array('administer nodes'));
|
||||
$this->drupalLogin($this->admin_user);
|
||||
}
|
||||
|
||||
function testNodeLanguageData() {
|
||||
$node = $this->drupalCreateNode(array());
|
||||
|
||||
$this->drupalPost('node/' . $node->nid . '/edit', array('language' => 'en'), t('Save'));
|
||||
$node = node_load($node->nid, NULL, TRUE);
|
||||
$this->assertIdentical($node->xmlsitemap['language'], 'en');
|
||||
|
||||
$this->drupalPost('node/' . $node->nid . '/edit', array('language' => 'fr'), t('Save'));
|
||||
$node = node_load($node->nid, NULL, TRUE);
|
||||
$this->assertIdentical($node->xmlsitemap['language'], 'fr');
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user