public function __construct($filename = '') { $_cols = array(); $wpue_config = wpue_getConfig(); if (isset($_POST['userdata'])) { foreach ($_POST['userdata'] as $col) { $_cols[] = $col; $this->descriptions[$col] = $wpue_config->userdata[$col]; } } if (isset($_POST['metadata'])) { foreach ($_POST['metadata'] as $col) { $_cols[] = $col; $this->descriptions[$col] = $wpue_config->metadata[$col]; } } if (wpue_isBP()) { $bp_fields = wpue_bp_getProfileFields(); foreach ($wpue_config->bp_fields as $field_id) { if (isset($_POST['bp_fields']) && in_array($field_id, $_POST['bp_fields'])) { $col = 'bp_' . $field_id; $_cols[] = $col; $this->descriptions[$col] = $bp_fields[$field_id]->name; } } } $this->tmpfile = wpue_getUsers_to_tmpfile(); $this->filename = $filename ? $filename : 'users-' . date('Y-m-d'); foreach ($_POST['display_order'] as $field) { if (in_array($field, $_cols)) { $this->cols[] = $field; } } }
?> ' <?php if (!isset($_POST['userdata']) || isset($_POST['userdata'][$udata])) { echo 'checked="checked"'; } ?> /><?php echo $dataname; ?> </label></li> <?php } ?> <?php if (wpue_isBP()) { $bp_fields = wpue_bp_getProfileFields(); ?> <?php foreach ($wpue_config->bp_fields as $field_id) { ?> <li><input type="hidden" name="display_order[]" value="bp_<?php echo $field_id; ?> " /><label><input type='checkbox' name='bp_fields[]' value='<?php echo $field_id; ?> ' <?php if (!isset($_POST['bp_fields']) || isset($_POST['bp_fields'][$field_id])) { echo 'checked="checked"';
function wpue_getUsers_to_tmpfile() { global $wpdb; $tmpfile = tempnam(sys_get_temp_dir(), 'wp-users-exporter'); //To increase speed and avoid memory limit, we do the querys and savings in steps of: $step = 1000; $roles = $_POST['roles']; foreach ($roles as $k => $role) { $roles[$k] = $wpdb->prepare("meta_value LIKE %s", "%\"{$role}\"%"); } $metakeys = implode(' OR ', $roles); $udata = $_POST['userdata']; if (!in_array('ID', $udata)) { $udata[] = 'ID'; } $DISPLAY_ROLE = in_array(__ROLE__, $udata); $roles = array(); if ($DISPLAY_ROLE) { unset($udata[array_search(__ROLE__, $udata)]); $roles = new WP_Roles(); $roles = array_keys($roles->roles); } $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 = $wpdb->prepare("AND ID IN (SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key = %s AND meta_value = %s)", $field, $value); break; case 'dif': $filter = $wpdb->prepare("AND ID NOT IN (SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key= %s AND meta_value = %s)", $field, $value); break; case 'like': $filter = $wpdb->prepare("AND ID IN (SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key= %s AND meta_value LIKE %s)", $field, '%' . $value . '%'); break; case 'not-like': $filter = $wpdb->prepare("AND ID NOT IN (SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key= %s AND meta_value LIKE %s)", $field, '%' . $value . '%'); break; } } else { $validFields = array('ID', 'user_login', 'user_pass', 'user_nicename', 'user_email', 'user_url', 'user_registered', 'user_activation_key', 'user_status', 'display_name'); if (in_array($field, $validFields)) { switch ($_POST['operator']) { case 'eq': $filter = $wpdb->prepare("AND {$field} = %s", $value); break; case 'dif': $filter = $wpdb->prepare("AND {$field} <> %s", $value); break; case 'like': $filter = $wpdb->prepare("AND {$field} LIKE %s", '%' . $value . '%'); break; case 'not-like': $filter = $wpdb->prepare("AND {$field} NOT LIKE %s", '%' . $value . '%'); break; } } } } else { $filter = ''; } // seleciona os usuários $base_q = "\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}"; $count_q = "SELECT count(ID) {$base_q}"; $count = $wpdb->get_var($count_q); for ($ii = 0; $ii <= $count; $ii += $step) { $q = "SELECT {$cols} {$base_q} LIMIT {$step} OFFSET {$ii}"; $users = $wpdb->get_results($q); $wpue_config = wpue_getConfig(); $user_ids = array(); // limpa o usuário, removendo as propriedades que não foram selecionadas no formulario // de exportação unset($result); $result = array(); foreach ($users as $index => $user) { $user_ids[] = $user->ID; $result[$user->ID] = $user; unset($users[$index]); } unset($users); // seleciona os metadados to usuário $user_ids = implode(',', $user_ids); $user_ids = $user_ids ? $user_ids : '-1'; $metakeys = array(); $metakeys = array_keys($wpue_config->metadata); if (!in_array($wpdb->prefix . 'capabilities', $metakeys)) { $metakeys[] = $wpdb->prefix . 'capabilities'; } $metakeys = "'" . implode("','", $metakeys) . "'"; $qm = "\n SELECT\n user_id,\n meta_key,\n meta_value\n FROM\n {$wpdb->usermeta}\n WHERE\n meta_key IN ({$metakeys}) AND\n user_id IN ({$user_ids})"; $rs = mysql_query($qm) or die($qm); while ($metadata = mysql_fetch_object($rs)) { $meta_key = $metadata->meta_key; $meta_value = $metadata->meta_value; $user_id = $metadata->user_id; if (is_serialized($meta_value)) { $meta_value = unserialize($meta_value); if ($meta_key == $wpdb->prefix . 'capabilities' && $DISPLAY_ROLE) { $user_roles = ''; $capabilities = array_keys($meta_value); foreach ($capabilities as $i => $cap) { if (in_array($cap, $roles)) { $user_roles = $user_roles ? ', ' . $cap : $cap; } if (!$meta_value[$cap]) { unset($capabilities[$i]); } } $__role = __ROLE__; $result[$user_id]->{$__role} = $user_roles; $meta_value = $capabilities; } } $result[$user_id]->{$meta_key} = isset($result[$user_id]->{$meta_key}) ? $result[$user_id]->{$meta_key} . ", " . $meta_value : $meta_value; if (is_object($result[$user_id]->{$meta_key})) { $result[$user_id]->{$meta_key} = (array) $result[$user_id]->{$meta_key}; } if (is_array($result[$user_id]->{$meta_key})) { $result[$user_id]->{$meta_key} = implode(', ', $result[$user_id]->{$meta_key}); } } /* BUDDYPRESS EDITION */ if (wpue_isBP()) { $field_ids = implode(',', $wpue_config->bp_fields); $bp_fields = wpue_bp_getProfileFields(); $bp_data_query = "\n SELECT \n * \n FROM \n {$wpdb->prefix}bp_xprofile_data \n WHERE \n user_id IN ({$user_ids}) AND \n field_id IN ({$field_ids})\n ORDER BY \n user_id ASC"; $bp_data = $wpdb->get_results($bp_data_query); foreach ($bp_data as $data) { $field = 'bp_' . $data->field_id; if ($bp_fields[$data->field_id]->type == 'datebox') { $data->value = date($wpue_config->date_format, $data->value); } if (is_serialized($data->value)) { $data->value = unserialize($data->value); } if (is_object($data->value)) { $data->value = (array) $data->value; } if (is_array($data->value)) { $data->value = implode(', ', $data->value); } $result[$data->user_id]->{$field} = $data->value; } } $result_string = ''; foreach ($result as $id => $r) { $result_string .= str_replace("\r\n", '||BR||', serialize($r)) . "\n"; } //$result_string = str_replace("\r", '', $result_string); file_put_contents($tmpfile, $result_string, FILE_APPEND); } // end for return $tmpfile; }