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 faq { var $face_path; //путь к интерфейсному модулю var $counter_path; //путь к фойлу-счетчику сообщений var $dat_path; //путь к базе сообщений var $upload_dir; //путь к папке для аплоада // Функция читает из файла новости и выводит 10 из них, // расположенных на переданной странице // параметр - отображаемая страница, на странице выводится по 10 сообщений function outgrec($page) { //Читаем из файла количество новостей, если файл пуст - присваиваем переменной 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 ($_SESSION['lang']=='eng') { echo "

FAQ (frequently asked questions)

Aviable in russian version only...
"; exit; } else echo "

FAQ (часто задаваемые вопросы)

"; //Если файл новостей пуст 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, 20000); if ($str=='') break; $new = explode('|', $str); $question=$new[0]; $answer=$new[1]; //если данная запись на требуемой странице - выводим ее if ($counter+1>=$FirstRec) { //меняем смайлики на картинки $question = str_replace(":)",":)",$question); $question = str_replace(";)",";)",$question); $question = str_replace("=/","=/",$question); $question = str_replace(":(",":(",$question); $question = str_replace(":!:",":!:",$question); $question = str_replace(":?:",":?:",$question); $answer = str_replace(":)",":)",$answer); $answer = str_replace(";)",";)",$answer); $answer = str_replace("=/","=/",$answer); $answer = str_replace(":(",":(",$answer); $answer = str_replace(":!:",":!:",$answer); $answer = str_replace(":?:",":?: />",$answer);

           if ($admtools!=".$admtools.($counter+1).". ".$question."

".$answer."


"; } $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("Добавить вопрос", "
Вопрос:
Максимум 10 000 символов

Ответ:
Максимум 10 000 символов


",300); } // Функция добавляет запись в файл новостей function addgrec($question, $answer) { //меняем в тексте перевод на новую строку на
$question = str_replace("\r\n","
",$question); $question = str_replace('\"',""",$question); $answer = str_replace("\r\n","
",$answer); $answer = str_replace('\"',""",$answer); //Инкрементируем счетчик сообщений $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); //ПИшем новое сообщение $f=fopen('tmp.dat', 'w+'); flock($f, 2); fputs($f, $question.'|', 10000); fputs($f, $answer."\r\n", 10000); //Добавляем остальные сообщения $fp1=fopen($this->dat_path, 'a+', 1); flock($fp1, 2); fseek($fp1, 0); while (!feof ($fp1)) { $buffer=fgets($fp1, 20000); 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, 20000); if ($counter!=$RecNo) fputs($f, $str); $counter++; } fclose($f); fclose($fp1); unlink($this->dat_path); rename('tmp.dat', $this->dat_path); } // Функция меняет тексты вопросов с номером $recno на переданный в параметре // $question и $answer // Чтобы сохранить сообщение в гостевую книгу нужно вызовать функцию, и как // параметры передать ей номер и само сообщение function _Save($question, $answer, $recno) { //Добавляем остальные сообщения кроме того, которое нужно отредактировать - его с параметрами $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) { echo $answer; $question = str_replace("\r\n","
",$question); $question = str_replace('\"',""",$question); $answer = str_replace("\r\n","
",$answer); $answer = str_replace('\"',""",$answer); echo $answer; $buf=fgets($fp1, 20000); fputs($f, $question.'|', 10000); fputs($f, $answer."\r\n", 10000); $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, 20000); //если данная запись - редактируемая, то выводим ее if ($counter==$RecNo) { $new = explode('|', $str); $question=$new[0]; $answer=$new[1]; $question = str_replace("
","\r\n",$question); $question = str_replace(""",'"',$question); $answer = str_replace("
","\r\n",$answer); $answer = str_replace(""",'"',$answer); echo "
"; echo widewindow("Редактирование вопроса","
Вопрос:
Максимум 10 000 символов

Ответ:
Максимум 10 000 символов


",300); fclose($f); footer(); exit; } $counter++; } } //конструктор класса function faq($_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($question, $answer) { header_(); if (2!=AUTH()) //проверка авторизированности!!!!! { MSG(AUTH()."Permission denied","?action=show"); footer(); exit; } $this->addgrec($question, $answer); 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($question, $answer, $recno) { header_(); if (2!=AUTH()) //проверка авторизированности!!!!! { MSG(AUTH()."Permission denied","?action=show"); footer(); exit; } $this->_Save($question, $answer, $recno); echo " "; footer(); } }//class ?>