/** * Возвращает родстер (список контактов) пользователя. * * @param stdClass $attr - список параметров * string type : all - вернуть всех пользователей, active - вернуть только "активных". * Обязательные параметр. @see self::ACTIVE_CONTACT * integer online: 1 - возвращать только пользователей находящихся на сайте, 0 - всех * * @return array - массив с пользователями */ protected function _ceContacts($attr) { global $session; $messages = new messages(); if (is_emp($this->_uid)) { $sbr = new sbr_emp($this->_uid); } else { $sbr = new sbr_frl($this->_uid); } $rows = array_merge($messages->GetContacts($this->_uid), $sbr->getContacts()); $uids = array(); $res = array(); foreach ($rows as $row) { if (in_array($row['uid'], $uids) || $row['login'] == 'admin') { continue; } $uids[] = $row['uid']; if ($attr->type == 'active' && (isset($row['my_last_post']) || isset($row['his_last_post']))) { $last = max(strtotime($row['my_last_post']), strtotime($row['his_last_post'])); if ($last + self::ACTIVE_CONTACT < time()) { continue; } } $session->view_online_status($row['login']); $row['online'] = $session->is_active; if (!empty($attr->online) && !$row['online']) { continue; } $res[] = array('uid' => $row['uid'], 'name' => $row['uname'] ? iconv('CP1251', 'UTF-8', $row['uname'] . ' ' . $row['usurname']) : $row['login'], 'login' => $row['login'], 'online' => (int) $row['online'], 'avatar' => $row['photo'] ? WDCPREFIX . '/users/' . $row['login'] . '/foto/sm_' . $row['photo'] : '', 'emp' => (int) is_emp($row['role']), 'pro' => (int) ($row['is_pro'] == 't')); } return $res; }
/** * Получение списка пользователей. * * @todo кеш и js * * @param string $s - поисковая строка * @param string $limit - сколько записей запрашивать * @param int $userType - фильтр результатов поиска: 0 - искать и фриленсеров и работодателей, * 1 - искать только фриленсеров, * 2 - искать только работодателей, * @param int $scope - определяет, где искать: 0 - в СБР/контактах и общем списке пользователей, * 1 - в СБР/контактах, * 2 - в общем списке пользователей * * @return string - список пользователей в формате JSON */ public function getUsersList($s, $limit = 'ALL', $userType = 0, $scope = 0) { session_start(); $uid = get_uid(false); $result = array(); $contacts = array(); $more = array(); // подготовка строки для поиска в shpinx if ($s != '') { $s = iconv('UTF-8', 'WINDOWS-1251//IGNORE', $s); $s = substr(trim($s), 0, 60); $r = preg_split("/\\s+/", $s); $s = ''; // если введено два слова, то пологаем что это имя и фамилия и обрабатываем вариант такого поиска особо // если одно из слов состоит только из /^[-_a-z0-9]+$/i также полагаем что это может быть часть логина if (count($r) == 2) { $s = "(@uname {$r[0]} & (@usurname *{$r[1]}* | @usurname {$r[1]})) | (@usurname {$r[0]} & (@uname *{$r[1]}* | @uname {$r[1]}))"; if (preg_match('/^[-_a-z0-9]+$/i', $r[0])) { $s .= " | (@login *{$r[0]}* & (@uname *{$r[1]}* | @usurname *{$r[1]}*)) | @login *{$r[0]}*"; } if (preg_match('/^[-_a-z0-9]+$/i', $r[1])) { $s .= " | (@login *{$r[1]}* & (@uname {$r[0]} | @usurname {$r[0]})) | @login *{$r[1]}*"; } // во всех остальных случаях полагаем что все слова кроме последнего введены полностью и просто ищем совпадения } else { for ($i = 0; $i < count($r) - 1; ++$i) { $s .= "{$r[$i]} | "; } $s .= "*{$r[$i]}* | {$r[$i]}"; } } // если нужны контакты в сбр и личке, то получаем их id if ($scope == 0 || $scope == 1) { // контакты в сбр $memBuff = new memBuff(); $contacts = $memBuff->get("bComboUsers{$uid}"); if ($contacts === false) { if (is_emp()) { $sbr = new sbr_emp($uid); } else { $sbr = new sbr_frl($uid); } $contacts = $sbr->getPartersId(); // контакты в личке $mess = new messages(); $rows = $mess->GetContacts($uid); for ($i = 0; $i < count($rows); ++$i) { if (!in_array($rows[$i]['uid'], $contacts)) { $contacts[] = $rows[$i]['uid']; } } $memBuff->set("bComboUsers{$uid}", $contacts, 600); } } // $i = 0-контакты, 1-остальные пользователи for ($i = 0; $i <= 1; ++$i) { if (!$i && !$contacts) { continue; } $rows = array(); // если поиск не требуется if ($s == '') { if (!$i) { if ($userType) { $table = $userType == 2 ? 'employer' : 'freelancer'; } else { $table = 'users'; } $rows = users::GetUsersInfoByIds($limit == 'ALL' ? $contacts : array_slice($contacts, 0, $limit), $table); } // если требуется } else { $filter = array(); if ($contacts) { if (!$i) { $filter['uids'] = $contacts; } else { $filter['nouids'] = $contacts; } } if ($userType) { $filter['utype'] = $userType - 1; } $search = new search(get_uid(false)); $search->addElement('users_simple', true); $search->search($s, 0, $filter, $limit == 'ALL' ? 1000 : $limit); $res = $search->getElements(); $rows = $res['users_simple']->getRecords(); $more[$i] = $res['users_simple']->total - count($rows); } // готовим вывод foreach ($rows as $k => $v) { if ($v['uid'] == null) { $v['uid'] = $v['id']; } $v['uname'] = iconv('WINDOWS-1251', 'UTF-8//IGNORE', $v['uname']); $v['usurname'] = iconv('WINDOWS-1251', 'UTF-8//IGNORE', $v['usurname']); if ($v['photo']) { $v['path'] = 'users/' . substr($v['login'], 0, 2) . '/' . $v['login'] . '/foto'; $v['photo'] = get_unanimated_gif($v['login'], $v['photo']); } else { $v['photo'] = '/images/temp/small-pic.gif'; } $v['isContacts'] = (int) (!(bool) $i); $result[] = $v; } } //return $result; // выводим $data = array('list' => $result, 'counters' => array('moreContacts' => $more[0], 'moreUsers' => $more[1]), 'dav' => WDCPREFIX); return json_encode($data); }
/** * Возвращает список контактов пользователя в определенной папке. * * @see messages::GetContacts() * * @param int $folder ид. папки. * * @return array */ protected function x____getContacts($args) { list($folder) = $args; require_once ABS_PATH . '/classes/messages.php'; $folder = (int) $folder; $result = null; $uid = $this->_sess->_uid; $limit = $this->_mCfg['page_size']; $messages = new messages(); if ($cnts = $messages->GetContacts($uid, $folder, null, $limit)) { foreach ($cnts as $key => $c) { $row = $this->pg2exRow($this->_mCfg['fields'], $c); if ($row['photo']) { $row['photo'] = WDCPREFIX . "/users/{$row['login']}/foto/{$row['photo']}"; } $row['role'] = (int) is_emp($row['role']); $row['link'] = $GLOBALS['host'] . "/contacts/?from={$row['login']}"; $result[$key] = $row; } } return $result; }
} $find = trim($_GET['find']); $msgs = new messages(); if (!($page = __paramInit('int', 'page', NULL, NULL))) { $page = 1; $bPageDefault = true; } if ($page <= 0) { $page = 1; } if (!$pm_folder) { // пользовательские папки if ($cur_folder == -5) { $contacts = $msgs->GetContactsWithNote(get_uid(), $find); } else { $contacts = $msgs->GetContacts(get_uid(), $cur_folder, $find, $blogspp, ($page - 1) * $blogspp, $predefined_count); } } else { // автоматические папки для массовых рассылок личных менеджеров $contacts = $msgs->pmAutoFolderGetContacts(get_uid(), $pm_folder, $find); } $count = $predefined_count ? $predefined_count : sizeof($contacts); $pages = ceil($count / $blogspp); if (($count == 0 || $count < ($page - 1) * $blogspp) && !$bPageDefault || $pages == 1 && !$bPageDefault) { include ABS_PATH . '/404.php'; exit; } } require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/payed.php"; $is_pro = payed::CheckPro($_SESSION['login']); $header = "../header.php";
function RnFolder($form_values) { session_start(); $fuid = get_uid(false); $objResponse = new xajaxResponse(); $bError = false; $fld = new mess_folders(); $msgs = new messages(); $contacts = $msgs->GetContacts($fuid); $users_folders = $msgs->GetUsersInFolders($fuid); if (!isset($form_values['id'])) { $objResponse->alert("Не выбрана папка."); $bError = true; } else { $folder_id = intval($form_values['id']); $cur_folder = intval($form_values['cur_folder']); $cont = intval($form_values['cont']); $logins = addslashes($form_values['logins']); $arr_logins = split('~', $logins); if ($folder_id <= 0) { $objResponse->alert("Не выбрана папка."); } else { if (!isset($form_values['new_name'])) { $objResponse->alert("Не указано новое имя папки."); } else { // $folder_name = addslashes($form_values['new_name']); $folder_name = substr(change_q($form_values['new_name'], false, 64), 0, 64); $request_folder_name = substr(change_q(stripslashes($form_values['new_name']), false, 64), 0, 64); $srch = array("<", ">"); $folder_name = trim(str_replace($srch, "", $folder_name)); if (empty($folder_name) || $folder_name == '') { $objResponse->alert("Не указано новое имя папки."); $objResponse->assign("savebtn", "disabled", false); } else { $fld->fname = $folder_name; $fld->id = $folder_id; $fld->from_id = get_uid(false); if (!($ermsg = $fld->Rename($folder_id))) { $GLOBALS['xajax']->setCharEncoding("windows-1251"); $objResponse->script("old_name='" . $folder_name . "';"); if ($cur_folder == $folder_id) { $folder_html = "<img class=\"li\" src=\"/images/ico_dir.gif\" />" . reformat($request_folder_name, 15, 0, 1); $folder_header = 'Сообщения / ' . reformat($folder_name, 15, 0, 1); $objResponse->assign("cht", "innerHTML", $folder_header); } else { $folder_html = "<a href=\"/contacts/?folder=" . $folder_id . "\"><span style=\"float:left;\"><img class=\"li\" src=\"/images/ico_dir.gif\" /></a></span><a href=\"/contacts/?folder=" . $folder_id . "\" class=\"blue\">" . reformat($request_folder_name, 15, 0, 1) . "</a>"; } foreach ($arr_logins as $login) { $objResponse->assign("folder" . $folder_id . "u" . $login, "innerHTML", reformat($folder_name, 25, 0, 1)); $objResponse->assign("vfolder" . $folder_id . "u" . $login, "innerHTML", reformat($folder_name, 25, 0, 1)); } $folder_html .= " (<span id=\"fldcount" . $folder_id . "\">" . $cont . "</span>)"; $folder_html .= "<div style=\"margin-top: 17px; text-align:right\"><a href=\"/contacts/?action=delfolder&id=" . $folder_id . "\" onClick=\"return warning(9)\" title=\"Удалится только папка. Контакты переместятся в папку «Все».\">Удалить</a> | <a href='javascript:rename(\"" . $folder_id . "\",\"" . $cur_folder . "\",\"" . str_replace("\\", "\\\\", htmlspecialchars($request_folder_name)) . "\",\"" . $cont . "\",\"" . $logins . "\");'>Переименовать</a></div>"; $objResponse->assign("li_folder" . $folder_id, "innerHTML", $folder_html); } else { $objResponse->alert($ermsg); $objResponse->assign("savebtn", "disabled", false); } } } } } return $objResponse; }