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("Добавить новость", "
Тема:  
Максимум 50 символов


Изображение:  
Вы можете закачать только jpg, jpeg, gif, png файлы



Сообщение:
Максимум 10 000 символов


",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("Редактирование новости","
Тема:  
Максимум 50 символов


Изображение:  


Сообщение:

Максимум 10 000 символов


",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 "
Добавить новость
"; $this->outgrec($page); footer(); } function del($message) { header_(); if (2!=AUTH()) //проверка авторизированности!!!!! { MSG(" Permission denied","?action=show"); footer(); exit; } if ($this->delete($message)) { echo ""; } echo ""; footer(); } function edit($message) { header_(); if (2!=AUTH()) //проверка авторизированности!!!!! { MSG(AUTH()."Permission denied","?action=show"); footer(); exit; } $this->ShowEditForm($message); } function save($message, $recno, $topic) { header_(); if (2!=AUTH()) //проверка авторизированности!!!!! { MSG(AUTH()." Permission denied","?action=show"); footer(); exit; } $this->_Save($message, $recno, $topic); echo " "; footer(); } }//class ?>