Odyssey
suCuUser.data
1 <?php
2 
3 $monLibrary = dirname(__FILE__) . "/../library";
4 require_once("$monLibrary/cu_top.i");
5 require_once("$monLibrary/ck_hticket.i");
6 
7 // define namespaces
8 $operation = null;
9 $username = null;
10 $cucode = null;
11 $search = null;
12 $Cu = null;
13 
14 dms_import(array("operation" => "string", "cucode" => "string", "username" => "string", "search" => "string"));
15 
16 $operation = trim($operation);
17 $cucode = preg_replace("/[^A-Za-z0-9]/","",$cucode);
18 $username = prep_save($username);
19 $search = prep_save($search);
20 
21 switch($operation) {
22  case "searchUser":
23  if (strlen($cucode) > 0 && strlen($search) > 0) {
24  searchUser($dbh, $cucode, $username, $search);
25  }
26  break;
27  default:
28  $returnArray = array("error" => array("Operation not found."));
29 }
30 
31 header('Content-type: application/json');
32 
33 function searchUser($dbh, $cucode, $username, $search=null) {
34  #
35  # retrieve and return a list of cu codes
36  #
37 
38  $usersearch = new UserSearch;
39  $usersearch->dbh = $dbh;
40  $usersearch->UserName = $username;
41  $usersearch->Cu = $cucode;
42  $usersearch->Search = $search;
43  $usersearch->Results = null;
44 
45  // by default, check for exact username match first
46  $exact_match = $usersearch->LookUpByUserName($search);
47 
48  // old method, gives inconsistent results as some users have account numbers as user name, for example.
49  // new method, make no assumptions.$_COOKIE
50  $usersearch->SearchByUserAny($search);
51 
52  if (empty($exact_match)) { // no exact match, return search
53  echo HCU_JsonEncode($usersearch->Results);
54  } else { // exact match, merge with search results and return both
55  echo HCU_JsonEncode(array_merge($exact_match, $usersearch->Results));
56  }
57  return array("error" => array(), "code" => 0);
58 }
59 
60 class UserSearch {
61  public $dbh = null;
62  public $Cu = null;
63  public $cucode = null;
64  public $UserName = null;
65  public $UserEmail = null;
66  public $PrimaryAccount = null;
67  public $Search = null;
68  public $Results = null;
69 
70  function LookUpByUserName($p_search) {
71  $p_array = array();
72 
73  $sql = "select u.user_name, u.email, maa.accountnumber
74  from {$this->Cu}user u
75  left join (select row_number() over (partition by ua.user_id, ua.accountnumber) as rown, ua.user_id, ua.accountnumber from {$this->Cu}useraccounts ua
76  inner join {$this->Cu}memberacct ma on ua.accountnumber = ma.accountnumber) maa on u.user_id = maa.user_id and maa.rown = 1 where user_name = '$p_search'";
77  $p_rs = db_query($sql, $this->dbh);
78  while($p_element = db_fetch_assoc($p_rs)) {
79  $p_array[] = ['user_name' => str_replace($p_search, "<b>" . $p_search . "</b>", trim($p_element["user_name"])),
80  'email' => str_replace($p_search, "<b>" . $p_search."</b>", trim($p_element["email"])),
81  'accountnumber' => str_replace($p_search, "<b>" . $p_search . "</b>", trim($p_element["accountnumber"])),
82  'search' => trim($p_element["user_name"]) . "|" . trim($p_element["email"]) . "|" . trim($p_element["accountnumber"])];
83  }
84  $this->Results = $p_array;
85  return $p_array;
86  }
87 
88  function SearchByUserAny($p_search) {
89  $p_array = array();
90  $sql = "select u.user_name, u.email, maa.accountnumber
91  from {$this->Cu}user u
92  left join (select row_number() over (partition by ua.user_id, ua.accountnumber) as rown, ua.user_id, ua.accountnumber from {$this->Cu}useraccounts ua
93  inner join {$this->Cu}memberacct ma on ua.accountnumber = ma.accountnumber) maa on u.user_id = maa.user_id and maa.rown = 1
94  where maa.accountnumber like '%$p_search%' or lower(user_name) like lower('%$p_search%') or lower(email) like lower('%$p_search%')";
95  $p_rs = db_query($sql, $this->dbh);
96  while($p_element = db_fetch_assoc($p_rs)) {
97  $p_array[] = ['user_name' => str_replace($p_search, "<b>" . $p_search . "</b>", trim($p_element["user_name"])),
98  'email' => str_replace($p_search, "<b>" . $p_search."</b>", trim($p_element["email"])),
99  'accountnumber' => str_replace($p_search, "<b>" . $p_search."</b>", trim($p_element["accountnumber"])),
100  'search' => trim($p_element["user_name"]) . "|" . trim($p_element["email"]) . "|" . trim($p_element["accountnumber"])];
101  }
102  $this->Results = $p_array;
103  return $p_array;
104  }
105 }
106 
107 ?>