Example #1
0
 /**
  * Обновить заметку
  *
  * @param integer $user_id      ИД пользователя 
  * @param string  $target_login Кому заметка
  * @param string  $text         текст заметки
  * @return string Сообщение об ошибке
  */
 function Update($user_id, $target_login, $text, $rating = 0, $old = "?i")
 {
     $DB = new DB();
     if (empty($user_id) || empty($target_login) || empty($text)) {
         return 'Ошибка обновления заметки';
     }
     $res = $DB->val("SELECT notes_update(?i, {$old}, ?, ?i)", $user_id, $target_login, $text, (int) $rating);
     return '';
 }
Example #2
0
 /**
  * Переименовать папку
  * 
  * @return string пустая строка - успех, или сообщение об ошибке
  */
 public function Rename()
 {
     $DB = new DB();
     if (!($r = $DB->row("SELECT * FROM messages_folders(?i) WHERE id = ?", $this->from_id, $this->id))) {
         return 'Указанной папки не существует';
     }
     if ($DB->val("SELECT COUNT(*) FROM messages_folders(?i) WHERE fname = ? AND id <> ?", $this->from_id, $this->fname, $this->id)) {
         return 'Папка с таким именем уже существует';
     }
     $DB->query("SELECT messages_folders_rename(?, ?, ?)", $this->id, $this->from_id, $this->fname);
     return '';
 }
Example #3
0
 /**
  * Делает рассылку по sql запросу.
  * В SELECT части sql запроса обязательно должно быть поле uid.
  * 
  * @param string  $sql       SQL запрос возвращающий список респондетов
  * @param string  $message   сообщение
  * @param string  $mailFunc  функция отправки сообщений на почту (из класса pmail)
  * @param integer $recOnStep количество пользователей попадающих в одну очередь
  *
  * @return integer id сообщения из таблицы messages
  */
 protected function _masssendSql($sql, $message, $mailFunc, $recOnStep = self::MASSSEND_BIND_QUEUE_SIZE)
 {
     $msgid = $this->_dbProxy->val('SELECT masssend(?, ?, ?a, ?)', $this->_sender->uid, $message, array(), $mailFunc);
     $res = $this->_dbMaster->query($sql);
     $i = 0;
     $uids = array();
     while ($row = pg_fetch_assoc($res)) {
         $uids[] = $row['uid'];
         if (++$i % $recOnStep == 0) {
             $this->_dbProxy->query('SELECT masssend_bind(?, ?, ?a)', $msgid, $this->_sender->uid, $uids);
             $uids = array();
             $i = 0;
         }
     }
     if ($i) {
         $this->_dbProxy->query('SELECT masssend_bind(?, ?, ?a)', $msgid, $this->_sender->uid, $uids);
         $uids = array();
     }
     $this->_dbProxy->query('SELECT masssend_commit(?, ?)', $msgid, $this->_sender->uid);
     return $msgid;
 }
Example #4
0
 /**
  * Через какой промежуток времени можно будет отослать следующее сообщение.
  * 
  * @param type $date   Дата
  * @param type $msisdn Телефон абонента
  *
  * @return type
  */
 public function nextTimeSend($date = false)
 {
     if (!$date) {
         $sql = 'SELECT date_send FROM sms_gate WHERE msisdn = ? ORDER by date_send DESC LIMIT 1';
         $date = $this->_db->val($sql, $this->getCell());
         if (!$date) {
             return false;
         }
     }
     $this->next_time_send = strtotime($date . ' + ' . self::TIMEOUT_SEND);
     return $this->next_time_send;
 }
Example #5
0
function _HCM_linkart($id = null, $text = null, $nove_okno = false)
{
    if (null === $text) {
        $query = DB::query_row('SELECT art.title,art.title_seo,cat.title_seo AS cat_title_seo FROM `' . _mysql_prefix . '-articles` AS art JOIN `' . _mysql_prefix . '-root` AS cat ON(cat.id=art.home1) WHERE art.' . (is_numeric($id) ? 'id' : 'title_seo') . '=' . DB::val($id));
        if (false === $query) {
            return '{' . _htmlStr($id) . '}';
        }
        $text = $query['title'];
    } else {
        $query = array('title_seo' => null, 'cat_title_seo' => null);
    }
    return "<a href='" . _linkArticle($id, $query['title_seo'], $query['cat_title_seo']) . "'" . ($nove_okno ? ' target="_blank"' : '') . ">" . $text . "</a>";
}
Example #6
0
 /**
  * Добавляет/удаляет пользователя в личную папку
  *
  * @param string $login             логин пользователя, над которым производим действия
  *
  * @return integer
  */
 function Change($login)
 {
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/users.php";
     $DB = new DB();
     $ok = FALSE;
     $this->to_id = users::GetUid($error, $login);
     $res = $DB->query("SELECT * FROM messages_folders(?i)", $this->from_id);
     while ($row = pg_fetch_assoc($res)) {
         if ($row['id'] == $this->folder) {
             $ok = TRUE;
             break;
         }
     }
     if ($this->to_id && $this->from_id) {
         $id = $DB->val("SELECT messages_folders_user_move(?i, ?i, ?i)", $this->from_id, $this->to_id, $this->folder);
     }
     return $id;
 }
Example #7
0
function Masssending_test($user_id, $masssending_id, $text, $posted_time, $skip_mail = false)
{
    $master = new DB('master');
    $plproxy = new DB('plproxy');
    $error = '';
    $files = $master->col("SELECT file.id FROM mass_sending_files m INNER JOIN file ON m.fid = file.id WHERE mass_sending_id = ? ORDER BY m.pos", $masssending_id);
    $ignors = $plproxy->col("SELECT user_id FROM ignor_me(?)", $user_id);
    array_push($ignors, $user_id);
    //print_r($ignors);exit;
    $sql = $master->parse("\n            SELECT \n                m.uid \n            FROM \n                mass_sending_users m \n            INNER JOIN \n                users u ON m.uid = u.uid AND u.is_banned = B'0' \n            WHERE \n                mid = ?i AND m.uid NOT IN (?l)\n        ", $masssending_id, $ignors);
    /*$msgid = $plproxy->val("SELECT masssend(?, ?, ?a, ?)", $user_id, $text, $files, ($skip_mail? '': 'SpamFromMasssending'));
      if ( $msgid ) {
          $plproxy->query("SELECT masssend_sql(?, ?, ?)", $msgid, $user_id, $sql);
      }*/
    $msgid = $plproxy->val('SELECT masssend(?, ?, ?a, ?, ?, ?, ?)', $user_id, $text, $files, $masssending_id, $posted_time, $skip_mail ? '' : 'SpamFromMasssending', $sql);
    //print_r($msgid);exit;
    // TODO: отдельным тикетом
    //$master->query("DELETE FROM mass_sending_users WHERE mid = ?", $masssending_id);
    return empty($plproxy->error);
}
Example #8
0
 public function getTopQueiesAdmin($type, $limit = 40, $offset, &$count)
 {
     $where = '';
     $limit = " LIMIT {$limit} OFFSET {$offset} ";
     $types = array('users', 'projects');
     $index_type = 2;
     if (in_array($type, array('users', 'projects'))) {
         $index_type = intval(array_search($type, $types));
         $where = "WHERE index_type = {$index_type}";
     } elseif ($type == 'more') {
         $where = 'WHERE index_type = 2';
     }
     $sql = "SELECT s.query, rate as weight, match_cnt as match_cnt, cnt as cnt \n                FROM search_kwords_top s\n                {$where}\n                ORDER BY weight DESC {$limit}";
     $res = $this->_db->rows($sql);
     if (!$res) {
         $res = array();
     }
     $sql = "SELECT COUNT(*) FROM search_kwords_top {$where}";
     $count = $this->_db->val($sql);
     return $res;
 }
Example #9
0
function _HCM_linkroot($id = null, $text = null, $nove_okno = false)
{
    $is_id = is_numeric($id);
    if ($is_id) {
        $id = intval($id);
    } else {
        $id = DB::val($id);
    }
    $query = DB::query("SELECT title,title_seo FROM `" . _mysql_prefix . "-root` WHERE " . ($is_id ? 'id' : 'title_seo') . "=" . $id);
    if (isset($nove_okno) and _boolean($nove_okno)) {
        $target = " target='_blank'";
    } else {
        $target = "";
    }
    if (DB::size($query) != 0) {
        $query = DB::row($query);
        if (isset($text) and $text != "") {
            $query['title'] = $text;
        }
        return "<a href='" . _linkRoot($id, $query['title_seo']) . "'" . $target . ">" . $query['title'] . "</a>";
    }
}
Example #10
0
        }
        if ($usernamechange == true) {
            $extra['username'] = $username;
        }
        if ($passwordchange == true) {
            $extra['password'] = $newpassword[0];
            $extra['salt'] = $newpassword[1];
            $_SESSION[_sessionprefix . "password"] = $newpassword[0];
        }
        // extend
        _extend('call', 'mod.settings.save', array('query' => &$extra, 'current_query' => $query));
        // zpracovani extra polozek
        $sql_extra = '';
        if (!empty($extra)) {
            foreach ($extra as $col => $val) {
                $sql_extra .= ',`' . $col . '`=' . DB::val($val);
            }
        }
        // hlavni dotaz
        DB::query("UPDATE `" . _mysql_prefix . "-users` SET email='" . $email . "',avatar=" . (isset($avatar) ? '\'' . $avatar . '\'' : 'NULL') . ",web='" . $web . "',skype='" . $skype . "',msn='" . $msn . "',jabber='" . $jabber . "',icq=" . $icq . ",massemail=" . $massemail . ",note='" . $note . "',publicname='" . $publicname . "'" . $sql_extra . " WHERE id=" . _loginid);
        _extend('call', 'user.edit', array('id' => _loginid, 'username' => $username));
        define('_redirect_to', _url . '/index.php?m=settings&saved');
        return;
    } else {
        $message = _formMessage(2, _eventList($errors, 'errors'));
    }
}
/* ---  modul  --- */
if (isset($_GET['saved'])) {
    $message = _formMessage(1, $_lang['global.saved']);
}
Example #11
0
 /**
  * Проверка польователя на нахождениии в игнор-листе.
  * В случае нахождения удаляет пользователя из списка, иначе добавляет.
  *
  * @param integer $login логин пошльзователя, которого проверяем
  *
  * @return string пустая строка или сообщение об ошибке в случае неуспеха
  */
 public function Change($login)
 {
     $DB = new DB();
     $r = $DB->val('SELECT ignor_check(?, ?)', $this->user_id, $login);
     if ($r) {
         $this->target_id = $login;
         $this->Del();
     } else {
         $this->Add($this->user_id, $login);
     }
     return $r;
 }
Example #12
0
 /**
  * Обновление статуса рассылки
  * 
  * @global type $DB 
  * @param booleab $force - Силой обновить статусы
  */
 public function updateStatusSending($force = false)
 {
     global $DB;
     $PLDB = new DB('plproxy');
     $sql = "SELECT * FROM mailer_messages WHERE status_sending = 2;";
     $mailer = $DB->rows($sql);
     foreach ($mailer as $message) {
         if ($message['spamid'] > 0) {
             $sql = "SELECT varvalue FROM mail.vars WHERE varname = 'mailid:2'";
             $varvalue = $PLDB->val($sql);
             //
             $sql = "SELECT COUNT(*) FROM mail.recipients_{$message['spamid']} WHERE mailid > {$varvalue}";
             $spam_send = $PLDB->val($sql) == 0 ? 1 : 0;
         }
         if ($message['msgid'] > 0) {
             $sql = "SELECT 1 FROM messages_zeros_userdata({$message['user_id']}, {$message['msgid']}) LIMIT 1;";
             $msg_send = $PLDB->val($sql);
         }
         if ($message['spamid'] > 0 && $message['msgid'] > 0 && $spam_send == 1 && $msg_send == 1) {
             $this->update(array("status_sending" => $message['type_regular'] <= 1 ? 1 : 0, "status_message" => 1), $message['id']);
         } else {
             if ($message['spamid'] > 0 && $spam_send == 1) {
                 $this->update(array("status_sending" => $message['type_regular'] <= 1 ? 1 : 0, "status_message" => 1), $message['id']);
             } else {
                 if ($message['msgid'] > 0 && $msg_send == 1) {
                     $this->update(array("status_sending" => $message['type_regular'] <= 1 ? 1 : 0, "status_message" => 1), $message['id']);
                 } elseif ($force) {
                     $this->update(array("status_sending" => $message['type_regular'] <= 1 ? 1 : 0, "status_message" => 1), $message['id']);
                 }
             }
         }
     }
 }
Example #13
0
 /**
  * Проверка возможности отправить сообщение ползователю.
  * 
  * @global type $DB
  * @staticvar null $exists_allowed
  *
  * @param type $to_id
  * @param type $from_id
  *
  * @return bool
  */
 public static function isAllowed($to_id, $from_id = null)
 {
     $is_auth = isset($_SESSION['uid']) && $_SESSION['uid'] > 0;
     if (!$from_id && !$is_auth) {
         return false;
     }
     if (!$from_id) {
         $from_id = $_SESSION['uid'];
     }
     if ($is_auth && (currentUserHasPermissions('users') || is_emp())) {
         return true;
     }
     $is_allowed = self::_isAllowed($to_id, $from_id);
     if (!$is_allowed) {
         //Была ли уже проверка доступности
         //тогда пользователю запрещено писать
         $key_check_is_allowed = sprintf(self::KEY_CHECK_IS_ALLOWED, $from_id, $to_id);
         $mem = new memBuff();
         if ($mem->get($key_check_is_allowed)) {
             return false;
         }
         //Иначе делаем проверку
         //Которые уже хотя бы раз общались с заказчиком через личку,
         //например если заказчик инициировал общение или они ранее общались
         $proxy_db = new DB();
         $is_allowed = $proxy_db->val('SELECT messages_dialog_count(?i, ?i)', $to_id, $from_id) > 0;
         //Которых заказчик выбрал исполнителем в любом своем проекте
         if (!$is_allowed) {
             require_once ABS_PATH . '/classes/projects.php';
             $is_allowed = (bool) projects::isExec($from_id, $to_id);
         }
         //В список условий я бы еще добавил проведение заказа на сайте - если есть завершенный заказ
         //(с резервом или без, по ТУ, проекту или прямой) с данным заказчиком, то тоже разрешать
         //исполнителю писать ему в личку, так как в заказе светится логин заказчика и они уже сотрудничали.
         if (!$is_allowed) {
             require_once ABS_PATH . '/tu/models/TServiceOrderModel.php';
             $is_allowed = (bool) TServiceOrderModel::hasSuccessfulOrder($from_id, $to_id);
         }
         //Если фрилансер был выбран на любое призовое место в конкурсе то
         //он может писать сообщения заказчику.
         if (!$is_allowed) {
             require_once ABS_PATH . '/classes/contest.php';
             $is_allowed = (bool) contest::isPrizePlace($from_id, $to_id);
         }
         if ($is_allowed) {
             self::setIsAllowed($to_id, $from_id, true);
         }
         $mem->set($key_check_is_allowed, 1, 0, self::KEY_CHECK_TAG_IS_ALLOWED);
     }
     return $is_allowed;
 }
$pMessage = "\nЗдравствуйте!\n\nУ каждого пользователя на нашем сайте есть рейтинг, у кого-то он больше, у кого-то меньше. А зачем же он нужен? Мы ответим: чем выше ваш рейтинг, тем больше шансов найти интересный проект!\n\nРаботодатели, подыскивая исполнителей на свои проекты, ориентируются на рейтинг фрилансера и практически всегда выбирают пользователей с большим рейтингом – ведь это говорит об опыте и профессионализме кандидата. \n\nРейтинг фрилансера складывается из различных параметров. К примеру, показатели будут больше, если вы будете чаще заходить на сайт, заполните http:/{свой профайл}/{$pHost}/users/%USER_LOGIN%/?utm_source=newsletter4&utm_medium=rassilka&utm_campaign=rating<span>,</span> добавите работы в портфолио. Рекомендуем обмениваться с заказчиками рекомендациям и по результатам сотрудничества – чем больше у вас положительных рекомендаций, тем выше рейтинг. Немаловажными факторами являются и наличие у вас аккаунта http:/{PRO}/{$pHost}/payed/?utm_source=newsleter4&utm_medium=rassilka&utm_campaign=ratingPRO<span>,</span> отклики на проекты, участие в жизни нашего портала – появление ваших работ в разделах http:/{«Статьи»}/{$pHost}/articles/?utm_source=newsleter4&utm_medium=rassilka&utm_campaign=rating<span>,</span> победа в конкурсах от работодателей и многое другое. Кроме того, вы можете покупать баллы рейтинга. Узнать обо всем более подробно можно http:/{здесь}/{$pHost}/help/?q=812&utm_source=newsletter4&utm_medium=rassilka&utm_campaign=rating<span>.</span> \n\nhttp:/{Поднять себе рейтинг!}/{$pHost}/users/%USER_LOGIN%/?utm_source=newsletter4&utm_medium=rassilka&utm_campaign=rating\n\nПо всем возникающим вопросам вы можете обращаться в нашу http:/{службу поддержки}/{$pHost}/help/?all&utm_source=newsletter4&utm_medium=rassilka&utm_campaign=rating<span>.</span>\nВы можете отключить уведомления на http:/{странице «Уведомления/Рассылка»}/{$pHost}/users/%USER_LOGIN%/setup/mailer/?utm_source=newsletter4&utm_medium=rassilka&utm_campaign=rating вашего аккаунта.\n\nПриятной работы,\nКоманда Free-lance.ru";
$eSubject = "Как мериться рейтингом на Free-lance.ru";
$eMessage = "<p>Здравствуйте!</p>\n\n<p>\nУ каждого пользователя на нашем сайте есть рейтинг, у кого-то он больше, у кого-то меньше. А зачем же он нужен? Мы ответим: чем выше ваш рейтинг, тем больше шансов найти интересный проект!\n</p>\n\n<p>\nРаботодатели, подыскивая исполнителей на свои проекты, ориентируются на рейтинг фрилансера и практически всегда выбирают пользователей с большим рейтингом – ведь это говорит об опыте и профессионализме кандидата. \n</p>\n\n<p>\nРейтинг фрилансера складывается из различных параметров. К примеру, показатели будут больше, если вы будете чаще заходить на сайт, заполните <a href='{$GLOBALS['host']}/users/%USER_LOGIN%/?utm_source=newsletter4&utm_medium=rassilka&utm_campaign=rating'>свой профайл</a>, добавите работы в портфолио. Рекомендуем обмениваться с заказчиками рекомендациям и по результатам сотрудничества – чем больше у вас положительных рекомендаций, тем выше рейтинг. \nНемаловажными факторами являются и наличие у вас аккаунта <a href='{$GLOBALS['host']}/payed/?utm_source=newsleter4&utm_medium=rassilka&utm_campaign=rating'>PRO</a>, отклики на проекты, участие в жизни нашего портала – появление ваших работ в разделах <a href='{$GLOBALS['host']}/articles/?utm_source=newsleter4&utm_medium=rassilka&utm_campaign=rating'>«Статьи»</a>, победа в конкурсах от работодателей и многое другое. Кроме того, вы можете покупать баллы рейтинга. Узнать обо всем более подробно можно <a href='{$GLOBALS['host']}/help/?q=812&utm_source=newsletter4&utm_medium=rassilka&utm_campaign=rating'>здесь</a>. \n</p>\n\n<p><a href='{$GLOBALS['host']}/users/%USER_LOGIN%/?utm_source=newsletter4&utm_medium=rassilka&utm_campaign=rating'>Перейти на сайт</a> и поднять себе рейтинг!</p>\n\n<p>\nПо всем возникающим вопросам вы можете обращаться в нашу <a href='{$GLOBALS['host']}/help/?all&utm_source=newsletter4&utm_medium=rassilka&utm_campaign=rating'>службу поддержки</a>.<br/>\nВы можете отключить уведомления на <a href='{$GLOBALS['host']}/users/%USER_LOGIN%/setup/mailer/?utm_source=newsletter4&utm_medium=rassilka&utm_campaign=rating'>странице «Уведомления/Рассылка»</a> вашего аккаунта.\n</p>\n\n<p>\nПриятной работы,<br/>\nКоманда <a href='{$GLOBALS['host']}/?utm_source=newsletter4&utm_medium=rassilka&utm_campaign=rating'>Free-lance.ru</a>\n</p>";
// ----------------------------------------------------------------------------------------------------------------
// -- Рассылка ----------------------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------------------------------
$DB = new DB('plproxy');
$master = new DB('master');
$cnt = 0;
$sender = $master->row("SELECT * FROM users WHERE login = ?", $sender);
if (empty($sender)) {
    die("Unknown Sender\n");
}
echo "Send personal messages\n";
// подготавливаем рассылку
$msgid = $DB->val("SELECT masssend(?, ?, '{}', '')", $sender['uid'], $pMessage);
if (!$msgid) {
    die('Failed!');
}
// допустим, мы получаем адресатов с какого-то запроса
$i = 0;
while ($users = $master->col("{$sql} LIMIT 30000 OFFSET ?", $i)) {
    $DB->query("SELECT masssend_bind(?, {$sender['uid']}, ?a)", $msgid, $users);
    $i = $i + 30000;
}
$DB->query("SELECT masssend_commit(?, ?)", $msgid, $sender['uid']);
echo "Send email messages\n";
$mail = new smtp();
$mail->subject = $eSubject;
// заголовок письма
$mail->message = $eMessage;
Example #15
0
// ----------------------------------------------------------------------------------------------------------------
// -- Рассылка ----------------------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------------------------------
$master = new DB('master');
$plproxy = new DB('plproxy');
$count = NULL;
$sender = $master->row("SELECT * FROM users WHERE login = ?", $sender);
if (empty($sender)) {
    die("Unknown Sender\n");
}
echo "Send personal messages\n";
if ($mass) {
    $count = 0;
    switch ($recipients) {
        case 'all':
            $message_id = $plproxy->val("SELECT messages_masssend_all(?, ?, ?, ?a)", $sender['uid'], $pro, $pMessage, $pFiles);
            break;
        case 'freelancers':
            $message_id = $plproxy->val("SELECT messages_masssend_freelancers(?, ?, ?, ?a)", $sender['uid'], $pro, $pMessage, $pFiles);
            break;
        case 'employers':
            $message_id = $plproxy->val("SELECT messages_masssend_employers(?, ?, ?, ?a)", $sender['uid'], $pro, $pMessage, $pFiles);
            break;
        case '':
            $users = $master->col($sql);
            if (empty($users)) {
                die("No users\n");
            }
            $count = count($users);
            $message_id = $plproxy->val("SELECT messages_masssend(?, ?a, ?, ?a)", $sender['uid'], $users, $pMessage, $pFiles);
            unset($users);
 /**
  * Sestavit a provest dotaz na cestu
  * @param  array    $columns
  * @param  int      $nodeId
  * @param  int|null $nodeLevel
  * @return array
  */
 public function loadPath(array $columns, $nodeId, $nodeLevel = null)
 {
     // zjistit uroven uzlu
     if (null === $nodeLevel) {
         $nodeLevel = DB::query_row('SELECT ' . $this->levelColumn . ' FROM `' . $this->table . '` WHERE ' . $this->idColumn . '=' . DB::val($nodeId));
         if (false === $nodeLevel) {
             throw new RuntimeException(sprintf('Neexistujici uzel "%s"', $nodeId));
         }
         $nodeLevel = $nodeLevel[$this->levelColumn];
     }
     // pripravit sloupce
     $columns = array_merge(array($this->idColumn, $this->parentColumn, $this->levelColumn, $this->depthColumn), $columns);
     $columnCount = sizeof($columns);
     // sestavit dotaz
     $sql = 'SELECT ';
     for ($i = 0; $i <= $nodeLevel; ++$i) {
         for ($j = 0; $j < $columnCount; ++$j) {
             if (0 !== $i || 0 !== $j) {
                 $sql .= ',';
             }
             $sql .= 'n' . $i . '.' . $columns[$j];
         }
     }
     $sql .= ' FROM `' . $this->table . '` n0';
     for ($i = 1; $i <= $nodeLevel; ++$i) {
         $sql .= sprintf(_nl . ' JOIN `%s` n%s ON(n%2$s.%s=n%s.%s)', $this->table, $i, $this->idColumn, $i - 1, $this->parentColumn);
     }
     $sql .= ' WHERE n0.' . $this->idColumn . '=' . DB::val($nodeId);
     // nacist uzly
     $nodes = array();
     $nodeIndex = 0;
     $query = DB::query($sql);
     $row = DB::rown($query);
     for ($i = $nodeLevel * $columnCount; isset($row[$i]); $i -= $columnCount) {
         for ($j = 0; $j < $columnCount; ++$j) {
             $nodes[$nodeIndex][$columns[$j]] = $row[$i + $j];
         }
         ++$nodeIndex;
     }
     DB::free($query);
     return $nodes;
 }
Example #17
0
 /**
  * Получение ко-ва авторизация пользователя.
  *
  * @param integer $uid ID пользователя
  *
  * @return integer Кол-во авторизаций
  */
 public function getLoginsCnt($uid)
 {
     global $DB;
     $sql = 'SELECT cnt FROM users_login_cnt WHERE user_id = ?i';
     $n = intval($DB->val($sql, $uid));
     if ($n < 11) {
         $STAT = new DB('stat');
         $m = intval($STAT->val('SELECT COUNT(user_id) FROM users_visits_daily WHERE user_id = ?i', $uid));
     }
     if ($m > $n) {
         $n = $m;
     }
     return $n;
 }
Example #18
0
 function _auth_remove_user($params)
 {
     $username = $params['user'];
     $user = Auth::user();
     $channel = $params['channel'];
     $auth = new DB('mysql:host=localhost;dbname=auth', 'root', '', 'auth');
     if (!$auth) {
         return $this->_cant_connect();
     }
     if ($auth->val("SELECT count(*) FROM user_info WHERE user_name = :username", array('username' => $username)) > 0) {
         $auth->query("DELETE FROM user_info where user_name = :username;", array('username' => $username));
         $auth->query("DELETE FROM user_group where user_name = :username;", array('username' => $username));
         Status::create()->data(Utils::cmdout($params) . 'Removed user "' . $username . '" from http_auth.')->user_id($user->id)->channel($channel)->cssclass('httpauth')->insert();
     } else {
         Status::create()->data(Utils::cmdout($params) . 'User "' . $username . '" doesn\'t exist in http_auth.')->user_id($user->id)->channel($channel)->cssclass('httpauth')->insert();
     }
     return true;
 }
Example #19
0
</td>
</tr>
<tr>
	<td>- Перевели денег:</td>
	<td><?php 
echo zin($transf[$i]['cnt']);
?>
</td>
</tr>
<tr><td colspan=2><strong>Живых</strong></td></tr>
<tr>
	<td>- Фрилансеры:</td>
	<td>
        <?php 
$sql = "SELECT SUM(l_frl) as cnt FROM stat_data WHERE date >=? AND date<=?";
$s_f_live['cnt'] = $DB->val($sql, $fdate, $tdate);
?>
        <?php 
echo (int) $s_f_live['cnt'];
?>
    </td>
</tr>
<tr>
	<td>- Работадатели:</td>
	<td>
        <?php 
$sql = "SELECT SUM(l_emp) as cnt FROM stat_data WHERE date >=? AND date<=?";
$s_e_live['cnt'] = $DB->val($sql, $fdate, $tdate);
?>
        <?php 
echo (int) $s_e_live['cnt'];
/**
 * [ADMIN] Backup API - obnovit zalohu (castecnou nebo jen databaze)
 * @param string $path cesta k souboru
 * @return array|bool true pri uspechu, jinak array(err_msg, fatal 1/0)
 */
function _backupRestore($path)
{
    // priprava
    global $_lang;
    $fatal = false;
    $path = realpath($path);
    // proces obnovy
    do {
        /* ----- nacteni a kontroly ----- */
        // kontrola souboru
        if (($err = _backupCheckFile($path, array(_backup_db, _backup_partial))) !== true) {
            break;
        }
        // nacteni souboru
        $kzip = new KZip($path);
        if (!empty($kzip->error)) {
            $err = str_replace('*errstr*', _htmlStr($kzip->error), $_lang['admin.other.backup.restore.upload.err.load']);
            break;
        }
        $type = $kzip->vars['type'];
        // uprava merge pole
        if (isset($kzip->vars['merge'])) {
            $kzip->vars['merge'] = array_flip($kzip->vars['merge']);
        }
        // kontrola prava pro zapis
        if ($type === _backup_partial) {
            $a_files = '/files/';
            $dirs = $kzip->listFiles($a_files, true);
            $dirs = $dirs[0];
            for ($i = 0; isset($dirs[$i]); ++$i) {
                if (($err = _emptyDir(realpath(dirname($_SERVER['SCRIPT_FILENAME']) . '/' . _indexroot . $dirs[$i]) . '/')) !== true) {
                    $err = str_replace('*path*', _htmlStr($err), $_lang['admin.other.backup.restore.err.access']);
                    break 2;
                }
            }
        }
        /* ----- provedeni ----- */
        // chyby na teto urovni jsou j*z fatalni
        $fatal = true;
        // databaze
        $dbdump = new DBDump();
        // tabulky
        $tbl_import = $dbdump->importTables($kzip->getFile('/database/struct'));
        if (!$tbl_import[0]) {
            $err = $tbl_import[1] . ': <code>' . _htmlStr($tbl_import[2]) . '</code>';
            break;
        }
        // data
        $dbstream = $kzip->getFileStream('/database/data');
        $data_import = $dbdump->importData($dbstream);
        $dbstream->free();
        if (!$data_import[0]) {
            $err = $data_import[1];
            break;
        }
        // aktualizovat hlavni URL, vynutit kontrolu instalace
        if (($url = _getBaseUrl()) !== false) {
            DB::query('UPDATE `' . _mysql_prefix . '-settings` SET `val`=' . DB::val(rtrim($url, '/')) . ' WHERE `var`=\'url\'');
        }
        DB::query('UPDATE `' . _mysql_prefix . '-settings` SET `val`=\'1\' WHERE `var`=\'installcheck\'');
        // deaktivovat modrewrite, pokud neexistuje .htaccess
        if (!file_exists(_indexroot . '.htaccess')) {
            DB::query('UPDATE `' . _mysql_prefix . '-settings` SET `val`=\'0\' WHERE `var`=\'modrewrite\'');
        }
        // soubory
        if ($type === _backup_partial) {
            for ($i = 0; isset($dirs[$i]); ++$i) {
                echo "\n\n";
                $dirpath = realpath(dirname($_SERVER['SCRIPT_FILENAME']) . '/' . _indexroot . $dirs[$i]) . '/';
                if (!isset($kzip->vars['merge'], $kzip->vars['merge'][$dirs[$i]])) {
                    _emptyDir($dirpath, false);
                }
                $kzip->extractFiles($dirpath, $a_files . $dirs[$i] . '/', false, true, array($kzip->vars['void']));
            }
        }
        // hotovo
        $kzip->free();
        return true;
    } while (false);
    // chyba
    if (isset($kzip)) {
        $kzip->free();
    }
    return array($err, $fatal);
}
 /**
  * Format SQL query parameter (callback)
  * @param  array  $match
  * @return string
  */
 public function formatSqlParam(array $match)
 {
     if (isset($match['lit']) && '' !== $match['lit']) {
         if (isset($this->formatSqlParams[$match['lit']])) {
             $param = $this->formatSqlParams[$match['lit']];
             if (is_array($param)) {
                 return implode(',', $param);
             }
             return $param;
         } else {
             throw new RuntimeException("Parameter '{$match['lit']}' is undefined");
         }
     } else {
         if (isset($this->formatSqlParams[$match['val']]) || array_key_exists($match['val'], $this->formatSqlParams)) {
             return DB::val($this->formatSqlParams[$match['val']], true);
         } else {
             throw new RuntimeException("Parameter '{$match['val']}' is undefined");
         }
     }
 }
<?php

ini_set('max_execution_time', '0');
ini_set('memory_limit', '512M');
require_once '../classes/stdf.php';
require_once '../classes/memBuff.php';
require_once '../classes/smtp.php';
if (defined('HTTP_PREFIX')) {
    $pHttp = str_replace('://', '', HTTP_PREFIX);
    // Введено с учетом того планируется включение HTTPS на серверах (для писем в ЛС)
} else {
    $pHttp = 'http';
}
$pHost = str_replace("{$pHttp}://", '', $GLOBALS['host']);
$eHost = $GLOBALS['host'];
$pMessage = "\nЗдравствуйте!\n\nМы представляем вам очередные изменения и надеемся, что все они – только к лучшему. \n\nКак мы сообщали ранее, отменена платная разблокировка аккаунтов и покупка рейтинга, убраны всплывающие рекламные предложения аккаунта PRO и «Сделки Без Риска». \n\nТеперь у вас есть возможность отписаться от уведомлений, которые приходят на вашу электронную почту. Для этого достаточно перейти по ссылке из нашего письма и ввести проверочный код – отправка сообщений от Free-lance.ru будет автоматически отключена.\n\nС 14 по 21 февраля мы проводим акцию {$pHttp}:/{&laquo;Тестовый PRO за 1 FM&raquo;}/{$pHost}/promo/testpro/?utm_source=newsletter4&utm_medium=email&utm_campaign=ottepel<i>.</i> Фрилансеры, которые никогда не покупали PRO, смогут воспользоваться нашим специальным предложением и познакомиться с преимуществами профессионального аккаунта.\n\n{$pHttp}:/{Напоминаем}/{$pHost}/blogs/free-lanceru/725656/identifikatsiya-veb-koshelka-cherez-sistemu-contact.html?utm_source=newsletter4&utm_medium=email&utm_campaign=ottepel, что для резидентов РФ с сегодняшнего дня возможна идентификация в Веб-кошельке через систему Contact.\n\nБолее подробную информацию о нововведениях на сайте и планах команды на ближайшее будущее можно узнать в {$pHttp}:/{&laquo;Блогах&raquo;}/{$pHost}/blogs/free-lanceru/726198/ottepel-prodoljaetsya.html?utm_source=newsletter4&utm_medium=email&utm_campaign=ottepel<i>.</i>\n\nПриятной работы с {$pHttp}:/{Free-lance.ru}/{$pHost}/!\n";
$DB = new DB('plproxy');
$M = new DB('master');
// подготавливаем рассылку
$msgid = $DB->val("SELECT masssend(103, '{$pMessage}', '{}', '')");
$i = 0;
// Только всем незабаненным (is_banned = B'0')
//$testloginlist = " AND login IN ('land_f', 'bolvan1', 'vg_rabot1') ";
$testloginlist = '';
$sql = "SELECT uid FROM users WHERE substring(subscr from 8 for 1)::integer = 1 AND is_banned = B'0' {$testloginlist} LIMIT 3000 OFFSET ?";
while ($users = $M->col($sql, $i)) {
    $DB->query('SELECT masssend_bind(?, 103, ?a)', $msgid, $users);
    $i = $i + 3000;
}
$DB->query('SELECT masssend_commit(?, 103)', $msgid);
echo 'OK';
Example #23
0
?>
        <?php 
if ($s_project_only_verify['cnt'] == 0) {
    echo '0';
} else {
    echo round($s_project_offers_only_verify['cnt'] / $s_project_only_verify['cnt'], 2);
}
?>
    </td>
</tr>
<tr>
	<td width=200><strong>Количество переносов в вакансии:</strong></td>
	<td>
        <?php 
$sql = "SELECT count(1) FROM projects p\n                WHERE moved_vacancy::character != '' AND p.moved_vacancy >= ? AND p.moved_vacancy - '1 day'::interval < ?";
$s_project_moved_vacancy = $DB->val($sql, $fdate, $tdate);
?>
        <?php 
echo $s_project_moved_vacancy;
?>
    </td>
</tr>
<tr>
	<td width=200>Из них оплачено:</td>
	<td>
        <?php 
$sql = "SELECT count(1) as cnt FROM projects p\n                WHERE p.moved_vacancy_pro IS NULL AND p.moved_vacancy::character != '' AND p.state = 0 AND p.moved_vacancy >= ? AND p.moved_vacancy - '1 day'::interval < ?";
$s_project_moved_vacancy_payed = $DB->val($sql, $fdate, $tdate);
?>
        <?php 
echo $s_project_moved_vacancy_payed;
Example #24
0
 public function SendMess($session, $message, $type, $id)
 {
     $DB = new DB('master');
     if ($sess_ar = Session($session, $error)) {
         $message = strip_tags(mb_convert_encoding($message, 'windows-1251', 'UTF-8'));
         $message = preg_replace("|\n|Uis", '<br>', $message);
         switch ($type) {
             // ответ на личное сообщение
             case 1:
                 // get id
                 $sql = 'SELECT from_id from messages WHERE id=?';
                 $to_id = $DB->val($sql, intval($id));
                 if ($to_id) {
                     // ignor
                     $sql = 'SELECT target_id from ignor WHERE (user_id=? AND target_id=? )';
                     $res = $DB->query($sql, $sess_ar['uid'], $to_id);
                     if (@pg_num_rows($res) > 0 || $to_id == 103) {
                         return mb_convert_encoding('Пользователь запретил отправлять ему сообщения', 'UTF-8', 'windows-1251');
                     } else {
                         $user_id = $sess_ar['uid'];
                         $tar_id = $to_id;
                         $text = $message;
                         $error .= $DB->error;
                         $sql = "UPDATE messages SET from_visible=true WHERE (from_id='{$user_id}' AND to_id = '{$tar_id}');\n\t\t\t\t\t   UPDATE messages SET to_visible=true WHERE (to_id='{$user_id}' AND from_id = '{$tar_id}');\n\t\t\t     INSERT INTO messages (from_id, to_id, msg_text, attach) VALUES ('{$user_id}', '{$tar_id}', '{$text}', '')";
                         $res = $DB->query($sql);
                         $error .= $DB->error;
                     }
                 } else {
                     return mb_convert_encoding('Ошибка', 'UTF-8', 'windows-1251');
                 }
                 break;
                 // ответ на проект в блоги
             // ответ на проект в блоги
             case 2:
                 $sql = 'SELECT blogs_msgs.id,blogs_themes.thread_id from blogs_themes LEFT JOIN blogs_msgs ON blogs_msgs.thread_id=blogs_themes.thread_id AND blogs_msgs.reply_to is NULL WHERE id_gr=?';
                 $res = $DB->query($sql, intval($id));
                 list($id, $thread_id) = @pg_fetch_row($res);
                 $ip = $_SERVER['REMOTE_ADDR'];
                 $fid = $sess_ar['uid'];
                 $msg = $message;
                 if ($thread_id) {
                     $sql = "INSERT INTO blogs_msgs (fromuser_id, reply_to, from_ip, post_time, thread_id, msgtext, title, attach, small) VALUES ('{$fid}', '{$id}', '{$ip}', NOW(), '{$thread_id}', '{$msg}', '', NULL, 0);";
                     $res = $DB->query($sql);
                 } else {
                     return mb_convert_encoding('Ошибка', 'UTF-8', 'windows-1251');
                 }
                 break;
                 // ответ на проект в личку
             // ответ на проект в личку
             case 3:
                 $sql = 'SELECT user_id from projects WHERE id=?';
                 $to_id = $DB->val($sql, intval($id));
                 if ($to_id) {
                     // ignor
                     $sql = 'SELECT target_id from ignor WHERE (user_id=? AND target_id=? )';
                     $res = $DB->query($sql, $sess_ar['uid'], $to_id);
                     if (@pg_num_rows($res) > 0 || $to_id == 103) {
                         return mb_convert_encoding('Пользователь запретил отправлять ему сообщения', 'UTF-8', 'windows-1251');
                     } else {
                         $user_id = $sess_ar['uid'];
                         $tar_id = $to_id;
                         $text = $message;
                         $error .= $DB->error;
                         $sql = "UPDATE messages SET from_visible=true WHERE (from_id='{$user_id}' AND to_id = '{$tar_id}');\n\t\t\t\t\t   UPDATE messages SET to_visible=true WHERE (to_id='{$user_id}' AND from_id = '{$tar_id}');\n\t\t\t     INSERT INTO messages (from_id, to_id, msg_text, attach) VALUES ('{$user_id}', '{$tar_id}', '{$text}', '')";
                         $res = $DB->query($sql);
                         $error .= $DB->error;
                     }
                 } else {
                     return mb_convert_encoding('Ошибка', 'UTF-8', 'windows-1251');
                 }
                 break;
                 // ответ в  блоги
             // ответ в  блоги
             case 4:
                 $sql = 'SELECT user_id from projects WHERE id=?';
                 $to_id = $DB->val($sql, intval($id));
                 if ($to_id) {
                     // ignor
                     $sql = 'SELECT target_id from ignor WHERE (user_id=? AND target_id=? )';
                     $res = $DB->query($sql, $sess_ar['uid'], $to_id);
                     if (@pg_num_rows($res) > 0 || $to_id == 103) {
                         return mb_convert_encoding('Пользователь запретил отправлять ему сообщения', 'UTF-8', 'windows-1251');
                     } else {
                         $user_id = $sess_ar['uid'];
                         $tar_id = $to_id;
                         $text = $message;
                         $error .= $DB->error;
                         $sql = "UPDATE messages SET from_visible=true WHERE (from_id='{$user_id}' AND to_id = '{$tar_id}');\n\t\t\t\t\t   UPDATE messages SET to_visible=true WHERE (to_id='{$user_id}' AND from_id = '{$tar_id}');\n\t\t\t     INSERT INTO messages (from_id, to_id, msg_text, attach) VALUES ('{$user_id}', '{$tar_id}', '{$text}', '')";
                         $res = $DB->query($sql);
                         $error .= $DB->error;
                     }
                 } else {
                     return mb_convert_encoding('Ошибка', 'UTF-8', 'windows-1251');
                 }
                 break;
         }
         return '';
     } else {
         return mb_convert_encoding('Ошибка: ' . $error, 'UTF-8', 'windows-1251');
     }
 }
Example #25
0
 function GetTags(&$count, $limit, $offset = 0)
 {
     $DB = new DB('master');
     $sql = "SELECT COUNT(*) FROM (SELECT DISTINCT tag_id FROM corp_tags) as t";
     $count = $DB->val($sql);
     $sql = "SELECT t.name, COUNT(*) as count, t.id \n            FROM corp_tags c \n            INNER JOIN tags t ON c.tag_id = t.id \n            INNER JOIN corporative_blog b ON b.id = c.corp_id AND b.date_deleted IS NULL\n            GROUP BY t.name, t.id ORDER BY count DESC, name ";
     /*$sql = "SELECT tags.name, COUNT(*) as count, tags.id FROM corp_tags LEFT JOIN tags ON corp_tags.tag_id=tags.id
       GROUP BY tags.name, tags.id ORDER BY count DESC, name "; //LIMIT $limit OFFSET $offset"; */
     return $DB->rows($sql);
 }
Example #26
0
 /**
  * Проверяет, находится ли один пользователь в избранных у другого
  *
  * @param integer $user_id     id пользователя в избранном которого нужно проверить
  * @param integer $target_id   id пользователя, которого проверяем
  * @return integer  1 - если есть в избранном, 0 - если нет
  */
 function teamsIsInFavorites($user_id, $target_id)
 {
     $DB = new DB();
     return $DB->val("SELECT teams_check(?i, ?i)", $user_id, $target_id);
 }
/**
 * Vypis boxu daneho sloupce
 * @param string $column nazev sloupce
 * @param bool $return vratit misto vypisu 1/0
 * @return string|null
 */
function _templateBoxes($column = 1, $return = false)
{
    $output = "\n";
    if (!_notpublicsite or _loginindicator) {
        // nacist boxy
        if (isset(SL::$registry['template_columns'][$column])) {
            $boxes = SL::$registry['template_columns'][$column];
        } else {
            $boxes = array();
            $query = DB::query('SELECT title,content,class FROM `' . _mysql_prefix . '-boxes` WHERE visible=1 AND `column`=' . DB::val($column) . (_loginindicator ? '' : ' AND `public`=1') . ' ORDER BY ord');
            while ($item = DB::row($query)) {
                $boxes[] = $item;
            }
            DB::free($query);
        }
        // extend
        $extendOutput = _extend('buffer', 'tpl.boxes', array('boxes' => $boxes, 'column' => $column));
        if ('' !== $extendOutput) {
            return $extendOutput;
        }
        // obsah
        if (_template_boxes_parent != "") {
            $output .= "<" . _template_boxes_parent . ">\n";
        }
        foreach ($boxes as $item) {
            // kod titulku
            if ($item['title'] != "") {
                $title = "<" . _template_boxes_title . " class='box-title'>" . $item['title'] . "</" . _template_boxes_title . ">\n";
            } else {
                $title = "";
            }
            // titulek venku
            if (_template_boxes_title_inside == 0 and $title != "") {
                $output .= $title;
            }
            // starttag polozky
            if (_template_boxes_item != "") {
                $output .= "<" . _template_boxes_item . " class='box-item" . (isset($item['class']) ? ' ' . $item['class'] : '') . "'>\n";
            }
            // titulek vevnitr
            if (_template_boxes_title_inside == 1 and $title != "") {
                $output .= $title;
            }
            // obsah
            $output .= _parseHCM($item['content']);
            // endtag polozky
            if (_template_boxes_item != "") {
                $output .= "\n</" . _template_boxes_item . ">";
            }
            // spodek boxu
            if (_template_boxes_bottom == 1) {
                $output .= "<" . _template_boxes_item . " class='box-bottom'></" . _template_boxes_item . ">\n\n";
            } else {
                $output .= "\n\n";
            }
        }
        if (_template_boxes_parent != "") {
            $output .= "</" . _template_boxes_parent . ">\n";
        }
    }
    // vypis vysledku
    if ($return) {
        return $output;
    }
    echo $output;
}
Example #28
0
 /**
  * Полностью родгатавливает тело сообщения и ставит его в очередь на отправку
  * См. также @see self::send(), self::masssend(0
  * 
  * @return boolean  успех
  */
 protected function _send()
 {
     // работа с получателем, отправителем и темой
     $sender = $this->_encodeEmail($this->sender);
     $recipient = $this->recipient == '' ? '%%%recipient%%%' : $this->_encodeEmail($this->recipient);
     $subject = $this->_encode(htmlspecialchars_decode($this->subject, ENT_QUOTES));
     // обработка текста письма
     $message = $this->message;
     $message = str_replace(array("\\'", '\\"', "\\\\"), array("'", '"', "\\"), $message);
     $message = preg_replace("'[\r\n]+\\.[ \r\n]+'", ".\r\n", $message);
     // разбиваем сообщения на строки примерно в 80 символов
     // иначе почтовик может вставлять пробелы прямо внутри слов
     $len = strlen($message);
     $prev = '';
     $res = '';
     for ($i = 0, $j = 0; $i < $len; $i++, $j++) {
         if ($j > 80 && $message[$i] == ' ') {
             $res .= "\r\n";
             $j = 0;
         } else {
             if ($message[$i] == "\n") {
                 if ($prev != "\r") {
                     $res .= "\r\n";
                 } else {
                     $res .= "\n";
                 }
                 $j = 0;
             } else {
                 $res .= $message[$i];
             }
         }
         $prev = $message[$i];
     }
     $message = $res;
     // определяем есть ли вложенные изобращения и прикрепленные файлы
     $mixed = false;
     $related = false;
     for ($i = 0; $i < count($this->_attaches); $i++) {
         if ($this->_attaches[$i]['cid'] == '' || $this->contentType == 'text/plain') {
             $mixed = true;
         } else {
             $related = true;
         }
     }
     // определяем базовый тип контента
     $baseContentType = $this->contentType;
     if ($related) {
         switch ($this->contentType) {
             // если есть вложенные изображения в text/plain -> пересылаем как вложения
             case 'text/plain':
                 $baseContentType = 'multipart/mixed';
                 break;
                 // для html формата используем related (связный) формат
             // для html формата используем related (связный) формат
             case 'text/html':
                 $baseContentType = 'multipart/related';
                 break;
             default:
                 $baseContentType = $this->contentType;
                 break;
         }
     }
     if ($mixed) {
         $baseContentType = 'multipart/mixed';
     }
     // состовное или простое письмо
     if (preg_match('/^multipart\\//', $baseContentType)) {
         $multipart = true;
     } else {
         $multipart = false;
     }
     $alternate = false;
     // строим тело сообщения
     $body = "MIME-Version: 1.0\r\n";
     $body .= "To: {$recipient}\r\n";
     $body .= "From: {$sender}\r\n";
     $body .= "Subject: {$subject}\r\n";
     // Рассылается она долго, а получается прописывается дата на момент рассылки. если закоментить то postfix автоматом будет время рассылки в каждое письмо проставлять
     //        $body .= "Date: " . date("r") . "\r\n";
     if ($multipart) {
         $boundaries = array();
         $boundary = '------------' . md5(uniqid(time()));
         array_push($boundaries, $boundary);
         $body .= "Content-Type: {$baseContentType};\n boundary=\"{$boundary}\"\r\n\r\n";
         $body .= "This is a multi-part message in MIME format.\r\n";
         if ($related && $mixed) {
             $body .= "--{$boundary}\r\n";
             $boundary = '------------' . md5(uniqid(time()));
             array_push($boundaries, $boundary);
             $body .= "Content-Type: multipart/related;\n boundary=\"{$boundary}\"\r\n\r\n";
             $boundary = array_pop($boundaries);
         }
         if ($this->contentType == 'text/plain' || $alternate) {
             $body .= "--{$boundary}\r\n";
             $body .= "Content-Type: text/plain; charset={$this->charset}; format=flowed\r\n";
             $body .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
             $body .= $message;
             $body .= "\r\n\r\n";
         }
         if ($this->contentType == 'text/html' || $alternate) {
             $body .= "--{$boundary}\r\n";
             $body .= "Content-Type: text/html; charset={$this->charset}\r\n";
             $body .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
             $body .= $message;
             $body .= "\r\n\r\n";
         }
         if ($related) {
             foreach ($this->_attaches as $attach) {
                 if ($attach['cid'] == '') {
                     continue;
                 }
                 $file =& $attach['file'];
                 $cid = $attach['cid'];
                 if ($file instanceof CFile) {
                     if (!empty($file->size)) {
                         $fc = @file_get_contents(WDCPREFIX_LOCAL . "/{$file->path}{$file->name}");
                         if (!empty($fc)) {
                             $type = $file->getContentType();
                             $name = $this->_encode(htmlspecialchars_decode($file->original_name, ENT_QUOTES));
                         }
                     }
                 } else {
                     if (is_string($file) && $file != '') {
                         $fc = @file_get_contents($file);
                         if (!empty($fc)) {
                             $name = basename($file);
                             $out = exec("file -i '{$file}'");
                             $type = preg_replace('/^[^:]+:\\s*([^\\s;]+).*$/', '$1', $out);
                         }
                     }
                 }
                 if (!empty($fc)) {
                     $body .= "--{$boundary}\r\n";
                     $body .= "Content-Type: {$type};\n name=\"{$name}\"\r\n";
                     $body .= "Content-Transfer-Encoding: base64\r\n";
                     $body .= "Content-ID: <{$cid}>\r\n";
                     $body .= "Content-Disposition: inline;\n filename=\"{$name}\"\r\n\r\n";
                     $body .= chunk_split(base64_encode($fc));
                 }
             }
             if ($mixed) {
                 $body .= "--{$boundary}--\r\n\r\n";
                 $boundary = array_pop($boundaries);
             }
         }
         if ($mixed) {
             foreach ($this->_attaches as $attach) {
                 if ($attach['cid'] != '' && $this->contentType != 'text/plain') {
                     continue;
                 }
                 $file =& $attach['file'];
                 if ($file instanceof CFile) {
                     if (!empty($file->size)) {
                         $fc = @file_get_contents(WDCPREFIX_LOCAL . "/{$file->path}{$file->name}");
                         if (!empty($fc)) {
                             $type = $file->getContentType();
                             $name = $this->_encode(htmlspecialchars_decode($file->original_name, ENT_QUOTES));
                         }
                     }
                 } else {
                     if (is_string($file) && $file != '') {
                         $fc = @file_get_contents($file);
                         if (!empty($fc)) {
                             $name = basename($file);
                             $out = exec("file -i '{$file}'");
                             $type = preg_replace('/^[^:]+:\\s*([^\\s;]+).*$/', '$1', $out);
                         }
                     }
                 }
                 if (!empty($fc)) {
                     $body .= "--{$boundary}\r\n";
                     $body .= "Content-Type: {$type};\n name=\"{$name}\"\r\n";
                     $body .= "Content-Transfer-Encoding: base64\r\n";
                     $body .= "Content-Disposition: attachment;\n filename=\"{$name}\"\r\n\r\n";
                     $body .= chunk_split(base64_encode($fc));
                 }
             }
         }
         $body .= "--{$boundary}--\r\n";
     } else {
         if ($this->contentType == 'text/html') {
             $body .= "Content-Type: text/html; charset={$this->charset}\r\n";
         } else {
             $body .= "Content-Type: text/plain; charset={$this->charset}; format=flowed\r\n";
         }
         $body .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
         $body .= $message;
         $body .= "\r\n\r\n";
     }
     // постановка сообщения в очередь
     $db = new DB('spam');
     if ($this->recipient == '') {
         $spamid = $db->val("SELECT mail.send(?, ?, ?, ?, ?, ?a)", $this->sender, NULL, 'SMTP2', $this->subject, $body, array());
     } else {
         $spamid = $db->val("SELECT mail.send(?, ?, ?, ?, ?, ?a)", $this->sender, $this->recipient, 'SMTP2', $this->subject, $body, array());
     }
     unset($body);
     return $spamid;
 }
Example #29
0
 /**
  * Возвращает список жалоб о спаме, удовлетворяющих условиям выборки
  * 
  * Внутренняя функция
  * 
  * @param  int $count возвращает количество записей удовлтворяющих условиям выборки
  * @param  int $page номер текущей страницы
  * @param  string order тип сортировки
  * @param  int $direction порядок сортировки: 0 - по убыванию, не 0 - по возрастанию
  * @param  bool $unlimited опционально. установить в true если нужно получить все записи (без постраничного вывода)
  * @return array
  */
 function _getSpam(&$count, $page = 1, $order = 'general', $direction = 0, $unlimited = false)
 {
     $DB = new DB();
     // plproxy
     $aFilter = array();
     $this->aSQL = array();
     $offset = $this->items_pp * ($page - 1);
     // строим запрос
     $this->_setSpamOrderBy($order, $direction);
     if (is_array($this->filter) && count($this->filter)) {
         foreach ($this->filter as $sKey => $sVal) {
             $aFilter[] = array($sKey, $sVal);
         }
     }
     $sQuery = 'SELECT * FROM messages_spam_get_list(?a) ' . ' ORDER BY ' . implode(', ', $this->aSQL['order_by']) . (!$unlimited ? ' LIMIT ' . $this->items_pp . ' OFFSET ' . $offset : '');
     $aSpam = $DB->rows($sQuery, $aFilter);
     if ($DB->error || !$aSpam) {
         return array();
     }
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/messages.php';
     // прикрепленные файлы
     messages::getMessagesAttaches($aSpam, 'msg_id');
     $sQuery = 'SELECT messages_spam_get_count(?a)';
     $count = $DB->val($sQuery, $aFilter);
     return $aSpam;
 }
Example #30
0
$uid = get_uid();
if (!(hasPermissions('adm') && hasPermissions('adminspam'))) {
    header("Location: /404.php");
    exit;
}
if ($_GET['cache'] == 'clear') {
    require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/memBuff.php";
    $memBuff = new memBuff();
    $memBuff->touchTag("msgsCnt");
}
$FROM = 'admin';
// логин, от кого отправл¤ть рассылку
$DB = new DB('master');
// отправл¤ем от админа
$sql = "SELECT uid FROM users WHERE login = ?";
$row = $DB->val($sql, $FROM);
if ($row) {
    $send_uid = $row;
} else {
    $send_uid = $uid;
    $FROM = $_SESSION['login'];
}
$messages = new messages($send_uid);
$content = "../content.php";
$css_file = array('moderation.css', 'nav.css');
$js_file = array('highlight.min.js', 'highlight.init.js', 'mAttach.js');
$js_file_utf8[] = '/scripts/ckedit/ckeditor.js';
$inner_page = "inner_index.php";
$action = trim($_GET['action']);
if (!$action) {
    $action = trim($_POST['action']);