1 | <?php |
||||||
2 | |||||||
3 | /** |
||||||
4 | * |
||||||
5 | * @package Anavaro.com PM Search |
||||||
6 | * @copyright (c) 2013 Lucifer |
||||||
7 | * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 |
||||||
8 | * |
||||||
9 | */ |
||||||
10 | |||||||
11 | /** |
||||||
12 | * @ignore |
||||||
13 | */ |
||||||
14 | namespace anavaro\pmsearch\ucp; |
||||||
15 | |||||||
16 | class ucp_pmsearch_module |
||||||
17 | { |
||||||
18 | var $u_action; |
||||||
19 | private $search_helper; |
||||||
20 | private $config; |
||||||
21 | private $terms_ary = array( |
||||||
22 | 'all' => 1, |
||||||
23 | 'any' => 2, |
||||||
24 | 'nick' => 3, |
||||||
25 | ); |
||||||
26 | function main($id, $mode) |
||||||
27 | { |
||||||
28 | global $db, $user, $auth, $template, $request, $phpbb_container, $config; |
||||||
29 | $this->config = $config; |
||||||
30 | $this->search_helper = $phpbb_container->get('anavaro.pmsearch.search.helper'); |
||||||
31 | if (!$auth->acl_get('u_pmsearch')) |
||||||
32 | { |
||||||
33 | trigger_error('ACCESS_DENIED'); |
||||||
34 | } |
||||||
35 | switch ($mode) |
||||||
36 | { |
||||||
37 | case 'search': |
||||||
38 | $this->tpl_name = 'ucp_pmsearch'; |
||||||
0 ignored issues
–
show
Bug
Best Practice
introduced
by
![]() |
|||||||
39 | $template->assign_vars(array( |
||||||
40 | 'S_UCP_ACTION' => append_sid("ucp.php?i=".$id."&mode=".$mode) |
||||||
0 ignored issues
–
show
The function
append_sid was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
41 | )); |
||||||
42 | |||||||
43 | $terms = $request->variable('terms', 'any'); |
||||||
44 | $keywords = utf8_normalize_nfc($request->variable('keywords', '', true)); |
||||||
0 ignored issues
–
show
The function
utf8_normalize_nfc was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
45 | |||||||
46 | if ($keywords) |
||||||
47 | { |
||||||
48 | $this->search = null; |
||||||
0 ignored issues
–
show
|
|||||||
49 | $error = false; |
||||||
50 | $search_types = $this->search_helper->get_search_types(); |
||||||
51 | if ($this->search_helper->init_search($search_types[0], $this->search, $error)) |
||||||
52 | { |
||||||
53 | trigger_error($error . adm_back_link($this->u_action), E_USER_WARNING); |
||||||
0 ignored issues
–
show
Are you sure
$error of type false can be used in concatenation ?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() The function
adm_back_link was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
54 | } |
||||||
55 | $search_count = 0; |
||||||
56 | $startFrom = $request->variable('start', 0); |
||||||
57 | $id_ary = array(); |
||||||
58 | $user_id = array( |
||||||
59 | '' => (int) $user->data['user_id'] |
||||||
60 | ); |
||||||
61 | //What are we searching for? |
||||||
62 | if ($terms != 'nick') |
||||||
63 | { |
||||||
64 | $this->search->split_keywords($keywords, $terms); |
||||||
0 ignored issues
–
show
The method
split_keywords() does not exist on null .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces. This is most likely a typographical error or the method has been renamed. ![]() |
|||||||
65 | //$search_count = $this->search->keyword_search('norma', 'all', 'all', array('msg_id' => 'a'), 'msg_id', 'd', 0, array($user_id), '', $id_ary, $startFrom, 25); |
||||||
66 | $search_count = $this->search->keyword_search('norma', 'all', 'all', array('msg_id' => 'a'), 'msg_id', 'd', 0, array(), '', '', $user_id, '', $id_ary, $startFrom, $this->config['search_block_size']); |
||||||
67 | |||||||
68 | } |
||||||
69 | else |
||||||
70 | { |
||||||
71 | // So do we have user_id or username? |
||||||
72 | if (!is_numeric($keywords)) |
||||||
73 | { |
||||||
74 | // It's username ... let's get ID |
||||||
75 | $sql = 'SELECT user_id FROM ' . USERS_TABLE . ' WHERE username_clean LIKE \'' . utf8_clean_string($keywords) . '\''; |
||||||
0 ignored issues
–
show
The function
utf8_clean_string was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
76 | $result = $db->sql_query($sql); |
||||||
77 | $user_id = $db->sql_fetchrow($result); |
||||||
78 | $keywords = $user_id['user_id']; |
||||||
79 | } |
||||||
80 | |||||||
81 | $search_count = $this->search->user_search($keywords, $id_ary, $startFrom, $this->config['search_block_size']); |
||||||
82 | } |
||||||
83 | |||||||
84 | if ($search_count > 0 ) |
||||||
85 | { |
||||||
86 | // Let's get additional info |
||||||
87 | $page_array = array(); |
||||||
88 | // As there seems to be some problem with POSTGRES SQL I'll split the info query in two separate queries - one for the message ... |
||||||
89 | $sql_array = array( |
||||||
90 | 'SELECT' => 'msg.msg_id as msg_id, msg.message_subject as msg_subject, msg.message_time as msg_time, msg.author_id as msg_author, tmsg.msg_id, MAX(tmsg.pm_unread) as unread, MAX(tmsg.pm_replied) as replied', |
||||||
91 | 'FROM' => array( |
||||||
92 | PRIVMSGS_TABLE => 'msg', |
||||||
0 ignored issues
–
show
|
|||||||
93 | PRIVMSGS_TO_TABLE => 'tmsg' |
||||||
0 ignored issues
–
show
|
|||||||
94 | ), |
||||||
95 | 'WHERE' => 'msg.msg_id = tmsg.msg_id and msg.author_id = tmsg.author_id and ' . $db->sql_in_set('msg.msg_id', $id_ary), |
||||||
96 | 'GROUP_BY' => 'msg.msg_id, tmsg.msg_id', |
||||||
97 | 'ORDER_BY' => 'msg.msg_id DESC' |
||||||
98 | ); |
||||||
99 | $sql = $db->sql_build_query('SELECT', $sql_array); |
||||||
100 | //$this->var_display($sql); |
||||||
101 | $result = $db->sql_query($sql); |
||||||
102 | // Let's populate template |
||||||
103 | $author_uid_arrray = array(); |
||||||
104 | while ($row = $db->sql_fetchrow($result)) |
||||||
105 | { |
||||||
106 | $author_uid_arrray[] = (int) $row['msg_author']; |
||||||
107 | $page_array[$row['msg_id']] = array( |
||||||
108 | 'msg_id' => $row['msg_id'], |
||||||
109 | 'msg_subject' => $row['msg_subject'], |
||||||
110 | 'msg_author' => $row['msg_author'], |
||||||
111 | 'msg_time' => (int) $row['msg_time'], |
||||||
112 | 'unread' => $row['unread'], |
||||||
113 | 'replied' => $row['replied'] |
||||||
114 | ); |
||||||
115 | } |
||||||
116 | if (is_numeric($keywords)) |
||||||
117 | { |
||||||
118 | $author_uid_arrray[] = (int) $keywords; |
||||||
119 | } |
||||||
120 | $db->sql_freeresult($result); |
||||||
121 | // ... one for the authors on this page |
||||||
122 | $authors_array = array(); |
||||||
123 | $sql = 'SELECT user_id, username, user_colour FROM ' . USERS_TABLE . ' WHERE ' . $db->sql_in_set('user_id', $author_uid_arrray); |
||||||
124 | $result = $db->sql_query($sql); |
||||||
125 | while ($row = $db->sql_fetchrow($result)) |
||||||
126 | { |
||||||
127 | $authors_array[$row['user_id']] = array( |
||||||
128 | 'username' => $row['username'], |
||||||
129 | 'user_colour' => $row['user_colour'] |
||||||
130 | ); |
||||||
131 | } |
||||||
132 | $count = 1; |
||||||
133 | foreach ($page_array as $VAR) { |
||||||
134 | $template->assign_block_vars('pm_results', array( |
||||||
135 | 'S_ROW_COUNT' => $count, |
||||||
136 | 'FOLDER_IMG_STYLE' => ($VAR['unread'] ? 'pm_unread' : 'pm_read'), |
||||||
137 | 'PM_CLASS' => ($VAR['replied'] ? 'pm_replied_colour' : ''), |
||||||
138 | 'U_VIEW_PM' => './ucp.php?i=pm&mode=view&p=' . $VAR['msg_id'], |
||||||
139 | 'SUBJECT' => $VAR['msg_subject'], |
||||||
140 | 'SENT_TIME' => $user->format_date($VAR['msg_time']), |
||||||
141 | 'MESSAGE_AUTHOR_FULL' => ($authors_array[$VAR['msg_author']]['user_colour'] ? '<a href="./memberlist.php?mode=viewprofile&u=' . $VAR['msg_author'] . '" class="username-coloured" style="color: #' . $authors_array[$VAR['msg_author']]['user_colour'] . ';">' . $authors_array[$VAR['msg_author']]['username'] . '</a>' : '<a href="./memberlist.php?mode=viewprofile&u=' . $VAR['msg_author'] . '" class="username">' . $authors_array[$VAR['msg_author']]['username'] . '</a>'), |
||||||
142 | )); |
||||||
143 | $count ++; |
||||||
144 | } |
||||||
145 | |||||||
146 | $pagination = $phpbb_container->get('pagination'); |
||||||
147 | $base_url = append_sid('ucp.php?i=' . $id . '&mode=' . $mode . '&keywords=' . $keywords . '&terms=' . $terms); |
||||||
148 | $pagination->generate_template_pagination($base_url, 'pagination', 'start', $search_count, $this->config['search_block_size'], $startFrom); |
||||||
149 | $pageNumber = $pagination->get_on_page($this->config['search_block_size'], $startFrom); |
||||||
0 ignored issues
–
show
|
|||||||
150 | if (is_numeric($keywords)) |
||||||
151 | { |
||||||
152 | $template->assign_vars(array( |
||||||
153 | 'S_KEYWORDS' => $authors_array[$keywords]['username'] |
||||||
154 | )); |
||||||
155 | } |
||||||
156 | else |
||||||
157 | { |
||||||
158 | $template->assign_vars(array( |
||||||
159 | 'S_KEYWORDS' => $keywords |
||||||
160 | )); |
||||||
161 | } |
||||||
162 | $template->assign_vars(array( |
||||||
163 | 'PAGE_NUMBER' => $pagination->on_page($search_count, $this->config['search_block_size'], $startFrom), |
||||||
164 | 'TOTAL_MESSAGES' => $search_count, |
||||||
165 | 'HAS_RESULTS' => 1, |
||||||
166 | )); |
||||||
167 | } |
||||||
168 | |||||||
169 | else |
||||||
170 | { |
||||||
171 | trigger_error('NO_RESULTS_FOUND'); |
||||||
172 | } |
||||||
173 | // After we got the the search count we go deeper |
||||||
174 | } |
||||||
175 | $template->assign_vars(array( |
||||||
176 | 'SEARCH_TEARM_TYPE' => $this->terms_ary[$terms] |
||||||
177 | )); |
||||||
178 | } |
||||||
179 | } |
||||||
180 | } |
||||||
181 |