1 |
dpavlin |
1.1 |
<? |
2 |
|
|
/* |
3 |
|
|
* Phormation |
4 |
|
|
* - A library of PHP code to make development of database-driven |
5 |
|
|
* html forms easy and quick |
6 |
|
|
* |
7 |
|
|
* Copyright (C) 2000 Jason D. Hildebrand |
8 |
|
|
* PeaceWorks Computer Consulting |
9 |
|
|
* |
10 |
|
|
* jason@peaceworks.ca |
11 |
|
|
* |
12 |
|
|
* This program is free software; you can redistribute it and/or modify |
13 |
|
|
* it under the terms of the GNU General Public License as published by |
14 |
|
|
* the Free Software Foundation; either version 2 of the License, or |
15 |
|
|
* (at your option) any later version. |
16 |
|
|
* |
17 |
|
|
* This program is distributed in the hope that it will be useful, |
18 |
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
19 |
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
20 |
|
|
* GNU General Public License for more details. |
21 |
|
|
* |
22 |
|
|
* You should have received a copy of the GNU General Public License |
23 |
|
|
* along with this program; if not, write to the Free Software |
24 |
|
|
* Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. |
25 |
|
|
*/ |
26 |
|
|
|
27 |
ravilov |
1.11 |
if (!isset($phescape)) $phescape = true; |
28 |
|
|
|
29 |
dpavlin |
1.3 |
include_once( "$phormationdir/dbi.php" ); |
30 |
dpavlin |
1.1 |
|
31 |
|
|
// these variables will be preserved, as long as makephself is used to |
32 |
|
|
// construct the URLs |
33 |
|
|
$sessionvars[] = "pagenum"; |
34 |
|
|
$sessionvars[] = "sort"; |
35 |
|
|
$sessionvars[] = "action"; |
36 |
|
|
$sessionvars[] = "record_id"; |
37 |
|
|
|
38 |
|
|
|
39 |
|
|
// this function constructs a URL for the display table page, and |
40 |
|
|
// automatically adds the variables listed above, so that they are preserved. |
41 |
|
|
function makephpself( $params ) { |
42 |
|
|
global $PHP_SELF; |
43 |
|
|
global $sessionvars; |
44 |
|
|
|
45 |
|
|
//echo $params . "<BR>"; |
46 |
|
|
|
47 |
|
|
for( $i = 0; !empty( $sessionvars[$i] ); $i++ ) { |
48 |
|
|
$varname = $sessionvars[$i]; |
49 |
|
|
global $$varname; |
50 |
|
|
} |
51 |
|
|
|
52 |
|
|
$pairs = split( "&", $params ); |
53 |
|
|
for( $i = 0; !empty( $pairs[$i] ); $i++ ) { |
54 |
|
|
$varname = strtok( $pairs[$i], "=" ); |
55 |
|
|
$value = strtok( "=" ); |
56 |
|
|
//echo "Var = $varname, Value = $value <BR>"; |
57 |
|
|
$vars[$varname] = $value; |
58 |
|
|
} |
59 |
|
|
|
60 |
|
|
$url = $PHP_SELF . "?"; |
61 |
|
|
for( $i = 0; !empty( $sessionvars[$i] ); $i++ ) { |
62 |
|
|
$varname = $sessionvars[$i]; |
63 |
|
|
if( $vars[ $varname ] != "" ) { |
64 |
|
|
$url .= $varname . '=' . $vars[ $varname ] . '&'; |
65 |
|
|
} else if( $$varname != "" ) { |
66 |
|
|
$url .= $varname . '=' . $$varname . '&'; |
67 |
|
|
} |
68 |
|
|
} |
69 |
|
|
return( $url ); |
70 |
|
|
} |
71 |
|
|
|
72 |
|
|
function displayresult( $result, $fields, $names, $params ) |
73 |
|
|
{ |
74 |
|
|
global $INDEXCOLOUR1, $INDEXCOLOUR2, $TABLEHEADERCOLOUR, $pagenum; |
75 |
|
|
global $phormationdir; |
76 |
|
|
|
77 |
|
|
$editfield = $params["editfield"]; |
78 |
|
|
$key = $params["key"]; |
79 |
|
|
$title = $params["title"]; |
80 |
|
|
$editlink = $params["editlink"]; |
81 |
dpavlin |
1.2 |
if (strchr($editlink,'?')) { |
82 |
|
|
$editlink.="&"; |
83 |
|
|
} else { |
84 |
|
|
$editlink.="?"; |
85 |
|
|
} |
86 |
dpavlin |
1.1 |
$pagelength = $params["pagelength"]; |
87 |
|
|
|
88 |
|
|
$colour[0] = empty( $INDEXCOLOUR1 ) ? "#e6e6e6" : $INDEXCOLOUR1; |
89 |
|
|
$colour[1] = empty( $INDEXCOLOUR2 ) ? "#d0d0d0" : $INDEXCOLOUR2; |
90 |
|
|
$tableheadercol = empty( $TABLEHEADERCOLOUR ) ? "#a0a0e0" : $TABLEHEADERCOLOUR; |
91 |
|
|
$numrows = dbi_numrows( $result ); |
92 |
|
|
if( $numrows == 0 ) { |
93 |
|
|
echo "There are <B>no records</B> in the database. Click <B>Create New Record</B> to add records.<P>"; |
94 |
|
|
return; |
95 |
|
|
} |
96 |
|
|
|
97 |
|
|
if( empty( $pagenum ) ) { |
98 |
|
|
$pagenum = 0; |
99 |
|
|
} |
100 |
|
|
if( empty( $pagelength ) ) { |
101 |
|
|
$pagelength = 200; |
102 |
|
|
} |
103 |
|
|
|
104 |
|
|
$startrecord = $pagelength * $pagenum; |
105 |
|
|
$endrecord = min( $pagelength * ( $pagenum + 1 ) - 1, $numrows - 1 ); |
106 |
|
|
$numpages = ceil( $numrows / $pagelength ); |
107 |
ravilov |
1.11 |
|
108 |
|
|
$rows = array(); |
109 |
|
|
for ($i = $startrecord; $i <= $endrecord; $i++) $rows[$i] = dbi_fetch_array($result, $i); |
110 |
|
|
|
111 |
dpavlin |
1.1 |
if( $pagenum > 0 ) { |
112 |
|
|
echo '<a href="' . makephpself( "pagenum=" . ($pagenum - 1) ) . '">Previous Page</A> - '; |
113 |
|
|
} else { |
114 |
|
|
echo 'Previous Page - '; |
115 |
|
|
} |
116 |
|
|
echo 'Viewing records ' . ( $startrecord + 1 ) . ' to ' . ( $endrecord + 1 ) ; |
117 |
|
|
echo ' of ' . $numrows . ' (Page ' . ( $pagenum + 1 ) . ' of ' . $numpages . ')'; |
118 |
|
|
if( $pagenum < $numpages - 1 ) { |
119 |
|
|
echo ' - <a href="' . makephpself( "pagenum=" . ($pagenum + 1) ) . '">Next Page</A>'; |
120 |
|
|
} else { |
121 |
|
|
echo ' - Next Page'; |
122 |
|
|
} |
123 |
ravilov |
1.11 |
if ($params["quickjump"]) { |
124 |
|
|
$tmp = array(); |
125 |
|
|
for( $i = $startrecord; $i <= $endrecord; $i += 1 ) { |
126 |
|
|
if (empty($rows[$i][$params["quickjump"]])) continue; |
127 |
|
|
array_push($tmp, '<OPTION VALUE="#' . sprintf("%03d", $i) . '">' . |
128 |
|
|
HTMLSpecialChars($rows[$i][$params["quickjump"]]) . '</OPTION>'); |
129 |
|
|
} |
130 |
|
|
if (count($tmp) > 0) { |
131 |
|
|
array_unshift($tmp, "<OPTION VALUE=\"\"> </OPTION>"); |
132 |
|
|
echo "\n<FORM><SMALL><FONT FACE=\"sans-serif\">QuickJump:</FONT> <SELECT STYLE=\"font-size:12px\" ONCHANGE=\"if(this.value)location.href=this.value;\">" . implode("", $tmp) . "</SELECT></FORM></SMALL>"; |
133 |
|
|
} |
134 |
|
|
} |
135 |
dpavlin |
1.1 |
echo '<P>'; |
136 |
|
|
|
137 |
|
|
echo '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=3 BGCOLOR="' . $tableheadercol .'" FGCOLOR="#FFFFFF">'; |
138 |
|
|
echo '<TH bgcolor="#ffffff"> </TH>'; |
139 |
|
|
echo '<TH bgcolor="#ffffff"> </TH>'; |
140 |
|
|
for( $i = 0; ! empty( $names[$i] ); $i += 1 ) { |
141 |
ravilov |
1.4 |
if ( empty ( $fields[$i] ) ) continue; |
142 |
dpavlin |
1.1 |
echo '<TH bgcolor=' . $tableheadercol . '><A HREF="' . makephpself( "pagenum=0&sort=" . $fields[$i] ) . '">' . $names[$i] . '</A></TH>'; |
143 |
|
|
} |
144 |
|
|
$row = 0; |
145 |
|
|
for( $i = $startrecord; $i <= $endrecord; $i += 1 ) { |
146 |
ravilov |
1.11 |
$array = $rows[$i]; |
147 |
dpavlin |
1.1 |
echo "<TR BGCOLOR=" . $colour[ $i % 2 ] . ">"; |
148 |
ravilov |
1.11 |
echo '<TD bgcolor="#ffffff" VALIGN=top>'; |
149 |
dpavlin |
1.1 |
echo '<a href="' . makephpself( "action=delete&record_id=" . $array[$key] ) . '" onClick="return confirmdelete()">'; |
150 |
|
|
echo '<img src="' . $phormationdir . '/delete.gif" alt="delete record" border="0"></a></TD>'; |
151 |
ravilov |
1.11 |
echo '<TD bgcolor="#ffffff" VALIGN=top><a href="' . $editlink . 'record_id=' . $array[$key] . '">'; |
152 |
dpavlin |
1.1 |
echo '<img src="' . $phormationdir . '/edit.gif" alt="edit record" border="0"></a></TD>'; |
153 |
ravilov |
1.4 |
for( $j = 0; ! empty( $names[$j] ); $j += 1 ) { |
154 |
|
|
if ( empty ( $fields[$j] ) ) continue; |
155 |
ravilov |
1.11 |
echo "<TD VALIGN=top>\n"; |
156 |
|
|
if ($params["quickjump"] && $j == 0) echo '<A NAME="' . sprintf("%03d", $i) . '"></A>'; |
157 |
ravilov |
1.4 |
$vals = array(); |
158 |
|
|
$flds = split(",", $fields[$j]); |
159 |
|
|
while (list($k, $v) = each($flds)) { |
160 |
|
|
$x = $array[trim($v)]; |
161 |
ravilov |
1.11 |
# if (!$x) $x = $array[$j + 1]; |
162 |
ravilov |
1.4 |
array_push($vals, $x); |
163 |
dpavlin |
1.1 |
} |
164 |
ravilov |
1.4 |
$vals = implode(", ", $vals); |
165 |
ravilov |
1.11 |
if ($phescape) $vals = htmlspecialchars($vals); |
166 |
ravilov |
1.7 |
if (!empty($params["display_hook"])) |
167 |
|
|
$vals = $params["display_hook"]($fields[$j], $vals); |
168 |
ravilov |
1.12 |
if ($vals == "") $vals = " "; |
169 |
ravilov |
1.7 |
echo "$vals</TD>\n"; |
170 |
dpavlin |
1.1 |
} |
171 |
|
|
echo "</TR>\n"; |
172 |
|
|
} |
173 |
|
|
echo "</TABLE>\n"; |
174 |
|
|
} |
175 |
|
|
|
176 |
|
|
|
177 |
|
|
function table_index( $fields, $names, $params ) |
178 |
|
|
{ |
179 |
|
|
global $conn, $sort, $action, $record_id; |
180 |
|
|
|
181 |
|
|
// get params |
182 |
|
|
$title = $params["title"]; |
183 |
ravilov |
1.11 |
$charset = $params["charset"]; |
184 |
dpavlin |
1.1 |
|
185 |
|
|
if( $action == "delete" ) { |
186 |
|
|
// if a record should be deleted |
187 |
|
|
if( !empty( $params["predelete_hook"] ) ) { |
188 |
|
|
// call the hook function if it exists, |
189 |
|
|
$params["predelete_hook"]( $record_id ); |
190 |
|
|
} |
191 |
ravilov |
1.5 |
$query = $params["delquery"] . "'" . $record_id . "'"; |
192 |
dpavlin |
1.1 |
dbi_exec( $conn, $query ); |
193 |
|
|
header( "Location: " . makephpself( 'action=nothing' ) ); |
194 |
|
|
return; |
195 |
|
|
} |
196 |
|
|
|
197 |
|
|
?> |
198 |
|
|
<HTML> |
199 |
|
|
<HEAD> |
200 |
ravilov |
1.11 |
<? if ($charset): ?><META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=<? echo $charset ?>"><? endif; ?> |
201 |
dpavlin |
1.1 |
<TITLE><? echo $title ?></TITLE> |
202 |
|
|
</HEAD> |
203 |
|
|
<BODY BGCOLOR="#FFFFFF" LINK="#000090" VLINK="#000090" ALINK="#FF0000" > |
204 |
ravilov |
1.4 |
<script type="text/javascript"> |
205 |
|
|
<!-- // begin |
206 |
dpavlin |
1.1 |
function confirmdelete() { |
207 |
|
|
$result = confirm( "Do you really want to delete this record?" ); |
208 |
|
|
if( $result ) { |
209 |
|
|
document.location.replace( "<? echo makephpself( 'action=delete&record_id=' . $record_id ) ?>" ); |
210 |
|
|
} else { |
211 |
|
|
return false; |
212 |
|
|
} |
213 |
|
|
} |
214 |
ravilov |
1.4 |
// end --> |
215 |
dpavlin |
1.1 |
</script> |
216 |
ravilov |
1.10 |
<h1><?= $title ?></h1> |
217 |
dpavlin |
1.1 |
<? |
218 |
|
|
if( function_exists( html_before_table ) ) { |
219 |
|
|
html_before_table(); |
220 |
|
|
} |
221 |
|
|
if( ! empty( $params["maindesc"] ) ) { |
222 |
|
|
echo '<a href="' . $params["mainlink"] . '">' . $params["maindesc"] . '</A> - '; |
223 |
|
|
} |
224 |
|
|
if( ! empty( $params["backdesc"] ) ) { |
225 |
|
|
echo '<a href="' . $params["backlink"] . '">' . $params["backdesc"] . '</A> - '; |
226 |
|
|
} |
227 |
|
|
if( ! empty( $params["searchdesc"] ) ) { |
228 |
|
|
echo '<a href="' . $params["searchlink"] . '">' . $params["searchdesc"] . '</A> - '; |
229 |
|
|
} |
230 |
|
|
echo '<a href="' . $params["newlink"] . '">Create New Record</A>'; |
231 |
|
|
if( !empty( $params["addmultiplelink"] ) ) { |
232 |
|
|
echo ' - <a href="' . $params["addmultiplelink"] . '">Create Several Records</A>'; |
233 |
|
|
} |
234 |
ravilov |
1.9 |
if (!empty($params["back"])) { |
235 |
|
|
echo ' - <a href="'.$params["back"].'">Back to Index</a>'; |
236 |
|
|
} |
237 |
dpavlin |
1.1 |
echo "<P>"; |
238 |
|
|
echo $params["instr"]; |
239 |
|
|
|
240 |
|
|
if( $sort == "" ) { |
241 |
|
|
$sortfield = $params["defaultsort"]; |
242 |
|
|
} else { |
243 |
|
|
$sortfield = $sort; |
244 |
|
|
} |
245 |
|
|
$query = $params["query"] . " order by $sortfield"; |
246 |
|
|
$result = dbi_exec( $conn, $query ); |
247 |
|
|
if( ! $result ) { |
248 |
|
|
echo "Error executing database query.<BR>"; |
249 |
|
|
dbi_error( $conn ); |
250 |
|
|
return; |
251 |
|
|
} |
252 |
|
|
displayresult( $result, $fields, $names, $params ); |
253 |
|
|
?> |
254 |
|
|
</BODY> |
255 |
|
|
</HTML> |
256 |
|
|
<? |
257 |
|
|
} |
258 |
|
|
?> |