From 22437ea10931202d7e3e624206891f90baccb27b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20Heikkil=C3=A4?= <timo.t.heikkila@utu.fi>
Date: Fri, 21 Dec 2018 14:14:25 +0200
Subject: [PATCH] added private experiment functionality

---
 app/routes.py                      |  42 ++++++++---
 app/templates/index.html           | 110 +++++++++++++++++++++++++++++
 app/templates/view_experiment.html |   8 ++-
 3 files changed, 149 insertions(+), 11 deletions(-)

diff --git a/app/routes.py b/app/routes.py
index 5cc7193..5b6bf45 100644
--- a/app/routes.py
+++ b/app/routes.py
@@ -358,6 +358,14 @@ def begin_with_id():
     exp_id = request.args.get('exp_id', None)
     form = StartWithIdForm()
     experiment_info = experiment.query.filter_by(idexperiment=exp_id).first()
+    
+    instruction_paragraphs = str(experiment_info.short_instruction)
+    instruction_paragraphs = instruction_paragraphs.split('<br>')
+    
+    consent_paragraphs = str(experiment_info.consent_text)
+    consent_paragraphs = consent_paragraphs.split('<br>')
+    
+    
 
     if form.validate_on_submit():
         
@@ -384,7 +392,7 @@ def begin_with_id():
                 
                 #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('consent.html', exp_id=exp_id, experiment_info=experiment_info, instruction_paragraphs=instruction_paragraphs, consent_paragraphs=consent_paragraphs)
         
     return render_template('begin_with_id.html', exp_id=exp_id, form=form)
 
@@ -1133,7 +1141,7 @@ def add_bg_question():
     exp_id = request.args.get('exp_id', None)
     exp_status = experiment.query.filter_by(idexperiment=exp_id).first()
 
-    if exp_status.status == 'Public':
+    if exp_status.status != 'Hidden':
     
         flash("Experiment is public. Cannot modify structure.")
 
@@ -1188,7 +1196,7 @@ def add_questions():
     exp_id = request.args.get('exp_id', None)
     exp_status = experiment.query.filter_by(idexperiment=exp_id).first()
 
-    if exp_status.status == 'Public':
+    if exp_status.status != 'Hidden':
     
         flash("Experiment is public. Cannot modify structure.")
 
@@ -1246,7 +1254,7 @@ def remove_bg_question():
 
     exp_status = experiment.query.filter_by(idexperiment=exp_id).first()
 
-    if exp_status.status == 'Public':
+    if exp_status.status != 'Hidden':
     
         flash("Experiment is public. Cannot modify structure.")
 
@@ -1284,7 +1292,7 @@ def remove_question():
     exp_id = request.args.get('exp_id', None)
     exp_status = experiment.query.filter_by(idexperiment=exp_id).first()
 
-    if exp_status.status == 'Public':
+    if exp_status.status != 'Hidden':
     
         flash("Experiment is public. Cannot modify structure.")
 
@@ -1309,7 +1317,7 @@ 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':
+    if exp_status.status != 'Hidden':
     
         flash("Experiment is public. Cannot modify structure.")
 
@@ -1464,7 +1472,7 @@ def remove_page():
     exp_id = request.args.get('exp_id', None)
     exp_status = experiment.query.filter_by(idexperiment=exp_id).first()
 
-    if exp_status.status == 'Public':
+    if exp_status.status != 'Hidden':
     
         flash("Experiment is public. Cannot modify structure.")
 
@@ -1551,6 +1559,24 @@ def hide_experiment():
     return redirect(url_for('view_experiment', exp_id=exp_id))
 
 
+@app.route('/private_experiment')
+@login_required
+def private_experiment():
+
+    exp_id = request.args.get('exp_id', None)
+        
+    private_experiment = experiment.query.filter_by(idexperiment = exp_id).first()
+    
+    private_experiment.status = 'Private'
+    
+    flash("Changed status to Private")
+    
+    db.session.commit()
+  
+    return redirect(url_for('view_experiment', exp_id=exp_id))
+
+
+
 @app.route('/enable_randomization')
 @login_required
 def enable_randomization():
@@ -1759,7 +1785,7 @@ def add_stimuli():
     exp_status = experiment.query.filter_by(idexperiment=exp_id).first()
 
     
-    if exp_status.status == 'Public':
+    if exp_status.status != 'Hidden':
     
         flash("Experiment is public. Cannot modify structure.")
 
diff --git a/app/templates/index.html b/app/templates/index.html
index 8fa709a..d034db3 100644
--- a/app/templates/index.html
+++ b/app/templates/index.html
@@ -112,6 +112,116 @@
                     <br>
                     <br>
                     {% endif %}
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    {% if (exp.status == 'Private') and (current_user.is_authenticated) and session['language'] == exp.language  %}
+                    <br>
+                    <h3>Private experiment:</h3>
+                     <ul class="list-group mb-4">
+                        <li class="list-group-item list-group-item-info"><span class="font-weight-bold">Name:</span> {{ exp.name }} </li>
+                        <li class="list-group-item"><span class="font-weight-bold">Instruction:</span> 
+                        
+                         {% autoescape false %}
+                         {{ exp.short_instruction }}</li>
+                         {% endautoescape %}
+                        
+                        
+                        
+                        {% 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">
+                        <a class="btn btn-outline-primary" href="{{ url_for('consent', exp_id=exp.idexperiment) }}" role="button">Begin task</a>
+                        <a class="btn btn-outline-primary" 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>
+                            
+                            
+                            {% endif %}
+                        </li>
+                     </ul>
+                    
+                    {% endif %}
+
+
+                    {% if (exp.status == 'Private') and (current_user.is_authenticated) and session['language'] == "All"  %}
+                    <br>
+                    <h3>Private experiment:</h3>
+                     <ul class="list-group mb-4">
+                        <li class="list-group-item list-group-item-info"><span class="font-weight-bold">Name:</span> {{ exp.name }} </li>
+                        <li class="list-group-item"><span class="font-weight-bold">Instruction:</span> 
+                        
+                        
+                         {% autoescape false %}
+                         {{ exp.short_instruction }}</li>
+                         {% endautoescape %}
+                        
+                        
+                        {% 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">
+                        <a class="btn btn-outline-primary" href="{{ url_for('consent', exp_id=exp.idexperiment) }}" role="button">Begin task</a>
+                        <a class="btn btn-outline-primary" 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>
+                            
+                            
+                            {% endif %}
+                        </li>
+                     </ul>
+                    
+                    {% endif %}
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
                     
                     
                     {% if (exp.status == 'Hidden') and (current_user.is_authenticated) and session['language'] == exp.language  %}
diff --git a/app/templates/view_experiment.html b/app/templates/view_experiment.html
index 0b0aba7..5553b58 100644
--- a/app/templates/view_experiment.html
+++ b/app/templates/view_experiment.html
@@ -45,10 +45,12 @@
       <td>{{ exp.status }}</td>
       <td>
     {% if exp.status == 'Hidden' %}      
-      <a class="btn btn-primary btn-block btn-sm btn-info" href="{{ url_for('publish_experiment', exp_id=exp.idexperiment) }}" role="button">Publish</a></td>
+      <a class="btn btn-primary btn-block btn-sm btn-info" href="{{ url_for('publish_experiment', exp_id=exp.idexperiment) }}" role="button">Publish (visible)</a>
+      <a class="btn btn-primary btn-block btn-sm btn-info" href="{{ url_for('private_experiment', exp_id=exp.idexperiment) }}" role="button">Publish (private)</a>
+      </td>
     {% endif %}
-    {% if exp.status == 'Public' %}      
-      <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>
+    {% if exp.status != 'Hidden' %}      
+      <a class="btn btn-primary btn-block btn-sm btn-info" href="{{ url_for('hide_experiment', exp_id=exp.idexperiment) }}" role="button">Unpublish</a></td>
     {% endif %}
     </tr>
 
-- 
GitLab