// WR-forum v 2.2 // 08.01.2019 г. // WR-Script.ru
// Модуль персональных сообщений (сообщений хранящихся внутри форума)
include "data/config.php";
$maxpmmsg="10000"; // Максимальное количество символов в персональном сообщении
$datapmdir="data-pm"; // Папка с данными перональных сообщений
$date=date("d.mmmmm.y"); $time=date("H:i");
$shapka='
Отправка / Просмотр ПС: '.$forum_name.'
';
$name=""; $flag=FALSE;// Очищаем переменные
if (isset($_COOKIE['wrfcookies'])) { // ищем В КУКАХ wrfcookies чтобы вывести ИМЯ
$wrfc=$_COOKIE['wrfcookies']; $wrfc=htmlspecialchars($wrfc,ENT_COMPAT,"windows-1251"); $wrfc=stripslashes($wrfc);
$wrfc=explode("|", $wrfc); $wrfname=$wrfc[0]; $wrfpass=$wrfc[1]; $name=urldecode($wrfname);$name=strtolower($name);
// ФАЗА 2: Сверяем логин и пароль в базе с тем, что у нас хранится в КУКАХ
$lines=file("$datadir/user.php"); $maxi=count($lines); $i="1";
do {$dt=explode("|",$lines[$i]); $i++;
$dt[2]=strtolower($dt[2]); $pass=$wrfpass;
if ($dt[2]===$name and $dt[3]===$pass) {$flag=TRUE; $i=$maxi;} // ЕСЛИ нашли юзера, значит последний раз цикл работает
} while($i < $maxi);
} else echo"$shapka
Система внутренних сообщений работает только для ЗАРЕГИСТРИРОВАННЫХ ПОЛЬЗОВАТЕЛЕЙ! "; // ЕСЛИ есть КУКИ
if ($flag===TRUE) { // ПОЛЬЗОВАТЕЛЬ ПРОШЁЛ КОНТРОЛЬ ДОСТОВЕРНОСТИ УЧЁТНОЙ ЗАПИСИ
function replacer ($text) { // ФУНКЦИЯ очистки кода
$text=str_replace(" ",' ',$text);
$text=str_replace(">",'>',$text);
$text=str_replace("<",'<',$text);
$text=str_replace("\"",'"',$text);
$text=preg_replace("/\n\n/",'
',$text);
$text=preg_replace("/\n/",' ',$text);
$text=preg_replace("/\\\$/",'$',$text);
$text=preg_replace("/\r/",'',$text);
$text=preg_replace("/\\\/",'\',$text);
// если magic_quotes включена - чистим везде СЛЭШи в этих случаях: одиночные (') и двойные кавычки ("), обратный слеш (\)
if (get_magic_quotes_gpc()) { $text=str_replace("\"",'"',$text); $text=str_replace("\'",'\'',$text); $text=str_replace("\\",'\',$text); }
$text=str_replace("\r\n"," ",$text);
$text=str_replace("\n\n",'
',$text);
$text=str_replace("\n",' ',$text);
$text=str_replace("\t",'',$text);
$text=str_replace("\r",'',$text);
$text=str_replace(' ',' ',$text);
return $text; }
if (isset($_GET['id'])) { // Если есть ИМЯ ПОЛЬЗОВАТЕЛЯ
$id=replacer($_GET['id']); $id=urldecode($id);
$id=strtolower($id); // переводим все ники в нижний регистр
if (is_file("$datapmdir/$id.dat")) { $linesn=file("$datapmdir/$id.dat"); $in=count($linesn); if ($in > 500) exit("$back Максимальное количество сообщение достигнуто/B>! Удалите свои сообщения или попросите пользователя, которому Вы отправляете сообщение почистить свой ящик!"); }
if(isset($_GET['deletemsg'])) { // Блок УДАЛЕНИЯ выбранного СООБЩЕНИЯ
$num=replacer($_GET['deletemsg']); if ($num=="" or strlen($num)<5) exit("$shapka Ошибка, выбирите сообщение для удаления, либо ошибка скрипта!");
if (is_file("$datapmdir/$id.dat")) {
$file=file("$datapmdir/$id.dat");
$fp=fopen("$datapmdir/$id.dat","w");
flock ($fp,LOCK_EX);
for ($i=0;$i< sizeof($file);$i++) {$dt=explode("|",$file[$i]); if ($dt[1]==$num) unset($file[$i]);}
fputs($fp, implode("",$file));
flock ($fp,LOCK_UN);
fclose($fp); } // if is_file
Header("Location: pm.php?readpm&id=$id"); exit; }
if (isset($_GET['alldelete'])) { // ОЧИСТКА ЯЩИКА
if ($id==$name & is_file("$datapmdir/$id.dat")) { unlink ("$datapmdir/$id.dat"); print"$shapka
Личные сообщения удалены! Вы можете перейти на главную страницу форума по этой ссылке
";}
else exit("$shapka $back У ВАС отсутствуют сообщения! Ваша папка ПУСТА."); }
if (isset($_GET['sendpm'])) { // ОТПРАВКА СООБЩЕНИЯ
print"$shapka
Сообщение отправлено!
Вы можете закрыть это окно!
Либо перейти в папку с Вашими входящими письмами по этой ссылке: pm.php?readpm&id=$name.
Либо перейти на главную страницу форума по этой ссылке
"; exit; }
if (isset($_GET['readpm'])) { // ПРОСМОТР СООБЩЕНИЙ
touch("$datapmdir/$id.dat"); // если нет файла с ПС, то создаём файл юзеру
if (is_file("$datapmdir/$id.dat") & $id===strtolower($name)) {
$rlines=file("$datapmdir/$id.dat"); $ri=count($rlines); $key="0";
if ($ri>0) { // Если файл не пуст
$dir="Входящие"; $type=0;
print"$shapka";
echo'
Вы можете закрыть это окно! Либо перейти на главную страницу форума по ссылке: по этой ссылке.
";
echo'';} // if ($ri>0)
} } // isset($readpm)
if(isset($_GET['savepm'])) { // СОХРАНЕНИЕ сообщения
$msg=replacer($_POST['msg']); $msg=str_replace("|","I",$msg);
$tema=replacer($_POST['tema']); $tema=str_replace("|","I",$tema);
if ($msg=="" || strlen($msg)>$maxpmmsg) exit("$shapka $back Ваше сообщение пустое или превышает $maxpmmsg символов.
");
if (strlen($tema)>$maxzag) exit("$shapka $back Тема Вашего сообщения превышает $maxzag символов.
");
// Считываем всех пользователей, ищем того, которому адресовано сообщение
$i="0"; $from_rn=""; $tektime=time(); $to_rn=FALSE; $rn=mt_rand(10000,99999); // Колдуем случайный ключ
$lines=file("$datadir/userstat.dat"); $maxi=count($lines);
do {$dt=explode("|",$lines[$i]); $i++; $dt[2]=strtolower($dt[2]);
if ($dt[2]===$name) $from_rn="$dt[0]"; // Ищем RN-ключ юзера, отправившего сообщение
// Этот ключ НЕЛЬЗЯ передавать через форму! ОН нужен для безопасности скрипта!
if ($dt[2]===$id) $to_rn=$dt[0]; // ЕСЛИ нашли юзера, которому адресовано сообщение, то выставляем ФЛАГ
} while($i < $maxi);
if ($to_rn!=FALSE) { // Новая структура файла: rn|time|status|from_rn|to_rn|from_name|to_name|tema|msg|rezerved|
$text="$rn|$tektime|0|$from_rn|$to_rn|$name|$id|$tema|$msg||\r\n";
$fp=fopen("$datapmdir/$id.dat","a+");
flock ($fp,LOCK_EX);
fputs($fp,$text);
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);}
exit("");
}
if ($name!=$id) { // Если нет никакого вывода и ЧТОБЫ самому себе письма не отправлять!
print"$shapka