////////////////////////////////////////////////////////////
// Main
////////////////////////////////////////////////////////////
// Add form to page
print drupal_get_form('memberfilter');
// Show results
print memberresults();
////////////////////////////////////////////////////////////
// Subroutines
///////////////////////////////////////////////////////////
function memberfilter_getformvalues() {
$output=array();
foreach ($_POST as $key=>$value) { $output[$key]=$value; }
if (empty($output))
foreach ($_GET as $key=>$value) { $output[$key]=$value; }
return $output;
}
// Build form
function memberfilter() {
$form = array();
$form['filter'] = array('#type' => 'fieldset',
'#title' => t('Use this filter to narrow down the number of members returned'),
);
// Show institutions and initiatives
$p=memberfilter_getformvalues();
memberfilter_addfilter('institution','Institution',$p,$form);
memberfilter_addfilter('initiative','Initiative',$p,$form);
return $form;
}
function memberfilter_addfilter($type,$title,$posted,&$form){
// Build lookup list for each area
$options=array('--');
$nodes=db_query("SELECT n.nid,n.title FROM node n WHERE n.type='%s' AND n.status=1 ORDER BY n.title",$type);
while ($row=db_fetch_object($nodes)) {
$options[$row->nid]=$row->title;
}
// Add to form
$form['filter']["nodes_$type"] = array(
'#type' => 'select',
'#title' => t($title),
'#options' => $options,
'#default_value'=>$posted["nodes_$type"],
'#attributes'=>array('onChange'=>'this.form.submit()')
);
}
function memberfilter_submit($form_id,$form_values){
return false;
}
function memberresults() {
// Form values
$posted=memberfilter_getformvalues();
// Security
$browse=user_access('access user profiles');
// Build results
$profile_areaid = 13;
$profile_lastname = 15;
$profile_firstname = 14;
$profile_hide = 16;
$sql = "SELECT u.uid, u.name FROM {users} u LEFT JOIN {profile_values} vl ON u.uid=vl.uid AND vl.fid=$profile_lastname LEFT JOIN {profile_values} vf ON u.uid=vf.uid AND vf.fid=$profile_firstname LEFT JOIN {profile_values} v ON u.uid=v.uid AND v.fid=$profile_areaid LEFT JOIN {profile_values} vh ON u.uid=vh.uid AND vh.fid=$profile_hide WHERE u.uid in (SELECT DISTINCT uid FROM {users_roles}) AND u.status!=0 AND IFNULL(vh.value,'')<>'1'";
foreach ($posted as $key=>$value) {
if (preg_match('/nodes*/', $key) && is_numeric($value) && $value!=0)
$sql .= " AND CONCAT(',',IFNULL(v.value,''),',') LIKE '%,$value,%'";
}
$sql .= " ORDER BY vl.value,vf.value";
$result = pager_query($sql, 25);
$accounts = array();
while ($account = db_fetch_object($result)) {
$item='';
$account=user_load(array('uid'=>$account->uid));
$item.='
'.(($browse)?l($account->profile_fullname, 'user/'. $account->uid,array('title' => t('View user profile.'))):check_plain($account->profile_fullname)).'
';
$item.=$account->profile_specialty?''.$account->profile_specialty.'
':'';
$item.='';
// Get institutions
$areas=$account->profile_areas;
if($areas){
$inst=db_query("SELECT nid,title FROM {node} WHERE nid IN ($areas) AND type='institution'");
$institem='';
while ($i=db_fetch_object($inst)) {
$institem.=(($institem)?', ':'').l($i->title, 'node/'. $i->nid);
}
if ($institem) $item.=''.$institem.'
';
// Initiatives
$initq=db_query("SELECT nid,title FROM {node} WHERE nid IN ($areas) AND type='initiative'");
$inititem='';
while ($i=db_fetch_object($initq)) {
$inititem.=(($inititem)?', ':'').l($i->title, 'node/'. $i->nid);
}
if ($inititem) $item.='Initiative(s): '.$inititem.'
';
}
// Email
$item.=($browse)?''.l($account->mail, 'mailto:'. $account->mail).'
':'';
$accounts[]=$item;
}
if ($accounts) {
$output = theme('item_list', $accounts);
$output .= theme('pager', NULL, 25, 0);
return $output;
}
}
?>