uw_lib_refshelf.module 17.7 KB
Newer Older
Ganesharatnam's avatar
Ganesharatnam committed
1
2
<?php
/**
Ganesharatnam's avatar
Ganesharatnam committed
3
4
 * @file
 * This module is for displaying the data (Online Reference Shelf) feeding from Textura in JSON to
Ganesharatnam's avatar
Ganesharatnam committed
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 * 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
23
24
 * Implements hook_block_info().
 */
Ganesharatnam's avatar
Ganesharatnam committed
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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;
}

/**
Ganesharatnam's avatar
Ganesharatnam committed
40
41
 * Implements hook_block_view().
 */
Ganesharatnam's avatar
Ganesharatnam committed
42
43
44
45
46
47
48
49
50
51
52
53
54
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;
}

Ganesharatnam's avatar
Ganesharatnam committed
55
56
57
58
59
60
61
62
63
64
/**
 * Implements hook_help().
 */
function uw_lib_refshelf_help($path, $arg) {
  switch ($path) {
    case 'admin/help#uw_lib_refshelf':
      return '<p>' . t("List/Search functionality for online reference shelf categories and resources to the Library website.") . '</p>';
  }
}

Ganesharatnam's avatar
Ganesharatnam committed
65
66
/**
 * Implements hook_form().
Ganesharatnam's avatar
Ganesharatnam committed
67
 */
Ganesharatnam's avatar
Ganesharatnam committed
68
69
function uw_lib_refshelf_form($form, &$form_state) {
  $form = array(
Ganesharatnam's avatar
Ganesharatnam committed
70
    //Define a simple text field for the "search"
Ganesharatnam's avatar
Ganesharatnam committed
71
72
    'name' => array(
      '#type' => 'textfield',
Ganesharatnam's avatar
Ganesharatnam committed
73
74
      //'#size' => 30,
      //'#attributes' => array('placeholder' => t('Please enter a keyword')),
Ganesharatnam's avatar
Ganesharatnam committed
75
76
77
      '#collapsible' => TRUE,
      '#collapsed' => FALSE,
      '#region' => 'content',
Ganesharatnam's avatar
Ganesharatnam committed
78
79
80
81
      //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
82
    ),
Ganesharatnam's avatar
Ganesharatnam committed
83
    //Define a simple submit button
Ganesharatnam's avatar
Ganesharatnam committed
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
    '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
101
102
103
104
  }
}

/**
Ganesharatnam's avatar
Ganesharatnam committed
105
106
107
108
109
110
111
112
113
 * 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
114
115
116
117
 */
function uw_lib_refshelf_render_data() {
  $content = "";
  $links = "";
Ganesharatnam's avatar
Ganesharatnam committed
118
119

  //Sanitize the data from URL
Ganesharatnam's avatar
Ganesharatnam committed
120
121
122
123
  $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
124

125
  //Check for cat_id and toc_id in GET
Ganesharatnam's avatar
Ganesharatnam committed
126
  if (array_key_exists("cat_id", $_GET) || array_key_exists("toc_id", $_GET)) {
Ganesharatnam's avatar
Ganesharatnam committed
127
    if (isset($filter_cat_id) && !empty($filter_cat_id)) {
Ganesharatnam's avatar
Ganesharatnam committed
128
    //Displaying Subcategories
Ganesharatnam's avatar
Ganesharatnam committed
129
      $tit = "";
Ganesharatnam's avatar
Ganesharatnam committed
130
131
      $cat_id = $filter_cat_id;
      $url = "https://libtextura.uwaterloo.ca/api-auth/v1/refshelf/categories/";
Ganesharatnam's avatar
Ganesharatnam committed
132
      $parent_data = _getDataORS($cat_id, $url);
Ganesharatnam's avatar
Ganesharatnam committed
133
      $element = $parent_data['data'];
Ganesharatnam's avatar
Ganesharatnam committed
134
      if (!empty($element)) {
Ganesharatnam's avatar
Ganesharatnam committed
135
136
        $tit = $element[0]['name'];
        _setBreadCrumbsORS("cat_id", $cat_id, $tit, 0);
Ganesharatnam's avatar
Ganesharatnam committed
137
      }
Ganesharatnam's avatar
Ganesharatnam committed
138
      $txt = "<h2>" . $tit . "</h2><br />";
Ganesharatnam's avatar
Ganesharatnam committed
139
      $_SESSION['tit'] = $txt;
Ganesharatnam's avatar
Ganesharatnam committed
140
      $qparam = $cat_id;
Ganesharatnam's avatar
Ganesharatnam committed
141
      $cat_links = _getLinkAndDescORS($qparam, "toc_id");
Ganesharatnam's avatar
Ganesharatnam committed
142
      if ($cat_links == "No data for this parameter") {
Ganesharatnam's avatar
Ganesharatnam committed
143
        $txt = "<h2>Resources for " . $tit . "</h2><br />";
Ganesharatnam's avatar
Ganesharatnam committed
144
        $resources = _getLinkAndDescORS($qparam, "resources");
Ganesharatnam's avatar
Ganesharatnam committed
145
146
        $content .= $txt;
        $content .= $resources;
Ganesharatnam's avatar
Ganesharatnam committed
147
      }
Ganesharatnam's avatar
Ganesharatnam committed
148
149
150
151
      else {
        $content .= $txt;
        $content .= $cat_links;
      }
Ganesharatnam's avatar
Ganesharatnam committed
152
    }
Ganesharatnam's avatar
Ganesharatnam committed
153
    elseif (isset($filter_toc_id) && !empty($filter_toc_id)) {
Ganesharatnam's avatar
Ganesharatnam committed
154
    //Displaying resources for the subcategories
Ganesharatnam's avatar
Ganesharatnam committed
155
      $tit = "";
Ganesharatnam's avatar
Ganesharatnam committed
156
157
      $toc_id = $filter_toc_id;
      $url = "https://libtextura.uwaterloo.ca/api-auth/v1/refshelf/categories/";
Ganesharatnam's avatar
Ganesharatnam committed
158
      $parent_data = _getDataORS($toc_id, $url);
Ganesharatnam's avatar
Ganesharatnam committed
159
      $element = $parent_data['data'];
Ganesharatnam's avatar
Ganesharatnam committed
160
161
162
      if (!empty($element)) {
        $parent_id = $element[0]['parent_category'];
        $tit = $element[0]['name'];
Ganesharatnam's avatar
Ganesharatnam committed
163
        _setBreadCrumbsORS("toc_id", $toc_id, $tit, $parent_id);
Ganesharatnam's avatar
Ganesharatnam committed
164
165
166
167
168
169
      }
      if (isset($_SESSION['tit']) && !empty($_SESSION['tit'])) {
        $content .= $_SESSION['tit'];
        $content .= "<h3>" . $tit . "</h3><br />";
      }
      $qparam = $toc_id;
Ganesharatnam's avatar
Ganesharatnam committed
170
      $content .= _getLinkAndDescORS($qparam, "resources");
Ganesharatnam's avatar
Ganesharatnam committed
171
172
    }
  }
Ganesharatnam's avatar
Ganesharatnam committed
173
  else {
Ganesharatnam's avatar
Ganesharatnam committed
174
    if (isset($filter_pagenum)) {
Ganesharatnam's avatar
Ganesharatnam committed
175
    //Pagination view
Ganesharatnam's avatar
Ganesharatnam committed
176
      _setBreadCrumbsORS("none", 0, "Online Reference Shelf", 0);
Ganesharatnam's avatar
Ganesharatnam committed
177
178
      $search_res = "";
      $rec_limit = 0;
Ganesharatnam's avatar
Ganesharatnam committed
179
      $pagenum = $filter_pagenum + 1;
Ganesharatnam's avatar
Ganesharatnam committed
180
      $offset = $rec_limit * $pagenum;
Ganesharatnam's avatar
Ganesharatnam committed
181
182
183
      if (isset($_SESSION['search_results']) && isset($_SESSION['search_word'])) {
        $stored_search_results = $_SESSION['search_results'];
        $word = $_SESSION['search_word'];
Ganesharatnam's avatar
Ganesharatnam committed
184
        $search_res .= _viewSearchResultsORS($stored_search_results, $word, $pagenum, $offset);
Ganesharatnam's avatar
Ganesharatnam committed
185
186
187
188
189
        $content = $search_res;
      }
      else {
        $content = "No search results";
      }
Ganesharatnam's avatar
Ganesharatnam committed
190
191
    }
    elseif (isset($filter_search)) {
Ganesharatnam's avatar
Ganesharatnam committed
192
    //Search results
Ganesharatnam's avatar
Ganesharatnam committed
193
      _setBreadCrumbsORS("none", 0, "Online Reference Shelf", 0);
Ganesharatnam's avatar
Ganesharatnam committed
194
      $word = $filter_search;
Ganesharatnam's avatar
Ganesharatnam committed
195
      $word =  _filterSearchWordORS($word);
Ganesharatnam's avatar
Ganesharatnam committed
196
197
198
199
200
      $str_len = strlen($word);
      if ($str_len < 3) {
        $content = '<p><b>Please enter a valid keyword for search (not characters)</b></p>';
      }
      else {
Ganesharatnam's avatar
Ganesharatnam committed
201
        $content = _refshelfDataSearchORS($word);
Ganesharatnam's avatar
Ganesharatnam committed
202
      }
Ganesharatnam's avatar
Ganesharatnam committed
203
204
    }
    else {
Ganesharatnam's avatar
Ganesharatnam committed
205
    //Displaying the top level categories
Ganesharatnam's avatar
Ganesharatnam committed
206
      _setBreadCrumbsORS("none", 0, "Online Reference Shelf", 0);
Ganesharatnam's avatar
Ganesharatnam committed
207
208
      $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
209
      $param = 0;
Ganesharatnam's avatar
Ganesharatnam committed
210
      $content .= _getLinkAndDescORS($param, "cat_id");
Ganesharatnam's avatar
Ganesharatnam committed
211
212
213
214
215
216
    }
  }
  return $content;
}

/**
Ganesharatnam's avatar
Ganesharatnam committed
217
218
 * Get the data for appropriate URL and params
 * Converts an HTML-safe JSON string into its PHP equivalent
Ganesharatnam's avatar
Ganesharatnam committed
219
 */
Ganesharatnam's avatar
Ganesharatnam committed
220
function _getDataORS($param, $url) {
Ganesharatnam's avatar
Ganesharatnam committed
221
  $uri = $url . $param;
Ganesharatnam's avatar
Ganesharatnam committed
222
  $file_headers = get_headers($uri);
Ganesharatnam's avatar
Ganesharatnam committed
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
  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
239
 */
Ganesharatnam's avatar
Ganesharatnam committed
240
function _getLinkAndDescORS($param, $str) {
Ganesharatnam's avatar
Ganesharatnam committed
241
242
243
244
245
246
  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
247
  $param_data = _getDataORS($param, $url);
Ganesharatnam's avatar
Ganesharatnam committed
248
  $content = "";
Ganesharatnam's avatar
Ganesharatnam committed
249
250
251
  $link = "";
  $desc = "";
  $elements = $param_data['data'];
Ganesharatnam's avatar
Ganesharatnam committed
252
253
254
255
256
257
258
259
  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'];
Ganesharatnam's avatar
Ganesharatnam committed
260
          $link_url = _filterRestrictedResourceORS($restricted, $link_url);
Ganesharatnam's avatar
Ganesharatnam committed
261
        }
Ganesharatnam's avatar
Ganesharatnam committed
262
      }
Ganesharatnam's avatar
Ganesharatnam committed
263
264
265
266
267
268
269
270
271
272
273
      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
274
275
276
      }
    }
  }
Ganesharatnam's avatar
Ganesharatnam committed
277
278
279
  else {
    $content = "No data for this parameter";
  }
Ganesharatnam's avatar
Ganesharatnam committed
280
  return $content;
Ganesharatnam's avatar
Ganesharatnam committed
281
282
283
}

/**
Ganesharatnam's avatar
Ganesharatnam committed
284
285
 * breadcrumbs
 */
Ganesharatnam's avatar
Ganesharatnam committed
286
function _setBreadCrumbsORS($str, $id, $title, $parent_id) {
Ganesharatnam's avatar
Ganesharatnam committed
287
288
  $breadcrumb = drupal_get_breadcrumb();
  $main_title = drupal_get_title();
Ganesharatnam's avatar
Ganesharatnam committed
289
290
291
292
293
  $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
294
  if ($str == "none") {
Ganesharatnam's avatar
Ganesharatnam committed
295
    $breadcrumb[] = $main_title_link;
Ganesharatnam's avatar
Ganesharatnam committed
296
  }
Ganesharatnam's avatar
Ganesharatnam committed
297
  elseif ($str == "cat_id") {
Ganesharatnam's avatar
Ganesharatnam committed
298
299
300
    $breadcrumb[] = $main_title_link;
    $breadcrumb[] = $current_title;
    //$breadcrumb[] = $current_title_link;
Ganesharatnam's avatar
Ganesharatnam committed
301
  }
Ganesharatnam's avatar
Ganesharatnam committed
302
  elseif ($str == "toc_id") {
Ganesharatnam's avatar
Ganesharatnam committed
303
    $breadcrumb[] = $main_title_link;
Ganesharatnam's avatar
Ganesharatnam committed
304
    $url = "https://libtextura.uwaterloo.ca/api-auth/v1/refshelf/categories/";
Ganesharatnam's avatar
Ganesharatnam committed
305
    $parent_data = _getDataORS($parent_id, $url);
Ganesharatnam's avatar
Ganesharatnam committed
306
    $element = $parent_data['data'];
Ganesharatnam's avatar
Ganesharatnam committed
307
    if (!empty($element)) {
Ganesharatnam's avatar
Ganesharatnam committed
308
      $prev_title = $element[0]['name'];
Ganesharatnam's avatar
Ganesharatnam committed
309
    }
Ganesharatnam's avatar
Ganesharatnam committed
310
    $link_url = "?" . "cat_id" . "=" . $parent_id;
Ganesharatnam's avatar
Ganesharatnam committed
311
    $parent_link = '<a href="' . $link_url . '">' . $prev_title . '</a>';
Ganesharatnam's avatar
Ganesharatnam committed
312
    $breadcrumb[] = $parent_link;
Ganesharatnam's avatar
Ganesharatnam committed
313
314
    $breadcrumb[] = $current_title;
    //$breadcrumb[] = $current_title_link;
Ganesharatnam's avatar
Ganesharatnam committed
315
  }
Ganesharatnam's avatar
Ganesharatnam committed
316
  else {
Ganesharatnam's avatar
Ganesharatnam committed
317
    $breadcrumb[] = $main_title_link;
Ganesharatnam's avatar
Ganesharatnam committed
318
319
  }
  drupal_set_breadcrumb($breadcrumb);
Ganesharatnam's avatar
Ganesharatnam committed
320
321
322
323
324
325
}

/**
 * To get the appropriate search results for different parameters
 * In this case searching in description and name fields
 */
Ganesharatnam's avatar
Ganesharatnam committed
326
function _refshelfDataSearchORS($word) {
Ganesharatnam's avatar
Ganesharatnam committed
327
  $content = "";
Ganesharatnam's avatar
Ganesharatnam committed
328
329
330
  $param = "";
  $all = array();
  $url = "https://libtextura.uwaterloo.ca/api-auth/v1/refshelf/resources/";
Ganesharatnam's avatar
Ganesharatnam committed
331
  $param_data = _getDataORS($param, $url);
Ganesharatnam's avatar
Ganesharatnam committed
332
  $elements = $param_data['data'];
Ganesharatnam's avatar
Ganesharatnam committed
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);
Ganesharatnam's avatar
Ganesharatnam committed
339
      //$desc = _highlightSearchWordORS($word, $desc_without_links);
Ganesharatnam's avatar
Ganesharatnam committed
340
341
342
343
344

      $restricted = $element['is_restricted_resource'];

      //keyword search in description
      if (isset($element['description']) && !empty($element['description'])) {
Ganesharatnam's avatar
Ganesharatnam committed
345
346
        $status = _keywordSearchORS($word, $desc_no_tag);
        $all[] =  _processingSearchResultsORS($status, $desc, $link_name, $link_url, $word, $restricted);
Ganesharatnam's avatar
Ganesharatnam committed
347
      }
Ganesharatnam's avatar
Ganesharatnam committed
348

Ganesharatnam's avatar
Ganesharatnam committed
349
350
      //keyword search in name
      if (isset($element['name']) && !empty($element['name'])) {
Ganesharatnam's avatar
Ganesharatnam committed
351
352
        $status = _keywordSearchORS($word, $link_name);
        $all[] =  _processingSearchResultsORS($status, $desc, $link_name, $link_url, $word, $restricted);
Ganesharatnam's avatar
Ganesharatnam committed
353
      }
Ganesharatnam's avatar
Ganesharatnam committed
354
355
356
357
358
    }
  }
  //Eliminate duplicates
  $no_duplicates = array_unique($all);
  $records_cnt = count($no_duplicates);
Ganesharatnam's avatar
Ganesharatnam committed
359
  $actual_records = $records_cnt -1 ;
Ganesharatnam's avatar
Ganesharatnam committed
360

Ganesharatnam's avatar
Ganesharatnam committed
361
  if ($records_cnt < 25) {
Ganesharatnam's avatar
Ganesharatnam committed
362
    $msg = "<h3>The following result(s) found for the keyword <span class='highlight-search-word'>" . $word . "</span></h3><br />";
Ganesharatnam's avatar
Ganesharatnam committed
363
364
    if (!empty($no_duplicates)) {
      foreach ($no_duplicates as $result) {
Ganesharatnam's avatar
Ganesharatnam committed
365
        $content .= $result;
Ganesharatnam's avatar
Ganesharatnam committed
366
367
      }
    }
Ganesharatnam's avatar
Ganesharatnam committed
368
369
    if (!empty($content)) {
      $results = $msg . $content;
Ganesharatnam's avatar
Ganesharatnam committed
370
371
372
      return $results;
    }
    else{
Ganesharatnam's avatar
Ganesharatnam committed
373
374
      $msg = "<h3>No results found for the keyword <span class='highlight-search-word'>" . $word . "</span></h3>";
      return $msg;
Ganesharatnam's avatar
Ganesharatnam committed
375
376
377
378
    }
  }
  else{
    $_SESSION['search_results'] =  $no_duplicates;
Ganesharatnam's avatar
Ganesharatnam committed
379
    $_SESSION['search_word'] = $word;
Ganesharatnam's avatar
Ganesharatnam committed
380
381
    $pagenum = 0;
    $offset = 0;
Ganesharatnam's avatar
Ganesharatnam committed
382
    $view = _viewSearchResultsORS($no_duplicates, $word, $pagenum, $offset);
Ganesharatnam's avatar
Ganesharatnam committed
383
384
385
386
387
    return $view;
  }
}

/**
Ganesharatnam's avatar
Ganesharatnam committed
388
389
 * Resctriced URL is passed through the proxy
 */
Ganesharatnam's avatar
Ganesharatnam committed
390
function _filterRestrictedResourceORS($restricted, $url) {
Ganesharatnam's avatar
Ganesharatnam committed
391
392
393
394
395
396
  $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
397
  }
Ganesharatnam's avatar
Ganesharatnam committed
398
  return $link_addr;
Ganesharatnam's avatar
Ganesharatnam committed
399
400
401
402
403
}

/**
 * To highlight the search word in search results
 */
Ganesharatnam's avatar
Ganesharatnam committed
404
function _highlightSearchWordORS($word, $str) {
Ganesharatnam's avatar
Ganesharatnam committed
405
  $str_uc_first = ucfirst($word);
Ganesharatnam's avatar
Ganesharatnam committed
406

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

/**
 * Handling case sensitivity for the keyword in search results
 */
Ganesharatnam's avatar
Ganesharatnam committed
432
function _handlingKeywordCaseSensitivityORS($word, $str) {
Ganesharatnam's avatar
Ganesharatnam committed
433
  //For search results keyword -- lowercase
Ganesharatnam's avatar
Ganesharatnam committed
434
  $word_lc = strtolower($word);
Ganesharatnam's avatar
Ganesharatnam committed
435
  $results = _styleWordORS($word_lc, $str);
Ganesharatnam's avatar
Ganesharatnam committed
436

Ganesharatnam's avatar
Ganesharatnam committed
437
  //For search results keyword -- First letter -- uppercase
Ganesharatnam's avatar
Ganesharatnam committed
438
  $word_ucf = ucfirst($word);
Ganesharatnam's avatar
Ganesharatnam committed
439
  $results = _styleWordORS($word_ucf, $results);
Ganesharatnam's avatar
Ganesharatnam committed
440

Ganesharatnam's avatar
Ganesharatnam committed
441
  //Search results keyword -- uppercase
Ganesharatnam's avatar
Ganesharatnam committed
442
  $word_uc = strtoupper($word);
Ganesharatnam's avatar
Ganesharatnam committed
443
  $results = _styleWordORS($word_uc, $results);
Ganesharatnam's avatar
Ganesharatnam committed
444
445

  if (ctype_upper($word)) {
Ganesharatnam's avatar
Ganesharatnam committed
446
447
    $word_lo = strtolower($word);
    $str_uc_first = ucfirst($word_lo);
Ganesharatnam's avatar
Ganesharatnam committed
448
    $results = _styleWordORS($str_uc_first, $results);
Ganesharatnam's avatar
Ganesharatnam committed
449
  }
Ganesharatnam's avatar
Ganesharatnam committed
450
  return $results;
Ganesharatnam's avatar
Ganesharatnam committed
451
452
}

Ganesharatnam's avatar
Ganesharatnam committed
453
454
455
/**
 * Apply the style for search word
 */
Ganesharatnam's avatar
Ganesharatnam committed
456
function _styleWordORS($word, $data) {
Ganesharatnam's avatar
Ganesharatnam committed
457
  $word_style = "<span class='highlight-search-word'>" . $word . "</span>";
458
459
  $regex = '\'(?!((<.*?)|(<a.*?)))(\b' . $word . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'s';
  $highlighted = preg_replace($regex, $word_style, $data);
Ganesharatnam's avatar
Ganesharatnam committed
460
  return $highlighted;
Ganesharatnam's avatar
Ganesharatnam committed
461
462
}

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

/**
 * Formatting the search results to display
 */
Ganesharatnam's avatar
Ganesharatnam committed
506
function _processingSearchResultsORS($status, $desc, $link_name, $link_url, $word, $restricted) {
Ganesharatnam's avatar
Ganesharatnam committed
507
  $content = "";
Ganesharatnam's avatar
Ganesharatnam committed
508
509
510
  $link_url = _filterRestrictedResourceORS($restricted, $link_url);
  $desc = _highlightSearchWordORS($word, $desc);
  $link_name = _highlightSearchWordORS($word, $link_name);
Ganesharatnam's avatar
Ganesharatnam committed
511

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

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

/**
Ganesharatnam's avatar
Ganesharatnam committed
558
 * Filter the search word from bad characters
Ganesharatnam's avatar
Ganesharatnam committed
559
 */
Ganesharatnam's avatar
Ganesharatnam committed
560
function _filterSearchWordORS($word) {
Ganesharatnam's avatar
Ganesharatnam committed
561
  $word = trim($word);
Ganesharatnam's avatar
Ganesharatnam committed
562
  $chars = array('/', '\\', '[', ']', "<", "*", ">", "}", "{", "^", "(", ")", "+", "?");
Ganesharatnam's avatar
Ganesharatnam committed
563
564
565
566
567
  $search_str = str_replace($chars, '', $word);
  return $search_str;
}

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