Filtrera listan av användare beroende på vilket språk användaren har valt för epost

Events happening in the community are now at Drupal community events on www.drupal.org.
Urme's picture

Skulle vilja att man kan filtrera listan av användare i Admin på vilket språk användaren har valt för "epost". Går det att lösa? Eller måste jag skapa en egen Vy i Views för att åstadkomma detta?

Comments

Har lyckats få fram nu att

Urme's picture

Har lyckats få fram nu att jag har skapat en egen modul och lagt in denna nedanför, detta gör så att jag får fram en ny kolumn som visar språket som är inställt.
Någon som har ett förslag hur jag "hookar" in i filtreringsfunktionen?

<?php
function mymodule_form_alter(&$form, &$form_state, $form_id) {
    if (
$form_id == 'user_admin_account') {
       
$filter = user_build_filter_query();

       
$header = array(
                array(),
                array(
'data' => t('Username'), 'field' => 'u.name'),
                array(
'data' => t('Status'), 'field' => 'u.status'),
               
t('Roles'),
                array(
'data' => t('Member for'), 'field' => 'u.created', 'sort' => 'desc'),
                array(
'data' => t('Last access'), 'field' => 'u.access'),
                array(
'data' => t('Language'), 'field' => 'u.language'), // <- new field               
               
t('Operations')
        );

        if (
$filter['join'] != "") {
           
$sql = 'SELECT DISTINCT u.uid, u.name, u.status, u.created, u.access, u.language FROM {users} u LEFT JOIN {users_roles} ur ON u.uid = ur.uid '. $filter['join'] .' WHERE u.uid != 0 '. $filter['where'];
           
$query_count = 'SELECT COUNT(DISTINCT u.uid) FROM {users} u LEFT JOIN {users_roles} ur ON u.uid = ur.uid '. $filter['join'] .' WHERE u.uid != 0 '. $filter['where'];
        }
        else {
           
$sql = 'SELECT u.uid, u.name, u.status, u.created, u.access, u.language FROM {users} u WHERE u.uid != 0 '. $filter['where'];
           
$query_count = 'SELECT COUNT(u.uid) FROM {users} u WHERE u.uid != 0 '. $filter['where'];
        }

       
$sql .= tablesort_sql($header);

       
$result = pager_query($sql, 50, 0, $query_count, $filter['args']);

        while (
$account = db_fetch_object($result)) {
           
$form['language'][$account->uid] =  array('#value' => $account->language);
        }

       
// override the default theme function to render the extra field
       
$form['#theme'] = 'user_language_list';
    } 
}

function
mymodule_theme() {
  return array(
   
'user_language_list' => array(
     
'arguments' => array('form' => array()),
    ),
  );
}

function
theme_user_language_list($form) {
   
// Overview table:
   
$header = array(
           
theme('table_select_header_cell'),
            array(
'data' => t('Username'), 'field' => 'u.name'),
            array(
'data' => t('Status'), 'field' => 'u.status'),
           
t('Roles'),
            array(
'data' => t('Member for'), 'field' => 'u.created', 'sort' => 'desc'),
            array(
'data' => t('Last access'), 'field' => 'u.access'),
            array(
'data' => t('Language'), 'field' => 'u.language'), // <- new field           
           
t('Operations')
    );

   
$output = drupal_render($form['options']);
    if (isset(
$form['name']) && is_array($form['name'])) {
        foreach (
element_children($form['name']) as $key) {
        
//$form['language'][$key] = "Test";
           
          
if($form['language'][$key]["#value"] == "") {
               
$form['language'][$key]["#value"] = "n/a";
           }
           
           
$rows[] = array(
                   
drupal_render($form['accounts'][$key]),
                   
drupal_render($form['name'][$key]),
                   
drupal_render($form['status'][$key]),
                   
drupal_render($form['roles'][$key]),
                   
drupal_render($form['member_for'][$key]),
                   
drupal_render($form['last_access'][$key]),
                   
drupal_render($form['language'][$key]), // <- new field                   
                   
drupal_render($form['operations'][$key])

            );
        }
    }
    else {
       
$rows[] = array(array('data' => t('No users available.'), 'colspan' => ' 8'));
    }

   
$output .= theme('table', $header, $rows);
    if (
$form['pager']['#value']) {
       
$output .= drupal_render($form['pager']);
    }

   
$output .= drupal_render($form);

    return
$output;
}
?>

Jag tror det enklaste är att

pontus_nilsson's picture

Jag tror det enklaste är att ersätta sidan med en vy av typen Views Bulk Operations.

//Pontus Nilsson, Digitalist

Så om jag gör en vy med

Urme's picture

Så om jag gör en vy med adressen admin/user/user/list kommer den "skriva över"/ersätta originalet om jag går in på den adressen?

Känns dock som att man bör kunna "hooka" in i filtreringen på något sätt och bara lägga till en droplist med språk.

Exponerat filter

misc's picture

Du kan nog få till den där listningen med ett exponerat filter i Views - har du testat det?

/* Mikke Schirén, https://digitalist/ */

Sweden

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: