[Affelio-cvs 322] CVS update: affelio/apps/diary

Back to archive index

Masato Kikuhara en-sf****@users*****
2005年 6月 30日 (木) 07:57:13 JST


Index: affelio/apps/diary/Diary.pm
diff -u affelio/apps/diary/Diary.pm:1.12 affelio/apps/diary/Diary.pm:1.13
--- affelio/apps/diary/Diary.pm:1.12	Thu Jun 30 02:38:50 2005
+++ affelio/apps/diary/Diary.pm	Thu Jun 30 07:57:13 2005
@@ -153,6 +153,7 @@
 	if (-f $self->{datadir}."$id.stor") {
 		unlink $self->{datadir}."$id.stor";
 	}
+	$self->removeUploadedImage($id);
 }
 
 
@@ -383,7 +384,7 @@
 sub checkAccess {
 	my ($self, $page_name) = @_;
 	unless ($self->{afap}->check_access($page_name)) {
-		$self->errorExit("$page_name: Following error has occured: Permission denied: you have no permission to access this page");
+		$self->errorExit("$page_name: このページにアクセスする権限がありません");
 	}
 }
 
@@ -401,6 +402,7 @@
 print<<ERR;
 <div id="afMain">
 <div class="information">
+<h2>エラー</h2>
 <p>$msg</p>
 </div>
 </div>
@@ -616,6 +618,95 @@
 	return $tmpl->output;
 }
 
+##############################################
+# saveUploadedImage
+##############################################
+
+sub saveUploadedImage {
+	use File::Basename;
+	my ($self, $filename, $id) = @_;
+	
+	$id = $self->getColumn("SELECT MAX(id) FROM $self->{entry_table}") unless ($id);
+	
+	my $afap = $self->{afap};
+       
+	my $mimetype = $afap->{cgi}->uploadInfo($filename)->{'Content-Type'};
+	unless ($mimetype =~ /image\/(bmp|gif|png|jpeg)/) {
+		$self->errorExit('ファイルのアップロード:不正なファイルタイプです');
+	}
+
+	my $file;
+	my $buf;
+	my $filesize = 0;
+	while (my $bytesread = read($filename, $buf, 1024)) {
+		$file .= $buf;
+		$self->errorExit('ファイルのアップロード:ファイルサイズが大きすぎます') if ($filesize++ > 300);
+	}
+
+	my $imgdir = "$self->{datadir}img/";
+	unless (-d $imgdir) {
+		mkdir $imgdir;
+	}
+	my $basedir = $imgdir."$id/";
+	unless (-d $basedir) {
+		mkdir $basedir;
+	}
+
+	fileparse_set_fstype('DOS');
+	my $distfile = $basedir.basename($filename);
+
+	local (*OUT);
+	open(OUT, "> $distfile") or $self->errorExit('ファイルのアップロード:ファイル書き込みに失敗しました');
+	binmode OUT;
+	print OUT $file;
+	close(OUT);
+}
+
+##############################################
+# removeUploadedImage
+##############################################
+
+sub removeUploadedImage {
+	my ($self, $id) = @_;
+	
+	$id = $self->getColumn("SELECT MAX(id) FROM $self->{entry_table}") unless ($id);
+	
+	my $imgdir = "$self->{datadir}img/$id/";
+	if (-d $imgdir) {
+		local (*DIR);
+		opendir(DIR, $imgdir);
+		while (my $file = readdir(DIR)) {
+			unlink ($imgdir.$file) if (-f $imgdir.$file);
+		}
+		closedir(DIR);
+		rmdir $imgdir;
+	}
+}
+
+##############################################
+# getUploadedImages
+##############################################
+
+sub getUploadedImages {
+	my ($self, $id, $width, $height) = @_;
+
+	$width  = "width = \"$width\"" if ($width);
+	$height = "height = \"$height\"" if ($height);
+	
+	my $imgdir = "$self->{datadir}img/$id/";
+	my $ret;
+	
+	local (*DIR);
+	opendir(DIR, $imgdir);
+	while (my $file = readdir(DIR)) {
+		if (-f $imgdir.$file) {
+			$ret .= "<img src=\"show_image.cgi?id=$id&filename=$file\" $width $height /><br />";
+		}
+	}
+	closedir(DIR);
+
+	return $ret ? "<p>$ret</p>" : "";
+}
 
 ##############################################
 # Internal functions
Index: affelio/apps/diary/edit_diary.cgi
diff -u affelio/apps/diary/edit_diary.cgi:1.5 affelio/apps/diary/edit_diary.cgi:1.6
--- affelio/apps/diary/edit_diary.cgi:1.5	Thu Jun 30 02:38:50 2005
+++ affelio/apps/diary/edit_diary.cgi	Thu Jun 30 07:57:13 2005
@@ -12,6 +12,13 @@
 # 編集完了
 if($afap->{cgi}->param('edit')) {
 	$diary->updateEntry($id, $afap->{cgi}->param('title'), $afap->{cgi}->param('contents'));
+	$diary->removeUploadedImage($id);
+	if ($afap->{cgi}->param('filename_1')) {
+		$diary->saveUploadedImage($afap->{cgi}->param('filename_1'), $id);
+	}
+	if ($afap->{cgi}->param('filename_2')) {
+		$diary->saveUploadedImage($afap->{cgi}->param('filename_2'), $id);
+	}
 	print $diary->getRedirection("show_diary.cgi?id=$id");
 	exit;
 }
Index: affelio/apps/diary/external_blog.cgi
diff -u affelio/apps/diary/external_blog.cgi:1.1 affelio/apps/diary/external_blog.cgi:1.2
--- affelio/apps/diary/external_blog.cgi:1.1	Thu Jun 30 02:38:50 2005
+++ affelio/apps/diary/external_blog.cgi	Thu Jun 30 07:57:13 2005
@@ -57,27 +57,24 @@
 
 # parse and output
 use lib 'extlib';
-use XML::RSS::LP;
+use XML::RSS;
 
-my $rss = new XML::RSS::LP;
+my $rss = new XML::RSS;
 $rss->parse($str);
 
 my @entries;
 my @entry_list;
-
-my $default = @{$rss->{prefix_table}->{'#default'}}[0];
-my $dc = @{$rss->{prefix_table}->{'dc'}}[0];
 my $i = 0;
 foreach (@{ $rss->{items} }) {
 	push @entries, {
-		TITLE	=> $_->{$default.'title'},
-		LINK	=> $_->{$default.'link'},
-		CONTENTS=> &escape_html($_->{$default.'description'}),
-		DATE	=> $_->{$dc.'date'},
+		TITLE	=> $_->{'title'},
+		LINK	=> $_->{'link'},
+		CONTENTS=> &escape_html($_->{'description'}),
+		DATE	=> $_->{dc}->{'date'},
 	};
 	push @entry_list, {
-		TITLE	=> $_->{$default.'title'},,
-		LINK	=> $_->{$default.'link'},
+		TITLE	=> $_->{'title'},
+		LINK	=> $_->{'link'},
 	};
 	last if (++$i >= 10);
 }
@@ -86,8 +83,8 @@
 $tmpl->param(
 	WRITABLE	=> $writable,
 	RSS_URL		=> $rssfile,
-	TITLE_MAIN	=> $rss->{channel}->{$default.'title'},
-	LINK_MAIN	=> $rss->{channel}->{$default.'link'},
+	TITLE_MAIN	=> $rss->channel('title'),
+	LINK_MAIN	=> $rss->channel('link'),
 	ENTRIES		=> \@entries,
 	ENTRY_LIST	=> \@entry_list,
 );
Index: affelio/apps/diary/list_diary.cgi
diff -u affelio/apps/diary/list_diary.cgi:1.5 affelio/apps/diary/list_diary.cgi:1.6
--- affelio/apps/diary/list_diary.cgi:1.5	Thu Jun 30 02:38:50 2005
+++ affelio/apps/diary/list_diary.cgi	Thu Jun 30 07:57:13 2005
@@ -50,6 +50,7 @@
 		COMMENT_NO =>	$diary->getCommentsNo($_->{id}),
 		TRACKBACKS =>	$diary->getTrackbacksNo($_->{id}),
 		ID	=>	$_->{id},
+		IMAGES	=>	$diary->getUploadedImages($_->{id}),
 		EDITABLE=>	$edit
 	};
 }
Index: affelio/apps/diary/owner.cgi
diff -u affelio/apps/diary/owner.cgi:1.1 affelio/apps/diary/owner.cgi:1.2
--- affelio/apps/diary/owner.cgi:1.1	Thu Jun 30 02:38:50 2005
+++ affelio/apps/diary/owner.cgi	Thu Jun 30 07:57:13 2005
@@ -19,6 +19,8 @@
 
 my $tmpl = new HTML::Template(filename => './templates/owner.tmpl');
 
+eval { require XML::Parser; } or $tmpl->param(NO_PARSER => 1);
+
 print $diary->get_HTML_header;
 print $tmpl->output;
 print $diary->get_HTML_footer;
Index: affelio/apps/diary/show_diary.cgi
diff -u affelio/apps/diary/show_diary.cgi:1.5 affelio/apps/diary/show_diary.cgi:1.6
--- affelio/apps/diary/show_diary.cgi:1.5	Thu Jun 30 02:38:50 2005
+++ affelio/apps/diary/show_diary.cgi	Thu Jun 30 07:57:13 2005
@@ -18,6 +18,7 @@
 	DAY	=> $entry->{day},
 	TITLE	=> $entry->{title},
 	CONTENTS=> $entry->{contents},
+	IMAGES	=> $diary->getUploadedImages($entry->{id}),
 );
 
 # コメント
Index: affelio/apps/diary/show_image.cgi
diff -u /dev/null affelio/apps/diary/show_image.cgi:1.1
--- /dev/null	Thu Jun 30 07:57:13 2005
+++ affelio/apps/diary/show_image.cgi	Thu Jun 30 07:57:13 2005
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+
+require 'init.pl';
+
+my $id = $afap->{cgi}->param('id') or die;
+my $filename = $afap->{cgi}->param('filename') or die;
+
+my $type = $filename;
+$type =~ s/[^.]+\.(.*)/$1/i;
+$type =~ s/jpg/jpeg/i;
+my $filepath = "$diary->{datadir}img/$id/".$filename;
+
+open(IMG, "$filepath") or die;
+binmode IMG;
+binmode STDOUT;
+print "Content-type: image/$type\n\n";
+print while (<IMG>);
+close(IMG);
Index: affelio/apps/diary/write_comment.cgi
diff -u affelio/apps/diary/write_comment.cgi:1.5 affelio/apps/diary/write_comment.cgi:1.6
--- affelio/apps/diary/write_comment.cgi:1.5	Thu Jun 30 02:38:50 2005
+++ affelio/apps/diary/write_comment.cgi	Thu Jun 30 07:57:13 2005
@@ -7,11 +7,13 @@
 
 $diary->errorExit("存在しない記事です") unless $diary->existsEntry($id);
 
+my $user = $afap->get_visitor_info("nickname");
 
 # コメント確認画面
 if($afap->{cgi}->param('comment_confirm')) {
 	my $tmpl = HTML::Template->new(filename => "./templates/write_comment_confirm.tmpl");
 	$tmpl->param(COMMENT_SHOW => $diary->escape($afap->{cgi}->param('comment')), COMMENT => $afap->{cgi}->param('comment'), ID => $id);
+	$tmpl->param(REQUIRE_NAME => 1) unless ($uname);
 	print $diary->get_HTML_header;
 	print $tmpl->output;
 	print $diary->get_HTML_footer;
@@ -20,9 +22,8 @@
 # コメントをコミット
 elsif($afap->{cgi}->param('comment_commit')) {
 
-    $user = $afap->get_visitor_info("nickname");
     if(!$user){
-	$user = 'ななしさん';
+	$user = $afap->{cgi}->param('visitor_name');
     }else{
     	$url = $afap->get_visitor_info("afid");
 	if ($url =~ /<a href="([^"]*)"/) {
Index: affelio/apps/diary/write_diary.cgi
diff -u affelio/apps/diary/write_diary.cgi:1.6 affelio/apps/diary/write_diary.cgi:1.7
--- affelio/apps/diary/write_diary.cgi:1.6	Thu Jun 30 03:00:43 2005
+++ affelio/apps/diary/write_diary.cgi	Thu Jun 30 07:57:13 2005
@@ -12,6 +12,13 @@
 my $tmpl;
 if($afap->{cgi}->param('submit')) {
 	$diary->addEntry($title, $contents);
+	$diary->removeUploadedImage;
+	if ($afap->{cgi}->param('filename_1')) {
+		$diary->saveUploadedImage($afap->{cgi}->param('filename_1'));
+	}
+	if ($afap->{cgi}->param('filename_2')) {
+		$diary->saveUploadedImage($afap->{cgi}->param('filename_2'));
+	}
 	print $diary->getRedirection('list_diary.cgi');
 	exit;
 }


Affelio-cvs メーリングリストの案内
Back to archive index