function AddDialogueMessage($form)
{
    global $session;
    session_start();
    $objResponse = new xajaxResponse();
    $offerIsBlocked = projects_offers::isOfferBlocked(false, get_uid(), $form['prj_id']);
    if ($offerIsBlocked) {
        $objResponse->alert('Ваше предложение заблокировано, вы не можете отправить это сообщение');
        return $objResponse;
    }
    $prj = new projects();
    $project = $prj->GetPrjCust(intval($form['prj_id']));
    $is_pro = is_pro();
    if ($project['pro_only'] == 't' && !$is_pro && !is_emp() && !hasPermissions('projects')) {
        if ($project['kind'] == 7) {
            if (contest::IsContestOfferExists($project['id'], get_uid(false))) {
                $is_pro = true;
            }
        } else {
            if (projects_offers::IsPrjOfferExists($project['id'], get_uid(false))) {
                $is_pro = true;
            }
        }
    }
    if ($project['pro_only'] == 't' && !$is_pro && $project['user_id'] != get_uid() && !hasPermissions('projects')) {
        $objResponse->alert('Данная функция доступна только пользователям с аккаунтом PRO.');
        $objResponse->script("\$('savebtn').set('disabled', false);");
        return $objResponse;
    } elseif ($project['verify_only'] == 't' && !($_SESSION['is_verify'] == 't') && $project['user_id'] != get_uid() && !hasPermissions('projects')) {
        $objResponse->alert('Данная функция доступна только верифицированным пользователям.');
        $objResponse->script("\$('savebtn').set('disabled', false);");
        return $objResponse;
    }
    if (!trim($form['po_text'])) {
        $objResponse->alert('Невозможно отправить пустое сообщение.');
        $objResponse->script("\n            \$('savebtn').set('disabled', false);\n        ");
        return $objResponse;
    }
    if (!is_emp() && $form['from'] == 'emp') {
        $objResponse->script("\n            \$('savebtn').set('disabled', false);\n        ");
        $objResponse->alert('Невозможно отправить сообщение. Вы вышли из аккаунта работодателя.');
        return $objResponse;
    } elseif (is_emp() && $form['from'] == 'frl') {
        $objResponse->script("\n            \$('savebtn').set('disabled', false);\n        ");
        $objResponse->alert('Невозможно отправить сообщение. Вы вышли из аккаунта фрилансера.');
        return $objResponse;
    }
    //Не позволяем производить действия с заблокированным проектом
    if (projects::CheckBlocked(intval($form['prj_id']))) {
        $objResponse->script("document.location.href='/projects/index.php?pid=" . intval($form['prj_id']) . "'");
    } elseif (intval($_SESSION['uid'])) {
        $po_id = intval($form['po_id']);
        //$po_text = substr(change_q_x($form['po_text'], false), 0, 1000);
        $po_text = antispam(trim($form['po_text']));
        $po_text = preg_replace("/(\r\n|\r|\n){3,100}/i", "\r\n\r\n", $po_text);
        $po_commentid = intval($form['po_commentid']);
        $user_id = get_uid(false);
        $user = new users();
        $user_name = $user->GetName($user_id, $error);
        $pod = new projects_offers_dialogue();
        $project_dialogue = $pod->GetDialogueForOffer($po_id);
        $project = $pod->GetProjectFromDialogue($po_id);
        if (count($project_dialogue)) {
            for ($i = count($project_dialogue) - 1; $i >= 0; --$i) {
                if ($project_dialogue[$i]['user_id'] != $user_id) {
                    $to_user_name = $project_dialogue[$i]['login'];
                    break;
                }
            }
        }
        if (is_emp()) {
            $emp_read = true;
            $frl_read = false;
        } else {
            $emp_read = false;
            $frl_read = true;
        }
        if (!$po_commentid) {
            $error = $pod->AddDialogueMessage($po_id, $user_id, $po_text, $frl_read, $emp_read);
            $last_comment = $pod->GetLastDialogueMessage($user_id, $po_id);
            $objResponse->script("last_commentid={$last_comment};");
            $objResponse->script("edit_block[{$po_id}] = '&nbsp;&nbsp;<span><a href=\"javascript:void(null)\" onClick=\"answer({$po_id}, {$last_comment});markRead(\\'{$po_id}\\');\" class=\"internal\">Редактировать</a></span>';");
            //		$objResponse->script("alert(last_commentid);");
            //		$objResponse->script("alert(edit_block);");
        } else {
            $error = $pod->SaveDialogueMessage($user_id, $po_text, $po_commentid, $po_id, false);
            if ($error == 1) {
                $objResponse->alert('Вы не можете редактировать комментарий, так как на него уже ответили.');
                return $objResponse;
            }
        }
        $po_text = rtrim(ltrim($po_text, "\r\n"));
        $po_text = substr(change_q_x($po_text, false, true, '', false, false), 0, 1000);
        $po_text = stripslashes($po_text);
        if ($error == '') {
            $sPostText = $po_text;
            if ($project['kind'] != 4) {
                $sId = $po_commentid ? $po_commentid : $last_comment;
                $aComment = $pod->getDialogueMessageById($sId);
                if ($aComment['moderator_status'] === '0') {
                    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stop_words.php';
                    $stop_words = new stop_words(hasPermissions('projects'));
                    $sPostText = $stop_words->replace($sPostText);
                }
            }
            if (!$po_commentid) {
                $objResponse->append('po_dialogue_talk_' . $po_id, 'innerHTML', '<div style="margin-bottom:8px;font-size:100%;"><span class="' . (is_emp() ? 'emp' : 'frl') . 'name11"><a href="/users/' . get_login($user_id) . '/" class="' . (is_emp() ? 'emp' : 'frl') . 'name11" title="' . $user_name['uname'] . ' ' . $user_name['usurname'] . '">' . $user_name['uname'] . ' ' . $user_name['usurname'] . '</a> [<a href="/users/' . $user_name['login'] . '/" class="' . (is_emp() ? 'emp' : 'frl') . 'name11" title="' . $user_name['login'] . '">' . $user_name['login'] . '</a>]</span> <span id="po_date_' . $last_comment . '">[' . strftime('%d.%m.%Y | %H:%M', time()) . ']</span><br /><div id="po_comment_' . $last_comment . '">' . reformat($sPostText, 50, 0, 0, 1) . '</div><div id="po_comment_original_' . $last_comment . '" style="display:none;">' . str_replace(' ', '&nbsp;', reformat($po_text, 1000, 0, 1)) . '</div></div>');
                //			$objResponse->call('resetfld', $po_id);
                $objResponse->script('dialogue_count[' . $po_id . '] = ' . (count($project_dialogue) + 1));
            } else {
                $objResponse->assign('po_comment_' . $po_commentid, 'innerHTML', reformat($sPostText, 50, 0, 0, 1));
                $objResponse->assign('po_comment_original_' . $po_commentid, 'innerHTML', str_replace(' ', '&nbsp;', reformat($po_text, 1000, 0, 1)));
                $objResponse->assign('po_date_' . $po_commentid, 'innerHTML', dateFormat('[d.m.Y | H:i]', date('Y-m-d H:i:s')));
            }
            $objResponse->call('answer', $po_id);
            if ($to_user_name && $project['id'] && $project['name'] && !$po_commentid) {
                /*require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/smail.php");
                		$smail = new smail();
                		if ($project['user_id'] == $user_id) {
                               $error = $smail->NewPrjMessageOnOfferFrl($user_name['login'], $project['id'], $project['name'], $to_user_name, $po_text);
                		} else {
                               $error = $smail->NewPrjMessageOnOfferEmp($user_name['login'], $project['id'], $project['name'], $to_user_name, $po_text);
                		}*/
            }
        } else {
            $objResponse->alert('Ошибка сохранения.');
        }
    } else {
        $objResponse->alert('Ошибка сохранения. Авторизируйтесь на сайте.');
    }
    return $objResponse;
}
Beispiel #2
0
 /**
  * Редактирование личного сообщения.
  * 
  * @param int    $from_id            UID пользователя-отправителя 
  * @param int    $modified_id        UID пользователя изменявшего сообщение
  * @param int    $id                 ID сообщения
  * @param string $msg_text           текст сообщения
  * @param array  $attachedfiles_file приаттаченные файлы
  * @param string $modified_reason    причина редактирования
  *
  * @return bool true - успех, false - провал
  */
 public function Update($from_id = 0, $modified_id = 0, $id = 0, $msg_text = '', $attachedfiles_file = array(), $modified_reason = '')
 {
     $bRet = false;
     if ($from_id && $id && $msg_text) {
         require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
         $users = new users();
         $login = $users->GetName($from_id, $err);
         $files = array();
         if ($login) {
             if ($attachedfiles_file) {
                 foreach ($attachedfiles_file as $file) {
                     switch ($file['status']) {
                         case 1:
                             // добавляем файл
                             $cFile = new CFile($file['id']);
                             $cFile->table = 'file';
                             $ext = $cFile->getext();
                             $tmp_dir = 'users/' . substr($login['login'], 0, 2) . '/' . $login['login'] . '/contacts/';
                             $tmp_name = $cFile->secure_tmpname($tmp_dir, '.' . $ext);
                             $tmp_name = substr_replace($tmp_name, '', 0, strlen($tmp_dir));
                             $cFile->_remoteCopy($tmp_dir . $tmp_name, true);
                             $files[] = $cFile->id;
                             break;
                         case 3:
                             // ранее добавленный
                             $files[] = $file['id'];
                             break;
                         case 4:
                             // удаляем файл
                             $cFile = new CFile();
                             $cFile->Delete($file['id']);
                             break;
                     }
                 }
             }
             $DB = new DB();
             $DB->val('SELECT message_update(?i, ?i, ?, ?a, ?)', $id, $modified_id, $msg_text, $files, $modified_reason);
             $bRet = empty($DB->error);
         }
     }
     return $bRet;
 }
Beispiel #3
0
 /**
  * Добавляет или редактирует данные размещения пользователя
  * @param   integer    $ufp_id       id места размещения
  * @param   string     $title        заголовок
  * @param   string     $descr        краткое описание
  * @param   string     $full_descr   дополнительное описание (подробнее)
  * @param   array      $sels         массив с данными. В случае если значение масива целое, то берутся значения из портфолио.
  *                                   в случае строкового значения с именами файлов загруженных работ.
  * @return  boolean                  успех операции
  */
 function UpdateFullDescription($ufp_id, $title, $descr, $full_descr, $sels)
 {
     global $DB;
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/users.php";
     $sql = "SELECT ufp_description_id, user_id FROM users_first_page WHERE id = ?i";
     if (!($res = $DB->rows($sql, $ufp_id))) {
         return 0;
     }
     if (!$sels) {
         $sels = array();
     }
     $user_id = $res[0]['user_id'];
     $users = new users();
     $user = $users->GetName($user_id, $e);
     $login = $user['login'];
     $trans = 'COMMIT';
     $sModer = '';
     if (!$title) {
         $title = null;
     }
     if (!$descr) {
         $descr = null;
     }
     if (!$full_descr) {
         $full_descr = null;
     }
     if ($user_id == $_SESSION['uid'] && !hasPermissions('users') && ($title || $descr || $full_descr || $sels)) {
         // автор, не админ, не про - отправить на модерирование
         $sModer = ' , moderator_status = 0 ';
     }
     if ($d_id = $res[0]['ufp_description_id']) {
         $sql = "UPDATE ufp_description\n          SET title = ? ,\n              descr = ? ,\n              full_descr = ?\n              {$sModer}\n        WHERE id = ?i";
     }
     $sql2 = "DELETE FROM ufp_portfolio WHERE ufp_description_id = ?i RETURNING portfolio_id, jumptowork_count, pict";
     if ($d_id && $DB->query($sql, $title, $descr, $full_descr, $d_id)) {
         $res = $DB->rows($sql2, $d_id);
         if (!$sels) {
             $sels = array();
         }
         $DB->start();
         // !!! удаление файлов с сервера надо сделать.
         //        if() {
         $dels = array();
         $olds = array();
         if ($res) {
             foreach ($res as $k => $v) {
                 if ($v['portfolio_id']) {
                     $olds[$v['portfolio_id']] = $v;
                 } else {
                     $dels[$v['pict']] = $v['pict'];
                 }
             }
         }
         $i = 0;
         $sql = "INSERT INTO ufp_portfolio (portfolio_id, pict, ufp_description_id, n_order, jumptowork_count) VALUES ";
         foreach ($sels as $key) {
             // !!! is_numeric надо заменить на нормальную проверку целого числа.
             $sql .= ($i++ ? ',' : '') . "(" . (is_numeric($key) ? "{$key}, NULL" : "NULL, '{$key}'") . ", {$d_id}, {$i}, " . (is_numeric($key) && $olds[$key] ? (int) $olds[$key]['jumptowork_count'] : 0) . ")";
             unset($dels[$key]);
         }
         if ($i && !$DB->squery($sql)) {
             $trans = "ROLLBACK";
         }
         if ($trans != "ROLLBACK") {
             $dir = "users/" . substr($login, 0, 2) . "/" . $login . "/upload/";
             $cfile = new CFile();
             foreach ($dels as $f) {
                 if ($f) {
                     $cfile->Delete(0, $dir, $f);
                     $cfile->Delete(0, $dir, "sm_" . $f);
                 }
             }
         }
         if ($trans == "ROLLBACK") {
             $DB->rollback();
         } else {
             $DB->commit();
         }
     } else {
         $sql = "INSERT INTO ufp_description (title, descr, full_descr) VALUES(?, ?, ?) RETURNING (id)";
         $d_id = $DB->val($sql, $title, $descr, $full_descr);
         if ($d_id) {
             $sql = "UPDATE users_first_page ufp\n            SET ufp_description_id = ?i\n            FROM users_first_page ux\n          WHERE ufp.from_date >= ux.from_date\n            AND ufp.user_id = ux.user_id\n            AND ufp.profession = ux.profession\n            AND ux.id = ?i";
             if ($DB->query($sql, $d_id, $ufp_id)) {
                 if ($sels) {
                     $i = 0;
                     $sql = "INSERT INTO ufp_portfolio (portfolio_id, pict, ufp_description_id, n_order) VALUES ";
                     foreach ($sels as $key) {
                         // !!! is_numeric надо заменить на нормальную проверку целого числа.
                         $sql .= ($i++ ? ',' : '') . "(" . (is_numeric($key) ? "{$key}, NULL" : "NULL, '{$key}'") . ", {$d_id}, {$i})";
                     }
                     if ($i) {
                         $DB->squery($sql);
                     }
                 }
             } else {
                 $trans = "ROLLBACK";
             }
         } else {
             $trans = "ROLLBACK";
         }
     }
     if ($d_id && $trans != "ROLLBACK" && (!hasPermissions('users') || !$res[0]['ufp_description_id']) && ($title || $descr || $full_descr || $sels)) {
         require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/user_content.php';
         require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stop_words.php';
         $stop_words = new stop_words(true);
         $nStopWordsCnt = $stop_words->calculate($title, $descr, $full_descr);
         $DB->insert('moderation', array('rec_id' => $ufp_id, 'rec_type' => user_content::MODER_FIRST_PAGE, 'stop_words_cnt' => $nStopWordsCnt));
     } elseif ($d_id && $trans != "ROLLBACK" && (!hasPermissions('users') || !$res[0]['ufp_description_id']) && !$title && !$descr && !$full_descr && !$sels) {
         require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/user_content.php';
         $aId = $DB->col('SELECT id FROM users_first_page WHERE ufp_description_id = ?i', $d_id);
         $DB->query('DELETE FROM moderation WHERE rec_id IN (?l) AND rec_type = ?i', $aId, user_content::MODER_FIRST_PAGE);
     }
     $memBuff = new memBuff();
     $memBuff->flushGroup("firstpg");
     $_SESSION['clr_ufp'][$ufp_id] = true;
     return 1;
 }
Beispiel #4
0
     $close_comments = 't';
 } else {
     $close_comments = 'f';
 }
 if ($_POST['is_private']) {
     $is_private = 't';
 } else {
     $is_private = 'f';
 }
 $msg_name = substr_entity(change_q_x(antispam($_POST['name']), true, false), 0, 96, true);
 $attach = $_FILES['attach'];
 $attach_delete = is_array($_POST['delattach']) ? $_POST['delattach'] : array();
 $attach_have = $_POST['have_attach'];
 $olduser = intval($_POST['olduser']);
 $us = new users();
 $logins = $us->GetName($olduser, $error);
 $olduserlogin = $logins['login'];
 if (!$olduserlogin) {
     break;
 }
 if (!$t) {
     $base = 0;
 } else {
     $base = 1;
 }
 $attach = $_FILES['attach'];
 $files = array();
 if (is_array($attach) && !empty($attach['name'])) {
     $nTotalSize = 0;
     $aAttach = blogs::GetAttach($thread, $attach_delete);
     if (is_array($aAttach) && count($aAttach)) {
Beispiel #5
0
 <?php 
               if ($theme['modified_id'] == $theme['fromuser_id']) {
                   ?>
 [внесены изменения:
 <?php 
                   echo date("d.m.Y | H:i]", strtotimeEx($theme['modified']));
               } else {
                   ?>
 [Отредактировано модератором
 <?php 
                   if (!$mod) {
                       ?>
 (
 <?php 
                       $user = new users();
                       $mod_user = $user->GetName($theme['modified_id'], $err);
                       print $mod_user['login'] . ' : ' . $mod_user['usurname'] . ' ' . $mod_user['uname'];
                       ?>
 )
 <?php 
                   }
                   ?>
 <?php 
                   echo date("d.m.Y | H:i]", strtotimeEx($theme['modified']));
                   ?>
 <?php 
               }
           }
           if ($theme['deleted'] && (hasPermissions('blogs') || $theme['fromuser_id'] == get_uid(false))) {
               ?>
 &nbsp; &nbsp;
Beispiel #6
0
                            <h4>Предупреждений: <span id="warncount-<?php 
        echo $user->uid;
        ?>
"><?php 
        echo $user->warn ? $user->warn : 0;
        ?>
</span> <?php 
        echo $user->is_banned ? "<em>(Забанен)</em>" : "";
        ?>
</h4>

                            <?php 
        if ($user->is_banned || $user->ban_where) {
            $ban = $user->getBan($user->uid, $user->ban_where);
            $admin_user = new users();
            $admin_user_info = $admin_user->GetName($ban['admin'], $ee);
        }
        ?>
                            <div id="banreasonblock-<?php 
        echo $user->uid;
        ?>
" style="display: <?php 
        echo $user->is_banned || $user->ban_where ? 'block' : 'none';
        ?>
;">
                                <table><tbody>
                                    <tr>
                                        <th colspan="3"><strong id="banreasonblock-text-<?php 
        echo $user->uid;
        ?>
">Блокировка <?php 
Beispiel #7
0
 /**
  * Модератор отвергает рассылку, деньги возращаются юзеру.
  *
  * @param integer  $id             ИД Рассылки
  * @param string   $denied_reason  Причина отказа
  * @param string   $error          Возвращает сообщение об ошибке
  * @return integer 1 - все сработало как надо, 0 - ошибка 
  */
 public function Deny_new($id, $reason, $row)
 {
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/messages.php";
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/account.php";
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/users.php";
     $this->error = '';
     global $DB;
     /*$sql = 'SELECT * FROM mass_sending WHERE id = ? AND is_accepted IS NULL';
     		
     		if (!($row = $DB->row($sql, $id))) {
     			$this->error = 'Рассылка выбрана неправильно';
     			return FALSE;
     		}*/
     $account = new account();
     $account->GetInfo($row['user_id']);
     if (!$account->id) {
         $this->error = 'Ошибка. Не опеределен счет пользователя.';
         return FALSE;
     }
     $users = new users();
     $user = $users->GetName($row['user_id'], $e);
     $login = $user['login'];
     $users->GetUser($login);
     $admin_id = users::GetUid($err, 'admin');
     $text = "Здравствуйте!\n\nАдминистрацией нашего ресурса было принято решение отказать Вам в рассылке по каталогу по причине:\n\n\"\n" . stripslashes($reason) . "\n\"\n\nЭто сообщение было выслано автоматически и ответ на него не будет рассматриваться.\n\nНадеемся на понимание, Команда Free-lance.ru. \n\nИсходный текст Вашей рассылки:\n\n---\n" . html_entity_decode($row['msgtext'], ENT_QUOTES) . "\n--- ";
     // уведомляем автора о разрешении рассылки
     $smail = new smail();
     $smail->subject = "Ваша заявка на рассылку не прошла модерацию";
     $smail->recipient = $users->uname . " " . $users->usurname . " [" . $users->login . "] <" . $users->email . ">";
     $reason = $smail->ToHtml($reason);
     $body = "Ваша заявка на рассылку была отклонена модераторами сайта Free-lance.ru.<br/> \n              Причина:<br/>\n              ---<br/>\n              {$reason}<br/>\n              ---<br/>\n          ";
     $smail->message = $smail->GetHtml($users->uname, $body, array('header' => 'default', 'footer' => 'simple'));
     $smail->send('text/html');
     messages::Add($admin_id, $login, $text, '', 1);
     if (!$DB->query("UPDATE mass_sending SET denied_reason = ?, is_accepted=false, decided_time=now() WHERE id=?", $reason, $id)) {
         $this->error = 'Произошла ошибка при установлении статуса "Отказано".';
         return FALSE;
     }
     return TRUE;
 }
Beispiel #8
0
 $po_id = intval($_GET['id']);
 $prj_id = intval($_GET['pid']);
 $user_id = intval($_GET['uid']);
 $prj = new projects();
 $project = $prj->GetPrj($emp_id, $prj_id, 1);
 if (!$project) {
     $content = '404.php';
     include '../template2.php';
     exit;
 }
 if (isset($_GET['refuse'])) {
     $user = new users();
     $prj_offer = new projects_offers();
     $po_reason = intval($_GET['refuse']);
     $emp_id = get_uid(false);
     $emp_name = $user->GetName($emp_id, $error);
     //Не позволяем производить действия с заблокированным проектом
     if (projects::CheckBlocked(intval($prj_id))) {
         $objResponse->script("document.location.href='/projects/index.php?pid=" . intval($prj_id) . "'");
     } else {
         $error = '';
         $project = $prj->GetPrjCust($prj_id);
         if ($project['exec_id'] == $user_id) {
             $error = $prj->ClearExecutor($prj_id, $emp_id);
         }
         if (!$error) {
             $prj_offer->SetRefused($po_id, $prj_id, $user_id, $po_reason, true);
             header('Location: /projects/index.php?pid=' . intval($prj_id));
             exit;
         }
     }
echo $_GET["closed"] ? "<b>Закрытые</b> (" . $conted_prj["closed"] . ")" : '<a class="blue" href="#" onclick="javascript: document.frm.openclose.value=2; document.frm.submit();"><b>Закрытые</b></a> (' . $conted_prj["closed"] . ')';
?>
</td>
<td align="right" style="padding:15px 10px 0px 0px;"><a href="/public/"><IMG alt="Публиковать ваш проект" align="absmiddle" src="/images/post_button.gif" width="178" height="28" border="0"></a></td>
</tr>
</table>
<br>
<?php 
$i = 0;
if ($prjs) {
    //   print "<pre>";
    //  print_r($prjs);
    // print "</pre>";
    setlocale(LC_ALL, 'ru_RU.CP1251');
    $usr = new users();
    $name = $usr->GetName($_SESSION["uid"], $err);
    $dir = $name["login"];
    ?>
<div style="height:1px; background:#d7d7d7; width:920px; margin:5px 0;"></div><?php 
    $pj = 0;
    $pn = sizeof($prjs);
    foreach ($prjs as $ikey => $prj) {
        $spec = projects::getPrimarySpec($prj['id']);
        $prj['category'] = $spec['category_id'];
        if (is_new_prj($prj['post_date'])) {
            $blink = !$is_emp && $prj['pro_only'] == 't' && !$is_pro && $uid != $prj['user_id'] && !hasPermissions('projects') ? "/proonly.php" : "/blogs/view.php?tr=" . $prj['thread_id'];
        } else {
            $blink = !$is_emp && $prj['pro_only'] == 't' && !$is_pro && $uid != $prj['user_id'] && !hasPermissions('projects') ? "/proonly.php" : "/projects/?pid=" . $prj['id'] . '&f=1';
        }
        $plink = "/users/" . $prj['login'] . "/project/?prjid=" . $prj['id'];
        if ($prj['payed'] && $prj["kind"] != 2) {