Alexander Ipp
BANNED | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Среди массы недостатков стандартного poll_hack'а есть и такой, как невозможность исправить голосование иначе, нежели вручную, посредством FTP-клиента и текстового редактора. А если самому заниматься неохота, а модерам давать пароль на ФТП не хочется? Да и просто неудобно... Что же, вот этот хак призван исправить сию несправедливость. Что он может? Вниз страницы с темой, в меню администрирования, добавляется новый пунктик - "Редактировать голосование". Кликаем на него - и, если тема содержит голосование, то выводится форма с полями для пароля/логина и парами "вариант номер такой-то" и "голосов за него". Можем править. Потом жмём "Изменить" - и готово. Если же тема не содержит голосование или темы с таким номером нет, то выводится соответствующая надпись. Анрегов и не админов/модеров к форме не пускаем. Вроде это всё. Собственно, хак: Открываем postings.cgi Ищем: Код: for ('forum','topic','membername','password','action','postno', 'notify','deletepost','previewfirst','intopictitle','intopicdescription', 'inpost','inshowemoticons','inshowsignature' | СРАЗУ ЖЕ ПОСЛЕ ЭТОГО (БЕЗ ПЕРЕВОДА СТРОКИ!!!) добавляем: Код: ,'inpollvariantone','inpollvariantoneres', 'inpollvarianttwo','inpollvarianttwores','inpollvariantthree', 'inpollvariantthreeres','inpollvariantfour','inpollvariantfourres', 'inpollvariantfive','inpollvariantfiveres','inpollvariantsix', 'inpollvariantsixres','inpollvariantseven','inpollvariantsevenres', 'inpollvarianteight','inpollvarianteightres','inpollvariantnine', 'inpollvariantnineres','inpollvariantten','inpollvarianttenres' | Следим за тем, чтобы нигде не было пробелов! В этом месте мы извлекаем нужные переменные из хтмл-формы. Далее ищем: Код: my %Mode = ( 'edit' => \&editform, 'lock' => \&lockthread, 'unlock' => \&unlockthread, 'delete' => \&deletethread, 'movetopic' => \&movetopic, 'edittopic' => \&edit_topic_title ); | Меняем на: Код: my %Mode = ( 'edit' => \&editform, 'lock' => \&lockthread, 'unlock' => \&unlockthread, 'delete' => \&deletethread, 'movetopic' => \&movetopic, 'edittopic' => \&edit_topic_title, 'editpoll' => \&editpoll ); | Т.е. добавляем в хэш ещё одно значение для вызова необходимой нам подпрограммы. Далее в самый конец файла суём код: Код: # Start of edit poll hack by Alexander Ipp, alexanderipp@mail.ru, www.adminforum.tk sub editpoll { &getmember("$inmembername"); &moderator; $cleartoedit = "no"; &mischeader("Редактирование голосования"); if ($inmembername eq "Guest" || $inmembername eq "") { &error("редактирование голосования&вы не зарегистрированны"); } if ($membercode ne "ad" && $inmembmod ne "yes") { &error("редактирование голосования&вы не администратор и не модератор"); } if (($membercode eq "ad") && ($inpassword eq $password)) { $cleartoedit = "yes"; } if (($inmembmod eq "yes") && ($inpassword eq $password)) { $cleartoedit = "yes"; } unless ($cleartoedit eq "yes") { $cleartoedit = "no"; } if ($cleartoedit eq "no" && $checked eq "yes") { &error("редактирование голосования&Вы не администратор или модератор, или указан неправильный пароль"); } if (($cleartoedit eq "yes") && ($checked eq "yes")) { my $file = "$ikondir" . "forum$inforum/$intopic.poll"; unless (-e $file) { &error("редактирование голосования&Тема с таким номером не существует или не содержит голосование"); } open (ENT, $file); flock ENT, 1; $in = <ENT>; close (ENT); ($pollvariantone, $pollvariantoneres, $pollvarianttwo, $pollvarianttwores, $pollvariantthree, $pollvariantthreeres, $pollvariantfour, $pollvariantfourres, $pollvariantfive, $pollvariantfiveres, $pollvariantsix, $pollvariantsixres, $pollvariantseven, $pollvariantsevenres, $pollvarianteight, $pollvarianteightres, $pollvariantnine, $pollvariantnineres, $pollvariantten, $pollvarianttenres) = split(/\|/,$in); open(FILE, ">$file"); flock(FILE, 2); print FILE "$inpollvariantone|$inpollvariantoneres|$inpollvarianttwo|$inpollvarianttwores|$inpollvariantthree|$inpollvariantthreeres|$inpollvariantfour|$inpollvariantfourres|$inpollvariantfive|$inpollvariantfiveres|$inpollvariantsix|$inpollvariantsixres|$inpollvariantseven|$inpollvariantsevenres|$inpollvarianteight|$inpollvarianteightres|$inpollvariantnine|$inpollvariantnineres|$inpollvariantten|$inpollvarianttenres"; close(FILE); $output .= qq~ <table cellpadding=0 cellspacing=0 border=0 width=$tablewidth bgcolor=$tablebordercolor align=center> <tr> <td> <table cellpadding=6 cellspacing=1 border=0 width=100%> <tr> <td bgcolor=$miscbacktwo valign=middle align=center><font face="$font" color=$fontcolormisc size=$dfontsize2><b>Редактирование голосования выполено.</b></font></td></tr> <tr> <td bgcolor=$miscbackone valign=middle><font face="$font" color=$fontcolormisc size=$dfontsize1> $ibtxt{'1004'}: <ul> <li><a href="$threadprog?forum=$inforum&topic=$intopic">Вернуться в тему</a> <li><a href="$forumsprog?forum=$inforum">$ibtxt{'0509'}</a> <li><a href="$forumsummaryprog">$ibtxt{'0323'}</a> </ul> </tr> </td> </table></td></tr></table> ~; } # end if clear to edit else { my $file = "$ikondir" . "forum$inforum/$intopic.poll"; unless (-e $file) { &error("редактирование голосования&Тема с таким номером не существует или не содержит голосование"); } open (ENT, $file); flock ENT, 1; $insec = <ENT>; close (ENT); ($pollvariantone, $pollvariantoneres, $pollvarianttwo, $pollvarianttwores, $pollvariantthree, $pollvariantthreeres, $pollvariantfour, $pollvariantfourres, $pollvariantfive, $pollvariantfiveres, $pollvariantsix, $pollvariantsixres, $pollvariantseven, $pollvariantsevenres, $pollvarianteight, $pollvarianteightres, $pollvariantnine, $pollvariantnineres, $pollvariantten, $pollvarianttenres) = split(/\|/,$insec); $inmembername =~ s/\_/ /g; $output .= qq~ <table cellpadding=0 cellspacing=0 border=0 width=$tablewidth bgcolor=$tablebordercolor align=center> <tr><td> <table cellpadding=6 cellspacing=1 border=0 width=100%> <form action="$thisprog" method="post"> <input type=hidden name="action" value="editpoll"> <input type=hidden name="checked" value="yes"> <input type=hidden name="forum" value="$inforum"> <input type=hidden name="topic" value="$intopic"> <tr> <td bgcolor=$miscbacktwo valign=middle colspan=2 align=center><font face="$font" color=$fontcolormisc size=$dfontsize2><b>Введите данные для редактирования голосования</b></font></td></tr> <tr> <td bgcolor=$miscbackone valign=middle><font face="$font" color=$fontcolormisc size=$dfontsize1>$ibtxt{'0306'}</font></td> <td bgcolor=$miscbackone valign=middle><input type=text name="membername" value="$inmembername" size=20> <a href="$registerprog"><font face="$font" color=$fontcolormisc size=$dfontsize1>$ibtxt{'1417'}</font></a></td></tr> <tr> <td bgcolor=$miscbackone valign=middle><font face="$font" color=$fontcolormisc size=$dfontsize1>$ibtxt{'0307'}</font></td> <td bgcolor=$miscbackone valign=middle><input type=password name="password" value="$inpassword" size=20> <font face="$font" color=$fontcolormisc size=$dfontsize1><a href="$profileprog?action=lostpass">$ibtxt{'2411'}</a></font></td></tr> <tr> <td bgcolor=$miscbackone valign=middle><font face="$font" color=$fontcolormisc size=$dfontsize1>Вариант 1</font></td> <td bgcolor=$miscbackone valign=middle><input type=text name="inpollvariantone" value="$pollvariantone" size=50><font face="$font" color=$fontcolormisc size=$dfontsize1> Голосов: </font><input type=text name="inpollvariantoneres" value="$pollvariantoneres" size=4></td></tr> <tr> <td bgcolor=$miscbackone valign=middle><font face="$font" color=$fontcolormisc size=$dfontsize1>Вариант 2</font></td> <td bgcolor=$miscbackone valign=middle><input type=text name="inpollvarianttwo" value="$pollvarianttwo" size=50><font face="$font" color=$fontcolormisc size=$dfontsize1> Голосов: </font><input type=text name="inpollvarianttwores" value="$pollvarianttwores" size=4></td></tr> <tr> <td bgcolor=$miscbackone valign=middle><font face="$font" color=$fontcolormisc size=$dfontsize1>Вариант 3</font></td> <td bgcolor=$miscbackone valign=middle><input type=text name="inpollvariantthree" value="$pollvariantthree" size=50><font face="$font" color=$fontcolormisc size=$dfontsize1> Голосов: </font><input type=text name="inpollvariantthreeres" value="$pollvariantthreeres" size=4></td></tr> <tr> <td bgcolor=$miscbackone valign=middle><font face="$font" color=$fontcolormisc size=$dfontsize1>Вариант 4</font></td> <td bgcolor=$miscbackone valign=middle><input type=text name="inpollvariantfour" value="$pollvariantfour" size=50><font face="$font" color=$fontcolormisc size=$dfontsize1> Голосов: </font><input type=text name="inpollvariantfourres" value="$pollvariantfourres" size=4></td></tr> <tr> <td bgcolor=$miscbackone valign=middle><font face="$font" color=$fontcolormisc size=$dfontsize1>Вариант 5</font></td> <td bgcolor=$miscbackone valign=middle><input type=text name="inpollvariantfive" value="$pollvariantfive" size=50><font face="$font" color=$fontcolormisc size=$dfontsize1> Голосов: </font><input type=text name="inpollvariantfiveres" value="$pollvariantfiveres" size=4></td></tr> <tr> <td bgcolor=$miscbackone valign=middle><font face="$font" color=$fontcolormisc size=$dfontsize1>Вариант 6</font></td> <td bgcolor=$miscbackone valign=middle><input type=text name="inpollvariantsix" value="$pollvariantsix" size=50><font face="$font" color=$fontcolormisc size=$dfontsize1> Голосов: </font><input type=text name="inpollvariantsixres" value="$pollvariantsixres" size=4></td></tr> <tr> <td bgcolor=$miscbackone valign=middle><font face="$font" color=$fontcolormisc size=$dfontsize1>Вариант 7</font></td> <td bgcolor=$miscbackone valign=middle><input type=text name="inpollvariantseven" value="$pollvariantseven" size=50><font face="$font" color=$fontcolormisc size=$dfontsize1> Голосов: </font><input type=text name="inpollvariantsevenres" value="$pollvariantsevenres" size=4></td></tr> <tr> <td bgcolor=$miscbackone valign=middle><font face="$font" color=$fontcolormisc size=$dfontsize1>Вариант 8</font></td> <td bgcolor=$miscbackone valign=middle><input type=text name="inpollvarianteight" value="$pollvarianteight" size=50><font face="$font" color=$fontcolormisc size=$dfontsize1> Голосов: </font><input type=textd name="inpollvarianteightres" value="$pollvarianteightres" size=4></td></tr> <tr> <td bgcolor=$miscbackone valign=middle><font face="$font" color=$fontcolormisc size=$dfontsize1>Вариант 9</font></td> <td bgcolor=$miscbackone valign=middle><input type=text name="inpollvariantnine" value="$pollvariantnine" size=50><font face="$font" color=$fontcolormisc size=$dfontsize1> Голосов: </font><input type=text name="inpollvariantnineres" value="$pollvariantnineres" size=4></td></tr> <tr> <td bgcolor=$miscbackone valign=middle><font face="$font" color=$fontcolormisc size=$dfontsize1>Вариант 10</font></td> <td bgcolor=$miscbackone valign=middle><input type=text name="inpollvariantten" value="$pollvariantten" size=50><font face="$font" color=$fontcolormisc size=$dfontsize1> Голосов: </font><input type=text name="inpollvarianttenres" value="$pollvarianttenres" size=4></td></tr> <tr> <td bgcolor=$miscbacktwo valign=middle colspan=2 align=center><input type=submit name="submit" value="Изменить"></form></td></tr></table></td></tr></table> </table></td></tr></table> ~; } } # end of edit poll by Alexander Ipp | Это и есть та самая подпрограмма, которая выполняет редактирование файла с вариатнами и кол-вом ответов в голосовании. Это всё в postings.cgi. Сохраняем и закрываем его, открываем topic.cgi. Ищем код: Код: <td valign=middle nowrap align=right><font face="$font" color=$menufontcolor size=$dfontsize1> $ibtxt{'3014'} <a href="$postingsprog?action=lock&forum=$inforum&topic=$intopic">$ibtxt{'3015'}</a> | <a href="$postingsprog?action=edittopic&forum=$inforum&topic=$intopic">$ibtxt{'9999'}</a> | <a href="$postingsprog?action=unlock&forum=$inforum&topic=$intopic">$ibtxt{'3016'}</a> | <a href="$postingsprog?action=delete&forum=$inforum&topic=$intopic">$ibtxt{'3017'}</a> | <a href="$postingsprog?action=movetopic&forum=$inforum&topic=$intopic">$ibtxt{'3018'}</a> </td> | Меняем на: Код: <td valign=middle nowrap align=right><font face="$font" color=$menufontcolor size=$dfontsize1> $ibtxt{'3014'} <a href="$postingsprog?action=lock&forum=$inforum&topic=$intopic">$ibtxt{'3015'}</a> | <a href="$postingsprog?action=editpoll&forum=$inforum&topic=$intopic">Редактировать голосование</a> | <a href="$postingsprog?action=edittopic&forum=$inforum&topic=$intopic">$ibtxt{'9999'}</a> | <a href="$postingsprog?action=unlock&forum=$inforum&topic=$intopic">$ibtxt{'3016'}</a> | <a href="$postingsprog?action=delete&forum=$inforum&topic=$intopic">$ibtxt{'3017'}</a> | <a href="$postingsprog?action=movetopic&forum=$inforum&topic=$intopic">$ibtxt{'3018'}</a> </td> | Здесь мы добавляем в модерско-админскую менюшку внизу темы ещё один пункт - "Редактировать голосование". Вот вроде и всё. Готовый вариант работает у меня (www.adminforum.tk), правда, увидить вы его всё равно не сможете, т.к. не являетесь модерами. Всем удачи! Спасибо за внимание! PS Проследите, чтобы в выделенной красным строке не было пробелов, т.к. здесь скрпт рубит слова принудителььно. | Всего записей: 1943 | Зарегистр. 20-08-2001 | Отправлено: 23:25 02-02-2002 | Исправлено: Alexander Ipp, 11:28 06-02-2002 |
|