OSDN Git Service

画像が壊れていたので差し替え。
[fswiki/fswiki.git] / lib / CGI2.pm
1 ###############################################################################
2 #
3 # ¥Ñ¥é¥á¡¼¥¿¤ò¾ï¤ËEUCÊÑ´¹¤¹¤ëCGI¥¯¥é¥¹
4 #
5 ###############################################################################
6 package CGI2;
7 use CGI;
8 use CGI::Session;
9 use vars qw(@ISA);
10 use strict;
11 @ISA = qw(CGI);
12
13 #==============================================================================
14 # ¥³¥ó¥¹¥È¥é¥¯¥¿
15 #==============================================================================
16 sub new {
17         my $class = shift;
18         $ENV{PATH_INFO} =~ s/^$ENV{SCRIPT_NAME}//;
19         my $self  = CGI->new();
20         
21         return bless $self,$class;
22 }
23
24 #==============================================================================
25 # ¥¿¥¤¥à¥¢¥¦¥È¤·¤Æ¤¤¤ë¥»¥Ã¥·¥ç¥ó¤òÇË´þ¤·¤Þ¤¹
26 #==============================================================================
27 sub remove_session {
28         my $self = shift;
29         my $wiki = shift;
30         
31         my $dir   = $wiki->config('session_dir');
32         my $limit = $wiki->config('session_limit');
33         
34         opendir(SESSION_DIR,$dir) or die "$!: $dir";
35         my $timeout = time() - (60 * $limit);
36         while(my $entry = readdir(SESSION_DIR)){
37                 if($entry =~ /^cgisess_/){
38                         my @status = stat("$dir/$entry");
39                         if($status[9] < $timeout){
40                                 unlink("$dir/$entry");
41                         }
42                 }
43         }
44         closedir(SESSION_DIR);
45 }
46
47 #==============================================================================
48 # CGI::Session¥ª¥Ö¥¸¥§¥¯¥È¤ò¼èÆÀ
49 #==============================================================================
50 sub get_session {
51         my $self  = shift;
52         my $wiki  = shift;
53         my $start = shift;
54         
55         # ¥»¥Ã¥·¥ç¥ó³«»Ï¥Õ¥é¥°¤¬Î©¤Ã¤Æ¤ª¤é¤º¡¢Cookie¤Ë¥»¥Ã¥·¥ç¥óID¤¬
56         # Â¸ºß¤·¤Ê¤¤¾ì¹ç¤Ï¥»¥Ã¥·¥ç¥ó¤òÀ¸À®¤·¤Ê¤¤
57         if(!defined($self->{session_cache})){
58                 if((not defined $start or $start!=1) && $self->cookie(-name=>'CGISESSID') eq ""){
59                         return undef;
60                 }
61                 my $dir   = $wiki->config('session_dir');
62                 my $limit = $wiki->config('session_limit');
63                 my $path  = &Util::cookie_path($wiki);
64                 my $session = CGI::Session->new("driver:File",$self,{Directory=>$dir});
65                 my $cookie  = CGI::Cookie->new(-name=>'CGISESSID',-value=>$session->id(),-expires=>"+${limit}m",-path=>$path);
66                 print "Set-Cookie: ".$cookie->as_string()."\n";
67                 $self->{session_cache} = $session;
68                 return $session;
69                 
70         } else {
71                 return $self->{session_cache};
72         }
73 }
74
75 #==============================================================================
76 # ¥Ñ¥é¥á¡¼¥¿¤ò¼èÆÀ¤Þ¤¿¤ÏÀßÄê
77 #==============================================================================
78 sub param {
79         my $self  = shift;
80         my $name  = shift;
81         my $value = shift;
82         
83         # É¬¤ºEUC¤Ø¤ÎÊÑ´¹¤ò¹Ô¤¦
84         if(Util::handyphone()){
85                 if(defined($name)) {
86                         #my @array = map {&Jcode::convert(\$_, "euc")} $self->CGI::param($name,$value);
87                         #return @array;
88                         my @values = $self->CGI::param($name,$value);
89                         my @array = ();
90                         foreach my $value (@values){
91                                 &Jcode::convert(\$value,"euc");
92                                 push(@array,$value);
93                         }
94                         if($#array==0){
95                                 return $array[0];
96                         } elsif($#array!=-1){
97                                 return @array;
98                         } else {
99                                 return undef;
100                         }
101                 } else {
102                         return map { &Jcode::convert(\$_, "euc") } $self->CGI::param();
103                 }
104         } else {
105                 if(defined($name)) {
106                         return $self->CGI::param($name, $value);
107                 } else {
108                         return $self->CGI::param();
109                 }
110         }
111 }
112
113 #==============================================================================
114 # ¸½ºß¤Î¥Ú¡¼¥¸¤ËÁ«°Ü¤¹¤ë¤¿¤á¤ÎURL¤ò¼èÆÀ¤·¤Þ¤¹¡£
115 #==============================================================================
116 sub get_url {
117         my $self  = shift;
118         my $url   = $self->url();
119         my $query = "";
120         foreach my $param ($self->param()){
121                 if($query eq ""){
122                         $query = "?";
123                 } else {
124                         $query .= "&";
125                 }
126                 $query .= &Util::url_encode($param);
127                 $query .= "=";
128                 $query .= &Util::url_encode($self->param($param));
129         }
130         return $url.$query;
131 }
132
133 #==============================================================================
134 # ½ªÎ»»þ¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
135 #==============================================================================
136 sub finalize {
137         my $self = shift;
138         undef($self->{session_cache}->{_SESSION_OBJ});
139         undef($self->{session_cache});
140 }
141
142 1;