]> www.wagner.pp.ru Git - oss/stilllife.git/commitdiff
*** empty log message ***
authorVictor Wagner <vitus@wagner.pp.ru>
Tue, 25 Mar 2008 21:59:54 +0000 (21:59 +0000)
committerVictor Wagner <vitus@wagner.pp.ru>
Tue, 25 Mar 2008 21:59:54 +0000 (21:59 +0000)
forum/TODO
forum/forum
templates/basicset/forum.html
templates/basicset/topic.html

index c924f77214d4a3f1f5ea47bf37b41423cbe35cbf..d4990843c54b55065fe1f3d0787f4382bcd76a37 100644 (file)
@@ -1,15 +1,12 @@
 Roadmap по server-side части
-1. newtopic
-2. newforum
-3. процедура раскрутки
-4. страничка юзера
-5. список юзеров
-6. редактирование user profile и фиксы в регистрации
-7. Механизм регистрации с подтверждением
-8. delete (message, topic, forum)
-9. edit (message,topic,forum)
-10. move (message,topic,forum)
-11. setrights
-12. applytemplates 
-13. Раскрутка форума
-14. Почтовые оповещения о новых репликах, RSS или recent comments page
+1. процедура раскрутки
+2. страничка юзера
+3. список юзеров
+4. редактирование user profile и фиксы в регистрации
+5. Механизм регистрации с подтверждением
+6. delete (message, topic, forum)
+7. edit (message,topic,forum)
+8. move (message,topic,forum)
+9. setrights
+10. applytemplates 
+11. Почтовые оповещения о новых репликах, RSS или recent comments page
index 5ece800ea5750a442beddde87169e3247657a177..3faec6039281b856667341360cf03c030470cc14 100755 (executable)
@@ -65,7 +65,6 @@ my $cgi = new CGI;
 print STDERR "--------------------\n";
 my $forum=get_forum_config();
 
-
 authorize_user($cgi,$forum);
 if ($cgi->request_method ne "POST") {
 # Запрос к скрипту методом GET. Надо показать форму, если только это не
@@ -83,6 +82,7 @@ if ($cgi->request_method ne "POST") {
 # нехороших символов нет, но чтобы perl в taint mode не
 # ругался... 
                                if (allow_operation($param,$cgi,$forum)) {
+                                       print STDERR "Allow_operation completed\n";
                                        show_template($1,$cgi,$forum) if $param=~/^(\w+)$/;     
                                        exit;
                                } else {
@@ -384,7 +384,8 @@ sub fix_forum_links {
                }
                my $link = $element->attr($attr);
                # Абсолютная ссылка - оставляем как есть. 
-               next ELEMENT if (! defined $link || $link=~/^\w+:/); 
+               next ELEMENT if (! defined $link || $link=~/^\w+:/ || $link
+               eq"."||$link eq ".."); 
                # Ссылка от корня сайта. 
                if (substr($link,0,1) eq "/") {
                        # Если она не ведет на наш скрипт, не обрабатываем
@@ -934,10 +935,10 @@ sub new_topic {
        # Скрыть список сообщений.
        hide_list($tree,"messagelist");
        savetree($filename,$tree,undef);
+       $tree->destroy;
        #
        # Добавляем элемент в список тем текущего форума
        #
-       $tree->destroy;
 
        my $lockfd;
        ($tree,$lockfd)=gettree($path_translated."/".$forum->{"indexfile"});
@@ -959,6 +960,126 @@ sub new_topic {
        record_statistics($forum,"topic");
        forum_redirect($cgi,$forum,$cgi->path_info."/$urlname.html");
 }
+
+sub new_forum {
+       my ($form,$cgi,$forum) = @_;
+       #
+       # Проверяем корректность urlname и прочих полей
+       #
+       my $urlname;
+        if (!$cgi->param("urlname")) {
+               form_error($form,$cgi,$forum,"Форуму необходимо задать непустое urlname");
+        }     
+        if ($cgi->param("urlname") eq ".") {
+               $urlname = "."
+        } else {       
+               $urlname=$1 if $cgi->param("urlname") =~ /^([-\w]+)$/ ;
+               form_error($form,$cgi,$forum,"Некорректные символы в urlname.
+                       Допустимы только латинские буквы, цифры и минус") unless $urlname; 
+       }
+       if (!-d $path_translated) {
+               show_error($forum,"Операция $form может быть вызвана только со
+               страницы форума");
+       }       
+       my $newname = "$path_translated/$urlname";
+       $newname=$path_translated if ($urlname eq ".");  
+       my $filename = "$newname/$forum->{indexfile}";
+       if (-f $filename) {
+               form_error($form,$cgi,$forum,"Форум $urlname уже существует");
+       }       
+       if (!$cgi->param("title")) {
+               form_error($form,$cgi,$forum,"Форум должен иметь непустое название");
+       }
+       mkdir $newname unless -d $newname;
+       #
+       # Сохраняем логотип
+       #
+       my ($logo_name,$logo_width,$logo_height);
+       if ($cgi->param("logo")) {
+               my $userpath = $cgi->param("logo");
+               $logo_name="logo.".lc($1) if $userpath=~/\.([^.]+)$/;
+               my $in = $cgi->upload("logo");
+               if (!$in) {
+                       show_error($forum,"Ошибка при загрузке картинки $userpath");
+                       exit;
+               }       
+               my $out;
+               open $out,">$newname/$logo_name";
+               binmode $out,":bytes";
+               local $/=undef;
+               my $data = <$in>;
+               print $out $data;
+               close $in;
+               close $out;
+               ($logo_width,$logo_height) = imgsize("$newname/$logo_name");
+       } else {
+               $logo_name = $forum->{"templatesurl"}."/1x1.gif";
+               $logo_width = 1;
+               $logo_height=1;
+       }       
+
+
+       #
+       # Создаем собственно оглавление форума
+       #
+       
+
+       my $tree = gettemplate($forum,"forum",$cgi->path_info."/$urlname");
+    # Заполнить название и аннотацию 
+       my $abstract = input2tree($cgi,$forum,"abstract");
+       substinfo($tree,[_tag=>"meta","name"=>"description"],content=>$abstract->as_trimmed_text);
+       substinfo($tree,[_tag=>"title"],_content=>$cgi->param("title"));
+       my $subtree = $tree->look_down("class"=>"annotation")
+               or show_error($forum,"В шаблоне форума отсутствует класс annotation");
+       my $creation_time=strftime("%d.%m.%Y %H:%M",localtime());
+               substinfo($subtree,["class"=>"title"],
+               _content=>$cgi->param("title"));
+               substinfo($subtree,["class"=>"date"],
+                       _content=>$creation_time);
+               # Вставляем в страницу КОПИЮ аннотации, поскольку аннотация
+               # нам еще понадобится в списке тем.
+               substinfo($subtree,["class"=>"abstract"],_content=>$abstract->clone);   
+               substitute_user_info($subtree,$forum);  
+       substinfo($subtree,[_tag=>"img","class"=>"logo"],
+               src=> $logo_name, width=>$logo_width, height=>$logo_height);
+       # Скрыть списки подфорумов и тем .
+       hide_list($tree,"forumlist");
+       hide_list($tree,"topiclist");
+       if ($urlname eq ".") {
+               for my $link_up ($tree->look_down(_tag=>"a",href=>"..")) {
+                       $link_up->delete;
+               }
+       }       
+       savetree($filename,$tree,undef);
+       $tree->destroy;
+       #
+       # Добавляем элемент в список тем текущего форума
+       #
+       if ($urlname ne ".") {
+       my $lockfd;
+       ($tree,$lockfd)=gettree($path_translated."/".$forum->{"indexfile"});
+       my $newforum = newlistelement($tree,"forum","forumlist");
+       substinfo($newforum,[_tag=>"a","class"=>"title"],
+       _content=>$cgi->param("title"), href=>"$urlname/");
+       substinfo($newforum,["class"=>"date"], _content=>$creation_time);
+       substinfo($newforum,["class"=>"abstract"],_content=>$abstract); 
+       substinfo($newforum,[_tag=>"img","class"=>"logo"],src=>"$urlname/$logo_name",
+               width=>$logo_width,height=>$logo_height);
+       substitute_user_info($newforum,$forum); 
+       $newforum->attr("id",$urlname);
+       my $controlform = $newforum->look_down(_tag=>"form",class=>"foruminfo");
+       if ($controlform) {
+               $controlform->attr("action"=>$cgi->url(-absolute=>1,-path_info=>1).
+               "/$urlname");
+               substinfo($controlform,[_tag=>"input",name=>"author"],value=>
+                       $forum->{authenticated}{user});
+       }               
+       savetree($path_translated."/".$forum->{"indexfile"},$tree,$lockfd);
+       record_statistics($forum,"forum");
+       }
+       forum_redirect($cgi,$forum,$cgi->path_info."/$urlname");
+}
+       
 #---------------------------------------------------------- 
 # База пользователей и права доступа
 #----------------------------------------------------------
@@ -988,12 +1109,14 @@ sub getrights {
                return undef;
        }       
        my $user = $forum->{authenticated}{user};
-       my $dir = $ENV{'PATH_TRANSLATED'};
+       my $dir = $path_translated;
+       $dir =~s/\/$//;
        $dir =~s/\/[^\/]+$// if (!-d $dir);
        my $f;
        my $user_status = "normal";
        LEVEL:
        while (length($dir)) {  
+               print STDERR "Searcghing for perms in $dir\n";
                if (-f "$dir/perms.txt") {
                        open $f,"<","$dir/perms.txt";
                        my $status = undef;
@@ -1015,9 +1138,9 @@ sub getrights {
                        }
                        close $f;
                        last LEVEL if  -f "$dir/.forum";
-                       # Strip last path component.
-                       $dir =~s/\/[^\/]+$// 
                }       
+               # Strip last path component.
+               $dir =~s/\/[^\/]+$// 
        }               
        return $user_status;
 
index 5219f07745c7e681b1d78fce71a33e8e6d0dc72a..011033a3edd4fb49cd5ceb11ba9221c909479324 100644 (file)
@@ -14,18 +14,24 @@ class="login" href="forum?login=1">Войти</a>
 <a href="forum?newforum=1">Создать форум</a>
 <a href="forum?edit=1">Редактировать</a>
 <a href="forum?setrights=1">Права доступа</a>
+<a href="..">Уровень выше</a>
 <H3>Тестовый форум Still Life</h3>
 <div class="annotation">
 <h2 class="title">Корень форума</h2>
-<table border=0><tr><td width="30%"><img src="logo.png"
+<table border=0><tr><td width="30%"><img src="logo.png" width=1 height=1 alt=""
 class="logo"></td><td>Создан <span class="date"></span><br>
-<div class="abstract"></div>
+<div class="abstract"></div></td></tr></table></div>
 <br>
 <div class="forumlist">
 <h2>Подфорумы</h2>
 <div class="forum" >
 <p>
-<a href="#" class=title>Название форума</a> Создан: <span class="date"></span><br>
+<table border="0">
+<tr><td colspan=2">
+<a href="#" class=title>Название форума</a> Создан: <span
+class="date"></span><br></td></tr>
+<tr><td width="30%"><img class="logo" src="#" width="1" height="1"
+alt=""></td><td> 
 <div class="abstract">аннотация форума</div>
 <form class="foruminfo" action="forum" method="GET">
 <input type="submit" name="edit" value="Редакт">
@@ -33,13 +39,13 @@ class="logo"></td><td>Создан <span class="date"></span><br>
 <input type="submit" name="delete" value="Удалить">
 <input type="submit" name="setrights" value="Доступ">
 </form>
+</td></tr></table>
 </p>
 </div>
 </div>
 <div class="topiclist">
 <h2>Темы</h2>
 <div class="topic" >
-<p>
 <a href="#" class=title>Название темы</a> Создана: <span class="date"></span><br>
 <a class="author" href="#">#</a>
 <a class="tlink" name=""></a>
@@ -53,8 +59,7 @@ class="logo"></td><td>Создан <span class="date"></span><br>
 <input type="submit" name="delete" value="Удалить">
 <input type="submit" name="reply" value="Высказаться">
 </form>
-</p>
-
+</div>
 </div>
 </BODY>
 </HTML>
index 883367ab71eaf82731ab48014ce5b84d1971e544..aa451d92819070074c7d9565b03c551a7f581ece 100644 (file)
@@ -36,9 +36,9 @@ name="openid_site" onChange="selectSite(this)">
 <tr><td>Пароль:</td><td><input type="password" name="password"
 size=20></td></tr>
 <tr><td></td><td><input type="checkbox" name="bindip" value="1"> Только с этого IP-адреса
-</td><tr>
+</td></tr>
 <tr><td colspan=2 align=right"><input type=submit name="login"
-value="Вoйти">
+value="Вoйти"></td></tr>
 </table>
 </form>
 </div>
@@ -52,12 +52,12 @@ class="mparent">(в ответ на)</a>
 <tr><td width="20%" valign="top">
 <a href="#" class="author">Автор</a><br>
 <img src="#" class="avatar"><br clear="all">
-Статус: <span class="ap-status"></span></br>
-Email: <span class="ap-email"></span</br>
+Статус: <span class="ap-status"></span><br>
+Email: <span class="ap-email"></span><br>
 </td>
 <td valign="top">
 <div class="mtext">Текст сообщения</div>
-</td><tr>
+</td></tr>
 <tr><td></td><td>
 <form class="msginfo" action="forum" method="GET">
 <input name=id type="hidden">