Index: includes/language.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/language.inc,v retrieving revision 1.3 diff -u -p -r1.3 language.inc --- includes/language.inc 13 Apr 2007 08:56:57 -0000 1.3 +++ includes/language.inc 18 Apr 2007 17:31:25 -0000 @@ -100,7 +100,7 @@ function language_url_rewrite(&$path, &$ if (!$options['absolute']) { // Language can be passed as an option, or we go for current language. - $path_language = isset($options['language']) ? $options['language'] : $language; + $path_language = (isset($options['language']) && is_object($options['language'])) ? $options['language'] : $language; switch (variable_get('language_negotiation', LANGUAGE_NEGOTIATION_NONE)) { case LANGUAGE_NEGOTIATION_NONE: Index: modules/locale/locale.module =================================================================== RCS file: /cvs/drupal/drupal/modules/locale/locale.module,v retrieving revision 1.166 diff -u -p -r1.166 locale.module --- modules/locale/locale.module 15 Apr 2007 15:36:10 -0000 1.166 +++ modules/locale/locale.module 18 Apr 2007 17:31:25 -0000 @@ -175,17 +175,46 @@ function locale_user($type, $edit, &$use /** * Implementation of hook_form_alter(). Adds language fields to forms. */ -function locale_form_alter($form_id, &$form) { +function locale_form_alter(&$form, $form_id) { switch ($form_id) { + + // Language field for paths case 'path_admin_edit': $form['language'] = array( - '#type' => 'radios', + '#type' => 'select', '#title' => t('Language'), '#options' => array('' => t('All languages')) + locale_language_list('name'), - '#default_value' => $form['#alias'] ? $form['#alias']['language'] : '', - '#weight' => -10 + '#default_value' => $form['language']['#value'], + '#weight' => -10, + '#description' => t('Path aliases set for specific languages override aliases set for all languages.'), ); break; + + // Language setting for content types + case 'node_type_form': + if (isset($form['identity']['type'])) { + $form['workflow']['language'] = array( + '#type' => 'radios', + '#title' => t('Multilingual support'), + '#default_value' => variable_get('language_'. $form['#node_type']->type, 0), + '#options' => array(t('Disabled'), t('Enabled')), + '#description' => t('Enable multilingual support for this content type. If enabled, a language field will be added to the editing form, if disabled, new nodes are created as language neutral. Existing nodes will not be affected by changing this opion.'), + ); + } + break; + + // Language field for nodes + default: + if ($form['#id'] == 'node-form') { + if (variable_get('language_' . $form['#node']->type, 0)) { + $form['language'] = array( + '#type' => 'select', + '#title' => t('Language'), + '#default_value' => (isset($form['#node']->language) ? $form['#node']->language : ''), + '#options' => array('' => t('Language neutral')) + locale_language_list('name'), + ); + } + } } } Index: modules/node/node.module =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.module,v retrieving revision 1.800 diff -u -p -r1.800 node.module --- modules/node/node.module 10 Apr 2007 12:11:42 -0000 1.800 +++ modules/node/node.module 18 Apr 2007 17:31:27 -0000 @@ -575,10 +575,10 @@ function node_load($param = array(), $re // No db_rewrite_sql is applied so as to get complete indexing for search. if ($revision) { array_unshift($arguments, $revision); - $node = db_fetch_object(db_query('SELECT n.nid, r.vid, n.type, n.status, n.created, n.changed, n.comment, n.promote, n.sticky, r.timestamp AS revision_timestamp, r.title, r.body, r.teaser, r.log, r.format, u.uid, u.name, u.picture, u.data FROM {node} n INNER JOIN {users} u ON u.uid = n.uid INNER JOIN {node_revisions} r ON r.nid = n.nid AND r.vid = %d WHERE '. $cond, $arguments)); + $node = db_fetch_object(db_query('SELECT n.nid, r.vid, n.type, n.status, n.language, n.created, n.changed, n.comment, n.promote, n.sticky, r.timestamp AS revision_timestamp, r.title, r.body, r.teaser, r.log, r.format, u.uid, u.name, u.picture, u.data FROM {node} n INNER JOIN {users} u ON u.uid = n.uid INNER JOIN {node_revisions} r ON r.nid = n.nid AND r.vid = %d WHERE '. $cond, $arguments)); } else { - $node = db_fetch_object(db_query('SELECT n.nid, n.vid, n.type, n.status, n.created, n.changed, n.comment, n.promote, n.sticky, r.timestamp AS revision_timestamp, r.title, r.body, r.teaser, r.log, r.format, u.uid, u.name, u.picture, u.data FROM {node} n INNER JOIN {users} u ON u.uid = n.uid INNER JOIN {node_revisions} r ON r.vid = n.vid WHERE '. $cond, $arguments)); + $node = db_fetch_object(db_query('SELECT n.nid, n.vid, n.type, n.status, n.language, n.created, n.changed, n.comment, n.promote, n.sticky, r.timestamp AS revision_timestamp, r.title, r.body, r.teaser, r.log, r.format, u.uid, u.name, u.picture, u.data FROM {node} n INNER JOIN {users} u ON u.uid = n.uid INNER JOIN {node_revisions} r ON r.vid = n.vid WHERE '. $cond, $arguments)); } if ($node && $node->nid) { @@ -658,12 +658,12 @@ function node_save(&$node) { } $node_table_values = array('nid' => $node->nid, 'vid' => $node->vid, 'title' => $node->title, 'type' => $node->type, 'uid' => $node->uid, - 'status' => $node->status, 'created' => $node->created, + 'status' => $node->status, 'language' => $node->language, 'created' => $node->created, 'changed' => $node->changed, 'comment' => $node->comment, 'promote' => $node->promote, 'sticky' => $node->sticky); $node_table_types = array('nid' => '%d', 'vid' => '%d', 'title' => "'%s'", 'type' => "'%s'", 'uid' => '%d', - 'status' => '%d', 'created' => '%d', + 'status' => '%d', 'language' => "'%s'",'created' => '%d', 'changed' => '%d', 'comment' => '%d', 'promote' => '%d', 'sticky' => '%d'); @@ -1366,7 +1366,11 @@ function node_filters() { if ($taxonomy = module_invoke('taxonomy', 'form_all', 1)) { $filters['category'] = array('title' => t('category'), 'options' => $taxonomy); } - + // Language filter if there is a list of languages + if ($languages = module_invoke('locale', 'language_list')) { + $languages = array('' => t('Language neutral')) + $languages; + $filters['language'] = array('title' => t('language'), 'options' => $languages); + } return $filters; } @@ -1394,6 +1398,8 @@ function node_build_filter_query() { break; case 'type': $where[] = "n.type = '%s'"; + case 'language': + $where[] = "n.language = '%s'"; } $args[] = $value; } @@ -1421,16 +1427,25 @@ function node_filter_form() { // Load term name from DB rather than search and parse options array. $value = module_invoke('taxonomy', 'get_term', $value); $value = $value->name; + $title = $filters[$type]['title']; } else if ($type == 'type') { + $title = $filters[$type]['title']; // Remove the type option if it is already being filtered on. unset($filters['type']); } + else if ($type == 'language') { + $value = empty($value) ? t('Language neutral') : module_invoke('locale', 'language_name', $value); + $title = $filters[$type]['title']; + // Remove language options if it is already being filtered on. + unset($filters['language']); + } else { $value = $filters[$type]['options'][$value]; + $title = $filters[$type]['title']; } $string = ($i++ ? 'and where %a is %b' : '%a is %b'); - $form['filters']['current'][] = array('#value' => t($string, array('%a' => $filters[$type]['title'] , '%b' => $value))); + $form['filters']['current'][] = array('#value' => t($string, array('%a' => $title, '%b' => $value))); } foreach ($filters as $key => $filter) { @@ -1570,7 +1585,11 @@ function node_admin_nodes() { $filter = node_build_filter_query(); $result = pager_query('SELECT n.*, u.name, u.uid FROM {node} n '. $filter['join'] .' INNER JOIN {users} u ON n.uid = u.uid '. $filter['where'] .' ORDER BY n.changed DESC', 50, 0, NULL, $filter['args']); - + + // Enable language column if locale is enabled or if we have any node with language + $count = db_result(db_query("SELECT COUNT(*) FROM {node} n WHERE language != ''")); + $multilanguage = (module_exists('locale') || $count); + $form['options'] = array('#type' => 'fieldset', '#title' => t('Update options'), '#prefix' => '