[virtualcommons-developer] commit/vcweb: 2 new changesets
Status: Beta
Brought to you by:
alllee
|
From: <com...@bi...> - 2013-03-20 22:14:30
|
2 new commits in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/e16bd8473799/ changeset: e16bd8473799 user: alllee date: 2013-03-20 22:54:35 summary: experimenter notes now fully functional on the monitor page affected #: 6 files diff -r 898a737430938ef8b03991a745c2247fa4a0d203 -r e16bd84737999a18f46363ff77e15594a8281510 vcweb/boundaries/views.py --- a/vcweb/boundaries/views.py +++ b/vcweb/boundaries/views.py @@ -1,5 +1,5 @@ from django.http import Http404 -from django.shortcuts import render_to_response, redirect, get_object_or_404 +from django.shortcuts import render, redirect, get_object_or_404 from django.template.context import RequestContext from vcweb.core import dumps from vcweb.core.decorators import participant_required @@ -24,14 +24,13 @@ raise Http404 # sends view model JSON to the template to be processed by knockout - return render_to_response('boundaries/participate.html', { + return render(request, 'boundaries/participate.html', { 'auth_token': participant.authentication_token, 'experiment': experiment, 'participant_experiment_relationship': experiment.get_participant_experiment_relationship(participant), 'participant_group_relationship': pgr, 'experimentModelJson': get_view_model_json(experiment, pgr), - }, - context_instance=RequestContext(request)) + }) @participant_required def submit_harvest_decision(request, experiment_id=None): diff -r 898a737430938ef8b03991a745c2247fa4a0d203 -r e16bd84737999a18f46363ff77e15594a8281510 vcweb/core/ajax.py --- a/vcweb/core/ajax.py +++ b/vcweb/core/ajax.py @@ -87,10 +87,13 @@ @experimenter_required @dajaxice_register -def submit_experimenter_notes(request, experiment_id, notes=None): +def save_experimenter_notes(request, experiment_id, notes=None): experiment = _get_experiment(request, experiment_id) - if notes: - current_round_data = experiment.current_round_data + current_round_data = experiment.current_round_data + current_experimenter_notes = current_round_data.experimenter_notes + if notes and notes != current_round_data.experimenter_notes: + if current_experimenter_notes: + experiment.log("Replacing existing experimenter notes: %s" % current_experimenter_notes) current_round_data.experimenter_notes = notes current_round_data.save() return dumps({ 'success': True }) diff -r 898a737430938ef8b03991a745c2247fa4a0d203 -r e16bd84737999a18f46363ff77e15594a8281510 vcweb/core/models.py --- a/vcweb/core/models.py +++ b/vcweb/core/models.py @@ -827,6 +827,7 @@ rc = round_data.round_configuration all_round_data.append({ 'roundDataId': "roundData_%s" % round_data.pk, + 'experimenterNotes': round_data.experimenter_notes, 'roundType': rc.get_round_type_display(), 'roundNumber':rc.round_number, 'groupDataValues': group_data_values, diff -r 898a737430938ef8b03991a745c2247fa4a0d203 -r e16bd84737999a18f46363ff77e15594a8281510 vcweb/core/templates/experimenter/monitor.html --- a/vcweb/core/templates/experimenter/monitor.html +++ b/vcweb/core/templates/experimenter/monitor.html @@ -79,11 +79,14 @@ <span data-bind='text: $data'></span></div></div> - <h4>Notes</h4> - <form id="experimenterLogForm" class='form-horizontal'> - <div class='controls-row'> + {% comment %} + FIXME: might want to put this functionality into each round data object + {% endcomment %} + <h4>Experimenter Notes (<span data-bind='text: roundSequenceLabel'></span>)</h4> + <form id="experimenterNotesForm" class='form-inline'> + <div class='controls'><textarea class='input-block-level' id='experimenterNotes' data-bind='text: experimenterNotes' placeholder="Experimenter notes to be stored with this round's data" rows="3" id='experimenterNote'></textarea> - <button id='submitExperimenterNotesButton' class='btn btn-primary' type='submit' data-bind='click: submitExperimenterNotes'>Save</button> + <button id='submitExperimenterNotesButton' class='btn btn-primary' type='submit' data-bind='click: saveExperimenterNotes'>Save</button></div></form></div> @@ -99,6 +102,11 @@ </div><div data-bind='attr: { id: roundDataId }' class='accordion-body collapse'><div class='accordion-inner'> + <div data-bind='if: experimenterNotes'> + <h4>Experimenter Notes</h4> + <div class='alert alert-message' data-bind='text: experimenterNotes'> + </div> + </div><table class='table table-striped table-bordered'><caption>Group data</caption><thead> @@ -161,14 +169,14 @@ {% include "includes/experimenter.events.html" %} {% include "includes/sockjs.html" %} <script type='text/javascript'> - var experimentModelJson = $.parseJSON("{{ experiment.to_json|escapejs }}"); + var experimentModelJson = $.parseJSON("{{ experimentModelJson|escapejs }}"); $(function() { function ExperimentModel(experimentModelJson) { var self = this; var model = ko.mapping.fromJS(experimentModelJson); - model.submitExperimenterNotes = function(localModel, evt) { + model.saveExperimenterNotes = function(localModel, evt) { var notes = $('#experimenterNotes').val(); - Dajaxice.vcweb.core.submit_experimenter_notes(function(data) { + Dajaxice.vcweb.core.save_experimenter_notes(function(data) { if (data.success) { $('#submitExperimenterNotesButton').val('Saved!'); } diff -r 898a737430938ef8b03991a745c2247fa4a0d203 -r e16bd84737999a18f46363ff77e15594a8281510 vcweb/core/urls.py --- a/vcweb/core/urls.py +++ b/vcweb/core/urls.py @@ -1,7 +1,7 @@ from django.conf.urls.defaults import patterns, url from django.contrib.auth.decorators import login_required from vcweb import settings -from vcweb.core.views import (Dashboard, LoginView, LogoutView, RegistrationView, MonitorExperimentView, CloneExperimentView, +from vcweb.core.views import (Dashboard, LoginView, LogoutView, RegistrationView, monitor, CloneExperimentView, RegisterEmailListView, RegisterSimpleParticipantsView, ClearParticipantsExperimentView, add_experiment, Participate, download_data, export_configuration, api_logger, participant_ready) @@ -22,7 +22,7 @@ url(r'^participate/(?P<namespace>\w+)/instructions', 'instructions', name='namespace_instructions'), url(r'^experiment/add$', add_experiment, name='add_experiment'), url(r'^experiment/participant-ready$', participant_ready, name='participant_ready'), - url(r'^experiment/(?P<pk>\d+)/monitor$', MonitorExperimentView.as_view(), name='monitor_experiment'), + url(r'^experiment/(?P<pk>\d+)/monitor$', monitor, name='monitor_experiment'), url(r'^experiment/(?P<pk>\d+)/register-email-list$', RegisterEmailListView.as_view(), name='register_email_list'), url(r'^experiment/(?P<pk>\d+)/register-simple$', RegisterSimpleParticipantsView.as_view(), name='register_simple'), url(r'^experiment/(?P<pk>\d+)/clone$', CloneExperimentView.as_view(), name='clone'), diff -r 898a737430938ef8b03991a745c2247fa4a0d203 -r e16bd84737999a18f46363ff77e15594a8281510 vcweb/core/views.py --- a/vcweb/core/views.py +++ b/vcweb/core/views.py @@ -3,7 +3,7 @@ from django.core.urlresolvers import reverse from django.core.exceptions import PermissionDenied from django.http import HttpResponse, Http404 -from django.shortcuts import render_to_response, redirect, get_object_or_404 +from django.shortcuts import render, redirect, get_object_or_404 from django.template.context import RequestContext from django.utils.decorators import method_decorator from django.views.generic import ListView, FormView, TemplateView @@ -199,7 +199,7 @@ form = ParticipantAccountForm() else: form = ExperimenterAccountForm(instance=user.experimenter) - return render_to_response('account/profile.html', { 'form': form }, context_instance=RequestContext(request)) + return render(request, 'account/profile.html', { 'form': form }) ''' participant views ''' class ParticipantMixin(object): @@ -210,8 +210,7 @@ @login_required def instructions(request, namespace=None): if namespace is not None: - return render_to_response('%s/instructions.html' % namespace, - context_instance=RequestContext(request)) + return render(request, '%s/instructions.html' % namespace) else: return redirect('home') @@ -241,7 +240,7 @@ def get_object(self, queryset=None): pk = self.kwargs.get('pk', None) - experiment = get_object_or_404(Experiment, pk=pk) + experiment = get_object_or_404(Experiment.objects.select_related('experiment_metadata', 'experiment_configuration', 'experimenter'), pk=pk) return self.check_user(experiment) class ParticipantSingleExperimentMixin(SingleExperimentMixin, ParticipantMixin): @@ -266,10 +265,14 @@ self.experiment = self.object = self.get_object() self.process() context = self.get_context_data(object=self.object) - return self.render_to_response(context) + return self.render(request, context) -class MonitorExperimentView(ExperimenterSingleExperimentMixin, DetailView): - template_name = 'experimenter/monitor.html' +def monitor(request, pk=None): + experiment = get_object_or_404(Experiment.objects.select_related('experiment_configuration', 'experimenter'), pk=pk) + return render(request, 'experimenter/monitor.html', { + 'experiment': experiment, + 'experimentModelJson': experiment.to_json(), + }) def upload_excel_participants_file(request): if request.method == 'POST': @@ -340,9 +343,8 @@ @experimenter_required def add_experiment(request): - return render_to_response('experimenter/add-experiment.html', - { 'experiment_list': ExperimentMetadata.objects.all() }, - context_instance=RequestContext(request)) + return render('experimenter/add-experiment.html', + { 'experiment_list': ExperimentMetadata.objects.all() }) class DataExportMixin(ExperimenterSingleExperimentMixin): file_extension = '.csv' @@ -531,6 +533,5 @@ return JsonResponse(dumps({'success': valid_form})) def handler500(request): - logger.debug("handling 500 request") - return render_to_response('500.html', context_instance=RequestContext(request)) + return render(request, '500.html') https://bitbucket.org/virtualcommons/vcweb/commits/da8dc042e5ba/ changeset: da8dc042e5ba user: alllee date: 2013-03-20 23:14:28 summary: adding experimenter update function affected #: 2 files diff -r e16bd84737999a18f46363ff77e15594a8281510 -r da8dc042e5ba1444e21a2ef597e8f1fc5aa29508 vcweb/core/models.py --- a/vcweb/core/models.py +++ b/vcweb/core/models.py @@ -1270,8 +1270,7 @@ 'date_created': self.date_created, 'short_date_created': self.date_created.strftime('%I:%M:%S'), 'parameter_name': p.name, - 'parameter_label': p.label, - 'parameter': self.parameter + 'parameter_label': p.label } data['value'] = unicode(self.cached_value if cacheable else self.value) return data diff -r e16bd84737999a18f46363ff77e15594a8281510 -r da8dc042e5ba1444e21a2ef597e8f1fc5aa29508 vcweb/core/templates/experimenter/monitor.html --- a/vcweb/core/templates/experimenter/monitor.html +++ b/vcweb/core/templates/experimenter/monitor.html @@ -14,7 +14,8 @@ <div class='btn-group'><a class='btn btn-success confirm-experiment-action' data-bind="css: { disabled: isRoundInProgress }" data-action='start_round' data-content='Starts the round.'><i class='icon-play'></i> start</a><a class='btn btn-success' data-bind='click: advanceToNextRound' data-action='advance_to_next_round' data-content='Advances to and starts the next round.'><i class='icon-step-forward'></i> next round</a> - <a class='btn btn-success' data-bind='click: refreshAllParticipants' data-content='Sends a page refresh to all connected participants.' ><i class='icon-refresh'></i> refresh participants</a> + <a class='btn btn-success' data-bind='click: refreshAllParticipants' data-content='Sends a page refresh to all connected participants.' ><i class='icon-exchange'></i> refresh participants</a> + <a class='btn btn-primary' data-bind='click: update' data-content='Refresh this page with the latest data from the server.' ><i class='icon-refresh'></i> update</a></div></div></li> @@ -85,7 +86,7 @@ <h4>Experimenter Notes (<span data-bind='text: roundSequenceLabel'></span>)</h4><form id="experimenterNotesForm" class='form-inline'><div class='controls'> - <textarea class='input-block-level' id='experimenterNotes' data-bind='text: experimenterNotes' placeholder="Experimenter notes to be stored with this round's data" rows="3" id='experimenterNote'></textarea> + <textarea class='input-block-level' id='experimenterNotes' data-bind='text: experimenterNotes' placeholder="Experimenter notes to be stored with this round's data" rows="3"></textarea><button id='submitExperimenterNotesButton' class='btn btn-primary' type='submit' data-bind='click: saveExperimenterNotes'>Save</button></div></form> @@ -169,6 +170,7 @@ {% include "includes/experimenter.events.html" %} {% include "includes/sockjs.html" %} <script type='text/javascript'> +// FIXME: we should verify if exposing this here is the "right" thing to do. var experimentModelJson = $.parseJSON("{{ experimentModelJson|escapejs }}"); $(function() { function ExperimentModel(experimentModelJson) { @@ -181,7 +183,11 @@ $('#submitExperimenterNotesButton').val('Saved!'); } }, - { 'experiment_id': {{ experiment.pk }}, 'notes': notes }); + { experiment_id: {{ experiment.pk }}, notes: notes }); + } + model.update = function(localModel, evt) { + $('#progress-modal').modal('show'); + Dajaxice.vcweb.core.get_experiment_model(update(model), {pk: {{experiment.pk}}}); } model.advanceToNextRound = function(localModel, evt) { confirmExperimentControllerAction(evt.target, model, function(confirmed) { @@ -210,7 +216,7 @@ function confirmExperimentControllerAction(element, experimentModel, callback) { confirmExperimentAction(element, function(confirmed, action) { $('#progress-modal').modal('show'); - Dajaxice.vcweb.core.experiment_controller(update(experimentModel), {'pk': {{experiment.pk}}, 'action':action}); + Dajaxice.vcweb.core.experiment_controller(update(experimentModel), {pk: {{experiment.pk}}, 'action':action}); if (callback) { callback(confirmed, action); } Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |