diff options
author | Marc Alexander <admin@m-a-styles.de> | 2019-03-31 11:05:26 +0200 |
---|---|---|
committer | Marc Alexander <admin@m-a-styles.de> | 2019-03-31 11:05:26 +0200 |
commit | d40caeebca144d511e62c55657ebaa753d141b55 (patch) | |
tree | 78a881330e883535d23a9b98389c0090a1f9284c | |
parent | f9c251c7af0b3cb9766f12a852cf6c78c73953bc (diff) | |
parent | a14a666e86dfa0941785a05a8e8df935104a908f (diff) | |
download | forums-d40caeebca144d511e62c55657ebaa753d141b55.tar forums-d40caeebca144d511e62c55657ebaa753d141b55.tar.gz forums-d40caeebca144d511e62c55657ebaa753d141b55.tar.bz2 forums-d40caeebca144d511e62c55657ebaa753d141b55.tar.xz forums-d40caeebca144d511e62c55657ebaa753d141b55.zip |
Merge pull request #5460 from 3D-I/ticket/15889
[ticket/15889] Add core.memberlist_modify_memberrow_sql
-rw-r--r-- | phpBB/memberlist.php | 60 |
1 files changed, 50 insertions, 10 deletions
diff --git a/phpBB/memberlist.php b/phpBB/memberlist.php index 76da690aea..3a620de63a 100644 --- a/phpBB/memberlist.php +++ b/phpBB/memberlist.php @@ -1546,19 +1546,58 @@ switch ($mode) // Do the SQL thang if ($mode == 'group') { - $sql = "SELECT u.* - $sql_select - FROM " . USERS_TABLE . " u - $sql_from - WHERE " . $db->sql_in_set('u.user_id', $user_list) . " - $sql_where_data"; + $sql_from_ary = explode(',', $sql_from); + $extra_tables = []; + foreach ($sql_from_ary as $entry) + { + $table_data = explode(' ', trim($entry)); + + if (empty($table_data[0]) || empty($table_data[1])) + { + continue; + } + + $extra_tables[$table_data[0]] = $table_data[1]; + } + + $sql_array = array( + 'SELECT' => 'u.*' . $sql_select, + 'FROM' => array_merge([USERS_TABLE => 'u'], $extra_tables), + 'WHERE' => $db->sql_in_set('u.user_id', $user_list) . $sql_where_data . '', + ); } else { - $sql = 'SELECT * - FROM ' . USERS_TABLE . ' - WHERE ' . $db->sql_in_set('user_id', $user_list); + $sql_array = array( + 'SELECT' => 'u.*', + 'FROM' => array( + USERS_TABLE => 'u' + ), + 'WHERE' => $db->sql_in_set('u.user_id', $user_list), + ); } + + /** + * Modify user data SQL before member row is created + * + * @event core.memberlist_modify_memberrow_sql + * @var string mode Memberlist mode + * @var string sql_select Additional select statement + * @var string sql_from Additional from statement + * @var array sql_array Array containing the main query + * @var array user_list Array containing list of users + * @since 3.2.6-RC1 + */ + $vars = array( + 'mode', + 'sql_select', + 'sql_from', + 'sql_array', + 'user_list', + ); + extract($phpbb_dispatcher->trigger_event('core.memberlist_modify_memberrow_sql', compact($vars))); + + $sql = $db->sql_build_query('SELECT', $sql_array); $result = $db->sql_query($sql); $id_cache = array(); @@ -1569,9 +1608,10 @@ switch ($mode) $id_cache[$row['user_id']] = $row; } + $db->sql_freeresult($result); - // Load custom profile fields + // Load custom profile fields if required if ($config['load_cpf_memberlist']) { // Grab all profile fields from users in id cache for later use - similar to the poster cache |