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

Back to archive index

Masato Kikuhara en-sf****@users*****
2005年 7月 2日 (土) 07:47:21 JST


Index: affelio/apps/diary/Diary.pm
diff -u affelio/apps/diary/Diary.pm:1.19 affelio/apps/diary/Diary.pm:1.20
--- affelio/apps/diary/Diary.pm:1.19	Sat Jul  2 04:00:26 2005
+++ affelio/apps/diary/Diary.pm	Sat Jul  2 07:47:21 2005
@@ -138,7 +138,7 @@
 	
 	# send trackback ping by using urls in entry
 	my $id = $self->getColumn("SELECT MAX(id) FROM $self->{entry_table}");
-	$self->send_trackback_ping($id, $title, $contents);
+#	$self->send_trackback_ping($id, $title, $contents);
 }
 
 
@@ -362,6 +362,9 @@
 		CALENDER => $calender, 
 		access_control_URL => $self->{afap}->get_URL("access_control"),
 	);
+	if ($self->{afap}->check_access('write_diary')) {
+		$tmpl->param(EDITABLE => 1);
+	}
 	$header .= $tmpl->output;
 
 	$self->{header_show} = 1;
@@ -399,7 +402,7 @@
 sub checkAccess {
 	my ($self, $page_name) = @_;
 	unless ($self->{afap}->check_access($page_name)) {
-		$self->errorExit("$page_name: このページにアクセスする権限がありません");
+		$self->accessErrorExit("このページにアクセスする権限がありません");
 	}
 }
 
@@ -410,18 +413,43 @@
 sub errorExit {
 	my $self = shift;
 	my $msg  = $self->escape(shift);
+	
+	my $tmpl = new HTML::Template(filename => './templates/error.tmpl');
+	$tmpl->param(MESSAGE => $msg);
+
 	unless ($self->{header_show}) {
 		print "Content-type: text/html; charset=UTF-8\n\n";
 		print $self->{afap}->get_HTML_header($self->{header_title});
 	}
-print<<ERR;
-<div id="afMain">
-<div class="information">
-<h2>エラー</h2>
-<p>$msg</p>
-</div>
-</div>
-ERR
+	print $tmpl->output;
+	print $self->{afap}->get_HTML_footer;
+	exit;
+}
+
+##############################################
+# accessErrorExit
+##############################################
+
+sub accessErrorExit {
+	my $self = shift;
+	my $msg  = $self->escape(shift);
+  	my $affelio_id = $self->{afap}->get_visitor_info("afid");
+ 	my $visitor_type=$self->{afap}->get_visitor_info("type");
+
+	$visitor_type="pb" if ($visitor_type eq "");
+
+	my $tmpl = new HTML::Template(filename => "./templates/access_error.tmpl");
+	$tmpl->param(
+		AFID	=> $affelio_id,
+		VIS_TYPE=> $visitor_type,
+		MESSAGE	=> $msg,
+	);
+
+	unless ($self->{header_show}) {
+		print "Content-type: text/html; charset=UTF-8\n\n";
+		print $self->{afap}->get_HTML_header($self->{header_title});
+	}
+	print $tmpl->output;
 	print $self->{afap}->get_HTML_footer;
 	exit;
 }
@@ -530,6 +558,30 @@
 }
 
 ##############################################
+# sendTrackbackPing
+##############################################
+
+sub sendTrackbackPing {
+	my ($self, $url, $title, $contents, $id) = @_;
+	
+	$id = $self->getColumn("SELECT MAX(id) FROM $self->{entry_table}") unless ($id);
+
+	my %form = (
+		title => $title, 
+		excerpt => $contents, 
+		url => $self->{afap}->get_site_info('web_root')."/apps/$self->{afap}->{install_name}/show_diary.cgi?id=$id",
+		blog_name => $self->{afap}->get_owner_info('nickname')."'s Affelio Diary",
+	);
+	my $req = POST($url, [%form]);
+	my $ua = new LWP::UserAgent;
+	my $res = $ua->request($req);
+	my $str = $res->as_string;
+	if ($str =~ /<error>[^1]*1[^<]*<\/error>/) {
+		$self->errorExit('Trackback Pingの送信に失敗しました'.$str);
+	}
+}
+
+##############################################
 # setRDFURL
 ##############################################
 
@@ -645,11 +697,6 @@
 	
 	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;
@@ -709,8 +756,8 @@
 sub getUploadedImages {
 	my ($self, $id, $width, $height) = @_;
 
-	$width  = "width = \"$width\"" if ($width);
-	$height = "height = \"$height\"" if ($height);
+	$width  = "&w=$width" if ($width);
+	$height = "&h=$height" if ($height);
 	
 	my $imgdir = "$self->{datadir}img/$id/";
 	my $ret;
@@ -720,7 +767,7 @@
 	while (my $file = readdir(DIR)) {
 		if (-f $imgdir.$file) {
 			$ret .= "<a href=\"show_image.cgi?id=$id&filename=$file\" target=\"_blank\">".
-			"<img src=\"show_image.cgi?id=$id&filename=$file\" $width $height border=\"0\" />".
+			"<img src=\"show_image.cgi?id=$id&filename=$file$width$height\" border=\"0\" />".
 			"</a><br />";
 		}
 	}
Index: affelio/apps/diary/edit_diary.cgi
diff -u affelio/apps/diary/edit_diary.cgi:1.7 affelio/apps/diary/edit_diary.cgi:1.8
--- affelio/apps/diary/edit_diary.cgi:1.7	Fri Jul  1 11:06:39 2005
+++ affelio/apps/diary/edit_diary.cgi	Sat Jul  2 07:47:21 2005
@@ -26,14 +26,26 @@
 
 # 編集完了
 if($afap->{cgi}->param('edit')) {
+	# send trackback ping
+	if ($afap->{cgi}->param('tping_url')) {
+		$diary->sendTrackbackPing($afap->{cgi}->param('tping_url'), $title, $contents, $id);
+	}
+	
 	$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);
+	
+	my $filename_1 = $afap->{cgi}->param('filename_1');
+	my $filename_2 = $afap->{cgi}->param('filename_2');
+
+	if ($afap->{cgi}->param('delete_images') or $filename_1 or $filename_2) {
+		$diary->removeUploadedImage($id);
 	}
-	if ($afap->{cgi}->param('filename_2')) {
-		$diary->saveUploadedImage($afap->{cgi}->param('filename_2'), $id);
+	if ($filename_1) {
+		$diary->saveUploadedImage($filename_1, $id);
 	}
+	if ($filename_2) {
+		$diary->saveUploadedImage($filename_2, $id);
+	}
+
 	print $diary->getRedirection("show_diary.cgi?id=$id");
 	exit;
 }
@@ -56,7 +68,8 @@
 else {
 	$tmpl = HTML::Template->new(filename => "./templates/edit_diary_edit.tmpl");
 	my $entry = $diary->getEntry($id);
-	$entry->{contents} =~ s/<br \/>/\n/g;
+	$entry->{contents} =~ s/<br[^>]*>/\n/g;
+	$entry->{contents} =~ s/<\/?a[^>]*>//g;
 	$tmpl->param(
 		ID => $entry->{id},
 		TITLE => $entry->{title}, 
Index: affelio/apps/diary/init.pl
diff -u affelio/apps/diary/init.pl:1.2 affelio/apps/diary/init.pl:1.3
--- affelio/apps/diary/init.pl:1.2	Fri Jul  1 11:06:39 2005
+++ affelio/apps/diary/init.pl	Sat Jul  2 07:47:21 2005
@@ -38,7 +38,7 @@
 our $diary = new Diary($afap);
 
 unless ($afap->check_access("DF_access")) {
-	$diary->errorExit(' あなたはこのページへのアクセス権限がありません ');
+	$diary->accessErrorExit(' あなたはこのページへのアクセス権限がありません ');
 }
 
 ##########################################################################
Index: affelio/apps/diary/list_diary.cgi
diff -u affelio/apps/diary/list_diary.cgi:1.7 affelio/apps/diary/list_diary.cgi:1.8
--- affelio/apps/diary/list_diary.cgi:1.7	Fri Jul  1 11:06:39 2005
+++ affelio/apps/diary/list_diary.cgi	Sat Jul  2 07:47:21 2005
@@ -65,7 +65,7 @@
 		COMMENT_NO =>	$diary->getCommentsNo($_->{id}),
 		TRACKBACKS =>	$diary->getTrackbacksNo($_->{id}),
 		ID	=>	$_->{id},
-		IMAGES	=>	$diary->getUploadedImages($_->{id}),
+		IMAGES	=>	$diary->getUploadedImages($_->{id}, 300, 300),
 		EDITABLE=>	$edit
 	};
 }
Index: affelio/apps/diary/show_diary.cgi
diff -u affelio/apps/diary/show_diary.cgi:1.7 affelio/apps/diary/show_diary.cgi:1.8
--- affelio/apps/diary/show_diary.cgi:1.7	Fri Jul  1 11:06:39 2005
+++ affelio/apps/diary/show_diary.cgi	Sat Jul  2 07:47:21 2005
@@ -33,7 +33,7 @@
 	DAY	=> $entry->{day},
 	TITLE	=> $entry->{title},
 	CONTENTS=> $entry->{contents},
-	IMAGES	=> $diary->getUploadedImages($entry->{id}),
+	IMAGES	=> $diary->getUploadedImages($entry->{id}, 300, 300),
 );
 
 # コメント
Index: affelio/apps/diary/show_image.cgi
diff -u affelio/apps/diary/show_image.cgi:1.2 affelio/apps/diary/show_image.cgi:1.3
--- affelio/apps/diary/show_image.cgi:1.2	Fri Jul  1 11:06:39 2005
+++ affelio/apps/diary/show_image.cgi	Sat Jul  2 07:47:21 2005
@@ -25,9 +25,24 @@
 $type =~ s/jpg/jpeg/i;
 my $filepath = "$diary->{datadir}img/$id/".$filename;
 
-open(IMG, "$filepath") or die;
-binmode IMG;
+my $width  = $afap->{cgi}->param('w');
+my $height = $afap->{cgi}->param('h');
+
 binmode STDOUT;
 print "Content-type: image/$type\n\n";
-print while (<IMG>);
-close(IMG);
+if ($width and $height and (eval 'use Image::Magick; 1;')) {
+	my $image = new Image::Magick;
+	$image->Read(filename => $filepath);
+	my ($w, $h) = $image->Get('columns', 'rows');
+	if ($w > $width or $h > $height) {
+		$image->Resize(geometry => "$widthx$height");
+		$image->Set(quality => 75);
+	}
+	$image->Write(file => \*STDOUT);
+}
+else {
+	open(IMG, "$filepath") or die;
+	binmode IMG;
+	print while (<IMG>);
+	close(IMG);
+}
Index: affelio/apps/diary/show_trackback.cgi
diff -u affelio/apps/diary/show_trackback.cgi:1.5 affelio/apps/diary/show_trackback.cgi:1.6
--- affelio/apps/diary/show_trackback.cgi:1.5	Fri Jul  1 11:06:39 2005
+++ affelio/apps/diary/show_trackback.cgi	Sat Jul  2 07:47:21 2005
@@ -21,7 +21,19 @@
 
 my $tmpl = HTML::Template->new(filename => "./templates/show_trackback.tmpl");
 
-my @trackbacks = $diary->getTrackbacks($id);
+my @ts = $diary->getTrackbacks($id);
+my @trackbacks;
+foreach (@ts) {
+	my ($sec, $min, $hour, $mday, $mon, $year) = localtime($_->{timestamp});
+	$year += 1900; $mon += 1;
+	push @trackbacks, {
+		TITLE		=> $diary->escape($_->{title}),
+		BLOG_NAME	=> $diary->escape($_->{blog_name}),
+		URL		=> $_->{url},
+		EXCERPT		=> $diary->escape($_->{excerpt}),
+		DATE		=> "$year-$mon-$mday",
+	};
+}
 $tmpl->param(PING_URL => $afap->get_site_info("web_root") . "/apps/$diary->{afap}->{install_name}/tb.cgi/$id", TRACKBACKS => \@trackbacks);
 
 print $diary->get_HTML_header;
Index: affelio/apps/diary/style.css
diff -u affelio/apps/diary/style.css:1.3 affelio/apps/diary/style.css:1.4
--- affelio/apps/diary/style.css:1.3	Thu Jun 30 02:38:50 2005
+++ affelio/apps/diary/style.css	Sat Jul  2 07:47:21 2005
@@ -2,7 +2,7 @@
 	float: left;
 	width: 20%;
 	font-size: small;
-	border-right: 1px solid #D7D7D7; 
+/*	border-right: 1px solid #D7D7D7; */ 
 	padding: 1.0em 1.0em 1.0em 0.5em; 
 	padding: 5px 5px 5px 5px;
 }
Index: affelio/apps/diary/tb.cgi
diff -u affelio/apps/diary/tb.cgi:1.1 affelio/apps/diary/tb.cgi:1.2
--- affelio/apps/diary/tb.cgi:1.1	Sun Jun 26 13:08:34 2005
+++ affelio/apps/diary/tb.cgi	Sat Jul  2 07:47:21 2005
@@ -21,7 +21,7 @@
 			   cgi => $cgi);
 
 my $diary = new Diary($afap);
-my $datadir = $afap->get_userdata_dir().'xml';
+my $datadir = $afap->get_userdata_dir;
 #-------------
 
 my $DataDir = $datadir;
Index: affelio/apps/diary/write_diary.cgi
diff -u affelio/apps/diary/write_diary.cgi:1.8 affelio/apps/diary/write_diary.cgi:1.9
--- affelio/apps/diary/write_diary.cgi:1.8	Fri Jul  1 11:06:39 2005
+++ affelio/apps/diary/write_diary.cgi	Sat Jul  2 07:47:21 2005
@@ -26,7 +26,15 @@
 
 my $tmpl;
 if($afap->{cgi}->param('submit')) {
+	# send trackback ping
+	if ($afap->{cgi}->param('tping_url')) {
+		$diary->sendTrackbackPing($afap->{cgi}->param('tping_url'), $title, $contents);
+	}
+	
+	# add entry
 	$diary->addEntry($title, $contents);
+	
+	# update images
 	$diary->removeUploadedImage;
 	if ($afap->{cgi}->param('filename_1')) {
 		$diary->saveUploadedImage($afap->{cgi}->param('filename_1'));
@@ -34,6 +42,7 @@
 	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