⌈⌋ branch:  freshcode


Hex Artifact Content

Artifact ed91804f035728919f99656c27a842b2cbe5d89c:

  • File page_submit.php — part of check-in [95fcd4b384] at 2016-03-27 21:55:25 on branch trunk — Add basic spam checks. (user: mario size: 3952)

0000: 3c 3f 70 68 70 0a 2f 2a 2a 0a 20 2a 20 61 70 69  <?php./**. * api
0010: 3a 20 66 72 65 73 68 63 6f 64 65 0a 20 2a 20 74  : freshcode. * t
0020: 79 70 65 3a 20 70 61 67 65 0a 20 2a 20 74 69 74  ype: page. * tit
0030: 6c 65 3a 20 53 75 62 6d 69 74 2f 65 64 69 74 20  le: Submit/edit 
0040: 70 72 6f 6a 65 63 74 20 6f 72 20 72 65 6c 65 61  project or relea
0050: 73 65 0a 20 2a 20 64 65 73 63 72 69 70 74 69 6f  se. * descriptio
0060: 6e 3a 20 53 69 6e 67 6c 65 2d 70 61 67 65 20 65  n: Single-page e
0070: 64 69 74 20 66 6f 72 6d 20 66 6f 72 20 70 72 6f  dit form for pro
0080: 6a 65 63 74 73 20 61 6e 64 20 74 68 65 69 72 20  jects and their 
0090: 72 65 6c 65 61 73 65 73 0a 20 2a 20 76 65 72 73  releases. * vers
00a0: 69 6f 6e 3a 20 30 2e 37 2e 33 0a 20 2a 20 63 61  ion: 0.7.3. * ca
00b0: 74 65 67 6f 72 79 3a 20 66 6f 72 6d 0a 20 2a 20  tegory: form. * 
00c0: 6c 69 63 65 6e 73 65 3a 20 41 47 50 4c 76 33 0a  license: AGPLv3.
00d0: 20 2a 20 0a 20 2a 20 50 72 65 70 61 72 65 73 20   * . * Prepares 
00e0: 74 68 65 20 73 75 62 6d 69 73 73 69 6f 6e 20 66  the submission f
00f0: 6f 72 6d 2e 20 4f 6e 20 50 4f 53 54 20 63 68 65  orm. On POST che
0100: 63 6b 73 20 61 20 66 65 77 20 63 6f 6e 73 74 72  cks a few constr
0110: 61 69 6e 74 73 2c 0a 20 2a 20 62 75 74 20 55 50  aints,. * but UP
0120: 44 41 54 45 20 69 74 73 65 6c 66 20 69 73 20 68  DATE itself is h
0130: 61 6e 64 6c 65 64 20 62 79 20 72 65 6c 65 61 73  andled by releas
0140: 65 3a 3a 75 70 64 61 74 65 28 29 20 61 6e 64 20  e::update() and 
0150: 3a 3a 73 74 6f 72 65 28 29 2e 0a 20 2a 0a 20 2a  ::store().. *. *
0160: 20 54 61 67 73 3a 20 68 74 74 70 3a 2f 2f 61 65   Tags: http://ae
0170: 68 6c 6b 65 2e 67 69 74 68 75 62 2e 69 6f 2f 74  hlke.github.io/t
0180: 61 67 2d 69 74 2f 0a 20 2a 0a 20 2a 2f 0a 0a 0a  ag-it/. *. */...
0190: 0a 2f 2f 20 46 6f 72 6d 20 66 69 65 6c 64 20 6e  .// Form field n
01a0: 61 6d 65 73 0a 24 66 6f 72 6d 5f 66 69 65 6c 64  ames.$form_field
01b0: 73 20 3d 20 61 72 72 61 79 28 0a 20 20 20 20 22  s = array(.    "
01c0: 6e 61 6d 65 22 2c 20 22 74 69 74 6c 65 22 2c 20  name", "title", 
01d0: 22 68 6f 6d 65 70 61 67 65 22 2c 20 22 64 65 73  "homepage", "des
01e0: 63 72 69 70 74 69 6f 6e 22 2c 20 22 6c 69 63 65  cription", "lice
01f0: 6e 73 65 22 2c 20 22 74 61 67 73 22 2c 20 22 69  nse", "tags", "i
0200: 6d 61 67 65 22 2c 0a 20 20 20 20 22 76 65 72 73  mage",.    "vers
0210: 69 6f 6e 22 2c 20 22 73 74 61 74 65 22 2c 20 22  ion", "state", "
0220: 73 63 6f 70 65 22 2c 20 22 63 68 61 6e 67 65 73  scope", "changes
0230: 22 2c 20 22 64 6f 77 6e 6c 6f 61 64 22 2c 20 22  ", "download", "
0240: 75 72 6c 73 22 2c 20 22 73 75 6d 6d 61 72 79 22  urls", "summary"
0250: 2c 0a 20 20 20 20 22 61 75 74 6f 75 70 64 61 74  ,.    "autoupdat
0260: 65 5f 6d 6f 64 75 6c 65 22 2c 20 22 61 75 74 6f  e_module", "auto
0270: 75 70 64 61 74 65 5f 75 72 6c 22 2c 20 22 61 75  update_url", "au
0280: 74 6f 75 70 64 61 74 65 5f 72 65 67 65 78 22 2c  toupdate_regex",
0290: 0a 20 20 20 20 22 73 75 62 6d 69 74 74 65 72 22  .    "submitter"
02a0: 2c 20 22 6c 6f 63 6b 22 2c 0a 29 3b 0a 0a 0a 2f  , "lock",.);.../
02b0: 2f 20 47 65 74 20 70 72 6f 6a 65 63 74 20 49 44  / Get project ID
02c0: 20 66 72 6f 6d 20 72 65 71 75 65 73 74 0a 24 6e   from request.$n
02d0: 61 6d 65 20 3d 20 24 5f 52 45 51 55 45 53 54 2d  ame = $_REQUEST-
02e0: 3e 70 72 6f 6a 5f 6e 61 6d 65 2d 3e 6c 65 6e 67  >proj_name->leng
02f0: 74 68 e2 80 a6 32 e2 80 a6 33 33 5b 22 6e 61 6d  th...2...33["nam
0300: 65 22 5d 3b 0a 0a 2f 2f 20 52 65 74 72 69 65 76  e"];..// Retriev
0310: 65 20 65 78 69 73 74 69 6e 67 20 70 72 6f 6a 65  e existing proje
0320: 63 74 20 64 61 74 61 20 69 6e 20 44 42 2e 0a 24  ct data in DB..$
0330: 64 61 74 61 20 3d 20 72 65 6c 65 61 73 65 3a 3a  data = release::
0340: 6c 61 74 65 73 74 28 24 6e 61 6d 65 29 3b 0a 24  latest($name);.$
0350: 69 73 5f 6e 65 77 20 3d 20 65 6d 70 74 79 28 24  is_new = empty($
0360: 64 61 74 61 29 3b 0a 0a 0a 2f 2f 20 45 6c 73 65  data);...// Else
0370: 20 63 72 65 61 74 65 20 65 6d 70 74 79 20 66 6f   create empty fo
0380: 72 6d 20 76 61 6c 75 65 20 64 65 66 61 75 6c 74  rm value default
0390: 73 20 69 6e 20 24 64 61 74 61 0a 69 66 20 28 24  s in $data.if ($
03a0: 69 73 5f 6e 65 77 29 20 7b 0a 20 20 20 20 24 64  is_new) {.    $d
03b0: 61 74 61 20 3d 20 61 72 72 61 79 5f 66 69 6c 6c  ata = array_fill
03c0: 5f 6b 65 79 73 28 24 66 6f 72 6d 5f 66 69 65 6c  _keys($form_fiel
03d0: 64 73 2c 20 22 22 29 3b 0a 20 20 20 20 24 64 61  ds, "");.    $da
03e0: 74 61 5b 22 6e 61 6d 65 22 5d 20 3d 20 24 6e 61  ta["name"] = $na
03f0: 6d 65 3b 0a 20 20 20 20 24 64 61 74 61 5b 22 73  me;.    $data["s
0400: 75 62 6d 69 74 74 65 72 22 5d 20 3d 20 24 5f 53  ubmitter"] = $_S
0410: 45 53 53 49 4f 4e 5b 22 6e 61 6d 65 22 5d 3b 0a  ESSION["name"];.
0420: 20 20 20 20 2f 2f 20 4f 70 74 69 6f 6e 61 6c 3a      // Optional:
0430: 20 69 6d 70 6f 72 74 20 69 6e 69 74 69 61 6c 20   import initial 
0440: 24 64 61 74 61 20 66 72 6f 6d 20 65 6c 73 65 77  $data from elsew
0450: 68 65 72 65 0a 20 20 20 20 69 66 20 28 24 5f 50  here.    if ($_P
0460: 4f 53 54 2d 3e 68 61 73 28 22 69 6d 70 6f 72 74  OST->has("import
0470: 5f 76 69 61 22 29 29 20 7b 0a 20 20 20 20 20 20  _via")) {.      
0480: 20 20 24 64 61 74 61 20 3d 20 61 72 72 61 79 5f    $data = array_
0490: 6d 65 72 67 65 28 24 64 61 74 61 2c 20 70 72 6f  merge($data, pro
04a0: 6a 65 63 74 5f 69 6d 70 6f 72 74 3a 3a 66 65 74  ject_import::fet
04b0: 63 68 28 29 29 3b 0a 20 20 20 20 7d 0a 7d 0a 0a  ch());.    }.}..
04c0: 0a 2f 2f 20 50 72 6f 6a 65 63 74 20 65 6e 74 72  .// Project entr
04d0: 79 20 63 61 6e 20 62 65 20 6c 6f 63 6b 65 64 20  y can be locked 
04e0: 66 6f 72 20 65 64 69 74 69 6e 67 20 62 79 20 73  for editing by s
04f0: 70 65 63 69 66 69 63 20 4f 70 65 6e 49 44 73 2e  pecific OpenIDs.
0500: 0a 69 66 20 28 21 72 65 6c 65 61 73 65 3a 3a 70  .if (!release::p
0510: 65 72 6d 69 73 73 69 6f 6e 28 24 64 61 74 61 2c  ermission($data,
0520: 20 24 5f 53 45 53 53 49 4f 4e 5b 22 6f 70 65 6e   $_SESSION["open
0530: 69 64 22 5d 2c 20 24 5f 53 45 53 53 49 4f 4e 5b  id"], $_SESSION[
0540: 22 70 61 73 73 77 6f 72 64 22 5d 29 29 20 7b 0a  "password"])) {.
0550: 20 20 20 20 24 65 72 72 6f 72 20 3d 20 22 54 68      $error = "Th
0560: 69 73 20 65 6e 74 72 79 20 63 61 6e 6e 6f 74 20  is entry cannot 
0570: 62 65 20 65 64 69 74 65 64 20 77 69 74 68 20 79  be edited with y
0580: 6f 75 72 20 63 75 72 72 65 6e 74 20 3c 61 20 68  our current <a h
0590: 72 65 66 3d 27 2f 6c 6f 67 69 6e 27 3e 6c 6f 67  ref='/login'>log
05a0: 69 6e 3c 2f 61 3e 2e 20 4d 61 74 63 68 65 73 20  in</a>. Matches 
05b0: 6e 65 69 74 68 65 72 20 70 61 73 73 77 6f 72 64  neither password
05c0: 20 6e 6f 72 20 4f 70 65 6e 49 44 20 68 61 6e 64   nor OpenID hand
05d0: 6c 65 2e 20 49 66 20 79 6f 75 72 20 4f 70 65 6e  le. If your Open
05e0: 49 44 20 70 72 6f 76 69 64 65 72 20 6c 6f 67 69  ID provider logi
05f0: 6e 20 66 61 69 6c 73 20 74 6f 20 77 6f 72 6b 2c  n fails to work,
0600: 20 70 6c 65 61 73 65 20 66 6c 61 67 20 66 6f 72   please flag for
0610: 20 66 6f 72 20 6d 6f 64 65 72 61 74 6f 72 20 61   for moderator a
0620: 74 74 65 6e 74 69 6f 6e 2e 22 3b 0a 20 20 20 20  ttention.";.    
0630: 65 78 69 74 28 69 6e 63 6c 75 64 65 28 22 70 61  exit(include("pa
0640: 67 65 5f 65 72 72 6f 72 2e 70 68 70 22 29 29 3b  ge_error.php"));
0650: 0a 7d 0a 0a 0a 0a 2f 2f 20 53 74 61 72 74 20 70  .}....// Start p
0660: 61 67 65 20 6f 75 74 70 75 74 0a 69 6e 63 6c 75  age output.inclu
0670: 64 65 28 22 74 65 6d 70 6c 61 74 65 2f 68 65 61  de("template/hea
0680: 64 65 72 2e 70 68 70 22 29 3b 0a 69 6e 63 6c 75  der.php");.inclu
0690: 64 65 28 22 74 65 6d 70 6c 61 74 65 2f 74 61 62  de("template/tab
06a0: 6c 65 5f 6d 61 69 6e 2e 70 68 70 22 29 3b 0a 0a  le_main.php");..
06b0: 0a 2f 2a 2a 0a 20 2a 20 46 65 74 63 68 20 66 6f  ./**. * Fetch fo
06c0: 72 6d 20 69 6e 70 75 74 20 6f 6e 20 73 75 62 6d  rm input on subm
06d0: 69 74 2e 0a 20 2a 20 43 68 65 63 6b 20 73 6f 6d  it.. * Check som
06e0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 20  e constraints.. 
06f0: 2a 20 54 68 65 6e 20 69 6e 73 65 72 74 20 69 6e  * Then insert in
0700: 74 6f 20 64 61 74 61 62 61 73 65 2e 0a 20 2a 0a  to database.. *.
0710: 20 2a 2f 0a 69 66 20 28 24 6e 61 6d 65 20 61 6e   */.if ($name an
0720: 64 20 24 5f 52 45 51 55 45 53 54 2d 3e 68 61 73  d $_REQUEST->has
0730: 28 22 74 69 74 6c 65 22 2c 20 22 64 65 73 63 72  ("title", "descr
0740: 69 70 74 69 6f 6e 22 29 29 20 7b 0a 0a 20 20 20  iption")) {..   
0750: 20 2f 2f 20 43 68 65 63 6b 20 66 69 65 6c 64 20   // Check field 
0760: 6c 65 6e 67 74 68 73 0a 20 20 20 20 69 66 20 28  lengths.    if (
0770: 21 24 5f 52 45 51 55 45 53 54 2d 3e 6d 75 6c 74  !$_REQUEST->mult
0780: 69 2d 3e 73 65 72 69 61 6c 69 7a 65 2d 3e 6c 65  i->serialize->le
0790: 6e 67 74 68 e2 80 a6 31 35 30 e2 80 a6 31 35 30  ngth...150...150
07a0: 2d 3e 73 74 72 6c 65 6e 5b 22 74 69 74 6c 65 2c  ->strlen["title,
07b0: 64 65 73 63 72 69 70 74 69 6f 6e 2c 68 6f 6d 65  description,home
07c0: 70 61 67 65 2c 63 68 61 6e 67 65 73 22 5d 29 20  page,changes"]) 
07d0: 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 28  {.        print(
07e0: 22 3c 68 33 3e 53 75 62 6d 69 73 73 69 6f 6e 20  "<h3>Submission 
07f0: 74 6f 6f 20 73 68 6f 72 74 3c 2f 68 33 3e 20 3c  too short</h3> <
0800: 70 3e 59 6f 75 20 64 69 64 6e 27 74 20 66 69 6c  p>You didn't fil
0810: 6c 20 6f 75 74 20 63 72 75 63 69 61 6c 20 69 6e  l out crucial in
0820: 66 6f 72 6d 61 74 69 6f 6e 2e 20 50 6c 65 61 73  formation. Pleas
0830: 65 20 6e 6f 74 65 20 74 68 61 74 20 6f 75 72 20  e note that our 
0840: 75 73 65 72 20 62 61 73 65 20 65 78 70 65 63 74  user base expect
0850: 73 20 61 6e 20 65 6e 74 69 63 69 6e 67 20 73 65  s an enticing se
0860: 74 20 6f 66 20 64 61 74 61 20 70 6f 69 6e 74 73  t of data points
0870: 20 74 6f 20 66 69 6e 64 20 79 6f 75 72 20 70 72   to find your pr
0880: 6f 6a 65 63 74 2e 3c 2f 70 3e 22 29 3b 0a 20 20  oject.</p>");.  
0890: 20 20 7d 0a 20 20 20 20 2f 2f 20 54 65 72 6d 73    }.    // Terms
08a0: 20 61 6e 64 20 63 6f 6e 64 69 74 69 6f 6e 73 0a   and conditions.
08b0: 20 20 20 20 65 6c 73 65 69 66 20 28 61 72 72 61      elseif (arra
08c0: 79 5f 73 75 6d 28 24 5f 52 45 51 55 45 53 54 2d  y_sum($_REQUEST-
08d0: 3e 61 72 72 61 79 2d 3e 69 6e 74 2d 3e 72 61 6e  >array->int->ran
08e0: 67 65 e2 80 a6 30 e2 80 a6 31 5b 22 72 65 71 22  ge...0...1["req"
08f0: 5d 29 20 3c 20 32 29 20 7b 0a 20 20 20 20 20 20  ]) < 2) {.      
0900: 20 20 70 72 69 6e 74 20 22 3c 68 33 3e 54 65 72    print "<h3>Ter
0910: 6d 73 20 61 6e 64 20 43 6f 6e 64 69 74 69 6f 6e  ms and Condition
0920: 73 3c 2f 68 33 3e 20 3c 70 3e 50 6c 65 61 73 65  s</h3> <p>Please
0930: 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 61 73 73   go back and ass
0940: 65 72 74 20 74 68 61 74 20 79 6f 75 72 20 6f 70  ert that your op
0950: 65 6e 20 73 6f 75 72 63 65 20 70 72 6f 6a 65 63  en source projec
0960: 74 20 6c 69 73 74 69 6e 67 20 69 73 20 72 65 75  t listing is reu
0970: 73 61 62 6c 65 20 75 6e 64 65 72 20 74 68 65 20  sable under the 
0980: 43 43 2d 42 59 2d 53 41 20 6c 69 63 65 6e 73 65  CC-BY-SA license
0990: 2e 3c 2f 70 3e 22 3b 0a 20 20 20 20 7d 0a 20 20  .</p>";.    }.  
09a0: 20 20 2f 2f 20 53 69 6d 70 6c 65 20 43 53 52 46    // Simple CSRF
09b0: 20 63 68 65 63 6b 0a 20 20 20 20 65 6c 73 65 69   check.    elsei
09c0: 66 20 28 21 63 73 72 66 28 54 52 55 45 29 29 20  f (!csrf(TRUE)) 
09d0: 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 20  {.        print 
09e0: 22 3c 68 33 3e 43 53 52 46 20 74 6f 6b 65 6e 20  "<h3>CSRF token 
09f0: 69 6e 76 61 6c 69 64 3c 2f 68 33 3e 20 3c 70 3e  invalid</h3> <p>
0a00: 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 61  This is likely a
0a10: 20 73 65 73 73 69 6f 6e 20 74 69 6d 65 6f 75 74   session timeout
0a20: 20 28 31 20 68 6f 75 72 29 2c 20 65 74 63 2e 20   (1 hour), etc. 
0a30: 50 6c 65 61 73 65 20 72 65 74 72 79 20 6f 72 20  Please retry or 
0a40: 6c 6f 67 69 6e 20 61 67 61 69 6e 2e 3c 2f 70 3e  login again.</p>
0a50: 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2f 20  ";.    }.    // 
0a60: 50 61 73 73 65 64 0a 20 20 20 20 65 6c 73 65 20  Passed.    else 
0a70: 7b 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f  {.    .        /
0a80: 2f 20 4d 65 72 67 65 20 6e 65 77 20 64 61 74 61  / Merge new data
0a90: 0a 20 20 20 20 20 20 20 20 24 72 65 6c 65 61 73  .        $releas
0aa0: 65 20 3d 20 6e 65 77 20 72 65 6c 65 61 73 65 28  e = new release(
0ab0: 24 64 61 74 61 29 3b 0a 20 20 20 20 20 20 20 20  $data);.        
0ac0: 24 72 65 6c 65 61 73 65 2d 3e 75 70 64 61 74 65  $release->update
0ad0: 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 5f  (.            $_
0ae0: 52 45 51 55 45 53 54 2c 0a 20 20 20 20 20 20 20  REQUEST,.       
0af0: 20 20 20 20 20 61 72 72 61 79 28 0a 20 20 20 20       array(.    
0b00: 20 20 20 20 20 20 20 20 20 20 20 20 22 66 6c 61              "fla
0b10: 67 22 20 3d 3e 20 30 2c 20 20 20 2f 2f 20 55 73  g" => 0,   // Us
0b20: 65 72 20 66 6c 61 67 73 20 70 72 65 73 75 6d 61  er flags presuma
0b30: 62 6c 79 20 62 65 63 6f 6d 65 20 6f 62 73 6f 6c  bly become obsol
0b40: 65 74 65 20 77 68 65 6e 20 70 72 6f 6a 65 63 74  ete when project
0b50: 20 67 65 74 73 20 6d 61 6e 75 61 6c 6c 79 20 65   gets manually e
0b60: 64 69 74 65 64 0a 20 20 20 20 20 20 20 20 20 20  dited.          
0b70: 20 20 20 20 20 20 22 73 75 62 6d 69 74 74 65 72        "submitter
0b80: 5f 6f 70 65 6e 69 64 22 20 3d 3e 20 24 5f 53 45  _openid" => $_SE
0b90: 53 53 49 4f 4e 5b 22 6f 70 65 6e 69 64 22 5d 2c  SSION["openid"],
0ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0bb0: 20 22 76 69 61 22 20 3d 3e 20 22 66 6f 72 6d 22   "via" => "form"
0bc0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0a  ,.            ).
0bd0: 20 20 20 20 20 20 20 20 29 3b 0a 0a 20 20 20 20          );..    
0be0: 20 20 20 20 2f 2f 20 41 20 66 65 77 20 62 6c 61      // A few bla
0bf0: 63 6b 6c 69 73 74 73 0a 20 20 20 20 20 20 20 20  cklists.        
0c00: 69 66 20 28 64 61 74 61 5f 62 6c 61 63 6b 6c 69  if (data_blackli
0c10: 73 74 65 64 28 24 72 65 6c 65 61 73 65 29 29 20  sted($release)) 
0c20: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  {.            pr
0c30: 69 6e 74 20 22 3c 68 32 3e 45 72 72 6f 72 20 23  int "<h2>Error #
0c40: 35 32 3c 2f 68 32 3e 20 3c 70 3e 41 6e 20 75 6e  52</h2> <p>An un
0c50: 73 70 65 63 69 66 69 65 64 20 69 73 73 75 65 20  specified issue 
0c60: 77 69 74 68 20 73 74 6f 72 69 6e 67 20 79 6f 75  with storing you
0c70: 72 20 64 61 74 61 2e 20 50 6c 65 61 73 65 20 64  r data. Please d
0c80: 72 6f 70 20 61 20 6e 6f 74 65 20 69 66 20 79 6f  rop a note if yo
0c90: 75 27 72 65 20 6e 6f 74 20 61 20 73 70 61 6d 62  u're not a spamb
0ca0: 6f 74 21 3c 2f 70 3e 22 3b 0a 20 20 20 20 20 20  ot!</p>";.      
0cb0: 20 20 7d 0a 20 20 20 20 20 20 20 20 0a 20 20 20    }.        .   
0cc0: 20 20 20 20 20 2f 2f 20 55 70 64 61 74 65 20 70       // Update p
0cd0: 72 6f 6a 65 63 74 0a 20 20 20 20 20 20 20 20 65  roject.        e
0ce0: 6c 73 65 69 66 20 28 24 72 65 6c 65 61 73 65 2d  lseif ($release-
0cf0: 3e 73 74 6f 72 65 28 29 29 20 7b 0a 20 20 20 20  >store()) {.    
0d00: 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 22 3c          print "<
0d10: 68 32 3e 53 75 62 6d 69 74 74 65 64 3c 2f 68 32  h2>Submitted</h2
0d20: 3e 20 3c 70 3e 50 72 6f 6a 65 63 74 20 61 6e 64  > <p>Project and
0d30: 20 72 65 6c 65 61 73 65 20 69 6e 66 6f 72 6d 61   release informa
0d40: 74 69 6f 6e 20 68 61 76 65 20 62 65 65 6e 20 75  tion have been u
0d50: 70 64 61 74 65 64 2e 20 54 68 61 6e 6b 73 20 66  pdated. Thanks f
0d60: 6f 72 20 79 6f 75 72 20 63 61 72 65 21 3c 2f 70  or your care!</p
0d70: 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  >.              
0d80: 20 20 20 20 3c 70 3e 53 65 65 20 74 68 65 20 70      <p>See the p
0d90: 75 62 6c 69 73 68 65 64 20 65 6e 74 72 79 20 6f  ublished entry o
0da0: 6e 20 3c 61 20 68 72 65 66 3d 5c 22 68 74 74 70  n <a href=\"http
0db0: 3a 2f 2f 66 72 65 73 68 63 6f 64 65 2e 63 6c 75  ://freshcode.clu
0dc0: 62 2f 70 72 6f 6a 65 63 74 73 2f 24 6e 61 6d 65  b/projects/$name
0dd0: 5c 22 3e 68 74 74 70 3a 2f 2f 66 72 65 73 68 63  \">http://freshc
0de0: 6f 64 65 2e 63 6c 75 62 2f 70 72 6f 6a 65 63 74  ode.club/project
0df0: 73 2f 24 6e 61 6d 65 3c 2f 61 3e 2e 3c 2f 70 3e  s/$name</a>.</p>
0e00: 22 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  ";.        }.   
0e10: 20 20 20 20 20 65 6c 73 65 20 7b 20 0a 20 20 20       else { .   
0e20: 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 22           print "
0e30: 55 6e 73 70 65 63 69 66 69 65 64 20 64 61 74 61  Unspecified data
0e40: 62 61 73 65 20 65 72 72 6f 72 2e 20 50 6c 65 61  base error. Plea
0e50: 73 65 20 72 65 74 72 79 20 6c 61 74 65 72 2e 22  se retry later."
0e60: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
0e70: 7d 0a 0a 7d 0a 0a 0a 23 2d 2d 20 4f 75 74 70 75  }..}...#-- Outpu
0e80: 74 20 69 6e 70 75 74 20 66 6f 72 6d 20 77 69 74  t input form wit
0e90: 68 20 63 75 72 72 65 6e 74 20 24 64 61 74 61 0a  h current $data.
0ea0: 65 6c 73 65 20 7b 0a 20 20 20 20 24 64 61 74 61  else {.    $data
0eb0: 20 3d 20 61 72 72 61 79 5f 6d 61 70 28 22 69 6e   = array_map("in
0ec0: 70 75 74 3a 3a 68 74 6d 6c 22 2c 20 24 64 61 74  put::html", $dat
0ed0: 61 29 3b 0a 20 20 20 20 69 6e 63 6c 75 64 65 28  a);.    include(
0ee0: 22 74 65 6d 70 6c 61 74 65 2f 73 75 62 6d 69 74  "template/submit
0ef0: 5f 66 6f 72 6d 2e 70 68 70 22 29 3b 0a 7d 0a 0a  _form.php");.}..
0f00: 0a 69 6e 63 6c 75 64 65 28 22 74 65 6d 70 6c 61  .include("templa
0f10: 74 65 2f 73 75 62 6d 69 74 5f 73 69 64 65 62 61  te/submit_sideba
0f20: 72 2e 70 68 70 22 29 3b 0a 69 6e 63 6c 75 64 65  r.php");.include
0f30: 28 22 74 65 6d 70 6c 61 74 65 2f 74 61 62 6c 65  ("template/table
0f40: 5f 65 6e 64 2e 70 68 70 22 29 3b 0a 69 6e 63 6c  _end.php");.incl
0f50: 75 64 65 28 22 74 65 6d 70 6c 61 74 65 2f 62 6f  ude("template/bo
0f60: 74 74 6f 6d 2e 70 68 70 22 29 3b 0a 0a 0a 3f 3e  ttom.php");...?>