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;
         }
     }
 }
Example #2
0
    ?>
' <?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;
}