From 3133bde993c499f33f679997c36119c58d1d4515 Mon Sep 17 00:00:00 2001 From: emanuele Date: Sun, 14 Jul 2013 16:31:45 +0200 Subject: [PATCH 1/3] Integrate members search in member list Signed-off-by: emanuele --- sources/controllers/Memberlist.controller.php | 19 ++++++++++-- themes/default/Memberlist.template.php | 30 ++++++++++++++++++- themes/default/css/index.css | 18 ++++++++++- 3 files changed, 63 insertions(+), 4 deletions(-) diff --git a/sources/controllers/Memberlist.controller.php b/sources/controllers/Memberlist.controller.php index 88f2987ebc..44a51c3b6f 100644 --- a/sources/controllers/Memberlist.controller.php +++ b/sources/controllers/Memberlist.controller.php @@ -160,9 +160,25 @@ public function action_index() // Build the memberlist button array. $context['memberlist_buttons'] = array( 'view_all_members' => array('text' => 'view_all_members', 'image' => 'mlist.png', 'lang' => true, 'url' => $scripturl . '?action=memberlist' . ';sa=all', 'active'=> true), - 'mlist_search' => array('text' => 'mlist_search', 'image' => 'mlist.png', 'lang' => true, 'url' => $scripturl . '?action=memberlist' . ';sa=search'), ); + // Are there custom fields they can search? + ml_findSearchableCustomFields(); + + // These are all the possible fields. + $context['search_fields'] = array( + 'name' => $txt['mlist_search_name'], + 'email' => $txt['mlist_search_email'], + 'website' => $txt['mlist_search_website'], + 'group' => $txt['mlist_search_group'], + ); + + foreach ($context['custom_search_fields'] as $field) + $context['search_fields']['cust_' . $field['colname']] = sprintf($txt['mlist_search_by'], $field['name']); + + // What do we search for by default? + $context['search_defaults'] = array('name', 'email'); + // Allow mods to add additional buttons here call_integration_hook('integrate_memberlist_buttons'); @@ -455,6 +471,5 @@ public function action_mlsearch() // Highlight the correct button, too! unset($context['memberlist_buttons']['view_all_members']['active']); - $context['memberlist_buttons']['mlist_search']['active'] = true; } } \ No newline at end of file diff --git a/themes/default/Memberlist.template.php b/themes/default/Memberlist.template.php index 277a76be5d..d7bfc84f50 100644 --- a/themes/default/Memberlist.template.php +++ b/themes/default/Memberlist.template.php @@ -21,9 +21,37 @@ function template_main() { global $context, $settings, $scripturl, $txt; - template_pagesection('memberlist_buttons', 'right', 'go_down'); + $extra = ' +
+
    +
  • +   + +
      '; + + foreach ($context['search_fields'] as $id => $title) + { + $extra .= ' +
    • + +
    • '; + } + + $extra .= ' +
    +
  • +
+
'; + + template_pagesection('memberlist_buttons', 'right', 'go_down', array('extra' => $extra)); echo ' +

', $txt['members_list'], ''; diff --git a/themes/default/css/index.css b/themes/default/css/index.css index 641b2744a1..f00ecc1b12 100644 --- a/themes/default/css/index.css +++ b/themes/default/css/index.css @@ -3692,7 +3692,23 @@ dl.merge_topic dd { width: 100%; } - +#mlsearch { + padding-top: 5px; +} +#mlsearch_options { + position: absolute; + display: none; + background: #FAFAFA; + padding: 0.5em; + border: 1px solid #DDDDDD; + border-radius: 5px; +} +#mlsearch_options .mlsearch_option .input_check { + margin-left: 0.5em; +} +#mlsearch_options .mlsearch_option { + padding: 0.2em 0; +} /* $LOGIN */ From 8068ea2e0ab77b3453d6d72393ea1ce839f7652f Mon Sep 17 00:00:00 2001 From: emanuele Date: Sun, 14 Jul 2013 21:01:46 +0200 Subject: [PATCH 2/3] Some tweaks and removed the template_search Signed-off-by: emanuele --- sources/controllers/Memberlist.controller.php | 19 +------- themes/default/Memberlist.template.php | 44 ------------------- 2 files changed, 1 insertion(+), 62 deletions(-) diff --git a/sources/controllers/Memberlist.controller.php b/sources/controllers/Memberlist.controller.php index 44a51c3b6f..224a54235f 100644 --- a/sources/controllers/Memberlist.controller.php +++ b/sources/controllers/Memberlist.controller.php @@ -445,24 +445,7 @@ public function action_mlsearch() $context['page_index'] = constructPageIndex($scripturl . '?action=memberlist;sa=search;search=' . $_POST['search'] . ';fields=' . implode(',', $_POST['fields']), $_REQUEST['start'], $numResults, $modSettings['defaultMaxMembers']); } else - { - // These are all the possible fields. - $context['search_fields'] = array( - 'name' => $txt['mlist_search_name'], - 'email' => $txt['mlist_search_email'], - 'website' => $txt['mlist_search_website'], - 'group' => $txt['mlist_search_group'], - ); - - foreach ($context['custom_search_fields'] as $field) - $context['search_fields']['cust_' . $field['colname']] = sprintf($txt['mlist_search_by'], $field['name']); - - // What do we search for by default? - $context['search_defaults'] = array('name', 'email'); - - $context['sub_template'] = 'search'; - $context['old_search'] = isset($_GET['search']) ? $_GET['search'] : (isset($_POST['search']) ? htmlspecialchars($_POST['search']) : ''); - } + redirectexit('action=memberlist'); $context['linktree'][] = array( 'url' => $scripturl . '?action=memberlist;sa=search', diff --git a/themes/default/Memberlist.template.php b/themes/default/Memberlist.template.php index d7bfc84f50..464bc6db85 100644 --- a/themes/default/Memberlist.template.php +++ b/themes/default/Memberlist.template.php @@ -161,48 +161,4 @@ function toggle_mlsearch_opt() echo '

'; -} - -/** - * A page allowing people to search the member list. - */ -function template_search() -{ - global $context, $settings, $scripturl, $txt; - - template_pagesection('memberlist_buttons', 'right', '', array('top_button' => false)); - - // Start the submission form for the search! - echo ' -
-

- ', !empty($settings['use_buttons']) ? '' : '', $txt['mlist_search'], ' -

-
- -
- -
-
-
'; } \ No newline at end of file From c2e402d8b8d98d6ec8bcfbcd89262dff2f6f10f2 Mon Sep 17 00:00:00 2001 From: emanuele Date: Sun, 14 Jul 2013 21:55:11 +0200 Subject: [PATCH 3/3] Trying to find something nicer to output the memberlist page (related to a todo comment in the code about email_address) Signed-off-by: emanuele --- sources/controllers/Memberlist.controller.php | 12 +++- sources/subs/Memberlist.subs.php | 5 ++ themes/default/Memberlist.template.php | 63 +++++++++---------- 3 files changed, 43 insertions(+), 37 deletions(-) diff --git a/sources/controllers/Memberlist.controller.php b/sources/controllers/Memberlist.controller.php index 224a54235f..caa6bf066e 100644 --- a/sources/controllers/Memberlist.controller.php +++ b/sources/controllers/Memberlist.controller.php @@ -69,7 +69,7 @@ public function action_index() // Set up the standard columns... $context['columns'] = array( - 'is_online' => array( + 'online' => array( 'label' => $txt['status'], 'width' => 60, 'class' => 'first_th centertext', @@ -109,7 +109,7 @@ public function action_index() 'up' => 'IFNULL(mg.group_name, 1=1) ASC, mg.group_name ASC' ), ), - 'registered' => array( + 'date_registered' => array( 'label' => $txt['date_registered'], 'sort' => array( 'down' => 'mem.date_registered DESC', @@ -155,7 +155,6 @@ public function action_index() ); $context['can_send_pm'] = allowedTo('pm_send'); - $context['can_send_email'] = allowedTo('send_email_to_members'); // Build the memberlist button array. $context['memberlist_buttons'] = array( @@ -182,6 +181,13 @@ public function action_index() // Allow mods to add additional buttons here call_integration_hook('integrate_memberlist_buttons'); + if (!allowedTo('send_email_to_members')) + unset($context['columns']['email_address']); + if (isset($context['disabled_fields']['website'])) + unset($context['columns']['website']); + if (isset($context['disabled_fields']['posts'])) + unset($context['columns']['posts']); + // Jump to the sub action. if (isset($subActions[$context['listing_by']])) $this->{$subActions[$context['listing_by']][1]}(); diff --git a/sources/subs/Memberlist.subs.php b/sources/subs/Memberlist.subs.php index 3f5964f8af..1cdec87ca3 100644 --- a/sources/subs/Memberlist.subs.php +++ b/sources/subs/Memberlist.subs.php @@ -340,6 +340,11 @@ function printMemberListRows($request) $context['members'][$member] = $memberContext[$member]; $context['members'][$member]['post_percent'] = round(($context['members'][$member]['real_posts'] * 100) / $most_posts); $context['members'][$member]['registered_date'] = strftime('%Y-%m-%d', $context['members'][$member]['registered_timestamp']); + $context['members'][$member]['real_name'] = $context['members'][$member]['link']; + $context['members'][$member]['email_address'] = $context['members'][$member]['email']; + $context['members'][$member]['website_url'] = $context['members'][$member]['website']['url'] != '' ? '' . $context['members'][$member]['website']['title'] . '' : ''; + $context['members'][$member]['id_group'] = empty($context['members'][$member]['group']) ? $context['members'][$member]['post_group'] : $context['members'][$member]['group']; + $context['members'][$member]['date_registered'] = $context['members'][$member]['registered']; // Take care of the custom fields if any are being displayed if (!empty($context['custom_profile_fields']['columns'])) diff --git a/themes/default/Memberlist.template.php b/themes/default/Memberlist.template.php index 464bc6db85..6a0ddec5f6 100644 --- a/themes/default/Memberlist.template.php +++ b/themes/default/Memberlist.template.php @@ -69,10 +69,6 @@ function toggle_mlsearch_opt() // Display each of the column headers of the table. foreach ($context['columns'] as $key => $column) { - // @TODO maybe find something nicer? - if ($key == 'email_address' && !$context['can_send_email']) - continue; - // This is a selected column, so underline it or some such. if ($column['selected']) echo ' @@ -98,37 +94,36 @@ function toggle_mlsearch_opt() foreach ($context['members'] as $member) { echo ' - - - ', $context['can_send_pm'] ? '' : '', $settings['use_image_buttons'] ? '' . $member['online']['text'] . '' : $member['online']['label'], $context['can_send_pm'] ? '' : '', ' - - ', $member['link'], ''; - - if ($context['can_send_email']) - echo ' - ', $member['show_email'] == 'no' ? '' : '' . $txt['email'] . '', ''; - - if (!isset($context['disabled_fields']['website'])) - echo ' - ', $member['website']['url'] != '' ? '' . $member['website']['title'] . '' : '', ''; - - // Group and date. - echo ' - ', empty($member['group']) ? $member['post_group'] : $member['group'], ' - ', $member['registered_date'], ''; - - if (!isset($context['disabled_fields']['posts'])) - { - echo ' - ', $member['posts'], ''; - } - - // Any custom fields on display? - if (!empty($context['custom_profile_fields']['columns'])) + '; + foreach ($context['columns'] as $column => $values) { - foreach ($context['custom_profile_fields']['columns'] as $key => $column) - echo ' - ', $member['options'][substr($key, 5)], ''; + if (isset($member[$column])) + { + if ($column == 'online') + { + echo ' + + ', $context['can_send_pm'] ? '' : '', $settings['use_image_buttons'] ? '' . $member['online']['text'] . '' : $member['online']['label'], $context['can_send_pm'] ? '' : '', ' + '; + continue; + } + elseif ($column == 'email_address') + { + echo ' + ', $member['show_email'] == 'no' ? '' : '' . $txt['email'] . '', ''; + continue; + } + else + echo ' + ', $member[$column], ''; + } + // Any custom fields on display? + elseif (!empty($context['custom_profile_fields']['columns']) && isset($context['custom_profile_fields']['columns'][$column])) + { + foreach ($context['custom_profile_fields']['columns'] as $key => $col) + echo ' + ', $member['options'][substr($key, 5)], ''; + } } echo '