Skip to content

Commit

Permalink
Merge branch 'master' into v1.2
Browse files Browse the repository at this point in the history
  • Loading branch information
ajrbyers committed Nov 20, 2017
2 parents 5a038e8 + d6905dc commit ab59493
Show file tree
Hide file tree
Showing 54 changed files with 875 additions and 299 deletions.
1 change: 1 addition & 0 deletions src/core/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ class FileAdmin(admin.ModelAdmin):
(models.Country, CountryAdmin),
(models.WorkflowElement,),
(models.HomepageElement, HomepageElementAdmin),
(models.LoginAttempt,),
]

[admin.site.register(*t) for t in admin_list]
8 changes: 7 additions & 1 deletion src/core/example_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': {'init_command': 'SET storage_engine=INNODB'},
'OPTIONS': {'init_command': 'SET default_storage_engine=INNODB'},
}
}

Expand Down Expand Up @@ -310,6 +310,12 @@ def filter(self, record):
EMAIL_HOST_PASSWORD = ''
EMAIL_USE_TLS = True

# Settings for use with Mailgun
MAILGUN_ACCESS_KEY = ''
MAILGUN_SERVER_NAME = ''
MAILGUN_REQUIRE_TLS = False
ENABLE_ENHANCED_MAILGUN_FEATURES = False # Enables email tracking


DATE_FORMT = "Y-m-d"
DATETIME_FORMAT = "Y-m-d H:i"
Expand Down
12 changes: 10 additions & 2 deletions src/core/logic.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,24 +28,32 @@

def send_reset_token(request, reset_token):
context = {'reset_token': reset_token}
log_dict = {'level': 'Info', 'types': 'Reset Token', 'target': None}
if not request.journal:
message = render_template.get_message_content(request, context, request.press.password_reset_text,
template_is_setting=True)
subject = 'Password Reset'
else:
message = render_template.get_message_content(request, context, 'password_reset')
notify_helpers.send_email_with_body_from_user(request, 'subject_password_reset', reset_token.account.email, message)
subject = 'subject_password_reset'

notify_helpers.send_email_with_body_from_user(request, subject, reset_token.account.email, message,
log_dict=log_dict)


def send_confirmation_link(request, new_user):
context = {'user': new_user}
if not request.journal:
message = render_template.get_message_content(request, context, request.press.registration_text,
template_is_setting=True)
subject = 'Registration Confirmation'
else:
message = render_template.get_message_content(request, context, 'new_user_registration')
subject = 'subject_new_user_registration'

notify_helpers.send_slack(request, 'New registration: {0}'.format(new_user.full_name()), ['slack_admins'])
notify_helpers.send_email_with_body_from_user(request, 'subject_new_user_registration', new_user.email, message)
log_dict = {'level': 'Info', 'types': 'Account Confirmation', 'target': None}
notify_helpers.send_email_with_body_from_user(request, subject, new_user.email, message, log_dict=log_dict)


def resize_and_crop(img_path, size, crop_type='middle'):
Expand Down
4 changes: 2 additions & 2 deletions src/core/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@
url(r'^logout/$', core_views.user_logout, name='core_logout'),
url(r'^dashboard/$', core_views.dashboard, name='core_dashboard'),
url(r'^dashboard/article/(?P<article_id>\d+)/$', core_views.dashboard_article, name='core_dashboard_article'),
url(r'^cover/$', press_views.serve_press_cover, name='press_cover_download'),
url(r'^press/cover/$', press_views.serve_press_cover, name='press_cover_download'),

# Notes
url(r'^article/(?P<article_id>\d+)/note/(?P<note_id>\d+)/delete/$', core_views.delete_note,
Expand Down Expand Up @@ -294,7 +294,7 @@
url(r'^(?P<journal_code>[-\w.]+)/dashboard/$', core_views.dashboard, name='core_dashboard'),
url(r'^(?P<journal_code>[-\w.]+)/dashboard/article/(?P<article_id>\d+)/$', core_views.dashboard_article,
name='core_dashboard_article'),
url(r'^(?P<journal_code>[-\w.]+)/cover/$', press_views.serve_press_cover, name='press_cover_download'),
url(r'^(?P<journal_code>[-\w.]+)/press/cover/$', press_views.serve_press_cover, name='press_cover_download'),

# Notes
url(r'^(?P<journal_code>[-\w.]+)/article/(?P<article_id>\d+)/note/(?P<note_id>\d+)/delete/$',
Expand Down
40 changes: 19 additions & 21 deletions src/core/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,29 +67,27 @@ def user_login(request):
user = authenticate(username=user, password=pawd)

if user is not None:
if user.is_active:
login(request, user)
messages.info(request, 'Login successful.')
logic.clear_bad_login_attempts(request)

orcid_token = request.POST.get('orcid_token', None)
if orcid_token:
try:
token_obj = models.OrcidToken.objects.get(token=orcid_token, expiry__gt=timezone.now())
user.orcid = token_obj.orcid
user.save()
token_obj.delete()
except models.OrcidToken.DoesNotExist:
pass

if request.GET.get('next'):
return redirect(request.GET.get('next'))
else:
return redirect(reverse('website_index'))
login(request, user)
messages.info(request, 'Login successful.')
logic.clear_bad_login_attempts(request)

orcid_token = request.POST.get('orcid_token', None)
if orcid_token:
try:
token_obj = models.OrcidToken.objects.get(token=orcid_token, expiry__gt=timezone.now())
user.orcid = token_obj.orcid
user.save()
token_obj.delete()
except models.OrcidToken.DoesNotExist:
pass

if request.GET.get('next'):
return redirect(request.GET.get('next'))
else:
messages.add_message(request, messages.ERROR, 'User account is not active.')
return redirect(reverse('website_index'))
else:
messages.add_message(request, messages.ERROR, 'Account not found with those details.')
messages.add_message(request, messages.ERROR, 'Account not found or account not active. Please ensure'
'you have activated your account.')
util_models.LogEntry.add_entry(types='Authentication',
description='Failed login attempt for user {0}'.format(
request.POST.get('user_name')),
Expand Down
25 changes: 25 additions & 0 deletions src/journal/migrations/0006_auto_20171115_1216.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.5 on 2017-11-15 12:16
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('journal', '0005_auto_20171002_1503'),
]

operations = [
migrations.AlterField(
model_name='journal',
name='code',
field=models.CharField(max_length=10),
),
migrations.AlterField(
model_name='journal',
name='domain',
field=models.CharField(default='www.example.com', max_length=255, unique=True),
),
]
10 changes: 8 additions & 2 deletions src/journal/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ def issue_large_image_path(instance, filename):


class Journal(models.Model):
code = models.CharField(max_length=4)
domain = models.CharField(max_length=255, default='localhost', unique=True)
code = models.CharField(max_length=10)
domain = models.CharField(max_length=255, default='www.example.com', unique=True)
current_issue = models.ForeignKey('Issue', related_name='current_issue', null=True, blank=True)
carousel = models.OneToOneField('carousel.Carousel', related_name='journal', null=True, blank=True)
thumbnail_image = models.ForeignKey('core.File', null=True, blank=True, related_name='thumbnail_image',
Expand Down Expand Up @@ -513,3 +513,9 @@ def create_sites_folder(sender, instance, created, **kwargs):
if created:
if not os.path.exists(path):
os.makedirs(path)

from submission.models import Section
Section.objects.language('en').get_or_create(journal=instance,
number_of_reviewers=2,
name='Article',
plural='Articles')
5 changes: 5 additions & 0 deletions src/journal/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
from django.utils.translation import ugettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST
from django.core.management import call_command

from cms import models as cms_models
from core import files, models as core_models, plugin_loader
Expand Down Expand Up @@ -1187,6 +1188,10 @@ def manage_article_log(request, article_id):
content_type = ContentType.objects.get_for_model(article)
log_entries = utils_models.LogEntry.objects.filter(content_type=content_type, object_id=article.pk)

if request.POST and settings.ENABLE_ENHANCED_MAILGUN_FEATURES:
call_command('check_mailgun_stat')
return redirect(reverse('manage_article_log', kwargs={'article_id': article.pk}))

template = 'journal/article_log.html'
context = {
'article': article,
Expand Down
57 changes: 57 additions & 0 deletions src/preprint/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from submission import models as submission_models
from preprint import models
from press import models as press_models
from review.forms import render_choices


class PreprintInfo(forms.ModelForm):
Expand All @@ -22,6 +23,7 @@ class Meta:
}

def __init__(self, *args, **kwargs):
elements = kwargs.pop('additional_fields', None)
super(PreprintInfo, self).__init__(*args, **kwargs)

self.fields['license'].queryset = submission_models.Licence.objects.filter(press__isnull=False,
Expand All @@ -34,6 +36,45 @@ def __init__(self, *args, **kwargs):
if article:
self.fields['subject'].initial = article.get_subject_area()

if elements:
for element in elements:
if element.kind == 'text':
self.fields[element.name] = forms.CharField(
widget=forms.TextInput(attrs={'div_class': element.width}),
required=element.required)
elif element.kind == 'textarea':
self.fields[element.name] = forms.CharField(widget=forms.Textarea,
required=element.required)
elif element.kind == 'date':
self.fields[element.name] = forms.CharField(
widget=forms.DateInput(attrs={'class': 'datepicker', 'div_class': element.width}),
required=element.required)

elif element.kind == 'select':
choices = render_choices(element.choices)
self.fields[element.name] = forms.ChoiceField(
widget=forms.Select(attrs={'div_class': element.width}), choices=choices,
required=element.required)

elif element.kind == 'email':
self.fields[element.name] = forms.EmailField(
widget=forms.TextInput(attrs={'div_class': element.width}),
required=element.required)
elif element.kind == 'check':
self.fields[element.name] = forms.BooleanField(
widget=forms.CheckboxInput(attrs={'is_checkbox': True}),
required=element.required)

self.fields[element.name].help_text = element.help_text
self.fields[element.name].label = element.name

if article:
try:
check_for_answer = submission_models.FieldAnswer.objects.get(field=element, article=article)
self.fields[element.name].initial = check_for_answer.answer
except submission_models.FieldAnswer.DoesNotExist:
pass

def save(self, commit=True, request=None):
article = super(PreprintInfo, self).save()

Expand All @@ -49,6 +90,22 @@ def save(self, commit=True, request=None):
if self.cleaned_data.get('subject', None):
article.set_preprint_subject(self.cleaned_data['subject'])

if request:
additional_fields = submission_models.Field.objects.filter(press=request.press)

for field in additional_fields:
answer = request.POST.get(field.name, None)
print(answer)
if answer:
try:
field_answer = submission_models.FieldAnswer.objects.get(article=article, field=field)
field_answer.answer = answer
field_answer.save()
except submission_models.FieldAnswer.DoesNotExist:
field_answer = submission_models.FieldAnswer.objects.create(article=article,
field=field,
answer=answer)

return article


Expand Down
28 changes: 27 additions & 1 deletion src/preprint/logic.py
Original file line number Diff line number Diff line change
Expand Up @@ -281,4 +281,30 @@ def unpublish_preprint(request, preprint):
preprint.preprint_decision_notification = False
preprint.stage = submission_models.STAGE_PREPRINT_REVIEW
preprint.save()
messages.add_message(request, messages.INFO, 'This preprint has been unpublished')
messages.add_message(request, messages.INFO, 'This preprint has been unpublished')


def get_preprint_article_if_id(request, article_id):
if article_id:
article = get_object_or_404(submission_models.Article.preprints,
pk=article_id,
date_submitted__isnull=True)
else:
article = None

return article


def save_preprint_submit_form(request, form, article, additional_fields):
article = form.save(request=request)
article.owner = request.user
article.is_preprint = True
article.current_step = 1
article.authors.add(request.user)
article.correspondence_author = request.user
article.save()

submission_models.ArticleAuthorOrder.objects.get_or_create(article=article,
author=request.user,
defaults={'order': article.next_author_sort()})
return article
29 changes: 7 additions & 22 deletions src/preprint/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -242,37 +242,22 @@ def preprints_submit(request, article_id=None):
:param request: HttpRequest
:return: HttpResponse or HttpRedirect
"""
if article_id:
article = get_object_or_404(submission_models.Article.preprints,
pk=article_id,
date_submitted__isnull=True)
else:
article = None

form = forms.PreprintInfo(instance=article)
article = preprint_logic.get_preprint_article_if_id(request, article_id)
additional_fields = submission_models.Field.objects.filter(press=request.press)
form = forms.PreprintInfo(instance=article, additional_fields=additional_fields)

if request.POST:
form = forms.PreprintInfo(request.POST, instance=article)
form = forms.PreprintInfo(request.POST, instance=article, additional_fields=additional_fields)

if form.is_valid():
article = form.save()
article.owner = request.user
article.is_preprint = True
article.current_step = 1
article.authors.add(request.user)
article.correspondence_author = request.user
article.save()

submission_models.ArticleAuthorOrder.objects.get_or_create(article=article,
author=request.user,
defaults={'order': article.next_author_sort()})

article = preprint_logic.save_preprint_submit_form(request, form, article, additional_fields)
return redirect(reverse('preprints_authors', kwargs={'article_id': article.pk}))

template = 'preprints/submit_start.html'
context = {
'form': form,
'article': article,
'additional_fields': additional_fields,
}

return render(request, template, context)
Expand Down Expand Up @@ -546,7 +531,7 @@ def preprints_manager_article(request, article_id):

if 'decline' in request.POST:
preprint.decline_article()
return redirect(reverse('preprints_notifictation', kwargs={'article_id': preprint.pk}))
return redirect(reverse('preprints_notification', kwargs={'article_id': preprint.pk}))

if 'upload' in request.POST:
preprint_logic.handle_file_upload(request, preprint)
Expand Down
Loading

0 comments on commit ab59493

Please sign in to comment.