Source of file api.usersearch.php
Size: 20,471 Bytes - Last Modified: 2024-04-27T15:26:05+03:00
/tmp/current_snapshot/api/libs/api.usersearch.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585 | <?php /** * Returns user profile fileds search form * * @return string */ function web_UserSearchFieldsForm() { global $ubillingConfig; $altCfg = $ubillingConfig->getAlter(); $fieldinputs = wf_TextInput('searchquery', 'Search by', '', true, '40'); $fieldinputs .= wf_RadioInput('searchtype', 'All fields', 'full', true, true); $fieldinputs .= wf_RadioInput('searchtype', 'Real Name', 'realname', true); $fieldinputs .= wf_RadioInput('searchtype', 'Login', 'login', true); $fieldinputs .= wf_RadioInput('searchtype', 'Phone', 'phone', true); $fieldinputs .= wf_RadioInput('searchtype', 'Mobile', 'mobile', true); $fieldinputs .= wf_RadioInput('searchtype', 'Email', 'email', true); $fieldinputs .= wf_RadioInput('searchtype', 'Notes', 'note', true); $fieldinputs .= wf_RadioInput('searchtype', 'Contract', 'contract', true); if ($altCfg['OPENPAYZ_SUPPORT']) { $fieldinputs .= wf_RadioInput('searchtype', 'Payment ID', 'payid', true); } $fieldinputs .= wf_RadioInput('searchtype', 'IP', 'ip', true); $fieldinputs .= wf_RadioInput('searchtype', 'MAC', 'mac', true); if ($altCfg['SWITCHPORT_IN_PROFILE']) { $fieldinputs .= wf_RadioInput('searchtype', 'Switch binding (SwIP/SwID/SwLocation)', 'switchassign', true); } if ($altCfg['PON_ENABLED']) { $fieldinputs .= wf_RadioInput('searchtype', 'ONU MAC', 'onumac', true); $fieldinputs .= wf_RadioInput('searchtype', 'ONU Serial', 'onuserial', true); } if ($altCfg['SWITCHES_EXTENDED']) { $fieldinputs .= wf_RadioInput('searchtype', 'Switch ID', 'swid', true); } $fieldinputs .= wf_tag('br'); $fieldinputs .= wf_Submit('Search'); $form = wf_Form('', 'POST', $fieldinputs); return ($form); } /** * Returns user profile search results * * @global object $ubillingConfig * @param string $query * @param string $searchtype * @return string */ function zb_UserSearchFields($query, $searchtype) { global $ubillingConfig; $query = mysql_real_escape_string(trim($query)); $searchtype = vf($searchtype); $altercfg = $ubillingConfig->getAlter(); //check strict mode for our searchtype $strictsearch = array(); if (isset($altercfg['SEARCH_STRICT'])) { if (!empty($altercfg['SEARCH_STRICT'])) { $strictsearch = explode(',', $altercfg['SEARCH_STRICT']); $strictsearch = array_flip($strictsearch); } } //construct query if ($searchtype == 'realname') { $mask = (isset($strictsearch[$searchtype]) ? '' : '%'); $query = "SELECT `login` from `realname` WHERE `realname` LIKE '" . $mask . $query . $mask . "'"; } if ($searchtype == 'login') { $mask = (isset($strictsearch[$searchtype]) ? '' : '%'); $query = "SELECT `login` from `users` WHERE `login` LIKE '" . $mask . $query . $mask . "'"; } if ($searchtype == 'phone') { $mask = (isset($strictsearch[$searchtype]) ? '' : '%'); $query = "SELECT `login` from `phones` WHERE `phone` LIKE '" . $mask . $query . $mask . "'"; } if ($searchtype == 'mobile') { $mask = (isset($strictsearch[$searchtype]) ? '' : '%'); $query = "SELECT `login` from `phones` WHERE `mobile` LIKE '" . $mask . $query . $mask . "'"; } if ($searchtype == 'email') { $mask = (isset($strictsearch[$searchtype]) ? '' : '%'); $query = "SELECT `login` from `emails` WHERE `email` LIKE '" . $mask . $query . $mask . "'"; } if ($searchtype == 'note') { $mask = (isset($strictsearch[$searchtype]) ? '' : '%'); $query = "SELECT `login` from `notes` WHERE `note` LIKE '" . $mask . $query . $mask . "'"; } if ($searchtype == 'contract') { $mask = (isset($strictsearch[$searchtype]) ? '' : '%'); $query = "SELECT `login` from `contracts` WHERE `contract` LIKE '" . $mask . $query . $mask . "'"; } if ($searchtype == 'ip') { $mask = (isset($strictsearch[$searchtype]) ? '' : '%'); $query = "SELECT `login` from `users` WHERE `IP` LIKE '" . $mask . $query . $mask . "'"; } if ($searchtype == 'seal') { $mask = (isset($strictsearch[$searchtype]) ? '' : '%'); $query = "SELECT `login` from `condet` WHERE `seal` LIKE '" . $mask . $query . $mask . "'"; } if ($searchtype == 'swid') { $mask = (isset($strictsearch[$searchtype]) ? '' : '%'); $query = "SELECT `login` from `users` WHERE `ip` IN (SELECT `ip` FROM `nethosts` WHERE `option` LIKE '" . $mask . $query . $mask . "')"; } if ($altercfg['SWITCHPORT_IN_PROFILE']) { if ($searchtype == 'switchassign') { $mask = (isset($strictsearch[$searchtype]) ? '' : '%'); $whereType = 'location'; // Change type for search on switch $extractedIpAddr = zb_ExtractIpAddress($query); if ($extractedIpAddr) { $query = $extractedIpAddr; $whereType = 'ip'; } $macExtracted = zb_ExtractMacAddress($query); if (!empty($macExtracted)) { $query = $macExtracted; $whereType = 'swid'; } $query = " SELECT `login` from `users` INNER JOIN `switchportassign` USING (`login`) INNER JOIN `switches` ON (`switchportassign`.`switchid`=`switches`.`id`) WHERE `switches`.`" . $whereType . "` LIKE '" . $mask . $query . $mask . "'"; } } if ($altercfg['PON_ENABLED'] and $searchtype == 'onumac') { $mask = (isset($strictsearch[$searchtype]) ? '' : '%'); $query = "SELECT `login` from `pononu` WHERE `mac` LIKE '" . $mask . $query . $mask . "'"; } if ($altercfg['PON_ENABLED'] and $searchtype == 'onuserial') { $mask = (isset($strictsearch[$searchtype]) ? '' : '%'); $query = "SELECT `login` from `pononu` WHERE `serial` LIKE '" . $mask . $query . $mask . "'"; } //mac-address search if ($searchtype == 'mac') { $allfoundlogins = array(); $allMacs = zb_UserGetAllMACs(); $searchMacPart = strtolower($query); $searchMacPart = RemoveMacAddressSeparator($searchMacPart); $searchMacPart = AddMacSeparator($searchMacPart); if (!empty($allMacs)) { $allMacs = array_flip($allMacs); foreach ($allMacs as $eachMac => $macLogin) { if (ispos($eachMac, $searchMacPart)) { $allfoundlogins[] = $macLogin; } } } } if ($searchtype == 'apt') { $query = "SELECT `login` from `address` WHERE `aptid` = '" . $query . "'"; } if ($searchtype == 'payid') { if ($altercfg['OPENPAYZ_SUPPORT']) { if ($altercfg['OPENPAYZ_REALID']) { $query = "SELECT `realid` AS `login` from `op_customers` WHERE `virtualid`='" . $query . "'"; } else { $query = "SELECT `login` from `users` WHERE `IP` = '" . int2ip($query) . "'"; } } } // пытаемся изобразить результат if ($searchtype != 'mac') { $allresults = simple_queryall($query); $allfoundlogins = array(); if (!empty($allresults)) { foreach ($allresults as $io => $eachresult) { $allfoundlogins[] = $eachresult['login']; } //если таки по четкому адресу искали - давайте уж в профиль со старта if ($searchtype == 'apt') { rcms_redirect("?module=userprofile&username=" . $eachresult['login']); } } } $result = web_UserArrayShower($allfoundlogins); return ($result); } /** * Returns user profile search results by all fields * * @param string $query, $render * @return string */ function zb_UserSearchAllFields($query, $render = true) { global $ubillingConfig; $notesSearchFlag = $ubillingConfig->getAlterParam('SEARCH_NOTES'); $allfoundlogins = array(); if (strlen($query) >= 3) { $searh_data_array = zb_UserGetAllDataCache(); if ($notesSearchFlag) { $allUserNotes = zb_UserGetAllNotes(); if (!empty($allUserNotes)) { foreach ($allUserNotes as $noteLogin => $noteText) { if (isset($searh_data_array[$noteLogin])) { $searh_data_array[$noteLogin]['note'] = $noteText; } } } } $searh_part = trim($query); $searh_part = preg_quote($searh_part, '/'); foreach ($searh_data_array as $login => $data) { if (preg_grep('/' . $searh_part . '/iu', $data)) { $allfoundlogins[] = $login; } } if ($render) { $result = web_UserArrayShower($allfoundlogins); } else { $result = $allfoundlogins; } } else { $messages = new UbillingMessageHelper(); $result = $messages->getStyledMessage(__('At least 3 characters are required for search'), 'info'); } return ($result); } /** * Returns custom fields search form * * @return string */ function web_UserSearchCFForm() { $cf = new CustomFields(); $allCfTypes = $cf->getTypesAll(); $cfsearchform = wf_tag('h3') . __('Additional profile fields') . wf_tag('h3', true); if (!empty($allCfTypes)) { foreach ($allCfTypes as $io => $eachtype) { $searchControl = $cf->getTypeSearchControl($eachtype['type'], $eachtype['id']); //is this type searchable? if (!empty($searchControl)) { $cfsearchform .= $cf->renderTypeName($eachtype['id']) . ' ' . $searchControl; } } } else { $cfsearchform = ''; } return ($cfsearchform); } /** * Returns custom field search results * * @param int $typeid existing custom field database id * @param string $query search term * @return array */ function zb_UserSearchCF($typeid, $query) { $typeid = vf($typeid); $query = mysql_real_escape_string($query); $result = array(); $dataquery = "SELECT `login` from `cfitems` WHERE `typeid`='" . $typeid . "' AND `content`LIKE '%" . $query . "%'"; $allusers = simple_queryall($dataquery); if (!empty($allusers)) { foreach ($allusers as $io => $eachuser) { $result[] = $eachuser['login']; } } return ($result); } /** * Returns custom contract search form * * @global object $ubillingConfig * @return string */ function web_UserSearchContractForm() { $result = ''; global $ubillingConfig; $altercfg = $ubillingConfig->getAlter(); if (isset($altercfg['SEARCH_CUSTOM_CONTRACT'])) { if ($altercfg['SEARCH_CUSTOM_CONTRACT']) { $result .= wf_tag('h3') . __('Contract search') . wf_tag('h3', true); $inputs = wf_TextInput('searchquery', '', '', false); $inputs .= wf_HiddenInput('searchtype', 'contract'); $inputs .= wf_Submit(__('Search')); $result .= wf_Form("", 'POST', $inputs, ''); $result .= wf_delimiter(); } } return ($result); } /** * Returns partial address search form * * @global object $ubillingConfig * @return string */ function web_UserSearchAddressPartialForm() { global $ubillingConfig; $alterconf = $ubillingConfig->getAlter(); if ($alterconf['SEARCHADDR_AUTOCOMPLETE']) { $alladdress = zb_AddressGetFulladdresslistCached(); natsort($alladdress); $inputs = wf_AutocompleteTextInput('partialaddr', $alladdress, '', '', false, 30); } else { $inputs = wf_TextInput('partialaddr', '', '', false, 30); } $inputs .= wf_Submit('Search'); $result = wf_Form('', 'POST', $inputs, '', ''); return ($result); } /** * Returns user full address search form * * @return string */ function web_UserSearchAddressForm() { $form = wf_tag('form', false, '', 'action="" method="POST"'); $form .= wf_tag('table', false, '', 'width="100%" border="0"'); if (!isset($_POST['citysel'])) { $cells = wf_TableCell(__('City'), '40%'); $cells .= wf_TableCell(web_CitySelectorAc()); $form .= wf_TableRow($cells, 'row3'); } else { // if city selected $cityname = zb_AddressGetCityData($_POST['citysel']); $cityname = $cityname['cityname']; $cells = wf_TableCell(__('City'), '40%'); $cells .= wf_TableCell(web_ok_icon() . ' ' . $cityname . wf_HiddenInput('citysel', $_POST['citysel'])); $form .= wf_TableRow($cells, 'row3'); if (!isset($_POST['streetsel'])) { $cells = wf_TableCell(__('Street'), '40%'); $cells .= wf_TableCell(web_StreetSelectorAc($_POST['citysel'])); $form .= wf_TableRow($cells, 'row3'); } else { // if street selected $streetname = zb_AddressGetStreetData($_POST['streetsel']); $streetname = $streetname['streetname']; $cells = wf_TableCell(__('Street'), '40%'); $cells .= wf_TableCell(web_ok_icon() . ' ' . $streetname . wf_HiddenInput('streetsel', $_POST['streetsel'])); $form .= wf_TableRow($cells, 'row3'); if (!isset($_POST['buildsel'])) { $cells = wf_TableCell(__('Build'), '40%'); $cells .= wf_TableCell(web_BuildSelectorAc($_POST['streetsel'])); $form .= wf_TableRow($cells, 'row3'); } else { //if build selected $buildnum = zb_AddressGetBuildData($_POST['buildsel']); $buildnum = $buildnum['buildnum']; $cells = wf_TableCell(__('Build'), '40%'); $cells .= wf_TableCell(web_ok_icon() . ' ' . $buildnum . wf_HiddenInput('buildsel', $_POST['buildsel'])); $form .= wf_TableRow($cells, 'row3'); if (!isset($_POST['aptsel'])) { $cells = wf_TableCell(__('Apartment'), '40%'); $cells .= wf_TableCell(web_AptSelectorAc($_POST['buildsel'])); $form .= wf_TableRow($cells, 'row3'); } else { //if apt selected $aptnum = zb_AddressGetAptDataById($_POST['aptsel']); $aptnum = $aptnum['apt']; $cells = wf_TableCell(__('Apartment'), '40%'); $cells .= wf_TableCell(web_ok_icon() . ' ' . $aptnum . wf_HiddenInput('aptsel', $_POST['aptsel'])); $form .= wf_TableRow($cells, 'row3'); $cells = wf_TableCell(wf_HiddenInput('aptsearch', $_POST['aptsel'])); $cells .= wf_TableCell(wf_Submit(__('Find'))); $form .= wf_TableRow($cells, 'row3'); } } } } $form .= wf_tag('table', true); $form .= wf_tag('form', true); return ($form); } /** * Returns corporate users search form * * @global object $ubillingConfig * @return string */ function web_CorpsSearchForm() { global $ubillingConfig; $alterCfg = $ubillingConfig->getAlter(); $result = ''; if ($alterCfg['CORPS_ENABLED']) { $result .= wf_tag('h3') . __('Corporate users') . wf_tag('h3', true); if ($alterCfg['SEARCHADDR_AUTOCOMPLETE']) { $corps = new Corps(); $corpsDataRaw = $corps->getCorps(); $corpsNames = array(); if (!empty($corpsDataRaw)) { foreach ($corpsDataRaw as $io => $each) { $corpsNames[] = $each['corpname']; } } $inputs = wf_AutocompleteTextInput('searchcorpname', $corpsNames, '', '', false, '30'); } else { $inputs = wf_TextInput('searchcorpname', '', '', false, '30'); } $inputs .= wf_Submit(__('Search')); $result .= wf_Form('?module=corps&show=search', 'POST', $inputs, ''); } return ($result); } /** * Performs login search by partial address or extended address * * @global object $ubillingConfig * @param string $query * @param bool $searchExtenAddr * * @return array */ function zb_UserSearchAddressPartial($query, $searchExtenAddr = false) { global $ubillingConfig; $altercfg = $ubillingConfig->getAlter(); $query = mysql_real_escape_string($query); if (!$altercfg['SEARCHADDR_AUTOCOMPLETE']) { $query = strtolower_utf8($query); } if ($searchExtenAddr) { $alluseraddress = zb_AddressExtenGetList(); } else { $alluseraddress = zb_AddressGetFulladdresslist(); } $result = array(); if (!empty($alluseraddress)) { if (!$altercfg['SEARCHADDR_AUTOCOMPLETE']) { foreach ($alluseraddress as $login => $address) { if (ispos(strtolower_utf8($address), $query)) { $result[] = $login; } } } else { foreach ($alluseraddress as $login => $address) { if (ispos($address, $query)) { $result[] = $login; } } } } return ($result); } /** * Try to apply localte to searctype * * @param string $searchtype * @return string */ function zb_UserSearchTypeLocalize($searchtype, $query = '') { $result = __('Search by') . ' '; switch ($searchtype) { case 'full': $result .= __('All fields'); break; case 'realname': $result .= __('Real Name'); break; case 'login': $result .= __('Login'); break; case 'phone': $result .= __('Phone'); break; case 'mobile': $result .= __('Mobile'); break; case 'email': $result .= __('Email'); break; case 'Note': $result .= __('Note'); break; case 'contract': $result .= __('Contract'); break; case 'payid': $result .= __('Payment ID'); break; case 'ip': $result .= __('IP'); break; case 'mac': $result .= __('MAC'); break; case 'partialaddr': $result .= __('Partial address'); break; case 'extenaddr': $result .= __('Extended address'); break; case 'seal': $result .= __('Cable seal'); break; case 'swid': $result .= __('Switch ID'); break; default: $result .= ''; break; } if (!empty($query)) { $result .= ' "' . $query . '"'; } return ($result); } /** * Generates a user search elements with optional title and content. * * @param string $title The title of the user search grid. * @param string $content The content of the user search grid. * * @return string */ function web_UserSearchElement($title = '', $content = '') { $result = ''; if (!empty($content)) { $style = 'style="flex: 500px; padding: 5px; margin: 5px; border: 1px solid #d4d4d4;"'; $result .= wf_tag('div', false, '', $style); if (!empty($title)) { $result .= wf_tag('h3', false, 'row3') . $title . wf_tag('h3', true); } $result .= $content; $result .= wf_tag('div', true); } return ($result); } /** * Generates the User Search Grid. * * This function generates the HTML markup for the User Search Grid, * which includes various search forms for different search criteria. * * @return string */ function web_UserSearchGrid() { $result = ''; $result = wf_tag('div', false, '', 'style="display: flex; flex-direction: row; flex-wrap: wrap;"'); $result .= web_UserSearchElement(__('Full address'), web_UserSearchAddressForm()); $result .= web_UserSearchElement(__('Partial address'), web_UserSearchAddressPartialForm()); $result .= web_UserSearchElement(__('Profile fields search'), web_UserSearchFieldsForm()); $result .= web_UserSearchElement(__('Other'), web_CorpsSearchForm() . web_UserSearchContractForm() . web_UserSearchCFForm()); $result .= wf_tag('div', true); $result .= wf_CleanDiv(); return ($result); } |