view dbdefs.inc.php @ 1092:95b74632cfe2

Rename votekeys table to userkeys, and all related variables and settings.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 26 Jan 2017 13:38:19 +0200
parents 48e16e856646
children 563fc90de965
line wrap: on
line source

<?php

$dbVersion = 31;

//
// 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"),
);


$siteDefaultSettings = array(

  //
  // 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"),

    "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"),
  ),

  "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)"),

    "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"),

  "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"),

  ),

  //
  // 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"),
  ),
  
  //
  // 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"),

    "eventDescription" => array(VT_TEXT, "
<h1>Event program &amp; schedule</h1>
<ul>
 <li><b>Aegis</b> of DSS and FAG will be performing a DJ gig.</li>
 <li>.. and possible additional live acts. More info to come.</li>
</ul>

<h2>Friday 30.11.</h2>
<ul>
 <li><b>18:00</b> - <i>Doors open</i>.</li>
 <li><b>22:00</b> - DJ set by Aegis.</li>
</ul>

<h2>Saturday 1.12.</h2>
<ul>
 <li><b>14:00</b> - Deadline for remote entries.</li>
 <li><b>18:00</b> - Deadline for the entries delivered on location.</li>
 <li><b>20:00</b> - Competitions start.</li>
</ul>

Competition schedule and voting deadline will depend on number of entries.

<h2>Sunday 2.12.</h2>
<ul>
 <li><b>12:00</b> - Party over?</li>
</ul>
", "Event general description / timetables etc."),

  ),
  
  //
  // Competitions
  //
  "compos" => array(
    "showCompos"       => array(VT_BOOL, true, "Enable Compos link on main menu + Compos page"),
  
    "compoDescription" => array(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.
</p>

<p class=\"note\">
If there are enough entries, then AGA/OCS/ECS demos will be run in separate compos.
<br />
Remote entries are welcome!
</p>

<p>
The compo machine will be an <b>A1200 with an 060/50 and lots of
RAM</b>. An <b>A500 1.3 512k/512k</b> will also be available if your
prod is not AGA compatible.
</p>

<h1>Compos</h1>
", "Compo general description"),
  ),

  //
  // Voting
  //
  "voting" => array(
    "allowVoting"      => array(VT_BOOL, false, "Enable voting (individual compos must be enabled as well)"),

    "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"),

    "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(
  // Site settings
  "settings_groups" => array(
    array("id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"),
    array("name"         , "VARCHAR(64)"),
    array("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"),
  ),

  "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"),
  ),

  "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"),
    
    // 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"),

    array("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.")"),
  ),
  
  "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
  ),

  "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"),
  ),

  "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"),
  ),

  "userkeys" => array(
    array("id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"),
    array("key"          , "VARCHAR(".SET_LEN_USERKEY.")"),
    array("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"),
  ),


  // 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_slides" => array(
    array("id"           , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"),
    array("title"        , "VARCHAR(".SET_LEN_DISP_SLIDE_TITLE.")"),
    array("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_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"),
  ),
);


//
// 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)"),

  "tempDuration"      => array(VT_INT, 5, "Temporary slide display time (minutes)"),
  "tempSlide"         => array(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"),
  
  // Not user-manageable
  "tempSlideSet"      => array(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"),

  "rotateList"        => array(VT_INT, 0, "Current rotation list ID"),
  "rotateListIndex"   => array(VT_INT, 0, "Current index in rotation list"),

  "lastUpdate"        => array(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"),
);


//
// Some premade test data
//
$siteTestData = array(
  "news" => array(
    "utime,title,text,author",
    time().",%s,%s,%s",
    array("Today's news", "We. Are. Back.", "orgaz"),
    array("Good news, everybody!", "...", "The Professor"),
  ),

  "userkeys" => array(
    "key",
    "%s",
    array("test1"),
    array("test2"),
    array("7jjnqt5z"),
    array("c7jcfk1G"),
  ),

  "attendees" => array(
    "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"),
  ),

  "compos" => array(
    "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"),
  ),
  
  "entries" => array(
    "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"),
  ),
  
  "display_slides" => array(
    "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!"),
  ),
  
  "rot_list_data" => array(
    "name",
    "%s",
    array("Main rotation"),
    array("Next Up"),
  ),
  
  "rot_list_slides" => array(
    "list_id,slide_id",
    "%d,%d",
    array(1,2),
    array(1,3),
    array(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"),
  ),
  
  14 => array(
    "settings_groups" => array("table" => FALSE),
  ),
  
  17 => array(
    "ctype" => array("key" => "type"),
    "cpath" => array("key" => "path"),
  ),

  31 => array(
    "userkeys" => array("table" => "votekeys"),
  ),
);


?>