uw_lib_refshelf.module 17.5 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
function uw_lib_refshelf_form($form, &$form_state) {
  $form = array(
Ganesharatnam's avatar
Ganesharatnam committed
59
    //Define a simple text field for the "search"
Ganesharatnam's avatar
Ganesharatnam committed
60
61
    'name' => array(
      '#type' => 'textfield',
Ganesharatnam's avatar
Ganesharatnam committed
62
63
      //'#size' => 30,
      //'#attributes' => array('placeholder' => t('Please enter a keyword')),
Ganesharatnam's avatar
Ganesharatnam committed
64
65
66
      '#collapsible' => TRUE,
      '#collapsed' => FALSE,
      '#region' => 'content',
Ganesharatnam's avatar
Ganesharatnam committed
67
68
69
70
      //The label that will be placed with the field
      '#title' => t('Search'),
      //The description will be placed right below the field
      '#description' => t('Please enter a keyword for search'),
Ganesharatnam's avatar
Ganesharatnam committed
71
    ),
Ganesharatnam's avatar
Ganesharatnam committed
72
    //Define a simple submit button
Ganesharatnam's avatar
Ganesharatnam committed
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
    '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
90
91
92
93
  }
}

/**
Ganesharatnam's avatar
Ganesharatnam committed
94
95
96
97
98
99
100
101
102
 * 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
103
104
105
106
 */
function uw_lib_refshelf_render_data() {
  $content = "";
  $links = "";
Ganesharatnam's avatar
Ganesharatnam committed
107
108

  //Sanitize the data from URL
Ganesharatnam's avatar
Ganesharatnam committed
109
110
111
112
  $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
113
114
115

//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
116
    if (isset($filter_cat_id) && !empty($filter_cat_id)) {
Ganesharatnam's avatar
Ganesharatnam committed
117
    //Displaying Subcategories
Ganesharatnam's avatar
Ganesharatnam committed
118
      $tit = "";
Ganesharatnam's avatar
Ganesharatnam committed
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'];
Ganesharatnam's avatar
Ganesharatnam committed
123
124
125
126
      if (!empty($element)) {
       $tit = $element[0]['name'];
       _setBreadCrumbs("cat_id", $cat_id, $tit, 0);
      }
Ganesharatnam's avatar
Ganesharatnam committed
127
      $txt = "<h2>" . $tit . "</h2><br />";
Ganesharatnam's avatar
Ganesharatnam committed
128
      $_SESSION['tit'] = $txt;
Ganesharatnam's avatar
Ganesharatnam committed
129
130
131
      $qparam = $cat_id;
      $cat_links = _getLinkAndDesc($qparam, "toc_id");
      if ($cat_links == "No data for this parameter") {
Ganesharatnam's avatar
Ganesharatnam committed
132
        $txt = "<h2>Resources for " . $tit . "</h2><br />";
Ganesharatnam's avatar
Ganesharatnam committed
133
134
135
        $resources = _getLinkAndDesc($qparam, "resources");
        $content .= $txt;
        $content .= $resources;
Ganesharatnam's avatar
Ganesharatnam committed
136
      }
Ganesharatnam's avatar
Ganesharatnam committed
137
138
139
140
141
      else {
        $content .= $txt;
        $content .= $cat_links;
      }

Ganesharatnam's avatar
Ganesharatnam committed
142
    }
Ganesharatnam's avatar
Ganesharatnam committed
143
    elseif (isset($filter_toc_id) && !empty($filter_toc_id)) {
Ganesharatnam's avatar
Ganesharatnam committed
144
    //Displaying resources for the subcategories
Ganesharatnam's avatar
Ganesharatnam committed
145
      $tit = "";
Ganesharatnam's avatar
Ganesharatnam committed
146
147
148
149
      $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'];
Ganesharatnam's avatar
Ganesharatnam committed
150
151
152
153
154
155
156
157
158
159
160
      if (!empty($element)) {
        $parent_id = $element[0]['parent_category'];
        $tit = $element[0]['name'];
        _setBreadCrumbs("toc_id", $toc_id, $tit, $parent_id);
      }
      if (isset($_SESSION['tit']) && !empty($_SESSION['tit'])) {
        $content .= $_SESSION['tit'];
        $content .= "<h3>" . $tit . "</h3><br />";
      }
      //$content .= $txt;
      $qparam = $toc_id;
Ganesharatnam's avatar
Ganesharatnam committed
161
      $content .= _getLinkAndDesc($qparam, "resources");
Ganesharatnam's avatar
Ganesharatnam committed
162
163
    }
  }
Ganesharatnam's avatar
Ganesharatnam committed
164
  else {
Ganesharatnam's avatar
Ganesharatnam committed
165
    if (isset($filter_pagenum)) {
Ganesharatnam's avatar
Ganesharatnam committed
166
    //Pagination view
Ganesharatnam's avatar
Ganesharatnam committed
167
      _setBreadCrumbs("none", 0, "Online Reference Shelf", 0);
Ganesharatnam's avatar
Ganesharatnam committed
168
169
      $search_res = "";
      $rec_limit = 0;
Ganesharatnam's avatar
Ganesharatnam committed
170
      $pagenum = $filter_pagenum + 1;
Ganesharatnam's avatar
Ganesharatnam committed
171
      $offset = $rec_limit * $pagenum;
Ganesharatnam's avatar
Ganesharatnam committed
172
173
174
175
176
177
178
179
180
      if (isset($_SESSION['search_results']) && isset($_SESSION['search_word'])) {
        $stored_search_results = $_SESSION['search_results'];
        $word = $_SESSION['search_word'];
        $search_res .= _viewSearchResults($stored_search_results, $word, $pagenum, $offset);
        $content = $search_res;
      }
      else {
        $content = "No search results";
      }
Ganesharatnam's avatar
Ganesharatnam committed
181
182
    }
    elseif (isset($filter_search)) {
Ganesharatnam's avatar
Ganesharatnam committed
183
    //Search results
Ganesharatnam's avatar
Ganesharatnam committed
184
185
186
187
188
189
190
191
192
193
      _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
194
195
    }
    else {
Ganesharatnam's avatar
Ganesharatnam committed
196
    //Displaying the top level categories
Ganesharatnam's avatar
Ganesharatnam committed
197
      _setBreadCrumbs("none", 0, "Online Reference Shelf", 0);
Ganesharatnam's avatar
Ganesharatnam committed
198
199
      $content = '<p>Find answers to quick factual questions in the online resources below.</p>';
      $content .= '<h2>Browse by category</h2><br />';
Ganesharatnam's avatar
Ganesharatnam committed
200
      $param = 0;
Ganesharatnam's avatar
Ganesharatnam committed
201
      $content .= _getLinkAndDesc($param, "cat_id");
Ganesharatnam's avatar
Ganesharatnam committed
202
203
204
205
206
207
    }
  }
  return $content;
}

/**
Ganesharatnam's avatar
Ganesharatnam committed
208
209
 * Get the data for appropriate URL and params
 * Converts an HTML-safe JSON string into its PHP equivalent
Ganesharatnam's avatar
Ganesharatnam committed
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
 */
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
230
 */
Ganesharatnam's avatar
Ganesharatnam committed
231
function _getLinkAndDesc($param, $str) {
Ganesharatnam's avatar
Ganesharatnam committed
232
233
234
235
236
237
  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
238
239
  $param_data = _getData($param, $url);
  $content = "";
Ganesharatnam's avatar
Ganesharatnam committed
240
241
242
  $link = "";
  $desc = "";
  $elements = $param_data['data'];
Ganesharatnam's avatar
Ganesharatnam committed
243
244
245
246
247
248
249
250
251
252
  if (!empty($elements)) {
    foreach ($elements as $element) {
      $link_name = $element['name'];
      $id = $element['id'];
      if (isset($element['url'])) {
        $link_url = $element['url'];
        if (isset($element['is_restricted_resource'])) {
          $restricted = $element['is_restricted_resource'];
          $link_url = _filterRestrictedResource($restricted, $link_url);
        }
Ganesharatnam's avatar
Ganesharatnam committed
253
      }
Ganesharatnam's avatar
Ganesharatnam committed
254
255
256
257
258
259
260
261
262
263
264
      else {
        $link_url = "?" . $str . "=" . $id;
      }
      if (isset($element['description'])) {
        $content .= '<li class="li-refshelf"><a href="' . $link_url . '">' . $link_name . '</a></li>';
        $content .= "<p>" . $element['description'] . "</p>";
      }
      else {
        if (!empty($link_name) && !empty($link_url)) {
          $content .= '<p><a href="' . $link_url . '">' . $link_name . '</a></p>';
        }
Ganesharatnam's avatar
Ganesharatnam committed
265
266
267
      }
    }
  }
Ganesharatnam's avatar
Ganesharatnam committed
268
269
270
  else {
    $content = "No data for this parameter";
  }
Ganesharatnam's avatar
Ganesharatnam committed
271
  return $content;
Ganesharatnam's avatar
Ganesharatnam committed
272
273
274
}

/**
Ganesharatnam's avatar
Ganesharatnam committed
275
276
277
278
279
* breadcrumbs
*/
function _setBreadCrumbs($str, $id, $title, $parent_id) {
  $breadcrumb = drupal_get_breadcrumb();
  $main_title = drupal_get_title();
Ganesharatnam's avatar
Ganesharatnam committed
280
281
282
283
284
  $main_title_link = '<a href="online-reference-shelf">' . $main_title . '</a>';
  $prev_title = "";
  $current_title = '<span class="breadcrumb-cur-title">' . $title . '</span>';
  $current_title_link = '<a href="">' . $current_title . '</a>';

Ganesharatnam's avatar
Ganesharatnam committed
285
  if ($str == "none") {
Ganesharatnam's avatar
Ganesharatnam committed
286
    $breadcrumb[] = $main_title_link;
Ganesharatnam's avatar
Ganesharatnam committed
287
  }
Ganesharatnam's avatar
Ganesharatnam committed
288
  elseif ($str == "cat_id") {
Ganesharatnam's avatar
Ganesharatnam committed
289
290
291
    $breadcrumb[] = $main_title_link;
    $breadcrumb[] = $current_title;
    //$breadcrumb[] = $current_title_link;
Ganesharatnam's avatar
Ganesharatnam committed
292
  }
Ganesharatnam's avatar
Ganesharatnam committed
293
  elseif ($str == "toc_id") {
Ganesharatnam's avatar
Ganesharatnam committed
294
    $breadcrumb[] = $main_title_link;
Ganesharatnam's avatar
Ganesharatnam committed
295
296
297
    $url = "https://libtextura.uwaterloo.ca/api-auth/v1/refshelf/categories/";
    $parent_data = _getData($parent_id, $url);
    $element = $parent_data['data'];
Ganesharatnam's avatar
Ganesharatnam committed
298
299
300
    if (!empty($element)) {
     $prev_title = $element[0]['name'];
    }
Ganesharatnam's avatar
Ganesharatnam committed
301
    $link_url = "?" . "cat_id" . "=" . $parent_id;
Ganesharatnam's avatar
Ganesharatnam committed
302
    $parent_link = '<a href="' . $link_url . '">' . $prev_title . '</a>';
Ganesharatnam's avatar
Ganesharatnam committed
303
    $breadcrumb[] = $parent_link;
Ganesharatnam's avatar
Ganesharatnam committed
304
305
    $breadcrumb[] = $current_title;
    //$breadcrumb[] = $current_title_link;
Ganesharatnam's avatar
Ganesharatnam committed
306
  }
Ganesharatnam's avatar
Ganesharatnam committed
307
  else {
Ganesharatnam's avatar
Ganesharatnam committed
308
    $breadcrumb[] = $main_title_link;
Ganesharatnam's avatar
Ganesharatnam committed
309
310
  }
  drupal_set_breadcrumb($breadcrumb);
Ganesharatnam's avatar
Ganesharatnam committed
311
312
313
314
315
316
}

/**
 * To get the appropriate search results for different parameters
 * In this case searching in description and name fields
 */
Ganesharatnam's avatar
Ganesharatnam committed
317
318
function _refshelfDataSearch($word) {
  $content = "";
Ganesharatnam's avatar
Ganesharatnam committed
319
320
321
  $param = "";
  $all = array();
  $url = "https://libtextura.uwaterloo.ca/api-auth/v1/refshelf/resources/";
Ganesharatnam's avatar
Ganesharatnam committed
322
  $param_data = _getData($param, $url);
Ganesharatnam's avatar
Ganesharatnam committed
323
  $elements = $param_data['data'];
Ganesharatnam's avatar
Ganesharatnam committed
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
  if (!empty($elements)) {
    foreach ($elements as $element) {
      $link_name = ($element['name']);
      $link_url = ($element['url']);
      $desc = $element['description'];
      $desc_no_tag = strip_tags($desc);
      //$desc = _highlightSearchWord($word, $desc_without_links);

      $restricted = $element['is_restricted_resource'];

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

Ganesharatnam's avatar
Ganesharatnam committed
340
341
342
343
344
      //keyword search in name
      if (isset($element['name']) && !empty($element['name'])) {
        $status = _keywordSearch($word, $link_name);
        $all[] =  _processingSearchResults($status, $desc, $link_name, $link_url, $word, $restricted);
      }
Ganesharatnam's avatar
Ganesharatnam committed
345
346
347
348
349
    }
  }
  //Eliminate duplicates
  $no_duplicates = array_unique($all);
  $records_cnt = count($no_duplicates);
Ganesharatnam's avatar
Ganesharatnam committed
350
  $actual_records = $records_cnt -1 ;
Ganesharatnam's avatar
Ganesharatnam committed
351

Ganesharatnam's avatar
Ganesharatnam committed
352
  if ($records_cnt < 25) {
Ganesharatnam's avatar
Ganesharatnam committed
353
354
    //$msg = "<h3>The following result(s) found for the keyword <span class='highlight-search-word'>" . $word . "</span></h3><br />";
    $msg = "<h3>The following result(s) found for the keyword <span class='highlight-search-word'>" . $word . "</span></h3><br />";
Ganesharatnam's avatar
Ganesharatnam committed
355
356
    if (!empty($no_duplicates)) {
      foreach ($no_duplicates as $result) {
Ganesharatnam's avatar
Ganesharatnam committed
357
        $content .= $result;
Ganesharatnam's avatar
Ganesharatnam committed
358
359
      }
    }
Ganesharatnam's avatar
Ganesharatnam committed
360
361
    if (!empty($content)) {
      $results = $msg . $content;
Ganesharatnam's avatar
Ganesharatnam committed
362
363
364
      return $results;
    }
    else{
Ganesharatnam's avatar
Ganesharatnam committed
365
366
367
      //return "<h3>No results found for the keyword <span class='highlight-search-word'>" . $word . "</span></h3>";
      $msg = "<h3>No results found for the keyword <span class='highlight-search-word'>" . $word . "</span></h3>";
      return $msg;
Ganesharatnam's avatar
Ganesharatnam committed
368
369
370
371
    }
  }
  else{
    $_SESSION['search_results'] =  $no_duplicates;
Ganesharatnam's avatar
Ganesharatnam committed
372
    $_SESSION['search_word'] = $word;
Ganesharatnam's avatar
Ganesharatnam committed
373
374
    $pagenum = 0;
    $offset = 0;
Ganesharatnam's avatar
Ganesharatnam committed
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
    $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
390
  }
Ganesharatnam's avatar
Ganesharatnam committed
391
  return $link_addr;
Ganesharatnam's avatar
Ganesharatnam committed
392
393
394
395
396
}

/**
 * To highlight the search word in search results
 */
Ganesharatnam's avatar
Ganesharatnam committed
397
function _highlightSearchWord($word, $str) {
Ganesharatnam's avatar
Ganesharatnam committed
398
   $str_uc_first = ucfirst($word);
Ganesharatnam's avatar
Ganesharatnam committed
399

Ganesharatnam's avatar
Ganesharatnam committed
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
  //Replacement for a search keyword -- all uppercase
  if (ctype_upper($word)) {
    $highlighted = handlingKeywordCaseSensitivity($word, $str);
  }
  elseif (ctype_lower($word)) {
  //Replacement for a search keyword -- all lowercase
    $highlighted = handlingKeywordCaseSensitivity($word, $str);
  }
  elseif ($word == $str_uc_first) {
  //Replacement for a search keyword -- all first letter uppercase
    $highlighted = handlingKeywordCaseSensitivity($word, $str);
  }
  else {
    //Replace exctly like search string
    $regEx = '\'(?!((<.*?)|(<a.*?)))(\b' . $word . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'si';
    $word_style = "<span class='highlight-search-word'>" . $word . "</span>";
    //$highlighted = str_ireplace($word, $word_style, $str);
    $highlighted = preg_replace($regEx, $word_style, $str);
  }
  return $highlighted;
}

/**
 * Handling case sensitivity for the keyword in search results
 */
function handlingKeywordCaseSensitivity($word, $str) {
  //For search results keyword -- lowercase
Ganesharatnam's avatar
Ganesharatnam committed
427
  $word_lc = strtolower($word);
Ganesharatnam's avatar
Ganesharatnam committed
428
  $results = _styleWord($word_lc, $str);
Ganesharatnam's avatar
Ganesharatnam committed
429

Ganesharatnam's avatar
Ganesharatnam committed
430
  //For search results keyword -- First letter -- uppercase
Ganesharatnam's avatar
Ganesharatnam committed
431
  $word_ucf = ucfirst($word);
Ganesharatnam's avatar
Ganesharatnam committed
432
  $results = _styleWord($word_ucf, $results);
Ganesharatnam's avatar
Ganesharatnam committed
433

Ganesharatnam's avatar
Ganesharatnam committed
434
  //Search results keyword -- uppercase
Ganesharatnam's avatar
Ganesharatnam committed
435
  $word_uc = strtoupper($word);
Ganesharatnam's avatar
Ganesharatnam committed
436
  $results = _styleWord($word_uc, $results);
Ganesharatnam's avatar
Ganesharatnam committed
437
438

  if (ctype_upper($word)) {
Ganesharatnam's avatar
Ganesharatnam committed
439
440
441
    $word_lo = strtolower($word);
    $str_uc_first = ucfirst($word_lo);
    $results = _styleWord($str_uc_first, $results);
Ganesharatnam's avatar
Ganesharatnam committed
442
  }
Ganesharatnam's avatar
Ganesharatnam committed
443
444

  return $results;
Ganesharatnam's avatar
Ganesharatnam committed
445
446
}

Ganesharatnam's avatar
Ganesharatnam committed
447
448
449
/**
 * Apply the style for search word
 */
Ganesharatnam's avatar
Ganesharatnam committed
450
451
452
453
454
455
//function _styleWord($word) {
function _styleWord($word, $data) {
  $word_style = "<span class='highlight-search-word'>" . $word . "</span>";
  $regEx = '\'(?!((<.*?)|(<a.*?)))(\b' . $word . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'s';
  $highlighted = preg_replace($regEx, $word_style, $data);
  return $highlighted;
Ganesharatnam's avatar
Ganesharatnam committed
456
457
}

Ganesharatnam's avatar
Ganesharatnam committed
458

Ganesharatnam's avatar
Ganesharatnam committed
459
460
461
/**
 * To display the search results with pagination
 */
Ganesharatnam's avatar
Ganesharatnam committed
462
function _viewSearchResults($no_duplicates, $word, $pagenum, $offset) {
Ganesharatnam's avatar
Ganesharatnam committed
463
464
  $page = "";
  $content = "";
Ganesharatnam's avatar
Ganesharatnam committed
465
466
  $results = "";
  $rec_count = count($no_duplicates);
Ganesharatnam's avatar
Ganesharatnam committed
467
468
469
470
471
472
473
  $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
474
      $msg = "<h3>The following result[s] found for the keyword <span class='highlight-search-word'>" . $word . "</span></h3><br />";
Ganesharatnam's avatar
Ganesharatnam committed
475
476
477
478
479
480
481
482
483
484
485
486
      $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
487
        $results = $msg . $page;
Ganesharatnam's avatar
Ganesharatnam committed
488
489
      }
      else {
Ganesharatnam's avatar
Ganesharatnam committed
490
        $results = "<h3>No results found for the keyword <span class='highlight-search-word'>" . $word . "</span></h3>";
Ganesharatnam's avatar
Ganesharatnam committed
491
492
493
      }
    }
  }
Ganesharatnam's avatar
Ganesharatnam committed
494
  $pagination = _pagination($pagenum, $left_rec, $rec_limit);
Ganesharatnam's avatar
Ganesharatnam committed
495
496
497
498
499
500
501
  $content = $results . $pagination;
  return $content;
}

/**
 * Formatting the search results to display
 */
Ganesharatnam's avatar
Ganesharatnam committed
502
503
504
505
506
507
//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
508

Ganesharatnam's avatar
Ganesharatnam committed
509
510
  if ($status) {
    if (!empty($desc)) {
Ganesharatnam's avatar
Ganesharatnam committed
511
      $link = '<li class="li-refshelf"><a href="' . $link_url . '">' . $link_name . '</a></li>';
Ganesharatnam's avatar
Ganesharatnam committed
512
      $content .= $link . "<p>" . $desc . "</p>";
Ganesharatnam's avatar
Ganesharatnam committed
513
514
    }
    else {
Ganesharatnam's avatar
Ganesharatnam committed
515
      $content .= "<p>No results found for the word</p>";
Ganesharatnam's avatar
Ganesharatnam committed
516
517
    }
  }
Ganesharatnam's avatar
Ganesharatnam committed
518
  return $content;
Ganesharatnam's avatar
Ganesharatnam committed
519
520
521
522
523
}

/**
 * Keyword search in the data array or data string
 */
Ganesharatnam's avatar
Ganesharatnam committed
524
function _keywordSearch($word, $data) {
Ganesharatnam's avatar
Ganesharatnam committed
525
  //For array
Ganesharatnam's avatar
Ganesharatnam committed
526
527
528
529
530
531
532
533
534
  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
535
  else{ //For String
Ganesharatnam's avatar
Ganesharatnam committed
536
537
538
    $str = trim($data);
    $str = strtolower($data);
    if (!empty($word) && !empty($str)) {
Ganesharatnam's avatar
Ganesharatnam committed
539
540
541
      if (strlen($str) >= strlen($word)) {
        $s_word = "/" . $word . "/i";
        if (preg_match($s_word, $str)) {
Ganesharatnam's avatar
Ganesharatnam committed
542
543
          return TRUE;
        }
Ganesharatnam's avatar
Ganesharatnam committed
544
        else {
Ganesharatnam's avatar
Ganesharatnam committed
545
          return FALSE;
Ganesharatnam's avatar
Ganesharatnam committed
546
       }
Ganesharatnam's avatar
Ganesharatnam committed
547
548
549
550
551
552
      }
    }
  }
}

/**
Ganesharatnam's avatar
Ganesharatnam committed
553
 * Filter the search word from bad characters
Ganesharatnam's avatar
Ganesharatnam committed
554
 */
Ganesharatnam's avatar
Ganesharatnam committed
555
556
function _filterSearchWord($word) {
  $word = trim($word);
Ganesharatnam's avatar
Ganesharatnam committed
557
  $chars = array('/', '\\', '[', ']', "<", "*", ">", "}", "{", "^", "(", ")", "+", "?");
Ganesharatnam's avatar
Ganesharatnam committed
558
559
560
561
562
  $search_str = str_replace($chars, '', $word);
  return $search_str;
}

/**
Ganesharatnam's avatar
Ganesharatnam committed
563
 * Pagination at the bottom of the search results
Ganesharatnam's avatar
Ganesharatnam committed
564
565
566
 */
function _pagination($pagenum, $left_rec, $rec_limit) {
  $content = "";
Ganesharatnam's avatar
Ganesharatnam committed
567
  if ( $left_rec < $rec_limit ) {
Ganesharatnam's avatar
Ganesharatnam committed
568
569
    $last = $pagenum - 2;
    $content = "<a href = \"?pagenum={$last}\">Previous</a>";
Ganesharatnam's avatar
Ganesharatnam committed
570
571
572
573
574
575
576
577
  }
  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
578
  }
Ganesharatnam's avatar
Ganesharatnam committed
579
  $content = "<table align='center border='0'><tr><td align='center'>" . $content . "</td></tr></table>";
Ganesharatnam's avatar
Ganesharatnam committed
580
581
  return $content;
}