Index: modules/locale/locale.module =================================================================== RCS file: /cvs/drupal/drupal/modules/locale/locale.module,v retrieving revision 1.167 diff -u -p -r1.167 locale.module --- modules/locale/locale.module 24 Apr 2007 13:53:12 -0000 1.167 +++ modules/locale/locale.module 25 Apr 2007 19:13:06 -0000 @@ -175,17 +175,54 @@ 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 added for languages take precedence over path aliases added for all languages for the same Drupal path.'), ); 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 selection field will be added to the editing form, allowing you to select from one of the enabled languages. If disabled, new posts are saved with the default language. Existing content will not be affected by changing this option.', array('!languages' => url('admin/build/locale'))), + ); + } + 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'), + ); + } + // Node type without language selector: keep existing language or assign the default + else { + $default = language_default(); + $form['language'] = array( + '#type' => 'value', + '#value' => (isset($form['#node']->language) ? $form['#node']->language : $default->language) + ); + } + } } } Index: modules/node/node.module =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.module,v retrieving revision 1.804 diff -u -p -r1.804 node.module --- modules/node/node.module 24 Apr 2007 13:53:14 -0000 1.804 +++ modules/node/node.module 25 Apr 2007 19:13:09 -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; } @@ -1422,13 +1428,20 @@ function node_filter_form() { $value = module_invoke('taxonomy', 'get_term', $value); $value = $value->name; } + else if ($type == 'language') { + $value = empty($value) ? t('Language neutral') : module_invoke('locale', 'language_name', $value); + } else { $value = $filters[$type]['options'][$value]; } - $string = ($i++ ? 'and where %a is %b' : '%a is %b'); - $form['filters']['current'][] = array('#value' => t($string, array('%a' => $filters[$type]['title'] , '%b' => $value))); - if ($type == 'type') { - // Remove the type option if it is already being filtered on. + if ($i++) { + $form['filters']['current'][] = array('#value' => t('and where %a is %b', array('%a' => $filters[$type]['title'], '%b' => $value))); + } + else { + $form['filters']['current'][] = array('#value' => t('%a is %b', array('%a' => $filters[$type]['title'], '%b' => $value))); + } + if (in_array($type, array('type', 'language'))) { + // Remove the option if it is already being filtered on. unset($filters['type']); } } @@ -1569,7 +1582,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' => '