65bf2012d530761540412422500717f5ac05b4cf
[freeside.git] / site_perl / CGI.pm
1 package FS::CGI;
2
3 use strict;
4 use vars qw(@EXPORT_OK @ISA);
5 use Exporter;
6 use CGI;
7 use URI::URL;
8 use CGI::Carp qw(fatalsToBrowser);
9 use FS::UID;
10
11 @ISA = qw(Exporter);
12 @EXPORT_OK = qw(header menubar idiot eidiot popurl table);
13
14 =head1 NAME
15
16 FS::CGI - Subroutines for the web interface
17
18 =head1 SYNOPSIS
19
20   use FS::CGI qw(header menubar idiot eidiot popurl);
21
22   print header( 'Title', '' );
23   print header( 'Title', menubar('item', 'URL', ... ) );
24
25   idiot "error message"; 
26   eidiot "error message";
27
28   $url = popurl; #returns current url
29   $url = popurl(3); #three levels up
30
31 =head1 DESCRIPTION
32
33 Provides a few common subroutines for the web interface.
34
35 =head1 SUBROUTINES
36
37 =over 4
38
39 =item header TITLE, MENUBAR
40
41 Returns an HTML header.
42
43 =cut
44
45 sub header {
46   my($title,$menubar)=@_;
47
48   <<END;
49     <HTML>
50       <HEAD>
51         <TITLE>
52           $title
53         </TITLE>
54       </HEAD>
55       <BODY BGCOLOR="#ffffff">
56           <FONT COLOR="#FF0000" SIZE=7>
57             $title
58           </FONT>
59           <BR><BR>
60           $menubar
61       <BR><BR>
62 END
63 }
64
65 =item menubar ITEM, URL, ...
66
67 Returns an HTML menubar.
68
69 =cut
70
71 sub menubar { #$menubar=menubar('Main Menu', '../', 'Item', 'url', ... );
72   my($item,$url,@html);
73   while (@_) {
74     ($item,$url)=splice(@_,0,2);
75     push @html, qq!<A HREF="$url">$item</A>!;
76   }
77   join(' | ',@html);
78 }
79
80 =item idiot ERROR
81
82 Sends headers and an HTML error message.
83
84 =cut
85
86 sub idiot {
87   my($error)=@_;
88   my($cgi)=FS::UID::cgi;
89   if ( $cgi->isa('CGI::Base') ) {
90     no strict 'subs';
91     &CGI::Base::SendHeaders;
92   } else {
93     print $cgi->header;
94   }
95   print <<END;
96 <HTML>
97   <HEAD>
98     <TITLE>Error processing your request</TITLE>
99   </HEAD>
100   <BODY>
101     <CENTER>
102     <H4>Error processing your request</H4>
103     </CENTER>
104     Your request could not be processed because of the following error:
105     <P><B>$error</B>
106     <P>Hit the <I>Back</I> button in your web browser, correct this mistake, and try again.
107   </BODY>
108 </HTML>
109 END
110
111 }
112
113 =item eidiot ERROR
114
115 Sends headers and an HTML error message, then exits.
116
117 =cut
118
119 sub eidiot {
120   idiot(@_);
121   exit;
122 }
123
124 =item popurl LEVEL
125
126 Returns current URL with LEVEL levels of path removed from the end (default 0).
127
128 =cut
129
130 sub popurl {
131   my($up)=@_;
132   my($cgi)=&FS::UID::cgi;
133   my($url)=new URI::URL $cgi->url;
134   my(@path)=$url->path_components;
135   splice @path, 0-$up;
136   $url->path_components(@path);
137   $url->as_string;
138 }
139
140 =item table
141
142 Returns HTML tag for beginning a table.
143
144 =cut
145
146 sub table {
147   "<TABLE BORDER=1>";
148 }
149
150 =back
151
152 =head1 BUGS
153
154 Not OO.
155
156 Not complete.
157
158 =head1 SEE ALSO
159
160 L<CGI>, L<CGI::Base>
161
162 =head1 HISTORY
163
164 subroutines for the HTML/CGI GUI, not properly OO. :(
165
166 ivan@sisd.com 98-apr-16
167 ivan@sisd.com 98-jun-22
168
169 lose the background, eidiot ivan@sisd.com 98-sep-2
170
171 pod ivan@sisd.com 98-sep-12
172
173 $Log: CGI.pm,v $
174 Revision 1.11  1998-11-12 07:43:54  ivan
175 *** empty log message ***
176
177 Revision 1.10  1998/11/12 01:53:47  ivan
178 added table command
179
180 Revision 1.9  1998/11/09 08:51:49  ivan
181 bug squash
182
183 Revision 1.7  1998/11/09 06:10:59  ivan
184 added sub url
185
186 Revision 1.6  1998/11/09 05:44:20  ivan
187 *** empty log message ***
188
189 Revision 1.4  1998/11/09 04:55:42  ivan
190 support depriciated CGI::Base as well as CGI.pm (for now)
191
192 Revision 1.3  1998/11/08 10:50:19  ivan
193 s/CGI::Base/CGI/; etc.
194
195
196 =cut
197
198 1;
199
200