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 63 6f 6e 66 69 67 0a 23 20 63 61 ype: config.# ca
0060: 74 65 67 6f 72 79 3a 20 61 64 6d 69 6e 0a 23 20 tegory: admin.#
0070: 74 69 74 6c 65 3a 20 53 6b 69 6e 20 65 64 69 74 title: Skin edit
0080: 6f 72 0a 23 20 64 65 73 63 72 69 70 74 69 6f 6e or.# description
0090: 3a 20 45 64 69 74 20 63 75 72 72 65 6e 74 20 73 : Edit current s
00a0: 6b 69 6e 20 70 61 72 74 73 20 61 6c 6c 20 61 74 kin parts all at
00b0: 20 6f 6e 63 65 0a 23 20 76 65 72 73 69 6f 6e 3a once.# version:
00c0: 20 30 2e 36 0a 23 20 73 74 61 74 65 3a 20 62 65 0.6.# state: be
00d0: 74 61 0a 23 20 64 65 70 65 6e 64 73 3a 20 70 68 ta.# depends: ph
00e0: 70 3a 73 71 6c 69 74 65 0a 23 20 63 6f 6e 66 69 p:sqlite.# confi
00f0: 67 3a 20 2d 0a 23 0a 23 20 43 6f 6d 62 69 6e 65 g: -.#.# Combine
0100: 73 20 68 65 61 64 65 72 2f 66 6f 6f 74 65 72 2f s header/footer/
0110: 63 73 73 2f 73 63 72 69 70 74 20 65 64 69 74 69 css/script editi
0120: 6e 67 2c 0a 23 20 75 70 64 61 74 65 73 20 63 75 ng,.# updates cu
0130: 72 72 65 6e 74 3d 64 72 61 66 74 31 20 64 69 72 rrent=draft1 dir
0140: 65 63 74 6c 79 2c 20 62 61 63 6b 73 20 75 70 20 ectly, backs up
0150: 69 6e 74 6f 20 64 72 61 66 74 39 2e 0a 23 0a 23 into draft9..#.#
0160: 20 50 65 72 6d 69 74 73 20 61 6e 79 20 75 73 65 Permits any use
0170: 72 20 6c 69 73 74 65 64 20 69 6e 20 27 64 72 61 r listed in 'dra
0180: 66 74 31 2d 75 73 65 72 73 27 20 73 65 74 74 69 ft1-users' setti
0190: 6e 67 2e 0a 23 0a 0a 0a 23 2d 2d 20 69 6e 69 74 ng..#...#-- init
01a0: 0a 68 65 61 64 65 72 28 22 43 6f 6e 74 65 6e 74 .header("Content
01b0: 2d 54 79 70 65 3a 20 74 65 78 74 2f 68 74 6d 6c -Type: text/html
01c0: 3b 20 69 6e 6c 69 6e 65 22 29 3b 0a 69 6e 69 5f ; inline");.ini_
01d0: 73 65 74 28 22 64 69 73 70 6c 61 79 5f 65 72 72 set("display_err
01e0: 6f 72 73 22 2c 20 31 29 3b 0a 69 66 20 28 21 69 ors", 1);.if (!i
01f0: 73 5f 61 64 6d 69 6e 28 29 20 26 26 20 21 69 6e s_admin() && !in
0200: 5f 61 72 72 61 79 28 24 5f 53 45 52 56 45 52 5b _array($_SERVER[
0210: 22 46 4f 53 53 49 4c 5f 55 53 45 52 22 5d 2c 20 "FOSSIL_USER"],
0220: 61 6c 6c 6f 77 65 64 5f 75 73 65 72 73 28 29 29 allowed_users())
0230: 29 20 7b 0a 20 20 20 20 64 69 65 28 22 41 64 6d ) {. die("Adm
0240: 69 6e 20 6f 72 20 73 6b 69 6e 20 65 64 69 74 6f in or skin edito
0250: 72 73 20 6f 6e 6c 79 22 29 3b 0a 7d 0a 24 68 20 rs only");.}.$h
0260: 3d 20 22 68 74 6d 6c 65 6e 74 69 74 69 65 73 22 = "htmlentities"
0270: 3b 0a 24 46 49 45 4c 44 53 20 3d 20 5b 27 68 65 ;.$FIELDS = ['he
0280: 61 64 65 72 27 2c 20 27 66 6f 6f 74 65 72 27 2c ader', 'footer',
0290: 20 27 63 73 73 27 2c 20 27 6a 73 27 5d 3b 0a 0a 'css', 'js'];..
02a0: 23 2d 2d 20 64 61 74 61 62 61 73 65 20 28 3d 3d #-- database (==
02b0: 20 66 6f 73 73 69 6c 20 72 65 70 6f 29 0a 66 75 fossil repo).fu
02c0: 6e 63 74 69 6f 6e 20 64 62 28 24 73 71 6c 3d 22 nction db($sql="
02d0: 22 2c 20 24 70 61 72 61 6d 73 3d 5b 5d 29 20 7b ", $params=[]) {
02e0: 0a 20 20 20 20 67 6c 6f 62 61 6c 20 24 64 62 3b . global $db;
02f0: 0a 20 20 20 20 69 66 20 28 65 6d 70 74 79 28 24 . if (empty($
0300: 64 62 29 29 20 7b 0a 20 20 20 20 20 20 20 20 24 db)) {. $
0310: 64 62 20 3d 20 6e 65 77 20 50 44 4f 28 22 73 71 db = new PDO("sq
0320: 6c 69 74 65 3a 3a 6d 65 6d 6f 72 79 3a 22 29 3b lite::memory:");
0330: 0a 20 20 20 20 20 20 20 20 24 64 62 2d 3e 73 65 . $db->se
0340: 74 41 74 74 72 69 62 75 74 65 28 50 44 4f 3a 3a tAttribute(PDO::
0350: 41 54 54 52 5f 45 52 52 4d 4f 44 45 2c 20 50 44 ATTR_ERRMODE, PD
0360: 4f 3a 3a 45 52 52 4d 4f 44 45 5f 57 41 52 4e 49 O::ERRMODE_WARNI
0370: 4e 47 29 3b 0a 20 20 20 20 20 20 20 20 24 64 62 NG);. $db
0380: 2d 3e 71 75 65 72 79 28 22 41 54 54 41 43 48 20 ->query("ATTACH
0390: 44 41 54 41 42 41 53 45 20 27 24 5f 53 45 52 56 DATABASE '$_SERV
03a0: 45 52 5b 46 4f 53 53 49 4c 5f 52 45 50 4f 53 49 ER[FOSSIL_REPOSI
03b0: 54 4f 52 59 5d 27 20 41 53 20 27 72 65 70 6f 27 TORY]' AS 'repo'
03c0: 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 ");. }. if
03d0: 20 28 24 70 61 72 61 6d 73 29 20 7b 0a 20 20 20 ($params) {.
03e0: 20 20 20 20 20 24 73 74 6d 74 20 3d 20 24 64 62 $stmt = $db
03f0: 2d 3e 70 72 65 70 61 72 65 28 24 73 71 6c 29 3b ->prepare($sql);
0400: 0a 20 20 20 20 20 20 20 20 24 73 74 6d 74 2d 3e . $stmt->
0410: 65 78 65 63 75 74 65 28 24 70 61 72 61 6d 73 29 execute($params)
0420: 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e ;. return
0430: 20 24 73 74 6d 74 2d 3e 66 65 74 63 68 41 6c 6c $stmt->fetchAll
0440: 28 50 44 4f 3a 3a 46 45 54 43 48 5f 41 53 53 4f (PDO::FETCH_ASSO
0450: 43 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c C);. }. el
0460: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 se {. ret
0470: 75 72 6e 20 24 64 62 2d 3e 71 75 65 72 79 28 24 urn $db->query($
0480: 73 71 6c 29 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 23 sql);. }.}..#
0490: 20 75 73 65 72 20 63 68 65 63 6b 73 0a 66 75 6e user checks.fun
04a0: 63 74 69 6f 6e 20 61 6c 6c 6f 77 65 64 5f 75 73 ction allowed_us
04b0: 65 72 73 28 29 20 7b 0a 20 20 20 20 24 72 20 3d ers() {. $r =
04c0: 20 64 62 28 22 73 65 6c 65 63 74 20 2a 20 66 72 db("select * fr
04d0: 6f 6d 20 63 6f 6e 66 69 67 20 77 68 65 72 65 20 om config where
04e0: 6e 61 6d 65 3d 3f 22 2c 20 5b 27 64 72 61 66 74 name=?", ['draft
04f0: 31 2d 75 73 65 72 73 27 5d 29 3b 0a 20 20 20 20 1-users']);.
0500: 69 66 20 28 24 72 29 20 7b 0a 20 20 20 20 20 20 if ($r) {.
0510: 20 20 72 65 74 75 72 6e 20 73 74 72 5f 67 65 74 return str_get
0520: 63 73 76 28 24 72 5b 30 5d 5b 22 76 61 6c 75 65 csv($r[0]["value
0530: 22 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 "]);. }. r
0540: 65 74 75 72 6e 20 5b 5d 3b 0a 7d 0a 66 75 6e 63 eturn [];.}.func
0550: 74 69 6f 6e 20 69 73 5f 61 64 6d 69 6e 28 29 20 tion is_admin()
0560: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 73 74 72 {. return str
0570: 70 6f 73 28 24 5f 53 45 52 56 45 52 5b 22 46 4f pos($_SERVER["FO
0580: 53 53 49 4c 5f 43 41 50 41 42 49 4c 49 54 49 45 SSIL_CAPABILITIE
0590: 53 22 5d 2c 20 22 73 22 29 20 21 3d 3d 20 66 61 S"], "s") !== fa
05a0: 6c 73 65 3b 0a 7d 0a 0a 23 20 52 45 50 4c 41 43 lse;.}..# REPLAC
05b0: 45 20 6c 69 73 74 20 28 53 51 4c 20 62 6c 6f 62 E list (SQL blob
05c0: 29 20 66 72 6f 6d 20 63 75 72 72 65 6e 74 20 73 ) from current s
05d0: 6b 69 6e 20 70 61 72 74 73 0a 66 75 6e 63 74 69 kin parts.functi
05e0: 6f 6e 20 73 71 6c 5f 62 61 63 6b 75 70 28 24 73 on sql_backup($s
05f0: 3d 22 22 29 20 7b 0a 20 20 20 20 67 6c 6f 62 61 ="") {. globa
0600: 6c 20 24 64 62 3b 0a 20 20 20 20 66 6f 72 65 61 l $db;. forea
0610: 63 68 20 28 64 62 28 22 53 45 4c 45 43 54 20 2a ch (db("SELECT *
0620: 20 46 52 4f 4d 20 63 6f 6e 66 69 67 20 57 48 45 FROM config WHE
0630: 52 45 20 6e 61 6d 65 20 49 4e 20 28 27 68 65 61 RE name IN ('hea
0640: 64 65 72 27 2c 20 27 66 6f 6f 74 65 72 27 2c 20 der', 'footer',
0650: 27 63 73 73 27 2c 20 27 6a 73 27 2c 20 27 64 65 'css', 'js', 'de
0660: 74 61 69 6c 73 27 29 22 29 20 61 73 20 24 72 29 tails')") as $r)
0670: 20 7b 0a 20 20 20 20 20 20 20 20 24 73 20 2e 3d {. $s .=
0680: 20 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 63 "REPLACE INTO c
0690: 6f 6e 66 69 67 20 28 6e 61 6d 65 2c 6d 74 69 6d onfig (name,mtim
06a0: 65 2c 76 61 6c 75 65 29 20 56 41 4c 55 45 53 20 e,value) VALUES
06b0: 28 27 24 72 5b 6e 61 6d 65 5d 27 2c 20 24 72 5b ('$r[name]', $r[
06c0: 6d 74 69 6d 65 5d 2c 20 7b 24 64 62 2d 3e 71 75 mtime], {$db->qu
06d0: 6f 74 65 28 24 72 5b 27 76 61 6c 75 65 27 5d 29 ote($r['value'])
06e0: 7d 29 3b 5c 6e 22 3b 0a 20 20 20 20 7d 0a 20 20 });\n";. }.
06f0: 20 20 72 65 74 75 72 6e 20 24 73 3b 0a 7d 0a 0a return $s;.}..
0700: 0a 23 2d 2d 20 62 61 63 6b 75 70 20 64 6f 77 6e .#-- backup down
0710: 6c 6f 61 64 0a 69 66 20 28 69 73 73 65 74 28 24 load.if (isset($
0720: 5f 47 45 54 5b 22 62 61 63 6b 75 70 22 5d 29 29 _GET["backup"]))
0730: 20 7b 0a 20 20 20 20 68 65 61 64 65 72 28 22 43 {. header("C
0740: 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 65 78 ontent-Type: tex
0750: 74 2f 73 71 6c 22 29 3b 0a 20 20 20 20 68 65 61 t/sql");. hea
0760: 64 65 72 28 22 43 6f 6e 74 65 6e 74 2d 44 69 73 der("Content-Dis
0770: 70 6f 73 69 74 69 6f 6e 3a 20 61 74 74 61 63 68 position: attach
0780: 6d 65 6e 74 3b 20 66 69 6c 65 6e 61 6d 65 3d 66 ment; filename=f
0790: 6f 73 73 69 6c 2d 73 6b 69 6e 2d 62 61 63 6b 75 ossil-skin-backu
07a0: 70 2d 63 75 72 72 65 6e 74 2e 74 78 74 22 29 3b p-current.txt");
07b0: 0a 20 20 20 20 64 69 65 28 73 71 6c 5f 62 61 63 . die(sql_bac
07c0: 6b 75 70 28 29 29 3b 0a 7d 0a 23 2d 2d 20 75 70 kup());.}.#-- up
07d0: 64 61 74 65 0a 65 6c 73 65 69 66 20 28 69 73 73 date.elseif (iss
07e0: 65 74 28 24 5f 50 4f 53 54 5b 22 73 61 76 65 22 et($_POST["save"
07f0: 5d 29 29 20 7b 0a 0a 20 20 20 20 23 20 69 6e 73 ])) {.. # ins
0800: 65 72 74 20 73 6b 69 6e 3a 42 61 63 6b 75 70 2a ert skin:Backup*
0810: 0a 20 20 20 20 69 66 20 28 24 5f 50 4f 53 54 5b . if ($_POST[
0820: 22 73 61 76 65 5f 62 6b 22 5d 29 20 7b 0a 20 20 "save_bk"]) {.
0830: 20 20 20 20 20 20 64 62 28 22 49 4e 53 45 52 54 db("INSERT
0840: 20 49 4e 54 4f 20 63 6f 6e 66 69 67 20 28 6e 61 INTO config (na
0850: 6d 65 2c 6d 74 69 6d 65 2c 76 61 6c 75 65 29 20 me,mtime,value)
0860: 56 41 4c 55 45 53 20 28 3f 2c 20 3f 2c 20 3f 29 VALUES (?, ?, ?)
0870: 22 2c 20 5b 22 73 6b 69 6e 3a 42 61 63 6b 75 70 ", ["skin:Backup
0880: 20 6f 6e 20 22 2e 73 74 72 66 74 69 6d 65 28 22 on ".strftime("
0890: 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 %Y-%m-%d %H:%M:%
08a0: 53 22 29 2c 20 74 69 6d 65 28 29 2c 20 73 71 6c S"), time(), sql
08b0: 5f 62 61 63 6b 75 70 28 29 5d 29 3b 0a 20 20 20 _backup()]);.
08c0: 20 7d 0a 20 20 20 20 0a 20 20 20 20 23 20 75 70 }. . # up
08d0: 64 61 74 65 20 69 6e 64 69 76 69 64 75 61 6c 20 date individual
08e0: 63 6f 6e 66 69 67 20 73 6b 69 6e 20 70 61 72 74 config skin part
08f0: 73 0a 20 20 20 20 66 6f 72 65 61 63 68 20 28 24 s. foreach ($
0900: 46 49 45 4c 44 53 20 41 53 20 24 66 69 65 6c 64 FIELDS AS $field
0910: 29 20 7b 0a 20 20 20 20 20 20 20 20 24 6f 6c 64 ) {. $old
0920: 20 3d 20 64 62 28 22 53 45 4c 45 43 54 20 76 61 = db("SELECT va
0930: 6c 75 65 20 46 52 4f 4d 20 63 6f 6e 66 69 67 20 lue FROM config
0940: 57 48 45 52 45 20 6e 61 6d 65 3d 3f 22 2c 20 5b WHERE name=?", [
0950: 24 66 69 65 6c 64 5d 29 5b 30 5d 5b 22 76 61 6c $field])[0]["val
0960: 75 65 22 5d 3b 0a 20 20 20 20 20 20 20 20 69 66 ue"];. if
0970: 20 28 24 5f 50 4f 53 54 5b 22 73 61 76 65 5f 64 ($_POST["save_d
0980: 39 22 5d 29 20 7b 0a 20 20 20 20 20 20 20 20 20 9"]) {.
0990: 20 20 20 64 62 28 22 52 45 50 4c 41 43 45 20 49 db("REPLACE I
09a0: 4e 54 4f 20 63 6f 6e 66 69 67 20 28 6e 61 6d 65 NTO config (name
09b0: 2c 6d 74 69 6d 65 2c 76 61 6c 75 65 29 20 56 41 ,mtime,value) VA
09c0: 4c 55 45 53 20 28 3f 2c 20 3f 2c 20 3f 29 22 2c LUES (?, ?, ?)",
09d0: 20 5b 22 64 72 61 66 74 39 2d 24 66 69 65 6c 64 ["draft9-$field
09e0: 22 2c 20 74 69 6d 65 28 29 2c 20 24 6f 6c 64 5d ", time(), $old]
09f0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 );. }.
0a00: 20 20 20 20 20 69 66 20 28 24 5f 50 4f 53 54 5b if ($_POST[
0a10: 22 73 61 76 65 5f 64 31 22 5d 29 20 7b 0a 20 20 "save_d1"]) {.
0a20: 20 20 20 20 20 20 20 20 20 20 64 62 28 22 52 45 db("RE
0a30: 50 4c 41 43 45 20 49 4e 54 4f 20 63 6f 6e 66 69 PLACE INTO confi
0a40: 67 20 28 6e 61 6d 65 2c 6d 74 69 6d 65 2c 76 61 g (name,mtime,va
0a50: 6c 75 65 29 20 56 41 4c 55 45 53 20 28 3f 2c 20 lue) VALUES (?,
0a60: 3f 2c 20 3f 29 22 2c 20 5b 22 64 72 61 66 74 31 ?, ?)", ["draft1
0a70: 2d 24 66 69 65 6c 64 22 2c 20 74 69 6d 65 28 29 -$field", time()
0a80: 2c 20 24 5f 50 4f 53 54 5b 24 66 69 65 6c 64 5d , $_POST[$field]
0a90: 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 ]);. }.
0aa0: 20 20 20 20 20 20 69 66 20 28 54 52 55 45 29 20 if (TRUE)
0ab0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 62 {. db
0ac0: 28 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 63 ("REPLACE INTO c
0ad0: 6f 6e 66 69 67 20 28 6e 61 6d 65 2c 6d 74 69 6d onfig (name,mtim
0ae0: 65 2c 76 61 6c 75 65 29 20 56 41 4c 55 45 53 20 e,value) VALUES
0af0: 28 3f 2c 20 3f 2c 20 3f 29 22 2c 20 5b 22 24 66 (?, ?, ?)", ["$f
0b00: 69 65 6c 64 22 2c 20 74 69 6d 65 28 29 2c 20 24 ield", time(), $
0b10: 5f 50 4f 53 54 5b 24 66 69 65 6c 64 5d 5d 29 3b _POST[$field]]);
0b20: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d . }. }
0b30: 0a 20 20 20 20 70 72 69 6e 74 20 22 3c 64 69 76 . print "<div
0b40: 20 63 6c 61 73 73 3d 27 66 6f 73 73 69 6c 2d 64 class='fossil-d
0b50: 6f 63 27 20 64 61 74 61 2d 74 69 74 6c 65 3d 27 oc' data-title='
0b60: 73 6b 69 6e 20 73 61 76 65 64 27 3e 20 f0 9f 9f skin saved'> ðŸŸ
0b70: a9 20 53 61 76 65 64 2e 22 3b 0a 0a 7d 0a 23 2d © Saved.";..}.#-
0b80: 2d 20 64 69 73 70 6c 61 79 20 66 6f 72 6d 0a 65 - display form.e
0b90: 6c 73 65 20 7b 0a 0a 20 20 20 20 3f 3e 0a 20 20 lse {.. ?>.
0ba0: 20 20 3c 64 69 76 20 63 6c 61 73 73 3d 27 66 6f <div class='fo
0bb0: 73 73 69 6c 2d 64 6f 63 27 20 64 61 74 61 2d 74 ssil-doc' data-t
0bc0: 69 74 6c 65 3d 27 73 6b 69 6e 20 65 64 69 74 6f itle='skin edito
0bd0: 72 27 3e 0a 20 20 20 20 3c 73 74 79 6c 65 3e 0a r'>. <style>.
0be0: 20 20 20 20 20 2e 73 6b 69 6e 2d 65 64 69 74 6f .skin-edito
0bf0: 72 20 7b 20 64 69 73 70 6c 61 79 3a 20 62 6c 6f r { display: blo
0c00: 63 6b 3b 20 77 69 64 74 68 3a 20 31 30 30 30 70 ck; width: 1000p
0c10: 74 3b 20 7d 0a 20 20 20 20 20 2e 73 6b 69 6e 2d t; }. .skin-
0c20: 65 64 69 74 6f 72 20 69 6e 70 75 74 5b 74 79 70 editor input[typ
0c30: 65 3d 73 75 62 6d 69 74 5d 20 7b 20 6d 61 72 67 e=submit] { marg
0c40: 69 6e 3a 20 31 30 70 74 3b 20 7d 0a 20 20 20 20 in: 10pt; }.
0c50: 20 2e 73 6b 69 6e 2d 62 6c 6f 63 6b 20 7b 20 64 .skin-block { d
0c60: 69 73 70 6c 61 79 3a 20 69 6e 6c 69 6e 65 2d 62 isplay: inline-b
0c70: 6c 6f 63 6b 3b 20 62 61 63 6b 67 72 6f 75 6e 64 lock; background
0c80: 3a 20 23 65 65 65 3b 20 62 6f 72 64 65 72 2d 72 : #eee; border-r
0c90: 61 64 69 75 73 3a 20 31 30 70 74 3b 20 70 61 64 adius: 10pt; pad
0ca0: 64 69 6e 67 3a 20 35 70 74 3b 20 7d 0a 20 20 20 ding: 5pt; }.
0cb0: 20 20 2e 73 6b 69 6e 2d 62 6c 6f 63 6b 20 62 20 .skin-block b
0cc0: 7b 20 64 69 73 70 6c 61 79 3a 20 62 6c 6f 63 6b { display: block
0cd0: 3b 20 7d 0a 20 20 20 20 3c 2f 73 74 79 6c 65 3e ; }. </style>
0ce0: 0a 20 20 20 20 3c 66 6f 72 6d 20 6d 65 74 68 6f . <form metho
0cf0: 64 3d 50 4f 53 54 20 65 6e 63 74 79 70 65 3d 22 d=POST enctype="
0d00: 6d 75 6c 74 69 70 61 72 74 2f 66 6f 72 6d 2d 64 multipart/form-d
0d10: 61 74 61 22 20 63 6c 61 73 73 3d 73 6b 69 6e 2d ata" class=skin-
0d20: 65 64 69 74 6f 72 3e 0a 20 20 20 20 3c 68 33 3e editor>. <h3>
0d30: 53 6b 69 6e 20 45 64 69 74 6f 72 3c 2f 68 33 3e Skin Editor</h3>
0d40: 0a 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65 . <input type
0d50: 3d 73 75 62 6d 69 74 20 6e 61 6d 65 3d 73 61 76 =submit name=sav
0d60: 65 20 76 61 6c 75 65 3d 27 73 61 76 65 20 26 61 e value='save &a
0d70: 6d 70 3b 20 61 70 70 6c 79 27 3e 0a 20 20 20 20 mp; apply'>.
0d80: 3c 62 72 3e 0a 20 20 20 20 3c 3f 70 68 70 0a 0a <br>. <?php..
0d90: 20 20 20 20 66 6f 72 65 61 63 68 20 28 24 46 49 foreach ($FI
0da0: 45 4c 44 53 20 61 73 20 24 66 69 65 6c 64 29 20 ELDS as $field)
0db0: 7b 0a 20 20 20 20 20 20 20 20 24 76 61 6c 75 65 {. $value
0dc0: 20 3d 20 64 62 28 22 53 45 4c 45 43 54 20 6e 61 = db("SELECT na
0dd0: 6d 65 2c 76 61 6c 75 65 20 46 52 4f 4d 20 63 6f me,value FROM co
0de0: 6e 66 69 67 20 57 48 45 52 45 20 6e 61 6d 65 20 nfig WHERE name
0df0: 3d 20 3f 22 2c 20 5b 24 66 69 65 6c 64 5d 29 5b = ?", [$field])[
0e00: 30 5d 5b 22 76 61 6c 75 65 22 5d 3b 0a 20 20 20 0]["value"];.
0e10: 20 20 20 20 20 70 72 69 6e 74 20 3c 3c 3c 45 4f print <<<EO
0e20: 46 0a 20 20 20 20 20 20 20 20 3c 6c 61 62 65 6c F. <label
0e30: 20 63 6c 61 73 73 3d 73 6b 69 6e 2d 62 6c 6f 63 class=skin-bloc
0e40: 6b 3e 0a 20 20 20 20 20 20 20 20 20 20 20 3c 62 k>. <b
0e50: 3e 7b 24 66 69 65 6c 64 7d 3c 2f 62 3e 0a 20 20 >{$field}</b>.
0e60: 20 20 20 20 20 20 20 20 20 3c 74 65 78 74 61 72 <textar
0e70: 65 61 20 63 6f 6c 73 3d 35 35 20 72 6f 77 73 3d ea cols=55 rows=
0e80: 32 30 20 6e 61 6d 65 3d 7b 24 66 69 65 6c 64 7d 20 name={$field}
0e90: 3e 7b 24 68 28 24 76 61 6c 75 65 29 7d 3c 2f 74 >{$h($value)}</t
0ea0: 65 78 74 61 72 65 61 3e 0a 20 20 20 20 20 20 20 extarea>.
0eb0: 20 3c 2f 6c 61 62 65 6c 3e 20 20 20 0a 45 4f 46 </label> .EOF
0ec0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 3f 3e 0a ;. }.. ?>.
0ed0: 20 20 20 20 3c 62 72 3e 3c 69 6e 70 75 74 20 74 <br><input t
0ee0: 79 70 65 3d 73 75 62 6d 69 74 20 6e 61 6d 65 3d ype=submit name=
0ef0: 73 61 76 65 20 76 61 6c 75 65 3d 27 73 61 76 65 save value='save
0f00: 20 26 61 6d 70 3b 20 61 70 70 6c 79 27 3e 3c 62 & apply'><b
0f10: 72 3e 0a 20 20 20 20 54 68 69 73 20 77 69 6c 6c r>. This will
0f20: 20 75 70 64 61 74 65 20 3c 62 3e 63 75 72 72 65 update <b>curre
0f30: 6e 74 3c 2f 62 3e 20 73 6b 69 6e 20 70 61 72 74 nt</b> skin part
0f40: 73 20 28 3d 20 64 69 72 65 63 74 6c 79 20 70 75 s (= directly pu
0f50: 62 6c 69 73 68 65 64 29 2e 3c 62 72 3e 0a 20 20 blished).<br>.
0f60: 20 20 3c 69 6e 70 75 74 20 6e 61 6d 65 3d 73 61 <input name=sa
0f70: 76 65 5f 64 31 20 76 61 6c 75 65 3d 31 20 74 79 ve_d1 value=1 ty
0f80: 70 65 3d 63 68 65 63 6b 62 6f 78 20 63 68 65 63 pe=checkbox chec
0f90: 6b 65 64 3e 20 4f 76 65 72 77 72 69 74 65 20 3c ked> Overwrite <
0fa0: 62 3e 64 72 61 66 74 31 3c 2f 62 3e 20 77 69 74 b>draft1</b> wit
0fb0: 68 20 63 75 72 72 65 6e 74 20 70 61 72 74 73 20 h current parts
0fc0: 74 6f 6f 2e 3c 62 72 3e 0a 20 20 20 20 3c 69 6e too.<br>. <in
0fd0: 70 75 74 20 6e 61 6d 65 3d 73 61 76 65 5f 64 39 put name=save_d9
0fe0: 20 76 61 6c 75 65 3d 31 20 74 79 70 65 3d 63 68 value=1 type=ch
0ff0: 65 63 6b 62 6f 78 20 63 68 65 63 6b 65 64 3e 20 eckbox checked>
1000: 53 61 76 65 20 74 68 65 20 70 72 65 76 69 6f 75 Save the previou
1010: 73 20 76 65 72 73 69 6f 6e 20 74 6f 20 3c 61 20 s version to <a
1020: 68 72 65 66 3d 22 3c 3f 3d 24 5f 53 45 52 56 45 href="<?=$_SERVE
1030: 52 5b 22 46 4f 53 53 49 4c 5f 55 52 49 22 5d 3f R["FOSSIL_URI"]?
1040: 3e 2f 64 72 61 66 74 39 2f 68 6f 6d 65 22 3e 64 >/draft9/home">d
1050: 72 61 66 74 39 3c 2f 61 3e 3c 62 72 3e 0a 20 20 raft9</a><br>.
1060: 20 20 3c 69 6e 70 75 74 20 6e 61 6d 65 3d 73 61 <input name=sa
1070: 76 65 5f 62 6b 20 76 61 6c 75 65 3d 31 20 74 79 ve_bk value=1 ty
1080: 70 65 3d 63 68 65 63 6b 62 6f 78 20 63 68 65 63 pe=checkbox chec
1090: 6b 65 64 3e 20 42 75 74 20 61 6c 73 6f 20 63 72 ked> But also cr
10a0: 65 61 74 65 20 61 20 73 6b 69 6e 3a 42 61 63 6b eate a skin:Back
10b0: 75 70 20 65 6e 74 72 79 3c 62 72 3e 0a 20 20 20 up entry<br>.
10c0: 20 3c 2f 66 6f 72 6d 3e 0a 20 20 20 20 3c 62 72 </form>. <br
10d0: 3e 3c 62 3e 4f 74 68 65 72 20 6f 70 74 69 6f 6e ><b>Other option
10e0: 73 3c 2f 62 3e 0a 20 20 20 20 3c 75 6c 3e 0a 20 s</b>. <ul>.
10f0: 20 20 20 3c 6c 69 3e 20 3c 61 20 68 72 65 66 3d <li> <a href=
1100: 22 3c 3f 3d 24 5f 53 45 52 56 45 52 5b 22 50 48 "<?=$_SERVER["PH
1110: 50 5f 53 45 4c 46 22 5d 3f 3e 3f 62 61 63 6b 75 P_SELF"]?>?backu
1120: 70 3d 63 75 72 72 65 6e 74 2e 74 78 74 22 3e 62 p=current.txt">b
1130: 61 63 6b 75 70 2e 73 71 6c 3c 2f 61 3e 20 6f 66 ackup.sql</a> of
1140: 20 63 75 72 72 65 6e 74 20 73 6b 69 6e 0a 20 20 current skin.
1150: 20 20 3c 6c 69 3e 20 3c 61 20 68 72 65 66 3d 22 <li> <a href="
1160: 3c 3f 3d 24 5f 53 45 52 56 45 52 5b 22 46 4f 53 <?=$_SERVER["FOS
1170: 53 49 4c 5f 55 52 49 22 5d 3f 3e 2f 73 65 74 75 SIL_URI"]?>/setu
1180: 70 5f 73 6b 69 6e 5f 61 64 6d 69 6e 22 3e 73 6b p_skin_admin">sk
1190: 69 6e 20 61 72 63 68 69 76 65 2f 61 64 6d 69 6e in archive/admin
11a0: 3c 2f 61 3e 0a 20 20 20 20 3c 6c 69 3e 20 3c 61 </a>. <li> <a
11b0: 20 68 72 65 66 3d 22 3c 3f 3d 24 5f 53 45 52 56 href="<?=$_SERV
11c0: 45 52 5b 22 46 4f 53 53 49 4c 5f 55 52 49 22 5d ER["FOSSIL_URI"]
11d0: 3f 3e 2f 73 65 74 75 70 5f 73 6b 69 6e 22 3e 73 ?>/setup_skin">s
11e0: 65 74 75 70 5f 73 6b 69 6e 3c 2f 61 3e 0a 20 20 etup_skin</a>.
11f0: 20 20 3c 6c 69 3e 20 3c 61 20 68 72 65 66 3d 22 <li> <a href="
1200: 3c 3f 3d 24 5f 53 45 52 56 45 52 5b 22 46 4f 53 <?=$_SERVER["FOS
1210: 53 49 4c 5f 55 52 49 22 5d 3f 3e 2f 73 65 74 75 SIL_URI"]?>/setu
1220: 70 5f 73 6b 69 6e 65 64 69 74 3f 77 3d 32 26 73 p_skinedit?w=2&s
1230: 6b 3d 31 22 3e 65 64 69 74 20 64 72 61 66 74 31 k=1">edit draft1
1240: 3c 2f 61 3e 0a 20 20 20 20 3c 6c 69 3e 20 50 75 </a>. <li> Pu
1250: 62 6c 69 73 68 20 74 6f 20 72 65 6d 6f 74 65 20 blish to remote
1260: 72 65 70 6f 3a 20 3c 63 6f 64 65 3e 66 6f 73 73 repo: <code>foss
1270: 69 6c 20 63 6f 6e 66 69 67 20 70 75 73 68 20 73 il config push s
1280: 6b 69 6e 3c 2f 63 6f 64 65 3e 0a 20 20 20 20 3c kin</code>. <
1290: 2f 75 6c 3e 0a 20 20 20 20 3c 3f 70 68 70 0a 7d /ul>. <?php.}
12a0: 0a 0a 3f 3e 0a 3c 2f 64 69 76 3e 0a ..?>.</div>.