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 6f 75 74 70 75 74 0a 23 20 63 61 ype: output.# ca
0060: 74 65 67 6f 72 79 3a 20 61 70 69 0a 23 20 74 69 tegory: api.# ti
0070: 74 6c 65 3a 20 70 72 6f 6a 65 63 74 2e 6a 73 6f tle: project.jso
0080: 6e 0a 23 20 64 65 73 63 72 69 70 74 69 6f 6e 3a n.# description:
0090: 20 66 72 65 73 68 63 6f 64 65 2d 73 74 79 6c 65 freshcode-style
00a0: 20 70 72 6f 6a 65 63 74 2e 6a 73 6f 6e 20 77 2f project.json w/
00b0: 20 63 68 61 6e 67 65 6c 6f 67 0a 23 20 76 65 72 changelog.# ver
00c0: 73 69 6f 6e 3a 20 30 2e 32 0a 23 20 73 74 61 74 sion: 0.2.# stat
00d0: 65 3a 20 62 65 74 61 0a 23 20 64 65 70 65 6e 64 e: beta.# depend
00e0: 73 3a 20 70 68 70 3a 73 71 6c 69 74 65 0a 23 20 s: php:sqlite.#
00f0: 63 6f 6e 66 69 67 3a 20 2d 0a 23 20 61 63 63 65 config: -.# acce
0100: 73 73 3a 20 70 75 62 6c 69 63 0a 23 0a 23 20 47 ss: public.#.# G
0110: 65 6e 65 72 61 74 65 73 20 61 20 70 72 6f 6a 65 enerates a proje
0120: 63 74 2e 6a 73 6f 6e 20 63 6f 6e 74 61 69 6e 69 ct.json containi
0130: 6e 67 20 67 65 6e 65 72 61 6c 20 64 65 74 61 69 ng general detai
0140: 6c 73 0a 23 20 61 73 20 77 65 6c 6c 20 61 73 20 ls.# as well as
0150: 61 20 60 72 65 6c 65 61 73 65 73 60 20 63 68 61 a `releases` cha
0160: 6e 67 65 6c 6f 67 20 2b 20 64 6f 77 6e 6c 6f 61 ngelog + downloa
0170: 64 20 6c 69 6e 6b 73 2e 0a 23 0a 0a 0a 23 2d 2d d links..#...#--
0180: 20 69 6e 69 74 0a 69 6e 63 6c 75 64 65 28 22 2e init.include(".
0190: 2f 66 6f 73 73 69 6c 5f 63 6f 6d 6d 6f 6e 2e 70 /fossil_common.p
01a0: 68 70 22 29 3b 0a 0a 0a 23 2d 2d 20 63 68 61 6e hp");...#-- chan
01b0: 67 65 6c 6f 67 0a 66 75 6e 63 74 69 6f 6e 20 72 gelog.function r
01c0: 63 28 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e c() {. return
01d0: 20 64 62 28 22 0a 20 20 20 20 20 53 45 4c 45 43 db(". SELEC
01e0: 54 20 65 76 65 6e 74 2e 6d 74 69 6d 65 2c 20 74 T event.mtime, t
01f0: 61 67 2e 74 61 67 6e 61 6d 65 2c 20 4d 41 58 28 ag.tagname, MAX(
0200: 74 61 67 2e 74 61 67 69 64 29 2c 20 44 41 54 45 tag.tagid), DATE
0210: 28 65 76 65 6e 74 2e 6d 74 69 6d 65 29 20 41 53 (event.mtime) AS
0220: 20 64 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 d,.
0230: 65 76 65 6e 74 2e 63 6f 6d 6d 65 6e 74 20 41 53 event.comment AS
0240: 20 63 6f 6d 6d 65 6e 74 0a 20 20 20 20 20 46 52 comment. FR
0250: 4f 4d 20 65 76 65 6e 74 0a 20 20 20 20 20 20 4c OM event. L
0260: 45 46 54 20 4a 4f 49 4e 20 74 61 67 78 72 65 66 EFT JOIN tagxref
0270: 20 4f 4e 20 65 76 65 6e 74 2e 6f 62 6a 69 64 3d ON event.objid=
0280: 74 61 67 78 72 65 66 2e 72 69 64 0a 20 20 20 20 tagxref.rid.
0290: 20 20 4c 45 46 54 20 4a 4f 49 4e 20 74 61 67 20 LEFT JOIN tag
02a0: 4f 4e 20 74 61 67 78 72 65 66 2e 74 61 67 69 64 ON tagxref.tagid
02b0: 3d 74 61 67 2e 74 61 67 69 64 0a 20 20 20 20 20 =tag.tagid.
02c0: 57 48 45 52 45 20 74 79 70 65 3d 27 63 69 27 0a WHERE type='ci'.
02d0: 20 20 20 20 20 47 52 4f 55 50 20 42 59 20 6f 62 GROUP BY ob
02e0: 6a 69 64 0a 20 20 20 20 20 4f 52 44 45 52 20 42 jid. ORDER B
02f0: 59 20 65 76 65 6e 74 2e 6d 74 69 6d 65 20 44 45 Y event.mtime DE
0300: 53 43 0a 20 20 20 20 20 4c 49 4d 49 54 20 31 37 SC. LIMIT 17
0310: 35 30 0a 20 20 20 20 22 29 20 2b 20 5b 39 39 39 50. ") + [999
0320: 39 39 3d 3e 5b 22 74 61 67 6e 61 6d 65 22 3d 3e 99=>["tagname"=>
0330: 22 65 6e 64 2d 30 2e 30 22 2c 20 22 64 22 3d 3e "end-0.0", "d"=>
0340: 22 30 2d 30 2d 30 22 2c 20 22 63 6f 6d 6d 65 6e "0-0-0", "commen
0350: 74 22 3d 3e 22 2d 22 5d 5d 3b 0a 7d 0a 23 20 67 t"=>"-"]];.}.# g
0360: 75 65 73 73 20 73 74 61 62 69 6c 69 74 79 0a 66 uess stability.f
0370: 75 6e 63 74 69 6f 6e 20 73 74 61 74 65 28 24 76 unction state($v
0380: 65 72 2c 20 24 63 68 61 6e 67 65 73 29 20 7b 0a er, $changes) {.
0390: 20 20 20 20 69 66 20 28 70 72 65 67 5f 6d 61 74 if (preg_mat
03a0: 63 68 28 22 2f 73 74 61 62 6c 65 7c 62 65 74 61 ch("/stable|beta
03b0: 7c 61 6c 70 68 61 2f 22 2c 20 24 63 68 61 6e 67 |alpha/", $chang
03c0: 65 73 2c 20 24 75 75 29 29 20 7b 0a 20 20 20 20 es, $uu)) {.
03d0: 20 20 20 20 72 65 74 75 72 6e 20 24 75 75 5b 30 return $uu[0
03e0: 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 ];. }. els
03f0: 65 69 66 20 28 70 72 65 67 5f 6d 61 74 63 68 28 eif (preg_match(
0400: 22 2f 5c 2e 30 2f 22 2c 20 24 76 65 72 29 29 20 "/\.0/", $ver))
0410: 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e {. return
0420: 20 22 73 74 61 62 6c 65 22 3b 0a 20 20 20 20 7d "stable";. }
0430: 0a 20 20 20 20 65 6c 73 65 20 7b 0a 20 20 20 20 . else {.
0440: 20 20 20 20 72 65 74 75 72 6e 20 22 64 65 76 65 return "deve
0450: 6c 6f 70 6d 65 6e 74 22 3b 0a 20 20 20 20 7d 0a lopment";. }.
0460: 7d 0a 23 20 6a 75 64 67 65 20 66 69 78 2f 63 68 }.# judge fix/ch
0470: 61 6e 67 65 79 6e 65 73 73 0a 66 75 6e 63 74 69 angeyness.functi
0480: 6f 6e 20 73 63 6f 70 65 28 24 76 65 72 2c 20 24 on scope($ver, $
0490: 63 68 61 6e 67 65 73 29 20 7b 0a 20 20 20 20 24 changes) {. $
04a0: 66 69 78 20 3d 20 70 72 65 67 5f 6d 61 74 63 68 fix = preg_match
04b0: 5f 61 6c 6c 28 22 2f 66 69 78 7c 63 6f 72 72 65 _all("/fix|corre
04c0: 63 74 7c 6d 65 72 67 65 2f 69 22 2c 20 24 63 68 ct|merge/i", $ch
04d0: 61 6e 67 65 73 2c 20 24 75 75 29 3b 0a 20 20 20 anges, $uu);.
04e0: 20 24 61 64 64 20 3d 20 70 72 65 67 5f 6d 61 74 $add = preg_mat
04f0: 63 68 5f 61 6c 6c 28 22 2f 61 64 64 7c 63 68 61 ch_all("/add|cha
0500: 6e 67 65 7c 69 6e 74 72 6f 2f 69 22 2c 20 24 63 nge|intro/i", $c
0510: 68 61 6e 67 65 73 2c 20 24 75 75 29 3b 0a 20 20 hanges, $uu);.
0520: 20 20 24 73 20 3d 20 20 28 28 24 66 69 78 20 2b $s = (($fix +
0530: 20 24 61 64 64 29 20 3e 20 32 30 29 20 3f 20 22 $add) > 20) ? "
0540: 6d 61 6a 6f 72 20 22 20 3a 20 22 6d 69 6e 6f 72 major " : "minor
0550: 20 22 3b 0a 20 20 20 20 24 73 20 2e 3d 20 28 24 ";. $s .= ($
0560: 66 69 78 20 3e 20 24 61 64 64 29 20 3f 20 22 62 fix > $add) ? "b
0570: 75 67 66 69 78 22 20 3a 20 22 63 68 61 6e 67 65 ugfix" : "change
0580: 73 22 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 24 s";. return $
0590: 73 3b 0a 7d 0a 23 20 73 74 61 63 6b 20 72 65 6c s;.}.# stack rel
05a0: 65 61 73 65 20 6e 6f 74 65 73 20 62 79 20 74 61 ease notes by ta
05b0: 67 2f 76 65 72 73 69 6f 6e 0a 66 75 6e 63 74 69 g/version.functi
05c0: 6f 6e 20 72 65 6c 65 61 73 65 73 28 29 20 7b 0a on releases() {.
05d0: 20 20 20 20 24 76 65 72 20 3d 20 22 74 72 75 6e $ver = "trun
05e0: 6b 22 3b 0a 20 20 20 20 24 64 61 74 65 20 3d 20 k";. $date =
05f0: 74 69 6d 65 28 29 3b 0a 20 20 20 20 24 63 68 61 time();. $cha
0600: 6e 67 65 73 20 3d 20 22 22 3b 0a 20 20 20 20 24 nges = "";. $
0610: 72 65 6c 65 61 73 65 73 20 3d 20 5b 5d 3b 0a 20 releases = [];.
0620: 20 20 20 66 6f 72 65 61 63 68 28 72 63 28 29 20 foreach(rc()
0630: 61 73 20 24 72 29 20 7b 0a 20 20 20 20 20 20 20 as $r) {.
0640: 20 69 66 20 28 70 72 65 67 5f 6d 61 74 63 68 28 if (preg_match(
0650: 22 2f 5c 64 2b 5c 2e 5c 64 2b 2f 22 2c 20 24 72 "/\d+\.\d+/", $r
0660: 5b 22 74 61 67 6e 61 6d 65 22 5d 29 20 61 6e 64 ["tagname"]) and
0670: 20 24 72 5b 22 74 61 67 6e 61 6d 65 22 5d 20 21 $r["tagname"] !
0680: 3d 20 24 76 65 72 29 20 7b 0a 23 20 20 20 20 20 = $ver) {.#
0690: 20 20 20 20 20 20 20 69 66 20 28 24 76 65 72 20 if ($ver
06a0: 21 3d 20 22 74 72 75 6e 6b 22 29 0a 20 20 20 20 != "trunk").
06b0: 20 20 20 20 20 20 20 20 24 72 65 6c 65 61 73 65 $release
06c0: 73 5b 5d 20 3d 20 5b 0a 20 20 20 20 20 20 20 20 s[] = [.
06d0: 20 20 20 20 20 20 20 20 22 76 65 72 73 69 6f 6e "version
06e0: 22 20 3d 3e 20 70 72 65 67 5f 72 65 70 6c 61 63 " => preg_replac
06f0: 65 28 22 2f 5e 2e 2b 3f 28 3f 3d 5c 64 2b 5c 2e e("/^.+?(?=\d+\.
0700: 5c 64 2b 29 2f 22 2c 20 22 22 2c 20 24 76 65 72 \d+)/", "", $ver
0710: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ),.
0720: 20 20 20 22 73 74 61 74 65 22 20 3d 3e 20 73 74 "state" => st
0730: 61 74 65 28 24 76 65 72 2c 20 24 63 68 61 6e 67 ate($ver, $chang
0740: 65 73 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 es),.
0750: 20 20 20 20 20 22 73 63 6f 70 65 22 20 3d 3e 20 "scope" =>
0760: 73 63 6f 70 65 28 24 76 65 72 2c 20 24 63 68 61 scope($ver, $cha
0770: 6e 67 65 73 29 2c 0a 20 20 20 20 20 20 20 20 20 nges),.
0780: 20 20 20 20 20 20 20 22 63 68 61 6e 67 65 73 22 "changes"
0790: 20 3d 3e 20 73 75 62 73 74 72 28 24 63 68 61 6e => substr($chan
07a0: 67 65 73 2c 20 30 2c 20 31 30 32 34 29 2c 0a 20 ges, 0, 1024),.
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
07c0: 64 6f 77 6e 6c 6f 61 64 22 20 3d 3e 20 22 24 5f download" => "$_
07d0: 53 45 52 56 45 52 5b 46 4f 53 53 49 4c 5f 53 45 SERVER[FOSSIL_SE
07e0: 4c 46 5d 7a 69 70 3f 75 75 69 64 3d 22 20 2e 20 LF]zip?uuid=" .
07f0: 70 72 65 67 5f 72 65 70 6c 61 63 65 28 22 2f 5e preg_replace("/^
0800: 73 79 6d 2d 2f 22 2c 20 22 22 2c 20 24 76 65 72 sym-/", "", $ver
0810: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ),.
0820: 20 20 20 22 70 75 62 6c 69 73 68 65 64 22 20 3d "published" =
0830: 3e 20 24 64 61 74 65 2c 0a 20 20 20 20 20 20 20 > $date,.
0840: 20 20 20 20 20 5d 3b 0a 20 20 20 20 20 20 20 20 ];.
0850: 20 20 20 20 24 63 68 61 6e 67 65 73 20 3d 20 22 $changes = "
0860: 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 ";. $
0870: 76 65 72 20 3d 20 24 72 5b 22 74 61 67 6e 61 6d ver = $r["tagnam
0880: 65 22 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 e"];.
0890: 20 24 64 61 74 65 20 3d 20 24 72 5b 22 64 22 5d $date = $r["d"]
08a0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ;. }.
08b0: 20 20 20 20 24 63 68 61 6e 67 65 73 20 2e 3d 20 $changes .=
08c0: 24 72 5b 22 63 6f 6d 6d 65 6e 74 22 5d 20 2e 20 $r["comment"] .
08d0: 22 5c 6e 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 "\n";. }.
08e0: 72 65 74 75 72 6e 20 24 72 65 6c 65 61 73 65 73 return $releases
08f0: 3b 0a 7d 0a 0a 23 20 75 6e 70 61 63 6b 20 65 78 ;.}..# unpack ex
0900: 74 72 61 20 6c 69 6e 6b 73 0a 66 75 6e 63 74 69 tra links.functi
0910: 6f 6e 20 73 69 74 65 6d 61 70 5f 65 78 74 72 61 on sitemap_extra
0920: 28 29 20 7b 0a 20 20 20 20 70 72 65 67 5f 6d 61 () {. preg_ma
0930: 74 63 68 5f 61 6c 6c 28 22 7e 5e 5c 73 2a 28 5b tch_all("~^\s*([
0940: 5c 77 2e 2d 5d 2b 29 5c 73 2b 28 5c 77 2b 3a 2f \w.-]+)\s+(\w+:/
0950: 2f 5c 53 2b 29 7e 6d 22 2c 20 67 65 74 5f 63 6f /\S+)~m", get_co
0960: 6e 66 69 67 28 22 73 69 74 65 6d 61 70 2d 65 78 nfig("sitemap-ex
0970: 74 72 61 22 2c 20 22 22 29 2c 20 24 75 75 29 3b tra", ""), $uu);
0980: 0a 20 20 20 20 72 65 74 75 72 6e 20 61 72 72 61 . return arra
0990: 79 5f 63 6f 6d 62 69 6e 65 28 24 75 75 5b 31 5d y_combine($uu[1]
09a0: 2c 20 24 75 75 5b 32 5d 29 3b 0a 7d 0a 0a 23 20 , $uu[2]);.}..#
09b0: 75 73 65 72 20 77 69 74 68 20 6d 6f 73 74 20 65 user with most e
09c0: 76 65 6e 74 73 20 3d 20 6d 61 69 6e 20 75 73 65 vents = main use
09d0: 72 0a 66 75 6e 63 74 69 6f 6e 20 6d 61 69 6e 5f r.function main_
09e0: 75 73 65 72 28 29 20 7b 0a 20 20 20 20 72 65 74 user() {. ret
09f0: 75 72 6e 20 64 62 28 22 53 45 4c 45 43 54 20 75 urn db("SELECT u
0a00: 73 65 72 2c 20 43 4f 55 4e 54 28 74 79 70 65 29 ser, COUNT(type)
0a10: 20 41 53 20 63 20 46 52 4f 4d 20 65 76 65 6e 74 AS c FROM event
0a20: 20 4c 45 46 54 20 4a 4f 49 4e 20 75 73 65 72 20 LEFT JOIN user
0a30: 4f 4e 20 75 73 65 72 2e 75 69 64 3d 65 76 65 6e ON user.uid=even
0a40: 74 2e 75 69 64 20 47 52 4f 55 50 20 42 59 20 75 t.uid GROUP BY u
0a50: 73 65 72 20 4f 52 44 45 52 20 42 59 20 63 20 44 ser ORDER BY c D
0a60: 45 53 43 3b 22 29 5b 30 5d 5b 22 75 73 65 72 22 ESC;")[0]["user"
0a70: 5d 3b 0a 7d 0a 0a 23 2d 2d 20 6f 75 74 70 75 74 ];.}..#-- output
0a80: 0a 68 65 61 64 65 72 28 22 43 6f 6e 74 65 6e 74 .header("Content
0a90: 2d 54 79 70 65 3a 20 61 70 70 6c 69 63 61 74 69 -Type: applicati
0aa0: 6f 6e 2f 6a 73 6f 6e 3b 20 78 2d 6d 69 6d 65 3d on/json; x-mime=
0ab0: 6a 73 6f 6e 2f 76 6e 64 2e 66 72 65 73 68 63 6f json/vnd.freshco
0ac0: 64 65 2e 63 6c 75 62 3b 20 63 68 61 72 73 65 74 de.club; charset
0ad0: 3d 55 54 46 2d 38 22 29 3b 0a 70 72 69 6e 74 28 =UTF-8");.print(
0ae0: 6a 73 6f 6e 5f 65 6e 63 6f 64 65 28 5b 0a 20 20 json_encode([.
0af0: 20 20 22 5c 24 66 65 65 64 2d 6f 72 69 67 69 6e "\$feed-origin
0b00: 22 20 3d 3e 20 22 24 5f 53 45 52 56 45 52 5b 46 " => "$_SERVER[F
0b10: 4f 53 53 49 4c 5f 53 45 4c 46 5d 22 2c 0a 20 20 OSSIL_SELF]",.
0b20: 20 20 22 5c 24 66 65 65 64 2d 6c 69 63 65 6e 73 "\$feed-licens
0b30: 65 22 20 3d 3e 20 22 43 43 2d 42 59 2d 53 41 20 e" => "CC-BY-SA
0b40: 34 2e 30 22 2c 0a 20 20 20 20 22 6e 61 6d 65 22 4.0",. "name"
0b50: 20 3d 3e 20 70 72 65 67 5f 72 65 70 6c 61 63 65 => preg_replace
0b60: 28 22 2f 5c 2e 5c 77 2b 24 2f 22 2c 20 22 22 2c ("/\.\w+$/", "",
0b70: 20 62 61 73 65 6e 61 6d 65 28 24 5f 53 45 52 56 basename($_SERV
0b80: 45 52 5b 22 46 4f 53 53 49 4c 5f 52 45 50 4f 53 ER["FOSSIL_REPOS
0b90: 49 54 4f 52 59 22 5d 29 29 2c 0a 20 20 20 20 22 ITORY"])),. "
0ba0: 74 69 74 6c 65 22 20 3d 3e 20 67 65 74 5f 63 6f title" => get_co
0bb0: 6e 66 69 67 28 22 70 72 6f 6a 65 63 74 2d 6e 61 nfig("project-na
0bc0: 6d 65 22 2c 20 22 22 29 2c 0a 20 20 20 20 22 73 me", ""),. "s
0bd0: 75 6d 6d 61 72 79 22 20 3d 3e 20 73 75 62 73 74 ummary" => subst
0be0: 72 28 67 65 74 5f 63 6f 6e 66 69 67 28 22 70 72 r(get_config("pr
0bf0: 6f 6a 65 63 74 2d 64 65 73 63 72 69 70 74 69 6f oject-descriptio
0c00: 6e 22 2c 20 4e 55 4c 4c 29 2c 20 30 2c 20 35 30 n", NULL), 0, 50
0c10: 29 2c 0a 20 20 20 20 22 64 65 73 63 72 69 70 74 ),. "descript
0c20: 69 6f 6e 22 20 3d 3e 20 67 65 74 5f 63 6f 6e 66 ion" => get_conf
0c30: 69 67 28 22 70 72 6f 6a 65 63 74 2d 64 65 73 63 ig("project-desc
0c40: 72 69 70 74 69 6f 6e 22 2c 20 22 22 29 2c 0a 20 ription", ""),.
0c50: 20 20 20 22 68 6f 6d 65 70 61 67 65 22 20 3d 3e "homepage" =>
0c60: 20 67 65 74 5f 63 6f 6e 66 69 67 28 22 70 72 6f get_config("pro
0c70: 6a 65 63 74 2d 68 6f 6d 65 70 61 67 65 22 2c 20 ject-homepage",
0c80: 22 24 5f 53 45 52 56 45 52 5b 46 4f 53 53 49 4c "$_SERVER[FOSSIL
0c90: 5f 53 45 4c 46 5d 22 29 2c 0a 20 20 20 20 22 6c _SELF]"),. "l
0ca0: 69 63 65 6e 73 65 22 20 3d 3e 20 67 65 74 5f 63 icense" => get_c
0cb0: 6f 6e 66 69 67 28 22 70 72 6f 6a 65 63 74 2d 6c onfig("project-l
0cc0: 69 63 65 6e 73 65 22 2c 20 22 22 29 2c 0a 20 20 icense", ""),.
0cd0: 20 20 22 74 61 67 73 22 20 3d 3e 20 67 65 74 5f "tags" => get_
0ce0: 63 6f 6e 66 69 67 28 22 70 72 6f 6a 65 63 74 2d config("project-
0cf0: 74 61 67 73 22 2c 20 22 22 29 2c 0a 20 20 20 20 tags", ""),.
0d00: 22 69 6d 61 67 65 22 20 3d 3e 20 22 24 5f 53 45 "image" => "$_SE
0d10: 52 56 45 52 5b 46 4f 53 53 49 4c 5f 53 45 4c 46 RVER[FOSSIL_SELF
0d20: 5d 6c 6f 67 6f 22 2c 0a 20 20 20 20 22 73 75 62 ]logo",. "sub
0d30: 6d 69 74 74 65 72 22 20 3d 3e 20 6d 61 69 6e 5f mitter" => main_
0d40: 75 73 65 72 28 29 2c 0a 20 20 20 20 22 75 72 6c user(),. "url
0d50: 73 22 20 3d 3e 20 73 69 74 65 6d 61 70 5f 65 78 s" => sitemap_ex
0d60: 74 72 61 28 29 2c 0a 20 20 20 20 22 72 65 6c 65 tra(),. "rele
0d70: 61 73 65 73 22 20 3d 3e 20 72 65 6c 65 61 73 65 ases" => release
0d80: 73 28 29 2c 0a 5d 2c 20 4a 53 4f 4e 5f 50 52 45 s(),.], JSON_PRE
0d90: 54 54 59 5f 50 52 49 4e 54 7c 4a 53 4f 4e 5f 55 TTY_PRINT|JSON_U
0da0: 4e 45 53 43 41 50 45 44 5f 53 4c 41 53 48 45 53 NESCAPED_SLASHES
0db0: 29 29 3b 0a 0a ));..