Collection of themes/skins for the Fossil SCM

⌈⌋ ⎇ branch:  Fossil Skins Extra


Hex Artifact Content

Artifact 30ff770ec65a4a10c7195f8ad9df9a416bf666fa:

  • Executable file extroot/skin — part of check-in [b4437b01f5] at 2021-10-12 15:14:53 on branch trunk — Add some more adminstrative links (user: mario size: 4780)

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   &amp; 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>.