Index: i18n.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/i18n/i18n.module,v retrieving revision 1.36.2.16 diff -u -p -r1.36.2.16 i18n.module --- i18n.module 30 Oct 2007 17:12:35 -0000 1.36.2.16 +++ i18n.module 1 Jan 2008 19:50:51 -0000 @@ -609,6 +609,7 @@ function _i18n_goto($lang){ * off = No language conditions inserted * simple = Only current language and no language * mixed = Only current and default languages + * preferred = Current language or else (if available) default language, and no language * strict = Only current language * default = Only default language * user = User defined, in the module's settings page @@ -639,6 +640,7 @@ function _i18n_selection_mode(){ return array( 'simple' => t('Only current language and no language'), 'mixed' => t('Only current and default languages and no language'), + 'preferred' => t('Current language or else (if available) default language, and no language'), 'default' => t('Only default language and no language'), 'strict' => t('Only current language'), 'off' => t('All content. No language conditions apply'), @@ -740,8 +742,12 @@ function i18n_db_rewrite_sql($query, $pr if (preg_match("/WHERE.*\s$primary_table.nid\s*=\s*(\d|%d)/", $query)) return; // If language conditions already there, get out if (preg_match("/i18n/", $query)) return; - - $result['join'] = "LEFT JOIN {i18n_node} i18n ON $primary_table.nid = i18n.nid"; + if ($mode == 'preferred') { + $result['join'] = "LEFT JOIN {i18n_node} i18n ON $primary_table.nid = i18n.nid LEFT JOIN {i18n_node} i18n2 ON i18n.trid = i18n2.trid and i18n2.language = '".i18n_get_lang()."'"; + } + else { + $result['join'] = "LEFT JOIN {i18n_node} i18n ON $primary_table.nid = i18n.nid"; + } $result['where'] = i18n_db_rewrite_where('i18n', $mode); return $result; case 't': @@ -771,6 +777,13 @@ function i18n_db_rewrite_where($alias, $ return "$alias.language ='".i18n_get_lang()."' OR $alias.language ='' OR $alias.language IS NULL" ; case 'mixed': return "$alias.language ='".i18n_get_lang()."' OR $alias.language ='".i18n_default_language()."' OR $alias.language ='' OR $alias.language IS NULL" ; + case 'preferred': + if ($alias == "i18n"){ + return "$alias.nid IS NULL OR $alias.language ='".i18n_get_lang()."' OR ($alias.language ='".i18n_default_language()."' AND $alias"."2.nid IS NULL)" ; + } + else { + return "$alias.language ='".i18n_get_lang()."' OR $alias.language ='".i18n_default_language()."' OR $alias.language ='' OR $alias.language IS NULL" ; + } case 'strict': return "$alias.language ='".i18n_get_lang()."'" ; case 'node':