lilalo
changeset 101:c41cc9a4b5ea
* Пофиксил ошибку с неправильной кодировкой mywi-хинтов.
* Подготовил к переходу в иерархию /l3/
** Исправил пути для стилей,
** Забацал красивый l3-cgi-lite
l3-cgi-lite пока что не доделан до нужного уровня,
но я его скоро дорисую.
Уже сейчас это намного более качественный скрипт
через уродский l3-cgi
Он, конечно, поработал в свое время,
но лучше его заменить l3-cgi-lite
Из функционала добавилось:
* Кэширование страниц в html
* Навигация по каталогам
* Навигационная строка в журнале сверху
* Подготовил к переходу в иерархию /l3/
** Исправил пути для стилей,
** Забацал красивый l3-cgi-lite
l3-cgi-lite пока что не доделан до нужного уровня,
но я его скоро дорисую.
Уже сейчас это намного более качественный скрипт
через уродский l3-cgi
Он, конечно, поработал в свое время,
но лучше его заменить l3-cgi-lite
Из функционала добавилось:
* Кэширование страниц в html
* Навигация по каталогам
* Навигационная строка в журнале сверху
author | devi |
---|---|
date | Sat Jun 24 22:53:37 2006 +0300 (2006-06-24) |
parents | 2c00c61f2d7b |
children | 6fce4641575b |
files | l3-cgi-lite l3-frontend l3.css l3config.pm labmaker.conf ug2db |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/l3-cgi-lite Sat Jun 24 22:53:37 2006 +0300 1.3 @@ -0,0 +1,174 @@ 1.4 +#!/usr/bin/perl 1.5 + 1.6 +use strict; 1.7 +use CGI qw(:standard); 1.8 +use utf8; 1.9 + 1.10 +BEGIN { 1.11 + chdir("/home/devi/cvs/lilalo"); 1.12 + require l3config; 1.13 + l3config::init_config(); 1.14 +}; 1.15 + 1.16 +sub path_is_correct($); 1.17 +sub error($); 1.18 +sub remove_extra_slashes_from($); 1.19 +sub print_header($); 1.20 +sub print_footer; 1.21 +sub nav_bar; 1.22 + 1.23 +my $print=""; 1.24 +my $path = $ENV{PATH_INFO}; 1.25 +remove_extra_slashes_from($path); 1.26 + 1.27 +my $real_path = $l3config::Config{"backend_datadir"} ; 1.28 +my $cgi_path = $l3config::Config{"cgi_path"} ; 1.29 +my $style_files = $l3config::Config{"frontend_files"} ; 1.30 +my $frontend_css = $l3config::Config{"frontend_css"} ; 1.31 +my $data_file = "data.xml"; 1.32 + 1.33 +path_is_correct($path) 1.34 + or error ("Путь $path содержит недопустимые символы или комбинации символов."); 1.35 + 1.36 +$real_path .= $path; 1.37 +remove_extra_slashes_from($real_path); 1.38 + 1.39 +# Чувак, ты хотел бы посмотреть на журнал $path 1.40 +# Он должен находиться в каталоге $real_path файловой системы\n"; 1.41 + 1.42 +(-d $real_path) 1.43 + or error("Каталог <b>$real_path</b> не существует. Проверьте, пожалуйста, URL\n"); 1.44 + 1.45 +if (-e $real_path."/$data_file") { 1.46 + 1.47 +# В каталоге есть файл $data_file 1.48 +# Отлично! Сейчас будем показывать журнал 1.49 + 1.50 +# Если существуют html и xml файлы, 1.51 +# html файл новее чем xml, 1.52 +# и CGI-скрипту не передано дополнительных параметров, 1.53 +# используем html файл, иначе перегенируем его 1.54 + 1.55 + unless ( -e "$real_path/$data_file" 1.56 + && -e "$real_path/index.html" 1.57 + && (stat("$real_path/index.html"))[9] > (stat("$real_path/$data_file"))[9] ) { 1.58 + 1.59 + my $l3_frontend = "/home/devi/cvs/lilalo/l3-frontend --backend_datafile $real_path/$data_file --output $real_path/index.html"; 1.60 + system($l3_frontend) == 0 1.61 + or error("Файл журнала найден, но возникла ошибка при его обработке:<br/> $!"); 1.62 + $print .= "(перегенирован)<br/>"; 1.63 + } 1.64 + 1.65 + { 1.66 + local $/; 1.67 + open(HTML, "<:utf8", "$real_path/index.html"); 1.68 + my $html = <HTML>; 1.69 + 1.70 +# Добавим в начало документа навигационную строку 1.71 + my $nav_bar = nav_bar; 1.72 + $html =~ s/(<body[^>]*>)/$1$nav_bar/; 1.73 + 1.74 + $print .= $html; 1.75 + close(HTML); 1.76 + } 1.77 + 1.78 +} 1.79 +else { 1.80 + 1.81 +# В этом каталоге нет файла data.xml 1.82 +# Но в нём должны быть подкаталоги! 1.83 +# Если и их тут нет, то тут вообще делать нечего 1.84 + 1.85 + $print .= nav_bar; 1.86 + 1.87 + my @dirs = glob("$real_path/*"); 1.88 + my $folder_link = "$cgi_path/$path"; 1.89 + remove_extra_slashes_from($folder_link); 1.90 + 1.91 + $folder_link =~ s@/[^\/]*/?$@@; 1.92 + if ($folder_link) { 1.93 + $print .= "<img src='$style_files/folder.up.gif'/><a href='$folder_link'>..</a><br/>"; 1.94 + } 1.95 + 1.96 + for my $dir (@dirs) { 1.97 + next unless (-d $dir); 1.98 + my ($folder_name) = $dir =~ m@.*/(.*)@; 1.99 + $folder_link = "$cgi_path/$path/$folder_name"; 1.100 + $folder_link =~ s@//@/@g; 1.101 + $print .= "<img src='$style_files/folder.gif'/><a href='$folder_link'>$folder_name</a><br/>"; 1.102 + } 1.103 + 1.104 + $print = print_header("LiLaLo -- ".remove_extra_slashes_from("$cgi_path/$path")) 1.105 + .$print 1.106 + .print_footer; 1.107 +}; 1.108 + 1.109 +binmode STDOUT, ":utf8"; 1.110 +print header(-charset => "utf-8"); 1.111 +print $print; 1.112 +exit(0); 1.113 + 1.114 +#---------------------------------------------- 1.115 + 1.116 + 1.117 +sub error($) 1.118 +{ 1.119 +my $message = $_[0]; 1.120 + 1.121 +binmode STDOUT, ":utf8"; 1.122 +print header(-charset => "utf-8"); 1.123 + 1.124 +my $print = "<h2>Извините, произошла ошибка</h2>"; 1.125 +$print .= $message; 1.126 + 1.127 +print $print; 1.128 +exit(0); 1.129 +} 1.130 + 1.131 + 1.132 +sub path_is_correct($) 1.133 +{ 1.134 + my $path = $_[0]; 1.135 + return 0 if $path =~ m@/../@; 1.136 + return 0 unless $path =~ m@^[a-zA-Z0-9./\@\-]*$@; 1.137 + return 1; 1.138 +} 1.139 + 1.140 +sub remove_extra_slashes_from($) 1.141 +{ 1.142 + while ($_[0] =~ s@//@/@g) {1;}; 1.143 + return $_[0]; 1.144 +} 1.145 + 1.146 +sub print_header($) 1.147 +{ 1.148 + my $title = $_[0]; 1.149 + "<html>" 1.150 + ."<head>" 1.151 + ."<meta content='text/html; charset=utf-8' http-equiv='Content-Type' />" 1.152 + ."<link rel='stylesheet' href='$frontend_css' type='text/css'/>" 1.153 + ."<title>$title</title>" 1.154 + ."</head>" 1.155 +} 1.156 + 1.157 +sub print_footer() 1.158 +{ 1.159 + "</html>"; 1.160 +} 1.161 + 1.162 +sub nav_bar() 1.163 +{ 1.164 + my $nav_bar=""; 1.165 + my $skip_first=1; 1.166 + my $current_path=""; 1.167 + for my $path_part (split("/", remove_extra_slashes_from("$cgi_path/$path"))) { 1.168 + if ($skip_first) { 1.169 + $skip_first--; 1.170 + next; 1.171 + } 1.172 + $current_path .= "/$path_part"; 1.173 + $nav_bar .= "/<a href='$current_path'>$path_part</a>"; 1.174 + } 1.175 + return "<table class='nav_bar' cellpadding='0' cellspacing='0' width='100%'><tr><td>$nav_bar</td></tr></table>"; 1.176 +} 1.177 +
2.1 --- a/l3-frontend Wed Jun 14 21:37:22 2006 +0300 2.2 +++ b/l3-frontend Sat Jun 24 22:53:37 2006 +0300 2.3 @@ -174,16 +174,18 @@ 2.4 2.5 sub mywi_client 2.6 { 2.7 - return ""; 2.8 + #return ""; 2.9 my $query = $_[0]; 2.10 my $mywi; 2.11 2.12 open_mywi_socket; 2.13 if ($Mywi_Socket) { 2.14 + binmode ":utf8", $Mywi_Socket; 2.15 local $| = 1; 2.16 local $/ = ""; 2.17 print $Mywi_Socket $query."\n"; 2.18 $mywi = <$Mywi_Socket>; 2.19 + utf8::decode($mywi); 2.20 $mywi = "" if $mywi =~ /nothing app/; 2.21 } 2.22 close_mywi_socket; 2.23 @@ -1049,6 +1051,7 @@ 2.24 .$SetCursorPosition_JS 2.25 ."</script>" 2.26 ."<body onLoad='setCursorPosition(document.all.mytextarea, $cursor_position, $cursor_position+10)'>" 2.27 + ."<div class='body'>" 2.28 ."<h1>Журнал лабораторных работ. Правка</h1>" 2.29 ."<form>" 2.30 ."<textarea rows='30' cols='100' wrap='off' id='mytextarea'>$result</textarea>" 2.31 @@ -1056,6 +1059,7 @@ 2.32 ."</form>" 2.33 ."<p>Внимательно правим, потом сохраняем</p>" 2.34 ."<p>Строки, начинающиеся символами #l3: можно трогать, только если точно знаешь, что делаешь</p>" 2.35 + ."</div>" 2.36 ."</body>" 2.37 ."</html>"; 2.38 2.39 @@ -1205,6 +1209,7 @@ 2.40 <title>$title</title> 2.41 </head> 2.42 <body> 2.43 + <div class='body'> 2.44 <script> 2.45 $Html_JavaScript 2.46 </script> 2.47 @@ -1289,7 +1294,7 @@ 2.48 2.49 sub print_footer_html 2.50 { 2.51 - return "</body>\n</html>\n"; 2.52 + return "</div></body>\n</html>\n"; 2.53 } 2.54 2.55
3.1 --- a/l3.css Wed Jun 14 21:37:22 2006 +0300 3.2 +++ b/l3.css Sat Jun 24 22:53:37 2006 +0300 3.3 @@ -313,4 +313,25 @@ 3.4 } 3.5 3.6 3.7 +.nav_bar { 3.8 + font-size: 80%; 3.9 + color: #222222; 3.10 + background-color: #eeeeee; 3.11 +} 3.12 3.13 +/* 3.14 +.nav_bar a { 3.15 + color: #222222; 3.16 + padding-left: 1pt; 3.17 + padding-right: 1pt; 3.18 +} 3.19 +*/ 3.20 +body { 3.21 + margin:0; 3.22 + padding:0 0 15px 0; 3.23 + 3.24 +} 3.25 +.body { 3.26 + margin: 10; 3.27 + padding: 10; 3.28 +}
4.1 --- a/l3config.pm Wed Jun 14 21:37:22 2006 +0300 4.2 +++ b/l3config.pm Sat Jun 24 22:53:37 2006 +0300 4.3 @@ -54,7 +54,9 @@ 4.4 "output" => "/tmp/report.html", 4.5 "output_mask" => "INDEX", 4.6 "output_format" => "html", 4.7 - "frontend_css" => "/l3/l3.css", 4.8 + "cgi_path" => "/l3", 4.9 + "frontend_files" => "/l3files", 4.10 + "frontend_css" => "/l3files/l3.css", 4.11 "l3shot_path" => "/l3shot/", 4.12 "l3shot_suffix" => ".png", 4.13 "frontend_google_ico" => "/l3/google.ico",