From ef1b44b955faab8713c7f205a5b2bdc2da5fd7c2 Mon Sep 17 00:00:00 2001 From: Alffd Date: Fri, 25 May 2018 03:40:16 -0400 Subject: [PATCH] Terms of service click through. --- SQL/paradise_schema.sql | 10 ++-- SQL/paradise_schema_prefixed.sql | 12 ++--- SQL/updates/2-3.sql | 10 ++++ code/__DEFINES/misc.dm | 2 +- code/_globalvars/configuration.dm | 1 + code/game/world.dm | 1 + code/modules/mob/new_player/new_player.dm | 63 ++++++++++++++++++++++- config/example/tos.txt | 3 ++ 8 files changed, 89 insertions(+), 13 deletions(-) create mode 100644 SQL/updates/2-3.sql create mode 100644 config/example/tos.txt diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index 826e47878c6..d0673d6f56b 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -359,12 +359,12 @@ DROP TABLE IF EXISTS `privacy`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `privacy` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `datetime` datetime NOT NULL, `ckey` varchar(32) NOT NULL, - `option` varchar(128) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=latin1; + `datetime` datetime NOT NULL, + `consent` varchar(128) NOT NULL, + PRIMARY KEY (`ckey`), + UNIQUE KEY `ckey_UNIQUE` (`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- diff --git a/SQL/paradise_schema_prefixed.sql b/SQL/paradise_schema_prefixed.sql index e0056474db3..be47265e915 100644 --- a/SQL/paradise_schema_prefixed.sql +++ b/SQL/paradise_schema_prefixed.sql @@ -357,13 +357,13 @@ CREATE TABLE `SS13_poll_vote` ( DROP TABLE IF EXISTS `SS13_privacy`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `SS13_privacy` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `datetime` datetime NOT NULL, +CREATE TABLE `ss13_privacy` ( `ckey` varchar(32) NOT NULL, - `option` varchar(128) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=latin1; + `datetime` datetime NOT NULL, + `consent` varchar(128) NOT NULL, + PRIMARY KEY (`ckey`), + UNIQUE KEY `ckey_UNIQUE` (`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- diff --git a/SQL/updates/2-3.sql b/SQL/updates/2-3.sql new file mode 100644 index 00000000000..0fa438e8a7a --- /dev/null +++ b/SQL/updates/2-3.sql @@ -0,0 +1,10 @@ +#Updating the SQL from version 2 to version 3. -alffd +#Droping privacy table and recreating for terms of service tracking +DROP TABLE `privacy`; +CREATE TABLE `privacy` ( + `ckey` varchar(32) NOT NULL, + `datetime` datetime NOT NULL, + `consent` varchar(128) NOT NULL, + PRIMARY KEY (`ckey`), + UNIQUE KEY `ckey_UNIQUE` (`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 4f38a183a80..b2288da3934 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -345,4 +345,4 @@ #define EXPLOSION_BLOCK_PROC -1 // The SQL version required by this version of the code -#define SQL_VERSION 2 +#define SQL_VERSION 3 diff --git a/code/_globalvars/configuration.dm b/code/_globalvars/configuration.dm index d26dc711339..035df89b5a7 100644 --- a/code/_globalvars/configuration.dm +++ b/code/_globalvars/configuration.dm @@ -2,6 +2,7 @@ var/datum/configuration/config = null var/host = null var/join_motd = null +var/join_tos = null var/game_version = "Custom ParaCode" var/changelog_hash = md5('html/changelog.html') //used to check if the CL changed var/game_year = (text2num(time2text(world.realtime, "YYYY")) + 544) diff --git a/code/game/world.dm b/code/game/world.dm index 7d592864501..b8577dd73e9 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -362,6 +362,7 @@ var/world_topic_spam_protect_time = world.timeofday /world/proc/load_motd() join_motd = file2text("config/motd.txt") + join_tos = file2text("config/tos.txt") /proc/load_configuration() diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index fdd9266c128..79571c7d29c 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -4,6 +4,7 @@ var/spawning = 0 //Referenced when you want to delete the new_player later on in the code. var/totalPlayers = 0 //Player counts for the Lobby tab var/totalPlayersReady = 0 + var/consent = FALSE universal_speak = 1 invisibility = 101 @@ -19,7 +20,38 @@ /mob/new_player/verb/new_player_panel() set src = usr - new_player_panel_proc() + if(consent) + new_player_panel_proc() + else + handle_tos_consent() + +/mob/new_player/proc/handle_tos_consent() + if(!join_tos) + return + establish_db_connection() + if(!dbcon.IsConnected()) + consent = 1 + return + var/DBQuery/query = dbcon.NewQuery("SELECT * FROM [format_table_name("privacy")] WHERE ckey='[src.ckey]' AND consent='SIGNED'") + query.Execute() + while(query.NextRow()) + consent = 1 + + if(!consent) + privacy_consent() + + +/mob/new_player/proc/privacy_consent() + src << browse(null, "window=playersetup") + var/output = join_tos + output += "

I consent" + output += "

I DO NOT consent" + src << browse(output,"window=privacy_consent;size=500x300") + var/datum/browser/popup = new(src, "privacy_consent", "

Privacy Consent
", 500, 400) + popup.set_window_options("can_close=0") + popup.set_content(output) + popup.open(0) + return /mob/new_player/proc/new_player_panel_proc() @@ -43,6 +75,9 @@ output += "

Observe

" + if(join_tos) + output += "

Terms of Service

" + if(!IsGuestKey(src.key)) establish_db_connection() @@ -109,11 +144,28 @@ /mob/new_player/Topic(href, href_list[]) if(!client) return 0 + if(href_list["consent_signed"]) + var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") + var/DBQuery/query = dbcon.NewQuery("REPLACE INTO [format_table_name("privacy")] (ckey, datetime, consent) VALUES ('[ckey]', '[sqltime]', 'SIGNED')") + query.Execute() + src << browse(null, "window=privacy_consent") + consent = 1 + new_player_panel_proc() + if(href_list["consent_rejected"]) + consent = 0 + to_chat(usr, "You must consent to the terms of service before you can join!") + var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") + var/DBQuery/query = dbcon.NewQuery("REPLACE INTO [format_table_name("privacy")] (ckey, datetime, consent) VALUES ('[ckey]', '[sqltime]', 'NOTSIGNED')") + query.Execute() + if(href_list["show_preferences"]) client.prefs.ShowChoices(src) return 1 if(href_list["ready"]) + if(!consent) + to_chat(usr, "You must consent to the terms of service before you can join!") + return 0 ready = !ready new_player_panel_proc() @@ -126,6 +178,9 @@ new_player_panel_proc() if(href_list["observe"]) + if(!consent) + to_chat(usr, "You must consent to the terms of service before you can join!") + return 0 if(alert(src,"Are you sure you wish to observe? You cannot normally join the round after doing this!","Player Setup","Yes","No") == "Yes") if(!client) return 1 @@ -155,8 +210,14 @@ respawnable_list += observer qdel(src) return 1 + if(href_list["tos"]) + privacy_consent() + return 0 if(href_list["late_join"]) + if(!consent) + to_chat(usr, "You must consent to the terms of service before you can join!") + return 0 if(!ticker || ticker.current_state != GAME_STATE_PLAYING) to_chat(usr, "The round is either not ready, or has already finished...") return diff --git a/config/example/tos.txt b/config/example/tos.txt new file mode 100644 index 00000000000..eb43c50a083 --- /dev/null +++ b/config/example/tos.txt @@ -0,0 +1,3 @@ +

Welcome to Space Station 13!

+ +Terms of service goes here. \ No newline at end of file