public function __construct(array $users, $filename = '')
 {
     $euconfig = eu_getConfig();
     if (isset($_POST['userdata'])) {
         foreach ($_POST['userdata'] as $col) {
             $this->cols[] = $col;
             $this->descriptions[$col] = $euconfig->userdata[$col];
         }
     }
     if (isset($_POST['metadata'])) {
         foreach ($_POST['metadata'] as $col) {
             $this->cols[] = $col;
             $this->descriptions[$col] = $euconfig->metadata[$col];
         }
     }
     $this->users = $users;
     $this->filename = $filename ? $filename : 'users-' . date('Y-m-d');
 }
Exemple #2
0
<?php

global $wpdb;
$euconfig = eu_getConfig();
?>
<style>
.eu-field { float:left; margin:10px;}
</style>
<form method="post">
    <input type="hidden" name='<?php 
echo EU_PREFIX;
?>
action' value='export-users' />
    <div>
        <select name='filter'>
            <option value=''><?php 
_e('não filtrar', 'exportador-usuarios');
?>
</option>
            <?php 
foreach ($euconfig->userdata as $udata => $dataname) {
    ?>
                <option value='<?php 
    echo $udata;
    ?>
'><?php 
    echo $dataname;
    ?>
</option>
            <?php 
}
function eu_getUsers()
{
    global $wpdb;
    $roles = $_POST['roles'];
    foreach ($roles as $k => $role) {
        $roles[$k] = "meta_value LIKE '%\"{$role}\"%'";
    }
    $metakeys = implode(' OR ', $roles);
    $udata = $_POST['userdata'];
    if (!in_array('ID', $udata)) {
        $udata[] = 'ID';
    }
    $cols = implode(',', $udata);
    $orderby = $_POST['order'];
    $oby = $_POST['oby'] == 'ASC' ? 'ASC' : 'DESC';
    // filtro
    if (isset($_POST['filter']) && trim($_POST['filter']) != '') {
        $field = $_POST['filter'];
        $value = $_POST['filter_value'];
        if ($field[0] == '_') {
            $field = substr($field, 1);
            switch ($_POST['operator']) {
                case 'eq':
                    $filter = "AND ID IN (SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key='{$field}' AND meta_value = '{$value}')";
                    break;
                case 'dif':
                    $filter = "AND ID NOT IN (SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key='{$field}' AND meta_value = '{$value}')";
                    break;
                case 'like':
                    $filter = "AND ID IN (SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key='{$field}' AND meta_value LIKE '%{$value}%')";
                    break;
                case 'not-like':
                    $filter = "AND ID NOT IN (SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key='{$field}' AND meta_value LIKE '%{$value}%')";
                    break;
            }
        } else {
            switch ($_POST['operator']) {
                case 'eq':
                    $filter = "AND {$field} = '{$value}')";
                    break;
                case 'dif':
                    $filter = "AND {$field} <> '{$value}')";
                    break;
                case 'like':
                    $filter = "AND {$field} LIKE '%{$value}%')";
                    break;
                case 'not-like':
                    $filter = "AND {$field} NOT LIKE '%{$value}%')";
                    break;
            }
        }
    } else {
        $filter = '';
    }
    // seleciona os usuários
    $q = "\n    \tSELECT \n    \t\t{$cols}\n    \tFROM \n            {$wpdb->users} \n        WHERE \n        \tID IN (\tSELECT \n        \t\t\t\tuser_id \n        \t\t\tFROM \n                        {$wpdb->usermeta} \n                    WHERE \n                    \tmeta_key = '{$wpdb->prefix}capabilities' AND \n                    \t({$metakeys})\n                   )\n            {$filter}\n        ORDER BY {$orderby} {$oby}";
    $users = $wpdb->get_results($q);
    $euconfig = eu_getConfig();
    $user_ids = array();
    // limpa o usuário, removendo as propriedades que não foram selecionadas no formulario
    // de exportação
    $result = array();
    foreach ($users as $user) {
        $user_ids[] = $user->ID;
        $result[$user->ID] = $user;
    }
    unset($users);
    // seleciona os metadados to usuário
    $user_ids = implode(',', $user_ids);
    $metakeys = array();
    $metakeys = array_keys($euconfig->metadata);
    $metakeys = "'" . implode("','", $metakeys) . "'";
    $qm = "\n    \tSELECT\n    \t\tuser_id,\n    \t\tmeta_key,\n    \t\tmeta_value\n    \tFROM\n    \t\t{$wpdb->usermeta}\n    \tWHERE\n    \t\tmeta_key IN ({$metakeys}) AND\n    \t\tuser_id IN ({$user_ids})";
    $metadatas = $wpdb->get_results($qm);
    foreach ($metadatas as $metadata) {
        $meta_key = $metadata->meta_key;
        $meta_value = $metadata->meta_value;
        $user_id = $metadata->user_id;
        $result[$user_id]->{$meta_key} = isset($result[$user_id]->{$meta_key}) ? $result[$user_id]->{$meta_key} . ", " . $meta_value : $meta_value;
    }
    return $result;
}