예제 #1
0
 /**
  * Возвращает родстер (список контактов) пользователя.
  * 
  * @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);
 }
예제 #3
0
 /**
  * Возвращает список контактов пользователя в определенной папке.
  *
  * @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;
 }
예제 #4
0
    }
    $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";
예제 #5
0
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=\"Удалится только папка. Контакты переместятся в&nbsp;папку &laquo;Все&raquo;.\">Удалить</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;
}