uw_lib_refshelf.module 17.7 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
 * Implements hook_block_info().
 */
Ganesharatnam's avatar
Ganesharatnam committed
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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
39
40
 * Implements hook_block_view().
 */
Ganesharatnam's avatar
Ganesharatnam committed
41
42
43
44
45
46
47
48
49
50
51
52
53
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
54
55
56
57
58
59
60
61
62
63
/**
 * 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
64
65
/**
 * Implements hook_form().
Ganesharatnam's avatar
Ganesharatnam committed
66
 */
Ganesharatnam's avatar
Ganesharatnam committed
67
68
function uw_lib_refshelf_form($form, &$form_state) {
  $form = array(
Ganesharatnam's avatar
Ganesharatnam committed
69
    //Define a simple text field for the "search"
Ganesharatnam's avatar
Ganesharatnam committed
70
71
    'name' => array(
      '#type' => 'textfield',
Ganesharatnam's avatar
Ganesharatnam committed
72
73
      //'#size' => 30,
      //'#attributes' => array('placeholder' => t('Please enter a keyword')),
Ganesharatnam's avatar
Ganesharatnam committed
74
75
76
      '#collapsible' => TRUE,
      '#collapsed' => FALSE,
      '#region' => 'content',
Ganesharatnam's avatar
Ganesharatnam committed
77
78
79
80
      //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
81
    ),
Ganesharatnam's avatar
Ganesharatnam committed
82
    //Define a simple submit button
Ganesharatnam's avatar
Ganesharatnam committed
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
    '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
100
101
102
103
  }
}

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

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

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

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

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

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

      $restricted = $element['is_restricted_resource'];

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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