Artifact
07e5a4e5b12f4b35bfe55db714346266c898038d :
Executable file
extroot/user_config
— part of check-in
[53aa554cb8]
at
2021-04-04 14:39:32
on branch trunk
— Move fields declaration atop.
(user:
mario
size: 6486)
0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 70 68 70 2d 63 #!/usr/bin/php-c
0010: 67 69 20 2d 64 63 67 69 2e 66 6f 72 63 65 5f 72 gi -dcgi.force_r
0020: 65 64 69 72 65 63 74 3d 30 0a 3c 3f 70 68 70 0a edirect=0.<?php.
0030: 23 20 65 6e 63 6f 64 69 6e 67 3a 20 75 74 66 2d # encoding: utf-
0040: 38 0a 23 20 61 70 69 3a 20 63 67 69 0a 23 20 74 8.# api: cgi.# t
0050: 79 70 65 3a 20 65 64 69 74 0a 23 20 74 69 74 6c ype: edit.# titl
0060: 65 3a 20 55 73 65 72 20 65 64 69 74 69 6e 67 0a e: User editing.
0070: 23 20 64 65 73 63 72 69 70 74 69 6f 6e 3a 20 50 # description: P
0080: 72 6f 76 69 64 65 73 20 61 6e 20 65 64 69 74 69 rovides an editi
0090: 6e 67 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 ng interface to
00a0: 75 73 65 72 20 66 69 65 6c 64 73 20 28 69 6e 66 user fields (inf
00b0: 6f 29 0a 23 20 76 65 72 73 69 6f 6e 3a 20 30 2e o).# version: 0.
00c0: 32 0a 23 20 73 74 61 74 65 3a 20 61 6c 70 68 61 2.# state: alpha
00d0: 0a 23 20 64 65 70 65 6e 64 73 3a 20 70 68 70 3a .# depends: php:
00e0: 73 71 6c 69 74 65 0a 23 20 63 6f 6e 66 69 67 3a sqlite.# config:
00f0: 20 2d 0a 23 0a 23 20 46 61 69 72 6c 79 20 73 69 -.#.# Fairly si
0100: 6d 70 6c 65 20 65 64 69 74 69 6e 67 20 55 49 20 mple editing UI
0110: 66 6f 72 20 75 73 65 72 2e 69 6e 66 6f 20 74 61 for user.info ta
0120: 62 6c 65 2c 20 61 6e 64 20 70 6f 73 73 69 62 6c ble, and possibl
0130: 79 20 73 6f 6d 65 0a 23 20 6e 65 77 20 66 69 65 y some.# new fie
0140: 6c 64 73 2e 20 54 68 69 73 20 69 73 20 62 61 73 lds. This is bas
0150: 69 63 61 6c 6c 79 20 61 6e 20 61 64 64 69 74 69 ically an additi
0160: 6f 6e 20 74 6f 20 74 68 65 20 49 6e 64 69 65 41 on to the IndieA
0170: 75 74 68 20 70 6c 75 67 69 6e 2c 0a 23 20 73 6f uth plugin,.# so
0180: 20 75 73 65 72 73 20 63 61 6e 20 61 63 74 75 61 users can actua
0190: 6c 6c 79 20 75 70 64 61 74 65 20 74 68 65 69 72 lly update their
01a0: 20 63 6f 6e 74 61 63 74 20 69 6e 66 6f 72 6d 61 contact informa
01b0: 74 69 6f 6e 20 65 74 63 2e 0a 23 0a 23 20 4e 65 tion etc..#.# Ne
01c0: 77 20 66 69 65 6c 64 73 20 6d 75 73 74 20 62 65 w fields must be
01d0: 20 61 64 64 65 64 20 69 6e 20 24 66 69 65 6c 64 added in $field
01e0: 73 5b 5d 20 61 74 6f 70 2e 0a 23 0a 0a 69 66 20 s[] atop..#..if
01f0: 28 24 5f 52 45 51 55 45 53 54 5b 22 64 62 67 22 ($_REQUEST["dbg"
0200: 5d 29 20 7b 0a 20 20 20 20 65 72 72 6f 72 5f 72 ]) {. error_r
0210: 65 70 6f 72 74 69 6e 67 28 45 5f 41 4c 4c 29 3b eporting(E_ALL);
0220: 20 69 6e 69 5f 73 65 74 28 22 64 69 73 70 6c 61 ini_set("displa
0230: 79 5f 65 72 72 6f 72 73 22 2c 20 31 29 3b 0a 7d y_errors", 1);.}
0240: 0a 0a 23 2d 2d 20 61 6c 6c 6f 77 65 64 2f 6e 65 ..#-- allowed/ne
0250: 77 20 66 69 65 6c 64 73 0a 24 66 69 65 6c 64 73 w fields.$fields
0260: 20 3d 20 5b 0a 20 20 20 20 22 69 6e 66 6f 22 20 = [. "info"
0270: 3d 3e 20 5b 0a 20 20 20 20 20 20 20 20 22 74 69 => [. "ti
0280: 74 6c 65 22 20 3d 3e 20 22 43 6f 6e 74 61 63 74 tle" => "Contact
0290: 20 69 6e 66 6f 22 2c 0a 20 20 20 20 20 20 20 20 info",.
02a0: 22 64 65 73 63 22 20 3d 3e 20 22 54 68 69 73 20 "desc" => "This
02b0: 69 73 20 75 73 75 61 6c 6c 79 20 6a 75 73 74 20 is usually just
02c0: 61 6e 20 65 6d 61 69 6c 20 61 64 64 72 65 73 73 an email address
02d0: 2e 20 46 6f 72 20 75 73 69 6e 67 20 67 69 74 2d . For using git-
02e0: 66 61 73 74 2d 65 78 70 6f 72 74 20 74 68 69 73 fast-export this
02f0: 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c must be a singl
0300: 65 20 6c 69 6e 65 2e 22 2c 0a 20 20 20 20 5d 2c e line.",. ],
0310: 0a 20 20 20 20 22 68 6f 6d 65 70 61 67 65 22 20 . "homepage"
0320: 3d 3e 20 5b 0a 20 20 20 20 20 20 20 20 22 74 69 => [. "ti
0330: 74 6c 65 22 20 3d 3e 20 22 48 6f 6d 65 70 61 67 tle" => "Homepag
0340: 65 20 55 52 4c 73 22 2c 0a 20 20 20 20 20 20 20 e URLs",.
0350: 20 22 64 65 73 63 22 20 3d 3e 20 22 54 68 69 73 "desc" => "This
0360: 20 77 69 6c 6c 20 63 72 65 61 74 65 20 61 20 6e will create a n
0370: 65 77 20 63 6f 6c 75 6d 6e 20 66 6f 72 20 6c 69 ew column for li
0380: 73 74 69 6e 67 20 75 73 65 72 20 75 72 6c 73 2e sting user urls.
0390: 20 57 68 69 63 68 20 69 73 20 75 73 65 64 20 62 Which is used b
03a0: 79 20 74 68 65 20 49 6e 64 69 65 41 75 74 68 20 y the IndieAuth
03b0: 70 6c 75 67 69 6e 20 74 6f 20 76 65 72 69 66 79 plugin to verify
03c0: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 72 authorization r
03d0: 65 71 75 65 73 74 73 2e 22 2c 0a 20 20 20 20 5d equests.",. ]
03e0: 2c 0a 5d 3b 0a 0a 0a 23 2d 2d 20 64 61 74 61 62 ,.];...#-- datab
03f0: 61 73 65 20 28 3d 3d 20 66 6f 73 73 69 6c 20 72 ase (== fossil r
0400: 65 70 6f 29 0a 66 75 6e 63 74 69 6f 6e 20 64 62 epo).function db
0410: 28 24 73 71 6c 3d 22 22 2c 20 24 70 61 72 61 6d ($sql="", $param
0420: 73 3d 5b 5d 29 20 7b 0a 20 20 20 20 73 74 61 74 s=[]) {. stat
0430: 69 63 20 24 64 62 3b 0a 20 20 20 20 69 66 20 28 ic $db;. if (
0440: 65 6d 70 74 79 28 24 64 62 29 29 20 7b 0a 20 20 empty($db)) {.
0450: 20 20 20 20 20 20 24 64 62 20 3d 20 6e 65 77 20 $db = new
0460: 50 44 4f 28 22 73 71 6c 69 74 65 3a 24 5f 53 45 PDO("sqlite:$_SE
0470: 52 56 45 52 5b 46 4f 53 53 49 4c 5f 52 45 50 4f RVER[FOSSIL_REPO
0480: 53 49 54 4f 52 59 5d 22 29 3b 0a 20 20 20 20 7d SITORY]");. }
0490: 0a 20 20 20 20 69 66 20 28 24 70 61 72 61 6d 73 . if ($params
04a0: 29 20 7b 0a 20 20 20 20 20 20 20 20 24 73 74 6d ) {. $stm
04b0: 74 20 3d 20 24 64 62 2d 3e 70 72 65 70 61 72 65 t = $db->prepare
04c0: 28 24 73 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 ($sql);.
04d0: 24 73 74 6d 74 2d 3e 65 78 65 63 75 74 65 28 24 $stmt->execute($
04e0: 70 61 72 61 6d 73 29 3b 0a 20 20 20 20 20 20 20 params);.
04f0: 20 72 65 74 75 72 6e 20 24 73 74 6d 74 2d 3e 66 return $stmt->f
0500: 65 74 63 68 41 6c 6c 28 50 44 4f 3a 3a 46 45 54 etchAll(PDO::FET
0510: 43 48 5f 41 53 53 4f 43 29 3b 0a 20 20 20 20 7d CH_ASSOC);. }
0520: 0a 20 20 20 20 65 6c 73 65 20 7b 0a 20 20 20 20 . else {.
0530: 20 20 20 20 72 65 74 75 72 6e 20 24 64 62 2d 3e return $db->
0540: 71 75 65 72 79 28 24 73 71 6c 29 3b 0a 20 20 20 query($sql);.
0550: 20 7d 0a 7d 0a 0a 23 2d 2d 20 66 6f 73 73 69 6c }.}..#-- fossil
0560: 20 48 54 4d 4c 20 6f 75 74 70 75 74 0a 66 75 6e HTML output.fun
0570: 63 74 69 6f 6e 20 70 61 67 65 5f 68 74 6d 6c 28 ction page_html(
0580: 24 68 74 6d 6c 29 20 7b 0a 20 20 20 20 68 65 61 $html) {. hea
0590: 64 65 72 28 22 43 6f 6e 74 65 6e 74 2d 54 79 70 der("Content-Typ
05a0: 65 3a 20 74 65 78 74 2f 68 74 6d 6c 3b 20 65 6e e: text/html; en
05b0: 63 6f 64 69 6e 67 3d 75 74 66 2d 38 22 29 3b 0a coding=utf-8");.
05c0: 20 20 20 20 24 68 74 6d 6c 20 3d 20 3c 3c 3c 48 $html = <<<H
05d0: 54 4d 4c 0a 20 20 20 20 20 20 20 20 3c 64 69 76 TML. <div
05e0: 20 63 6c 61 73 73 3d 27 66 6f 73 73 69 6c 2d 64 class='fossil-d
05f0: 6f 63 27 20 64 61 74 61 2d 74 69 74 6c 65 3d 27 oc' data-title='
0600: 55 73 65 72 20 63 6f 6e 66 69 67 27 3e 0a 20 20 User config'>.
0610: 20 20 20 20 20 20 3c 73 76 67 20 73 74 79 6c 65 <svg style
0620: 3d 22 66 6c 6f 61 74 3a 6c 65 66 74 3b 20 6d 61 ="float:left; ma
0630: 72 67 69 6e 2d 72 69 67 68 74 3a 33 30 70 74 3b rgin-right:30pt;
0640: 22 20 77 69 64 74 68 3d 22 31 35 30 22 20 68 65 " width="150" he
0650: 69 67 68 74 3d 22 39 33 37 22 20 76 65 72 73 69 ight="937" versi
0660: 6f 6e 3d 22 31 2e 31 22 20 76 69 65 77 42 6f 78 on="1.1" viewBox
0670: 3d 22 30 20 30 20 31 35 2e 36 33 35 20 39 33 2e ="0 0 15.635 93.
0680: 37 33 35 22 20 78 6d 6c 6e 73 3d 22 68 74 74 70 735" xmlns="http
0690: 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 32 30 ://www.w3.org/20
06a0: 30 30 2f 73 76 67 22 20 78 6d 6c 6e 73 3a 78 6c 00/svg" xmlns:xl
06b0: 69 6e 6b 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e ink="http://www.
06c0: 77 33 2e 6f 72 67 2f 31 39 39 39 2f 78 6c 69 6e w3.org/1999/xlin
06d0: 6b 22 3e 0a 20 20 20 20 20 20 20 20 20 3c 64 65 k">. <de
06e0: 66 73 3e 0a 20 20 20 20 20 20 20 20 20 20 3c 6c fs>. <l
06f0: 69 6e 65 61 72 47 72 61 64 69 65 6e 74 20 69 64 inearGradient id
0700: 3d 22 6c 69 6e 65 61 72 47 72 61 64 69 65 6e 74 ="linearGradient
0710: 39 33 38 22 20 78 31 3d 22 34 38 2e 35 38 34 22 938" x1="48.584"
0720: 20 78 32 3d 22 36 34 2e 38 38 31 22 20 79 31 3d x2="64.881" y1=
0730: 22 38 38 2e 35 30 39 22 20 79 32 3d 22 38 36 2e "88.509" y2="86.
0740: 35 32 35 22 20 67 72 61 64 69 65 6e 74 55 6e 69 525" gradientUni
0750: 74 73 3d 22 75 73 65 72 53 70 61 63 65 4f 6e 55 ts="userSpaceOnU
0760: 73 65 22 3e 0a 20 20 20 20 20 20 20 20 20 20 20 se">.
0770: 3c 73 74 6f 70 20 73 74 6f 70 2d 63 6f 6c 6f 72 <stop stop-color
0780: 3d 22 23 35 66 39 33 32 30 22 20 6f 66 66 73 65 ="#5f9320" offse
0790: 74 3d 22 30 22 2f 3e 0a 20 20 20 20 20 20 20 20 t="0"/>.
07a0: 20 20 20 3c 73 74 6f 70 20 73 74 6f 70 2d 63 6f <stop stop-co
07b0: 6c 6f 72 3d 22 23 62 62 62 37 30 30 22 20 6f 66 lor="#bbb700" of
07c0: 66 73 65 74 3d 22 31 22 2f 3e 0a 20 20 20 20 20 fset="1"/>.
07d0: 20 20 20 20 20 3c 2f 6c 69 6e 65 61 72 47 72 61 </linearGra
07e0: 64 69 65 6e 74 3e 0a 20 20 20 20 20 20 20 20 20 dient>.
07f0: 3c 2f 64 65 66 73 3e 0a 20 20 20 20 20 20 20 20 </defs>.
0800: 20 3c 67 20 74 72 61 6e 73 66 6f 72 6d 3d 22 74 <g transform="t
0810: 72 61 6e 73 6c 61 74 65 28 2d 34 38 2e 35 38 34 ranslate(-48.584
0820: 20 2d 34 31 2e 36 34 32 29 22 3e 0a 20 20 20 20 -41.642)">.
0830: 20 20 20 20 20 20 3c 70 61 74 68 20 64 3d 22 6d <path d="m
0840: 35 32 2e 32 35 33 20 34 31 2e 36 34 32 63 2d 32 52.253 41.642c-2
0850: 2e 30 33 32 36 20 30 2d 33 2e 36 36 39 20 31 2e .0326 0-3.669 1.
0860: 36 33 35 39 2d 33 2e 36 36 39 20 33 2e 36 36 38 6359-3.669 3.668
0870: 35 76 38 2e 36 35 38 39 68 32 2e 38 30 30 39 63 5v8.6589h2.8009c
0880: 31 2e 31 35 30 34 20 30 20 32 2e 30 37 36 39 20 1.1504 0 2.0769
0890: 30 2e 39 32 36 34 35 20 32 2e 30 37 36 39 20 32 0.92645 2.0769 2
08a0: 2e 30 37 36 39 76 31 2e 38 39 31 34 61 33 2e 37 .0769v1.8914a3.7
08b0: 30 38 34 20 33 2e 36 37 35 20 30 20 30 20 31 20 084 3.675 0 0 1
08c0: 33 2e 35 37 34 35 2d 32 2e 36 39 38 35 20 33 2e 3.5745-2.6985 3.
08d0: 37 30 38 34 20 33 2e 36 37 35 20 30 20 30 20 31 7084 3.675 0 0 1
08e0: 20 33 2e 37 30 38 33 20 33 2e 36 37 35 32 20 33 3.7083 3.6752 3
08f0: 2e 37 30 38 34 20 33 2e 36 37 35 20 30 20 30 20 .7084 3.675 0 0
0900: 31 2d 33 2e 37 30 38 33 20 33 2e 36 37 34 37 20 1-3.7083 3.6747
0910: 33 2e 37 30 38 34 20 33 2e 36 37 35 20 30 20 30 3.7084 3.675 0 0
0920: 20 31 2d 33 2e 35 37 34 35 2d 32 2e 37 31 33 76 1-3.5745-2.713v
0930: 32 2e 32 34 30 32 63 30 20 31 2e 31 35 30 34 2d 2.2402c0 1.1504-
0940: 30 2e 39 32 36 34 35 20 32 2e 30 37 36 34 2d 32 0.92645 2.0764-2
0950: 2e 30 37 36 39 20 32 2e 30 37 36 34 68 2d 32 2e .0769 2.0764h-2.
0960: 38 30 30 39 76 31 33 2e 32 33 68 32 2e 39 33 34 8009v13.23h2.934
0970: 37 63 31 2e 31 35 30 34 20 30 20 32 2e 30 37 36 7c1.1504 0 2.076
0980: 39 20 30 2e 39 32 36 34 35 20 32 2e 30 37 36 39 9 0.92645 2.0769
0990: 20 32 2e 30 37 36 39 76 31 2e 38 39 31 34 61 33 2.0769v1.8914a3
09a0: 2e 37 30 38 34 20 33 2e 36 37 35 20 30 20 30 20 .7084 3.675 0 0
09b0: 31 20 33 2e 35 37 34 35 2d 32 2e 36 39 38 35 20 1 3.5745-2.6985
09c0: 33 2e 37 30 38 34 20 33 2e 36 37 35 20 30 20 30 3.7084 3.675 0 0
09d0: 20 31 20 33 2e 37 30 38 33 20 33 2e 36 37 35 32 1 3.7083 3.6752
09e0: 20 33 2e 37 30 38 34 20 33 2e 36 37 35 20 30 20 3.7084 3.675 0
09f0: 30 20 31 2d 33 2e 37 30 38 33 20 33 2e 36 37 34 0 1-3.7083 3.674
0a00: 37 20 33 2e 37 30 38 34 20 33 2e 36 37 35 20 30 7 3.7084 3.675 0
0a10: 20 30 20 31 2d 33 2e 35 37 34 35 2d 32 2e 37 31 0 1-3.5745-2.71
0a20: 33 76 32 2e 32 34 30 32 63 30 20 31 2e 31 35 30 3v2.2402c0 1.150
0a30: 34 2d 30 2e 39 32 36 34 35 20 32 2e 30 37 36 34 4-0.92645 2.0764
0a40: 2d 32 2e 30 37 36 39 20 32 2e 30 37 36 34 68 2d -2.0769 2.0764h-
0a50: 32 2e 39 33 34 37 76 31 31 2e 36 31 68 32 2e 39 2.9347v11.61h2.9
0a60: 30 31 31 63 31 2e 31 35 30 34 20 30 20 32 2e 30 011c1.1504 0 2.0
0a70: 37 36 39 20 30 2e 39 32 36 34 34 20 32 2e 30 37 769 0.92644 2.07
0a80: 36 39 20 32 2e 30 37 36 39 76 31 2e 38 39 31 34 69 2.0769v1.8914
0a90: 61 33 2e 37 30 38 34 20 33 2e 36 37 35 20 30 20 a3.7084 3.675 0
0aa0: 30 20 31 20 33 2e 35 37 34 35 2d 32 2e 36 39 38 0 1 3.5745-2.698
0ab0: 35 20 33 2e 37 30 38 34 20 33 2e 36 37 35 20 30 5 3.7084 3.675 0
0ac0: 20 30 20 31 20 33 2e 37 30 38 33 20 33 2e 36 37 0 1 3.7083 3.67
0ad0: 35 32 20 33 2e 37 30 38 34 20 33 2e 36 37 35 20 52 3.7084 3.675
0ae0: 30 20 30 20 31 2d 33 2e 37 30 38 33 20 33 2e 36 0 0 1-3.7083 3.6
0af0: 37 34 37 20 33 2e 37 30 38 34 20 33 2e 36 37 35 747 3.7084 3.675
0b00: 20 30 20 30 20 31 2d 33 2e 35 37 34 35 2d 32 2e 0 0 1-3.5745-2.
0b10: 37 31 33 76 32 2e 32 34 30 32 63 30 20 31 2e 31 713v2.2402c0 1.1
0b20: 35 30 34 2d 30 2e 39 32 36 34 35 20 32 2e 30 37 504-0.92645 2.07
0b30: 36 34 2d 32 2e 30 37 36 39 20 32 2e 30 37 36 34 64-2.0769 2.0764
0b40: 68 2d 32 2e 39 30 31 31 76 31 33 2e 32 33 68 33 h-2.9011v13.23h3
0b50: 2e 30 33 35 63 31 2e 31 35 30 34 20 30 20 32 2e .035c1.1504 0 2.
0b60: 30 37 36 39 20 30 2e 39 32 36 34 35 20 32 2e 30 0769 0.92645 2.0
0b70: 37 36 39 20 32 2e 30 37 36 39 76 31 2e 38 39 31 769 2.0769v1.891
0b80: 34 61 33 2e 37 30 38 34 20 33 2e 36 37 35 20 30 4a3.7084 3.675 0
0b90: 20 30 20 31 20 33 2e 35 37 34 35 2d 32 2e 36 39 0 1 3.5745-2.69
0ba0: 38 35 20 33 2e 37 30 38 34 20 33 2e 36 37 35 20 85 3.7084 3.675
0bb0: 30 20 30 20 31 20 33 2e 37 30 38 33 20 33 2e 36 0 0 1 3.7083 3.6
0bc0: 37 35 32 20 33 2e 37 30 38 34 20 33 2e 36 37 35 752 3.7084 3.675
0bd0: 20 30 20 30 20 31 2d 33 2e 37 30 38 33 20 33 2e 0 0 1-3.7083 3.
0be0: 36 37 34 37 20 33 2e 37 30 38 34 20 33 2e 36 37 6747 3.7084 3.67
0bf0: 35 20 30 20 30 20 31 2d 33 2e 35 37 34 35 2d 32 5 0 0 1-3.5745-2
0c00: 2e 37 31 33 76 32 2e 32 34 30 32 63 30 20 31 2e .713v2.2402c0 1.
0c10: 31 35 30 34 2d 30 2e 39 32 36 34 35 20 32 2e 30 1504-0.92645 2.0
0c20: 37 36 34 2d 32 2e 30 37 36 39 20 32 2e 30 37 36 764-2.0769 2.076
0c30: 34 68 2d 32 2e 38 32 33 36 63 30 2e 35 30 32 30 4h-2.8236c0.5020
0c40: 35 20 31 2e 34 32 36 38 20 31 2e 38 35 35 20 32 5 1.4268 1.855 2
0c50: 2e 34 34 35 38 20 33 2e 34 35 37 37 20 32 2e 34 .4458 3.4577 2.4
0c60: 34 35 38 68 38 2e 32 39 37 32 63 32 2e 30 33 32 458h8.2972c2.032
0c70: 36 20 30 20 33 2e 36 36 39 2d 31 2e 36 33 36 34 6 0 3.669-1.6364
0c80: 20 33 2e 36 36 39 2d 33 2e 36 36 39 76 2d 31 30 3.669-3.669v-10
0c90: 2e 32 36 39 68 2d 32 2e 39 30 31 31 63 2d 31 2e .269h-2.9011c-1.
0ca0: 31 35 30 34 20 30 2d 32 2e 30 37 36 39 2d 30 2e 1504 0-2.0769-0.
0cb0: 39 32 35 39 34 2d 32 2e 30 37 36 39 2d 32 2e 30 92594-2.0769-2.0
0cc0: 37 36 34 76 2d 32 2e 32 34 30 32 61 33 2e 37 30 764v-2.2402a3.70
0cd0: 38 34 20 33 2e 36 37 35 20 30 20 30 20 31 2d 33 84 3.675 0 0 1-3
0ce0: 2e 35 37 34 35 20 32 2e 37 31 33 20 33 2e 37 30 .5745 2.713 3.70
0cf0: 38 34 20 33 2e 36 37 35 20 30 20 30 20 31 2d 33 84 3.675 0 0 1-3
0d00: 2e 37 30 38 33 2d 33 2e 36 37 34 37 20 33 2e 37 .7083-3.6747 3.7
0d10: 30 38 34 20 33 2e 36 37 35 20 30 20 30 20 31 20 084 3.675 0 0 1
0d20: 33 2e 37 30 38 33 2d 33 2e 36 37 35 32 20 33 2e 3.7083-3.6752 3.
0d30: 37 30 38 34 20 33 2e 36 37 35 20 30 20 30 20 31 7084 3.675 0 0 1
0d40: 20 33 2e 35 37 34 35 20 32 2e 36 39 38 35 76 2d 3.5745 2.6985v-
0d50: 31 2e 38 39 31 34 63 30 2d 31 2e 31 35 30 34 20 1.8914c0-1.1504
0d60: 30 2e 39 32 36 34 35 2d 32 2e 30 37 36 39 20 32 0.92645-2.0769 2
0d70: 2e 30 37 36 39 2d 32 2e 30 37 36 39 68 32 2e 39 .0769-2.0769h2.9
0d80: 30 31 31 76 2d 31 32 2e 33 32 38 68 2d 32 2e 39 011v-12.328h-2.9
0d90: 30 31 31 63 2d 31 2e 31 35 30 34 20 30 2d 32 2e 011c-1.1504 0-2.
0da0: 30 37 36 39 2d 30 2e 39 32 35 39 34 2d 32 2e 30 0769-0.92594-2.0
0db0: 37 36 39 2d 32 2e 30 37 36 34 76 2d 32 2e 32 34 769-2.0764v-2.24
0dc0: 30 32 61 33 2e 37 30 38 34 20 33 2e 36 37 35 20 02a3.7084 3.675
0dd0: 30 20 30 20 31 2d 33 2e 35 37 34 35 20 32 2e 37 0 0 1-3.5745 2.7
0de0: 31 33 20 33 2e 37 30 38 34 20 33 2e 36 37 35 20 13 3.7084 3.675
0df0: 30 20 30 20 31 2d 33 2e 37 30 38 33 2d 33 2e 36 0 0 1-3.7083-3.6
0e00: 37 34 37 20 33 2e 37 30 38 34 20 33 2e 36 37 35 747 3.7084 3.675
0e10: 20 30 20 30 20 31 20 33 2e 37 30 38 33 2d 33 2e 0 0 1 3.7083-3.
0e20: 36 37 35 32 20 33 2e 37 30 38 34 20 33 2e 36 37 6752 3.7084 3.67
0e30: 35 20 30 20 30 20 31 20 33 2e 35 37 34 35 20 32 5 0 0 1 3.5745 2
0e40: 2e 36 39 38 35 76 2d 31 2e 38 39 31 34 63 30 2d .6985v-1.8914c0-
0e50: 31 2e 31 35 30 34 20 30 2e 39 32 36 34 35 2d 32 1.1504 0.92645-2
0e60: 2e 30 37 36 39 20 32 2e 30 37 36 39 2d 32 2e 30 .0769 2.0769-2.0
0e70: 37 36 39 68 32 2e 39 30 31 31 76 2d 31 32 2e 35 769h2.9011v-12.5
0e80: 31 31 68 2d 33 2e 30 30 31 34 63 2d 31 2e 31 35 11h-3.0014c-1.15
0e90: 30 34 20 30 2d 32 2e 30 37 36 39 2d 30 2e 39 32 04 0-2.0769-0.92
0ea0: 35 39 34 2d 32 2e 30 37 36 39 2d 32 2e 30 37 36 594-2.0769-2.076
0eb0: 34 76 2d 32 2e 32 34 30 32 61 33 2e 37 30 38 34 4v-2.2402a3.7084
0ec0: 20 33 2e 36 37 35 20 30 20 30 20 31 2d 33 2e 35 3.675 0 0 1-3.5
0ed0: 37 34 35 20 32 2e 37 31 33 20 33 2e 37 30 38 34 745 2.713 3.7084
0ee0: 20 33 2e 36 37 35 20 30 20 30 20 31 2d 33 2e 37 3.675 0 0 1-3.7
0ef0: 30 38 33 2d 33 2e 36 37 34 37 20 33 2e 37 30 38 083-3.6747 3.708
0f00: 34 20 33 2e 36 37 35 20 30 20 30 20 31 20 33 2e 4 3.675 0 0 1 3.
0f10: 37 30 38 33 2d 33 2e 36 37 35 32 20 33 2e 37 30 7083-3.6752 3.70
0f20: 38 34 20 33 2e 36 37 35 20 30 20 30 20 31 20 33 84 3.675 0 0 1 3
0f30: 2e 35 37 34 35 20 32 2e 36 39 38 35 76 2d 31 2e .5745 2.6985v-1.
0f40: 38 39 31 34 63 30 2d 31 2e 31 35 30 34 20 30 2e 8914c0-1.1504 0.
0f50: 39 32 36 34 35 2d 32 2e 30 37 36 39 20 32 2e 30 92645-2.0769 2.0
0f60: 37 36 39 2d 32 2e 30 37 36 39 68 33 2e 30 30 31 769-2.0769h3.001
0f70: 34 76 2d 31 32 2e 33 32 38 68 2d 33 2e 30 30 31 4v-12.328h-3.001
0f80: 34 63 2d 31 2e 31 35 30 34 20 30 2d 32 2e 30 37 4c-1.1504 0-2.07
0f90: 36 39 2d 30 2e 39 32 35 39 34 2d 32 2e 30 37 36 69-0.92594-2.076
0fa0: 39 2d 32 2e 30 37 36 34 76 2d 32 2e 32 34 30 32 9-2.0764v-2.2402
0fb0: 61 33 2e 37 30 38 34 20 33 2e 36 37 35 20 30 20 a3.7084 3.675 0
0fc0: 30 20 31 2d 33 2e 35 37 34 35 20 32 2e 37 31 33 0 1-3.5745 2.713
0fd0: 20 33 2e 37 30 38 34 20 33 2e 36 37 35 20 30 20 3.7084 3.675 0
0fe0: 30 20 31 2d 33 2e 37 30 38 33 2d 33 2e 36 37 34 0 1-3.7083-3.674
0ff0: 37 20 33 2e 37 30 38 34 20 33 2e 36 37 35 20 30 7 3.7084 3.675 0
1000: 20 30 20 31 20 33 2e 37 30 38 33 2d 33 2e 36 37 0 1 3.7083-3.67
1010: 35 32 20 33 2e 37 30 38 34 20 33 2e 36 37 35 20 52 3.7084 3.675
1020: 30 20 30 20 31 20 33 2e 35 37 34 35 20 32 2e 36 0 0 1 3.5745 2.6
1030: 39 38 35 76 2d 31 2e 38 39 31 34 63 30 2d 31 2e 985v-1.8914c0-1.
1040: 31 35 30 34 20 30 2e 39 32 36 34 35 2d 32 2e 30 1504 0.92645-2.0
1050: 37 36 39 20 32 2e 30 37 36 39 2d 32 2e 30 37 36 769 2.0769-2.076
1060: 39 68 32 2e 34 35 31 63 2d 30 2e 36 34 35 36 32 9h2.451c-0.64562
1070: 2d 31 2e 30 34 32 39 2d 31 2e 37 39 36 39 2d 31 -1.0429-1.7969-1
1080: 2e 37 33 36 38 2d 33 2e 31 31 38 37 2d 31 2e 37 .7368-3.1187-1.7
1090: 33 36 38 7a 22 20 66 69 6c 6c 3d 22 75 72 6c 28 368z" fill="url(
10a0: 23 6c 69 6e 65 61 72 47 72 61 64 69 65 6e 74 39 #linearGradient9
10b0: 33 38 29 22 20 73 74 72 6f 6b 65 2d 77 69 64 74 38)" stroke-widt
10c0: 68 3d 22 30 22 2f 3e 0a 20 20 20 20 20 20 20 20 h="0"/>.
10d0: 20 3c 2f 67 3e 0a 20 20 20 20 20 20 20 20 3c 2f </g>. </
10e0: 73 76 67 3e 0a 20 20 20 20 20 20 20 20 5c 6e 24 svg>. \n$
10f0: 68 74 6d 6c 5c 6e 0a 20 20 20 20 20 20 20 20 3c html\n. <
1100: 2f 64 69 76 3e 0a 48 54 4d 4c 3b 0a 20 20 20 20 /div>.HTML;.
1110: 70 72 69 6e 74 28 24 68 74 6d 6c 29 3b 0a 7d 0a print($html);.}.
1120: 66 75 6e 63 74 69 6f 6e 20 6d 69 73 73 69 6e 67 function missing
1130: 5f 70 61 72 61 6d 28 24 6e 61 6d 65 29 20 7b 0a _param($name) {.
1140: 20 20 20 20 64 69 65 28 70 61 67 65 5f 68 74 6d die(page_htm
1150: 6c 28 22 3c 68 32 3e 4d 69 73 73 69 6e 67 20 69 l("<h2>Missing i
1160: 6e 70 75 74 3c 2f 68 32 3e 3c 70 3e 55 52 4c 20 nput</h2><p>URL
1170: 6c 61 63 6b 73 20 3c 63 6f 64 65 3e 26 24 6e 61 lacks <code>&$na
1180: 6d 65 3d 3c 2f 63 6f 64 65 3e 20 70 61 72 61 6d me=</code> param
1190: 65 74 65 72 2e 22 29 29 3b 0a 7d 0a 66 75 6e 63 eter."));.}.func
11a0: 74 69 6f 6e 20 70 61 67 65 5f 6d 64 28 24 74 65 tion page_md($te
11b0: 78 74 29 20 7b 0a 20 20 20 20 68 65 61 64 65 72 xt) {. header
11c0: 28 22 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 ("Content-Type:
11d0: 74 65 78 74 2f 78 2d 6d 61 72 6b 64 6f 77 6e 3b text/x-markdown;
11e0: 20 65 6e 63 6f 64 69 6e 67 3d 75 74 66 2d 38 22 encoding=utf-8"
11f0: 29 3b 0a 20 20 20 20 70 72 69 6e 74 28 24 74 65 );. print($te
1200: 78 74 29 3b 0a 7d 0a 66 75 6e 63 74 69 6f 6e 20 xt);.}.function
1210: 68 28 24 73 29 20 7b 0a 20 20 20 20 72 65 74 75 h($s) {. retu
1220: 72 6e 20 68 74 6d 6c 73 70 65 63 69 61 6c 63 68 rn htmlspecialch
1230: 61 72 73 28 24 73 2c 20 45 4e 54 5f 51 55 4f 54 ars($s, ENT_QUOT
1240: 45 53 7c 45 4e 54 5f 48 54 4d 4c 35 2c 20 22 55 ES|ENT_HTML5, "U
1250: 54 46 2d 38 22 29 3b 0a 7d 0a 0a 0a 23 2d 2d 20 TF-8");.}...#--
1260: 73 68 6f 77 20 61 76 61 69 6c 61 62 6c 65 20 66 show available f
1270: 69 65 6c 64 73 0a 66 75 6e 63 74 69 6f 6e 20 66 ields.function f
1280: 69 65 6c 64 5f 69 6e 70 75 74 73 28 24 75 73 65 ield_inputs($use
1290: 72 2c 20 24 6e 61 6d 65 73 3d 22 69 6e 66 6f 2c r, $names="info,
12a0: 68 6f 6d 65 70 61 67 65 22 29 20 7b 0a 20 20 20 homepage") {.
12b0: 20 67 6c 6f 62 61 6c 20 24 66 69 65 6c 64 73 3b global $fields;
12c0: 0a 0a 20 20 20 20 2f 2f 20 67 65 74 20 65 78 69 .. // get exi
12d0: 73 74 69 6e 67 20 63 6f 6c 75 6d 6e 73 0a 20 20 sting columns.
12e0: 20 20 24 76 61 6c 75 65 73 20 3d 20 64 62 28 22 $values = db("
12f0: 53 45 4c 45 43 54 20 24 6e 61 6d 65 73 20 46 52 SELECT $names FR
1300: 4f 4d 20 75 73 65 72 20 57 48 45 52 45 20 6c 6f OM user WHERE lo
1310: 67 69 6e 3d 3f 22 2c 20 5b 24 75 73 65 72 5d 29 gin=?", [$user])
1320: 5b 30 5d 3b 0a 20 20 20 20 0a 20 20 20 20 2f 2f [0];. . //
1330: 20 6f 75 74 70 75 74 20 66 6f 72 6d 0a 20 20 20 output form.
1340: 20 24 68 74 6d 6c 20 3d 20 22 22 3b 20 24 68 20 $html = ""; $h
1350: 3d 20 22 68 22 3b 0a 20 20 20 20 66 6f 72 65 61 = "h";. forea
1360: 63 68 20 28 24 66 69 65 6c 64 73 20 61 73 20 24 ch ($fields as $
1370: 6e 61 6d 65 3d 3e 24 70 72 6f 70 73 29 20 7b 0a name=>$props) {.
1380: 20 20 20 20 20 20 20 20 65 78 74 72 61 63 74 28 extract(
1390: 24 70 72 6f 70 73 29 3b 0a 20 20 20 20 20 20 20 $props);.
13a0: 20 24 68 74 6d 6c 20 2e 3d 20 3c 3c 3c 48 54 4d $html .= <<<HTM
13b0: 4c 0a 20 20 20 20 20 20 20 20 20 20 3c 70 3e 0a L. <p>.
13c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 68 34 <h4
13d0: 3e 7b 24 68 28 24 74 69 74 6c 65 20 3f 3a 20 24 >{$h($title ?: $
13e0: 6e 61 6d 65 29 7d 3c 2f 68 34 3e 0a 20 20 20 20 name)}</h4>.
13f0: 20 20 20 20 20 20 20 20 20 3c 74 65 78 74 61 72 <textar
1400: 65 61 20 6e 61 6d 65 3d 27 7b 24 68 28 24 6e 61 ea name='{$h($na
1410: 6d 65 29 7d 27 20 72 6f 77 73 3d 33 20 63 6f 6c me)}' rows=3 col
1420: 73 3d 38 30 3e 7b 24 68 28 24 76 61 6c 75 65 73 s=80>{$h($values
1430: 5b 24 6e 61 6d 65 5d 29 7d 3c 2f 74 65 78 74 61 [$name])}</texta
1440: 72 65 61 3e 0a 20 20 20 20 20 20 20 20 20 20 20 rea>.
1450: 20 20 3c 62 72 3e 5c 6e 3c 73 6d 61 6c 6c 3e 7b <br>\n<small>{
1460: 24 64 65 73 63 7d 3c 2f 73 6d 61 6c 6c 3e 0a 20 $desc}</small>.
1470: 20 20 20 20 20 20 20 20 20 3c 2f 70 3e 5c 6e 0a </p>\n.
1480: 48 54 4d 4c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 HTML;. }.
1490: 72 65 74 75 72 6e 20 24 68 74 6d 6c 3b 0a 7d 0a return $html;.}.
14a0: 0a 23 2d 2d 20 73 74 6f 72 65 20 74 68 65 6d 20 .#-- store them
14b0: 62 61 63 6b 2e 0a 66 75 6e 63 74 69 6f 6e 20 73 back..function s
14c0: 61 76 65 5f 66 69 65 6c 64 73 28 24 75 73 65 72 ave_fields($user
14d0: 29 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 24 ) {. global $
14e0: 66 69 65 6c 64 73 3b 0a 20 20 20 20 24 61 6c 6c fields;. $all
14f0: 6f 77 65 64 20 3d 20 61 72 72 61 79 5f 6b 65 79 owed = array_key
1500: 73 28 24 66 69 65 6c 64 73 29 3b 0a 20 20 20 20 s($fields);.
1510: 24 65 78 69 73 74 69 6e 67 5f 63 6f 6c 75 6d 6e $existing_column
1520: 73 20 3d 20 61 72 72 61 79 5f 6b 65 79 73 28 0a s = array_keys(.
1530: 20 20 20 20 20 20 20 20 64 62 28 22 53 45 4c 45 db("SELE
1540: 43 54 20 2a 20 46 52 4f 4d 20 75 73 65 72 20 57 CT * FROM user W
1550: 48 45 52 45 20 6c 6f 67 69 6e 3d 3f 22 2c 20 5b HERE login=?", [
1560: 24 75 73 65 72 5d 29 5b 30 5d 0a 20 20 20 20 29 $user])[0]. )
1570: 3b 0a 20 20 20 20 0a 20 20 20 20 66 6f 72 65 61 ;. . forea
1580: 63 68 20 28 24 66 69 65 6c 64 73 20 61 73 20 24 ch ($fields as $
1590: 6e 61 6d 65 3d 3e 24 76 61 6c 75 65 29 20 7b 0a name=>$value) {.
15a0: 20 20 20 20 20 20 20 20 69 66 20 28 21 69 6e 5f if (!in_
15b0: 61 72 72 61 79 28 24 6e 61 6d 65 2c 20 24 61 6c array($name, $al
15c0: 6c 6f 77 65 64 29 29 20 7b 0a 20 20 20 20 20 20 lowed)) {.
15d0: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a continue;.
15e0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
15f0: 20 20 69 66 20 28 21 69 6e 5f 61 72 72 61 79 28 if (!in_array(
1600: 24 6e 61 6d 65 2c 20 24 65 78 69 73 74 69 6e 67 $name, $existing
1610: 5f 63 6f 6c 75 6d 6e 73 29 29 20 7b 0a 20 20 20 _columns)) {.
1620: 20 20 20 20 20 20 20 20 20 64 62 28 22 0a 20 20 db(".
1630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 4c AL
1640: 54 45 52 20 54 41 42 4c 45 20 60 75 73 65 72 60 TER TABLE `user`
1650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1660: 20 41 44 44 20 60 24 6e 61 6d 65 60 20 54 45 58 ADD `$name` TEX
1670: 54 20 44 45 46 41 55 4c 54 20 27 27 0a 20 20 20 T DEFAULT ''.
1680: 20 20 20 20 20 20 20 20 20 22 29 3b 0a 20 20 20 ");.
1690: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 }. d
16a0: 62 28 22 55 50 44 41 54 45 20 75 73 65 72 20 53 b("UPDATE user S
16b0: 45 54 20 60 24 6e 61 6d 65 60 3d 3f 20 57 48 45 ET `$name`=? WHE
16c0: 52 45 20 6c 6f 67 69 6e 3d 3f 22 2c 20 5b 24 76 RE login=?", [$v
16d0: 61 6c 75 65 2c 20 24 75 73 65 72 5d 29 3b 0a 20 alue, $user]);.
16e0: 20 20 20 7d 0a 20 20 20 20 70 61 67 65 5f 68 74 }. page_ht
16f0: 6d 6c 28 22 55 73 65 72 20 69 6e 66 6f 73 20 75 ml("User infos u
1700: 70 64 61 74 65 64 22 29 3b 0a 7d 0a 0a 23 2d 2d pdated");.}..#--
1710: 20 72 75 6e 0a 24 68 20 3d 20 22 68 22 3b 0a 69 run.$h = "h";.i
1720: 66 20 28 65 6d 70 74 79 28 24 75 73 65 72 20 3d f (empty($user =
1730: 20 24 5f 53 45 52 56 45 52 5b 22 46 4f 53 53 49 $_SERVER["FOSSI
1740: 4c 5f 55 53 45 52 22 5d 29 20 6f 72 20 69 6e 5f L_USER"]) or in_
1750: 61 72 72 61 79 28 24 75 73 65 72 2c 20 5b 22 61 array($user, ["a
1760: 6e 6f 6e 79 6d 6f 75 73 22 2c 20 22 6e 6f 62 6f nonymous", "nobo
1770: 64 79 22 2c 20 22 64 65 76 65 6c 6f 70 65 72 22 dy", "developer"
1780: 2c 20 22 72 65 61 64 65 72 22 5d 29 29 20 7b 0a , "reader"])) {.
1790: 20 20 20 20 70 61 67 65 5f 68 74 6d 6c 28 22 3c page_html("<
17a0: 68 32 3e 4e 6f 74 20 6c 6f 67 67 65 64 20 69 6e h2>Not logged in
17b0: 3c 2f 68 32 3e 3c 70 3e 45 64 69 74 20 63 6f 6e </h2><p>Edit con
17c0: 74 61 63 74 20 69 6e 66 6f 73 20 72 65 71 75 69 tact infos requi
17d0: 72 65 73 20 61 6e 20 61 63 74 69 76 65 20 3c 61 res an active <a
17e0: 20 68 72 65 66 3d 27 2e 2e 2f 6c 6f 67 69 6e 27 href='../login'
17f0: 3e 6c 6f 67 69 6e 3c 2f 61 3e 2e 22 29 3b 0a 7d >login</a>.");.}
1800: 0a 65 6c 73 65 69 66 20 28 21 65 6d 70 74 79 28 .elseif (!empty(
1810: 24 5f 50 4f 53 54 5b 22 73 61 76 65 22 5d 29 29 $_POST["save"]))
1820: 20 7b 0a 20 20 20 20 75 6e 73 65 74 28 24 5f 50 {. unset($_P
1830: 4f 53 54 5b 22 73 61 76 65 22 5d 29 3b 0a 20 20 OST["save"]);.
1840: 20 20 73 61 76 65 5f 66 69 65 6c 64 73 28 24 75 save_fields($u
1850: 73 65 72 2c 20 24 5f 50 4f 53 54 29 3b 0a 7d 0a ser, $_POST);.}.
1860: 65 6c 73 65 20 7b 0a 20 20 20 20 24 68 74 6d 6c else {. $html
1870: 20 3d 20 66 69 65 6c 64 5f 69 6e 70 75 74 73 28 = field_inputs(
1880: 24 75 73 65 72 29 3b 0a 20 20 20 20 24 68 74 6d $user);. $htm
1890: 6c 20 3d 20 3c 3c 3c 48 54 4d 4c 0a 20 20 20 20 l = <<<HTML.
18a0: 20 3c 68 32 3e 45 64 69 74 20 75 73 65 72 20 64 <h2>Edit user d
18b0: 65 74 61 69 6c 73 3c 2f 68 32 3e 0a 20 20 20 20 etails</h2>.
18c0: 20 3c 66 6f 72 6d 20 61 63 74 69 6f 6e 3d 22 22 <form action=""
18d0: 20 6d 65 74 68 6f 64 3d 50 4f 53 54 3e 0a 20 20 method=POST>.
18e0: 20 20 20 20 20 20 7b 24 68 74 6d 6c 7d 0a 20 20 {$html}.
18f0: 20 20 20 20 20 20 3c 70 3e 3c 69 6e 70 75 74 20 <p><input
1900: 74 79 70 65 3d 73 75 62 6d 69 74 20 6e 61 6d 65 type=submit name
1910: 3d 73 61 76 65 20 76 61 6c 75 65 3d 41 70 70 6c =save value=Appl
1920: 79 3e 3c 2f 70 3e 0a 20 20 20 20 20 3c 2f 66 6f y></p>. </fo
1930: 72 6d 3e 0a 48 54 4d 4c 3b 0a 20 20 20 20 70 61 rm>.HTML;. pa
1940: 67 65 5f 68 74 6d 6c 28 24 68 74 6d 6c 29 3b 0a ge_html($html);.
1950: 7d 0a 0a 0a 3f 3e }...?>