Ejemplo n.º 1
0
 /**
  * Добавить новые теги
  * 
  * 
  * @param array $tags Теги [тег1,тег2,...]
  * @return array Записанные результаты
  */
 function Add($tags)
 {
     global $DB;
     foreach ($tags as $ikey => $value) {
         if (!$value) {
             continue;
         }
         $sql = "SELECT inserttag('" . change_q_new(substr(trim($value), 0, 20)) . "');";
         $tag[] = $DB->val($sql);
         $error[1] = parse_db_error($DB->error);
     }
     return $tag;
 }
Ejemplo n.º 2
0
 /**
  * Выборка тем сообщений
  *
  * @param integer $item_id  ИД треда
  * @param string  $error    Возвращает сообщения об ошибке
  */
 function GetThread($item_id, &$error)
 {
     global $DB;
     $curname = get_class($this);
     $sql = "SELECT id, fromuser_id, reply_to, post_time, msgtext, attach, title, uname, usurname, users.is_banned, login, photo, is_pro_test, role, modified, modified_id, deluser_id, deleted, small, payed, sign\n\t\tFROM \n\t\t(SELECT {$curname}.item_id, {$curname}.fromuser_id, {$curname}.id, {$curname}.reply_to, {$curname}.post_time, {$curname}.msgtext, {$curname}.attach, {$curname}.title, {$curname}.modified, \n\t\t{$curname}.small, 1 as t, modified_id, deluser_id, deleted, NULL as sign FROM {$curname} WHERE item_id = ?i\n\t\tUNION ALL \n\t\tSELECT id, 0, 0, NULL, NULL, short, NULL, title, NULL, NULL, 0, NULL, NULL, NULL, sign\n\t\tFROM articles WHERE id = ?i) as blg\n\t\tLEFT JOIN users ON fromuser_id=uid \n\t\tLEFT JOIN (SELECT DISTINCT from_id, payed FROM orders \n             WHERE payed=true AND from_date<=now() AND from_date+to_date+COALESCE(freeze_to, '0')::interval >= now() AND orders.active='true'\n             AND NOT (freeze_from_time IS NOT NULL AND NOW() >= freeze_from_time::date AND NOW() < freeze_to_time)) as pay\n\t\t ON pay.from_id=uid\n\t\tORDER BY blg.t, reply_to, post_time";
     $this->thread = $DB->rows($sql, $item_id, $item_id);
     $error .= $DB->error;
     if ($error) {
         $error = parse_db_error($error);
     } else {
         $this->msg_num = count($this->thread);
         if ($this->msg_num > 0) {
             $this->SetVars(0);
         }
     }
 }
Ejemplo n.º 3
0
 /**
  * Выборка тем сообщений.
  *
  * @todo Возвращает несуществующие переменные, проверить и удалить
  * 
  * @param integer $nrsk_id ИД треда
  * @param mixed   $error   Возвращает сообщение об ошибке
  *
  * @return array
  */
 public function GetThread($nrsk_id, &$error)
 {
     global $DB;
     $curname = get_class($this);
     $sql = "SELECT id, fromuser_id, reply_to, post_time, msgtext, attach, title, uname, usurname, login, photo, role, modified, modified_id, deluser_id, deleted, small, is_pro as payed\n\t\tFROM  {$curname}\n\t\tLEFT JOIN users ON fromuser_id=uid \n\t\tWHERE item_id=?i ORDER BY reply_to, post_time";
     $this->thread = $DB->rows($sql, $nrsk_id);
     $error .= $DB->error;
     if ($error) {
         $error = parse_db_error($error);
     } else {
         $this->msg_num = count($this->thread);
         if ($this->msg_num > 0) {
             $this->SetVars($this->msg_num - 1);
         }
     }
     return array($name, $id_gr, 101);
 }
Ejemplo n.º 4
0
 /**
  * Выборка треда сообщения
  *
  * @param string $error  Возвращает сообщение об ошибке
  * @return integer 0;
  */
 function GetThread(&$error)
 {
     $curname = get_class($this);
     global $DB;
     $sql = "SELECT id, fromuser_id, reply_to, post_time, msgtext, attach, title, uname, usurname, login, photo, role, modified, modified_id, deluser_id, deleted, small, is_pro as payed\n\t\tFROM  {$curname}\n\t\tLEFT JOIN users ON fromuser_id=uid \n\t\tORDER BY reply_to, post_time";
     $res = $DB->squery($sql);
     $error .= pg_errormessage();
     if ($error) {
         $error = parse_db_error($error);
     } else {
         $this->thread = pg_fetch_all($res);
         $this->msg_num = pg_num_rows($res);
         if ($this->msg_num > 0) {
             $this->SetVars($this->msg_num - 1);
         }
     }
     return 0;
 }
Ejemplo n.º 5
0
 /**
  * Популярные авторы.
  *
  * @param integer $limit
  *
  * @return <type>
  */
 public function getTopAuthors($limit = 12)
 {
     global $DB;
     $sql = 'SELECT u.login, u.photo, SUM(a.view_cnt) as viewcnt FROM
             articles_new a
             INNER JOIN users as u ON u.uid = a.user_id
             WHERE a.approved = TRUE
             GROUP BY a.user_id, u.login, u.photo ORDER BY viewcnt DESC LIMIT ?i';
     $ret = $DB->rows($sql, $limit);
     $error = $DB->error;
     if ($error) {
         $error = parse_db_error($error);
     }
     return $ret;
 }
Ejemplo n.º 6
0
 /**
  * Удалить новость
  *
  * @param integer $id Ид новости
  * @return string Сообщение об ошибке
  */
 function Delete($id)
 {
     global $DB;
     $DB->query('DELETE FROM news WHERE id = ?', $id);
     if ($DB->error) {
         $error = parse_db_error($DB->error);
     }
     return $error;
 }
Ejemplo n.º 7
0
 /**
  * Информация о рейтинге работадателя и кол-ве хитов на его страницу.
  *
  * @param    string   $login   login работадателя
  * @param    string   $err     возвращает возможную ошибку
  *
  * @return   array             массив с данными
  */
 public function GetAdditInfo($login, &$err)
 {
     global $DB;
     $ret = $DB->row('
         SELECT 
             hits, 
             rating_get(rating, is_pro, is_verify) as rating, 
             hitstoday 
         FROM employer 
         WHERE login = ?', $login);
     $err .= $DB->error;
     if ($err) {
         $err = parse_db_error($err);
     }
     return $ret;
 }
Ejemplo n.º 8
0
 /**
  * Установка статуса "Отказано" для автора данного предложения.
  *
  * @param integer $po_id     id предложения
  * @param integer $prj_id    id проекта
  * @param integer $user_id   id пользователя
  * @param integer $po_reason причина отказа (0 - некорректен, 1 - не подходят работы, 2 - не подходит цена, 3 - другая причина)
  * @param boolean $selected  отказано (true) / не отказано (false)
  *
  * @return string сообщение об ошибке
  */
 public function SetRefused($po_id, $prj_id, $user_id, $po_reason = 0, $refused = true)
 {
     global $DB;
     $po_id = intval($po_id);
     $prj_id = intval($prj_id);
     $user_id = intval($user_id);
     $po_reason = intval($po_reason);
     $sql = "UPDATE projects_offers SET refused='" . ($refused ? 't' : 'f') . "', refuse_reason=?i WHERE id=?i AND project_id=?i AND user_id=?i RETURNING user_id";
     $frl_id = $DB->val($sql, $po_reason, $po_id, $prj_id, $user_id);
     $error = parse_db_error($DB->error);
     $mem = new memBuff();
     $mem->delete('prjEventsCnt' . $frl_id);
     $mem->delete('prjEventsCntWst' . $frl_id);
     return $error;
 }
Ejemplo n.º 9
0
 /**
  * Инициализировать переменные класса данными из таблицы с помощью произвольного запроса.
  *
  * @param string $where строка после WHERE
  *
  * @return string сообщение об ошибке
  */
 public function InitFromSQL($where_prms, $any_base = true)
 {
     global $DB;
     $fields = array();
     $current = get_class($this);
     $class_vars = get_class_vars(get_class($this));
     $inner_counters = 'LEFT JOIN users_counters uc ON uc.user_id = uid';
     foreach ($class_vars as $name => $value) {
         if ($name == 'rating') {
             $fields[] = "rating_get({$current}.rating, {$current}.is_pro, {$current}.is_verify, {$current}.is_profi) as rating";
             continue;
         }
         if ($name != 'passwd') {
             $fields[] = $current . '.' . $name;
         }
     }
     $fld = implode(', ', $fields);
     $where = array_shift($where_prms);
     $sql = "SELECT {$fld}, uc.ops_frl_null as ops_null, uc.ops_frl_plus as ops_plus, uc.ops_frl_minus as ops_minus\n                FROM {$current} {$inner_counters} WHERE {$where}";
     array_unshift($where_prms, $sql);
     $result = call_user_func_array(array($DB, 'row'), $where_prms);
     if ($DB->error) {
         $error = parse_db_error($DB->error);
     } else {
         if ($result) {
             foreach ($result as $name => $value) {
                 $this->{$name} = $value;
             }
         }
     }
     return $error;
 }
Ejemplo n.º 10
0
 /**
  * Инициализирует дерево сообщений в данной теме
  *
  * @param integer $thread_id		идентификатор темы
  * @param string $error				сообщение об ошибке
  * @param integer $mod				имеет ли текущий юзер права на просмотр данного раздела [1 - да, 0 - нет]
  * @param integer $fid				UID текущего юзера
  * @return array					[название раздела блогов, идентификатор раздела, идентификатор "базы"]
  */
 function GetThread($thread_id, &$error, $mod = 1, $fid = 0)
 {
     global $DB;
     $sql = "SELECT id_gr, base, is_private::int, close_comments::int, fav_cnt FROM blogs_themes WHERE thread_id='{$thread_id}'\n                UNION ALL\n                SELECT id_gr, base, null::int as is_private, null::int as close_comments, null as fav_cnt FROM blogs_themes_old WHERE thread_id='{$thread_id}'";
     $res = $DB->row($sql);
     if (!$res) {
         $error = "Группа не найдена или недоступна.";
         return 0;
     }
     $error = $DB->error;
     if ($fid) {
         $r = $DB->row("SELECT last_view, status FROM blogs_themes_watch WHERE user_id = ? AND theme_id = ?", $fid, $thread_id);
         if ($r['last_view']) {
             $new = $DB->parse(", (? < post_time) AS new, ?i AS read_comments", $r['last_view'], (int) $r['status']);
         }
     }
     $this->id_gr = $res['id_gr'];
     $this->base = $res['base'];
     $this->is_private = $res['is_private'];
     $this->close_comments = $res['close_comments'];
     $this->fav_cnt = $res['fav_cnt'];
     $name = $this->GetGroupName($this->id_gr, $this->base, $mod);
     if (!$name) {
         $error = "Группа не найдена или недоступна.";
         return 0;
     }
     $sql = "\n\t\t\t\t\tSELECT\n\t\t\t\t\t\tblogs_msgs.id, deleted_reason, fromuser_id, reply_to, post_time, msgtext, yt_link, blogs_msgs.title, modified, modified_id, deluser_id, deleted,\n\t\t\t\t\t\tusers.uname, users.usurname, users.login, users.photo, users.is_pro_test, users.role, users.is_chuck, users.is_team,\n\t\t\t\t\t\tusers.warn, users.is_banned, users.ban_where, users.is_pro as payed, users.is_pro_test as payed_test, users.reg_date, freelancer.spec, -- p.name as prof_name,\n\t\t\t\t\t\tadmins.uname AS modername, admins.usurname AS modersurname, admins.login AS moderlogin,\n\t\t\t\t\t\tblogs_poll.question as poll_question, blogs_poll.closed as poll_closed, blogs_poll.multiple as poll_multiple, sbr_meta.completed_cnt, moderator_status {$new}\n\t\t\t\t\tFROM blogs_msgs\n\t\t\t\t\tINNER JOIN users ON fromuser_id=users.uid\n\t\t\t\t\tLEFT JOIN freelancer ON fromuser_id=freelancer.uid\n\t\t\t\t\tLEFT JOIN users AS admins ON moderator_status = admins.uid\n                    LEFT JOIN sbr_meta ON sbr_meta.user_id=fromuser_id\n\t\t\t\t\t-- LEFT JOIN professions p ON p.id = freelancer.spec_orig\n\t\t\t\t\tLEFT JOIN blogs_poll ON blogs_poll.thread_id = blogs_msgs.thread_id\n\t\t\t\t\t{$join}\n\t\t\t\t\tWHERE blogs_msgs.thread_id= ?i ORDER BY reply_to, post_time\n\t\t\t\t";
     $this->thread = $DB->rows($sql, $thread_id);
     $error .= $DB->error;
     if ($error) {
         $error = parse_db_error($error);
     } else {
         $this->msg_num = count($this->thread);
         if ($this->msg_num > 0) {
             // аттач файлов
             $this->AddAttach($this->thread);
             // заблокирован ли топик
             if ($fid && $fid == $_SESSION['uid']) {
                 $role = $_SESSION['role'];
             } else {
                 if ($fid) {
                     $users = new users();
                     $role = $users->GetField($fid, $error, 'role');
                 } else {
                     $role = 0;
                 }
             }
             $is_moder = hasPermissions('blogs');
             if ($is_moder) {
                 $row = $DB->row("SELECT blogs_blocked.admin, blogs_blocked.reason, blogs_blocked.blocked_time, users.login as admin_login, users.uname as admin_name, users.usurname as admin_uname FROM blogs_blocked JOIN users ON blogs_blocked.admin = users.uid WHERE thread_id = ?i", $thread_id);
             } else {
                 $row = $DB->row("SELECT admin, reason, blocked_time FROM blogs_blocked WHERE thread_id = ?i", $thread_id);
             }
             if ($row) {
                 $this->is_blocked = 1;
                 $this->thread[$this->msg_num - 1] = array_merge($this->thread[$this->msg_num - 1], $row);
             } else {
                 $this->is_blocked = 0;
             }
             if ($this->thread[$this->msg_num - 1]['poll_question']) {
                 $r = $DB->rows("SELECT * FROM blogs_poll_answers WHERE thread_id = '{$thread_id}' ORDER BY id", $thread_id);
                 $this->thread[$this->msg_num - 1]['poll'] = $r;
             }
             // читаем тред
             $this->SetVars($this->msg_num - 1);
             if ($mod) {
                 require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/stdf.php";
                 $user = new users();
                 $user->GetUser($this->login);
                 if ($user->is_banned && $user->ban_where <= 1) {
                     $error = "Тред не найден или недоступен.";
                     return 0;
                 }
             }
             // доступ
             if ($this->is_blocked && !($fid && $fid == $this->fromuser_id || $is_moder)) {
                 $error = "Тред заблокирован администрацией";
                 return 0;
             }
         }
     }
     return array($name, $this->id_gr, $this->base);
 }
Ejemplo n.º 11
0
 /**
  * Получает комментрий к отзыву по его id
  *
  * @param integer $id              id комментария
  *
  * @return mixed                   массив с данными комментария или текст ошибки в случае неуспеха
  */
 function GetMsgComInfo($msg_id)
 {
     global $DB;
     $sql = "SELECT id, user_id, comment, opinion_id FROM opinion_comments WHERE id = ?";
     $res = $DB->query($sql, $msg_id);
     $error = pg_errormessage();
     if ($error) {
         $error = parse_db_error($error);
     } else {
         $ret = pg_fetch_assoc($res);
     }
     return $ret;
 }
Ejemplo n.º 12
0
 /**
  * Выборка тем сообщений
  *
  * @param integer $item_id  ИД треда
  * @param string  $error    Возвращает сообщения об ошибке
  */
 function GetThreads($item_id, &$error)
 {
     global $DB;
     $curname = get_class($this);
     $sql = "SELECT id, blg.from_id, parent_id, created_time, msgtext,\n                    modified_id, deleted_id,\n                    modified_time,\n                    u.uname, u.usurname, u.is_banned, u.login, u.photo, u.is_pro, u.is_pro_test, u.role,\n                    mod.uname as mod_name, mod.usurname as mod_usurname, mod.login as mod_login, mod.role as mod_role,\n                    youtube_link\n                FROM articles_comments as blg\n                INNER JOIN users as u ON u.uid=blg.from_id\n                LEFT JOIN users as mod ON mod.uid=blg.modified_id\n                WHERE blg.article_id=?i\n                ORDER BY created_time";
     $this->thread = $DB->rows($sql, $item_id);
     $error .= $DB->error;
     if ($error) {
         $error = parse_db_error($error);
     } else {
         $this->msg_num = count($this->thread);
         if ($this->msg_num > 0) {
             $this->SetVars(0);
         }
     }
     //return array($name, $id_gr, 99);
 }
Ejemplo n.º 13
0
 /**
  * Добавление ответа менеджера, по заявке.
  *
  * @param string $msg    Сообщение
  * @param int    $id     ИД заявки
  * @param int    $status Статус (принять(1)/отказать(0))
  *
  * @return bool
  */
 public function addAnswerManager($msg, $id, $status = 1)
 {
     global $DB;
     $type = $status == 1 ? 'msg_green' : 'msg_red';
     $DB->update('my_manager', array($type => $msg, 'status' => $status), 'id = ?i', $id);
     $error = $DB->error;
     $sql = 'SELECT uid FROM my_manager as m WHERE m.id = ?i LIMIT 1 OFFSET 0';
     $uid = $DB->val($sql, $id);
     if ($DB->error) {
         $error = parse_db_error($DB->error);
     }
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php';
     $smail = new smail();
     $smail->sendManagerAnswer($uid, $msg);
     return true;
 }
Ejemplo n.º 14
0
 /**
  * Берем определенной поле из портфолио по его ИД.
  *
  * @param integer $id         ИД портфолио
  * @param string  $fieldname  Имя поля
  *
  * @return string Значение поля
  */
 public function GetField($id, $fieldname)
 {
     global $DB;
     $sql = "SELECT {$fieldname} FROM portfolio WHERE (id= ?i )";
     $ret = $DB->val($sql, $id);
     $error = $DB->error;
     if ($error) {
         $error = parse_db_error($error);
     }
     return $ret;
 }