changeset 1096:bbc0a3d0b51e

Major renaming / refactor of site messages. Some that were previously modifiable from admin interface are now "hardcoded" in the configuration file. Having these settings made modifiable from there made no sense and just took space in the UI.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 27 Jan 2017 22:15:06 +0200
parents faa835271dfd
children ea2bc0667482
files dbdefs.inc.php mconfig.inc.php.example pages/about.inc.php pages/compos.inc.php pages/news.inc.php pages/noauthvote.inc.php pages/register.inc.php pages/schedule.inc.php pages/visitors.inc.php pages/vote.inc.php
diffstat 10 files changed, 369 insertions(+), 370 deletions(-) [+]
line wrap: on
line diff
--- a/dbdefs.inc.php	Fri Jan 27 22:11:40 2017 +0200
+++ b/dbdefs.inc.php	Fri Jan 27 22:15:06 2017 +0200
@@ -5,140 +5,54 @@
 //
 // Site settings and defaults we put in
 //
-$siteSettingsGroups = array(
-  "general"   => array("General", "General settings"),
-  "html"      => array("Site HTML", "Global HTML blurbs"),
-  "news"      => array("News", "News related settings"),
-  "register"  => array("Registration", "Visitor registration"),
-  "event"     => array("Event / Schedule", "Event and schedule related settings"),
-  "compos"    => array("Compos", "Compo related settings"),
-  "voting"    => array("Voting", "Voting related settings"),
-);
+$siteSettingsGroups = [
+  "general"   => ["General", "General settings"],
+  "news"      => ["News", "News related settings"],
+  "event"     => ["Event / Schedule", "Event and schedule related settings"],
+  "compos"    => ["Compos", "Compo related settings"],
+];
 
 
-$siteDefaultSettings = array(
+$siteDefaultSettings = [
 
   //
   // General site settings
   //
-  "general" => array(
-    "maxAttendeesHard" => array(VT_INT, 60, "Maximum attendees (HARD limit, <= 0 means no limit)"),
-    "maxAttendeesSoft" => array(VT_INT, 50, "Maximum attendees (soft limit, <= 0 means no limit)"),
-
-    "userTimeout"      => array(VT_INT, 120, "User pages (voting) timeout in minutes"),
-    "admTimeout"       => array(VT_INT, 15, "Administration interface timeout in minutes"),
-
-    "showAdmin"        => array(VT_BOOL, false, "Always show administration interface link on the menu"),
-    "showAttendees"    => array(VT_BOOL, true, "Show attendees list"),
-
-    "showResults"      => array(VT_BOOL, false, "Enable results page"),
+  "general" => [
+    "maxAttendeesHard" => [VT_INT, 60, "Maximum attendees (HARD limit, <= 0 means no limit)"],
+    "maxAttendeesSoft" => [VT_INT, 50, "Maximum attendees (soft limit, <= 0 means no limit)"],
 
-    "showInfoTextOnAbout" => array(VT_BOOL, false, "Show site info HTML on About page"),
-
-    "requireEMail"     => array(VT_BOOL, false, "Require e-mail address in registrations"),
-    "allowRegister"    => array(VT_BOOL, false, "Enable event registration"),
+    "userTimeout"      => [VT_INT, 120, "User pages (voting) timeout in minutes"],
+    "admTimeout"       => [VT_INT, 15, "Administration interface timeout in minutes"],
 
-    "allowVoting"      => array(VT_BOOL, false, "Enable voting (individual compos must be enabled as well)"),
-  ),
-
-  "html" => array(
-    "siteMenuHeader" => array(VT_TEXT, "<div>13.FAP:&gt; <span class=\"mblink\">&#9632;</span></div>", "Site menu header text"),
-    "siteMenuFooter" => array(VT_TEXT, "", "Site menu footer text"),
-    "siteExtraHTML" => array(VT_TEXT, "<div id=\"sponsors\">Gentle Eye</div>", "Extra global HTML code (f.e. sponsors box)"),
+    "showAdmin"        => [VT_BOOL, false, "Always show administration interface link on the menu"],
+    "showAttendees"    => [VT_BOOL, true, "Show attendees list"],
 
-    "siteInfoText" => array(VT_TEXT, "
-<a href=\"about\">
-<img src=\"img/fapsm.png\" alt=\"Finnish Amiga Party 2014\" class=\"logo\" /></a>
-<div id=\"date\">
-5.-8.12.2014<br />
-Helsinki, Finland<br />
-@ old location<br />
-<span class=\"notice\">Entry 15 EUR + prod</span>
-</div>", "Site header text"),
+    "showResults"      => [VT_BOOL, false, "Enable results page"],
+
+    "showInfoTextOnAbout" => [VT_BOOL, false, "Show site info HTML on About page"],
 
-  "aboutDescription" => array(VT_TEXT, "
-<div style=\"text-align: center;\">
-<img src=\"img/fap.png\" alt=\"FAP\" />
-<p>
-Pure Amiga demoscene party, all traditional Amiga compos and purely Amiga-oriented program.
-<br />
-<span class=\"notice\">
-YOU <b>MUST</b> HAVE AT LEAST ONE ENTRY TO COMPETITIONS IF YOU COME TO THE PARTY.
-</span>
-</p>
-</div>",
-  "About page text"),
+    "requireEMail"     => [VT_BOOL, false, "Require e-mail address in registrations"],
+    "allowRegister"    => [VT_BOOL, false, "Enable event registration"],
 
-  ),
+    "allowVoting"      => [VT_BOOL, false, "Enable voting (individual compos must be enabled as well)"],
+  ],
 
   //
   // News related
   //
-  "news" => array(
-    "showNews"         => array(VT_BOOL, true, "Enable News link on main menu + News page"),
-    "showNewsOnAbout"  => array(VT_BOOL, true, "Show latest news item on About page"),
-    "newsHeader"  => array(VT_TEXT, "", "News page header text"),
-  ),
+  "news" => [
+    "showNews"         => [VT_BOOL, true, "Enable News link on main menu + News page"],
+    "showNewsOnAbout"  => [VT_BOOL, true, "Show latest news item on About page"],
+  ],
   
   //
-  // Attendee/visitor registration
-  //
-  "register" => array(
-    "visitorsPageRegLink" => array(VT_TEXT, "
-<div class=\"reglink\">
-To register, use <a href=\"register\">this form</a>.
-</div>
-    ", "Visitors page registration link blurb"),
-    
-    "registerPageBlurb" => array(VT_TEXT, "
-    <h1>Registration</h1>
-    ", "Registration page header"),
-
-    "registerInfoText" => array(VT_TEXT, "<p>
-Only your <b>handle</b> and the answer to the botcheck are strictly required.
-If you plan on joining the IRC channel
-(<a href=\"irc://#fap2014@ircnet\">#fap2014 @ IRCNet</a>) or staying up to date by other means,
-<b>e-mail</b> is not required either.
-</p>", "Registration page info text"),
-
-    "registerPostText" => array(VT_TEXT, "
-<h1>Registration successful</h1>
-<p>Now go make a demo about it!</p>",
-  "Successful post-registration note text"),
-
-    "registerLimitExceeded" => array(VT_TEXT, "
-<h1>Sorry, registration disabled!</h1>
-<p>
-Registration to the event is not available at this time due to
-number of attendees limit having been reached. <b>:(</b>
-</p>
-",
-  "Registration attendee limit exceeded note text"),
-
-    "registerNotEnabled" => array(VT_TEXT, "
-<h1>Sorry, registration disabled!</h1>
-<p>
-Registration to the event is not enabled at this time.
-</p>
-",
-  "Registration not enabled note text"),
-
-  "registerPostNoEmail" => array(VT_TEXT, "
-<h2>By the way ...</h2>
-<p>As you did not specify an e-mail contact address, you'll have to get updates
-and information about the location (if you don't already know it) by 
-some other means (IRC, for example.)</p>
-", "No e-mail address registration note"),
-
-  ),
-
-  //
   // Event / schedule information
   //
-  "event" => array(
-    "showSchedule"     => array(VT_BOOL, true, "Enable Schedule link on main menu + Schedule page"),
+  "event" => [
+    "showSchedule"     => [VT_BOOL, true, "Enable Schedule link on main menu + Schedule page"],
 
-    "eventDescription" => array(VT_TEXT, "
+    "msgEventDescription" => [VT_TEXT, "
 <h1>Event program &amp; schedule</h1>
 <ul>
  <li><b>Aegis</b> of DSS and FAG will be performing a DJ gig.</li>
@@ -164,17 +78,17 @@
 <ul>
  <li><b>12:00</b> - Party over?</li>
 </ul>
-", "Event general description / timetables etc."),
+", "Event general description / timetables etc."],
 
-  ),
+  ],
   
   //
   // Competitions
   //
-  "compos" => array(
-    "showCompos"       => array(VT_BOOL, true, "Enable Compos link on main menu + Compos page"),
+  "compos" => [
+    "showCompos"       => [VT_BOOL, true, "Enable Compos link on main menu + Compos page"],
   
-    "compoDescription" => array(VT_TEXT, "
+    "msgCompoDescription" => [VT_TEXT, "
 <h1>General</h1>
 <p class=\"notice\">
 YOU <b>MUST</b> HAVE AT LEAST ONE ENTRY TO COMPETITIONS IF YOU COME TO THE PARTY.
@@ -193,301 +107,277 @@
 </p>
 
 <h1>Compos</h1>
-", "Compo general description"),
-  ),
-
-  //
-  // Voting
-  //
-  "voting" => array(
-
-    "voteFinishedText" => array(VT_TEXT, "
-<h1>Yay, you have voted!</h1>
-<p>Now go FAP some more! And make a demo about it.</p>
-<p>Or perhaps <a href=\"vote\">vote again!</a></p>
-",
-  "Message shown after successful voting"),
+", "Compo general description"],
+  ],
 
-    "votingDisabled" => array(VT_TEXT, "
-<h1>Sorry, voting disabled!</h1>
-<p>Voting functionality not available at this time.</p>
-",
-    "Error message for voting disabled"),
-
-    "voteAuthError" => array(VT_TEXT, "
-<h1>Not authenticated to vote</h1>
-<p>
-You are not authenticated currently. <a href=\"vote\">Try to login again.</a>
-</p>
-",
-    "Error message for vote auth failure"),
-  ),
-);
+];
 
 
 //
 // Database table definitions
 //
-$sqlTables = array(
+$sqlTables = [
   // Site settings
-  "settings_groups" => array(
-    array("id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"),
-    array("name"         , "VARCHAR(64)"),
-    array("description"  , "VARCHAR(128)"),
-  ),
+  "settings_groups" => [
+    ["id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"],
+    ["name"         , "VARCHAR(64)"],
+    ["description"  , "VARCHAR(128)"],
+  ],
 
-  "settings" => array(
-    array("key"          , "VARCHAR(32)", "PRIMARY KEY"),
-    array("vtype"        , "INT"),
-    array("vstr"         , "VARCHAR(128)"),
-    array("vtext"        , "TEXT"),
-    array("vint"         , "INT"),
-    array("sdesc"        , "VARCHAR(128)"),
-    array("vgroup"       , "INT"),
-  ),
+  "settings" => [
+    ["key"          , "VARCHAR(32)", "PRIMARY KEY"],
+    ["vtype"        , "INT"],
+    ["vstr"         , "VARCHAR(128)"],
+    ["vtext"        , "TEXT"],
+    ["vint"         , "INT"],
+    ["sdesc"        , "VARCHAR(128)"],
+    ["vgroup"       , "INT"],
+  ],
 
-  "news" => array(
-    array("id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"),
-    array("utime"        , "INT"),
-    array("title"        , "VARCHAR(".SET_LEN_NEWS_TITLE.")"),
-    array("text"         , "VARCHAR(".SET_LEN_NEWS_TEXT.")"),
-    array("author"       , "VARCHAR(".SET_LEN_NEWS_AUTHOR.")"),
-    array("persist"      , "INT", "DEFAULT 0"),
-  ),
+  "news" => [
+    ["id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"],
+    ["utime"        , "INT"],
+    ["title"        , "VARCHAR(".SET_LEN_NEWS_TITLE.")"],
+    ["text"         , "VARCHAR(".SET_LEN_NEWS_TEXT.")"],
+    ["author"       , "VARCHAR(".SET_LEN_NEWS_AUTHOR.")"],
+    ["persist"      , "INT", "DEFAULT 0"],
+  ],
 
-  "compos" => array(
-    array("id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"),
-    array("name"         , "VARCHAR(".SET_LEN_COMPO_NAME.")"),
-    array("description"  , "VARCHAR(".SET_LEN_COMPO_DESC.")"),
-    array("notes"        , "VARCHAR(".SET_LEN_COMPO_NOTES.")"),
-    array("visible"      , "INT", "DEFAULT 0"),
-    array("voting"       , "INT", "DEFAULT 0"),
+  "compos" => [
+    ["id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"],
+    ["name"         , "VARCHAR(".SET_LEN_COMPO_NAME.")"],
+    ["description"  , "VARCHAR(".SET_LEN_COMPO_DESC.")"],
+    ["notes"        , "VARCHAR(".SET_LEN_COMPO_NOTES.")"],
+    ["visible"      , "INT", "DEFAULT 0"],
+    ["voting"       , "INT", "DEFAULT 0"],
     
     // Default preview type (see EFILE_* in msite.inc.php) for this compo.
     // Global for the compo (entry-specific overrides if it is != EFILE_NONE)
-    array("preview_type" , "INT", "DEFAULT 0"),
+    ["preview_type" , "INT", "DEFAULT 0"],
 
-    array("show_authors" , "INT", "DEFAULT 0"),
+    ["show_authors" , "INT", "DEFAULT 0"],
     // Show author(s) on compo main screen/voting page for COMPO_NORMAL compos
     // For COMPO_POINTS and COMPO_ASSIGN, show on results page or not
     
-    array("ctype"        , "INT", "DEFAULT 0"),
-    array("cpath"        , "VARCHAR(".SET_LEN_COMPO_PATH.")"),
-  ),
+    ["ctype"        , "INT", "DEFAULT 0"],
+    ["cpath"        , "VARCHAR(".SET_LEN_COMPO_PATH.")"],
+  ],
   
-  "entries" => array(
-    array("id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"),
-    array("show_id"      , "INT", "DEFAULT 0"),
-    array("name"         , "VARCHAR(".SET_LEN_ENTRY_NAME.")"),
-    array("author"       , "VARCHAR(".SET_LEN_ENTRY_AUTHOR.")"),
-    array("compo_id"     , "INT", "DEFAULT 0"),
-    array("info"         , "VARCHAR(".SET_LEN_ENTRY_INFO.")", "DEFAULT NULL"),
-    array("notes"        , "VARCHAR(".SET_LEN_ENTRY_NOTES.")", "DEFAULT NULL"),
-    array("flags"        , "INT", "DEFAULT 0"),
-    array("evalue"       , "INT", "DEFAULT 0"),
-    array("file_id"      , "INT", "DEFAULT 0"), // uploaded file id from "files" table
-    array("preview_id"   , "INT", "DEFAULT 0"), // uploaded preview file id from "files" table
-    array("preview_type" , "INT", "DEFAULT 0"), // see EFILE_*, overrides compo's general type if != 0
-    array("utime"        , "INT", "DEFAULT 0"),
-    array("owner_id"     , "INT", "DEFAULT 0"), // 0 = admin, otherwise userkey id
-  ),
+  "entries" => [
+    ["id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"],
+    ["show_id"      , "INT", "DEFAULT 0"],
+    ["name"         , "VARCHAR(".SET_LEN_ENTRY_NAME.")"],
+    ["author"       , "VARCHAR(".SET_LEN_ENTRY_AUTHOR.")"],
+    ["compo_id"     , "INT", "DEFAULT 0"],
+    ["info"         , "VARCHAR(".SET_LEN_ENTRY_INFO.")", "DEFAULT NULL"],
+    ["notes"        , "VARCHAR(".SET_LEN_ENTRY_NOTES.")", "DEFAULT NULL"],
+    ["flags"        , "INT", "DEFAULT 0"],
+    ["evalue"       , "INT", "DEFAULT 0"],
+    ["file_id"      , "INT", "DEFAULT 0"], // uploaded file id from "files" table
+    ["preview_id"   , "INT", "DEFAULT 0"], // uploaded preview file id from "files" table
+    ["preview_type" , "INT", "DEFAULT 0"], // see EFILE_*, overrides compo's general type if != 0
+    ["utime"        , "INT", "DEFAULT 0"],
+    ["owner_id"     , "INT", "DEFAULT 0"], // 0 = admin, otherwise userkey id
+  ],
 
-  "files" => array(
-    array("id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"),
-    array("filename"     , "VARCHAR(".SET_LEN_ENTRY_FILENAME.")", "DEFAULT NULL"), // stored filename
-    array("origname"     , "VARCHAR(".SET_LEN_ENTRY_FILENAME.")", "DEFAULT NULL"), // original uploaded filename
-    array("filetype"     , "VARCHAR(32)", "DEFAULT NULL"), // type of the file, if any, as key from $fileTypeData
-    array("uploadtype"   , "VARCHAR(32)", "DEFAULT NULL"), // "preview", "entry"
-    array("filesize"     , "INT", "DEFAULT 0"), // uploaded size
-    array("entry_id"     , "INT", "DEFAULT 0"), // belongs to this entry (0 = none)
-    array("uploader_id"  , "INT", "DEFAULT 0"), // 0 = admin, otherwise userkey id
-    array("deleted"      , "INT", "DEFAULT 0"), // 1 = to be deleted
-    array("utime"        , "INT", "DEFAULT 0"),
-  ),
+  "files" => [
+    ["id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"],
+    ["filename"     , "VARCHAR(".SET_LEN_ENTRY_FILENAME.")", "DEFAULT NULL"], // stored filename
+    ["origname"     , "VARCHAR(".SET_LEN_ENTRY_FILENAME.")", "DEFAULT NULL"], // original uploaded filename
+    ["filetype"     , "VARCHAR(32)", "DEFAULT NULL"], // type of the file, if any, as key from $fileTypeData
+    ["uploadtype"   , "VARCHAR(32)", "DEFAULT NULL"], // "preview", "entry"
+    ["filesize"     , "INT", "DEFAULT 0"], // uploaded size
+    ["entry_id"     , "INT", "DEFAULT 0"], // belongs to this entry (0 = none)
+    ["uploader_id"  , "INT", "DEFAULT 0"], // 0 = admin, otherwise userkey id
+    ["deleted"      , "INT", "DEFAULT 0"], // 1 = to be deleted
+    ["utime"        , "INT", "DEFAULT 0"],
+  ],
 
-  "attendees" => array(
-    array("id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"),
-    array("regtime"      , "INT"),
-    array("name"         , "VARCHAR(".SET_LEN_USERNAME.")"),
-    array("groups"       , "VARCHAR(".SET_LEN_GROUPS.")"),
-    array("oneliner"     , "VARCHAR(".SET_LEN_ONELINER.")"),
-    array("email"        , "VARCHAR(".SET_LEN_EMAIL.")"),
-    array("reghost"      , "VARCHAR(".SET_LEN_REGHOST.")", "DEFAULT NULL"),
-    array("key_id"       , "INT", "DEFAULT NULL"),
-    array("usr_flags"    , "INT", "DEFAULT 0"),
-    array("adm_flags"    , "INT", "DEFAULT 0"),
-  ),
+  "attendees" => [
+    ["id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"],
+    ["regtime"      , "INT"],
+    ["name"         , "VARCHAR(".SET_LEN_USERNAME.")"],
+    ["groups"       , "VARCHAR(".SET_LEN_GROUPS.")"],
+    ["oneliner"     , "VARCHAR(".SET_LEN_ONELINER.")"],
+    ["email"        , "VARCHAR(".SET_LEN_EMAIL.")"],
+    ["reghost"      , "VARCHAR(".SET_LEN_REGHOST.")", "DEFAULT NULL"],
+    ["key_id"       , "INT", "DEFAULT NULL"],
+    ["usr_flags"    , "INT", "DEFAULT 0"],
+    ["adm_flags"    , "INT", "DEFAULT 0"],
+  ],
 
-  "userkeys" => array(
-    array("id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"),
-    array("key"          , "VARCHAR(".SET_LEN_USERKEY.")"),
-    array("active"       , "INT", "DEFAULT 0"),
-  ),
+  "userkeys" => [
+    ["id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"],
+    ["key"          , "VARCHAR(".SET_LEN_USERKEY.")"],
+    ["active"       , "INT", "DEFAULT 0"],
+  ],
 
-  "votes" => array(
-    array("id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"),
-    array("entry_id"     , "INT", "DEFAULT NULL"),
-    array("key_id"       , "INT", "DEFAULT 0"),
-    array("value"        , "INT", "DEFAULT 0"),
-    array("utime"        , "INT", "DEFAULT 0"),
-  ),
+  "votes" => [
+    ["id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"],
+    ["entry_id"     , "INT", "DEFAULT NULL"],
+    ["key_id"       , "INT", "DEFAULT 0"],
+    ["value"        , "INT", "DEFAULT 0"],
+    ["utime"        , "INT", "DEFAULT 0"],
+  ],
 
 
   // Party information system tables
-  "display_vars" => array(
-    array("key"          , "VARCHAR(32)", "PRIMARY KEY"),
-    array("vtype"        , "INT"),
-    array("vstr"         , "VARCHAR(128)"),
-    array("vtext"        , "TEXT"),
-    array("vint"         , "INT"),
-    array("sdesc"        , "VARCHAR(128)"),
-  ),
+  "display_vars" => [
+    ["key"          , "VARCHAR(32)", "PRIMARY KEY"],
+    ["vtype"        , "INT"],
+    ["vstr"         , "VARCHAR(128)"],
+    ["vtext"        , "TEXT"],
+    ["vint"         , "INT"],
+    ["sdesc"        , "VARCHAR(128)"],
+  ],
 
-  "display_slides" => array(
-    array("id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"),
-    array("title"        , "VARCHAR(".SET_LEN_DISP_SLIDE_TITLE.")"),
-    array("text"         , "VARCHAR(".SET_LEN_DISP_SLIDE_TEXT.")"),
-  ),
+  "display_slides" => [
+    ["id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"],
+    ["title"        , "VARCHAR(".SET_LEN_DISP_SLIDE_TITLE.")"],
+    ["text"         , "VARCHAR(".SET_LEN_DISP_SLIDE_TEXT.")"],
+  ],
 
-  "rot_list_data" => array(
-    array("id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"),
-    array("name"         , "VARCHAR(".SET_LEN_ROT_LIST_NAME.")"),
-  ),
+  "rot_list_data" => [
+    ["id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"],
+    ["name"         , "VARCHAR(".SET_LEN_ROT_LIST_NAME.")"],
+  ],
   
-  "rot_list_slides" => array(
-    array("id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"),
-    array("list_id"      , "INT", "DEFAULT 0"),
-    array("slide_id"     , "INT", "DEFAULT 0"),
-    array("order_num"    , "INT", "DEFAULT 0"),
-  ),
-);
+  "rot_list_slides" => [
+    ["id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"],
+    ["list_id"      , "INT", "DEFAULT 0"],
+    ["slide_id"     , "INT", "DEFAULT 0"],
+    ["order_num"    , "INT", "DEFAULT 0"],
+  ],
+];
 
 
 //
 // Party information system settings / data
 //
-$siteDisplayVars = array(
-  "showMode"          => array(VT_INT, 0, "Currently active display mode"),
-  "rotateDuration"    => array(VT_INT, 15, "Slide rotation time per slide (seconds)"),
+$siteDisplayVars = [
+  "showMode"          => [VT_INT, 0, "Currently active display mode"],
+  "rotateDuration"    => [VT_INT, 15, "Slide rotation time per slide (seconds)"],
 
-  "tempDuration"      => array(VT_INT, 5, "Temporary slide display time (minutes)"),
-  "tempSlide"         => array(VT_INT, 0, "Temporary slide ID"),
+  "tempDuration"      => [VT_INT, 5, "Temporary slide display time (minutes)"],
+  "tempSlide"         => [VT_INT, 0, "Temporary slide ID"],
 
-  "compoID"           => array(VT_INT, 0, "Compo ID of current compo"),
-  "compoPrevEntry"    => array(VT_INT, 0, "Previously shown compo entry"),
-  "compoCurrEntry"    => array(VT_INT, 0, "Current / next compo entry to be shown"),
+  "compoID"           => [VT_INT, 0, "Compo ID of current compo"],
+  "compoPrevEntry"    => [VT_INT, 0, "Previously shown compo entry"],
+  "compoCurrEntry"    => [VT_INT, 0, "Current / next compo entry to be shown"],
   
   // Not user-manageable
-  "tempSlideSet"      => array(VT_BOOL, false, "Temporary slide set"),
+  "tempSlideSet"      => [VT_BOOL, false, "Temporary slide set"],
 
-  "activeSlideMode"   => array(VT_INT, 0, "Current active slide display mode"),
-  "activeSlide"       => array(VT_INT, 0, "Current active slide"),
-  "activeSlideExpire" => array(VT_INT, 0, "Expiration timestamp of current slide"),
+  "activeSlideMode"   => [VT_INT, 0, "Current active slide display mode"],
+  "activeSlide"       => [VT_INT, 0, "Current active slide"],
+  "activeSlideExpire" => [VT_INT, 0, "Expiration timestamp of current slide"],
 
-  "rotateList"        => array(VT_INT, 0, "Current rotation list ID"),
-  "rotateListIndex"   => array(VT_INT, 0, "Current index in rotation list"),
+  "rotateList"        => [VT_INT, 0, "Current rotation list ID"],
+  "rotateListIndex"   => [VT_INT, 0, "Current index in rotation list"],
 
-  "lastUpdate"        => array(VT_INT, 0, "Timestamp of last slide update"),
+  "lastUpdate"        => [VT_INT, 0, "Timestamp of last slide update"],
 
-  "screenCmd"         => array(VT_STR, "", "Off-channel showscreen command"),
-  "screenCmdSet"      => array(VT_BOOL, false, "Off-channel showscreen command has been set"),
-);
+  "screenCmd"         => [VT_STR, "", "Off-channel showscreen command"],
+  "screenCmdSet"      => [VT_BOOL, false, "Off-channel showscreen command has been set"],
+];
 
 
 //
 // Some premade test data
 //
-$siteTestData = array(
-  "news" => array(
+$siteTestData = [
+  "news" => [
     "utime,title,text,author",
     time().",%s,%s,%s",
-    array("Today's news", "We. Are. Back.", "orgaz"),
-    array("Good news, everybody!", "...", "The Professor"),
-  ),
+    ["Today's news", "We. Are. Back.", "orgaz"],
+    ["Good news, everybody!", "...", "The Professor"],
+  ],
 
-  "userkeys" => array(
+  "userkeys" => [
     "key",
     "%s",
-    array("test1"),
-    array("test2"),
-    array("7jjnqt5z"),
-    array("c7jcfk1G"),
-  ),
+    ["test1"],
+    ["test2"],
+    ["test1"],
+    ["test2"],
+  ],
 
-  "attendees" => array(
+  "attendees" => [
     "regtime,name,groups,oneliner,email",
     "%d,%s,%s,%s,%s",
-    array(time()-0, "man with no alias", "supergroup", "foo-bar", "c@supergroup.com"),
-    array(time()-15, "man with alias", "supergroup", "hi!", "c@supergroup.com"),
-    array(time()-30, "alias with a man", "supergroup", "mega super kewl rulets", "x@microsoft.com"),
-  ),
+    [time()-0, "man with no alias", "supergroup", "foo-bar", "c@supergroup.com"],
+    [time()-15, "man with alias", "supergroup", "hi!", "c@supergroup.com"],
+    [time()-30, "alias with a man", "supergroup", "mega super kewl rulets", "x@microsoft.com"],
+  ],
 
-  "compos" => array(
+  "compos" => [
     "name,description,visible,voting",
     "%s,%s,1,1",
-    array("Graphics", "Anything in standard resolutions."),
-    array("Protracker music", "Standard 4-channel Protracker MOD music."),
-    array("4k intro", "4k intro competition"),
-  ),
+    ["Graphics", "Anything in standard resolutions."],
+    ["Protracker music", "Standard 4-channel Protracker MOD music."],
+    ["4k intro", "4k intro competition"],
+  ],
   
-  "entries" => array(
+  "entries" => [
     "name,author,compo_id,filename,info",
     "%s,%s,%d,%s,%s",
-    array("Donkey Dong", "electric/extend", 1, "donkey.lbm", "amigaaaah!"),
-    array("Your kondom", "ccr/TNSP", 1, "kondom.lbm", "oh my god, it's full of cocks!"),
-    array("Penis song", "reed/flt", 2, "penis.mod", "laulu rakkaudelle"),
-    array("jenkka", "aegis", 2, "jenkka.mod", ""),
-    array("Fungiform 2", "mfx", 3, "mfx-fungiform2.lzh", "OCS-only"),
-  ),
+    ["Donkey Dong", "electric/extend", 1, "donkey.lbm", "amigaaaah!"],
+    ["Your kondom", "ccr/TNSP", 1, "kondom.lbm", "oh my god, it's full of cocks!"],
+    ["Penis song", "reed/flt", 2, "penis.mod", "laulu rakkaudelle"],
+    ["jenkka", "aegis", 2, "jenkka.mod", ""],
+    ["Fungiform 2", "mfx", 3, "mfx-fungiform2.lzh", "OCS-only"],
+  ],
   
-  "display_slides" => array(
+  "display_slides" => [
     "title,text",
     "%s,%s",
-    array("Next Up 4k", "<h1>Next up: 4k intro</h1><h2>4k intro compo is about to begin</h2>... in about 10 minutes."),
-    array("Astu to infodesk", "<b>Astu</b> - please come to info desk!"),
-    array("Gentle Eye mainos", "<b>Buy Amiga stuff!</b><br />Gentle Eye Oy is selling Amiga-related stuff near organizer desk!"),
-  ),
+    ["Next Up 4k", "<h1>Next up: 4k intro</h1><h2>4k intro compo is about to begin</h2>... in about 10 minutes."],
+    ["Astu to infodesk", "<b>Astu</b> - please come to info desk!"],
+    ["Gentle Eye mainos", "<b>Buy Amiga stuff!</b><br />Gentle Eye Oy is selling Amiga-related stuff near organizer desk!"],
+  ],
   
-  "rot_list_data" => array(
+  "rot_list_data" => [
     "name",
     "%s",
-    array("Main rotation"),
-    array("Next Up"),
-  ),
+    ["Main rotation"],
+    ["Next Up"],
+  ],
   
-  "rot_list_slides" => array(
+  "rot_list_slides" => [
     "list_id,slide_id",
     "%d,%d",
-    array(1,2),
-    array(1,3),
-    array(2,1),
-  ),
-);
+    [1,2],
+    [1,3],
+    [2,1],
+  ],
+];
 
 
-$upgradeMappings = array(
-//  "" => array("key" => "", value => ""),
-  12 => array(
-    "show_authors" => array("key" => "showAuthors"),
-    "display_vars" => array("table" => "displayVars"),
-    "display_slides" => array("table" => "displaySlides"),
-    "rot_list_data" => array("table" => "rotationListData"),
-    "rot_list_slides" => array("table" => "rotationListSlides"),
-  ),
+$upgradeMappings = [
+//  "" => ["key" => "", value => ""],
+  12 => [
+    "show_authors" => ["key" => "showAuthors"],
+    "display_vars" => ["table" => "displayVars"],
+    "display_slides" => ["table" => "displaySlides"],
+    "rot_list_data" => ["table" => "rotationListData"],
+    "rot_list_slides" => ["table" => "rotationListSlides"],
+  ],
   
-  14 => array(
-    "settings_groups" => array("table" => FALSE),
-  ),
+  14 => [
+    "settings_groups" => ["table" => FALSE],
+  ],
   
-  17 => array(
-    "ctype" => array("key" => "type"),
-    "cpath" => array("key" => "path"),
-  ),
+  17 => [
+    "ctype" => ["key" => "type"],
+    "cpath" => ["key" => "path"],
+  ],
 
-  31 => array(
-    "userkeys" => array("table" => "votekeys"),
-  ),
-);
+  31 => [
+    "userkeys" => ["table" => "votekeys"],
+    "msgEventDescription" => ["key" => "eventDescription"],
+    "msgCompoDescription" => ["key" => "compoDescription"],
+  ],
+];
 
 
 ?>
\ No newline at end of file
--- a/mconfig.inc.php.example	Fri Jan 27 22:11:40 2017 +0200
+++ b/mconfig.inc.php.example	Fri Jan 27 22:15:06 2017 +0200
@@ -81,6 +81,115 @@
   "previewThumbType" => "PNG",
   "previewThumbQuality" => 9, // compression (PNG) or quality (JPEG)
   "previewThumbSize" => array(64, 48),
+
+
+  //
+  // Various message texts
+  //
+  "siteMenuHeader" =>
+  "<a href=\"about\"><img id=\"menuLogo\" src=\"img/fapsm2.png\" alt=\"FAP 2017\" /></a>",
+
+  "siteMenuFooter" => "",
+
+  "siteInfoText" => "
+<div class=\"date\">
+<span>??.-??.??.2017</span>
+<span>Helsinki, Finland</span>
+<span>@ old location</span>
+<span class=\"notice\">Entry <b>20 EUR</b> + prod</span>
+<span><a href=\"irc://#fap2017@ircnet\" style=\"color:#0f0\">#fap2017 @ IRCNet</a></span>
+</div>
+",
+
+  "siteExtraHTML" => "
+<div id=\"extra\"><div>
+<!-- <a href=\"http://scenesat.com/\"><div class=\"scenesat\"></div></a> -->
+<a href=\"http://demozoo.org/\"><div class=\"demozoo\"></div></a>
+</div></div>
+",
+
+
+  "msgAboutDescription" => "
+<div style=\"text-align: center;\">
+<img src=\"img/fap.png\" alt=\"FAP\" />
+<p>
+Pure Amiga demoscene party, all traditional Amiga compos and purely Amiga-oriented program.
+<br />
+<span class=\"notice\">
+YOU <b>MUST</b> HAVE AT LEAST ONE ENTRY TO COMPETITIONS IF YOU COME TO THE PARTY.
+</span>
+</p>
+</div>
+",
+
+  "msgNewsHeader"  => "
+<h1>The FAPper's news outlet</h1>
+",
+
+  "msgVoteFinished" => "
+<h1>Yay, you have voted!</h1>
+<p>Now go FAP some more! And make a demo about it.</p>
+<p>Or perhaps <a href=\"vote\">vote again!</a></p>
+",
+
+  "msgVotingDisabled" => "
+<h1>Sorry, voting disabled!</h1>
+<p>Voting functionality not available at this time.</p>
+",
+
+  "msgUserAuthError" => "
+<h1>Not logged in</h1>
+<p>
+You are not authenticated currently. <a href=\"vote\">Try to login again.</a>
+</p>
+",
+
+  "msgRegisterDisabled" => "
+<h1>Sorry, registration disabled!</h1>
+<p>
+Registration to the event is not enabled at this time.
+</p>
+",
+
+  "msgRegisterLimitExceeded" => "
+<h1>Sorry, registration disabled!</h1>
+<p>
+Registration to the event is not available at this time due to
+number of attendees limit having been reached. <b>:(</b>
+</p>
+",
+
+  "msgVisitorsPageRegLink" => "
+<div class=\"reglink\">
+To register, use <a href=\"register\">this form</a>.
+</div>
+",
+    
+  "msgRegisterPageBlurb" => "
+    <h1>Registration</h1>
+",
+
+  "msgRegisterInfoText" => "
+Only your <b>handle</b> and the answer to the botcheck are strictly required.
+If you plan on joining the IRC channel
+(<a href=\"irc://#fap2017@ircnet\">#fap2017 @ IRCNet</a>) or staying up to date by other means,
+<b>e-mail</b> is not required either.
+</p>
+",
+
+  "msgRegisterPostText" => "
+<h1>Registration successful</h1>
+<p>Now go make a demo about it!</p>
+",
+
+  "msgRegisterPostNoEmail" => "
+<h2>By the way ...</h2>
+<p>As you did not specify an e-mail contact address, you'll have to get updates
+and information about the location (if you don't already know it) by 
+some other means (IRC, for example.)
+</p>
+",
+
 );
 
 
--- a/pages/about.inc.php	Fri Jan 27 22:11:40 2017 +0200
+++ b/pages/about.inc.php	Fri Jan 27 22:15:06 2017 +0200
@@ -4,7 +4,7 @@
 // About page
 // (C) Copyright 2012-2015 Tecnic Software productions (TNSP)
 //
-echo stGetSetting("aboutDescription");
+echo stGetSetting("msgAboutDescription");
 
 if (stGetSetting("showInfoTextOnAbout"))
   echo stGetSetting("siteInfoText");
--- a/pages/compos.inc.php	Fri Jan 27 22:11:40 2017 +0200
+++ b/pages/compos.inc.php	Fri Jan 27 22:15:06 2017 +0200
@@ -14,7 +14,7 @@
 {
   echo
     "<div id=\"top\"></div>\n".
-    stGetSetting("compoDescription");
+    stGetSetting("msgCompoDescription");
 
   $sql = "SELECT id,name FROM compos WHERE visible<>0 ORDER BY id ASC";
 
--- a/pages/news.inc.php	Fri Jan 27 22:11:40 2017 +0200
+++ b/pages/news.inc.php	Fri Jan 27 22:15:06 2017 +0200
@@ -4,7 +4,7 @@
 // News page
 // (C) Copyright 2012-2015 Tecnic Software productions (TNSP)
 //
-echo stGetSetting("newsHeader");
+echo stGetSetting("msgNewsHeader");
 
 if (($res = stExecSQL("SELECT * FROM news ORDER BY utime DESC")) !== FALSE)
 {
--- a/pages/noauthvote.inc.php	Fri Jan 27 22:11:40 2017 +0200
+++ b/pages/noauthvote.inc.php	Fri Jan 27 22:15:06 2017 +0200
@@ -6,8 +6,8 @@
 //
 
 if (!stChkSetting("allowVoting"))
-  echo stGetSetting("votingDisabled");
+  echo stGetSetting("msgVotingDisabled");
 else
-  echo stGetSetting("voteAuthError");
+  echo stGetSetting("msgUserAuthError");
 
 ?>
\ No newline at end of file
--- a/pages/register.inc.php	Fri Jan 27 22:11:40 2017 +0200
+++ b/pages/register.inc.php	Fri Jan 27 22:15:06 2017 +0200
@@ -143,12 +143,12 @@
 // Check if registration is enabled
 if (!stChkSetting("allowRegister"))
 {
-  echo stGetSetting("registerNotEnabled");
+  echo stGetSetting("msgRegisterNotEnabled");
 }
 else
 if ($maxAttendeesHard > 0 && $numAttendees >= $maxAttendeesHard)
 {
-  echo stGetSetting("registerLimitExceeded");
+  echo stGetSetting("msgRegisterLimitExceeded");
 }
 else
 if ($mode == "start")
@@ -165,24 +165,24 @@
     intValueToHash(5 * rand(1,5));
 
   echo
-  stGetSetting("registerPageBlurb")."\n".
-  stGetFormStart("register", "register").
-  " ".stGetFormHiddenInput("mode", "check")."\n".
-  " ".stGetFormHiddenInput("hash", $botCheckHash)."\n".
-  " <table class=\"register\">\n";
-  stPrintFormTextInput("Handle:", "(who you are)", 20, SET_LEN_USERNAME, "name");
-  stPrintFormTextInput("Group(s):", "(duh)", 30, SET_LEN_GROUPS, "groups");
-  stPrintFormTextInput("E-mail:", stCheckRequireEmail() ? "(required)" : "", 30, SET_LEN_EMAIL, "email");
-  stPrintFormTextInput("Oneliner:", "(leave a message here)", 30, SET_LEN_ONELINER, "oneliner");
-  stPrintFormTextInput(hashToCheckStr($botCheckHash)." = ", "(I.Q. / robot check".
-  //" [".hashToAnswer($botCheckHash)."]".
-  ")", 20, 20, "botcheck", "autocomplete=\"off\"");
-  echo
-  "  <tr><td colspan=\"2\"></td><td>".stGetFormSubmitInput("register", "Continue")."</td></tr>\n".
-  " </table>\n".
-  "</form>\n";
+    stGetSetting("msgRegisterPageBlurb")."\n".
+    stGetFormStart("register", "register").
+    " ".stGetFormHiddenInput("mode", "check")."\n".
+    " ".stGetFormHiddenInput("hash", $botCheckHash)."\n".
+    " <table class=\"register\">\n";
+    stPrintFormTextInput("Handle:", "(who you are)", 20, SET_LEN_USERNAME, "name");
+    stPrintFormTextInput("Group(s):", "(duh)", 30, SET_LEN_GROUPS, "groups");
+    stPrintFormTextInput("E-mail:", stCheckRequireEmail() ? "(required)" : "", 30, SET_LEN_EMAIL, "email");
+    stPrintFormTextInput("Oneliner:", "(leave a message here)", 30, SET_LEN_ONELINER, "oneliner");
+    stPrintFormTextInput(hashToCheckStr($botCheckHash)." = ", "(I.Q. / robot check".
+    //" [".hashToAnswer($botCheckHash)."]".
+    ")", 20, 20, "botcheck", "autocomplete=\"off\"");
+    echo
+    "  <tr><td colspan=\"2\"></td><td>".stGetFormSubmitInput("register", "Continue")."</td></tr>\n".
+    " </table>\n".
+    "</form>\n";
 
-  echo stGetSetting("registerInfoText");
+  echo stGetSetting("msgRegisterInfoText");
 }
 else
 if ($mode == "check" || $mode == "register")
@@ -212,10 +212,10 @@
     $sql = stGetAttendeeRegistrationSQL();
     if (stExecSQL($sql) !== FALSE)
     {
-      echo stGetSetting("registerPostText");
+      echo stGetSetting("msgRegisterPostText");
 
       if (strlen(stGetRequestItem("email")) < 4)
-        echo stGetSetting("registerPostNoEmail");
+        echo stGetSetting("msgRegisterPostNoEmail");
     }
     else
     {
--- a/pages/schedule.inc.php	Fri Jan 27 22:11:40 2017 +0200
+++ b/pages/schedule.inc.php	Fri Jan 27 22:15:06 2017 +0200
@@ -6,7 +6,7 @@
 //
 if (stChkSetting("showSchedule"))
 {
-  echo stGetSetting("eventDescription");
+  echo stGetSetting("msgEventDescription");
 }
 else
 {
--- a/pages/visitors.inc.php	Fri Jan 27 22:11:40 2017 +0200
+++ b/pages/visitors.inc.php	Fri Jan 27 22:15:06 2017 +0200
@@ -5,7 +5,7 @@
 // (C) Copyright 2012-2015 Tecnic Software productions (TNSP)
 //
 if (stCheckRegistrationAvailable())
-  echo stGetSetting("visitorsPageRegLink");
+  echo stGetSetting("msgVisitorsPageRegLink");
 
 echo
   "\n".
--- a/pages/vote.inc.php	Fri Jan 27 22:11:40 2017 +0200
+++ b/pages/vote.inc.php	Fri Jan 27 22:15:06 2017 +0200
@@ -32,7 +32,7 @@
 
 // Check if voting is enabled
 if (!stChkSetting("allowVoting"))
-  echo stGetSetting("votingDisabled");
+  echo stGetSetting("msgVotingDisabled");
 else
 if (!stUserSessionAuth(FALSE))
 {
@@ -177,7 +177,7 @@
 if ($mode == "done")
 {
   // Voting finished successfully
-  echo stGetSetting("voteFinishedText");
+  echo stGetSetting("msgVoteFinished");
   stSessionEnd(SESS_USER);
 }
 else