// News v1.0 final
// Параметры конструктора:
// 1) имя и путь к интерфейсному модулю
// 2) имя и путь файла-счетчика новостей
// 3) имя и путь файла новостей
// 4) путь к папке для аплоада ( 'uploads/' )
// Пользовательские методы:
// 1) function add($topic, $pic, $message, $pictmp)
// добавляет новость: $pic - $_FILES['name']
// $pictmp - $_FILES['tmp_name']
// 2) function form()
// выводит форму для добавления новости, обращается к
// 3) function show($page)
// выводит $page-ю десятку новостей
// 4) function del($message)
// удаляет $message-ю новость
// 5) function edit($message)
// отображает форму для редактирования $message-ной новости
// 6) function save($message, $recno, $topic)
// перезаписывает тему у саму новость для новости $recno
// Требования к основному файлу:
// 1) ?action=add - add($_POST['topic'], $_FILES['picture']['name'], $_POST['message'], $_FILES['picture']['tmp_name'])
// 2) ?action=show - $news_class_name->show($_GET['page'])
// с заведомо корректным параметром
// 3) ?action=del - $news_class_name->del($_GET['message'])
// 4) ?action=edit - $news_class_name->edit($_GET['message'])
// 5) ?action=save - $news_class_name->save($_POST['message'], $_POST['recno'], $_POST['topic'])
// Developed by Nexus
// e-mail: nex@ukr.net
// Дата написания скрипта - 14.05.2005
class news
{
var $face_path; //путь к интерфейсному модулю
var $counter_path; //путь к фойлу-счетчику сообщений
var $dat_path; //путь к базе сообщений
var $upload_dir; //путь к папке для аплоада
// Функция читает из файла новости и выводит 10 из них,
// расположенных на переданной странице
// параметр - отображаемая страница, на странице выводится по 10 сообщений
function outgrec($page)
{
echo " ";
//Читаем из файла количество новостей, если файл пуст - присваиваем переменной 0
$f=fopen($this->counter_path, "r");
$buf = fgets($f, 5);
$NumOfRecs = $buf;
fclose($f);
$FirstRec=$page*10-9;
if ($FirstRec>$NumOfRecs)
{
$FirstRec=1;
$page=1;
}
//Если файл новостей пуст
if ($NumOfRecs==0)
{
echo "
Новостей нет
";
exit;
}
//Читаем записи
$f=fopen($this->dat_path, "r");
$counter=0;
while (!feof ($f))
{
if (AUTH()==2) $admtools="
";
else $admtools='';
$str = fgets($f, 10550);
if ($str=='') break;
$new = explode('|', $str);
$topic=$new[0];
$pic=$new[1];
$date=$new[2];
$message=$new[3];
$owner=$new[4];
//если данная запись на требуемой странице - выводим ее
if ($counter+1>=$FirstRec)
{
//меняем смайлики на картинки
$message = str_replace(":)","",$message);
$message = str_replace(";)","",$message);
$message = str_replace("=/","",$message);
$message = str_replace(":(","",$message);
$message = str_replace(":!:","",$message);
$message = str_replace(":?:","",$message);
if ($admtools!='') $topic=$admtools.$topic;
// генерация HTML
$content='
';
if ($pic!="") $content="
";
$content=$content.$message."
Добавил: ".$owner." ".$date."
";
echo widewindow("
".$topic."
",$content,600); echo " ";
}
$counter++;
if (($counter-$FirstRec)>=9) break;
}
fclose($f);
//Вывод ссылок на предыдущую и следующую страницы
if ($page>1) $back=$page-1;
else $back=0;
if (($page+1)*10-9<=$NumOfRecs) $forward=$page+1;
else $forward=0;
echo "
";
if ($back>0) echo "Назад";
echo " | ";
if ($forward>0) echo "Вперед";
echo "
";
}
// Функция отображает на экране форму для длобавления новости
function showform()
{
//Вывод формы для добавления новости
echo "
";
echo widewindow("Добавить новость",
"
",300);
}
// Функция добавляет запись в файл новостей
function addgrec($topic, $pic, $message, $tmp_name)
{
//меняем в тексте перевод на новую строку на
$message = str_replace("\r\n"," ",$message);
$message = str_replace('\"',""",$message);
$topic = str_replace("\r\n"," ",$topic);
$topic = str_replace('\"',""",$topic);
//Инкрементируем счетчик сообщений
$f=fopen($this->counter_path, "r");
$NumOfRecs = fgets($f, 5);
$NumOfRecs++;
fclose($f);
$f=fopen($this->counter_path, 'w+');
flock($f, 2);
fputs($f, $NumOfRecs, 5);
fclose($f);
//закачиваем картинку на сервер
if ($pic!="")
{
$pic=strrchr($pic,'.');
if (($pic=='.jpg')or($pic=='.jpeg')or($pic=='.gif')or($pic=='.png'))
$pic=time().$pic;
else
{
MSG_back('Вы можете закачать только jpg, jpeg, gif, png файлы');
exit(1);
}
$uploadfile = $this->upload_dir.$pic;
if (!move_uploaded_file($tmp_name, $uploadfile))
{
MSG_back('При закачке файла произошла ошибка...');
exit(1);
}
}
//ПИшем новое сообщение
$f=fopen('tmp.dat', 'w+');
flock($f, 2);
$dat=date("h:i j.n.Y");
fputs($f, $topic.'|', 100);
if ($pic=="") $uploadfile="";
fputs($f, $uploadfile.'|', 300);
fputs($f, $dat.'|', 50);
fputs($f, $message.'|', 10000);
fputs($f, $_SESSION['user']."\r\n",100);
//Добавляем остальные сообщения
$fp1=fopen($this->dat_path, 'a+', 1);
flock($fp1, 2);
fseek($fp1, 0);
while (!feof ($fp1))
{
$buffer=fgets($fp1, 10550);
fputs($f, $buffer);
}
fclose($f);
fclose($fp1);
unlink($this->dat_path);
rename('tmp.dat', $this->dat_path);
}
// Функция удаляет запись из файла новостей
function delete($RecNo)
{
$f=fopen($this->counter_path, "r");
$buf = fgets($f, 5);
//проверка на наличие сообщений
if ($buf=='') return false;
else $NumOfRecs = $buf;
//проверка на корректность номера сообщения для удаления
if ($NumOfRecs<=$RecNo) return false;
//Декрементируем счетчик сообщений
$NumOfRecs--;
fclose($f);
$f=fopen($this->counter_path, 'w+');
flock($f, 2);
fputs($f, $NumOfRecs, 5);
fclose($f);
//Добавляем остальные сообщения кроме того, которое нужно удалить
$counter=0;
$f=fopen('tmp.dat', 'w+');
flock($f, 2);
$fp1=fopen($this->dat_path, 'a+', 1);
flock($fp1, 2);
fseek($fp1, 0);
while (!feof ($fp1))
{
$str = fgets($fp1, 10550);
if ($counter!=$RecNo)
fputs($f, $str);
else{
$buffer = explode('|', $str);
if ($buffer[1]!="") unlink($buffer[1]);
}
$counter++;
}
fclose($f);
fclose($fp1);
unlink($this->dat_path);
rename('tmp.dat', $this->dat_path);
}
// Функция меняет текст сообщения с номером $recno на переданный в параметре
// $message
// Чтобы сохранить сообщение в гостевую книгу нужно вызовать функцию, и как
// параметры передать ей номер и само сообщение
function _Save($message, $recno, $topic)
{
//Добавляем остальные сообщения кроме того, которое нужно отредактировать - его с параметрами
$counter=0;
$f=fopen('tmp.dat', 'w+');
flock($f, 2);
$fp1=fopen($this->dat_path, 'a+', 1);
flock($fp1, 2);
fseek($fp1, 0);
while (!feof ($fp1))
{
if ($counter==$recno)
{
$message = str_replace("\r\n"," ",$message);
$message = str_replace('\"',""",$message);
$topic = str_replace("\r\n"," ",$topic);
$topic = str_replace('\"',""",$topic);
$buf=fgets($fp1, 10550);
$buffer=explode('|', $buf);
$dat=date("h:i j.n.Y");
fputs($f, $topic.'|', 100);
fputs($f, $buffer[1].'|', 100);
fputs($f, $buffer[2].'|', 50);
fputs($f, $message."|", 10000);
fputs($f, $buffer[4],100);
$counter++;
}
else
{
$buffer=fgets($fp1, 4096);
fputs($f, $buffer);
$counter++;
}
}
fclose($f);
fclose($fp1);
unlink($this->dat_path);
rename('tmp.dat', $this->dat_path);
}
// Функция выводит на экран форму для редактирования сообщения
// В форме отобразится текст сообщения с номером $recno
function ShowEditForm($RecNo)
{
$f=fopen($this->counter_path, "r");
$buf = fgets($f, 5);
//проверка на наличие сообщений
if ($buf=='') echo "";
else $NumOfRecs = $buf;
//проверка на корректность номера сообщения для удаления
if ($NumOfRecs<=$RecNo) echo "";
fclose($f);
//Читаем записи
$f=fopen($this->dat_path, "r");
$counter=0;
while (!feof ($f))
{
$str = fgets($f, 10550);
//если данная запись - редактируемая, то выводим ее
if ($counter==$RecNo)
{
$new = explode('|', $str);
$topic=$new[0];
$pic=$new[1];
$message=$new[3];
$message = str_replace(" ","\r\n",$message);
$message = str_replace(""",'"',$message);
echo "
";
echo widewindow("Редактирование новости","
",500);
fclose($f);
footer();
exit;
}
$counter++;
}
}
//конструктор класса
function news($_face, $_counter, $_dat, $_upload)
{
//меняем дефолтные пути на пользовательские, если они указаны
$this->face_path=$_face;
$this->counter_path=$_counter;
$this->dat_path=$_dat;
$this->upload_dir=$_upload;
include $this->face_path; //подключаем интерфейсный модуль
}
function add($topic, $pic, $message, $pictmp)
{
header_();
if (2!=AUTH()) //проверка авторизированности!!!!!
{
MSG(AUTH()." Permission denied","?action=show");
footer();
exit;
}
$this->addgrec($topic, $pic, $message, $pictmp);
echo "
";
footer();
}
function form()
{
header_();
if (!AUTH()) //проверка авторизированности!!!!!
{
MSG("Permission denied","../auth/auth.php");
footer();
exit;
}
$this->showform();
footer();
}
function show($page)
{
header_();
if (AUTH()>0) echo "