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'); }
<?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; }