from otree.api import * from otree.settings import settings import time doc = """ Welcome page for subjects taking part to the designing of statistical communication plan """ def creating_session(subsession): for player in subsession.get_players(): if player.participant.id_in_session % 2 == 1: player.participant.treatment_group = 'structured_com_NL' else: player.participant.treatment_group = 'structured_com' class C(BaseConstants): NAME_IN_URL = 'welcome_page' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): start_time_WelcomePage = models.FloatField() time_spent_WelcomePage = models.FloatField() start_time_EthicDataPage = models.FloatField() time_spent_EthicDataPage = models.FloatField() start_time_ConsentPage = models.FloatField() time_spent_ConsentPage = models.FloatField() prolific_id = models.StringField(label ="Please copy and paste your Prolific ID in the field below.") # FUNCTIONS # PAGES class WelcomePage(Page): form_model = 'player' form_fields = ['prolific_id'] @staticmethod def vars_for_template(player: Player): if player.field_maybe_none('start_time_WelcomePage') is None: player.start_time_WelcomePage = time.time() # total_pages = settings.TOTAL_PAGES_treatment_structured_com_NL current_index = player.participant._index_in_pages progress_percent = int(current_index / total_pages * 100) return {'progress_percent': progress_percent, 'total_pages': total_pages, 'current_index': current_index} # @staticmethod def before_next_page(player: Player, timeout_happened=False): player.time_spent_WelcomePage = time.time() - player.start_time_WelcomePage class EthicDataPage(Page): @staticmethod def vars_for_template(player: Player): if player.field_maybe_none('start_time_EthicDataPage') is None: player.start_time_EthicDataPage = time.time() # total_pages = settings.TOTAL_PAGES_treatment_structured_com_NL current_index = player.participant._index_in_pages progress_percent = int(current_index / total_pages * 100) return {'progress_percent': progress_percent, 'total_pages': total_pages, 'current_index': current_index} @staticmethod def before_next_page(player: Player, timeout_happened=False): player.time_spent_EthicDataPage = time.time() - player.start_time_EthicDataPage class ConsentPage(Page): @staticmethod def vars_for_template(player: Player): if player.field_maybe_none('start_time_ConsentPage') is None: player.start_time_ConsentPage = time.time() # no_consent_link = player.session.config['no_consent_link'] total_pages = settings.TOTAL_PAGES_treatment_structured_com_NL current_index = player.participant._index_in_pages progress_percent = int(current_index / total_pages * 100) return {'progress_percent': progress_percent, 'total_pages': total_pages, 'current_index': current_index, 'no_consent_link': no_consent_link} @staticmethod def before_next_page(player: Player, timeout_happened=False): player.time_spent_ConsentPage = time.time() - player.start_time_ConsentPage page_sequence = [WelcomePage,EthicDataPage,ConsentPage]