Позволяет одному и тому же участнику иметь разные статусы в разных разделах. Наткнулся на винчестере, писал давно но ранее не публиковал. Может кому пригодится. Ставим... Откройте файл topic.cgi НАЙДИТЕ код: Код: if ($locations_in_topic eq 'on') { if ($location){ if (length($location) > $char_locat_in_topic) { $location = substr($location, 0, $char_locat_in_topic-1); $location .= ' ...'; } $locat = qq~<br>Откуда: $location<p>~; } else {undef $locat;} } $membertitle =~ s/</</g; $membertitle =~ s/>/>/g; $membertitle =~ s/"/"/g;
ВЫШЕ ДОБАВЬТЕ: Код: $filewithtitlestoopen = "$ikondir" . "members/$jmembername" . "_title.ttl"; if (-e $filewithtitlestoopen) { open(FILEOFTITLES,"$filewithtitlestoopen"); @membertitles = <FILEOFTITLES>; foreach $pairofmembertitles (@membertitles) { ($forumnumberfortitle, $forumtitleformember) = split(/\<\>/, $pairofmembertitles); if ($forumnumberfortitle eq "$inforum") { $membertitle = $forumtitleformember; } } close(FILEOFTITLES); }
Теперь сохраните и закройте topic.cgi, откройте setmembers.cgi НАЙДИТЕ: Код: НИЖЕ ДОБАВЬТЕ: Код: ##### Custom titles in forums @params = $query->param; foreach (@params) { $theparam = $query->param($_); $theparam =~ s/\@/\\\@/g; $theparam = &unHTML("$theparam"); ${$_} = $theparam; if ($_ ne 'action') { $printme .= "\$" . "$_ = \"$theparam\"\;\n"; } } ##### End of custom titles in forums
НАЙДИТЕ: Код: $action = $query -> param('action'); $checkaction = $query -> param('checkaction'); $inletter = $query -> param('letter'); $inmember = $query -> param('member'); $inmember = &unHTML("$inmember"); $action = &unHTML("$action");
НИЖЕ ДОБАВЬТЕ: Код: ##### Custom titles in forums $StatusCount = $query->param('StatusCount'); $addstatus = $query->param('addstatus'); $howmany = $query->param('howmany'); ##### End of custom titles in forums
НАЙДИТЕ: Код: $inmembername = cookie("adminname"); $inpassword = cookie("adminpass");
НИЖЕ ДОБАВЬТЕ: Код: ##### Custom titles in forums for($i=1; $i<=$StatusCount; $i++) { $forumnumber = "forumnumber_" . "$i"; $forumstatustext = "forumstatustext_" . "$i"; $forumstatusdel = "forumstatusdel_" . "$i"; $$forumnumber = $query->param("$forumnumber"); $$forumstatustext = $query->param("$forumstatustext"); $$forumstatusdel = $query->param("$forumstatusdel"); } ##### End of custom titles in forums
НАЙДИТЕ: Код: my %Mode = ( 'updatecount' => \&docount, 'viewletter' => \&viewletter, 'edit' => \&edit, 'deletemember' => \&deletemember, 'unban' => \&unban );
ЗАМЕНИТЕ это на код: Код: my %Mode = ( 'updatecount' => \&docount, 'viewletter' => \&viewletter, 'edit' => \&edit, 'deletemember' => \&deletemember, 'unban' => \&unban, 'statusSettings' => \&statusSettings, 'submitStatusSettings' => \&submitStatusSettings );
НАЙТИ: Код: </tr><tr> <td colspan=2 bgcolor=#EEEEEE align=center><input type=submit value=$ibtxt{'0039'} name=submit></form></td> </tr>
ВЫШЕ ДОБАВИТЬ: Код: </tr><tr> <td colspan=2 bgcolor=#EEEEEE align=center><a href=$boardurl/$thisprog?action=statusSettings&member=$inmember><font size=2><b><<Настроить отдельные статусы для разделов>></b></font></a> <hr width=100%> </td>
НАЙДИТЕ: Код: $filetounlink = "$ikondir" . "members/$inmember.cgi"; unlink $filetounlink;
НИЖЕ ДОБАВЬТЕ: Код: $filetocheck = "$ikondir". "messages/$inmember" . "_title.ttl"; if (-e $filetocheck) { $filetounlink = "$ikondir". "messages/$inmember" . "_title.ttl"; unlink $filetounlink; }
Теперь В САМЫЙ КОНЕЦ ФАЙЛА ДОБАВЬТЕp код: Код: ### Set statuses subs by Alexander Ipp sub statusSettings { $backgroundcolor = "bgcolor=\"#ffffff\""; $StatusDB = "$ikondir" . "members/$inmember" . "_title.ttl"; $totalstatuses = 0; @statuslines; if (-e "$StatusDB") { open (FILE, "<$StatusDB") or die ("Can't open file: $StatusDB!"); while(<FILE>) { push(@statuslines,$_); } close(FILE); chmod (0777, "$StatusDB"); } else { $DBExists = "false"; } print <<StatusSettingsTop; <tr> <td bgcolor=#EEEEEE valign=middle align=center colspan=2> <font face=verdana color=#333333 size=3><b>Настройки статусов участника $inmember в разделах</b> </td></tr> <tr><td> </td></tr><tr><td> <center> <P> <FORM ACTION="setmembers.cgi" METHOD="POST" NAME="THEFORM"> <INPUT TYPE="HIDDEN" NAME="action" VALUE="submitStatusSettings"> <INPUT TYPE="HIDDEN" NAME="member" VALUE="$inmember"> <center> <table border=0 cellpadding=0 cellspacing=0 width="100%"> <TR> <td bgcolor="#000000"> <table border=0 cellspacing=0 width=100%> <tr bgcolor="#EEEEEE"> <td align=center><b><FONT SIZE="1" FACE="Verdana, Arial">Убрать?</font></b></td> <td align=center><b><FONT SIZE="2" FACE="Verdana, Arial">Номер раздела</font></b></td> <td align=center><b><FONT SIZE="2" FACE="Verdana, Arial">Текст статуса</font></b></td> <td align=center><b><FONT SIZE="2" FACE="Verdana, Arial">Просмотр</font></b></td> </tr> StatusSettingsTop foreach $statusline (@statuslines) { chomp($statusline); $totalstatuses++; unless ($DBExists eq "false") { ($forumnumber, $forumstatustext) = split(/\<\>/, $statusline); $id = $totalstatuses; } else { $forumstatustext = $statusline; $id = $totalstatuses; } $forumstatustexthtml = $forumstatustext; $forumstatustext =~ s/</</g; $forumstatustext =~ s/>/>/g; $forumstatustext =~ s/"/"/g; print <<StatusData; <tr $backgroundcolor> <td align=center><input type="CHECKBOX" name="delete_$id" value="Yes"></td> <td align=center><input type="text" name="forumnumber_$id" value="$forumnumber" size=5></td> <td align=center><input type="text" name="forumstatustext_$id" value="$forumstatustext" size=35></td> <td align=center><font size=$dfontsize2>$forumstatustexthtml</font></td> </tr> StatusData } for($i=1; $i<=$howmany; $i++) { $id = $i+$totalstatuses; print <<AddedStatuses; <tr $backgroundcolor> <td align=center><input type="CHECKBOX" name="delete_$id" value="Yes"></td> <td align=center><input type="text" name="forumnumber_$id" value="" size=5></td> <td align=center><input type="text" name="forumstatustext_$id" value="" size=35></td> <td align=center></td> </tr> AddedStatuses } $totalstatuses = $totalstatuses + $howmany; print <<StatusSettingsBottom; <TR bgcolor="#EEEEEE"> <td colspan=4><b><FONT SIZE="1" FACE="Verdana, Arial"> Добавить ещё статусы участнику?</b> Если вы хотите добавить ещё статусы, пометьте это поле и укажите желаемое число добавляемых статусов.</font></td> </tr> <tr bgcolor="#ffffff"> <td align=center><input type="CHECKBOX" name="addstatus" value="Yes"></td> <td align=left><INPUT TYPE="TEXT" NAME="howmany" SIZE=4 MAXLENGTH=25></td> <td colspan=2></td> </tr> <TR bgcolor="#EEEEEE"> <td colspan=4><FONT SIZE="1" FACE="Verdana, Arial"><b>Примечание:</b> Возможно использование HTML. HTML отображается в колонке "Просмотр".</font></td> </tr> </td></tr></table> </td></tr></table> <P> <INPUT TYPE="HIDDEN" NAME="StatusCount" VALUE="$totalstatuses"> <INPUT TYPE="SUBMIT" NAME="Submit" VALUE="Подтвердить настройки статусов"> </FORM> </td> </tr> <tr><td colspan=2 bgcolor=#EEEEEE align=center><a href=$boardurl/$thisprog?action=edit&member=$inmember><font size=2><b><<Вернуться к редактированию участника>></b></font></a> </td> </tr> StatusSettingsBottom } #END INTRO SR ### sub submitStatusSettings { $backgroundcolor = "bgcolor=\"#ffffff\""; $StatusDB = "$ikondir" . "members/$inmember" . "_title.ttl"; $number = 0; open (STATUSFILE, ">$StatusDB") or die ("Can't open file: $SmilieDB!"); for($i=1; $i<=$StatusCount; $i++) { $statusdel = "delete_$i"; if($$statusdel ne "Yes") { $number++; $forumnumber = "forumnumber_" . "$i"; $forumstatustext = "forumstatustext_" . "$i"; $statusline = "$$forumnumber" . "\<\>" . "$$forumstatustext\n"; unless($$forumnumber eq "" || $$forumstatustext eq "") { print STATUSFILE ("$statusline"); } } } close(STATUSFILE); chmod (0777, "$StatusDB"); &statusSettings; }
Сохраните, закройте setmembers.cgi Зайдите в изменение свойств участника в Админцентре, внизу появится ссылка на настройку статусов участника в разделах. Можно пользоваться! PS Обо всех ошибках - в форум. PPS Хак написан криво (писалось на заре моего увлечения программированием) и переделан по-моему из чужого хака настройки смайлов, но он работоспособен. Может кому пригодится. :) |