Package home | Report new bug | New search | Development Roadmap Status: Open | Feedback | All | Closed Since Version 0.16.14

Bug #1800 errors in LiveUser_Admin_Auth_Container_DB::getUsers()
Submitted: 2004-07-05 18:08 UTC Modified: 2006-12-24 15:43 UTC
From: xav at spotk dot net Assigned: lsmith
Status: Closed Package: LiveUser
PHP Version: Irrelevant OS:
Roadmaps: (Not assigned)    
Subscription  


 [2004-07-05 18:08 UTC] xav at spotk dot net
Description: ------------ Hi, i think i've spoted bugs in LiveUser_Admin_Auth_Container_DB::getUsers() i tried to get standard user datas (auth_user_id, handle, passwd, is_active, lastlogin) with a simple call like: ---- $ret = $Auth->getUsers(array('auth_user_id' => 79)); ---- but it always return only: auth_user_id, handle and passwd after diving into getUsers(), i think there are 3 problems 1st: along the method the customFields array become: cFields (at line 420 of the current cvs version) 2nd: an ['optional'] key is missing $this->authTableCols['is_active'] $this->authTableCols['owner_user_id'] $this->authTableCols['owner_group_id'] for these 3 fields, the ['optional'] key is missing, so customFields is never filled as it should be 3rd: the $fields variable is never populated if $this->authTableCols['custom']) = 0 see below for this point after correcting those 3 issues, it seems that the method now returns correct values. hope it help Regards Xavier Reproduce code: --------------- Point 3: ---- if (sizeof($this->authTableCols['custom']) > 0) { foreach ($this->authTableCols['custom'] as $alias => $field_data) { $cFields[] = $field_data['name'] . ' AS ' . $alias; } $fields = ','; $fields .= implode(',', $cFields); } ----- which i've replaced by: --------- if (sizeof($this->authTableCols['custom']) > 0) { foreach ($this->authTableCols['custom'] as $alias => $field_data) { $customFields[] = $field_data['name'] . ' AS ' . $alias; } } if (sizeof($customFields > 0)) { $fields = ','; $fields .= implode(',', $customFields); } -----------

Comments

 [2004-07-15 09:35 UTC] naturalkiller at gmx dot net
Finaly the method should look something like this, so that all configuration-settings are reflected as expected: function getUsers($filters = array(), $order = null, $rekey = false) { if (!$this->init_ok) { return false; } $fields = $where = ''; if (isset($this->authTableCols['optional']['lastlogin'])) { $customFields[] = $this->authTableCols['optional']['lastlogin']['name'] . ' AS lastlogin'; } if (isset($this->authTableCols['optional']['is_active'])) { $customFields[] = "CASE {$this->authTableCols['optional']['is_active']['name']} WHEN 'Y' THEN 1 WHEN 'N' THEN 0 END AS is_active"; } if (isset($this->authTableCols['optional']['owner_user_id'])) { $customFields[] = $this->authTableCols['optional']['owner_user_id']['name'] . ' AS owner_user_id'; } if (isset($this->authTableCols['optional']['owner_group_id'])) { $customFields[] = $this->authTableCols['optional']['owner_group_id']['name'] . ' AS owner_group_id'; } if (sizeof($this->authTableCols['custom']) > 0) { foreach ($this->authTableCols['custom'] as $alias => $field_data) { $customFields[] = $field_data['name'] . ' AS ' . $alias; } } if (sizeof($customFields > 0)) { $fields = ','; $fields .= implode(',', $customFields); } if ( sizeof($filters) > 0 ) { $where = ' WHERE'; foreach ($filters as $f => $v) { if (is_array($v)) { $cond = ' ' . $v['cond']; $where .= ' ' . $f . $v['op'] . $this->dbc->quoteSmart($v['value']) . $cond; } else { $cond = ' AND'; $where .= " $f=$v" . $cond; } } $where = substr($where, 0, -(strlen($cond))); } if (!is_null($order)) { $order = ' ORDER BY ' . $order; } // First: Get all data from auth table. $query = ' SELECT ' . $this->authTableCols['required']['auth_user_id']['name'] . ' AS auth_user_id, ' . $this->authTableCols['required']['handle']['name'] . ' AS handle, ' . $this->authTableCols['required']['passwd']['name'] . ' AS passwd ' . $fields . ' FROM ' . $this->authTable . $where . $order; if ($rekey) { $res = $this->dbc->getAssoc($query, false, array(), DB_FETCHMODE_ASSOC); } else { $res = $this->dbc->getAll($query, array(), DB_FETCHMODE_ASSOC); } return $res; }
 [2004-07-21 05:53 UTC] smith at backendmedia dot com
Thx for this patch. I have applied it to CVS with minimal changes.