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
      }
Ganesharatnam's avatar
Ganesharatnam committed
132

Ganesharatnam's avatar
Ganesharatnam committed
133
134
135
      $content .= $txt;
      $content .= $links;
    }
Ganesharatnam's avatar
Ganesharatnam committed
136
    elseif (isset($filter_toc_id) && !empty($filter_toc_id)) {
Ganesharatnam's avatar
Ganesharatnam committed
137
138
    //Displaying resources for the subcategories

Ganesharatnam's avatar
Ganesharatnam committed
139
140
141
142
143
144
145
      $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
146
      $content .= $_SESSION['tit'];
Ganesharatnam's avatar
Ganesharatnam committed
147
      $txt = "<h3>" . $tit . "</h3><br />";
Ganesharatnam's avatar
Ganesharatnam committed
148
      $content .= $txt;
Ganesharatnam's avatar
Ganesharatnam committed
149
      $qparam = $filter_toc_id;
Ganesharatnam's avatar
Ganesharatnam committed
150
      $content .= _getLinkAndDesc($qparam, "resources");
Ganesharatnam's avatar
Ganesharatnam committed
151
152
    }
  }
Ganesharatnam's avatar
Ganesharatnam committed
153
  else {
Ganesharatnam's avatar
Ganesharatnam committed
154
    if (isset($filter_pagenum)) {
Ganesharatnam's avatar
Ganesharatnam committed
155
156
    //Pagination view

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

Ganesharatnam's avatar
Ganesharatnam committed
170
171
172
173
174
175
176
177
178
179
      _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
180
181
    }
    else {
Ganesharatnam's avatar
Ganesharatnam committed
182
183
    //Displaying the top level links

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

/**
Ganesharatnam's avatar
Ganesharatnam committed
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
 * 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
221
 */
Ganesharatnam's avatar
Ganesharatnam committed
222
function _getLinkAndDesc($param, $str) {
Ganesharatnam's avatar
Ganesharatnam committed
223
224
225
226
227
228
  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
229
230
  $param_data = _getData($param, $url);
  $content = "";
Ganesharatnam's avatar
Ganesharatnam committed
231
232
233
234
235
236
237
238
239
  $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
240
241
242
243
      if (isset($element['is_restricted_resource'])) {
        $restricted = $element['is_restricted_resource'];
        $link_url = _filterRestrictedResource($restricted, $link_url);
      }
Ganesharatnam's avatar
Ganesharatnam committed
244
245
    }
    else {
Ganesharatnam's avatar
Ganesharatnam committed
246
      $link_url = "?" . $str . "=" . $id;
Ganesharatnam's avatar
Ganesharatnam committed
247
248
    }
    if (isset($element['description'])) {
Ganesharatnam's avatar
Ganesharatnam committed
249
250
      $content .= '<div><a href="' . $link_url . '">' . $link_name . '</a></div>';
      $content .= "<div>" . $element['description'] . "</div><br />";
Ganesharatnam's avatar
Ganesharatnam committed
251
252
253
    }
    else {
      if (!empty($link_name) && !empty($link_url)) {
Ganesharatnam's avatar
Ganesharatnam committed
254
        $content .= '<p><a href="' . $link_url . '">' . $link_name . '</a></p>';
Ganesharatnam's avatar
Ganesharatnam committed
255
256
257
      }
    }
  }
Ganesharatnam's avatar
Ganesharatnam committed
258
  return $content;
Ganesharatnam's avatar
Ganesharatnam committed
259
260
261
}

/**
Ganesharatnam's avatar
Ganesharatnam committed
262
263
264
265
266
267
268
269
* 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
270
  }
Ganesharatnam's avatar
Ganesharatnam committed
271
272
273
  elseif ($str == "cat_id") {
    $breadcrumb[] = $title_link;
    $breadcrumb[] = $title;
Ganesharatnam's avatar
Ganesharatnam committed
274
  }
Ganesharatnam's avatar
Ganesharatnam committed
275
276
277
278
279
280
281
282
283
284
  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
285
  }
Ganesharatnam's avatar
Ganesharatnam committed
286
287
288
289
  else {
    $breadcrumb[] = $title_link;
  }
  drupal_set_breadcrumb($breadcrumb);
Ganesharatnam's avatar
Ganesharatnam committed
290
291
292
293
294
295
}

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

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

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

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

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

/**
 * To highlight the search word in search results
 */
Ganesharatnam's avatar
Ganesharatnam committed
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
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);
  $word_style1 = "<span style='background-color: #ffea30;'>" . $word_lc . "</span>";
  $highlighted = str_replace($word_lc, $word_style1, $str);

  //Search results keyword -- First letter uppercase
  $word_ucf = ucfirst($word);
  $word_style2 = "<span style='background-color: #ffea30;'>" . $word_ucf . "</span>";
  $highlighted = str_replace($word_ucf, $word_style2, $highlighted);

  //Search results keyword uppercase
  $word_uc = strtoupper($word);
  $word_style4 = "<span style='background-color: #ffea30;'>" . $word_uc . "</span>";
  $highlighted = str_replace($word_uc, $word_style4, $highlighted);

Ganesharatnam's avatar
Ganesharatnam committed
389
  //Replacement for a search keyword -- all uppercase
Ganesharatnam's avatar
Ganesharatnam committed
390
391
392
393
394
395
  if (ctype_upper($word)) {
    //For search results keyword -- lowercase
    $word_uc = strtolower($word);
    $word_style3 = "<span style='background-color: #ffea30;'>" . $word_uc . "</span>";
    $highlighted = str_replace($word_uc, $word_style3, $highlighted);

Ganesharatnam's avatar
Ganesharatnam committed
396
    //For search results keyword -- First letter -- uppercase
Ganesharatnam's avatar
Ganesharatnam committed
397
398
399
400
    $word_ucf = ucfirst($word_uc);
    $word_style2 = "<span style='background-color: #ffea30;'>" . $word_ucf . "</span>";
    $highlighted = str_replace($word_ucf, $word_style2, $highlighted);
  }
Ganesharatnam's avatar
Ganesharatnam committed
401
  return $highlighted;
Ganesharatnam's avatar
Ganesharatnam committed
402
403
404
405
406
}

/**
 * To display the search results with pagination
 */
Ganesharatnam's avatar
Ganesharatnam committed
407
function _viewSearchResults($no_duplicates, $word, $pagenum, $offset) {
Ganesharatnam's avatar
Ganesharatnam committed
408
409
  $page = "";
  $content = "";
Ganesharatnam's avatar
Ganesharatnam committed
410
411
  $results = "";
  $rec_count = count($no_duplicates);
Ganesharatnam's avatar
Ganesharatnam committed
412
413
414
415
416
417
418
  $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
419
      $msg = "<h3>The following result[s] found for the keyword <span style='background-color: #ffea30;'>" . $word . "</span></h3><br />";
Ganesharatnam's avatar
Ganesharatnam committed
420
421
422
423
424
425
426
427
428
429
430
431
      $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
432
        $results = $msg . $page;
Ganesharatnam's avatar
Ganesharatnam committed
433
434
      }
      else {
Ganesharatnam's avatar
Ganesharatnam committed
435
        $results = "<h3>No results found for the keyword <b>" . $word . "</b></h3>";
Ganesharatnam's avatar
Ganesharatnam committed
436
437
438
      }
    }
  }
Ganesharatnam's avatar
Ganesharatnam committed
439
  $pagination = _pagination($pagenum, $left_rec, $rec_limit);
Ganesharatnam's avatar
Ganesharatnam committed
440
441
442
443
444
445
446
  $content = $results . $pagination;
  return $content;
}

/**
 * Formatting the search results to display
 */
Ganesharatnam's avatar
Ganesharatnam committed
447
448
449
450
451
452
//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
453

Ganesharatnam's avatar
Ganesharatnam committed
454
455
  if ($status) {
    if (!empty($desc)) {
Ganesharatnam's avatar
Ganesharatnam committed
456
      $link = '<span class="ref_links"><a href="' . $link_url . '">' . $link_name . '</a></span>';
Ganesharatnam's avatar
Ganesharatnam committed
457
      $content .= $link . "<p>" . $desc . "</p>";
Ganesharatnam's avatar
Ganesharatnam committed
458
459
    }
    else {
Ganesharatnam's avatar
Ganesharatnam committed
460
      $content .= "<p>No results found for the word</p>";
Ganesharatnam's avatar
Ganesharatnam committed
461
462
    }
  }
Ganesharatnam's avatar
Ganesharatnam committed
463
  return $content;
Ganesharatnam's avatar
Ganesharatnam committed
464
465
466
467
468
}

/**
 * Keyword search in the data array or data string
 */
Ganesharatnam's avatar
Ganesharatnam committed
469
function _keywordSearch($word, $data) {
Ganesharatnam's avatar
Ganesharatnam committed
470
  //For array
Ganesharatnam's avatar
Ganesharatnam committed
471
472
473
474
475
476
477
478
479
  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
480
  else{ //For String
Ganesharatnam's avatar
Ganesharatnam committed
481
482
483
    $str = trim($data);
    $str = strtolower($data);
    if (!empty($word) && !empty($str)) {
Ganesharatnam's avatar
Ganesharatnam committed
484
485
486
      if (strlen($str) >= strlen($word)) {
        $s_word = "/" . $word . "/i";
        if (preg_match($s_word, $str)) {
Ganesharatnam's avatar
Ganesharatnam committed
487
488
          return TRUE;
        }
Ganesharatnam's avatar
Ganesharatnam committed
489
        else {
Ganesharatnam's avatar
Ganesharatnam committed
490
          return FALSE;
Ganesharatnam's avatar
Ganesharatnam committed
491
       }
Ganesharatnam's avatar
Ganesharatnam committed
492
493
494
495
496
497
      }
    }
  }
}

/**
Ganesharatnam's avatar
Ganesharatnam committed
498
 * Filter the search word for bad characters
Ganesharatnam's avatar
Ganesharatnam committed
499
 */
Ganesharatnam's avatar
Ganesharatnam committed
500
501
function _filterSearchWord($word) {
  $word = trim($word);
Ganesharatnam's avatar
Ganesharatnam committed
502
503
  //$chars = array('/', '\\', '[', ']', "<", "*", ">", "}", "{", "^");
  $chars = array('/', '\\', '[', ']', "<", "*", ">", "}", "{", "^", "(", ")", "+", "?");
Ganesharatnam's avatar
Ganesharatnam committed
504
505
506
507
508
509
510
511
512
  $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
513
  if ( $left_rec < $rec_limit ) {
Ganesharatnam's avatar
Ganesharatnam committed
514
515
    $last = $pagenum - 2;
    $content = "<a href = \"?pagenum={$last}\">Previous</a>";
Ganesharatnam's avatar
Ganesharatnam committed
516
517
518
519
520
521
522
523
  }
  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
524
525
526
527
  }
  $content = "<table align='center'><tr><td align='center'>" . $content . "</td></tr></table>";
  return $content;
}