From 8ef0791f5be434a98ed1ab44395a80900074d01d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20Heikkil=C3=A4?= <timo.t.heikkila@utu.fi>
Date: Wed, 28 Nov 2018 21:17:05 +0200
Subject: [PATCH] =?UTF-8?q?uusi=20p=C3=A4ivitys?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app.db                                        |  Bin 94208 -> 122880 bytes
 app/__init__.py                               |   51 +-
 app/forms.py                                  |   39 +-
 app/messages.pot                              |   19 -
 app/models.py                                 |   35 +-
 app/rating_tool.py                            |    6 +-
 app/routes.py                                 | 1085 ++++++++++++-----
 app/static/css/custom.css                     |   12 +-
 app/static/css/slider.css                     |    6 +
 app/templates/add_stimuli.html                |   21 +-
 app/templates/admin_dryrun.html               |   29 +
 app/templates/base.html                       |   50 +-
 app/templates/begin_with_id.html              |    9 +-
 app/templates/consent.html                    |   35 +-
 app/templates/continue_task.html              |    4 +-
 app/templates/create_experiment.html          |   43 +-
 .../create_experiment_questions.html          |    4 +-
 .../create_experiment_upload_stimuli.html     |    6 +-
 app/templates/edit_experiment.html            |   21 +-
 app/templates/experiment_statistics.html      |   82 +-
 app/templates/index.html                      |  105 +-
 app/templates/instructions.html               |   10 +-
 app/templates/quit_task.html                  |   10 +-
 app/templates/register.html                   |    8 +-
 app/templates/researcher_info.html            |    2 +-
 app/templates/task.html                       |   59 +-
 app/templates/task_completed.html             |    6 +-
 app/templates/test_page.html                  |   12 +
 .../upload_research_notification.html         |   38 +
 app/templates/view_experiment.html            |  105 +-
 app/templates/view_forced_id_list.html        |   49 +
 app/templates/view_research_notification.html |   13 +
 app/translations/el/LC_MESSAGES/messages.mo   |  Bin 0 -> 6449 bytes
 app/translations/el/LC_MESSAGES/messages.po   |  290 +++++
 app/translations/en/LC_MESSAGES/messages.mo   |  Bin 0 -> 4705 bytes
 app/translations/en/LC_MESSAGES/messages.po   |  270 ++++
 app/translations/fa/LC_MESSAGES/messages.mo   |  Bin 0 -> 5544 bytes
 app/translations/fa/LC_MESSAGES/messages.po   |  280 +++++
 app/translations/fi/LC_MESSAGES/messages.mo   |  Bin 0 -> 4666 bytes
 app/translations/fi/LC_MESSAGES/messages.po   |  281 +++++
 app/translations/fin/LC_MESSAGES/messages.mo  |  Bin 484 -> 0 bytes
 app/translations/fin/LC_MESSAGES/messages.po  |   24 -
 app/translations/it/LC_MESSAGES/messages.mo   |  Bin 0 -> 4705 bytes
 app/translations/it/LC_MESSAGES/messages.po   |  270 ++++
 app/translations/zh/LC_MESSAGES/messages.mo   |  Bin 0 -> 4609 bytes
 app/translations/zh/LC_MESSAGES/messages.po   |  270 ++++
 babel.cfg                                     |    2 +-
 config.py                                     |   22 +-
 create_rating_db.txt                          |  119 ++
 messages.pot                                  |  203 ++-
 .../{75ace1b8b1e0_.py => aea4a0f982b4_.py}    |   39 +-
 51 files changed, 3467 insertions(+), 577 deletions(-)
 delete mode 100644 app/messages.pot
 create mode 100644 app/static/css/slider.css
 create mode 100644 app/templates/admin_dryrun.html
 create mode 100644 app/templates/test_page.html
 create mode 100644 app/templates/upload_research_notification.html
 create mode 100644 app/templates/view_forced_id_list.html
 create mode 100644 app/templates/view_research_notification.html
 create mode 100644 app/translations/el/LC_MESSAGES/messages.mo
 create mode 100644 app/translations/el/LC_MESSAGES/messages.po
 create mode 100644 app/translations/en/LC_MESSAGES/messages.mo
 create mode 100644 app/translations/en/LC_MESSAGES/messages.po
 create mode 100644 app/translations/fa/LC_MESSAGES/messages.mo
 create mode 100644 app/translations/fa/LC_MESSAGES/messages.po
 create mode 100644 app/translations/fi/LC_MESSAGES/messages.mo
 create mode 100644 app/translations/fi/LC_MESSAGES/messages.po
 delete mode 100644 app/translations/fin/LC_MESSAGES/messages.mo
 delete mode 100644 app/translations/fin/LC_MESSAGES/messages.po
 create mode 100644 app/translations/it/LC_MESSAGES/messages.mo
 create mode 100644 app/translations/it/LC_MESSAGES/messages.po
 create mode 100644 app/translations/zh/LC_MESSAGES/messages.mo
 create mode 100644 app/translations/zh/LC_MESSAGES/messages.po
 create mode 100644 create_rating_db.txt
 rename migrations/versions/{75ace1b8b1e0_.py => aea4a0f982b4_.py} (73%)

diff --git a/app.db b/app.db
index d1734623b4dd39f4992573f1e2ddfd7d1c1478de..0a7a1e2e1dbcbae3aead8584aa2ecce4834a8772 100644
GIT binary patch
literal 122880
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

literal 94208
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
beX%A*_31bL3WakGhpxWpmqGtOuD<*q;crjN

diff --git a/app/__init__.py b/app/__init__.py
index b403534..00098fc 100644
--- a/app/__init__.py
+++ b/app/__init__.py
@@ -5,17 +5,64 @@ from flask_sqlalchemy import SQLAlchemy
 from flask_migrate import Migrate
 from flask_login import LoginManager
 from flask_babel import Babel
+from flask import request
+from flask import session
+from flask import flash
 
 
 app = Flask(__name__)
-app.config['BABEL_DEFAULT_LOCALE'] = 'en'
+#app.config['BABEL_DEFAULT_LOCALE'] = 'fin'
+#app.config['BABEL_TRANSLATION_DIRECTORIES'] ='C:/Users/Timo/git/pet-rating/app/translations'
 babel = Babel(app)
 
+@babel.localeselector
+def get_locale():
+    if request.args.get('lang'):
+
+        session['lang'] = request.args.get('lang')
+        
+        if session['lang'] == 'en':
+            session['language'] = 'English'
+
+        if session['lang'] == 'fi':
+            session['language'] = 'Finnish'
+
+        if session['lang'] == 'fa':
+            session['language'] = 'Persian'
+
+        if session['lang'] == 'el':
+            session['language'] = 'Greek'
+            
+        if session['lang'] == 'it':
+            session['language'] = 'Italian'
+    
+        if session['lang'] == 'zh':
+            session['language'] = 'Chinese'
+
+    
+    
+    return session.get('lang', 'en')
+
+
+
+"""
+@babel.localeselector
+def get_locale():
 
+    if session:
+        
+        return 'fi'
+        
+    else:
+        
+        return 'en'
+"""
+"""
 @babel.localeselector
 def get_locale():
+    return request.accept_languages.best_match(app.config['LANGUAGES'])
+"""
 
-    return 'fin'
 
 #mariabd mysql portti 3306 tarkista?
 
diff --git a/app/forms.py b/app/forms.py
index cbfc28b..4cf8118 100644
--- a/app/forms.py
+++ b/app/forms.py
@@ -5,8 +5,10 @@ from wtforms_sqlalchemy.fields import QuerySelectField
 from flask_bootstrap import Bootstrap
 from app.models import background_question
 from wtforms import Form, TextField, TextAreaField, SubmitField, FieldList, FormField
-from wtforms import Form, BooleanField, StringField, PasswordField, validators, RadioField
+from wtforms import Form, BooleanField, StringField, PasswordField, validators, RadioField, IntegerField
 from flask_wtf.file import FileField, FileAllowed, FileRequired
+from flask_babel import _
+from flask_babel import lazy_gettext as _l
 
 
 class LoginForm(FlaskForm):
@@ -31,13 +33,12 @@ class TaskForm(Form):
 class ContinueTaskForm(FlaskForm):
     
     participant_id = StringField('participant_id', validators=[DataRequired()])
-    submit = SubmitField('Continue rating')
-
+    submit = SubmitField( _l('Continue rating') )
 
 class StartWithIdForm(FlaskForm):
     
     participant_id = StringField('participant_id', validators=[DataRequired()])
-    submit = SubmitField('Start rating')
+    submit = SubmitField( _l('Start rating') )
  
 
 class Questions(FlaskForm):
@@ -80,7 +81,11 @@ class TestForm2(Form):
 class CreateExperimentForm(Form):
 
     name = StringField('Name', [validators.DataRequired()])
-    instruction = StringField('Instruction', [validators.DataRequired()])
+    creator_name = StringField('Creator_name', [validators.DataRequired()])     
+    single_sentence_instruction = StringField('Single_sentence_instruction', [validators.DataRequired()])
+    short_instruction = TextAreaField('Short_instruction', [validators.DataRequired()])
+    instruction = TextAreaField('Instruction', [validators.DataRequired()])
+    consent_text = TextAreaField('Instruction', [validators.DataRequired()])
     language = StringField('Language', [validators.DataRequired()])
     submit = SubmitField('Send')
 
@@ -88,10 +93,14 @@ class CreateExperimentForm(Form):
 class EditExperimentForm(Form):
 
     name = StringField('Name', [validators.DataRequired()])
-    instruction = StringField('Instruction', [validators.DataRequired()])
+    creator_name = StringField('Creator_name', [validators.DataRequired()])
+    instruction = TextAreaField('Instruction', [validators.DataRequired()])
+    consent_text = TextAreaField('Instruction', [validators.DataRequired()])
+    short_instruction = TextAreaField('Short_instruction', [validators.DataRequired()])
+    single_sentence_instruction = StringField('Single_sentece_instruction', [validators.DataRequired()])
     language = SelectField('Language', choices=[
             ('Afrikanns', 'Afrikanns'), ('Albanian', 'Albanian'), ('Arabic', 'Arabic'), ('Armenian', 'Armenian'), ('Basque', 'Basque'), ('Bengali', 'Bengali'), ('Bulgarian', 'Bulgarian'),
-            ('Catalan', 'Catalan'), ('Cambodian', 'Cambodian'), ('Chinese (Mandarin)', 'Chinese (Mandarin)'), ('Croation', 'Croation'), ('Czech', 'Czech'), ('Danish', 'Danish'),
+            ('Catalan', 'Catalan'), ('Cambodian', 'Cambodian'), ('Chinese', 'Chinese'), ('Croation', 'Croation'), ('Czech', 'Czech'), ('Danish', 'Danish'),
             ('Dutch', 'Dutch'), ('English', 'English'), ('Estonian', 'Estonian'), ('Fiji', 'Fiji'), ('Finnish', 'Finnish'), ('French', 'French'), ('Georgian', 'Georgian'),
             ('German', 'German'), ('Greek', 'Greek'), ('Gujarati', 'Gujarati'), ('Hebrew', 'Hebrew'), ('Hindi', 'Hindi'), ('Hungarian', 'Hungarian'), ('Icelandic', 'Icelandic'),
             ('Indonesian', 'Indonesian'), ('Irish', 'Irish'), ('Italian', 'Italian'), ('Japanese', 'Japanese'), ('Javanese', 'Javanese'), ('Korean', 'Korean'), ('Latin', 'Latin'),
@@ -101,6 +110,9 @@ class EditExperimentForm(Form):
             ('Slovenian', 'Slovenian'), ('Spanish', 'Spanish'), ('Swahili', 'Swahili'), ('Swedish ', 'Swedish '), ('Tamil', 'Tamil'), ('Tatar', 'Tatar'), ('Telugu', 'Telugu'),
             ('Thai', 'Thai'), ('Tibetan', 'Tibetan'), ('Tonga', 'Tonga'), ('Turkish', 'Turkish'), ('Ukranian', 'Ukranian'), ('Urdu', 'Urdu'), ('Uzbek', 'Uzbek'), ('Vietnamese', 'Vietnamese'),
             ('Welsh', 'Welsh'), ('Xhosa', 'Xhosa')])
+    stimulus_size = SelectField('Stimulus_size', choices=[
+            ('1', '1'), ('2', '2'), ('3', '3'), ('4', '4'), ('5', '5'), ('6', '6'), ('7', '7'), ('8', '8'), ('9', '9'), ('10', '10'), ('11', '11'), ('12', '12')])
+            
     submit = SubmitField('Send')
 
 
@@ -137,6 +149,13 @@ class UploadStimuliForm(Form):
     media = TextAreaField('Media filename')
     file = FileField('Upload file')
     submit = SubmitField('Send')
+
+
+class UploadResearchBulletinForm(Form):
+    
+    file = FileField('Upload file')
+    submit = SubmitField('Send')
+
     
 
 class EditPageForm(Form):
@@ -152,3 +171,9 @@ class RemoveExperimentForm(Form):
     remove = TextAreaField('Remove')
     submit = SubmitField('Send')
 
+class GenerateIdForm(Form): 
+
+    number = IntegerField('number', [validators.DataRequired()])
+    string = StringField('string', [validators.DataRequired()])
+    submit = SubmitField('Submit')
+
diff --git a/app/messages.pot b/app/messages.pot
deleted file mode 100644
index bcd5f63..0000000
--- a/app/messages.pot
+++ /dev/null
@@ -1,19 +0,0 @@
-# Translations template for PROJECT.
-# Copyright (C) 2018 ORGANIZATION
-# This file is distributed under the same license as the PROJECT project.
-# FIRST AUTHOR <EMAIL@ADDRESS>, 2018.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PROJECT VERSION\n"
-"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2018-11-04 17:30+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.6.0\n"
-
diff --git a/app/models.py b/app/models.py
index 6115937..4686b98 100644
--- a/app/models.py
+++ b/app/models.py
@@ -1,5 +1,5 @@
 from app import db
-from sqlalchemy import Column, Integer, String
+from sqlalchemy import Column, Integer, String, Text
 from flask_sqlalchemy import SQLAlchemy
 from flask_wtf import FlaskForm
 from wtforms_sqlalchemy.fields import QuerySelectField, QuerySelectMultipleField 
@@ -7,6 +7,7 @@ from flask_bootstrap import Bootstrap
 from werkzeug.security import generate_password_hash, check_password_hash
 from flask_login import UserMixin
 from app import login
+from datetime import datetime
 
 
 """DATABASE CLASSES"""
@@ -38,14 +39,23 @@ class experiment (db.Model):
     __tablename__ = "experiment"
     idexperiment = db.Column(db.Integer, primary_key=True)
     name = db.Column(db.String(120), index=True)
-    instruction = db.Column(db.String(120), index=True)
+    instruction = db.Column(db.Text, index=True)
     directoryname = db.Column(db.String(120), index=True, unique=True)
     language = db.Column(db.String(120))
     status = db.Column(db.String(120))
     randomization = db.Column(db.String(120))
+    short_instruction = db.Column(db.Text, index=True)
+    single_sentence_instruction = db.Column(db.Text, index=True)
+    is_archived = db.Column(db.String(120))
+    creator_name = db.Column(db.String(120))
+    research_notification_filename = db.Column(db.String(120))
+    creation_time = db.Column(db.DateTime, index=True, default=datetime.utcnow)
+    stimulus_size = db.Column(db.String(120))
+    consent_text = db.Column(db.Text, index=True)
+    use_forced_id = db.Column(db.String(120))
     
     def __repr__(self):
-        return "<idexperiment = '%s', name='%s', instruction='%s', directoryname='%s', language='%s', status='%s', randomization='%s'>" % (self.idexperiment, self.name, self.instruction, self.directoryname, self.language, self.status, self.randomization)
+        return "<idexperiment = '%s', name='%s', instruction='%s', directoryname='%s', language='%s', status='%s', randomization='%s', short_instruction='%s', single_sentence_instruction='%s', is_archived='%s', creator_name='%s', research_notification_filename='%s', creation_time='%s', stimulus_size='%s', consent_text='%s', use_forced_id='%s'>" % (self.idexperiment, self.name, self.instruction, self.directoryname, self.language, self.status, self.randomization, self.short_instruction, self.single_sentence_instruction, self.is_archived, self.creator_name, self.research_notification_filename, self.creation_time, self.stimulus_size, self.consent_text, self.use_forced_id)
 
 
 class answer_set (db.Model):
@@ -55,9 +65,11 @@ class answer_set (db.Model):
     session = db.Column(db.String(120))
     agreement = db.Column(db.String(120))
     answer_counter = db.Column(db.Integer)
+    registration_time = db.Column(db.DateTime, index=True, default=datetime.utcnow)
+    last_answer_time = db.Column(db.DateTime, index=True, default=datetime.utcnow)
 
     def __repr__(self):
-        return "<idanswer_set = '%s', experiment_idexperiment = '%s', session = '%s', agreement = '%s', answer_counter = '%s'>" % (self.idanswer_set, self.experiment_idexperiment, self.session, self.agreement, self.answer_counter)
+        return "<idanswer_set = '%s', experiment_idexperiment = '%s', session = '%s', agreement = '%s', answer_counter = '%s', registration_time = '%s', last_answer_time = '%s'>" % (self.idanswer_set, self.experiment_idexperiment, self.session, self.agreement, self.answer_counter, self.registration_time, self.last_answer_time)
 
 
 class background_question_answer(db.Model):
@@ -148,6 +160,21 @@ class trial_randomization (db.Model):
         return "<idtrial_randomization = '%s', page_idpage = '%s', randomized_idpage = '%s', answer_set_idanswer_set = '%s', experiment_idexperiment = '%s'>" % (self.idtrial_randomization, self.page_idpage, self.randomized_idpage, self.answer_set_idanswer_set, self.experiment_idexperiment)
 
 
+class forced_id (db.Model):
+    __tablename__ = "forced_id"
+    idforced_id = db.Column(db.Integer, primary_key=True)
+    experiment_idexperiment = db.Column(db.Integer, db.ForeignKey('experiment.idexperiment'))
+    pregenerated_id = db.Column(db.String(120))     
+        
+    def __repr__(self):
+        return "<idforced_id = '%s', experiment_idexperiment = '%s', pregenerated_id = '%s'>" % (self.idforced_id, self.experiment_idexperiment, self.pregenerated_id)
+
+
+
+
+
+
+
 class user(UserMixin, db.Model):
     __tablename__ = "user"
     id = db.Column(db.Integer, primary_key=True)
diff --git a/app/rating_tool.py b/app/rating_tool.py
index 5223f6e..0592181 100644
--- a/app/rating_tool.py
+++ b/app/rating_tool.py
@@ -4,7 +4,7 @@ from app.models import experiment
 from app.models import answer_set
 from app.models import background_question_answer
 from app.models import question, page, answer
-from app.models import user, trial_randomization
+from app.models import user, trial_randomization, forced_id
 
 
 
@@ -20,10 +20,12 @@ def make_shell_context():
             'page': page,
             'answer': answer,
             'user': user,
-            'trial_randomization': trial_randomization
+            'trial_randomization': trial_randomization,
+            'forced_id': forced_id
             }
 
 
+
 """
 
 from app import app, db
diff --git a/app/routes.py b/app/routes.py
index 394a89e..991bb63 100644
--- a/app/routes.py
+++ b/app/routes.py
@@ -4,7 +4,7 @@ from app.models import background_question, experiment
 from app.models import background_question_answer
 from app.models import page, question
 from app.models import background_question_option
-from app.models import answer_set, answer
+from app.models import answer_set, answer, forced_id
 from flask import session
 from app.forms import LoginForm, RegisterForm
 from flask import flash, redirect
@@ -27,7 +27,7 @@ from flask_login import login_required
 from sqlalchemy import update
 from app.forms import StartWithIdForm
 import secrets
-from app.forms import CreateExperimentForm, CreateBackgroundQuestionForm, CreateQuestionForm, UploadStimuliForm, EditBackgroundQuestionForm, EditQuestionForm, EditExperimentForm
+from app.forms import CreateExperimentForm, CreateBackgroundQuestionForm, CreateQuestionForm, UploadStimuliForm, EditBackgroundQuestionForm, EditQuestionForm, EditExperimentForm, UploadResearchBulletinForm
 from app.forms import EditPageForm, RemoveExperimentForm
 import os
 import random
@@ -40,8 +40,11 @@ from flask import send_file
 from flask import make_response
 from flask_babel import Babel
 from app import babel
-
-
+from datetime import datetime
+from app.forms import GenerateIdForm
+import math
+from flask_babel import _
+from flask_babel import lazy_gettext as _l
 
 #Stimuli upload folder setting
 APP_ROOT = os.path.dirname(os.path.abspath(__file__))
@@ -61,8 +64,8 @@ def index():
     
     else:
         
-        flash("set lang")
-        session['language'] = "All"
+        #flash("sessio ei voimassa")
+        session['language'] = "English"
     
     return render_template('index.html', title='Home', experiments=experiments)
 
@@ -70,8 +73,21 @@ def index():
 @app.route('/consent')
 def consent():
     exp_id = request.args.get('exp_id', None)
-    experiments = experiment.query.all()
-    return render_template('consent.html', exp_id=exp_id, experiments=experiments)
+
+    experiment_info = experiment.query.filter_by(idexperiment=exp_id).first()
+    
+    
+    
+    
+
+    if experiment_info.use_forced_id == 'On':
+        
+        return redirect(url_for('begin_with_id', exp_id=exp_id))
+        
+
+
+
+    return render_template('consent.html', exp_id=exp_id, experiment_info=experiment_info)
 
 
 @app.route('/set_language')
@@ -79,10 +95,10 @@ def set_language():
     
     session['language'] = request.args.get('language', None)
     
+    lang = request.args.get('lang', None)
     
     
-    
-    return redirect(url_for('index'))
+    return redirect(url_for('index', lang=lang))
 
 @app.route('/remove_language')
 def remove_language():
@@ -131,7 +147,9 @@ def participant_session():
     
     
     #create answer set for the participant in the database
-    participant_answer_set = answer_set(experiment_idexperiment=session['exp_id'], session=session['user'], agreement = session['agree'], answer_counter = '0')
+    the_time = datetime.now()
+    the_time = the_time.replace(microsecond=0)
+    participant_answer_set = answer_set(experiment_idexperiment=session['exp_id'], session=session['user'], agreement = session['agree'], answer_counter = '0', registration_time=the_time, last_answer_time=the_time)
     db.session.add(participant_answer_set)
     db.session.commit()
     
@@ -333,6 +351,46 @@ def begin_with_id():
     
     exp_id = request.args.get('exp_id', None)
     form = StartWithIdForm()
+    experiment_info = experiment.query.filter_by(idexperiment=exp_id).first()
+
+    if form.validate_on_submit():
+        
+        variable = form.participant_id.data
+        
+        #check if participant ID is found from db with this particular ID. If a match is found inform about error
+        participant = answer_set.query.filter(and_(answer_set.session==variable, answer_set.experiment_idexperiment==exp_id)).first()
+        is_id_valid = forced_id.query.filter(and_(forced_id.pregenerated_id==variable, forced_id.experiment_idexperiment==exp_id)).first()
+        
+        if participant is not None:
+            flash(_('ID already in use'))
+            return redirect(url_for('begin_with_id', exp_id=exp_id))        
+        
+        #if there was not a participant already in DB:
+        if participant is None:
+    
+            if is_id_valid is None:
+
+                                
+                flash(_('No such ID set for this experiment'))
+                return redirect(url_for('begin_with_id', exp_id=exp_id))        
+
+            else:
+                
+                #save the participant ID in session list for now, this is deleted after the session has been started in participant_session-view
+                session['begin_with_id'] = form.participant_id.data
+                return render_template('consent.html', exp_id=exp_id, experiment_info=experiment_info)
+        
+    return render_template('begin_with_id.html', exp_id=exp_id, form=form)
+
+
+@app.route('/admin_dryrun', methods=['GET', 'POST'])
+@login_required
+def admin_dryrun():
+    
+    
+    exp_id = request.args.get('exp_id', None)
+    form = StartWithIdForm()
+    experiment_info = experiment.query.filter_by(idexperiment=exp_id).first()
 
     if form.validate_on_submit():
         
@@ -340,16 +398,17 @@ def begin_with_id():
         participant = answer_set.query.filter(and_(answer_set.session==form.participant_id.data, answer_set.experiment_idexperiment==exp_id)).first()
         if participant is not None:
             flash('ID already in use')
-            return redirect(url_for('begin_with_id', exp_id=exp_id))        
+            return redirect(url_for('admin_dryrun', exp_id=exp_id))        
         
         #if there was not a participant already in DB:
         if participant is None:
             #save the participant ID in session list for now, this is deleted after the session has been started in participant_session-view
             session['begin_with_id'] = form.participant_id.data
-            return render_template('consent.html', exp_id=exp_id)
+            return render_template('consent.html', exp_id=exp_id, experiment_info=experiment_info)
 
         
-    return render_template('begin_with_id.html', exp_id=exp_id, form=form)
+    return render_template('admin_dryrun.html', exp_id=exp_id, form=form)
+
 
 
 @app.route('/create_task')
@@ -368,6 +427,15 @@ def instructions():
 @app.route('/task/<int:page_num>', methods=['GET', 'POST'])
 def task(page_num):
 
+    
+    experiment_info = experiment.query.filter_by(idexperiment=session['exp_id']).first()
+    rating_instruction = experiment_info.single_sentence_instruction
+    stimulus_size = experiment_info.stimulus_size
+    
+    #for text stimuli the size needs to be calculated since the template element utilises h1-h6 tags.
+    #A value of stimulus size 12 gives h1 and value of 1 gives h6
+    stimulus_size_text = 7-math.ceil((int(stimulus_size)/2))
+    
     pages = page.query.filter_by(experiment_idexperiment=session['exp_id']).paginate(per_page=1, page=page_num, error_out=True)
     progress_bar_percentage = round((pages.page/pages.pages)*100)
 
@@ -424,11 +492,15 @@ def task(page_num):
         
 
 
-        if check_answer is None:            
+        if check_answer is None:
+            
+            the_time = datetime.now()
+            the_time = the_time.replace(microsecond=0)
             
             update_answer_counter = answer_set.query.filter_by(idanswer_set=session['answer_set']).first()
             update_answer_counter.answer_counter = int(update_answer_counter.answer_counter) + 1 
-            
+            update_answer_counter.last_answer_time = the_time
+        
             #flash("vastauksia:")
             #flash(update_answer_counter.answer_counter)
             db.session.commit()
@@ -471,7 +543,7 @@ def task(page_num):
         return redirect ( url_for('task_completed'))
 
     
-    return render_template('task.html', pages=pages, progress_bar_percentage=progress_bar_percentage, form=form, randomized_stimulus=randomized_stimulus)
+    return render_template('task.html', pages=pages, progress_bar_percentage=progress_bar_percentage, form=form, randomized_stimulus=randomized_stimulus, rating_instruction=rating_instruction, stimulus_size=stimulus_size, stimulus_size_text=stimulus_size_text)
 
 
 
@@ -491,7 +563,7 @@ def quit_task():
 @app.route('/researcher_login', methods=['GET', 'POST'])
 def login():
     if current_user.is_authenticated:
-        flash("allready logged in")
+        #flash("allready logged in")
         return redirect(url_for('index'))
     form = LoginForm()
     if form.validate_on_submit():
@@ -523,41 +595,128 @@ def experiment_statistics():
     experiment_info = experiment.query.filter_by(idexperiment = exp_id).all()
     participants = answer_set.query.filter_by(experiment_idexperiment= exp_id).all()
     
-    participants_and_answers = {}
     
-    for participant in participants:
- 
-        answers = answer.query.filter_by(answer_set_idanswer_set=participant.idanswer_set).all()     
-        answers_list = [(a.idanswer, a.question_idquestion, a.answer_set_idanswer_set, a.answer, a.page_idpage) for a in answers]    
-        participants_and_answers[participant.session] = answers_list 
+    #Rating task headers
+    question_headers = question.query.filter_by(experiment_idexperiment=exp_id).all()
+    stimulus_headers = page.query.filter_by(experiment_idexperiment=exp_id).all()
+    
+
 
 
 
     pages = page.query.filter_by(experiment_idexperiment=exp_id).all()
+    questions = question.query.filter_by(experiment_idexperiment=exp_id).all()
     pages_and_questions = {}
 
     for p in pages:
         
-        questions = question.query.filter_by(experiment_idexperiment=exp_id).all()
-        questions_list = [(p.idpage, a.question) for a in questions]
+        questions_list = [(p.idpage, a.idquestion) for a in questions]
         pages_and_questions[p.idpage] = questions_list 
+
+
+
+        
+    #List of answers per participant in format question Stimulus ID/Question ID
+    #those are in answer table as page_idpage and question_idquestion respectively
+    
+    
+    
+    """
+    pages = page.query.filter_by(experiment_idexperiment=exp_id).all()
+    
+    participants_and_answers = {}
+    
+    #participants on kaikki expin osallistujat
+    for participant in participants:
+ 
+            
+        #kaikki yhden khn vastaukset ko experimentille koska answer_setin id matchaa answereiden kanssa
+             
+    
+        flash(participant.session)
+        for p in pages:
         
+            answers = answer.query.filter_by(answer_set_idanswer_set=participant.idanswer_set).all()
+            #kaikki yhden participantin vastaukset pagelle
+            answers_for_page = answer.query.filter(and_(answer.answer_set_idanswer_set==participant.idanswer_set, answer.page_idpage==p.idpage)).all()
+            
+            
+            for ans in answers:
+            
+                
+                
+                if ans.page_idpage == p.idpage:
+                
+                    #flash(ans.page_idpage)
+                    flash("X")
+                    
+                    
+                    
+                    
+                else:
+                    
+                    flash("NA")
+            
+            #pages on kaikki experimentin paget
+          
+                      
+            
+            for a in answers:
+
+                if p.idpage == a.page_idpage:
+                    flash("match")
+                
+                else:
+                    flash("no match")
+                 flash("participant:")
+                flash(participant.session)
+                flash("stimulus:")
+                flash(a.page_idpage)
+                flash("Kysymys")
+                flash(a.question_idquestion)
+                flash("vastaus:")
+                flash(a.answer)
+            
+                
+                
+                
+            #answers_list = (a.idanswer, a.question_idquestion, a.answer_set_idanswer_set, a.answer, a.page_idpage)
+
+            #participants_and_answers[participant.session] = answers_list 
+
+    
+            """
+    
+    participants_and_answers = {}
+    
+    for participant in participants:
+ 
+        answers = answer.query.filter_by(answer_set_idanswer_set=participant.idanswer_set).all()     
+        answers_list = [(a.idanswer, a.question_idquestion, a.answer_set_idanswer_set, a.answer, a.page_idpage) for a in answers]    
+        participants_and_answers[participant.session] = answers_list 
+    
+    
+
+    #Background question answers
         
     bg_questions = background_question.query.filter_by(experiment_idexperiment=exp_id).all()
     bg_answers_for_participants = {}
-    
+
     for participant in participants:
         
         bg_answers = background_question_answer.query.filter_by(answer_set_idanswer_set=participant.idanswer_set).all() 
         bg_answers_list = [(a.answer) for a in bg_answers] 
         bg_answers_for_participants[participant.session] = bg_answers_list 
      
-    
+
+    #started and finished ratings counters    
     started_ratings = answer_set.query.filter_by(experiment_idexperiment=exp_id).count()
+    experiment_page_count = page.query.filter_by(experiment_idexperiment=exp_id).count()
+    finished_ratings = answer_set.query.filter(and_(answer_set.answer_counter==experiment_page_count, answer_set.experiment_idexperiment==exp_id)).count()
     
     
     
-    return render_template('experiment_statistics.html', experiment_info=experiment_info, participants_and_answers=participants_and_answers, pages_and_questions=pages_and_questions, bg_questions=bg_questions, bg_answers_for_participants=bg_answers_for_participants, started_ratings=started_ratings)
+    return render_template('experiment_statistics.html', experiment_info=experiment_info, participants_and_answers=participants_and_answers, pages_and_questions=pages_and_questions, bg_questions=bg_questions, bg_answers_for_participants=bg_answers_for_participants, started_ratings=started_ratings, finished_ratings=finished_ratings, question_headers=question_headers, stimulus_headers=stimulus_headers)
 
 
 
@@ -572,7 +731,11 @@ def create_experiment():
 
     if request.method == 'POST' and form.validate():
         
-        new_exp = experiment(name=request.form['name'], instruction=request.form['instruction'], language=request.form['language'], status='Hidden', randomization='Off')
+        
+        the_time = datetime.now()
+        the_time = the_time.replace(microsecond=0)
+        
+        new_exp = experiment(name=request.form['name'], instruction=request.form['instruction'], language=request.form['language'], status='Hidden', randomization='Off', single_sentence_instruction=request.form['single_sentence_instruction'], short_instruction=request.form['short_instruction'], creator_name=request.form['creator_name'], is_archived='False', creation_time=the_time, stimulus_size='7', consent_text=request.form['consent_text'], use_forced_id='Off')
         db.session.add(new_exp)
         db.session.commit()        
         
@@ -671,27 +834,33 @@ def create_experiment_questions():
 
             list = str_list[a].split(';')
                      
-            #If there are the right amount of values for the slider input values
-            if len(list) == 3:
-                
-                #flash("Question:")
-                #flash(list[0])
-                #flash("Left:")
-                #flash(list[1])
-                #flash("Right:")
-                #flash(list[2])
-
-                add_question = question(experiment_idexperiment=exp_id, question=list[0], left=list[1], right=list[2])
-                db.session.add(add_question)
-                db.session.commit()
-           
-                    
-                #If slider has too many or too litlle parameters give an error and redirect back to input form
-            else:
+            #If there are the wrong amount of values for any of the the slider input values
+            #redirect back to the form
+            if len(list) != 3:
+                
+
                 flash("Error Each slider must have 3 parameters separated by ; Some slider has:")
                 flash(len(list))
                     
                 return redirect(url_for('create_experiment_questions', exp_id=exp_id))
+
+        #If all the slider inputs were of length 3 items
+        #we can input them to db
+        for a in range(len(str_list)): 
+
+            list = str_list[a].split(';')
+       
+            #flash("Question:")
+            #flash(list[0])
+            #flash("Left:")
+            #flash(list[1])
+            #flash("Right:")
+            #flash(list[2])
+
+            add_question = question(experiment_idexperiment=exp_id, question=list[0], left=list[1], right=list[2])
+            db.session.add(add_question)
+            db.session.commit()
+                    
         
         return redirect(url_for('create_experiment_upload_stimuli', exp_id=exp_id))    
 
@@ -788,7 +957,7 @@ def view_experiment():
     
     #crap:3lines
     exp_id = request.args.get('exp_id', None)
-    media = page.query.filter_by(experiment_idexperiment=exp_id).paginate(per_page=20, page=1, error_out=True)
+    media = page.query.filter_by(experiment_idexperiment=exp_id).all()
     mtype = page.query.filter_by(experiment_idexperiment=exp_id).first()
     
     #experiment info    
@@ -950,41 +1119,53 @@ def edit_question():
 def add_bg_question():
     
     exp_id = request.args.get('exp_id', None)
-    form = CreateBackgroundQuestionForm(request.form)
+    exp_status = experiment.query.filter_by(idexperiment=exp_id).first()
+
+    if exp_status.status == 'Public':
     
-    if request.method == 'POST' and form.validate():
-        
-        str = form.bg_questions_and_options.data
+        flash("Experiment is public. Cannot modify structure.")
 
-        #Split the form data into a list that separates questions followed by the corresponding options
-        str_list = str.split('/n')
+        return redirect(url_for('view_experiment', exp_id=exp_id))
+        
+    else:
 
-        #Iterate through the questions and options list
-        for a in range(len(str_list)):
         
-            #Split the list cells further into questions and options
-            list = str_list[a].split(';')
         
-            #Input the first item of the list as a question in db and the items followed by that as options for that question
-            for x in range(len(list)):
-            
-                if x == 0:
-                    #flash("Kysymys")
-                    #flash(list[x])
-                    add_bgquestion = background_question(background_question=list[x], experiment_idexperiment=exp_id)
-                    db.session.add(add_bgquestion)
-                    db.session.commit()
-
-                else:
-                    #flash("optio")
-                    #flash(list[x])
-                    add_bgq_option = background_question_option(background_question_idbackground_question=add_bgquestion.idbackground_question, option=list[x])
-                    db.session.add(add_bgq_option)
-                    db.session.commit()
+        form = CreateBackgroundQuestionForm(request.form)
         
-        return redirect(url_for('view_experiment', exp_id=exp_id))    
-
-    return render_template('add_bg_question.html', form=form)
+        if request.method == 'POST' and form.validate():
+            
+            str = form.bg_questions_and_options.data
+    
+            #Split the form data into a list that separates questions followed by the corresponding options
+            str_list = str.split('/n')
+    
+            #Iterate through the questions and options list
+            for a in range(len(str_list)):
+            
+                #Split the list cells further into questions and options
+                list = str_list[a].split(';')
+            
+                #Input the first item of the list as a question in db and the items followed by that as options for that question
+                for x in range(len(list)):
+                
+                    if x == 0:
+                        #flash("Kysymys")
+                        #flash(list[x])
+                        add_bgquestion = background_question(background_question=list[x], experiment_idexperiment=exp_id)
+                        db.session.add(add_bgquestion)
+                        db.session.commit()
+    
+                    else:
+                        #flash("optio")
+                        #flash(list[x])
+                        add_bgq_option = background_question_option(background_question_idbackground_question=add_bgquestion.idbackground_question, option=list[x])
+                        db.session.add(add_bgq_option)
+                        db.session.commit()
+            
+            return redirect(url_for('view_experiment', exp_id=exp_id))    
+    
+        return render_template('add_bg_question.html', form=form)
 
 
 
@@ -993,41 +1174,51 @@ def add_bg_question():
 def add_questions():
     
     exp_id = request.args.get('exp_id', None)
-    form = CreateQuestionForm(request.form)
-    
-    if request.method == 'POST' and form.validate():
-
-        str = form.questions_and_options.data
-        str_list = str.split('/n')
+    exp_status = experiment.query.filter_by(idexperiment=exp_id).first()
 
-        for a in range(len(str_list)): 
+    if exp_status.status == 'Public':
+    
+        flash("Experiment is public. Cannot modify structure.")
 
-            list = str_list[a].split(';')
-                     
-            #If there are the right amount of values for the slider input values
-            if len(list) == 3:
-                
-                #flash("Question:")
-                #flash(list[0])
-                #flash("Left:")
-                #flash(list[1])
-                #flash("Right:")
-                #flash(list[2])
-
-                add_question = question(experiment_idexperiment=exp_id, question=list[0], left=list[1], right=list[2])
-                db.session.add(add_question)
-                db.session.commit()
-                    
-                #If slider has too many or too litlle parameters give an error and redirect back to input form
-            else:
-                flash("Error Each slider must have 3 parameters separated by ; Some slider has:")
-                flash(len(list))
-                    
-                return redirect(url_for('create_experiment_questions', exp_id=exp_id))
+        return redirect(url_for('view_experiment', exp_id=exp_id))
         
-        return redirect(url_for('view_experiment', exp_id=exp_id))    
-
-    return render_template('add_questions.html', form=form)
+    else:
+    
+        form = CreateQuestionForm(request.form)
+        
+        if request.method == 'POST' and form.validate():
+    
+            str = form.questions_and_options.data
+            str_list = str.split('/n')
+    
+            for a in range(len(str_list)): 
+    
+                list = str_list[a].split(';')
+                         
+                #If there are the right amount of values for the slider input values
+                if len(list) == 3:
+                    
+                    #flash("Question:")
+                    #flash(list[0])
+                    #flash("Left:")
+                    #flash(list[1])
+                    #flash("Right:")
+                    #flash(list[2])
+    
+                    add_question = question(experiment_idexperiment=exp_id, question=list[0], left=list[1], right=list[2])
+                    db.session.add(add_question)
+                    db.session.commit()
+                        
+                    #If slider has too many or too litlle parameters give an error and redirect back to input form
+                else:
+                    flash("Error Each slider must have 3 parameters separated by ; Some slider has:")
+                    flash(len(list))
+                        
+                    return redirect(url_for('create_experiment_questions', exp_id=exp_id))
+            
+            return redirect(url_for('view_experiment', exp_id=exp_id))    
+    
+        return render_template('add_questions.html', form=form)
 
 
 
@@ -1039,22 +1230,35 @@ def add_questions():
 def remove_bg_question():
 
     exp_id = request.args.get('exp_id', None)
-    remove_id = request.args.get('idbackground_question', None)
-    
-    remove_options = background_question_option.query.filter_by(background_question_idbackground_question=remove_id).all()
+
+
+    exp_status = experiment.query.filter_by(idexperiment=exp_id).first()
+
+    if exp_status.status == 'Public':
     
-    for a in range(len(remove_options)): 
+        flash("Experiment is public. Cannot modify structure.")
+
+        return redirect(url_for('view_experiment', exp_id=exp_id))
+        
+    else:
         
-        #flash(remove_options[a].idbackground_question_option)
     
-        db.session.delete(remove_options[a])
-        db.session.commit()
-
+        remove_id = request.args.get('idbackground_question', None)
+        
+        remove_options = background_question_option.query.filter_by(background_question_idbackground_question=remove_id).all()
         
-    remove_question = background_question.query.filter_by(idbackground_question=remove_id).first()
+        for a in range(len(remove_options)): 
+            
+            #flash(remove_options[a].idbackground_question_option)
+        
+            db.session.delete(remove_options[a])
+            db.session.commit()
     
-    db.session.delete(remove_question)
-    db.session.commit()
+            
+        remove_question = background_question.query.filter_by(idbackground_question=remove_id).first()
+        
+        db.session.delete(remove_question)
+        db.session.commit()
   
     return redirect(url_for('view_experiment', exp_id=exp_id))
 
@@ -1066,12 +1270,22 @@ def remove_bg_question():
 def remove_question():
 
     exp_id = request.args.get('exp_id', None)
-    remove_id = request.args.get('idquestion', None)
-        
-    remove_question = question.query.filter_by(idquestion=remove_id).first()
+    exp_status = experiment.query.filter_by(idexperiment=exp_id).first()
+
+    if exp_status.status == 'Public':
     
-    db.session.delete(remove_question)
-    db.session.commit()
+        flash("Experiment is public. Cannot modify structure.")
+
+        return redirect(url_for('view_experiment', exp_id=exp_id))
+        
+    else:
+
+
+        remove_id = request.args.get('idquestion', None)
+        remove_question = question.query.filter_by(idquestion=remove_id).first()
+        
+        db.session.delete(remove_question)
+        db.session.commit()
   
     return redirect(url_for('view_experiment', exp_id=exp_id))
 
@@ -1081,121 +1295,153 @@ def remove_question():
 def remove_experiment():
 
     exp_id = request.args.get('exp_id', None)
+    exp_status = experiment.query.filter_by(idexperiment=exp_id).first()
+
+    if exp_status.status == 'Public':
     
-    form = RemoveExperimentForm(request.form)
-    
-    if request.method == 'POST' and form.validate():
+        flash("Experiment is public. Cannot modify structure.")
 
-        if form.remove.data == 'DELETE':
+        return redirect(url_for('view_experiment', exp_id=exp_id))
+        
+    else:
 
-            
-            #This removes all experiment data from the database!
-            
-            
-            #Tables
-            
-            #background_question_option & background_question & background question answers:
-            remove_background_question = background_question.query.filter_by(experiment_idexperiment=exp_id).all()
-            
-            #cycle through all bg questions and delete their options
-            for a in range(len(remove_background_question)):
-            
-                remove_background_question_option = background_question_option.query.filter_by(background_question_idbackground_question=remove_background_question[a].idbackground_question).all() 
-            
-                for b in range(len(remove_background_question_option)):
-                    
-                    db.session.delete(remove_background_question_option[b])
-                    db.session.commit()
-            
-            
-            #Remove all background questions and all answers given to each bg question
-            for a in range(len(remove_background_question)):
-                
-                remove_background_question_answers = background_question_answer.query.filter_by(background_question_idbackground_question=remove_background_question[a].idbackground_question).all()
+    
+    
+        form = RemoveExperimentForm(request.form)
+        
+        if request.method == 'POST' and form.validate():
+    
+            if form.remove.data == 'DELETE':
+    
                 
-                for b in range(len(remove_background_question_answers)):
-                    
-                    db.session.delete(remove_background_question_answers[b])
-                    db.session.commit()
+                #This removes all experiment data from the database!
                 
-                db.session.delete(remove_background_question[a])
-                db.session.commit()
                 
+                #Remove research bulletin if it exists
+                empty_filevariable = experiment.query.filter_by(idexperiment=exp_id).first()
+    
+                if empty_filevariable.research_notification_filename is not None:
+    
+                    target = os.path.join(APP_ROOT, empty_filevariable.research_notification_filename)
+                    
+                    if os.path.exists(target):                   
+                        os.remove(target)
+                
+                
+ 
+                
+                #Tables
+                
+                
+                remove_forced_id = forced_id.query.filter_by(experiment_idexperiment=exp_id).all()
+                
+                for b in range(len(remove_forced_id)):
+                    db.session.delete(remove_forced_id[b])
+                    db.session.commit()
 
-           
-            #Remove all questions and answers 
-            remove_question = question.query.filter_by(experiment_idexperiment=exp_id).all()
-           
-            for a in range(len(remove_question)):
                 
-                remove_question_answers = answer.query.filter_by(question_idquestion=remove_question[a].idquestion).all()
+                #background_question_option & background_question & background question answers:
+                remove_background_question = background_question.query.filter_by(experiment_idexperiment=exp_id).all()
                 
-                for b in range(len(remove_question_answers)):
+                #cycle through all bg questions and delete their options
+                for a in range(len(remove_background_question)):
+                
+                    remove_background_question_option = background_question_option.query.filter_by(background_question_idbackground_question=remove_background_question[a].idbackground_question).all() 
+                
+                    for b in range(len(remove_background_question_option)):
+                        
+                        db.session.delete(remove_background_question_option[b])
+                        db.session.commit()
+                
+                
+                #Remove all background questions and all answers given to each bg question
+                for a in range(len(remove_background_question)):
+                    
+                    remove_background_question_answers = background_question_answer.query.filter_by(background_question_idbackground_question=remove_background_question[a].idbackground_question).all()
                     
-                    db.session.delete(remove_question_answers[b])
+                    for b in range(len(remove_background_question_answers)):
+                        
+                        db.session.delete(remove_background_question_answers[b])
+                        db.session.commit()
+                    
+                    db.session.delete(remove_background_question[a])
                     db.session.commit()
-                
-                db.session.delete(remove_question[a])
-                db.session.commit()
-           
-           
-            #Remove all pages and datafiles
-            remove_pages = page.query.filter_by(experiment_idexperiment=exp_id).all()
-            
-            for a in range(len(remove_pages)):
-            
-                if remove_pages[a].type == 'text':
                     
+    
+               
+                #Remove all questions and answers 
+                remove_question = question.query.filter_by(experiment_idexperiment=exp_id).all()
+               
+                for a in range(len(remove_question)):
+                    
+                    remove_question_answers = answer.query.filter_by(question_idquestion=remove_question[a].idquestion).all()
+                    
+                    for b in range(len(remove_question_answers)):
+                        
+                        db.session.delete(remove_question_answers[b])
+                        db.session.commit()
+                    
+                    db.session.delete(remove_question[a])
+                    db.session.commit()
+               
+               
+                #Remove all pages and datafiles
+                remove_pages = page.query.filter_by(experiment_idexperiment=exp_id).all()
+                
+                for a in range(len(remove_pages)):
+                
+                    if remove_pages[a].type == 'text':
+                        
+                        db.session.delete(remove_pages[a])
+                        db.session.commit()
+                        
+                    else:
+                        
+                        target = os.path.join(APP_ROOT, remove_pages[a].media)
+    
+                        if os.path.exists(target):                   
+                            os.remove(target)
+        
+                    #Now that the files are removed we can delete the page
                     db.session.delete(remove_pages[a])
                     db.session.commit()
                     
-                else:
                     
-                    target = os.path.join(APP_ROOT, remove_pages[a].media)
-
-                    if os.path.exists(target):                   
-                        os.remove(target)
+                #Remove all answer_sets and trial_randomization orders
+                remove_answer_set = answer_set.query.filter_by(experiment_idexperiment=exp_id).all()
+                
+                for a in range(len(remove_answer_set)):
+                    
+                    remove_trial_randomizations = trial_randomization.query.filter_by(answer_set_idanswer_set=remove_answer_set[a].idanswer_set).all()
+                    
+                    for b in range(len(remove_trial_randomizations)):
+                        
+                        db.session.delete(remove_trial_randomizations[b])
+                        db.session.commit()
+                    
+                    db.session.delete(remove_answer_set[a])
+                    db.session.commit()
     
-                #Now that the files are removed we can delete the page
-                db.session.delete(remove_pages[a])
+                
+                #Remove experiment table
+                remove_experiment = experiment.query.filter_by(idexperiment=exp_id).first()
+                db.session.delete(remove_experiment)
                 db.session.commit()
                 
                 
-            #Remove all answer_sets and trial_randomization orders
-            remove_answer_set = answer_set.query.filter_by(experiment_idexperiment=exp_id).all()
-            
-            for a in range(len(remove_answer_set)):
+                flash("Experiment was removed from database!")
                 
-                remove_trial_randomizations = trial_randomization.query.filter_by(answer_set_idanswer_set=remove_answer_set[a].idanswer_set).all()
+                return redirect(url_for('index'))
                 
-                for b in range(len(remove_trial_randomizations)):
-                    
-                    db.session.delete(remove_trial_randomizations[b])
-                    db.session.commit()
+            else:
+                
+                flash("Experiment was not removed!")
+                
+                return redirect(url_for('view_experiment', exp_id=exp_id))
                 
-                db.session.delete(remove_answer_set[a])
-                db.session.commit()
-
-            
-            #Remove experiment table
-            remove_experiment = experiment.query.filter_by(idexperiment=exp_id).first()
-            db.session.delete(remove_experiment)
-            db.session.commit()
-            
-            
-            flash("Experiment was removed from database!")
-            
-            return redirect(url_for('index'))
-            
-        else:
-            
-            flash("Experiment was not removed!")
-            
-            return redirect(url_for('view_experiment', exp_id=exp_id))
-            
-
     
-    return render_template('remove_experiment.html', form=form, exp_id=exp_id)
+        
+        return render_template('remove_experiment.html', form=form, exp_id=exp_id)
 
 
 
@@ -1204,48 +1450,59 @@ def remove_experiment():
 def remove_page():
 
     exp_id = request.args.get('exp_id', None)
-    remove_id = request.args.get('idpage', None)
-    remove_page = page.query.filter_by(idpage=remove_id).first()
-    experiment_pages = page.query.filter_by(experiment_idexperiment=exp_id).all()
+    exp_status = experiment.query.filter_by(idexperiment=exp_id).first()
+
+    if exp_status.status == 'Public':
     
-    #if stimulustype is text, the stimulus itself is text on the database, other stimulus types are real files
-    #on the server and need to be deleted    
-    if remove_page.type != 'text':
+        flash("Experiment is public. Cannot modify structure.")
+
+        return redirect(url_for('view_experiment', exp_id=exp_id))
         
-        #helper variable
-        do_not_delete_file = 'False'
-            
-        #if the file to be deleted is in duplicate use of another page then we won't delete the file
-        for a in range(len(experiment_pages)):
+    else:
 
-            #flash("in da for")
+    
+        remove_id = request.args.get('idpage', None)
+        remove_page = page.query.filter_by(idpage=remove_id).first()
+        experiment_pages = page.query.filter_by(experiment_idexperiment=exp_id).all()
+        
+        #if stimulustype is text, the stimulus itself is text on the database, other stimulus types are real files
+        #on the server and need to be deleted    
+        if remove_page.type != 'text':
+            
+            #helper variable
+            do_not_delete_file = 'False'
                 
-            if experiment_pages[a].media == remove_page.media and experiment_pages[a].idpage != remove_page.idpage:
-
-                #flash("in da if")
-                do_not_delete_file = 'True'
-
-        #If no other page is using the file then lets remove it
-        if do_not_delete_file == 'False':
-            #remove old file            
-            target = os.path.join(APP_ROOT, remove_page.media)
-            #flash("Remove:")
-            #flash(target)
-            os.remove(target)
+            #if the file to be deleted is in duplicate use of another page then we won't delete the file
+            for a in range(len(experiment_pages)):
     
-        db.session.delete(remove_page)
-        db.session.commit()
-  
-        return redirect(url_for('view_experiment', exp_id=exp_id))
+                #flash("in da for")
+                    
+                if experiment_pages[a].media == remove_page.media and experiment_pages[a].idpage != remove_page.idpage:
     
-    if remove_page.type == 'text':
+                    #flash("in da if")
+                    do_not_delete_file = 'True'
+    
+            #If no other page is using the file then lets remove it
+            if do_not_delete_file == 'False':
+                #remove old file            
+                target = os.path.join(APP_ROOT, remove_page.media)
+                #flash("Remove:")
+                #flash(target)
+                os.remove(target)
         
-        db.session.delete(remove_page)
-        db.session.commit()
+            db.session.delete(remove_page)
+            db.session.commit()
+      
+            return redirect(url_for('view_experiment', exp_id=exp_id))
+        
+        if remove_page.type == 'text':
+            
+            db.session.delete(remove_page)
+            db.session.commit()
+            
+            return redirect(url_for('view_experiment', exp_id=exp_id))
         
         return redirect(url_for('view_experiment', exp_id=exp_id))
-    
-    return redirect(url_for('view_experiment', exp_id=exp_id))
 
 
 @app.route('/publish_experiment')
@@ -1316,6 +1573,96 @@ def disable_randomization():
     return redirect(url_for('view_experiment', exp_id=exp_id))
 
 
+@app.route('/enable_forced_id')
+@login_required
+def enable_forced_id():
+
+    exp_id = request.args.get('exp_id', None)
+        
+    enable_forced_id = experiment.query.filter_by(idexperiment = exp_id).first()
+    
+    enable_forced_id.use_forced_id = 'On'
+    
+    flash("Enabled forced ID login")
+    
+    db.session.commit()
+  
+    return redirect(url_for('view_experiment', exp_id=exp_id))
+
+
+@app.route('/disable_forced_id')
+@login_required
+def disable_forced_id():
+
+    exp_id = request.args.get('exp_id', None)
+        
+    disable_forced_id = experiment.query.filter_by(idexperiment = exp_id).first()
+    
+    disable_forced_id.use_forced_id = 'Off'
+    
+    flash("Disabled forced ID login")
+    
+    db.session.commit()
+  
+    return redirect(url_for('view_experiment', exp_id=exp_id))
+
+
+@app.route('/view_forced_id_list', methods=['GET', 'POST'])
+@login_required
+def view_forced_id_list():
+
+    exp_id = request.args.get('exp_id', None)
+    
+    id_list = forced_id.query.filter_by(experiment_idexperiment=exp_id).all()
+    
+    
+    form = GenerateIdForm(request.form)
+        
+    if request.method == 'POST' and form.validate():
+
+        
+        for i in range(int(request.form['number'])): 
+        
+            random_id = str(request.form['string']) + str(secrets.token_hex(3))
+            check_answer_set = answer_set.query.filter_by(session=random_id).first()
+            check_forced_id = forced_id.query.filter_by(pregenerated_id=random_id).first()
+            
+            
+            #here we check if the generated id is found from given answers from the whole database in answer_set table
+            #or from forced_id table. If so another id is generated instead to avoid a duplicate
+            if check_answer_set is not None or check_forced_id is not None:
+            
+                #flash("ID already existed; generated a new one")
+                random_id = secrets.token_hex(3)
+                check_answer_set = answer_set.query.filter_by(session=random_id).first()
+                check_forced_id = forced_id.query.filter_by(pregenerated_id=random_id).first()   
+                
+            input_id = forced_id(experiment_idexperiment=exp_id, pregenerated_id=random_id)
+            db.session.add(input_id)
+            db.session.commit()
+        
+
+        
+
+        return redirect(url_for('view_forced_id_list', exp_id=exp_id))
+    
+    
+    
+    
+    
+    
+  
+    return render_template('view_forced_id_list.html', exp_id=exp_id, id_list=id_list)
+
+
+
+
+
+
+
+
+
+
 @app.route('/edit_stimuli', methods=['GET', 'POST'])
 @login_required
 def edit_stimuli():
@@ -1395,79 +1742,194 @@ def edit_stimuli():
 def add_stimuli():
 
     exp_id = request.args.get('exp_id', None)
-    stimulus_type = request.args.get('stimulus_type', None)
-       
-    form = UploadStimuliForm(request.form)
+    
+    
+    exp_status = experiment.query.filter_by(idexperiment=exp_id).first()
 
-    if request.method == 'POST':
     
-        
-        if stimulus_type == 'text':
-        
-            #flash("db insert text")
-            
-            string = form.text.data
-            str_list = string.split('/n')
+    if exp_status.status == 'Public':
+    
+        flash("Experiment is public. Cannot modify structure.")
 
-            for a in range(len(str_list)):
+        return redirect(url_for('view_experiment', exp_id=exp_id))
+        
+    else:
 
-                #flash("lisättiin:")
-                #flash(str_list[a])
-                add_text_stimulus = page(experiment_idexperiment=exp_id, type='text', text=str_list[a], media='none')
-                db.session.add(add_text_stimulus)
-                db.session.commit()
 
-                #flash("Succes!")
-                
-            return redirect(url_for('view_experiment', exp_id=exp_id))  
-                
-                
+        #If there are no pages set for the experiment lets reroute user to create experiment stimuli upload instead
+    
+        is_there_any_stimuli = page.query.filter_by(experiment_idexperiment = exp_id).first()
+    
+        if is_there_any_stimuli is None:
         
-        else:
+            return redirect(url_for('create_experiment_upload_stimuli', exp_id=exp_id))
 
-            #Upload stimuli into /static/experiment_stimuli/exp_id folder
-            #Create the pages for the stimuli by inserting experiment_id, stimulus type, text and names of the stimulus files (as a path to the folder)
-            path = 'static/experiment_stimuli/' + str(exp_id)
-        
-            target = os.path.join(APP_ROOT, path)
-            #flash(target)
-            
-            if not os.path.isdir(target):
-                os.mkdir(target)
-                #flash("make dir")
         
         
-            #This returns a list of filenames: request.files.getlist("file")
+        stimulus_type = request.args.get('stimulus_type', None)
+           
+        form = UploadStimuliForm(request.form)
+    
+        if request.method == 'POST':
         
-            for file in request.files.getlist("file"):
             
-                #save files in the correct folder
-                #flash(file.filename)
-                filename = file.filename
-                destination = "/".join([target, filename])
-                #flash("destination")
-                #flash(destination)
-                file.save(destination)
-                
-                #add pages to the db
-                db_path = path +  str('/') + str(filename)
-                
-                #flash("db path")
-                #flash(db_path)
+            if stimulus_type == 'text':
+            
+                #flash("db insert text")
                 
-                new_page = page(experiment_idexperiment=exp_id, type=form.type.data, media=db_path)
+                string = form.text.data
+                str_list = string.split('/n')
+    
+                for a in range(len(str_list)):
+    
+                    #flash("lisättiin:")
+                    #flash(str_list[a])
+                    add_text_stimulus = page(experiment_idexperiment=exp_id, type='text', text=str_list[a], media='none')
+                    db.session.add(add_text_stimulus)
+                    db.session.commit()
+    
+                    #flash("Succes!")
+                    
+                return redirect(url_for('view_experiment', exp_id=exp_id))  
+                    
+                    
+            
+            else:
+    
+                #Upload stimuli into /static/experiment_stimuli/exp_id folder
+                #Create the pages for the stimuli by inserting experiment_id, stimulus type, text and names of the stimulus files (as a path to the folder)
+                path = 'static/experiment_stimuli/' + str(exp_id)
+            
+                target = os.path.join(APP_ROOT, path)
+                #flash(target)
                 
-                db.session.add(new_page)
-                db.session.commit()
+                if not os.path.isdir(target):
+                    os.mkdir(target)
+                    #flash("make dir")
+            
+            
+                #This returns a list of filenames: request.files.getlist("file")
+            
+                for file in request.files.getlist("file"):
                 
-                #flash("Succes!")
+                    #save files in the correct folder
+                    #flash(file.filename)
+                    filename = file.filename
+                    destination = "/".join([target, filename])
+                    #flash("destination")
+                    #flash(destination)
+                    file.save(destination)
+                    
+                    #add pages to the db
+                    db_path = path +  str('/') + str(filename)
+                    
+                    #flash("db path")
+                    #flash(db_path)
+                    
+                    new_page = page(experiment_idexperiment=exp_id, type=form.type.data, media=db_path)
+                    
+                    db.session.add(new_page)
+                    db.session.commit()
+                    
+                    #flash("Succes!")
+                    
+                return redirect(url_for('view_experiment', exp_id=exp_id))
                 
             return redirect(url_for('view_experiment', exp_id=exp_id))
             
-        return redirect(url_for('view_experiment', exp_id=exp_id))
+      
+        return render_template('add_stimuli.html', form=form, stimulus_type=stimulus_type)
+
+
+
+@app.route('/upload_research_notification', methods=['GET', 'POST'])
+@login_required
+def upload_research_notification():
+    
+    exp_id = request.args.get('exp_id', None)
+    
+    form = UploadResearchBulletinForm(request.form)
+    
+    if request.method == 'POST':
+
+        path = 'static/experiment_stimuli/' + str(exp_id)
+            
+        target = os.path.join(APP_ROOT, path)
+        #flash(target)
+                
+        if not os.path.isdir(target):
+            os.mkdir(target)
+            #flash("make dir")
+            
+            
+        #This returns a list of filenames: request.files.getlist("file")
+    
+        for file in request.files.getlist("file"):
         
-  
-    return render_template('add_stimuli.html', form=form, stimulus_type=stimulus_type)
+            #save files in the correct folder
+            #flash(file.filename)
+            filename = file.filename
+            destination = "/".join([target, filename])
+            #flash("destination")
+            #flash(destination)
+            file.save(destination)
+            
+            #add pages to the db
+            db_path = path +  str('/') + str(filename)
+            
+            #flash("db path")
+            #flash(db_path)
+            
+            
+            bulletin = experiment.query.filter_by(idexperiment=exp_id).first()
+            
+            bulletin.research_notification_filename = db_path
+            db.session.commit()
+            
+            #flash("Succes!")
+            
+        return redirect(url_for('view_experiment', exp_id=exp_id))
+
+    
+    return render_template('upload_research_notification.html', exp_id=exp_id, form=form)
+
+
+@app.route('/remove_research_notification')
+@login_required
+def remove_research_notification():
+    
+    exp_id = request.args.get('exp_id', None)
+    
+    empty_filevariable = experiment.query.filter_by(idexperiment=exp_id).first()
+    
+    target = os.path.join(APP_ROOT, empty_filevariable.research_notification_filename)
+    
+    if os.path.exists(target):                   
+        os.remove(target)
+ 
+    
+    empty_filevariable.research_notification_filename = None
+    
+    db.session.commit()
+    
+    return redirect(url_for('view_experiment', exp_id=exp_id))
+
+
+
+@app.route('/view_research_notification')
+@login_required
+def view_research_notification():
+    
+    exp_id = request.args.get('exp_id', None)
+    image = experiment.query.filter_by(idexperiment=exp_id).first()
+    
+    research_notification_filename = image.research_notification_filename
+    
+    return render_template('view_research_notification.html', research_notification_filename=research_notification_filename)
+
+
+
+
 
 
 @app.route('/download_csv')
@@ -1497,3 +1959,18 @@ def researcher_info():
   
     return render_template('researcher_info.html')
 
+
+
+
+
+#TEST PAGE
+    
+@app.route('/test_page')
+def test_page():
+
+    flash('Please log in to access this page.')
+    
+    session.clear()
+  
+    return render_template('test_page.html')
+
diff --git a/app/static/css/custom.css b/app/static/css/custom.css
index 2389230..407f953 100644
--- a/app/static/css/custom.css
+++ b/app/static/css/custom.css
@@ -1,7 +1,5 @@
-.btn {
-	border-radius: 0px;
-}
-.navbar-custom{
-    background-color:red;
-    border-color: green;
-}
+body{
+
+background-color: #000000;
+
+}
\ No newline at end of file
diff --git a/app/static/css/slider.css b/app/static/css/slider.css
new file mode 100644
index 0000000..7cfc2e6
--- /dev/null
+++ b/app/static/css/slider.css
@@ -0,0 +1,6 @@
+input[type='range'] {
+    -webkit-appearance: none;
+    height: 50px;
+
+    
+}
diff --git a/app/templates/add_stimuli.html b/app/templates/add_stimuli.html
index f8617a1..334ce1f 100644
--- a/app/templates/add_stimuli.html
+++ b/app/templates/add_stimuli.html
@@ -10,18 +10,33 @@
     <legend>Paste the new texts to the textarea and mark the end of each stimulus with a /n. Do not place the marker at the end of the last text. Example: Text1/n Text2/n Text3</legend>
     <textarea class="form-control" rows="10" id="text" name="text"></textarea>
     </div>
-  {% else %}
+  {% endif %}
+  {% if stimulus_type == 'video' or stimulus_type == 'audio' or stimulus_type == 'picture'  %}
     <div class="input-group mb-3">
     <legend>Add files:</legend>
     <div class="input-group-prepend">
     <span class="input-group-text">Upload:</span>
     </div>
     <div class="custom-file">
-    <input type="file" class="custom-file-input" id="file" name="file" accept="audio/*,video/*,image/*" multiple> 
+    <input type="file" class="custom-file-input" id="file" name="file" accept="audio/*,image/*, .mp4" multiple> 
     <label class="custom-file-label" for="upload_file">Choose file</label>
     </div>
     </div>
-  {% endif %}    
+  {% endif %}
+  
+  
+  
+
+  
+  
+  
+  
+  
+  
+  
+  
+  
+   
    <br>  
    <button type="submit" class="btn btn-primary">Submit</button>
    <a class="btn btn-primary" href="{{ request.referrer }}" role="button">Cancel</a>
diff --git a/app/templates/admin_dryrun.html b/app/templates/admin_dryrun.html
new file mode 100644
index 0000000..2ee0d1e
--- /dev/null
+++ b/app/templates/admin_dryrun.html
@@ -0,0 +1,29 @@
+{% extends "base.html" %}
+{% block content %}
+      
+
+<div class="container text-center">
+<div class="row mt-5 display-4"><br></div>
+
+<h1 class="mt-5 display-4"><br>Run experiment with any ID:</h1><br>
+<br>
+
+<h3 class="display-5 text-center text-danger"> Notice!</h3>
+<div class="lead text-center">You can use any login name for a testrun that is not currently in database for this experiment.</div>
+
+<br><br>
+    <form action="" method="post">
+        {{ form.hidden_tag() }}
+        <p>
+            {{ form.participant_id(size=32) }}<br>
+            {% for error in form.participant_id.errors %}
+            <span style="color: red;">[{{ error }}]</span>
+            {% endfor %}
+        </p>
+        <p>{{ form.submit() }}</p>
+
+    </form>
+</div>
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/templates/base.html b/app/templates/base.html
index 3675532..a1fb514 100644
--- a/app/templates/base.html
+++ b/app/templates/base.html
@@ -2,7 +2,7 @@
 {% import "bootstrap/wtf.html" as wtf %}
 
 <!doctype html>
-<html lang="en">
+<html>
   <head>
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
@@ -12,22 +12,24 @@
     <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
     <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js" integrity="sha384-smHYKdLADwkXOn1EmN1qk/HfnUcbVRZyYmZ4qpPea6sjB/pTJ0euyQp0Mk8ck+5T" crossorigin="anonymous"></script>
-    <title>Mega-fMRI Stimulus Rating Tool</title>
+    <title>Onni</title>
 
     <!-- Bootstrap core CSS -->
     <link href="../../dist/css/bootstrap.min.css" rel="stylesheet">
     
     <!-- Custom styles for this template -->
-    <link href="sticky-footer-navbar.css" rel="stylesheet">
+    
+    <link href="/static/css/slider.css" rel="stylesheet">
+    
   </head>
   <body>
     <header>
 <!-- Navigation -->
-<nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top">
+<nav class="navbar navbar-expand navbar-dark bg-dark fixed-top">
   <div class="col navbar-brand">
       <img src="/static/img/madam-300x250.jpg" alt="Logo" style="width:70px;">
         {% if pages %}  
-            <a class="navbar-brand pl-5 font-weight-light">Participant ID: <span class="text-success font-weight-bold">{{ session['user']}}</span></a>
+            <a class="navbar-brand pl-5 font-weight-light"><span class="text-success font-weight-bold">{{ session['user']}}</span></a>
         {% else %}
         
             
@@ -36,9 +38,9 @@
             
         {% endif %}
     </div>
-    <div class="col-6 navbar-nav">
+    <div class="navbar-nav w-50">
         {% if pages %}    
-            <div class="progress-bar bg-success progress-bar-striped" role="progressbar" style="width: {{ progress_bar_percentage }}%" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">Task progress: {{   progress_bar_percentage }}%</div>
+            <div class="progress-bar bg-success progress-bar-striped" role="progressbar" style="width: {{ progress_bar_percentage }}%" aria-valuemin="0" aria-valuemax="100">{{ _('Task progress:') }} {{   progress_bar_percentage }}%</div>
         {% endif %}        
     </div>
             <div class="col text-success text-right">
@@ -52,7 +54,6 @@
                     {% endwith %}
                   {% endblock %}
                   {% if current_user.is_authenticated %}
-                  <a class="nav-item" href="{{ url_for('researcher_info') }}" class="nav-link">Info |</a>
 
 
 
@@ -62,16 +63,17 @@
         </a>
         <div class="dropdown-menu" aria-labelledby="navbarDropdown">
           
-          <a class="dropdown-item" href="{{ url_for('set_language', language='Finnish') }}">Finnish</a>
-          <a class="dropdown-item" href="{{ url_for('set_language', language='English') }}">English</a>
-          <a class="dropdown-item" href="{{ url_for('set_language', language='Persian') }}">Persian</a>
-          <a class="dropdown-item" href="{{ url_for('set_language', language='Greek') }}">Greek</a>
-          <a class="dropdown-item" href="{{ url_for('set_language', language='Italian') }}">Italian</a>
-          <a class="dropdown-item" href="{{ url_for('set_language', language='Chinese') }}">Chinese</a>
-          <a class="dropdown-item" href="{{ url_for('set_language', language='All') }}">Show all languages</a>
+          <a class="dropdown-item" href="{{ url_for('set_language', language='Finnish', lang='fi') }}">Finnish</a>
+          <a class="dropdown-item" href="{{ url_for('set_language', language='English', lang='en') }}">English</a>
+          <a class="dropdown-item" href="{{ url_for('set_language', language='Persian', lang='fa') }}">Persian</a>
+          <a class="dropdown-item" href="{{ url_for('set_language', language='Greek',   lang='el') }}">Greek</a>
+          <a class="dropdown-item" href="{{ url_for('set_language', language='Italian', lang='it') }}">Italian</a>
+          <a class="dropdown-item" href="{{ url_for('set_language', language='Chinese', lang='zh') }}">Chinese</a>
+          <a class="dropdown-item" href="{{ url_for('set_language', language='All') }}">Show all experiments</a>
         </div>
-
-         <a class="nav-item" href="{{ url_for('create_experiment') }}" class="nav-link">| Create experiment |</a>
+         <a class="nav-item" href="{{ url_for('researcher_info') }}" class="nav-link">| Info |</a>
+         <a class="nav-item" href="{{ url_for('create_experiment') }}" class="nav-link">Create |</a>
+         <a class="nav-item" href="" class="nav-link">Archives |</a>
 
                   {% endif %}
                 {% if current_user.is_anonymous %}
@@ -83,13 +85,13 @@
         </a>
         <div class="dropdown-menu" aria-labelledby="navbarDropdown">
           
-          <a class="dropdown-item" href="{{ url_for('set_language', language='Finnish') }}">Finnish</a>
-          <a class="dropdown-item" href="{{ url_for('set_language', language='English') }}">English</a>
-          <a class="dropdown-item" href="{{ url_for('set_language', language='Persian') }}">Persian</a>
-          <a class="dropdown-item" href="{{ url_for('set_language', language='Greek') }}">Greek</a>
-          <a class="dropdown-item" href="{{ url_for('set_language', language='Italian') }}">Italian</a>
-          <a class="dropdown-item" href="{{ url_for('set_language', language='Chinese') }}">Chinese</a>
-          <a class="dropdown-item" href="{{ url_for('set_language', language='All') }}">Show all languages</a>
+          <a class="dropdown-item" href="{{ url_for('set_language', language='Finnish', lang='fi') }}">Finnish</a>
+          <a class="dropdown-item" href="{{ url_for('set_language', language='English', lang='en') }}">English</a>
+          <a class="dropdown-item" href="{{ url_for('set_language', language='Persian', lang='fa') }}">Persian</a>
+          <a class="dropdown-item" href="{{ url_for('set_language', language='Greek',   lang='el') }}">Greek</a>
+          <a class="dropdown-item" href="{{ url_for('set_language', language='Italian', lang='it') }}">Italian</a>
+          <a class="dropdown-item" href="{{ url_for('set_language', language='Chinese', lang='zh') }}">Chinese</a>
+          <a class="dropdown-item" href="{{ url_for('set_language', language='All') }}">Show all experiments</a>
         </div>
                 
                 
diff --git a/app/templates/begin_with_id.html b/app/templates/begin_with_id.html
index 3e9bb98..541a2e1 100644
--- a/app/templates/begin_with_id.html
+++ b/app/templates/begin_with_id.html
@@ -5,11 +5,14 @@
 <div class="container text-center">
 <div class="row mt-5 display-4"><br></div>
 
-<h1 class="mt-5 display-4"><br>Please insert your ID-code below:</h1><br>
+<h1 class="mt-5 display-4"><br>{{ _('Please insert your ID-code below:') }}</h1><br>
+
 <br>
 
-<h3 class="display-5 text-center text-danger"> Notice!</h3>
-<div class="row lead">This login is meant only for participants who have received an identification code from a researcher to be used in the rating task. If you have not received such please return to the previous page and select the "Begin task" function instead.</div>
+<h3 class="display-5 text-center text-danger">{{ _('Notice!') }}</h3>
+<div class="lead text-center">{{ _('Participation in this experiment requires a login with a predetermined ID code. Please input ID below.') }}</div>
+
+
 
 <br><br>
     <form action="" method="post">
diff --git a/app/templates/consent.html b/app/templates/consent.html
index c6b5b6a..58eaec3 100644
--- a/app/templates/consent.html
+++ b/app/templates/consent.html
@@ -1,22 +1,24 @@
 {% extends "base.html" %}
 {% block content %}
+
+
       
-<h1 class="row mt-5 display-4"><br>This is the consent page for experiment ID: {{ exp_id }}</h1>
+<h1 class="container mt-5 display-4"><br> {{ experiment_info.name }}</h1>
+<br>
+<p class="lead">{{ experiment_info.short_instruction }}</p>
 <br>
-<h4>Lue tutkimustiedote <a href="tiedote.pdf">t&auml;st&auml;.</a></h4>
-<br/>
-<p class="lead">Prior to giving the consent I have read and understood the Experiment/ Research Bulletin I received, and I have received sufficient information about the course of the experiment. I have been clarified that the experiment data collected from me will be treated confidentially in such way that my identity can not be identified. I understand that my participation in the study is completely voluntary and that I can stop the experiment at any stage of the experiment without giving any reason. Furthermore, I have been clarified that I will receive further information about the general principles and the progress of the experiment from the researcher mentioned at the Experiment/ Research Bulletin, if I wish to do so. I understand that the data is collected only for purposes of the scientific research and it is not even partially disclosed to the participant himself/ herself and that my IP address or other identifying information will not be saved.
 
-</p>
-<p class="lead">By clicking on the button below, I give my consent to the collection and processing of the data in this experiment, as described in the Experiment/ Research Bulletin.
+<h3>{{ _('Consent for participation:') }}</h3>
 
-</p>
-<p class="lead">Of this electronical consent, there will be a digital entry saved in the files of the researcher responsible for the experiment.
+{% if experiment_info.research_notification_filename  %}
+<h5> {{ _('Research bulletin can be read') }}  <a href="{{ url_for('view_research_notification', exp_id=experiment_info.idexperiment) }}">{{ _('here.') }}</a></h5>
+{% endif %}
 
-</p>    
-<p>
- <a class="btn btn-primary" href="{{ url_for('participant_session', exp_id=exp_id, agree='true') }}" role="button">Agree</a>
- <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal">Disagree</button>
+<p class="lead"> {{ experiment_info.consent_text }} </p>
+
+
+ <a class="btn btn-primary" href="{{ url_for('participant_session', exp_id=exp_id, agree='true') }}" role="button">{{ _('Agree') }}</a>
+ <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal">{{ _('Disagree') }}</button>
           <!-- Modal -->
           <div class="modal fade" id="myModal" role="dialog">
             <div class="modal-dialog modal-dialog-centered">
@@ -24,19 +26,20 @@
               <div class="modal-content modal-dialog-centered">
                 <div class="modal-header">
                   <button type="button" class="close" data-dismiss="modal">&times;</button>
-                  <h4 class="modal-title">Notice!</h4>
+                  <h4 class="modal-title">{{ _('Notice!') }}</h4>
                 </div>
                 <div class="modal-body">
-                  <p>In order to participate for the study you need to agree with the terms presented.</p>
+                  <p>{{ _('In order to participate for the study you need to agree with the terms presented.') }}</p>
                 </div>
                 <div class="modal-footer">
-                  <button type="button" class="btn btn-default" data-dismiss="modal">Close Notice</button>
-                  <a class="btn btn-primary" href="/" role="button">Return Home</a>
+                  <button type="button" class="btn btn-default" data-dismiss="modal">{{ _('Close Notice') }}</button>
+                  <a class="btn btn-primary" href="/" role="button">{{ _('Return Home') }}</a>
                 </div>
               </div>
             </div>
           </div>
 
+
 {% endblock %}
 
 
diff --git a/app/templates/continue_task.html b/app/templates/continue_task.html
index ad2084d..7fb5d78 100644
--- a/app/templates/continue_task.html
+++ b/app/templates/continue_task.html
@@ -6,7 +6,9 @@
 <div class="row mt-5 display-4"><br></div>
 <br>
 
-<h1 class="mt-5 display-4"><br>Please insert your participant ID:</h1><br>
+<h1 class="mt-5 display-4"><br>{{ _('Please insert your participant ID:') }}</h1><br>
+
+
     <form action="" method="post">
         {{ form.hidden_tag() }}
         <p>
diff --git a/app/templates/create_experiment.html b/app/templates/create_experiment.html
index 97c3275..2243a53 100644
--- a/app/templates/create_experiment.html
+++ b/app/templates/create_experiment.html
@@ -11,15 +11,15 @@
     <div class="col-12">
       <form  action="" method="post" role="form">
         <div class="form-group">
-          <label for="name">Experiment name:</label>
-          <input required type="text" class="form-control" id="name" name="name" placeholder="Name?">
+          <label for="name">Your name:</label>
+          <input required type="text" class="form-control" id="creator_name" name="creator_name" placeholder="Creator name?">
+            <br>
+          <label for="name">Name of the experiment:</label>
+          <input required type="text" class="form-control" id="name" name="name" placeholder="Experiment name?">
             <br>
-          <label for="instruction">Instructions:</label>
-          <input required type="text" class="form-control" id="instruction" name="instruction" placeholder="Instructions?">
-	    <br>
 
   <div class="form-group">
-  <label for="language">Language:</label>
+  <label for="language">Select a language for the experiment:</label>
   <select class="form-control" id="language" name="language">
   <option disabled selected value></option>
   <option value="Afrikanns">Afrikanns</option>
@@ -95,8 +95,35 @@
   <option value="Welsh">Welsh</option>
   <option value="Xhosa">Xhosa</option>
   </select>
-  </div>
-	</div>
+
+<br>
+  <p>Instructions for the experiment come in three forms:
+  <br> (1) A single sentence instruction that is shown during the rating task above the sliders.
+  <br> (2) A short general description of the task that is shown on the experiment listing on Onni's front page and on the informed consent page. 
+  <br> (3) a longer detailed explanation of the instructions that is shown to the participant after the consent and before the rating task begins. 
+  <br> Please input all three types of instructions below:
+  </p>
+
+          <label for="single_sentence_instruction">(1) Single sentence:</label>
+          <input required type="text" class="form-control" id="single_sentence_instruction" name="single_sentence_instruction" placeholder="Input here" required>
+      	    <br>
+        <label for="short_instruction">(2) Short description:</label>
+          <textarea class="form-control" rows="5" id="short_instruction" name="short_instruction" placeholder="Input here" required></textarea>
+            <br>
+
+
+        <label for="instruction">(3) Longer version:</label>
+          <textarea class="form-control" rows="15" id="instruction" name="instruction" placeholder="Input here" required></textarea>
+            <br>
+
+
+        <label for="instruction">Please input consent form text</label>
+          <textarea class="form-control" rows="15" id="consent_text" name="consent_text" placeholder="Input here" required></textarea>
+            <br>
+
+
+      </div>
+    	</div>
         <br>													   
           <button type="submit" class="btn btn-primary">Submit</button>
       </form>
diff --git a/app/templates/create_experiment_questions.html b/app/templates/create_experiment_questions.html
index a3401e8..8e990cf 100644
--- a/app/templates/create_experiment_questions.html
+++ b/app/templates/create_experiment_questions.html
@@ -5,7 +5,7 @@
       <h1 class="container mt-5 display-4 text-center"><br>Create new experiment: (3/4)</h1>
       <br>
       <p class="lead">Please paste the slider set questions followed by the left and right ends of the scales separated with a ; Place a /n after the right scale to input another question
-      followed by the corresponding scales. Make sure you do not input the /n after the last question.
+      followed by the corresponding scales. Make sure you do not input the /n after the last question!
       
       <br>
       <br>
@@ -25,7 +25,7 @@
 
 <form  action="" method="post" role="form">
 <div class="form-group">
-  <label for="questions_and_options">Question;left scale;right scale/n</label>
+  <label for="questions_and_options">(NOTE! Do not input /n after the last right scale)</label>
   <textarea class="form-control" rows="15" id="questions_and_options" name="questions_and_options"></textarea>
 </div>
 <button type="submit" class="btn btn-primary">Submit</button>
diff --git a/app/templates/create_experiment_upload_stimuli.html b/app/templates/create_experiment_upload_stimuli.html
index c718d5f..979ed4a 100644
--- a/app/templates/create_experiment_upload_stimuli.html
+++ b/app/templates/create_experiment_upload_stimuli.html
@@ -44,10 +44,6 @@
     </div>
   </fieldset>
 
-
-
-
-
     <div class="form-group">
     <legend>2. Use this box to upload text stimuli:</legend>
       <label for="text_stimulus font-weight-bold">Example: text1 /n text2 /n text3</label>
@@ -62,7 +58,7 @@
     <span class="input-group-text">Upload:</span>
   </div>
   <div class="custom-file">
-    <input type="file" class="custom-file-input" id="file" name="file" accept="audio/*,video/*,image/*" multiple> 
+    <input type="file" class="custom-file-input" id="file" name="file" accept="audio/*,image/*, .mp4" multiple> 
     <label class="custom-file-label" for="upload_file">Choose file</label>
   </div>
 </div>
diff --git a/app/templates/edit_experiment.html b/app/templates/edit_experiment.html
index 8815f36..daac537 100644
--- a/app/templates/edit_experiment.html
+++ b/app/templates/edit_experiment.html
@@ -20,10 +20,27 @@
           <label for="Name">Name:</label>
           <input type="text" class="form-control" id="name" name="name" placeholder={{ form.name }}
             <br>
-          <label for="Instruction">Instructions:</label>
-          <input required type="text" class="form-control" id="instruction" name="instruction" placeholder= {{ form.instruction }}
+          <label for="Name">Creator:</label>
+          <input type="text" class="form-control" id="creator_name" name="creator_name" placeholder={{ form.creator_name }}
+            <br>
+          <label for="Instruction">Single sentence instruction:</label>
+          <input required type="text" class="form-control" id="instruction" name="single_sentence_instruction" placeholder= {{ form.single_sentence_instruction }}
+	    <br>
+          <label for="Instruction">Short description:</label>
+          <textarea required class="form-control" rows="5" id="short_instruction" name="short_instruction" placeholder= {{ form.short_instruction }} </textarea>
+	    <br>
+
+          <label for="Instruction">Long instructions:</label>
+          <textarea required class="form-control" rows="10" id="instruction" name="instruction" placeholder={{ form.instruction }} </textarea>
 	    <br>
+
+          <label for="Consent_form_text">Consent form text:</label>
+          <textarea required class="form-control" rows="10" id="consent_text" name="consent_text" placeholder={{ form.consent_text }} </textarea>
+	    <br>
+
+
 	   {{ render_field(form.language) }}
+	   {{ render_field(form.stimulus_size) }} <p>Note. When sizing text stimuli the size changes only in increments of 2 of this variable. 
    	</div>
         <br>													   
           <button type="submit" class="btn btn-primary">Update</button>
diff --git a/app/templates/experiment_statistics.html b/app/templates/experiment_statistics.html
index 45fe3c5..d5c7b64 100644
--- a/app/templates/experiment_statistics.html
+++ b/app/templates/experiment_statistics.html
@@ -35,7 +35,7 @@
     </tr>
     <tr>
       <td>Number of finished ratings:</td>
-      <td>??</td>
+      <td>{{ finished_ratings }}</td>
     </tr>
     <tr>
     <td><a class="btn btn-primary btn-info" href="{{ url_for('download_csv', exp_id=exp.idexperiment) }}" role="button">Export results (csv)</a></td>
@@ -46,18 +46,90 @@
 
 {% endfor %}
 
-<h1 class="container mt-5 display-4 text-left"><br>Rating task values:</h1>
+
+
+<h1 class="container mt-5 display-4 text-left"><br>Rating task question headers:</h1>
+<br>
+<table class="table">
+  <thead>
+    <tr>
+    <th scope="col" nowrap>Question ID:</td>
+    <th scope="col" nowrap>Question:</th>
+    <th scope="col" nowrap>Left scale</th>
+    <th scope="col" nowrap>Right scale</th>
+    </tr>
+  </thead>
+  <tbody>
+    {% for q in question_headers %}    
+    <tr>
+    <td>{{ q.idquestion }}</td>
+    <td>{{ q.question }}</td>
+    <td>{{ q.left }}</td>
+    <td>{{ q.right }}</td>
+    </tr>
+    {% endfor %}    
+  </tbody>
+</table>
+
+<h1 class="container mt-5 display-4 text-left"><br>Rating task stimulus headers:</h1>
+<br>
+<table class="table">
+  <thead>
+    <tr>
+    <th scope="col" nowrap>Stimulus ID:</td>
+    <th scope="col" nowrap>Stimulus:</th>
+    </tr>
+  </thead>
+  <tbody>
+    {% for s in stimulus_headers %}    
+    <tr>
+    <td>{{ s.idpage }}</td>
+    {% if s.type == 'text' %}
+    <td>{{ s.text }}</td>
+    {% else %}
+    <td>{{ s.media }}</td>
+    {% endif %}
+
+    </tr>
+    {% endfor %}    
+  </tbody>
+</table>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h1 class="container mt-5 display-4 text-left"><br>Rating task values: (Stimulus ID/Question ID)</h1>
 <br>
 
 
 <table class="table">
   <thead>
+      
     <tr>
-     <th scope="col" nowrap>Page ID/Question:</td>
+     <th scope="col" nowrap>Participant ID:</th>
      {% for page in pages_and_questions %}
      
             {% for p in pages_and_questions[page] %}
-             <th scope="col" nowrap>{{ p[0]}} / {{ p[1]}}  </th>
+             <th scope="col" nowrap>{{ p[0]}}/{{ p[1]}}</th>
             {% endfor %}
 
      {% endfor %}
@@ -68,7 +140,7 @@
     <tr>
         <td>{{ participant }}</td>
         {% for answer in participants_and_answers[participant] %}
-            <td align="center">{{ answer[3] }}</td>
+            <td>{{ answer[3] }}</td>
         {% endfor %}
     </tr>
     {% endfor %}
diff --git a/app/templates/index.html b/app/templates/index.html
index 5aa7c8c..aa611a6 100644
--- a/app/templates/index.html
+++ b/app/templates/index.html
@@ -2,50 +2,53 @@
 {% block content %}
   
         
+        
       <h1 class="container mt-5 display-4 text-center"><br>{{ _('Welcome to Onni') }}</h1>
         <br>
         <br>
-      <p class="lead text-center">This is the Human Emotion Systems laboratorys stimulus rating tool. If you have previously started a rating task you can continue that task on this page. If you are a researcher you can create new rating tasks by <a href="{{ url_for('login') }}">logging in.</a>
-      Or you can start a new rating task and start rating by selecting a task from the database list below.
+      <p class="lead text-center">{{ _('This is the Human Emotion Systems laboratorys stimulus rating tool. If you have previously started a rating task you can continue that task on this page. If you are a researcher you can create new rating tasks by logging in. Or you can start a new rating task and start rating by selecting a task from the database list below.') }}</p>
       <br>
       <br>
-      You can choose the language suitable for you from the language menu in the upper right corner
+      
+      <p class="lead text-center">{{ _('You can choose the language suitable for you from the language menu in the upper right corner') }}</p>
+      
       </p>
         <div class="row">
             <div class="col mt-5">
-                <h3>List of experiments in database:</h3>
+                <h3>{{ _('List of experiments in database:') }}</h3>
                     {% block attributes %}
                     {% for exp in experiments %}
                         
                     {% if exp.status == 'Public' and session['language'] == exp.language %}
                     
                      <ul class="list-group mb-4">
-                         <li class="list-group-item active"><span class="font-weight-bold">Name:</span> {{ exp.name }} </li>
-                         <li class="list-group-item"><span class="font-weight-bold">Instruction:</span> {{ exp.instruction }}</li>
+                         <li class="list-group-item active"><span class="font-weight-bold">{{ _('Name:') }}</span> {{ exp.name }} </li>
+                         <li class="list-group-item"><span class="font-weight-bold">{{ _('Instruction:') }}</span> {{ exp.short_instruction }}</li>
                         {% if current_user.is_authenticated %}
                         <li class="list-group-item"><span class="font-weight-bold">ID number:</span> {{ exp.idexperiment }} </li>
                         <li class="list-group-item"><span class="font-weight-bold">Language:</span> {{ exp.language }}</li>
                         <li class="list-group-item"><span class="font-weight-bold">Status:</span> {{ exp.status }}</li>
                         {% endif %}
+                        
+                        {% if exp.use_forced_id == 'On'%}
+                        <li class="list-group-item"><span class="font-weight-bold">{{ _('Participation ID is required for this task.') }}</li>
+                        {% endif %}
+                        
                         <li class="list-group-item">
-                        <button class="btn btn-outline-success dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                        Begin task
-                        </button>
-                          <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
-                            <a class="dropdown-item" href="{{ url_for('consent', exp_id=exp.idexperiment) }}">As a new participant</a>
-                            <a class="dropdown-item" href="{{ url_for('begin_with_id', exp_id=exp.idexperiment) }}">I have received an ID to use for this task</a>
-                          </div>
-                        <a class="btn btn-outline-success" href="{{ url_for('continue_task', exp_id=exp.idexperiment) }}" role="button">Continue task</a>
+                        
+                        
+                        <a class="btn btn-outline-success" href="{{ url_for('consent', exp_id=exp.idexperiment) }}" role="button">{{ _('Begin task') }}</a>
+                        <a class="btn btn-outline-success" href="{{ url_for('continue_task', exp_id=exp.idexperiment) }}" role="button">{{ _('Continue task') }}</a>
                         
                             {% if current_user.is_authenticated %}
-                            
-                            
-                            <a class="btn btn-outline-info" href="{{ url_for('experiment_statistics', exp_id=exp.idexperiment) }}" role="button">Statistics</a>
-                            <a class="btn btn-outline-info" href="{{ url_for('view_experiment', exp_id=exp.idexperiment) }}" role="button">View / Edit</a>
+                            <span class="text-right">
+                            <a class="btn btn-outline-info" href="{{ url_for('admin_dryrun', exp_id=exp.idexperiment) }}" role="button">{{ _('AdminRun') }}</a>
+                            <a class="btn btn-outline-info" href="{{ url_for('experiment_statistics', exp_id=exp.idexperiment) }}" role="button">{{ _('Statistics') }}</a>
+                            <a class="btn btn-outline-info" href="{{ url_for('view_experiment', exp_id=exp.idexperiment) }}" role="button">{{ _('View / Edit') }}</a>
                             
                             {% endif %}
                        
-                        
+                        </li>
                      </ul>
                     <br>
                     <br>
@@ -55,32 +58,32 @@
                     {% if exp.status == 'Public' and session['language'] == "All" %}
                     
                      <ul class="list-group mb-4">
-                         <li class="list-group-item active"><span class="font-weight-bold">Name:</span> {{ exp.name }} </li>
-                         <li class="list-group-item"><span class="font-weight-bold">Instruction:</span> {{ exp.instruction }}</li>
+                         <li class="list-group-item active"><span class="font-weight-bold">{{ _('Name:') }}</span> {{ exp.name }} </li>
+                         <li class="list-group-item"><span class="font-weight-bold">{{ _('Instruction:') }}</span> {{ exp.short_instruction }}</li>
                         {% if current_user.is_authenticated %}
                         <li class="list-group-item"><span class="font-weight-bold">ID number:</span> {{ exp.idexperiment }} </li>
                         <li class="list-group-item"><span class="font-weight-bold">Language:</span> {{ exp.language }}</li>
                         <li class="list-group-item"><span class="font-weight-bold">Status:</span> {{ exp.status }}</li>
                         {% endif %}
+                        {% if exp.use_forced_id == 'On'%}
+                        <li class="list-group-item"><span class="font-weight-bold">{{ _('Participation ID is required for this task.') }}</li>
+                        {% endif %}
+
+
                         <li class="list-group-item">
-                        <button class="btn btn-outline-success dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                        Begin task
-                        </button>
-                          <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
-                            <a class="dropdown-item" href="{{ url_for('consent', exp_id=exp.idexperiment) }}">As a new participant</a>
-                            <a class="dropdown-item" href="{{ url_for('begin_with_id', exp_id=exp.idexperiment) }}">I have received an ID to use for this task</a>
-                          </div>
-                        <a class="btn btn-outline-success" href="{{ url_for('continue_task', exp_id=exp.idexperiment) }}" role="button">Continue task</a>
+
+                        <a class="btn btn-outline-success" href="{{ url_for('consent', exp_id=exp.idexperiment) }}" role="button">{{ _('Begin task') }}</a>
+                        <a class="btn btn-outline-success" href="{{ url_for('continue_task', exp_id=exp.idexperiment) }}" role="button">{{ _('Continue task') }}</a
                         
                             {% if current_user.is_authenticated %}
-                            
-                            
-                            <a class="btn btn-outline-info" href="{{ url_for('experiment_statistics', exp_id=exp.idexperiment) }}" role="button">Statistics</a>
-                            <a class="btn btn-outline-info" href="{{ url_for('view_experiment', exp_id=exp.idexperiment) }}" role="button">View / Edit</a>
+                            <span class="text-right">    
+                            <a class="btn btn-outline-info" href="{{ url_for('admin_dryrun', exp_id=exp.idexperiment) }}" role="button">{{ _('AdminRun') }}</a>
+                            <a class="btn btn-outline-info" href="{{ url_for('experiment_statistics', exp_id=exp.idexperiment) }}" role="button">{{ _('Statistics') }}</a>
+                            <a class="btn btn-outline-info" href="{{ url_for('view_experiment', exp_id=exp.idexperiment) }}" role="button">{{ _('View / Edit') }}</a>
                             
                             {% endif %}
                        
-                        
+                        </li>
                      </ul>
                     <br>
                     <br>
@@ -92,24 +95,23 @@
                     <h3>Unpublished experiment:</h3>
                      <ul class="list-group mb-4">
                         <li class="list-group-item list-group-item-dark"><span class="font-weight-bold">Name:</span> {{ exp.name }} </li>
-                        <li class="list-group-item"><span class="font-weight-bold">Instruction:</span> {{ exp.instruction }}</li>
+                        <li class="list-group-item"><span class="font-weight-bold">Instruction:</span> {{ exp.short_instruction }}</li>
                         {% if current_user.is_authenticated %}
                         <li class="list-group-item"><span class="font-weight-bold">ID number:</span> {{ exp.idexperiment }} </li>
                         <li class="list-group-item"><span class="font-weight-bold">Language:</span> {{ exp.language }}</li>
                         <li class="list-group-item"><span class="font-weight-bold">Status:</span> {{ exp.status }}</li>
                         {% endif %}
+                        {% if exp.use_forced_id == 'On'%}
+                        <li class="list-group-item"><span class="font-weight-bold">Participation ID is required for this task.</li>
+                        {% endif %}
+
+
                         <li class="list-group-item">
-                        <button class="btn btn-outline-success dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                        Begin task
-                        </button>
-                          <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
-                            <a class="dropdown-item" href="{{ url_for('consent', exp_id=exp.idexperiment) }}">As a new participant</a>
-                            <a class="dropdown-item" href="{{ url_for('begin_with_id', exp_id=exp.idexperiment) }}">I have received an ID to use for this task</a>
-                          </div>
+                        <a class="btn btn-outline-success" href="{{ url_for('consent', exp_id=exp.idexperiment) }}" role="button">Begin task</a>
                         <a class="btn btn-outline-success" href="{{ url_for('continue_task', exp_id=exp.idexperiment) }}" role="button">Continue task</a>
                             {% if current_user.is_authenticated %}
                             
-                            
+                            <a class="btn btn-outline-info" href="{{ url_for('admin_dryrun', exp_id=exp.idexperiment) }}" role="button">AdminRun</a>
                             <a class="btn btn-outline-info" href="{{ url_for('experiment_statistics', exp_id=exp.idexperiment) }}" role="button">Statistics</a>
                             <a class="btn btn-outline-info" href="{{ url_for('view_experiment', exp_id=exp.idexperiment) }}" role="button">View / Edit</a>
                             
@@ -126,24 +128,23 @@
                     <h3>Unpublished experiment:</h3>
                      <ul class="list-group mb-4">
                         <li class="list-group-item list-group-item-dark"><span class="font-weight-bold">Name:</span> {{ exp.name }} </li>
-                        <li class="list-group-item"><span class="font-weight-bold">Instruction:</span> {{ exp.instruction }}</li>
+                        <li class="list-group-item"><span class="font-weight-bold">Instruction:</span> {{ exp.short_instruction }}</li>
                         {% if current_user.is_authenticated %}
                         <li class="list-group-item"><span class="font-weight-bold">ID number:</span> {{ exp.idexperiment }} </li>
                         <li class="list-group-item"><span class="font-weight-bold">Language:</span> {{ exp.language }}</li>
                         <li class="list-group-item"><span class="font-weight-bold">Status:</span> {{ exp.status }}</li>
                         {% endif %}
+                        {% if exp.use_forced_id == 'On'%}
+                        <li class="list-group-item"><span class="font-weight-bold">Participation ID is required for this task.</li>
+                        {% endif %}
+
+
                         <li class="list-group-item">
-                        <button class="btn btn-outline-success dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                        Begin task
-                        </button>
-                          <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
-                            <a class="dropdown-item" href="{{ url_for('consent', exp_id=exp.idexperiment) }}">As a new participant</a>
-                            <a class="dropdown-item" href="{{ url_for('begin_with_id', exp_id=exp.idexperiment) }}">I have received an ID to use for this task</a>
-                          </div>
+                        <a class="btn btn-outline-success" href="{{ url_for('consent', exp_id=exp.idexperiment) }}" role="button">Begin task</a>
                         <a class="btn btn-outline-success" href="{{ url_for('continue_task', exp_id=exp.idexperiment) }}" role="button">Continue task</a>
                             {% if current_user.is_authenticated %}
                             
-                            
+                            <a class="btn btn-outline-info" href="{{ url_for('admin_dryrun', exp_id=exp.idexperiment) }}" role="button">AdminRun</a>
                             <a class="btn btn-outline-info" href="{{ url_for('experiment_statistics', exp_id=exp.idexperiment) }}" role="button">Statistics</a>
                             <a class="btn btn-outline-info" href="{{ url_for('view_experiment', exp_id=exp.idexperiment) }}" role="button">View / Edit</a>
                             
diff --git a/app/templates/instructions.html b/app/templates/instructions.html
index 6c2c320..0049144 100644
--- a/app/templates/instructions.html
+++ b/app/templates/instructions.html
@@ -1,7 +1,7 @@
 {% extends "base.html" %}
 {% block content %}
 
-<h1 class="row mt-5 display-4"><br>Rating task instructions:</h1>
+<h1 class="container mt-5 display-4"><br>{{ _('Instructions:') }}</h1>
 
 
 {% block attributes %}
@@ -11,14 +11,14 @@
     {% endblock %}
 
 <br>
-<h3 class="row display-5 text-danger"> Notice!</h3>
-<div class="row lead">If you wish to quit a rating task before it is fully completed, you can return to finish the task later but you will need your participant ID-number in order to do that. Please save your participant ID before starting the rating task!</div>
+<h3 class="row display-5 text-danger">{{ _('Notice!') }}</h3>
+<div class="row lead">{{ _('If you wish to quit a rating task before it is fully completed, you can return to finish the task later but you will need your participant ID-number in order to do that. Please save your participant ID before starting the rating task!') }}</div>
 
 <br>
-<h4 class="row">Your participant ID is:&nbsp;<div class="text-danger"> {{ session['user'] }} </div></h4>
+<h4 class="row">{{ _('Your participant ID is:') }}&nbsp;<div class="text-danger"> {{ session['user'] }} </div></h4>
 
 <br>
-<a class="btn btn-primary" href="/task/1" role="button">I'm ready to start</a>
+<a class="btn btn-primary" href="/task/1" role="button">{{ _('Ready to start') }}</a>
 
 {% endblock %}
 
diff --git a/app/templates/quit_task.html b/app/templates/quit_task.html
index 78efec3..9a82201 100644
--- a/app/templates/quit_task.html
+++ b/app/templates/quit_task.html
@@ -1,16 +1,16 @@
 {% extends "base.html" %}
 {% block content %}
 
-<h1 class="row mt-5 display-4"><br>Notice!</h1>
+<h1 class="container mt-5 display-4"><br>{{ _('Notice!') }}</h1>
 
 <br>
-<h3 class="row display-5 text-danger"> Notice!</h3>
-<div class="row lead">Please write down your participant ID so you can return and finish the rating task later!</div>
+<h3 class="row display-5 text-danger">{{ _('Notice!') }}</h3>
+<div class="row lead">{{ _('Please write down your participant ID so you can return and finish the rating task later!') }}</div>
 
 <br>
-<h4 class="row">Your participant ID is:&nbsp;<div class="text-danger"> {{ user_id }} </div></h4>
+<h4 class="row">{{ _('Your participant ID is:') }}&nbsp;<div class="text-danger"> {{ user_id }} </div></h4>
 
 <br>
-<a class="btn btn-primary" href="/" role="button">Quit!</a>
+<a class="btn btn-primary" href="/" role="button">{{ _('Quit!') }}</a>
 
 {% endblock %}
\ No newline at end of file
diff --git a/app/templates/register.html b/app/templates/register.html
index 9526075..aaf34c1 100644
--- a/app/templates/register.html
+++ b/app/templates/register.html
@@ -3,15 +3,15 @@
 {% block content %}
 
 <div class="container text-center mt-5">
-   <h1 class="display-4"><br>This is the registration page.</h1>
-   <p class="lead"> Please fill in these background questions before starting the rating task:</p>
+   <h1 class="display-4"><br>{{ _('This is the registration page.') }}</h1>
+   <p class="lead">{{ _('Please fill in these background questions before starting the rating task:') }}</p>
 </div>
 <form class="form-group" action="" method="post">
     {% for options in form.questions1 %}
     <div class="form-group">
         <label for="{{ options[0] }}">{{ options[1] }}</label>
             <select required class="form-control" name="{{ options[0] }}">  
-                <option disabled selected value></option>
+                <option disabled selected value>{{ _('Please select') }}</option>
                 {% for op in form.questions1[options] %}
                      <option value="{{ op[0] }}" name="{{ op[0] }}">{{ op[0] }}</option>
                 {% endfor %}   
@@ -19,7 +19,7 @@
     </div>
        {% endfor %}
    <p> 
-   <button type="submit" class="btn btn-primary">Submit</button>
+   <button type="submit" class="btn btn-primary">{{ _('Submit') }}</button>
    </p>
 </form>
 
diff --git a/app/templates/researcher_info.html b/app/templates/researcher_info.html
index 0a79d0d..62f79b9 100644
--- a/app/templates/researcher_info.html
+++ b/app/templates/researcher_info.html
@@ -1,7 +1,7 @@
 {% extends "base.html" %}
 {% block content %}
       
-<h1 class="row mt-5 display-4"><br>How to prepare your stimuli before uploading:</h1>
+<h1 class="container mt-5 display-4"><br>How to prepare your stimuli before uploading:</h1>
 <br>
 
 <h4 class="">How to split audiofiles into sections:</h4>
diff --git a/app/templates/task.html b/app/templates/task.html
index d0d8ade..558975d 100644
--- a/app/templates/task.html
+++ b/app/templates/task.html
@@ -1,7 +1,7 @@
 {% extends "base.html" %}
 {% block content %}
 
-<br>
+
 <br>    
 
 {% if session['randomization']=='Off' %}
@@ -10,15 +10,15 @@
     {% if session['type']=='text' %}
         <div class="container text-center mt-5 pt-5">
             {% for page in pages.items %}
-            <h3 class="text-center mt-5"><br>{{ page.text }}</h3>
+            <h{{ stimulus_size_text }} class="text-center mt-5"><br>{{ page.text }}</h{{ stimulus_size_text }}>
             {% endfor %}
         </div>
-           <br><br><br><br><br>
+           <br><br>
     {% endif %}
     
     
     {% if session['type']=='picture' %}
-        <div class="container stimulus col-9 mt-5 pt-5">
+        <div class="container stimulus col-{{stimulus_size}} mt-5 pt-5">
             {% for page in pages.items %}
                 <img src="/{{ page.media }}" class="img-fluid">
             {% endfor %}
@@ -27,7 +27,7 @@
     
     
     {% if session['type']=='video' %}
-        <div class="col-9 container stimulus mt-5 pt-5">
+        <div class="col-{{stimulus_size}} container stimulus mt-5 pt-5">
             {% for page in pages.items %}
                 <div class="embed-responsive embed-responsive-16by9">
                     <iframe class="embed-responsive-item" src="/{{ page.media }}" allowfullscreen></iframe>
@@ -38,7 +38,7 @@
 
 
     {% if session['type']=='audio' %}
-        <div class="col-4 container stimulus mt-5 pt-5">
+        <div class="col-{{stimulus_size}} container stimulus mt-5 pt-5">
             {% for page in pages.items %}
                 <div class="embed-responsive embed-responsive-16by9">
                     <iframe class="embed-responsive-item" src="/{{ page.media }}" allowfullscreen></iframe>
@@ -55,15 +55,15 @@
     {% if session['type']=='text' %}
         <div class="container text-center mt-5 pt-5">
             {% for page in pages.items %}
-            <h3 class="text-center mt-5"><br>{{ randomized_stimulus.text }}</h3>
+            <h{{ stimulus_size_text }} class="text-center mt-5"><br>{{ randomized_stimulus.text }}</h{{ stimulus_size_text }}>
             {% endfor %}
         </div>
-           <br><br><br><br><br>
+           <br><br>
     {% endif %}
     
     
     {% if session['type']=='picture' %}
-        <div class="container stimulus col-9 mt-5 pt-5">
+        <div class="container stimulus col-{{stimulus_size}} mt-5 pt-5">
             {% for page in pages.items %}
                 <img src="/{{ randomized_stimulus.media }}" class="img-fluid">
             {% endfor %}
@@ -72,7 +72,7 @@
     
     
     {% if session['type']=='video' %}
-        <div class="col-9 container stimulus mt-5 pt-5">
+        <div class="col-{{stimulus_size}} container stimulus mt-5 pt-5">
             {% for page in pages.items %}
                 <div class="embed-responsive embed-responsive-16by9">
                     <iframe class="embed-responsive-item" src="/{{ randomized_stimulus.media }}" allowfullscreen></iframe>
@@ -83,7 +83,7 @@
 
 
     {% if session['type']=='audio' %}
-        <div class="col-4 container stimulus mt-5 pt-5">
+        <div class="col-{{stimulus_size}} container stimulus mt-5 pt-5">
             {% for page in pages.items %}
                 <div class="embed-responsive embed-responsive-16by9">
                     <iframe class="embed-responsive-item" src="/{{ randomized_stimulus.media }}" allowfullscreen></iframe>
@@ -96,39 +96,40 @@
 {% endif %}
 
 
-
-
-
-
-
-
     
     <br>
  
- <h4 class="text-center">Rate the above stimulus based on these categories</h4>
+ 
+ 
+ 
+ <h4 class="text-center">{{ rating_instruction }}</h4>
 
   <form class="form-group mt-5" action="" method="post">
     {% for category in form.categories1 %}
         {% for scale in form.categories1[category] %}
-            <div class="row form-group">
-                <div class="col-2 text-center">
-                    <p>{{ scale[0] }}</p> 
-                </div>
-                <div class="col text-center">
+            <div class="row form-group mt-0 mb-0">
+                <h6 class="col-3 text-right mt-0 mb-0">
+                    {{ scale[0] }} 
+                </h6>
+                <h6 class="col text-center mt-0 mb-0">
                     <label for="customRange">{{ category[1] }}</label>
                     <input type="range" class="custom-range" id="customRange" name={{ category[0] }}>
                     
-                </div>
-                <div class="col-2 text-center">
-                <p>{{ scale[1] }}</p> 
-                </div>
+                </h6>
+                <h6 class="col-3 text-left mt-0 mb-0">
+                {{ scale[1] }}
+                </h6>
             </div>
          {% endfor %}   
     {% endfor %}
         <div class="form-row text-center">
             <div class="col-12">
-                <a class="btn btn-primary" href={{ url_for('quit_task') }} role="button">Quit task</a>
-                <button type="submit" class="btn btn-primary">Next page</button>
+                <a class="btn btn-primary" href={{ url_for('quit_task') }} role="button">{{ _('Quit task') }}</a>
+                <button type="submit" class="btn btn-primary">{{ _('Next page') }}</button>
+            </div>
+            <div class="col-12">
+                     <br>
+                    <p>{{ _('You can zoom in/out the page view by pressing ctrl+/ctrl- (Windows) or ⌘+/⌘- (Mac)') }} </p>
             </div>
         </div>    
   </form>  
diff --git a/app/templates/task_completed.html b/app/templates/task_completed.html
index a12ea8d..631f82b 100644
--- a/app/templates/task_completed.html
+++ b/app/templates/task_completed.html
@@ -4,15 +4,15 @@
       
     <h1 class="row mt-5 display-4">
         <div class="container text-center">
-            <br>Task completed!</h1>
+            <br>{{ _('Task completed!') }}</h1>
             <br>
         </div>
     <div class="container text-center lead">
-    <p>You have completed the rating task. Thank you for your participation :)</p>
+    <p>{{ _('You have completed the rating task. Thank you for your participation.') }}</p>
     </div>    
     <p>
     <div class="container text-center">
-         <a class="btn btn-primary" href="/" role="button">Return Home</a>
+         <a class="btn btn-primary" href="/" role="button">{{ _('Return Home') }}</a>
     </div>
 
 
diff --git a/app/templates/test_page.html b/app/templates/test_page.html
new file mode 100644
index 0000000..f204c39
--- /dev/null
+++ b/app/templates/test_page.html
@@ -0,0 +1,12 @@
+{% extends "base.html" %}
+{% block content %}
+
+<h1 class="container mt-5">moro</h1>
+
+
+<h1 class="container mt-5">{{ _('File Not Found') }}</h1>
+
+{% endblock %}
+
+
+
diff --git a/app/templates/upload_research_notification.html b/app/templates/upload_research_notification.html
new file mode 100644
index 0000000..57ebed8
--- /dev/null
+++ b/app/templates/upload_research_notification.html
@@ -0,0 +1,38 @@
+{% extends "base.html" %}
+{% block content %}
+<h1 class="container mt-5 display-4 text-center"><br>Upload research bulletin:</h1>
+<br>
+<p class="lead"></p>
+  {% from "_formhelpers.html" import render_field %}
+  <form  id="UploadResearchBulletinForm" action="" method="POST" role="form" enctype="multipart/form-data">
+    <div class="input-group mb-3">
+    <legend>Add bulletin imagefile:</legend>
+    <div class="input-group-prepend">
+    <span class="input-group-text">Upload:</span>
+    </div>
+    <div class="custom-file">
+    <input type="file" class="custom-file-input" id="file" name="file" accept="image/*" required> 
+    <label class="custom-file-label" for="upload_file">Choose file</label>
+    </div>
+    </div>
+  
+  
+  
+
+  
+  
+  
+  
+  
+  
+  
+  
+  
+   
+   <br>  
+   <button type="submit" class="btn btn-primary">Submit</button>
+   <a class="btn btn-primary" href="{{ request.referrer }}" role="button">Cancel</a>
+</form>
+{% endblock %}
+
+
diff --git a/app/templates/view_experiment.html b/app/templates/view_experiment.html
index 512a1d8..095aae3 100644
--- a/app/templates/view_experiment.html
+++ b/app/templates/view_experiment.html
@@ -11,8 +11,10 @@
 
 
 {% for exp in experiment_info %}
+
+
     <tr>
-      <td>Name:</td>
+      <td nowrap>Name:</td>
       <td>{{ exp.name }}</td>
       <td>
       <button type="button" class="btn btn-primary btn-block btn-sm btn-dark" data-toggle="modal" data-target="#myModal-remove">Remove experiment</button>
@@ -39,7 +41,7 @@
       </td>
     </tr>
     <tr>
-      <td>Status:</td>
+      <td nowrap>Status:</td>
       <td>{{ exp.status }}</td>
       <td>
     {% if exp.status == 'Hidden' %}      
@@ -49,17 +51,33 @@
       <a class="btn btn-primary btn-block btn-sm btn-info" href="{{ url_for('hide_experiment', exp_id=exp.idexperiment) }}" role="button">Hide experiment</a></td>
     {% endif %}
     </tr>
+
     <tr>
-      <td class"col-1">Instructions:</td>
-      <td class"col-10">{{ exp.instruction }}</td>
-      <td class"col-1">
-     <a class="btn btn-primary btn-block btn-sm btn-info" href="{{ url_for('edit_experiment', exp_id=exp.idexperiment) }}" role="button">Edit info</a>
-    </td>
+      <td nowrap>Creator:</td>
+      <td>{{ exp.creator_name }} - {{ exp.creation_time }}</td>
+      <td nowrap></td>
     </tr>
     <tr>
-      <td>Trial randomization:</td>
+      <td nowrap>Language:</td>
+      <td>{{ exp.language }}</td>
+      <td nowrap></td>
+    </tr>
+     <tr>
+      <td nowrap>Stimulus type:</td>
+      <td>{{ mtype.type }}</td>
+      <td nowrap></td>
+    </tr>
+     <tr>
+      <td nowrap>Stimulus size:</td>
+      <td>{{ exp.stimulus_size }}</td>
+      <td nowrap>
+      </td>
+    </tr>
+
+    <tr>
+      <td nowrap>Trial randomization:</td>
       <td>{{ exp.randomization }}</td>
-      <td>
+      <td nowrap>
     {% if exp.randomization == 'Off' %}      
       <a class="btn btn-primary btn-block btn-sm btn-info" href="{{ url_for('enable_randomization', exp_id=exp.idexperiment) }}" role="button">Enable</a></td>
     {% endif %}
@@ -67,24 +85,65 @@
       <a class="btn btn-primary btn-block btn-sm btn-info" href="{{ url_for('disable_randomization', exp_id=exp.idexperiment) }}" role="button">Disable</a></td>
     {% endif %}
 
-      </td>
+    </td>
+    </tr>
+      <td nowrap>Use forced ID for participants:</td>
+      <td>{{ exp.use_forced_id }}</td>
+      <td nowrap>
+    {% if exp.use_forced_id == 'Off' %}      
+      <a class="btn btn-primary btn-block btn-sm btn-info" href="{{ url_for('enable_forced_id', exp_id=exp.idexperiment) }}" role="button">Enable</a>
+      
+      
+    {% endif %}
+    {% if exp.use_forced_id == 'On' %}      
+      <a class="btn btn-primary w-50 btn-sm btn-info" href="{{ url_for('disable_forced_id', exp_id=exp.idexperiment) }}" role="button">Disable</a>
+      <a class="btn btn-primary w-50 btn-sm btn-info" href="{{ url_for('view_forced_id_list', exp_id=exp.idexperiment) }}" role="button">Check ID</a>
+    {% endif %}
+      
+    </td>
     </tr>
     <tr>
-      <td>Language:</td>
-      <td>{{ exp.language }}</td>
-      <td></td>
+    <td> Research bulletin:</td>   
+    <td> {{ exp.research_notification_filename }}</td>   
+    {% if exp.research_notification_filename  %}
+    <td> <a class="btn btn-primary btn-block btn-sm btn-info" href="{{ url_for('remove_research_notification', exp_id=exp.idexperiment) }}" role="button">Remove</a></td>   
+    {% else %}
+    <td> <a class="btn btn-primary btn-block btn-sm btn-info" href="{{ url_for('upload_research_notification', exp_id=exp.idexperiment) }}" role="button">Upload</a></td>   
+    {% endif %}
     </tr>
-     <tr>
-      <td>Stimulus type:</td>
-      <td>{{ mtype.type }}</td>
-      <td></td>
+    
+    <tr>
+      <td nowrap>Detailed instructions:</td>
+      <td>{{ exp.instruction }}</td>
+      <td nowrap>
+     <a class="btn btn-primary btn-block btn-sm btn-info" href="{{ url_for('edit_experiment', exp_id=exp.idexperiment) }}" role="button">Edit properties</a>
+    </td>
     </tr>
     <tr>
-      <td>Experiment ID:</td>
+      <td nowrap>Short description:</td>
+      <td>{{ exp.short_instruction }}</td>
+      <td nowrap></td>
+    </tr>
+
+    <tr>
+      <td nowrap>Single sentence instruction:</td>
+      <td>{{ exp.single_sentence_instruction }}</td>
+      <td nowrap></td>
+    </tr>
+
+    <tr>
+      <td nowrap>Consent form text:</td>
+      <td>{{ exp.consent_text }}</td>
+      <td nowrap></td>
+    </tr>
+    <tr>
+      <td nowrap>Experiment database ID:</td>
       <td>{{ exp.idexperiment }}</td>
-      <td></td>
+      <td nowrap></td>
     </tr>
 
+
+
 {% endfor %}
   </tbody>
 </table>
@@ -100,10 +159,10 @@
     <table class="table">
       <tbody>  
       <tr>
-      <td class="col-8">
+      <td class="col-11">
         <label for="{{ options[0] }}">{{ options[1] }}</label>
             <select required class="form-control" name="{{ options[0] }}">  
-                <option disabled selected value></option>
+                <option disabled selected value>Please select</option>
                 {% for op in questions1[options] %}
                      <option value="{{ op[0] }}" name="{{ op[0] }}">{{ op[0] }}</option>
                 {% endfor %}   
@@ -218,7 +277,7 @@
  <table class="table col-12">
   <tbody>
     {% if mtype.type=='text' %}
-            {% for page in media.items %}
+            {% for page in media %}
                 <tr class="col-12">
                     <td class="text-nowrap">Page ID: {{ page.idpage }}
                     </td>
@@ -260,7 +319,7 @@
    
     {% else %}
         <div class="container col-12">
-            {% for page in media.items %}
+            {% for page in media %}
                 <tr class="col-12 text-left">
                     <td class="col-2 text-nowrap">Page ID: {{ page.idpage }}
                     </td>
diff --git a/app/templates/view_forced_id_list.html b/app/templates/view_forced_id_list.html
new file mode 100644
index 0000000..f7127d9
--- /dev/null
+++ b/app/templates/view_forced_id_list.html
@@ -0,0 +1,49 @@
+{% extends "base.html" %}
+{% block content %}
+  
+        
+      <h1 class="container mt-5 display-4 text-center"><br>Forced ID login for participants:</h1>
+      <br>
+      <p class="lead">By using forced ID login subjects can only participate to a rating task by logging in with a pregenerated ID.
+      </p>
+    <br>
+
+    <form  action="" method="post" role="form">
+    <div class="form-inline">
+        <div class="form-group">
+             <label class="col-form-label"  for="number">Generate</label>
+             <input required type="number" min="0" class="form-control ml-2" name="number" id="number" placeholder="number">
+             <label class="col-form-label"  for="name">&nbsp;of random IDs starting with a</label>
+             <input type="text" class="form-control ml-2" name="string" id="string" placeholder="string">
+             <label class="col-form-label"  for="name">&nbsp;for this experiment -> </label>
+            <button type="submit" class="btn btn-primary ml-3">Generate IDs</button>
+        </div>
+    </div>
+    <br>
+    </form>
+ 
+<h4 class="text-left"><br>Usable participant IDs for this experiment:</h1>
+<br>
+
+
+<div class="container col-12">
+<table class="table">
+<tbody>
+
+
+{% for id in id_list %}
+
+<tr>
+<td>
+{{ id.pregenerated_id }}
+
+</td>
+</tr> 
+ 
+ 
+{% endfor %}
+
+</tbody>
+</table> 
+ 
+{% endblock %}
\ No newline at end of file
diff --git a/app/templates/view_research_notification.html b/app/templates/view_research_notification.html
new file mode 100644
index 0000000..f452f12
--- /dev/null
+++ b/app/templates/view_research_notification.html
@@ -0,0 +1,13 @@
+{% extends "base.html" %}
+{% block content %}
+
+
+<br>    
+        <div class="container stimulus col-{{stimulus_size}} mt-5 pt-5">
+            
+                <img src="/{{ research_notification_filename }}" class="img-fluid">
+            
+        </div>
+
+    
+{% endblock %}
\ No newline at end of file
diff --git a/app/translations/el/LC_MESSAGES/messages.mo b/app/translations/el/LC_MESSAGES/messages.mo
new file mode 100644
index 0000000000000000000000000000000000000000..c17b67a75d1e960a4f129d99f437698ddf0dd9dc
GIT binary patch
literal 6449
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

literal 0
HcmV?d00001

diff --git a/app/translations/el/LC_MESSAGES/messages.po b/app/translations/el/LC_MESSAGES/messages.po
new file mode 100644
index 0000000..19abfce
--- /dev/null
+++ b/app/translations/el/LC_MESSAGES/messages.po
@@ -0,0 +1,290 @@
+# Greek translations for PROJECT.
+# Copyright (C) 2018 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2018-11-28 14:59+0200\n"
+"PO-Revision-Date: 2018-11-27 16:38+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language: el\n"
+"Language-Team: el <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.6.0\n"
+
+#: app/forms.py:36
+msgid "Continue rating"
+msgstr "Συνεχίστε την εργασία βαθμολόγησης"
+
+#: app/forms.py:41
+msgid "Start rating"
+msgstr "Είμαι έτοιμος να ξεκινήσω"
+
+#: app/routes.py:359
+msgid "ID already in use"
+msgstr ""
+
+#: app/routes.py:368
+msgid "No such ID set for this experiment"
+msgstr ""
+
+#: app/templates/base.html:43
+msgid "Task progress:"
+msgstr ""
+
+#: app/templates/begin_with_id.html:8
+msgid "Please insert your ID-code below:"
+msgstr "Παρακαλώ εισάγετε τον κωδικό σας εδω"
+
+#: app/templates/begin_with_id.html:12 app/templates/consent.html:29
+#: app/templates/instructions.html:14 app/templates/quit_task.html:4
+#: app/templates/quit_task.html:7
+msgid "Notice!"
+msgstr "Προσοχή!"
+
+#: app/templates/begin_with_id.html:13
+msgid ""
+"Participation in this experiment requires a login with a predetermined ID"
+" code. Please input ID below."
+msgstr ""
+
+#: app/templates/consent.html:11
+msgid "Consent for participation:"
+msgstr ""
+
+#: app/templates/consent.html:14
+msgid "Research bulletin can be read"
+msgstr ""
+
+#: app/templates/consent.html:14
+msgid "here."
+msgstr ""
+
+#: app/templates/consent.html:20
+msgid "Agree"
+msgstr "Συμφωνώ"
+
+#: app/templates/consent.html:21
+msgid "Disagree"
+msgstr "Διαφωνώ"
+
+#: app/templates/consent.html:32
+msgid ""
+"In order to participate for the study you need to agree with the terms "
+"presented."
+msgstr ""
+"Για να συμμετάσχετε στο πείραμα, πρέπει να αποδεχθείτε τους όρους "
+"συμμετοχής."
+
+#: app/templates/consent.html:35
+msgid "Close Notice"
+msgstr "Κλείσε την ενημέρωση"
+
+#: app/templates/consent.html:36 app/templates/task_completed.html:15
+msgid "Return Home"
+msgstr "Πίσω στην Αρχική Σελίδα"
+
+#: app/templates/continue_task.html:9
+msgid "Please insert your participant ID:"
+msgstr "Παρακαλώ εισάγετε τον  κωδικό αναγνώρισης σας"
+
+#: app/templates/index.html:6
+msgid "Welcome to Onni"
+msgstr "Καλώς ήρθατε"
+
+#: app/templates/index.html:9
+msgid ""
+"This is the Human Emotion Systems laboratorys stimulus rating tool. If "
+"you have previously started a rating task you can continue that task on "
+"this page. If you are a researcher you can create new rating tasks by "
+"logging in. Or you can start a new rating task and start rating by "
+"selecting a task from the database list below."
+msgstr ""
+"Αυτό είναι το εργαλείο βαθμολόγησης των ερεθισμάτων του εργαστηρίου των "
+"ανθρώπινων συναισθημάτων. Εάν έχετε ήδη ξεκινήσει μια εργασία "
+"βαθμολόγησης, μπορείτε να συνεχίσετε την εργασία αυτή σε αυτή τη σελίδα. "
+"Αν είστε ερευνητής, μπορείτε να δημιουργήσετε νέες εργασίες αξιολόγησης "
+"συνδεόμενοι με το σύστημα. Ή μπορείτε να ξεκινήσετε μια νέα αξιολόγηση "
+"και να ξεκινήσετε την αξιολόγηση επιλέγοντας μια εργασία αξιολόγησης από "
+"την παρακάτω λίστα βάσης δεδομένων"
+
+#: app/templates/index.html:13
+msgid ""
+"You can choose the language suitable for you from the language menu in "
+"the upper right corner"
+msgstr ""
+
+#: app/templates/index.html:18
+msgid "List of experiments in database:"
+msgstr "Λίστα των πειραμάτων"
+
+#: app/templates/index.html:25 app/templates/index.html:61
+msgid "Name:"
+msgstr ""
+
+#: app/templates/index.html:26 app/templates/index.html:62
+msgid "Instruction:"
+msgstr ""
+
+#: app/templates/index.html:34 app/templates/index.html:69
+msgid "Participation ID is required for this task."
+msgstr ""
+
+#: app/templates/index.html:40 app/templates/index.html:75
+msgid "Begin task"
+msgstr "Ξεκίνα την άσκηση"
+
+#: app/templates/index.html:41 app/templates/index.html:76
+msgid "Continue task"
+msgstr "Συνέχιση της εργασίας"
+
+#: app/templates/index.html:45 app/templates/index.html:80
+msgid "AdminRun"
+msgstr ""
+
+#: app/templates/index.html:46 app/templates/index.html:81
+msgid "Statistics"
+msgstr ""
+
+#: app/templates/index.html:47 app/templates/index.html:82
+msgid "View / Edit"
+msgstr ""
+
+#: app/templates/instructions.html:4
+msgid "Instructions:"
+msgstr ""
+
+#: app/templates/instructions.html:15
+msgid ""
+"If you wish to quit a rating task before it is fully completed, you can "
+"return to finish the task later but you will need your participant ID-"
+"number in order to do that. Please save your participant ID before "
+"starting the rating task!"
+msgstr ""
+"Αν θέλετε να τερματίσετε μια εργασία βαθμολόγησης πριν ολοκληρωθεί, "
+"μπορείτε να επιστρέψετε για να ολοκληρώσετε την εργασία αργότερα, αλλά θα"
+" χρειαστείτε τον κωδικό αναγνώρισης του συμμετέχοντα για να το κάνετε "
+"αυτό. Αποθηκεύστε τον κωδικό αναγνώρισης πριν ξεκινήσετε την εργασία "
+"αξιολόγησης!"
+
+#: app/templates/instructions.html:18 app/templates/quit_task.html:11
+msgid "Your participant ID is:"
+msgstr "Ο κωδικός αναγνώρισης σας είναι"
+
+#: app/templates/instructions.html:21
+msgid "Ready to start"
+msgstr "Είμαι έτοιμος να ξεκινήσω"
+
+#: app/templates/quit_task.html:8
+msgid ""
+"Please write down your participant ID so you can return and finish the "
+"rating task later!"
+msgstr ""
+"Παρακαλώ αποθηκεύστε τον κωδικό αναγνώρισης σας έτσι ώστε να μπορείτε να "
+"γυρίσετε και να συνεχίσετε την  εργασία βαθμολόγησης αργότερα!"
+
+#: app/templates/quit_task.html:14
+msgid "Quit!"
+msgstr "Εγκαταλείπω την εργασία"
+
+#: app/templates/register.html:6
+msgid "This is the registration page."
+msgstr "Αυτή είναι η σελίδα εγγραφής"
+
+#: app/templates/register.html:7
+msgid "Please fill in these background questions before starting the rating task:"
+msgstr ""
+"Παρακαλώ απαντήστε σε αυτές τις εισαγωγικές ερωτήσεις πριν ξεκινήσετε την"
+" εργασία"
+
+#: app/templates/register.html:14
+msgid "Please select"
+msgstr ""
+
+#: app/templates/register.html:22
+msgid "Submit"
+msgstr "Υποβολή"
+
+#: app/templates/task.html:127
+msgid "Quit task"
+msgstr "Εγκαταλείπω την εργασία"
+
+#: app/templates/task.html:128
+msgid "Next page"
+msgstr "Επόμενη σελίδα"
+
+#: app/templates/task.html:132
+msgid ""
+"You can zoom in/out the page view by pressing ctrl+/ctrl- (Windows) or "
+"⌘+/⌘- (Mac)"
+msgstr ""
+
+#: app/templates/task_completed.html:7
+msgid "Task completed!"
+msgstr "Η εργασία ολοκληρώθηκε!"
+
+#: app/templates/task_completed.html:11
+msgid "You have completed the rating task. Thank you for your participation."
+msgstr ""
+"‘Εχετε ολοκληρώσει την εργασία βαθμολόγησης. Σας ευχαριστούμε για τη "
+"συμμετοχή σας "
+
+#: app/templates/test_page.html:7
+msgid "File Not Found"
+msgstr ""
+
+#~ msgid "ID number:"
+#~ msgstr ""
+
+#~ msgid "Language:"
+#~ msgstr ""
+
+#~ msgid "Status:"
+#~ msgstr ""
+
+#~ msgid "Welcome to Onni"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "This is the Human Emotion Systems "
+#~ "laboratorys stimulus rating tool. If you"
+#~ " have previously started a rating "
+#~ "task you can continue that task on"
+#~ " this page. If you are a "
+#~ "researcher you can create new rating "
+#~ "tasks by logging in. Or you can"
+#~ " start a new rating task and "
+#~ "start rating by selecting a task "
+#~ "from the database list below."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "You can choose the language suitable "
+#~ "for you from the language menu in"
+#~ " the upper right corner"
+#~ msgstr ""
+
+#~ msgid "List of experiments in database:"
+#~ msgstr ""
+
+#~ msgid "Name:"
+#~ msgstr ""
+
+#~ msgid "Instruction:"
+#~ msgstr ""
+
+#~ msgid "Participation ID is required for this task."
+#~ msgstr ""
+
+#~ msgid "Begin task"
+#~ msgstr ""
+
+#~ msgid "Continue task"
+#~ msgstr ""
+
diff --git a/app/translations/en/LC_MESSAGES/messages.mo b/app/translations/en/LC_MESSAGES/messages.mo
new file mode 100644
index 0000000000000000000000000000000000000000..7e74cd37c37c13f5379212843af7a99dd9a2b35d
GIT binary patch
literal 4705
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
Cj<8bz

literal 0
HcmV?d00001

diff --git a/app/translations/en/LC_MESSAGES/messages.po b/app/translations/en/LC_MESSAGES/messages.po
new file mode 100644
index 0000000..16a75e0
--- /dev/null
+++ b/app/translations/en/LC_MESSAGES/messages.po
@@ -0,0 +1,270 @@
+# English translations for PROJECT.
+# Copyright (C) 2018 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2018-11-28 14:59+0200\n"
+"PO-Revision-Date: 2018-11-27 16:38+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language: en\n"
+"Language-Team: en <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.6.0\n"
+
+#: app/forms.py:36
+msgid "Continue rating"
+msgstr ""
+
+#: app/forms.py:41
+msgid "Start rating"
+msgstr ""
+
+#: app/routes.py:359
+msgid "ID already in use"
+msgstr ""
+
+#: app/routes.py:368
+msgid "No such ID set for this experiment"
+msgstr ""
+
+#: app/templates/base.html:43
+msgid "Task progress:"
+msgstr ""
+
+#: app/templates/begin_with_id.html:8
+msgid "Please insert your ID-code below:"
+msgstr ""
+
+#: app/templates/begin_with_id.html:12 app/templates/consent.html:29
+#: app/templates/instructions.html:14 app/templates/quit_task.html:4
+#: app/templates/quit_task.html:7
+msgid "Notice!"
+msgstr ""
+
+#: app/templates/begin_with_id.html:13
+msgid ""
+"Participation in this experiment requires a login with a predetermined ID"
+" code. Please input ID below."
+msgstr ""
+
+#: app/templates/consent.html:11
+msgid "Consent for participation:"
+msgstr ""
+
+#: app/templates/consent.html:14
+msgid "Research bulletin can be read"
+msgstr ""
+
+#: app/templates/consent.html:14
+msgid "here."
+msgstr ""
+
+#: app/templates/consent.html:20
+msgid "Agree"
+msgstr ""
+
+#: app/templates/consent.html:21
+msgid "Disagree"
+msgstr ""
+
+#: app/templates/consent.html:32
+msgid ""
+"In order to participate for the study you need to agree with the terms "
+"presented."
+msgstr ""
+
+#: app/templates/consent.html:35
+msgid "Close Notice"
+msgstr ""
+
+#: app/templates/consent.html:36 app/templates/task_completed.html:15
+msgid "Return Home"
+msgstr ""
+
+#: app/templates/continue_task.html:9
+msgid "Please insert your participant ID:"
+msgstr ""
+
+#: app/templates/index.html:6
+msgid "Welcome to Onni"
+msgstr ""
+
+#: app/templates/index.html:9
+msgid ""
+"This is the Human Emotion Systems laboratorys stimulus rating tool. If "
+"you have previously started a rating task you can continue that task on "
+"this page. If you are a researcher you can create new rating tasks by "
+"logging in. Or you can start a new rating task and start rating by "
+"selecting a task from the database list below."
+msgstr ""
+
+#: app/templates/index.html:13
+msgid ""
+"You can choose the language suitable for you from the language menu in "
+"the upper right corner"
+msgstr ""
+
+#: app/templates/index.html:18
+msgid "List of experiments in database:"
+msgstr ""
+
+#: app/templates/index.html:25 app/templates/index.html:61
+msgid "Name:"
+msgstr ""
+
+#: app/templates/index.html:26 app/templates/index.html:62
+msgid "Instruction:"
+msgstr ""
+
+#: app/templates/index.html:34 app/templates/index.html:69
+msgid "Participation ID is required for this task."
+msgstr ""
+
+#: app/templates/index.html:40 app/templates/index.html:75
+msgid "Begin task"
+msgstr ""
+
+#: app/templates/index.html:41 app/templates/index.html:76
+msgid "Continue task"
+msgstr ""
+
+#: app/templates/index.html:45 app/templates/index.html:80
+msgid "AdminRun"
+msgstr ""
+
+#: app/templates/index.html:46 app/templates/index.html:81
+msgid "Statistics"
+msgstr ""
+
+#: app/templates/index.html:47 app/templates/index.html:82
+msgid "View / Edit"
+msgstr ""
+
+#: app/templates/instructions.html:4
+msgid "Instructions:"
+msgstr ""
+
+#: app/templates/instructions.html:15
+msgid ""
+"If you wish to quit a rating task before it is fully completed, you can "
+"return to finish the task later but you will need your participant ID-"
+"number in order to do that. Please save your participant ID before "
+"starting the rating task!"
+msgstr ""
+
+#: app/templates/instructions.html:18 app/templates/quit_task.html:11
+msgid "Your participant ID is:"
+msgstr ""
+
+#: app/templates/instructions.html:21
+msgid "Ready to start"
+msgstr ""
+
+#: app/templates/quit_task.html:8
+msgid ""
+"Please write down your participant ID so you can return and finish the "
+"rating task later!"
+msgstr ""
+
+#: app/templates/quit_task.html:14
+msgid "Quit!"
+msgstr ""
+
+#: app/templates/register.html:6
+msgid "This is the registration page."
+msgstr ""
+
+#: app/templates/register.html:7
+msgid "Please fill in these background questions before starting the rating task:"
+msgstr ""
+
+#: app/templates/register.html:14
+msgid "Please select"
+msgstr ""
+
+#: app/templates/register.html:22
+msgid "Submit"
+msgstr ""
+
+#: app/templates/task.html:127
+msgid "Quit task"
+msgstr ""
+
+#: app/templates/task.html:128
+msgid "Next page"
+msgstr ""
+
+#: app/templates/task.html:132
+msgid ""
+"You can zoom in/out the page view by pressing ctrl+/ctrl- (Windows) or "
+"⌘+/⌘- (Mac)"
+msgstr ""
+
+#: app/templates/task_completed.html:7
+msgid "Task completed!"
+msgstr ""
+
+#: app/templates/task_completed.html:11
+msgid "You have completed the rating task. Thank you for your participation."
+msgstr ""
+
+#: app/templates/test_page.html:7
+msgid "File Not Found"
+msgstr ""
+
+#~ msgid "ID number:"
+#~ msgstr ""
+
+#~ msgid "Language:"
+#~ msgstr ""
+
+#~ msgid "Status:"
+#~ msgstr ""
+
+#~ msgid "Welcome to Onni"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "This is the Human Emotion Systems "
+#~ "laboratorys stimulus rating tool. If you"
+#~ " have previously started a rating "
+#~ "task you can continue that task on"
+#~ " this page. If you are a "
+#~ "researcher you can create new rating "
+#~ "tasks by logging in. Or you can"
+#~ " start a new rating task and "
+#~ "start rating by selecting a task "
+#~ "from the database list below."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "You can choose the language suitable "
+#~ "for you from the language menu in"
+#~ " the upper right corner"
+#~ msgstr ""
+
+#~ msgid "List of experiments in database:"
+#~ msgstr ""
+
+#~ msgid "Name:"
+#~ msgstr ""
+
+#~ msgid "Instruction:"
+#~ msgstr ""
+
+#~ msgid "Participation ID is required for this task."
+#~ msgstr ""
+
+#~ msgid "Begin task"
+#~ msgstr ""
+
+#~ msgid "Continue task"
+#~ msgstr ""
+
diff --git a/app/translations/fa/LC_MESSAGES/messages.mo b/app/translations/fa/LC_MESSAGES/messages.mo
new file mode 100644
index 0000000000000000000000000000000000000000..2b8f7a6fed6c73200e0d101caa0d0fd052414a10
GIT binary patch
literal 5544
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
VZRh=<C>i6)x$9kSc6Z+2{|PWZO&S0I

literal 0
HcmV?d00001

diff --git a/app/translations/fa/LC_MESSAGES/messages.po b/app/translations/fa/LC_MESSAGES/messages.po
new file mode 100644
index 0000000..6ecbb8d
--- /dev/null
+++ b/app/translations/fa/LC_MESSAGES/messages.po
@@ -0,0 +1,280 @@
+# Persian translations for PROJECT.
+# Copyright (C) 2018 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2018-11-28 14:59+0200\n"
+"PO-Revision-Date: 2018-11-27 16:38+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language: fa\n"
+"Language-Team: fa <LL@li.org>\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.6.0\n"
+
+#: app/forms.py:36
+msgid "Continue rating"
+msgstr "ادامه امتیازدهی"
+
+#: app/forms.py:41
+msgid "Start rating"
+msgstr "برای شروع آزمایش آماده ام"
+
+#: app/routes.py:359
+msgid "ID already in use"
+msgstr ""
+
+#: app/routes.py:368
+msgid "No such ID set for this experiment"
+msgstr ""
+
+#: app/templates/base.html:43
+msgid "Task progress:"
+msgstr ""
+
+#: app/templates/begin_with_id.html:8
+msgid "Please insert your ID-code below:"
+msgstr "لطفا شناسه خود را اینجا وارد کنید:"
+
+#: app/templates/begin_with_id.html:12 app/templates/consent.html:29
+#: app/templates/instructions.html:14 app/templates/quit_task.html:4
+#: app/templates/quit_task.html:7
+msgid "Notice!"
+msgstr "توجه!"
+
+#: app/templates/begin_with_id.html:13
+msgid ""
+"Participation in this experiment requires a login with a predetermined ID"
+" code. Please input ID below."
+msgstr ""
+
+#: app/templates/consent.html:11
+msgid "Consent for participation:"
+msgstr ""
+
+#: app/templates/consent.html:14
+msgid "Research bulletin can be read"
+msgstr ""
+
+#: app/templates/consent.html:14
+msgid "here."
+msgstr ""
+
+#: app/templates/consent.html:20
+msgid "Agree"
+msgstr "موافقم"
+
+#: app/templates/consent.html:21
+msgid "Disagree"
+msgstr "موافق نیستم"
+
+#: app/templates/consent.html:32
+msgid ""
+"In order to participate for the study you need to agree with the terms "
+"presented."
+msgstr "برای شرکت در این آزمایش باید موافقت خود را با این موارد اعلام کنید."
+
+#: app/templates/consent.html:35
+msgid "Close Notice"
+msgstr "بستن توجه"
+
+#: app/templates/consent.html:36 app/templates/task_completed.html:15
+msgid "Return Home"
+msgstr "بازگشت به صفحه اصلی"
+
+#: app/templates/continue_task.html:9
+msgid "Please insert your participant ID:"
+msgstr "لطفا شناسه خود را اینجا وارد کنید:"
+
+#: app/templates/index.html:6
+msgid "Welcome to Onni"
+msgstr "خوش آمدید"
+
+#: app/templates/index.html:9
+msgid ""
+"This is the Human Emotion Systems laboratorys stimulus rating tool. If "
+"you have previously started a rating task you can continue that task on "
+"this page. If you are a researcher you can create new rating tasks by "
+"logging in. Or you can start a new rating task and start rating by "
+"selecting a task from the database list below."
+msgstr ""
+"این صفحه مربوط به  امتیازدهی به محرک ها در گروه تحقیقاتی سیسنم احساسات "
+"انسانها می باشد. چنانچه شما قبلا وارد این سامانه شده اید میتوانید در این "
+"صفحه به ادامه بپردازید. اگر شما یکی از پژوهشگرهای گروه هستید می توانید با"
+" ورود به سامانه سیستم امتیازدهی خود را طراحی کنید."
+
+#: app/templates/index.html:13
+msgid ""
+"You can choose the language suitable for you from the language menu in "
+"the upper right corner"
+msgstr ""
+
+#: app/templates/index.html:18
+msgid "List of experiments in database:"
+msgstr "لیست تحقیقات موجود در بانک اطلاعاتی::"
+
+#: app/templates/index.html:25 app/templates/index.html:61
+msgid "Name:"
+msgstr ""
+
+#: app/templates/index.html:26 app/templates/index.html:62
+msgid "Instruction:"
+msgstr ""
+
+#: app/templates/index.html:34 app/templates/index.html:69
+msgid "Participation ID is required for this task."
+msgstr ""
+
+#: app/templates/index.html:40 app/templates/index.html:75
+msgid "Begin task"
+msgstr "آزمایش را شروع کنید"
+
+#: app/templates/index.html:41 app/templates/index.html:76
+msgid "Continue task"
+msgstr "ادامه آزمایش"
+
+#: app/templates/index.html:45 app/templates/index.html:80
+msgid "AdminRun"
+msgstr ""
+
+#: app/templates/index.html:46 app/templates/index.html:81
+msgid "Statistics"
+msgstr ""
+
+#: app/templates/index.html:47 app/templates/index.html:82
+msgid "View / Edit"
+msgstr ""
+
+#: app/templates/instructions.html:4
+msgid "Instructions:"
+msgstr ""
+
+#: app/templates/instructions.html:15
+msgid ""
+"If you wish to quit a rating task before it is fully completed, you can "
+"return to finish the task later but you will need your participant ID-"
+"number in order to do that. Please save your participant ID before "
+"starting the rating task!"
+msgstr ""
+"چنانچه مایل به خروج از بخش امتیازدهی پیش از تکمیل این بخش می باشید شما می"
+" توانید بعدا به منظور اتمام این بخش به این صفحه برگردید. برای انجام این "
+"کار شما به کد شناسایی خود نیاز دارید. لذا لطفا پیش از شروع آزمایش کد "
+"شناسایی خود را ذخیره کنید. "
+
+#: app/templates/instructions.html:18 app/templates/quit_task.html:11
+msgid "Your participant ID is:"
+msgstr "کد شناسایی شما"
+
+#: app/templates/instructions.html:21
+msgid "Ready to start"
+msgstr "برای شروع آزمایش آماده ام"
+
+#: app/templates/quit_task.html:8
+msgid ""
+"Please write down your participant ID so you can return and finish the "
+"rating task later!"
+msgstr ""
+"لطفا شناسه خود را یادداشت نمایید تا در صورت نیاز در زمان دیگری امتیازدهی "
+"را به اتمام برسانید"
+
+#: app/templates/quit_task.html:14
+msgid "Quit!"
+msgstr "خروج"
+
+#: app/templates/register.html:6
+msgid "This is the registration page."
+msgstr "صفحه ثبت نام"
+
+#: app/templates/register.html:7
+msgid "Please fill in these background questions before starting the rating task:"
+msgstr "لطفا قبل از شروع امتیازدهی به سوالات زمینه پاسخ دهید"
+
+#: app/templates/register.html:14
+msgid "Please select"
+msgstr ""
+
+#: app/templates/register.html:22
+msgid "Submit"
+msgstr "ارسال"
+
+#: app/templates/task.html:127
+msgid "Quit task"
+msgstr "خروج از آزمایش"
+
+#: app/templates/task.html:128
+msgid "Next page"
+msgstr "صفحه بعد"
+
+#: app/templates/task.html:132
+msgid ""
+"You can zoom in/out the page view by pressing ctrl+/ctrl- (Windows) or "
+"⌘+/⌘- (Mac)"
+msgstr ""
+
+#: app/templates/task_completed.html:7
+msgid "Task completed!"
+msgstr "عملیات با موفقیت انجام شد!"
+
+#: app/templates/task_completed.html:11
+msgid "You have completed the rating task. Thank you for your participation."
+msgstr "بخش امتیازدهی با موفقیت انجام شد. سپاس ازمشارکت شما در این بخش"
+
+#: app/templates/test_page.html:7
+msgid "File Not Found"
+msgstr ""
+
+#~ msgid "ID number:"
+#~ msgstr ""
+
+#~ msgid "Language:"
+#~ msgstr ""
+
+#~ msgid "Status:"
+#~ msgstr ""
+
+#~ msgid "Welcome to Onni"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "This is the Human Emotion Systems "
+#~ "laboratorys stimulus rating tool. If you"
+#~ " have previously started a rating "
+#~ "task you can continue that task on"
+#~ " this page. If you are a "
+#~ "researcher you can create new rating "
+#~ "tasks by logging in. Or you can"
+#~ " start a new rating task and "
+#~ "start rating by selecting a task "
+#~ "from the database list below."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "You can choose the language suitable "
+#~ "for you from the language menu in"
+#~ " the upper right corner"
+#~ msgstr ""
+
+#~ msgid "List of experiments in database:"
+#~ msgstr ""
+
+#~ msgid "Name:"
+#~ msgstr ""
+
+#~ msgid "Instruction:"
+#~ msgstr ""
+
+#~ msgid "Participation ID is required for this task."
+#~ msgstr ""
+
+#~ msgid "Begin task"
+#~ msgstr ""
+
+#~ msgid "Continue task"
+#~ msgstr ""
+
diff --git a/app/translations/fi/LC_MESSAGES/messages.mo b/app/translations/fi/LC_MESSAGES/messages.mo
new file mode 100644
index 0000000000000000000000000000000000000000..a95738971ca115e7d99054bb272894bbec3799bc
GIT binary patch
literal 4666
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
B-c<kq

literal 0
HcmV?d00001

diff --git a/app/translations/fi/LC_MESSAGES/messages.po b/app/translations/fi/LC_MESSAGES/messages.po
new file mode 100644
index 0000000..77adc3f
--- /dev/null
+++ b/app/translations/fi/LC_MESSAGES/messages.po
@@ -0,0 +1,281 @@
+# Finnish translations for PROJECT.
+# Copyright (C) 2018 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2018-11-28 14:59+0200\n"
+"PO-Revision-Date: 2018-11-27 16:38+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language: fi\n"
+"Language-Team: fi <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.6.0\n"
+
+#: app/forms.py:36
+msgid "Continue rating"
+msgstr "Jatka tehtävää"
+
+#: app/forms.py:41
+msgid "Start rating"
+msgstr "Aloita"
+
+#: app/routes.py:359
+msgid "ID already in use"
+msgstr "Kyseinen ID on jo käytössä"
+
+#: app/routes.py:368
+msgid "No such ID set for this experiment"
+msgstr "Kyseistä ID:tä ei löydy"
+
+#: app/templates/base.html:43
+msgid "Task progress:"
+msgstr "Kokeesta tehty:"
+
+#: app/templates/begin_with_id.html:8
+msgid "Please insert your ID-code below:"
+msgstr "Syötä koehenkilötunnuksesi:"
+
+#: app/templates/begin_with_id.html:12 app/templates/consent.html:29
+#: app/templates/instructions.html:14 app/templates/quit_task.html:4
+#: app/templates/quit_task.html:7
+msgid "Notice!"
+msgstr "Huom!"
+
+#: app/templates/begin_with_id.html:13
+msgid ""
+"Participation in this experiment requires a login with a predetermined ID"
+" code. Please input ID below."
+msgstr ""
+"Tähän kokeeseen osallistumiseen vaaditaan ID-tunnus. Syötä ID-tunnuksesi "
+"alla olevaan kenttään."
+
+#: app/templates/consent.html:11
+msgid "Consent for participation:"
+msgstr "Suostumus osallistumiseksi:"
+
+#: app/templates/consent.html:14
+msgid "Research bulletin can be read"
+msgstr "Tutkimustiedote on luettavissa"
+
+#: app/templates/consent.html:14
+msgid "here."
+msgstr "täällä"
+
+#: app/templates/consent.html:20
+msgid "Agree"
+msgstr "Suostun"
+
+#: app/templates/consent.html:21
+msgid "Disagree"
+msgstr "En suostu"
+
+#: app/templates/consent.html:32
+msgid ""
+"In order to participate for the study you need to agree with the terms "
+"presented."
+msgstr "Osallistuaksesi kokeeseen sinun on hyväksyttävä esitetyt ehdot."
+
+#: app/templates/consent.html:35
+msgid "Close Notice"
+msgstr "Sulje"
+
+#: app/templates/consent.html:36 app/templates/task_completed.html:15
+msgid "Return Home"
+msgstr "Palaa etusivulle"
+
+#: app/templates/continue_task.html:9
+msgid "Please insert your participant ID:"
+msgstr "Syötä ID-tunnuksesi:"
+
+#: app/templates/index.html:6
+msgid "Welcome to Onni"
+msgstr "Tervetuloa"
+
+#: app/templates/index.html:9
+msgid ""
+"This is the Human Emotion Systems laboratorys stimulus rating tool. If "
+"you have previously started a rating task you can continue that task on "
+"this page. If you are a researcher you can create new rating tasks by "
+"logging in. Or you can start a new rating task and start rating by "
+"selecting a task from the database list below."
+msgstr ""
+"Tämä on Human Emotion Systems Laboratoryn arviointityökalu. Jos olet "
+"aiemmin aloittanut arviointitehtävän voit jatkaa tehtävää tällä sivulla. "
+"Jos olet tutkija voit luoda uuden arviointitehtävän kirjautumalla sisään."
+" Tai voit aloittaa uuden arvointitehtävän ja aloittaa arvioinnin "
+"valitsemalla arviointitehtävän alla olevasta listasta."
+
+#: app/templates/index.html:13
+msgid ""
+"You can choose the language suitable for you from the language menu in "
+"the upper right corner"
+msgstr "Voit valita kielen oikeassa yläkulmassa olevasta language-valikosta"
+
+#: app/templates/index.html:18
+msgid "List of experiments in database:"
+msgstr "Tietokannassa olevat kokeet:"
+
+#: app/templates/index.html:25 app/templates/index.html:61
+msgid "Name:"
+msgstr "Nimi:"
+
+#: app/templates/index.html:26 app/templates/index.html:62
+msgid "Instruction:"
+msgstr "Ohjeet:"
+
+#: app/templates/index.html:34 app/templates/index.html:69
+msgid "Participation ID is required for this task."
+msgstr "Tähän kokeeseen osallistumiseen vaaditaan ID-tunnus."
+
+#: app/templates/index.html:40 app/templates/index.html:75
+msgid "Begin task"
+msgstr "Aloita"
+
+#: app/templates/index.html:41 app/templates/index.html:76
+msgid "Continue task"
+msgstr "Jatka"
+
+#: app/templates/index.html:45 app/templates/index.html:80
+msgid "AdminRun"
+msgstr "AdminRun"
+
+#: app/templates/index.html:46 app/templates/index.html:81
+msgid "Statistics"
+msgstr "Statistics"
+
+#: app/templates/index.html:47 app/templates/index.html:82
+msgid "View / Edit"
+msgstr "View / Edit"
+
+#: app/templates/instructions.html:4
+msgid "Instructions:"
+msgstr "Ohjeet:"
+
+#: app/templates/instructions.html:15
+msgid ""
+"If you wish to quit a rating task before it is fully completed, you can "
+"return to finish the task later but you will need your participant ID-"
+"number in order to do that. Please save your participant ID before "
+"starting the rating task!"
+msgstr ""
+
+#: app/templates/instructions.html:18 app/templates/quit_task.html:11
+msgid "Your participant ID is:"
+msgstr "ID-numerosi on:"
+
+#: app/templates/instructions.html:21
+msgid "Ready to start"
+msgstr "Olen valmis aloittamaan"
+
+#: app/templates/quit_task.html:8
+msgid ""
+"Please write down your participant ID so you can return and finish the "
+"rating task later!"
+msgstr ""
+"Kirjoita ID-numerosi ylös jotta voit palata jatkamaan arviointitehtävää "
+"tarvittaessa myöhemmin!"
+
+#: app/templates/quit_task.html:14
+msgid "Quit!"
+msgstr "Lopeta!"
+
+#: app/templates/register.html:6
+msgid "This is the registration page."
+msgstr "Rekisteröityminen"
+
+#: app/templates/register.html:7
+msgid "Please fill in these background questions before starting the rating task:"
+msgstr "Ennen tehtävän aloittamista, vastaa näihin taustakysymyksiin:"
+
+#: app/templates/register.html:14
+msgid "Please select"
+msgstr "Valitse"
+
+#: app/templates/register.html:22
+msgid "Submit"
+msgstr "Jatka"
+
+#: app/templates/task.html:127
+msgid "Quit task"
+msgstr "Lopeta"
+
+#: app/templates/task.html:128
+msgid "Next page"
+msgstr "Seuraava"
+
+#: app/templates/task.html:132
+msgid ""
+"You can zoom in/out the page view by pressing ctrl+/ctrl- (Windows) or "
+"⌘+/⌘- (Mac)"
+msgstr ""
+"Voit zoomata sivunäkymää isommaksi/pienemmäksi painamalla ctrl+/ctrl- "
+"(Windows) tai ⌘+/⌘- (Mac)"
+
+#: app/templates/task_completed.html:7
+msgid "Task completed!"
+msgstr "Tehtävä on valmis!"
+
+#: app/templates/task_completed.html:11
+msgid "You have completed the rating task. Thank you for your participation."
+msgstr "Olet suorittanut tämän arviointitehtävän. Kiitos osallistumisestasi."
+
+#: app/templates/test_page.html:7
+msgid "File Not Found"
+msgstr ""
+
+#~ msgid "Welcome to Onni"
+#~ msgstr "Tervetuloa"
+
+#~ msgid ""
+#~ "This is the Human Emotion Systems "
+#~ "laboratorys stimulus rating tool. If you"
+#~ " have previously started a rating "
+#~ "task you can continue that task on"
+#~ " this page. If you are a "
+#~ "researcher you can create new rating "
+#~ "tasks by logging in. Or you can"
+#~ " start a new rating task and "
+#~ "start rating by selecting a task "
+#~ "from the database list below."
+#~ msgstr ""
+#~ "Tämä on Human Emotion Systems "
+#~ "Laboratoryn arviointityökalu.Jos olet aiemmin "
+#~ "aloittanut arviointitehtävän voit jatkaa "
+#~ "tehtävää tällä sivulla. Jos olet tutkija"
+#~ " voit luoda uuden arviointitehtävän "
+#~ "kirjautumalla sisään. Tai voit aloittaa "
+#~ "uuden arvointitehtävän ja aloittaa arvioinnin"
+#~ " valitsemalla arviointitehtävän alla olevasta "
+#~ "listasta."
+
+#~ msgid ""
+#~ "You can choose the language suitable "
+#~ "for you from the language menu in"
+#~ " the upper right corner"
+#~ msgstr "Voit vaihtaa kieltä oikeassa yläkulmassa olevasta valikosta."
+
+#~ msgid "List of experiments in database:"
+#~ msgstr "Tietokannassa olevat kokeet:"
+
+#~ msgid "Name:"
+#~ msgstr "Nimi:"
+
+#~ msgid "Instruction:"
+#~ msgstr "Ohjeet:"
+
+#~ msgid "Participation ID is required for this task."
+#~ msgstr "Tähän kokeeseen osallistumiseen tarvitaan koehenkilötunnus"
+
+#~ msgid "Begin task"
+#~ msgstr "Aloita"
+
+#~ msgid "Continue task"
+#~ msgstr "Jatka"
+
diff --git a/app/translations/fin/LC_MESSAGES/messages.mo b/app/translations/fin/LC_MESSAGES/messages.mo
deleted file mode 100644
index 699bab536246627e73eee1a2fea29e5490bf4da7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 484
zcmaJ-O-sW-6pSJWIePZ+yeYahsb3{+O21NxB(|in9%b9U#z?vwHk)F9hxp^X_*;Bc
zv3l{rurtf>W_RBAc3usdZNfg`WG#M8gZM7NCA@4IhDWDKcq4AyV>XowG=@q(;Z!q!
z#>S|MR0;=%(cs4G#xVAxkw3UKBh01JEG&|A#yVwEuvj|ag>64*wR^qD8;#82AZA^K
zT+;^D;~E{PT6T@uHnYybzH-hkj;*R?k&#8XOxH>O`T|~P7Ar1_jBBYJ=-&ka+_pmx
z8h@gjX23;K@`NJi=|kWD(JV&3_`ZZj5VW$iB305fhgqq3#`;n%3I{~~DGRq+hcD_L
z3OI1VJ~Bf;^ftxV70c{Op;6G&RyhS~eAcIV##2#;=_6MKYPZyLR@?a2Uznp}o|wv6
lDiQ~3lT@46C{R&P)ac5A4xeBK)ygF$7%{3P>N1nu_y946huZ)E

diff --git a/app/translations/fin/LC_MESSAGES/messages.po b/app/translations/fin/LC_MESSAGES/messages.po
deleted file mode 100644
index 5d1d64e..0000000
--- a/app/translations/fin/LC_MESSAGES/messages.po
+++ /dev/null
@@ -1,24 +0,0 @@
-# Finnish (Finland) translations for PROJECT.
-# Copyright (C) 2018 ORGANIZATION
-# This file is distributed under the same license as the PROJECT project.
-# FIRST AUTHOR <EMAIL@ADDRESS>, 2018.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PROJECT VERSION\n"
-"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2018-11-04 17:35+0200\n"
-"PO-Revision-Date: 2018-11-04 17:35+0200\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language: fi_FI\n"
-"Language-Team: fi_FI <LL@li.org>\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.6.0\n"
-
-#: app/templates/index.html:5
-msgid "Welcome"
-msgstr "Tervetuloa"
-
diff --git a/app/translations/it/LC_MESSAGES/messages.mo b/app/translations/it/LC_MESSAGES/messages.mo
new file mode 100644
index 0000000000000000000000000000000000000000..279cea7af6189b542ed597194d4e14c657964701
GIT binary patch
literal 4705
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
Bux9`O

literal 0
HcmV?d00001

diff --git a/app/translations/it/LC_MESSAGES/messages.po b/app/translations/it/LC_MESSAGES/messages.po
new file mode 100644
index 0000000..69b586b
--- /dev/null
+++ b/app/translations/it/LC_MESSAGES/messages.po
@@ -0,0 +1,270 @@
+# Italian translations for PROJECT.
+# Copyright (C) 2018 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2018-11-28 14:59+0200\n"
+"PO-Revision-Date: 2018-11-27 16:38+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language: it\n"
+"Language-Team: it <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.6.0\n"
+
+#: app/forms.py:36
+msgid "Continue rating"
+msgstr ""
+
+#: app/forms.py:41
+msgid "Start rating"
+msgstr ""
+
+#: app/routes.py:359
+msgid "ID already in use"
+msgstr ""
+
+#: app/routes.py:368
+msgid "No such ID set for this experiment"
+msgstr ""
+
+#: app/templates/base.html:43
+msgid "Task progress:"
+msgstr ""
+
+#: app/templates/begin_with_id.html:8
+msgid "Please insert your ID-code below:"
+msgstr ""
+
+#: app/templates/begin_with_id.html:12 app/templates/consent.html:29
+#: app/templates/instructions.html:14 app/templates/quit_task.html:4
+#: app/templates/quit_task.html:7
+msgid "Notice!"
+msgstr ""
+
+#: app/templates/begin_with_id.html:13
+msgid ""
+"Participation in this experiment requires a login with a predetermined ID"
+" code. Please input ID below."
+msgstr ""
+
+#: app/templates/consent.html:11
+msgid "Consent for participation:"
+msgstr ""
+
+#: app/templates/consent.html:14
+msgid "Research bulletin can be read"
+msgstr ""
+
+#: app/templates/consent.html:14
+msgid "here."
+msgstr ""
+
+#: app/templates/consent.html:20
+msgid "Agree"
+msgstr ""
+
+#: app/templates/consent.html:21
+msgid "Disagree"
+msgstr ""
+
+#: app/templates/consent.html:32
+msgid ""
+"In order to participate for the study you need to agree with the terms "
+"presented."
+msgstr ""
+
+#: app/templates/consent.html:35
+msgid "Close Notice"
+msgstr ""
+
+#: app/templates/consent.html:36 app/templates/task_completed.html:15
+msgid "Return Home"
+msgstr ""
+
+#: app/templates/continue_task.html:9
+msgid "Please insert your participant ID:"
+msgstr ""
+
+#: app/templates/index.html:6
+msgid "Welcome to Onni"
+msgstr ""
+
+#: app/templates/index.html:9
+msgid ""
+"This is the Human Emotion Systems laboratorys stimulus rating tool. If "
+"you have previously started a rating task you can continue that task on "
+"this page. If you are a researcher you can create new rating tasks by "
+"logging in. Or you can start a new rating task and start rating by "
+"selecting a task from the database list below."
+msgstr ""
+
+#: app/templates/index.html:13
+msgid ""
+"You can choose the language suitable for you from the language menu in "
+"the upper right corner"
+msgstr ""
+
+#: app/templates/index.html:18
+msgid "List of experiments in database:"
+msgstr ""
+
+#: app/templates/index.html:25 app/templates/index.html:61
+msgid "Name:"
+msgstr ""
+
+#: app/templates/index.html:26 app/templates/index.html:62
+msgid "Instruction:"
+msgstr ""
+
+#: app/templates/index.html:34 app/templates/index.html:69
+msgid "Participation ID is required for this task."
+msgstr ""
+
+#: app/templates/index.html:40 app/templates/index.html:75
+msgid "Begin task"
+msgstr ""
+
+#: app/templates/index.html:41 app/templates/index.html:76
+msgid "Continue task"
+msgstr ""
+
+#: app/templates/index.html:45 app/templates/index.html:80
+msgid "AdminRun"
+msgstr ""
+
+#: app/templates/index.html:46 app/templates/index.html:81
+msgid "Statistics"
+msgstr ""
+
+#: app/templates/index.html:47 app/templates/index.html:82
+msgid "View / Edit"
+msgstr ""
+
+#: app/templates/instructions.html:4
+msgid "Instructions:"
+msgstr ""
+
+#: app/templates/instructions.html:15
+msgid ""
+"If you wish to quit a rating task before it is fully completed, you can "
+"return to finish the task later but you will need your participant ID-"
+"number in order to do that. Please save your participant ID before "
+"starting the rating task!"
+msgstr ""
+
+#: app/templates/instructions.html:18 app/templates/quit_task.html:11
+msgid "Your participant ID is:"
+msgstr ""
+
+#: app/templates/instructions.html:21
+msgid "Ready to start"
+msgstr ""
+
+#: app/templates/quit_task.html:8
+msgid ""
+"Please write down your participant ID so you can return and finish the "
+"rating task later!"
+msgstr ""
+
+#: app/templates/quit_task.html:14
+msgid "Quit!"
+msgstr ""
+
+#: app/templates/register.html:6
+msgid "This is the registration page."
+msgstr ""
+
+#: app/templates/register.html:7
+msgid "Please fill in these background questions before starting the rating task:"
+msgstr ""
+
+#: app/templates/register.html:14
+msgid "Please select"
+msgstr ""
+
+#: app/templates/register.html:22
+msgid "Submit"
+msgstr ""
+
+#: app/templates/task.html:127
+msgid "Quit task"
+msgstr ""
+
+#: app/templates/task.html:128
+msgid "Next page"
+msgstr ""
+
+#: app/templates/task.html:132
+msgid ""
+"You can zoom in/out the page view by pressing ctrl+/ctrl- (Windows) or "
+"⌘+/⌘- (Mac)"
+msgstr ""
+
+#: app/templates/task_completed.html:7
+msgid "Task completed!"
+msgstr ""
+
+#: app/templates/task_completed.html:11
+msgid "You have completed the rating task. Thank you for your participation."
+msgstr ""
+
+#: app/templates/test_page.html:7
+msgid "File Not Found"
+msgstr ""
+
+#~ msgid "ID number:"
+#~ msgstr ""
+
+#~ msgid "Language:"
+#~ msgstr ""
+
+#~ msgid "Status:"
+#~ msgstr ""
+
+#~ msgid "Welcome to Onni"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "This is the Human Emotion Systems "
+#~ "laboratorys stimulus rating tool. If you"
+#~ " have previously started a rating "
+#~ "task you can continue that task on"
+#~ " this page. If you are a "
+#~ "researcher you can create new rating "
+#~ "tasks by logging in. Or you can"
+#~ " start a new rating task and "
+#~ "start rating by selecting a task "
+#~ "from the database list below."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "You can choose the language suitable "
+#~ "for you from the language menu in"
+#~ " the upper right corner"
+#~ msgstr ""
+
+#~ msgid "List of experiments in database:"
+#~ msgstr ""
+
+#~ msgid "Name:"
+#~ msgstr ""
+
+#~ msgid "Instruction:"
+#~ msgstr ""
+
+#~ msgid "Participation ID is required for this task."
+#~ msgstr ""
+
+#~ msgid "Begin task"
+#~ msgstr ""
+
+#~ msgid "Continue task"
+#~ msgstr ""
+
diff --git a/app/translations/zh/LC_MESSAGES/messages.mo b/app/translations/zh/LC_MESSAGES/messages.mo
new file mode 100644
index 0000000000000000000000000000000000000000..92ea41779f8fe60a11f458613e50c52aa67abfd6
GIT binary patch
literal 4609
zcmdUxUu+yl9mf~i1~7$`NT`4c8Y3#G!kz7u7WdMmb>d6w$c|mxr0PRJdv|kpOZIk;
z+1)s<KwQ$qv72-3DoNucPJ*MjaZBt30*&i)Vj&?OKx(Ow5Kn;G+r2X{5pVpJ`2KeG
z&RfT7cmylC&&}S<Z+?HizuEcYhI>yc_>1EIL-=3(2#r?${`FBs`8bCE2JZvc-J>WC
z;QiqJ;Dg{7z^{Po!Kc7af!!dj+XH?YOoN{R9q=#U5%4)s+$-(;5~OwSf(-l<Nc+*p
zCxCU}m%#_XkAaVZ8^O(B8q9z@!MDLi@bl~B{LLWQ{WkalsDothS0JV;zXi#^--BNS
zUGS6OJ=lceTMtsa4}the`6@_pMnPJ)72JWGb%9^P_ymHc_18g~w*>A1-vM`n5o{g@
z4}lMYzXr*V_rM|8se+iQm@q>7?FY$^9|kOfl<(8Q_-6rs0b;50Hb{Q`0i=9az<0sF
zgHM3JfibdoACf|O*?<r7n}OuVQy|%igOu;?U@X9m7=Is3gEL?YxE`BP-r53w2gFax
z55Q-@qaf|~JCNe}Gq?e)fVA!(!SA0#vgrB4AmzIir1{%}=Q}}6RrY`h<VgoVi}5=T
z$b7pX&HpP%`TiS7`QD8rJO<8!l<)UJiu0eK(w53;Mz3QiZ5hG2vW;gngW0OJSJ|$c
z7H7LmTT60fyJ=Y5uvyv^EUyYY)AFjVnMRC$vNgluOyGf$SsD9Q+BHk{E$`5D-x}Lt
zIz~$AXlJS}xSASd*wC@K(vfC^ro#p_E6Z$?eb3QsrUpiRk640Zd(QA&vsl{E^+A?2
zb9tTHJoR;daZ)vy;I<<WgUQmG;Ty|xxn5UoE?B~`gN<~Z8JwqR6p9K_cC<$fCzrrv
z_-2X}zQA0{WOi1yqpU~gDpF&q`}kUGYkpcbCCbQPRV_KbAB{>!$m&Wqxu0E{Y}pR-
zLfP>B!`^-lksBMip>Vj!Su8I&6@{mwuxQ!BNy>_Z23Abz)GV8sX~y^GxzKW0U{P2p
z)m9S-Bc|+9bM(pg+bC^@E4xf)Ims-tz$`9HZfBA46$6+;s%TVt!cw3Gm?k(%Cy-Xs
ziocMA5M4DF9;`B2TWF!`x=Awh!&NEF6iO^0R9M9(Ni)UkRnUw)3W}!*uA2kcMiwWn
zp}PJi$Pr7Z$-Nmt!h^23MQO6`R;F0Zlm_VwUo!&xL}+)p*_t!z_4IXApJH*HC+(Wa
z0ioF(f*LT^6p&^5#Sf`jh36qT%T^1ix>0$K`o(WK`qrrQ`n?6|_%g)M;;KMZ6X+Wb
zSu(PofG{x+zxqA%teN9VAIY}X%oy0vkCwEQJ|~gWY^5K?Txq*TInE0cO>RML{iGE9
zBb7eu<giCP2eFt2>l?Ie4%O;v!i4{(7_{J<mUDCmqVdlTbeX9~S#T0$slQPCeVXZ5
z=yg93DBy#K0(A+6lB^v=)T1&p*woh;sk&}e#R&onK|0Xcbpyx*iem7Ax;F?FG8rT}
zLXR2fDayK6R`?FV*s3LriY0#w!h#7|e=?#<=hDK=`B|zpBGai+0~LqUC~zjDyZz(V
z@6f2STZ5NPES^F^p65DFL7WLD>oyEcd7+k&tVstr6+%~yjDsYguQhZ%4r1y}3cT(`
zeF_c;Cukhz<Z)y$p=Gi*@+%B3>egR0;l5@xnP@)Rf^y9Eky{9s4kn9YP1-`=*hHTZ
z_O<6V1B$mE!HLS=D^6@|!UrCAsmVutvwpqn2fA;yCJQ=1SbtVE_DZj%_n||Z6c!~b
zp=W*rLW?ma%LT{DAk6Qg2O}M+$ZjqydU>&)-tL|8?fq<bytl8Tdsjm*&zr)IbXgfK
z71`!wtVq8ZWAU!Gj?Sms+S_~MeSHl*-Tjg6Bo<hRv_ms7wyC+LHPX@&+0@Efz7c!u
ziH*&hnwv2((hK#{POImAleIh^d$d)~>r^c}(l1oQ!W+sIF}CAdot<n~TUVSt`GKvs
zHgpD+jIkH9^+BYct2uhYp6u*=TGyhc$ZT!s(H)`cksT&p6)|Sy{h_s`Wiyjsw=_3&
zb#%p7a?uiPZlISr-Vl-g!92pU@lI&U>#AmKX34B7@H*Jy*y%{?$~^Kq%|#?`;9Nw>
zW2`ly*$vNdhy|%Z5(i^!n+jR8P0`1(!^(}r9WQ!^#uRt4;9fpjE|uJurxf?__2pBu
z%Y`$Q3)3HV>8O-0S4y+htB2g-Aw>=X3+4II!0=sf9PVoez4Mda!5MeH=uMt=CuiKb
zqBlGav*pEW(q8$kqwdJ)a-rZJS-|tk!e#mV_F|D1j$JL6rmIUQ+_UHL#T`E;E!5|f
zZw`4ASC=OX)z=PSe&x&|ckEz!{#dnexTD=2yWx$DR$sd5ja;ry6}{O@-tp1$&B^x*
z2U+#%4f4m&O?Y28Q(ijf&Q9E6?e^jU1-nT5-sF|ak4{uxe^dG?9gunPMhf28c=^^@
zIOCn0@~+&%ejj#$@J?RyM(5mx<K_8T3SjR1@*72W_*8Xj=Jw*5;QCOWKU$tIEKmLX
zzqvkm*Jn_9a`=Dn0<kLd5EydqPW{*&I*k$|&dS+&$P}4aJ~g*|aU!N*MfKKk_we)@
zH92#aUu$<sc|9OYbJwuP8kUN*`>mzQ4D@|WO3r=j&AMVk$~>S*y#^g22Z}fRihE?p
zy>ujKxP_s+TnYkN&zGpGYpf344M<Q6mlU~S&;koXRAB$QuyQ@9E}cd{lou8%KPh=H
z9rg}gs9Y~qN*4lA&0TVb7rdo{RJ?m*+C6*&>Z~`a>_+#-Pb;OddKl1MdH#*?l5lgP
zi_lmIVfoy}+Nm)u9SvJ1ujUKx_^50f_mzpT5gbU>r6ZNoCHLk@@7%OIeAX>3c&}cA
z2*S+?gWm9~=<V=Ycl@gR@{Dxy&Lx<MDoXq1(lL~t{6uHgnoc$vT5q{9;vIcG9Bh#8
z&>2CUEK`gYbBBsDY<e2LF?d%lR+o;|U**aFr;7p_1LeO{^@x!{P1S1`!>z+`K;2#(
RQNqvsqZj3-vrAqK{sU4<0X6^t

literal 0
HcmV?d00001

diff --git a/app/translations/zh/LC_MESSAGES/messages.po b/app/translations/zh/LC_MESSAGES/messages.po
new file mode 100644
index 0000000..9e15cd9
--- /dev/null
+++ b/app/translations/zh/LC_MESSAGES/messages.po
@@ -0,0 +1,270 @@
+# Chinese translations for PROJECT.
+# Copyright (C) 2018 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2018-11-28 14:59+0200\n"
+"PO-Revision-Date: 2018-11-27 16:38+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language: zh\n"
+"Language-Team: zh <LL@li.org>\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.6.0\n"
+
+#: app/forms.py:36
+msgid "Continue rating"
+msgstr "继续评分"
+
+#: app/forms.py:41
+msgid "Start rating"
+msgstr "我准备开始了"
+
+#: app/routes.py:359
+msgid "ID already in use"
+msgstr ""
+
+#: app/routes.py:368
+msgid "No such ID set for this experiment"
+msgstr ""
+
+#: app/templates/base.html:43
+msgid "Task progress:"
+msgstr ""
+
+#: app/templates/begin_with_id.html:8
+msgid "Please insert your ID-code below:"
+msgstr "请输入您的参与者ID:"
+
+#: app/templates/begin_with_id.html:12 app/templates/consent.html:29
+#: app/templates/instructions.html:14 app/templates/quit_task.html:4
+#: app/templates/quit_task.html:7
+msgid "Notice!"
+msgstr "注意!"
+
+#: app/templates/begin_with_id.html:13
+msgid ""
+"Participation in this experiment requires a login with a predetermined ID"
+" code. Please input ID below."
+msgstr ""
+
+#: app/templates/consent.html:11
+msgid "Consent for participation:"
+msgstr ""
+
+#: app/templates/consent.html:14
+msgid "Research bulletin can be read"
+msgstr ""
+
+#: app/templates/consent.html:14
+msgid "here."
+msgstr ""
+
+#: app/templates/consent.html:20
+msgid "Agree"
+msgstr "同意"
+
+#: app/templates/consent.html:21
+msgid "Disagree"
+msgstr "不同意"
+
+#: app/templates/consent.html:32
+msgid ""
+"In order to participate for the study you need to agree with the terms "
+"presented."
+msgstr "要参与本研究,您需要同意所提供的条款。"
+
+#: app/templates/consent.html:35
+msgid "Close Notice"
+msgstr "关闭通知"
+
+#: app/templates/consent.html:36 app/templates/task_completed.html:15
+msgid "Return Home"
+msgstr "返回主页"
+
+#: app/templates/continue_task.html:9
+msgid "Please insert your participant ID:"
+msgstr "请输入您的参与者ID:"
+
+#: app/templates/index.html:6
+msgid "Welcome to Onni"
+msgstr "欢迎"
+
+#: app/templates/index.html:9
+msgid ""
+"This is the Human Emotion Systems laboratorys stimulus rating tool. If "
+"you have previously started a rating task you can continue that task on "
+"this page. If you are a researcher you can create new rating tasks by "
+"logging in. Or you can start a new rating task and start rating by "
+"selecting a task from the database list below."
+msgstr "这是人类情感系统实验室刺激评级工具。如果您之前已经开始了一个评级工具,您可以在此页面继续该任务。如果您是一名研究员,您可以通过登录来创建新的评级任务。或者,您可以启动一个新的评级任务,并通过从下面的数据库列表中选择一个评级任务开始评级。"
+
+#: app/templates/index.html:13
+msgid ""
+"You can choose the language suitable for you from the language menu in "
+"the upper right corner"
+msgstr ""
+
+#: app/templates/index.html:18
+msgid "List of experiments in database:"
+msgstr "数据库中的实验列表:"
+
+#: app/templates/index.html:25 app/templates/index.html:61
+msgid "Name:"
+msgstr ""
+
+#: app/templates/index.html:26 app/templates/index.html:62
+msgid "Instruction:"
+msgstr ""
+
+#: app/templates/index.html:34 app/templates/index.html:69
+msgid "Participation ID is required for this task."
+msgstr ""
+
+#: app/templates/index.html:40 app/templates/index.html:75
+msgid "Begin task"
+msgstr "开始任务"
+
+#: app/templates/index.html:41 app/templates/index.html:76
+msgid "Continue task"
+msgstr "继续任务"
+
+#: app/templates/index.html:45 app/templates/index.html:80
+msgid "AdminRun"
+msgstr ""
+
+#: app/templates/index.html:46 app/templates/index.html:81
+msgid "Statistics"
+msgstr ""
+
+#: app/templates/index.html:47 app/templates/index.html:82
+msgid "View / Edit"
+msgstr ""
+
+#: app/templates/instructions.html:4
+msgid "Instructions:"
+msgstr ""
+
+#: app/templates/instructions.html:15
+msgid ""
+"If you wish to quit a rating task before it is fully completed, you can "
+"return to finish the task later but you will need your participant ID-"
+"number in order to do that. Please save your participant ID before "
+"starting the rating task!"
+msgstr "如果您希望在完成评估任务之前退出评级任务,您可以返回以后完成任务,但是需要您的参与者ID号才能执行此操作。 请在开始评级任务前保存您的参与者ID!"
+
+#: app/templates/instructions.html:18 app/templates/quit_task.html:11
+msgid "Your participant ID is:"
+msgstr "您的参与者ID是:"
+
+#: app/templates/instructions.html:21
+msgid "Ready to start"
+msgstr "我准备开始了"
+
+#: app/templates/quit_task.html:8
+msgid ""
+"Please write down your participant ID so you can return and finish the "
+"rating task later!"
+msgstr "请记下您的参与者ID,以便稍后返回并完成评级任务!"
+
+#: app/templates/quit_task.html:14
+msgid "Quit!"
+msgstr "退出"
+
+#: app/templates/register.html:6
+msgid "This is the registration page."
+msgstr "这是注册页面。"
+
+#: app/templates/register.html:7
+msgid "Please fill in these background questions before starting the rating task:"
+msgstr "请在开始评分前填写以下相关的问题:"
+
+#: app/templates/register.html:14
+msgid "Please select"
+msgstr ""
+
+#: app/templates/register.html:22
+msgid "Submit"
+msgstr "提交"
+
+#: app/templates/task.html:127
+msgid "Quit task"
+msgstr "退出任务"
+
+#: app/templates/task.html:128
+msgid "Next page"
+msgstr "下一页"
+
+#: app/templates/task.html:132
+msgid ""
+"You can zoom in/out the page view by pressing ctrl+/ctrl- (Windows) or "
+"⌘+/⌘- (Mac)"
+msgstr ""
+
+#: app/templates/task_completed.html:7
+msgid "Task completed!"
+msgstr "任务完成了!"
+
+#: app/templates/task_completed.html:11
+msgid "You have completed the rating task. Thank you for your participation."
+msgstr "您已完成评级任务。 感谢您的参与 :)"
+
+#: app/templates/test_page.html:7
+msgid "File Not Found"
+msgstr ""
+
+#~ msgid "ID number:"
+#~ msgstr ""
+
+#~ msgid "Language:"
+#~ msgstr ""
+
+#~ msgid "Status:"
+#~ msgstr ""
+
+#~ msgid "Welcome to Onni"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "This is the Human Emotion Systems "
+#~ "laboratorys stimulus rating tool. If you"
+#~ " have previously started a rating "
+#~ "task you can continue that task on"
+#~ " this page. If you are a "
+#~ "researcher you can create new rating "
+#~ "tasks by logging in. Or you can"
+#~ " start a new rating task and "
+#~ "start rating by selecting a task "
+#~ "from the database list below."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "You can choose the language suitable "
+#~ "for you from the language menu in"
+#~ " the upper right corner"
+#~ msgstr ""
+
+#~ msgid "List of experiments in database:"
+#~ msgstr ""
+
+#~ msgid "Name:"
+#~ msgstr ""
+
+#~ msgid "Instruction:"
+#~ msgstr ""
+
+#~ msgid "Participation ID is required for this task."
+#~ msgstr ""
+
+#~ msgid "Begin task"
+#~ msgstr ""
+
+#~ msgid "Continue task"
+#~ msgstr ""
+
diff --git a/babel.cfg b/babel.cfg
index 5ce6e47..c40b2e8 100644
--- a/babel.cfg
+++ b/babel.cfg
@@ -1,3 +1,3 @@
 [python: app/**.py]
 [jinja2: app/templates/**.html]
-extensions=jinja2.ext.autoescape,jinja2.ext.with_
\ No newline at end of file
+extensions=jinja2.ext.autoescape,jinja2.ext.with_
diff --git a/config.py b/config.py
index ce6f05c..f5a8ed4 100644
--- a/config.py
+++ b/config.py
@@ -7,21 +7,25 @@ class Config(object):
     #SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess'    
 
 
+    LANGUAGES = ['en', 'fi', 'fa', 'el', 'it', 'zh']
 
-
+    """
     #SQLITE3 connection settings: 
 
     SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
         'sqlite:///' + os.path.join(basedir, 'app.db')
     SQLALCHEMY_TRACK_MODIFICATIONS = False
-
+    """
 
     #MariaDB mysql database settings
-    """
-    'mysql+pymysql://'+MYSQL_USER+':'+MYSQL_PASSWORD+'@'+MYSQL_SERVER+'/'+MYSQL_DB+'?charset=utf8mb4'
+    
+
+    MYSQL_USER = 'rating'
+    MYSQL_PASSWORD = 'timotimo'
+    MYSQL_SERVER = 'localhost'
+    MYSQL_DB = 'rating_tool_db' 
+    
+    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://'+MYSQL_USER+':'+MYSQL_PASSWORD+'@'+MYSQL_SERVER+'/'+MYSQL_DB+'?charset=utf8mb4'
    
-    MYSQL_USER rating
-    MYSQL_PASSWORD timotimo
-    MYSQL_SERVER localhost
-    MYSQL_DB rating_tool_db 
-    """
\ No newline at end of file
+    SQLALCHEMY_TRACK_MODIFICATIONS = False
+    
\ No newline at end of file
diff --git a/create_rating_db.txt b/create_rating_db.txt
new file mode 100644
index 0000000..1eaafe7
--- /dev/null
+++ b/create_rating_db.txt
@@ -0,0 +1,119 @@
+CREATE TABLE background_question (
+	idbackground_question INTEGER NOT NULL AUTO_INCREMENT,
+	background_question VARCHAR(120), 
+	experiment_idexperiment INTEGER, 
+	PRIMARY KEY (idbackground_question)
+);
+CREATE TABLE experiment (
+	idexperiment INTEGER NOT NULL AUTO_INCREMENT,
+	name VARCHAR(120), 
+	instruction TEXT, 
+	directoryname VARCHAR(120), 
+	language VARCHAR(120), 
+	status VARCHAR(120), 
+	randomization VARCHAR(120), 
+	short_instruction TEXT, 
+	single_sentence_instruction TEXT, 
+	is_archived VARCHAR(120), 
+	creator_name VARCHAR(120), 
+	research_notification_filename VARCHAR(120), 
+	creation_time DATETIME, 
+	stimulus_size VARCHAR(120), 
+	consent_text TEXT, 
+	use_forced_id VARCHAR(120), 
+	PRIMARY KEY (idexperiment)
+);
+CREATE TABLE trial_randomization (
+	idtrial_randomization INTEGER NOT NULL AUTO_INCREMENT, 
+	page_idpage INTEGER, 
+	randomized_idpage INTEGER, 
+	answer_set_idanswer_set INTEGER, 
+	experiment_idexperiment INTEGER, 
+	PRIMARY KEY (idtrial_randomization)
+);
+CREATE TABLE user (
+	id INTEGER NOT NULL AUTO_INCREMENT, 
+	username VARCHAR(64), 
+	email VARCHAR(120), 
+	password_hash VARCHAR(128), 
+	PRIMARY KEY (id)
+);
+INSERT INTO user VALUES(1,'Yngwie',NULL,'pbkdf2:sha256:50000$QioS5ICE$17a468394e72aef1243576aa80d29c296c6482ada48be9d25bd7c3b6e8129b40');
+CREATE TABLE answer_set (
+	idanswer_set INTEGER NOT NULL AUTO_INCREMENT, 
+	experiment_idexperiment INTEGER, 
+	session VARCHAR(120), 
+	agreement VARCHAR(120), 
+	answer_counter INTEGER, 
+	registration_time DATETIME, 
+	last_answer_time DATETIME, 
+	PRIMARY KEY (idanswer_set), 
+	FOREIGN KEY(experiment_idexperiment) REFERENCES experiment (idexperiment)
+);
+CREATE TABLE background_question_option (
+	idbackground_question_option INTEGER NOT NULL AUTO_INCREMENT,
+	background_question_idbackground_question INTEGER, 
+	option VARCHAR(120), 
+	PRIMARY KEY (idbackground_question_option), 
+	FOREIGN KEY(background_question_idbackground_question) REFERENCES background_question (idbackground_question)
+);
+CREATE TABLE forced_id (
+	idforced_id INTEGER NOT NULL AUTO_INCREMENT,
+	experiment_idexperiment INTEGER, 
+	pregenerated_id VARCHAR(120), 
+	PRIMARY KEY (idforced_id), 
+	FOREIGN KEY(experiment_idexperiment) REFERENCES experiment (idexperiment)
+);
+CREATE TABLE page (
+	idpage INTEGER NOT NULL AUTO_INCREMENT,
+	experiment_idexperiment INTEGER, 
+	type VARCHAR(120), 
+	text VARCHAR(120), 
+	media VARCHAR(120), 
+	PRIMARY KEY (idpage), 
+	FOREIGN KEY(experiment_idexperiment) REFERENCES experiment (idexperiment)
+);
+CREATE TABLE question (
+	idquestion INTEGER NOT NULL AUTO_INCREMENT,
+	experiment_idexperiment INTEGER, 
+	question VARCHAR(120), 
+	`left` VARCHAR(120), 
+	`right` VARCHAR(120), 
+	PRIMARY KEY (idquestion), 
+	FOREIGN KEY(experiment_idexperiment) REFERENCES experiment (idexperiment)
+);
+CREATE TABLE answer (
+	idanswer INTEGER NOT NULL AUTO_INCREMENT,
+	question_idquestion INTEGER, 
+	answer_set_idanswer_set INTEGER, 
+	answer VARCHAR(120), 
+	page_idpage INTEGER, 
+	PRIMARY KEY (idanswer), 
+	FOREIGN KEY(answer_set_idanswer_set) REFERENCES answer_set (idanswer_set), 
+	FOREIGN KEY(page_idpage) REFERENCES page (idpage), 
+	FOREIGN KEY(question_idquestion) REFERENCES question (idquestion)
+);
+CREATE TABLE background_question_answer (
+	idbackground_question_answer INTEGER NOT NULL AUTO_INCREMENT,
+	answer_set_idanswer_set INTEGER, 
+	answer VARCHAR(120), 
+	background_question_idbackground_question INTEGER, 
+	PRIMARY KEY (idbackground_question_answer), 
+	FOREIGN KEY(answer_set_idanswer_set) REFERENCES answer_set (idanswer_set), 
+	FOREIGN KEY(background_question_idbackground_question) REFERENCES background_question (idbackground_question)
+);
+CREATE INDEX ix_experiment_consent_text ON experiment (consent_text);
+CREATE INDEX ix_experiment_creation_time ON experiment (creation_time);
+CREATE UNIQUE INDEX ix_experiment_directoryname ON experiment (directoryname);
+CREATE INDEX ix_experiment_instruction ON experiment (instruction);
+CREATE INDEX ix_experiment_name ON experiment (name);
+CREATE INDEX ix_experiment_short_instruction ON experiment (short_instruction);
+CREATE INDEX ix_experiment_single_sentence_instruction ON experiment (single_sentence_instruction);
+CREATE UNIQUE INDEX ix_user_email ON user (email);
+CREATE UNIQUE INDEX ix_user_username ON user (username);
+CREATE INDEX ix_answer_set_last_answer_time ON answer_set (last_answer_time);
+CREATE INDEX ix_answer_set_registration_time ON answer_set (registration_time);
+CREATE INDEX ix_page_media ON page (media);
+CREATE INDEX ix_page_text ON page (text);
+CREATE INDEX ix_page_type ON page (type);
+
diff --git a/messages.pot b/messages.pot
index f6a2d81..edc5cc7 100644
--- a/messages.pot
+++ b/messages.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2018-11-04 17:35+0200\n"
+"POT-Creation-Date: 2018-11-28 14:59+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,7 +17,204 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Generated-By: Babel 2.6.0\n"
 
-#: app/templates/index.html:5
-msgid "Welcome"
+#: app/forms.py:36
+msgid "Continue rating"
+msgstr ""
+
+#: app/forms.py:41
+msgid "Start rating"
+msgstr ""
+
+#: app/routes.py:359
+msgid "ID already in use"
+msgstr ""
+
+#: app/routes.py:368
+msgid "No such ID set for this experiment"
+msgstr ""
+
+#: app/templates/base.html:43
+msgid "Task progress:"
+msgstr ""
+
+#: app/templates/begin_with_id.html:8
+msgid "Please insert your ID-code below:"
+msgstr ""
+
+#: app/templates/begin_with_id.html:12 app/templates/consent.html:29
+#: app/templates/instructions.html:14 app/templates/quit_task.html:4
+#: app/templates/quit_task.html:7
+msgid "Notice!"
+msgstr ""
+
+#: app/templates/begin_with_id.html:13
+msgid ""
+"Participation in this experiment requires a login with a predetermined ID"
+" code. Please input ID below."
+msgstr ""
+
+#: app/templates/consent.html:11
+msgid "Consent for participation:"
+msgstr ""
+
+#: app/templates/consent.html:14
+msgid "Research bulletin can be read"
+msgstr ""
+
+#: app/templates/consent.html:14
+msgid "here."
+msgstr ""
+
+#: app/templates/consent.html:20
+msgid "Agree"
+msgstr ""
+
+#: app/templates/consent.html:21
+msgid "Disagree"
+msgstr ""
+
+#: app/templates/consent.html:32
+msgid ""
+"In order to participate for the study you need to agree with the terms "
+"presented."
+msgstr ""
+
+#: app/templates/consent.html:35
+msgid "Close Notice"
+msgstr ""
+
+#: app/templates/consent.html:36 app/templates/task_completed.html:15
+msgid "Return Home"
+msgstr ""
+
+#: app/templates/continue_task.html:9
+msgid "Please insert your participant ID:"
+msgstr ""
+
+#: app/templates/index.html:6
+msgid "Welcome to Onni"
+msgstr ""
+
+#: app/templates/index.html:9
+msgid ""
+"This is the Human Emotion Systems laboratorys stimulus rating tool. If "
+"you have previously started a rating task you can continue that task on "
+"this page. If you are a researcher you can create new rating tasks by "
+"logging in. Or you can start a new rating task and start rating by "
+"selecting a task from the database list below."
+msgstr ""
+
+#: app/templates/index.html:13
+msgid ""
+"You can choose the language suitable for you from the language menu in "
+"the upper right corner"
+msgstr ""
+
+#: app/templates/index.html:18
+msgid "List of experiments in database:"
+msgstr ""
+
+#: app/templates/index.html:25 app/templates/index.html:61
+msgid "Name:"
+msgstr ""
+
+#: app/templates/index.html:26 app/templates/index.html:62
+msgid "Instruction:"
+msgstr ""
+
+#: app/templates/index.html:34 app/templates/index.html:69
+msgid "Participation ID is required for this task."
+msgstr ""
+
+#: app/templates/index.html:40 app/templates/index.html:75
+msgid "Begin task"
+msgstr ""
+
+#: app/templates/index.html:41 app/templates/index.html:76
+msgid "Continue task"
+msgstr ""
+
+#: app/templates/index.html:45 app/templates/index.html:80
+msgid "AdminRun"
+msgstr ""
+
+#: app/templates/index.html:46 app/templates/index.html:81
+msgid "Statistics"
+msgstr ""
+
+#: app/templates/index.html:47 app/templates/index.html:82
+msgid "View / Edit"
+msgstr ""
+
+#: app/templates/instructions.html:4
+msgid "Instructions:"
+msgstr ""
+
+#: app/templates/instructions.html:15
+msgid ""
+"If you wish to quit a rating task before it is fully completed, you can "
+"return to finish the task later but you will need your participant ID-"
+"number in order to do that. Please save your participant ID before "
+"starting the rating task!"
+msgstr ""
+
+#: app/templates/instructions.html:18 app/templates/quit_task.html:11
+msgid "Your participant ID is:"
+msgstr ""
+
+#: app/templates/instructions.html:21
+msgid "Ready to start"
+msgstr ""
+
+#: app/templates/quit_task.html:8
+msgid ""
+"Please write down your participant ID so you can return and finish the "
+"rating task later!"
+msgstr ""
+
+#: app/templates/quit_task.html:14
+msgid "Quit!"
+msgstr ""
+
+#: app/templates/register.html:6
+msgid "This is the registration page."
+msgstr ""
+
+#: app/templates/register.html:7
+msgid "Please fill in these background questions before starting the rating task:"
+msgstr ""
+
+#: app/templates/register.html:14
+msgid "Please select"
+msgstr ""
+
+#: app/templates/register.html:22
+msgid "Submit"
+msgstr ""
+
+#: app/templates/task.html:127
+msgid "Quit task"
+msgstr ""
+
+#: app/templates/task.html:128
+msgid "Next page"
+msgstr ""
+
+#: app/templates/task.html:132
+msgid ""
+"You can zoom in/out the page view by pressing ctrl+/ctrl- (Windows) or "
+"⌘+/⌘- (Mac)"
+msgstr ""
+
+#: app/templates/task_completed.html:7
+msgid "Task completed!"
+msgstr ""
+
+#: app/templates/task_completed.html:11
+msgid "You have completed the rating task. Thank you for your participation."
+msgstr ""
+
+#: app/templates/test_page.html:7
+msgid "File Not Found"
 msgstr ""
 
diff --git a/migrations/versions/75ace1b8b1e0_.py b/migrations/versions/aea4a0f982b4_.py
similarity index 73%
rename from migrations/versions/75ace1b8b1e0_.py
rename to migrations/versions/aea4a0f982b4_.py
index d34fc9a..c42c438 100644
--- a/migrations/versions/75ace1b8b1e0_.py
+++ b/migrations/versions/aea4a0f982b4_.py
@@ -1,8 +1,8 @@
 """empty message
 
-Revision ID: 75ace1b8b1e0
+Revision ID: aea4a0f982b4
 Revises: 
-Create Date: 2018-11-04 18:40:37.722652
+Create Date: 2018-11-28 17:07:11.577139
 
 """
 from alembic import op
@@ -10,7 +10,7 @@ import sqlalchemy as sa
 
 
 # revision identifiers, used by Alembic.
-revision = '75ace1b8b1e0'
+revision = 'aea4a0f982b4'
 down_revision = None
 branch_labels = None
 depends_on = None
@@ -27,16 +27,29 @@ def upgrade():
     op.create_table('experiment',
     sa.Column('idexperiment', sa.Integer(), nullable=False),
     sa.Column('name', sa.String(length=120), nullable=True),
-    sa.Column('instruction', sa.String(length=120), nullable=True),
+    sa.Column('instruction', sa.Text(), nullable=True),
     sa.Column('directoryname', sa.String(length=120), nullable=True),
     sa.Column('language', sa.String(length=120), nullable=True),
     sa.Column('status', sa.String(length=120), nullable=True),
     sa.Column('randomization', sa.String(length=120), nullable=True),
+    sa.Column('short_instruction', sa.Text(), nullable=True),
+    sa.Column('single_sentence_instruction', sa.Text(), nullable=True),
+    sa.Column('is_archived', sa.String(length=120), nullable=True),
+    sa.Column('creator_name', sa.String(length=120), nullable=True),
+    sa.Column('research_notification_filename', sa.String(length=120), nullable=True),
+    sa.Column('creation_time', sa.DateTime(), nullable=True),
+    sa.Column('stimulus_size', sa.String(length=120), nullable=True),
+    sa.Column('consent_text', sa.Text(), nullable=True),
+    sa.Column('use_forced_id', sa.String(length=120), nullable=True),
     sa.PrimaryKeyConstraint('idexperiment')
     )
+    op.create_index(op.f('ix_experiment_consent_text'), 'experiment', ['consent_text'], unique=False)
+    op.create_index(op.f('ix_experiment_creation_time'), 'experiment', ['creation_time'], unique=False)
     op.create_index(op.f('ix_experiment_directoryname'), 'experiment', ['directoryname'], unique=True)
     op.create_index(op.f('ix_experiment_instruction'), 'experiment', ['instruction'], unique=False)
     op.create_index(op.f('ix_experiment_name'), 'experiment', ['name'], unique=False)
+    op.create_index(op.f('ix_experiment_short_instruction'), 'experiment', ['short_instruction'], unique=False)
+    op.create_index(op.f('ix_experiment_single_sentence_instruction'), 'experiment', ['single_sentence_instruction'], unique=False)
     op.create_table('trial_randomization',
     sa.Column('idtrial_randomization', sa.Integer(), nullable=False),
     sa.Column('page_idpage', sa.Integer(), nullable=True),
@@ -60,9 +73,13 @@ def upgrade():
     sa.Column('session', sa.String(length=120), nullable=True),
     sa.Column('agreement', sa.String(length=120), nullable=True),
     sa.Column('answer_counter', sa.Integer(), nullable=True),
+    sa.Column('registration_time', sa.DateTime(), nullable=True),
+    sa.Column('last_answer_time', sa.DateTime(), nullable=True),
     sa.ForeignKeyConstraint(['experiment_idexperiment'], ['experiment.idexperiment'], ),
     sa.PrimaryKeyConstraint('idanswer_set')
     )
+    op.create_index(op.f('ix_answer_set_last_answer_time'), 'answer_set', ['last_answer_time'], unique=False)
+    op.create_index(op.f('ix_answer_set_registration_time'), 'answer_set', ['registration_time'], unique=False)
     op.create_table('background_question_option',
     sa.Column('idbackground_question_option', sa.Integer(), nullable=False),
     sa.Column('background_question_idbackground_question', sa.Integer(), nullable=True),
@@ -70,6 +87,13 @@ def upgrade():
     sa.ForeignKeyConstraint(['background_question_idbackground_question'], ['background_question.idbackground_question'], ),
     sa.PrimaryKeyConstraint('idbackground_question_option')
     )
+    op.create_table('forced_id',
+    sa.Column('idforced_id', sa.Integer(), nullable=False),
+    sa.Column('experiment_idexperiment', sa.Integer(), nullable=True),
+    sa.Column('pregenerated_id', sa.String(length=120), nullable=True),
+    sa.ForeignKeyConstraint(['experiment_idexperiment'], ['experiment.idexperiment'], ),
+    sa.PrimaryKeyConstraint('idforced_id')
+    )
     op.create_table('page',
     sa.Column('idpage', sa.Integer(), nullable=False),
     sa.Column('experiment_idexperiment', sa.Integer(), nullable=True),
@@ -123,15 +147,22 @@ def downgrade():
     op.drop_index(op.f('ix_page_text'), table_name='page')
     op.drop_index(op.f('ix_page_media'), table_name='page')
     op.drop_table('page')
+    op.drop_table('forced_id')
     op.drop_table('background_question_option')
+    op.drop_index(op.f('ix_answer_set_registration_time'), table_name='answer_set')
+    op.drop_index(op.f('ix_answer_set_last_answer_time'), table_name='answer_set')
     op.drop_table('answer_set')
     op.drop_index(op.f('ix_user_username'), table_name='user')
     op.drop_index(op.f('ix_user_email'), table_name='user')
     op.drop_table('user')
     op.drop_table('trial_randomization')
+    op.drop_index(op.f('ix_experiment_single_sentence_instruction'), table_name='experiment')
+    op.drop_index(op.f('ix_experiment_short_instruction'), table_name='experiment')
     op.drop_index(op.f('ix_experiment_name'), table_name='experiment')
     op.drop_index(op.f('ix_experiment_instruction'), table_name='experiment')
     op.drop_index(op.f('ix_experiment_directoryname'), table_name='experiment')
+    op.drop_index(op.f('ix_experiment_creation_time'), table_name='experiment')
+    op.drop_index(op.f('ix_experiment_consent_text'), table_name='experiment')
     op.drop_table('experiment')
     op.drop_table('background_question')
     # ### end Alembic commands ###
-- 
GitLab