EDIT: this script has moved
The old script below still works but has since been improved.
An interface has been added. The latest script can be found on the wiki:
Export Member Data
//// old script ////
<?php
/*
** This script will export member data to a
** comma or tab delimited text file.
**
** usage: edit $member_data and $custom_field_ids
** with the fields to be exported
**
** original script by Ronny
** modified by bkuberek
**
*/
global $IN, $DB;
$member_data = array('member_id','username','screen_name','email'); // array('member_id','email')
$custom_field_ids = array(1,2,3,4); // array() | array(1,2,3,4)
$delimiter = 'tab'; // default delimiter : comma | tab
$data = '';
/*
** look for parameters
*/
if ($IN->GBL('delimiter') == 'comma' || $IN->GBL('delimiter') == 'tab')
{
$delimiter = $IN->GBL('delimiter');
}
switch ($delimiter)
{
case 'tab': $delimiter = "\t";
break;
default: $delimiter = ",";
break;
}
/*
** get custom fields' label
*/
$query = $DB->query("SELECT m_field_id, m_field_label FROM exp_member_fields");
foreach ($query->result as $row)
{
$custom_fields[$row['m_field_id']] = $row['m_field_label'];
}
/*
** execute query
*/
$DB->fetch_fields = TRUE;
$sql = "SELECT ";
if (is_array($member_data) && count($member_data) > 0)
{
foreach ($member_data as $k => $v)
{
$member_data[$k] = "a." . $v;
}
$sql .= implode(', ',$member_data);
}
else
{
$sql .= "a.member_id, a.username, a.screen_name, a.email";
}
if (is_array($custom_field_ids) && count($custom_field_ids) > 0)
{
foreach ($custom_field_ids as $id)
{
$sql .= ", b.m_field_id_" . $id;
}
}
$sql .= " FROM exp_members as a, exp_member_data as b";
$sql .= " WHERE a.member_id = b.member_id ORDER BY a.member_id";
$query = $DB->query($sql);
/*
** create column headers
*/
$field_names = $DB->field_names;
$count = count($field_names);
foreach($field_names as $k => $v)
{
if( preg_match("/(m_field_id_)(\d+)/", $v, $matches) )
{
$field_names[$k] = $custom_fields[$matches[2]];
}
}
$header = '';
for ($i = 0; $i < $count; $i++)
{
$header .= '"' . ucwords( str_replace('_',' ',$field_names[$i]) ) . '"' . $delimiter;
}
$header = rtrim($header, $delimiter);
/*
** create data
*/
foreach ($query->result as $row)
{
$line = '';
foreach ($row as $value)
{
if(empty($value))
{
$value = '""' . $delimiter;
}
else
{
$value = '"' . $value . '"' . $delimiter;
}
$line .= $value;
}
$line = rtrim($line, $delimiter);
$data .= $line . "\r\n";
}
/*
** output HTTP Headers
*/
header("Content-type: application/x-download");
header("Content-disposition: attachment; filename=\"Export_Member_Data-".date('YmdHi', time()).".txt\"\r\n");
header("Content-transfer-encoding: binary\n");
header("Content-Type: application/csv-tab-delimited-table");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: public");
/*
** output file contents
*/
echo $header."\r\n".$data;
?>
