/
listandsearch.php
454 lines (370 loc) · 13.7 KB
1
2
<?php
3
require_once 'operations.php';
4
5
6
7
8
9
require_once 'database.php';
require_once 'common.php';
$queryfuncs = array();
10
11
12
13
14
15
function render_extension_list($wantname, $query)
{
$count = db_num_rows($query);
if (($wantname) and ($count > 1))
write_error('(Unexpected number of results from database!)');
16
print("Extensions:\n<ul>\n");
17
18
19
20
21
22
23
24
while ( ($row = db_fetch_array($query)) != false )
{
$url = get_alext_url($row['extname']);
print(" <li><a href='$url'>${row['extname']}</a>\n");
} // while
print("</ul>\n<p>Total results: $count\n");
} // render_extension_list
25
26
27
28
29
30
function render_token_list($wantname, $query)
{
$count = db_num_rows($query);
if (($wantname) and ($count > 1))
write_error('(Unexpected number of results from database!)');
31
print("Tokens:\n<ul>\n");
32
33
34
35
36
37
38
39
40
41
while ( ($row = db_fetch_array($query)) != false )
{
$url = get_alext_url($row['extname']);
$hex = sprintf("0x%X", $row['tokenval']); // !!! FIXME: faster way to do this?
print(" <li>${row['tokenname']} ($hex)");
print(" from <a href='$url'>${row['extname']}</a>\n");
} // while
print("</ul>\n<p>Total results: $count\n");
} // render_token_list
42
43
44
45
46
47
48
function render_entrypoint_list($wantname, $query)
{
$count = db_num_rows($query);
if (($wantname) and ($count > 1))
write_error('(Unexpected number of results from database!)');
49
print("Entry points:\n<ul>\n");
50
51
52
53
54
55
56
57
58
59
while ( ($row = db_fetch_array($query)) != false )
{
$url = get_alext_url($row['extname']);
print(" <li>${row['entrypointname']} ");
print(" from <a href='$url'>${row['extname']}</a>\n");
} // while
print("</ul>\n<p>Total results: $count\n");
} // render_entrypoint_list
60
61
62
$queryfuncs['extension'] = 'find_extension';
function find_extension($wantname)
{
63
$sql = 'select extname from alextreg_extensions' .
64
' where (1=1)';
65
66
if (!is_authorized_vendor())
67
$sql .= " and (public=1)";
68
69
70
71
if ($wantname)
{
$sqlwantname = db_escape_string($wantname);
72
$sql .= " and (extname='$sqlwantname')";
73
74
75
76
77
78
} // if
$query = do_dbquery($sql);
if ($query == false)
return; // error output is handled in database.php ...
else
79
render_extension_list($wantname, $query);
80
81
82
83
84
85
86
db_free_result($query);
} // find_extension
function find_token($additionalsql, $wantname)
{
87
88
$sql = 'select tok.tokenname as tokenname,' .
' tok.tokenval as tokenval,' .
89
' ext.extname as extname' .
90
91
' from alextreg_tokens as tok' .
' left outer join alextreg_extensions as ext' .
92
' on tok.extid=ext.id where (1=1)' .
93
94
$additionalsql;
95
if (!is_authorized_vendor())
96
$sql .= " and (ext.public=1)";
97
98
99
100
101
$query = do_dbquery($sql);
if ($query == false)
return; // error output is handled in database.php ...
else
102
render_token_list($wantname, $query);
103
104
105
106
107
108
109
110
111
112
113
114
db_free_result($query);
} // find_token
$queryfuncs['tokenname'] = 'find_tokenname';
function find_tokenname($wantname)
{
$additionalsql = '';
if ($wantname)
{
$sqlwantname = db_escape_string($wantname);
115
$additionalsql .= " and (tok.tokenname='$sqlwantname')";
116
117
118
119
120
121
} // if
find_token($additionalsql, $wantname);
} // find_tokenname
122
$queryfuncs['tokenvalue'] = 'find_tokenvalue';
123
124
125
126
127
function find_tokenvalue($wantname)
{
$additionalsql = '';
if ($wantname)
{
128
129
if (!is_numeric($wantname))
return;
130
$sqlwantname = db_escape_string($wantname);
131
$additionalsql .= " and (tok.tokenval=$sqlwantname)";
132
133
134
} // if
find_token($additionalsql, $wantname);
135
} // find_tokenvalue
136
137
138
139
140
$queryfuncs['entrypoint'] = 'find_entrypoint';
function find_entrypoint($wantname)
{
141
142
143
144
$sql = 'select ent.entrypointname as entrypointname,' .
' ext.extname as extname' .
' from alextreg_entrypoints as ent' .
' left outer join alextreg_extensions as ext' .
145
' on ent.extid=ext.id where (1=1)';
146
147
if (!is_authorized_vendor())
148
$sql .= " and (ext.public=1)";
149
150
151
152
if ($wantname)
{
$sqlwantname = db_escape_string($wantname);
153
$sql .= " and (ent.entrypointname='$sqlwantname')";
154
155
156
157
158
159
} // if
$query = do_dbquery($sql);
if ($query == false)
return; // error output is handled in database.php ...
else
160
render_entrypoint_list($wantname, $query);
161
162
db_free_result($query);
163
164
165
166
167
168
} // find_entrypoint
$queryfuncs['anything'] = 'find_anything';
function find_anything($wantname)
{
169
170
171
172
find_extension($wantname);
find_tokenname($wantname);
find_tokenvalue($wantname);
find_entrypoint($wantname);
173
174
} // find_anything
175
176
function do_find($wanttype, $wantname = NULL)
177
{
178
179
global $queryfuncs;
180
181
182
183
184
185
186
187
$queryfunc = $queryfuncs[$wanttype];
if (!isset($queryfunc))
{
write_error('Invalid search type.');
return;
} // if
$queryfunc($wantname);
188
189
echo "\n<hr>\n";
190
191
192
193
194
195
} // do_find
$operations['op_findone'] = 'op_findone';
function op_findone()
{
196
197
if (!get_input_string('wanttype', 'Database field type', $wanttype)) return;
if (!get_input_string('wantname', 'Database field name', $wantname)) return;
198
write_debug("called op_findone($wanttype, $wantname)");
199
do_find($wanttype, $wantname);
200
} // op_findone
201
202
203
204
function show_one_extension($extrow)
{
205
206
$is_vendor = is_authorized_vendor();
207
208
$extname = $extrow['extname'];
$extid = $extrow['id'];
209
$public = $extrow['public'];
210
$wikiurl = get_alext_wiki_url($extname);
211
$htmlextname = htmlentities($extname, ENT_QUOTES);
212
213
214
215
if ((!$public) and (!$is_vendor)) // sanity check.
return;
216
echo "<p>$htmlextname (<a href='${wikiurl}'>docs</a>)\n";
217
218
$tab = ' ';
219
echo "<p><font size='-1'>\n";
220
221
echo "${tab}Registered on ${extrow['entrydate']} by ${extrow['author']}<br>\n";
echo "${tab}Last edited on ${extrow['lastedit']} by ${extrow['lasteditauthor']}<br>\n";
222
223
echo "</font>\n";
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
// get the tokens, move it to an array of db rows...
$tokens = array();
$sql = "select * from alextreg_tokens where (extid=$extid)";
if (!$is_vendor)
$sql .= ' and (ext.public=1)';
$query = do_dbquery($sql);
if ($query == false)
return; // uh...?
while ( ($row = db_fetch_array($query)) != false )
$tokens[] = $row;
db_free_result($query);
$entrypoints = array();
$sql = "select * from alextreg_entrypoints where (extid=$extid)";
if (!$is_vendor)
$sql .= ' and (ext.public=1)';
$query = do_dbquery($sql);
if ($query == false)
return; // uh...?
while ( ($row = db_fetch_array($query)) != false )
$entrypoints[] = $row;
db_free_result($query);
249
250
if ($is_vendor)
{
251
echo "<p>\n";
252
echo "<table border='1'><tr><td><b>Vendor:</b></td></tr><tr><td>\n";
253
254
$toggle = (($public) ? 'n' : 'y');
255
$is = ($public) ? 'is' : 'is not';
256
echo "<form>\n";
257
258
echo "This extension $is publically visible.\n";
echo "<input type='hidden' name='extid' value='$extid'>\n";
259
echo "<input type='hidden' name='extname' value='$htmlextname'>\n";
260
261
262
echo "<input type='hidden' name='newval' value='$toggle'>\n";
echo "<input type='hidden' name='operation' value='op_showhideext'>\n";
echo "<input type='submit' name='form_submit' value='Toggle'>\n";
263
echo "</form>\n";
264
265
echo "<form>\n";
266
267
268
269
270
271
echo "Add a new token named <input type='text' name='tokname'>\n";
echo "with the value <input type='text' name='tokval'>.\n";
echo "<input type='hidden' name='extid' value='$extid'>\n";
echo "<input type='hidden' name='extname' value='$htmlextname'>\n";
echo "<input type='hidden' name='operation' value='op_addtoken'>\n";
echo "<input type='submit' name='form_submit' value='Go!'>\n";
272
echo "</form>\n";
273
274
echo "<form>\n";
275
276
277
278
279
echo "Add a new entry point named <input type='text' name='entrypointname'>\n";
echo "<input type='hidden' name='extid' value='$extid'>\n";
echo "<input type='hidden' name='extname' value='$htmlextname'>\n";
echo "<input type='hidden' name='operation' value='op_addentrypoint'>\n";
echo "<input type='submit' name='form_submit' value='Go!'>\n";
280
echo "</form>\n";
281
282
echo "<form>\n";
283
284
echo "I'd like to rename this extension to\n";
echo "<input type='text' name='newval' value=''>.\n";
285
286
echo "<input type='hidden' name='extid' value='$extid'>\n";
echo "<input type='hidden' name='extname' value='$htmlextname'>\n";
287
echo "<input type='hidden' name='operation' value='op_renameext'>\n";
288
289
290
echo "<input type='submit' name='form_submit' value='Go!'>\n";
echo "</form>\n";
291
echo "<form>\n";
292
echo "I'd like to delete this extension.\n";
293
294
echo "<input type='hidden' name='extid' value='$extid'>\n";
echo "<input type='hidden' name='extname' value='$htmlextname'>\n";
295
echo "<input type='hidden' name='operation' value='op_delext'>\n";
296
297
298
echo "<input type='submit' name='form_submit' value='Go!'>\n";
echo "</form>\n";
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
if (count($tokens))
{
echo "<form>\n";
echo "I want to delete the token named\n";
echo "<select name='tokname' size='1'>\n";
echo " <option value=''>...</option>\n";
foreach ($tokens as $row)
echo " <option value='${row['id']}'>${row['tokenname']}</option>\n";
echo "</select>\n";
echo "<input type='hidden' name='extid' value='$extid'>\n";
echo "<input type='hidden' name='extname' value='$htmlextname'>\n";
echo "<input type='hidden' name='operation' value='op_deltok'>\n";
echo "<input type='submit' name='form_submit' value='Go!'>\n";
echo "</form>\n";
} // if
if (count($entrypoints))
{
echo "<form>\n";
echo "I want to delete the entry point named\n";
echo "<select name='entname' size='1'>\n";
echo " <option value=''>...</option>\n";
foreach ($tokens as $row)
echo " <option value='${row['entrypointname']}'>${row['entrypointname']}</option>\n";
echo "</select>\n";
echo "<input type='hidden' name='extid' value='$extid'>\n";
echo "<input type='hidden' name='extname' value='$htmlextname'>\n";
echo "<input type='hidden' name='operation' value='op_delent'>\n";
echo "<input type='submit' name='form_submit' value='Go!'>\n";
echo "</form>\n";
} // if
331
echo "</td></tr></table>\n";
332
333
} // if
334
335
echo "<p>Tokens:\n<ul>\n";
336
if (count($tokens) == 0)
337
echo " <li> (no tokens.)\n";
338
339
else
{
340
foreach ($tokens as $row)
341
342
{
$hex = sprintf("0x%X", $row['tokenval']); // !!! FIXME: faster way to do this?
343
344
345
346
echo " <li> ${row['tokenname']} ($hex)";
//echo " added ${row['entrydate']},";
//echo " last modified ${row['lastedit']}";
echo "\n";
347
} // foreach
348
349
350
351
} // else
echo "</ul>\n";
echo "<p>Entry points:\n<ul>\n";
352
if (count($entrypoints) == 0)
353
echo " <li> (no entry points.)\n";
354
355
else
{
356
foreach ($entrypoints as $row)
357
{
358
359
360
361
echo " <li> ${row['entrypointname']}";
//echo " added ${row['entrydate']},";
//echo " last modified ${row['lastedit']}";
echo "\n";
362
} // foreach
363
} // else
364
365
366
367
368
369
370
echo "</ul>\n";
echo "<hr>\n";
} // show_one_extension
371
372
373
$operations['op_findall'] = 'op_findall';
function op_findall()
{
374
if (!get_input_string('wanttype', 'Database field type', $wanttype)) return;
375
write_debug("called op_findall($wanttype)");
376
do_find($wanttype);
377
} // op_findall
378
379
380
function do_showext($extname)
381
{
382
$sqlextname = db_escape_string($extname);
383
$sql = "select * from alextreg_extensions" .
384
" where extname='$sqlextname'";
385
386
if (!is_authorized_vendor())
387
$sql .= " and (public=1)";
388
389
390
391
392
393
394
395
396
397
398
399
400
401
$query = do_dbquery($sql);
if ($query == false)
return; // error output is handled in database.php ...
else if (db_num_rows($query) == 0)
write_error('No such extension.');
else
{
// just in case there's more than one for some reason...
while ( ($row = db_fetch_array($query)) != false )
show_one_extension($row);
} // else
db_free_result($query);
402
403
404
405
406
407
} // do_showext
$operations['op_showext'] = 'op_showext';
function op_showext()
{
408
if (!get_input_string('extname', 'extension name', $extname)) return;
409
do_showext($extname);
410
411
} // op_showext
412
413
414
415
416
417
418
419
function render_search_ui()
{
print <<<EOF
<p>
Where do you want to go today?
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
<p>
<form method="post" action="${_SERVER['PHP_SELF']}">
I want a list of all known
<select name="wanttype" size="1">
<option selected value="extension">extensions</option>
<option value="tokenname">tokens</option>
<option value="entrypoint">entry points</option>
</select>.
<input type="hidden" name="operation" value="op_findall">
<input type="submit" name="form_submit" value="Go!">
</form>
<p>
...or...
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
<p>
<form method="post" action="${_SERVER['PHP_SELF']}">
I want
<select name="wanttype" size="1">
<option selected value="extension">an extension</option>
<option value="tokenname">a token name</option>
<option value="tokenvalue">a token value</option>
<option value="entrypoint">an entry point</option>
<option value="anything">anything</option>
</select>
named <input type="text" name="wantname" value="">.
<input type="hidden" name="operation" value="op_findone">
<input type="submit" name="form_submit" value="Go!">
</form>
EOF;
} // render_search_ui
454
?>