uw_lib_refshelf.module 15.6 KB
Newer Older
Ganesharatnam's avatar
Ganesharatnam committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
/**
 * Purpose of this modules to display the data feeding from Textura in JSON to
 * WCMS Library site.Keyword search functionality for description and name is
 * also supported by this module.
 * Written by Lathangi Ganesh Dec 12, 2017
 */

/**
 * Implements hook_menu().
 */
function uw_lib_refshelf_menu() {
  $items['online-reference-shelf']=array(
    'title' => 'Online Reference Shelf',
    'page callback' => 'uw_lib_refshelf_render_data',
    'access callback' => TRUE,
  );
  return $items;
}

/**
Ganesharatnam's avatar
Ganesharatnam committed
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
* Implements hook_block_info().
*/
function uw_lib_refshelf_block_info() {
  $blocks = array();
  $blocks['online_ref_shelfVer'] = array(
  'info'  => t("Online Ref Shelf"),
  'status' => TRUE, // enable the block
  'region' => 'sidebar_second',
  'weight' => '-30',
  'cache' => DRUPAL_CACHE_GLOBAL,
  'visibility' => BLOCK_VISIBILITY_LISTED,
  'pages' => "online-reference-shelf\nonline-reference-shelf/*",
  );
  return $blocks;
}

/**
* Implements hook_block_info().
*/
function uw_lib_refshelf_block_view($delta = '') {
  $block = array();
  switch ($delta) {
    case 'online_ref_shelfVer':
    $block['content'] = t('Form is going to be here');
    $search_form = drupal_get_form('uw_lib_refshelf_form');
    $search_block = drupal_render($search_form );
    $block['content'] = $search_block;
    break;
  }
  return $block;
}

/**
 * Implements hook_form().
Ganesharatnam's avatar
Ganesharatnam committed
56
 */
Ganesharatnam's avatar
Ganesharatnam committed
57
58
59
function uw_lib_refshelf_form($form, &$form_state) {
  $txt = '<span style="font-size:0.8rem;">test</span>';
  $form = array(
Ganesharatnam's avatar
Ganesharatnam committed
60
    //Define a simple text field for the "search"
Ganesharatnam's avatar
Ganesharatnam committed
61
62
63
64
65
66
67
68
69
    'name' => array(
      '#type' => 'textfield',
      '#size' => 30,
      '#attributes' => array('placeholder' => t('Please enter a keyword')),
      //'#attributes' => array('placeholder' => t($txt)),
      '#collapsible' => TRUE,
      '#collapsed' => FALSE,
      '#region' => 'content',
    ),
Ganesharatnam's avatar
Ganesharatnam committed
70
    //Define a simple submit button
Ganesharatnam's avatar
Ganesharatnam committed
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
    'submit' => array(
      '#type' => 'submit',
      '#value' => t('Search'),
    ),
  );
  return $form;
}

/**
 * Implements hook_form_validate().
 */
function uw_lib_refshelf_form_validate($form, &$form_state) {
  if (strlen($form_state['values']['name']) > 100) {
    form_set_error('', t('Word is too long'));
  }
  elseif (strlen($form_state['values']['name']) < 3) {
    form_set_error('', t('Please enter a word more than 2 characters'));
Ganesharatnam's avatar
Ganesharatnam committed
88
89
90
91
  }
}

/**
Ganesharatnam's avatar
Ganesharatnam committed
92
93
94
95
96
97
98
99
100
 * Implements hook_form_submit().
 */
function uw_lib_refshelf_form_submit($form, &$form_state) {
  $word = $form_state['values']['name'];
  drupal_goto('online-reference-shelf', array('query' => array('search' => $word)));
}

/**
 * Page callback calling from uw_lib_refshelf_menu()
Ganesharatnam's avatar
Ganesharatnam committed
101
102
103
104
 */
function uw_lib_refshelf_render_data() {
  $content = "";
  $links = "";
Ganesharatnam's avatar
Ganesharatnam committed
105
106

  //Sanitize the data from URL
Ganesharatnam's avatar
Ganesharatnam committed
107
108
109
110
  $filter_cat_id = isset($_GET['cat_id']) ? filter_var($_GET['cat_id'], FILTER_SANITIZE_STRING) : NULL;
  $filter_toc_id = isset($_GET['toc_id']) && is_numeric($_GET['toc_id']) ? $_GET['toc_id'] : NULL;
  $filter_pagenum = isset($_GET['pagenum']) ? filter_var($_GET['pagenum'], FILTER_SANITIZE_STRING) : NULL;
  $filter_search = isset($_GET['search']) ? filter_var($_GET['search'], FILTER_SANITIZE_STRING) : NULL;
Ganesharatnam's avatar
Ganesharatnam committed
111
112
113

//Check for cat_id and toc_id in GET
  if (array_key_exists("cat_id", $_GET) || array_key_exists("toc_id", $_GET)) {
Ganesharatnam's avatar
Ganesharatnam committed
114
    if (isset($filter_cat_id) && !empty($filter_cat_id)) {
Ganesharatnam's avatar
Ganesharatnam committed
115
116
    //Displaying Subcategories

Ganesharatnam's avatar
Ganesharatnam committed
117
118
119
120
121
122
      $cat_id = $filter_cat_id;
      $url = "https://libtextura.uwaterloo.ca/api-auth/v1/refshelf/categories/";
      $parent_data = _getData($cat_id, $url);
      $element = $parent_data['data'];
      $tit = $element[0]['name'];
      _setBreadCrumbs("cat_id", $cat_id, $tit, 0);
Ganesharatnam's avatar
Ganesharatnam committed
123

Ganesharatnam's avatar
Ganesharatnam committed
124
      $txt = "<h2>" . $tit . "</h2><br />";
Ganesharatnam's avatar
Ganesharatnam committed
125
126
      $_SESSION['tit'] = $txt;
      $qparam = $_GET['cat_id'];
Ganesharatnam's avatar
Ganesharatnam committed
127
      $links = _getLinkAndDesc($qparam, "toc_id");
Ganesharatnam's avatar
Ganesharatnam committed
128
      if (empty($links)) {
Ganesharatnam's avatar
Ganesharatnam committed
129
        $txt = "<h2>Resources for " . $tit . "</h2><br />";
Ganesharatnam's avatar
Ganesharatnam committed
130
        $links .= _getLinkAndDesc($qparam, "resources");
Ganesharatnam's avatar
Ganesharatnam committed
131
132
133
134
      }
      $content .= $txt;
      $content .= $links;
    }
Ganesharatnam's avatar
Ganesharatnam committed
135
    elseif (isset($filter_toc_id) && !empty($filter_toc_id)) {
Ganesharatnam's avatar
Ganesharatnam committed
136
137
    //Displaying resources for the subcategories

Ganesharatnam's avatar
Ganesharatnam committed
138
139
140
141
142
143
144
      $toc_id = $filter_toc_id;
      $url = "https://libtextura.uwaterloo.ca/api-auth/v1/refshelf/categories/";
      $parent_data = _getData($toc_id, $url);
      $element = $parent_data['data'];
      $parent_id = $element[0]['parent_category'];
      $tit = $element[0]['name'];
      _setBreadCrumbs("toc_id", $toc_id, $tit, $parent_id);
Ganesharatnam's avatar
Ganesharatnam committed
145
      $content .= $_SESSION['tit'];
Ganesharatnam's avatar
Ganesharatnam committed
146
      $txt = "<h3>" . $tit . "</h3><br />";
Ganesharatnam's avatar
Ganesharatnam committed
147
      $content .= $txt;
Ganesharatnam's avatar
Ganesharatnam committed
148
      $qparam = $filter_toc_id;
Ganesharatnam's avatar
Ganesharatnam committed
149
      $content .= _getLinkAndDesc($qparam, "resources");
Ganesharatnam's avatar
Ganesharatnam committed
150
151
    }
  }
Ganesharatnam's avatar
Ganesharatnam committed
152
  else {
Ganesharatnam's avatar
Ganesharatnam committed
153
    if (isset($filter_pagenum)) {
Ganesharatnam's avatar
Ganesharatnam committed
154
155
    //Pagination view

Ganesharatnam's avatar
Ganesharatnam committed
156
      _setBreadCrumbs("none", 0, "Online Reference Shelf", 0);
Ganesharatnam's avatar
Ganesharatnam committed
157
158
      $search_res = "";
      $rec_limit = 0;
Ganesharatnam's avatar
Ganesharatnam committed
159
      $pagenum = $filter_pagenum + 1;
Ganesharatnam's avatar
Ganesharatnam committed
160
      $offset = $rec_limit * $pagenum;
Ganesharatnam's avatar
Ganesharatnam committed
161
162
      $stored_search_results = $_SESSION['search_results'];
      $word = $_SESSION['search_word'];
Ganesharatnam's avatar
Ganesharatnam committed
163
164
165
166
      $search_res .= _viewSearchResults($stored_search_results, $word, $pagenum, $offset);
      $content = $search_res;
    }
    elseif (isset($filter_search)) {
Ganesharatnam's avatar
Ganesharatnam committed
167
168
    //Search results

Ganesharatnam's avatar
Ganesharatnam committed
169
170
171
172
173
174
175
176
177
178
      _setBreadCrumbs("none", 0, "Online Reference Shelf", 0);
      $word = $filter_search;
      $word =  _filterSearchWord($word);
      $str_len = strlen($word);
      if ($str_len < 3) {
        $content = '<p><b>Please enter a valid keyword for search (not characters)</b></p>';
      }
      else {
        $content = _refshelfDataSearch($word);
      }
Ganesharatnam's avatar
Ganesharatnam committed
179
180
    }
    else {
Ganesharatnam's avatar
Ganesharatnam committed
181
182
    //Displaying the top level links

Ganesharatnam's avatar
Ganesharatnam committed
183
      _setBreadCrumbs("none", 0, "Online Reference Shelf", 0);
Ganesharatnam's avatar
Ganesharatnam committed
184
185
      $links = "";
      $txt = '<div><p>Find answers to quick factual questions in the online resources below.</p></div>';
Ganesharatnam's avatar
Ganesharatnam committed
186
      $txt .= '<div><h2>Browse by category</h2><br /></div>';
Ganesharatnam's avatar
Ganesharatnam committed
187
188
      $param = 0;
      $content .= $txt;
Ganesharatnam's avatar
Ganesharatnam committed
189
      $links .= _getLinkAndDesc($param, "cat_id");
Ganesharatnam's avatar
Ganesharatnam committed
190
191
192
193
194
195
196
      $content .= $links . '<br \>';
    }
  }
  return $content;
}

/**
Ganesharatnam's avatar
Ganesharatnam committed
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
 * Get the element as object
 * @param $uri the URI to get
 * @return object
 */
function _getData($param, $url) {
  $uri = $url . $param;
  $file_headers = @get_headers($uri);
  if (!$file_headers || $file_headers[0] == 'HTTP/1.1 404 Not Found') {
    drupal_set_message(t('<h3>URL is not available to collect the data</h3>'));
  }
  else{
    $response = file_get_contents($uri);
    if (!empty($response)) {
      return drupal_json_decode($response);
    }
    else{
      drupal_set_message(t('<h3> No Data is available</h3>'));
    }
  }
}

/**
 * get the data and manipulate the fields
Ganesharatnam's avatar
Ganesharatnam committed
220
 */
Ganesharatnam's avatar
Ganesharatnam committed
221
function _getLinkAndDesc($param, $str) {
Ganesharatnam's avatar
Ganesharatnam committed
222
223
224
225
226
227
  if ($str == 'resources') {
    $url = "https://libtextura.uwaterloo.ca/api-auth/v1/refshelf/resources/category/";
  }
  else {
    $url = "https://libtextura.uwaterloo.ca/api-auth/v1/refshelf/categories/parent/";
  }
Ganesharatnam's avatar
Ganesharatnam committed
228
229
  $param_data = _getData($param, $url);
  $content = "";
Ganesharatnam's avatar
Ganesharatnam committed
230
231
232
233
234
235
236
237
238
  $link = "";
  $desc = "";
  $elements = $param_data['data'];

  foreach ($elements as $element) {
    $link_name = $element['name'];
    $id = $element['id'];
    if (isset($element['url'])) {
      $link_url = $element['url'];
Ganesharatnam's avatar
Ganesharatnam committed
239
240
241
242
      if (isset($element['is_restricted_resource'])) {
        $restricted = $element['is_restricted_resource'];
        $link_url = _filterRestrictedResource($restricted, $link_url);
      }
Ganesharatnam's avatar
Ganesharatnam committed
243
244
    }
    else {
Ganesharatnam's avatar
Ganesharatnam committed
245
      $link_url = "?" . $str . "=" . $id;
Ganesharatnam's avatar
Ganesharatnam committed
246
247
    }
    if (isset($element['description'])) {
Ganesharatnam's avatar
Ganesharatnam committed
248
249
      $content .= '<div><a href="' . $link_url . '">' . $link_name . '</a></div>';
      $content .= "<div>" . $element['description'] . "</div><br />";
Ganesharatnam's avatar
Ganesharatnam committed
250
251
252
    }
    else {
      if (!empty($link_name) && !empty($link_url)) {
Ganesharatnam's avatar
Ganesharatnam committed
253
        $content .= '<p><a href="' . $link_url . '">' . $link_name . '</a></p>';
Ganesharatnam's avatar
Ganesharatnam committed
254
255
256
      }
    }
  }
Ganesharatnam's avatar
Ganesharatnam committed
257
  return $content;
Ganesharatnam's avatar
Ganesharatnam committed
258
259
260
}

/**
Ganesharatnam's avatar
Ganesharatnam committed
261
262
263
264
265
266
267
268
* breadcrumbs
*/
function _setBreadCrumbs($str, $id, $title, $parent_id) {
  $breadcrumb = drupal_get_breadcrumb();
  $main_title = drupal_get_title();
  $title_link = '<a href="online-reference-shelf">' . $main_title . '</a>';
  if ($str == "none") {
    $breadcrumb[] = $title_link;
Ganesharatnam's avatar
Ganesharatnam committed
269
  }
Ganesharatnam's avatar
Ganesharatnam committed
270
271
272
  elseif ($str == "cat_id") {
    $breadcrumb[] = $title_link;
    $breadcrumb[] = $title;
Ganesharatnam's avatar
Ganesharatnam committed
273
  }
Ganesharatnam's avatar
Ganesharatnam committed
274
275
276
277
278
279
280
281
282
283
  elseif ($str == "toc_id") {
    $breadcrumb[] = $title_link;
    $url = "https://libtextura.uwaterloo.ca/api-auth/v1/refshelf/categories/";
    $parent_data = _getData($parent_id, $url);
    $element = $parent_data['data'];
    $tit = $element[0]['name'];
    $link_url = "?" . "cat_id" . "=" . $parent_id;
    $parent_link = '<a href="' . $link_url . '">' . $tit . '</a>';
    $breadcrumb[] = $parent_link;
    $breadcrumb[] = $title;
Ganesharatnam's avatar
Ganesharatnam committed
284
  }
Ganesharatnam's avatar
Ganesharatnam committed
285
286
287
288
  else {
    $breadcrumb[] = $title_link;
  }
  drupal_set_breadcrumb($breadcrumb);
Ganesharatnam's avatar
Ganesharatnam committed
289
290
291
292
293
294
}

/**
 * To get the appropriate search results for different parameters
 * In this case searching in description and name fields
 */
Ganesharatnam's avatar
Ganesharatnam committed
295
296
function _refshelfDataSearch($word) {
  $content = "";
Ganesharatnam's avatar
Ganesharatnam committed
297
298
299
  $param = "";
  $all = array();
  $url = "https://libtextura.uwaterloo.ca/api-auth/v1/refshelf/resources/";
Ganesharatnam's avatar
Ganesharatnam committed
300
  $param_data = _getData($param, $url);
Ganesharatnam's avatar
Ganesharatnam committed
301
302
303
304
305
306
  $elements = $param_data['data'];

  foreach ($elements as $element) {
    $link_name = ($element['name']);
    $link_url = ($element['url']);
    $desc = $element['description'];
Ganesharatnam's avatar
Ganesharatnam committed
307
    $restricted = $element['is_restricted_resource'];
Ganesharatnam's avatar
Ganesharatnam committed
308
309
310

    //keyword search in description
    if (isset($element['description']) && !empty($element['description'])) {
Ganesharatnam's avatar
Ganesharatnam committed
311
312
      $status = _keywordSearch($word, $desc);
      $all[] =  _processingSearchResults($status, $desc, $link_name, $link_url, $word, $restricted);
Ganesharatnam's avatar
Ganesharatnam committed
313
314
315
316
    }

    //keyword search in name
    if (isset($element['name']) && !empty($element['name'])) {
Ganesharatnam's avatar
Ganesharatnam committed
317
318
      $status = _keywordSearch($word, $link_name);
      $all[] =  _processingSearchResults($status, $desc, $link_name, $link_url, $word, $restricted);
Ganesharatnam's avatar
Ganesharatnam committed
319
320
321
322
323
    }
  }
  //Eliminate duplicates
  $no_duplicates = array_unique($all);
  $records_cnt = count($no_duplicates);
Ganesharatnam's avatar
Ganesharatnam committed
324
  $actual_records = $records_cnt -1 ;
Ganesharatnam's avatar
Ganesharatnam committed
325

Ganesharatnam's avatar
Ganesharatnam committed
326
  if ($records_cnt < 25) {
Ganesharatnam's avatar
Ganesharatnam committed
327
    $msg = "<h3>The following result(s) found for the keyword <span style='background-color: #ffea30;'>" . $word . "</span></h3><br />";
Ganesharatnam's avatar
Ganesharatnam committed
328
329
    if (!empty($no_duplicates)) {
      foreach ($no_duplicates as $result) {
Ganesharatnam's avatar
Ganesharatnam committed
330
        $content .= $result;
Ganesharatnam's avatar
Ganesharatnam committed
331
332
      }
    }
Ganesharatnam's avatar
Ganesharatnam committed
333
334
    if (!empty($content)) {
      $results = $msg . $content;
Ganesharatnam's avatar
Ganesharatnam committed
335
336
337
      return $results;
    }
    else{
Ganesharatnam's avatar
Ganesharatnam committed
338
      return "<h3>No results found for the keyword <b>" . $word . "</b></h3>";
Ganesharatnam's avatar
Ganesharatnam committed
339
340
341
342
    }
  }
  else{
    $_SESSION['search_results'] =  $no_duplicates;
Ganesharatnam's avatar
Ganesharatnam committed
343
    $_SESSION['search_word'] = $word;
Ganesharatnam's avatar
Ganesharatnam committed
344
345
    $pagenum = 0;
    $offset = 0;
Ganesharatnam's avatar
Ganesharatnam committed
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
    $view = _viewSearchResults($no_duplicates, $word, $pagenum, $offset);
    return $view;
  }
}

/**
Resctriced URL is passed through the proxy
*/
function _filterRestrictedResource($restricted, $url) {
  $proxy_url = "http://proxy.lib.uwaterloo.ca/login?url=";
  if ($restricted == 1) {
    $link_addr = $proxy_url . $url;
  }
  else {
    $link_addr = $url;
Ganesharatnam's avatar
Ganesharatnam committed
361
  }
Ganesharatnam's avatar
Ganesharatnam committed
362
  return $link_addr;
Ganesharatnam's avatar
Ganesharatnam committed
363
364
365
366
367
}

/**
 * To highlight the search word in search results
 */
Ganesharatnam's avatar
Ganesharatnam committed
368
369
370
371
372
373
374
function _highlightSearchWord($word, $str) {
  //Replace exctly like search string
  //$word_style = "<span style='background-color: #ffea30;'>" . $word . "</span>";
  //$highlighted = str_ireplace($word, $word_style, $str);

  //Search results keyword lowercase
  $word_lc = strtolower($word);
Ganesharatnam's avatar
Ganesharatnam committed
375
  $word_style1 = _styleWord($word_lc);
Ganesharatnam's avatar
Ganesharatnam committed
376
377
378
379
  $highlighted = str_replace($word_lc, $word_style1, $str);

  //Search results keyword -- First letter uppercase
  $word_ucf = ucfirst($word);
Ganesharatnam's avatar
Ganesharatnam committed
380
  $word_style2 = _styleWord($word_ucf);
Ganesharatnam's avatar
Ganesharatnam committed
381
382
383
384
  $highlighted = str_replace($word_ucf, $word_style2, $highlighted);

  //Search results keyword uppercase
  $word_uc = strtoupper($word);
Ganesharatnam's avatar
Ganesharatnam committed
385
386
  $word_style3 = _styleWord($word_uc);
  $highlighted = str_replace($word_uc, $word_style3, $highlighted);
Ganesharatnam's avatar
Ganesharatnam committed
387

Ganesharatnam's avatar
Ganesharatnam committed
388
  //Replacement for a search keyword -- all uppercase
Ganesharatnam's avatar
Ganesharatnam committed
389
390
391
  if (ctype_upper($word)) {
    //For search results keyword -- lowercase
    $word_uc = strtolower($word);
Ganesharatnam's avatar
Ganesharatnam committed
392
393
    $word_style4 = _styleWord($word_uc);
    $highlighted = str_replace($word_uc, $word_style4, $highlighted);
Ganesharatnam's avatar
Ganesharatnam committed
394

Ganesharatnam's avatar
Ganesharatnam committed
395
    //For search results keyword -- First letter -- uppercase
Ganesharatnam's avatar
Ganesharatnam committed
396
    $word_ucf = ucfirst($word_uc);
Ganesharatnam's avatar
Ganesharatnam committed
397
398
    $word_style5 = _styleWord($word_ucf);
    $highlighted = str_replace($word_ucf, $word_style5, $highlighted);
Ganesharatnam's avatar
Ganesharatnam committed
399
  }
Ganesharatnam's avatar
Ganesharatnam committed
400
  return $highlighted;
Ganesharatnam's avatar
Ganesharatnam committed
401
402
}

Ganesharatnam's avatar
Ganesharatnam committed
403
404
405
406
407
408
409
410
/**
 * Apply the style for search word
 */
function _styleWord($word) {
  $word_style = "<span style='background-color: #ffea30;'>" . $word . "</span>";
  return $word_style;
}

Ganesharatnam's avatar
Ganesharatnam committed
411
412
413
/**
 * To display the search results with pagination
 */
Ganesharatnam's avatar
Ganesharatnam committed
414
function _viewSearchResults($no_duplicates, $word, $pagenum, $offset) {
Ganesharatnam's avatar
Ganesharatnam committed
415
416
  $page = "";
  $content = "";
Ganesharatnam's avatar
Ganesharatnam committed
417
418
  $results = "";
  $rec_count = count($no_duplicates);
Ganesharatnam's avatar
Ganesharatnam committed
419
420
421
422
423
424
425
  $rec_limit = 25;
  $left_rec = $rec_count - ($pagenum * $rec_limit) - 2 ;
  $offset = $rec_limit * $pagenum ;
  $limit = $rec_limit * $pagenum;

  if (!empty($no_duplicates)) {
    if ($rec_count > $offset) {
Ganesharatnam's avatar
Ganesharatnam committed
426
      $msg = "<h3>The following result[s] found for the keyword <span style='background-color: #ffea30;'>" . $word . "</span></h3><br />";
Ganesharatnam's avatar
Ganesharatnam committed
427
428
429
430
431
432
433
434
435
436
437
438
      $cnt = 0;
      $c = 0;
      foreach ($no_duplicates as $result) {
        if ($cnt > $offset) {
          if ($c < $rec_limit) {
        $page .= $result;
            }
          $c++;
        }
        $cnt++;
      }
      if (!empty($page)) {
Ganesharatnam's avatar
Ganesharatnam committed
439
        $results = $msg . $page;
Ganesharatnam's avatar
Ganesharatnam committed
440
441
      }
      else {
Ganesharatnam's avatar
Ganesharatnam committed
442
        $results = "<h3>No results found for the keyword <b>" . $word . "</b></h3>";
Ganesharatnam's avatar
Ganesharatnam committed
443
444
445
      }
    }
  }
Ganesharatnam's avatar
Ganesharatnam committed
446
  $pagination = _pagination($pagenum, $left_rec, $rec_limit);
Ganesharatnam's avatar
Ganesharatnam committed
447
448
449
450
451
452
453
  $content = $results . $pagination;
  return $content;
}

/**
 * Formatting the search results to display
 */
Ganesharatnam's avatar
Ganesharatnam committed
454
455
456
457
458
459
//function _processingSearchResults($status, $desc, $link_name, $link_url, $word) {
function _processingSearchResults($status, $desc, $link_name, $link_url, $word, $restricted) {
  $content = "";
  $link_url = _filterRestrictedResource($restricted, $link_url);
  $desc = _highlightSearchWord($word, $desc);
  $link_name = _highlightSearchWord($word, $link_name);
Ganesharatnam's avatar
Ganesharatnam committed
460

Ganesharatnam's avatar
Ganesharatnam committed
461
462
  if ($status) {
    if (!empty($desc)) {
Ganesharatnam's avatar
Ganesharatnam committed
463
      $link = '<span class="ref_links"><a href="' . $link_url . '">' . $link_name . '</a></span>';
Ganesharatnam's avatar
Ganesharatnam committed
464
      $content .= $link . "<p>" . $desc . "</p>";
Ganesharatnam's avatar
Ganesharatnam committed
465
466
    }
    else {
Ganesharatnam's avatar
Ganesharatnam committed
467
      $content .= "<p>No results found for the word</p>";
Ganesharatnam's avatar
Ganesharatnam committed
468
469
    }
  }
Ganesharatnam's avatar
Ganesharatnam committed
470
  return $content;
Ganesharatnam's avatar
Ganesharatnam committed
471
472
473
474
475
}

/**
 * Keyword search in the data array or data string
 */
Ganesharatnam's avatar
Ganesharatnam committed
476
function _keywordSearch($word, $data) {
Ganesharatnam's avatar
Ganesharatnam committed
477
  //For array
Ganesharatnam's avatar
Ganesharatnam committed
478
479
480
481
482
483
484
485
486
  if (is_array($data) && !empty($data)) {
    $data = array_map('strtolower', $data);
    if (in_array ($word, $data)) {
      return TRUE;
    }
    else{
      return FALSE;
    }
  }
Ganesharatnam's avatar
Ganesharatnam committed
487
  else{ //For String
Ganesharatnam's avatar
Ganesharatnam committed
488
489
490
    $str = trim($data);
    $str = strtolower($data);
    if (!empty($word) && !empty($str)) {
Ganesharatnam's avatar
Ganesharatnam committed
491
492
493
      if (strlen($str) >= strlen($word)) {
        $s_word = "/" . $word . "/i";
        if (preg_match($s_word, $str)) {
Ganesharatnam's avatar
Ganesharatnam committed
494
495
          return TRUE;
        }
Ganesharatnam's avatar
Ganesharatnam committed
496
        else {
Ganesharatnam's avatar
Ganesharatnam committed
497
          return FALSE;
Ganesharatnam's avatar
Ganesharatnam committed
498
       }
Ganesharatnam's avatar
Ganesharatnam committed
499
500
501
502
503
504
      }
    }
  }
}

/**
Ganesharatnam's avatar
Ganesharatnam committed
505
 * Filter the search word for bad characters
Ganesharatnam's avatar
Ganesharatnam committed
506
 */
Ganesharatnam's avatar
Ganesharatnam committed
507
508
function _filterSearchWord($word) {
  $word = trim($word);
Ganesharatnam's avatar
Ganesharatnam committed
509
510
  //$chars = array('/', '\\', '[', ']', "<", "*", ">", "}", "{", "^");
  $chars = array('/', '\\', '[', ']', "<", "*", ">", "}", "{", "^", "(", ")", "+", "?");
Ganesharatnam's avatar
Ganesharatnam committed
511
512
513
514
515
516
517
518
519
  $search_str = str_replace($chars, '', $word);
  return $search_str;
}

/**
 * Pagination at the bottom for search results - custom
 */
function _pagination($pagenum, $left_rec, $rec_limit) {
  $content = "";
Ganesharatnam's avatar
Ganesharatnam committed
520
  if ( $left_rec < $rec_limit ) {
Ganesharatnam's avatar
Ganesharatnam committed
521
522
    $last = $pagenum - 2;
    $content = "<a href = \"?pagenum={$last}\">Previous</a>";
Ganesharatnam's avatar
Ganesharatnam committed
523
524
525
526
527
528
529
530
  }
  elseif ($pagenum == 0 ) {
    $content =  "<a href = \"?pagenum={$pagenum}\">Next</a>";
  }
  elseif ($pagenum > 0 ) {
    $last = $pagenum - 2;
    $content .=  "<a href = \"?pagenum={$last}\">Previous</a> |";
    $content .=  "<a href = \"?pagenum={$pagenum}\">Next</a>";
Ganesharatnam's avatar
Ganesharatnam committed
531
532
533
534
  }
  $content = "<table align='center'><tr><td align='center'>" . $content . "</td></tr></table>";
  return $content;
}