From 478cbfbe960c834f12fa256939709020b02e9f0e Mon Sep 17 00:00:00 2001
From: "J.-S. Caux" <J.S.Caux@uva.nl>
Date: Tue, 29 Mar 2016 19:54:51 +0200
Subject: [PATCH] Moved permissions from Meta of Contributor to management
 command add_groups_and_permissions

---
 journals/models.py                            |  1 -
 scipost/admin.py                              |  4 +-
 .../commands/add_groups_and_permissions.py    | 62 +++++++++++++++----
 scipost/models.py                             | 11 ----
 scipost/utils.py                              |  3 -
 submissions/models.py                         |  7 ++-
 6 files changed, 57 insertions(+), 31 deletions(-)

diff --git a/journals/models.py b/journals/models.py
index 69542a2f2..d7c4ca685 100644
--- a/journals/models.py
+++ b/journals/models.py
@@ -2,7 +2,6 @@ from django.utils import timezone
 from django.db import models
 from django.contrib.auth.models import User
 
-from .models import *
 
 
 SCIPOST_JOURNALS = (
diff --git a/scipost/admin.py b/scipost/admin.py
index 29e7c8cce..0c57c906b 100644
--- a/scipost/admin.py
+++ b/scipost/admin.py
@@ -1,7 +1,7 @@
 from django.contrib import admin
 
 from django.contrib.auth.admin import UserAdmin
-from django.contrib.auth.models import User
+from django.contrib.auth.models import User, Permission
 
 from scipost.models import *
 
@@ -24,3 +24,5 @@ admin.site.register(RegistrationInvitation)
 
 admin.site.register(AuthorshipClaim)
 #admin.site.register(Opinion)
+
+admin.site.register(Permission)
diff --git a/scipost/management/commands/add_groups_and_permissions.py b/scipost/management/commands/add_groups_and_permissions.py
index 1216016bb..1dcd07542 100644
--- a/scipost/management/commands/add_groups_and_permissions.py
+++ b/scipost/management/commands/add_groups_and_permissions.py
@@ -1,33 +1,71 @@
 from django.core.management.base import BaseCommand, CommandError
 
 from django.contrib.auth.models import Group, Permission
+from django.contrib.contenttypes.models import ContentType
+
+from scipost.models import Contributor
 
 class Command(BaseCommand):
     help = 'Defines groups and permissions'
 
     def handle(self, *args, **options):
+        # Create Groups
         SciPostAdmin, created = Group.objects.get_or_create(name='SciPost Administrators')
         AdvisoryBoard, created = Group.objects.get_or_create(name='Advisory Board')
         EditorialCollege, created = Group.objects.get_or_create(name='Editorial College')
         VettingEditors, created = Group.objects.get_or_create(name='Vetting Editors')
         RegisteredContributors, created = Group.objects.get_or_create(name='Registered Contributors')
+
+        # Create Permissions
+        content_type = ContentType.objects.get_for_model(Contributor)
         # Registration
-        can_manage_registration_invitations = Permission.objects.get(codename='can_manage_registration_invitations')
-        can_vet_registration_requests = Permission.objects.get(codename='can_vet_registration_requests')
+        can_manage_registration_invitations, created = Permission.objects.get_or_create(
+            codename='can_manage_registration_invitations',
+            name= 'Can manage registration invitations',
+            content_type=content_type)
+        can_vet_registration_requests, created = Permission.objects.get_or_create(
+            codename='can_vet_registration_requests',
+            name= 'Can vet registration requests',
+            content_type=content_type)
         # Vetting of simple objects
-        can_vet_commentary_requests = Permission.objects.get(codename='can_vet_commentary_requests')
-        can_vet_thesislink_requests = Permission.objects.get(codename='can_vet_thesislink_requests')
-        can_vet_authorship_claims = Permission.objects.get(codename='can_vet_authorship_claims')
-        can_vet_comments = Permission.objects.get(codename='can_vet_comments')
+        can_vet_commentary_requests, created = Permission.objects.get_or_create(
+            codename='can_vet_commentary_requests',
+            name= 'Can vet Commentary page requests',
+            content_type=content_type)
+        can_vet_thesislink_requests, created = Permission.objects.get_or_create(
+            codename='can_vet_thesislink_requests',
+            name= 'Can vet Thesis Link requests',
+            content_type=content_type)
+        can_vet_authorship_claims, created = Permission.objects.get_or_create(
+            codename='can_vet_authorship_claims',
+            name= 'Can vet Authorship claims',
+            content_type=content_type)
+        can_vet_comments, created = Permission.objects.get_or_create(
+            codename='can_vet_comments',
+            name= 'Can vet submitted Comments',
+            content_type=content_type)
         # Submission handling
-        can_process_incoming_submissions = Permission.objects.get(codename='can_process_incoming_submissions')
-        can_vet_submitted_reports = Permission.objects.get(codename='can_vet_submitted_reports')
+        can_process_incoming_submissions, created = Permission.objects.get_or_create(
+            codename='can_process_incoming_submissions',
+            name= 'Can process incoming Submissions',
+            content_type=content_type)
+        can_vet_submitted_reports, created = Permission.objects.get_or_create(
+            codename='can_vet_submitted_reports', 
+            name='Can vet submitted Reports', 
+            content_type=content_type)
+
+        # Assign permissions to groups
         SciPostAdmin.permissions.add(can_manage_registration_invitations,
                                      can_vet_registration_requests,
-                                     can_vet_commentary_requests, can_vet_thesislink_requests,
-                                     can_vet_authorship_claims, can_vet_comments,
+                                     can_vet_commentary_requests, 
+                                     can_vet_thesislink_requests,
+                                     can_vet_authorship_claims, 
+                                     can_vet_comments,
                                      )
-        VettingEditors.permissions.add(can_vet_commentary_requests, can_vet_thesislink_requests,
-                                       can_vet_authorship_claims, can_vet_comments,
+        VettingEditors.permissions.add(can_vet_commentary_requests, 
+                                       can_vet_thesislink_requests,
+                                       can_vet_authorship_claims, 
+                                       can_vet_comments,
                                        )
+
         self.stdout.write(self.style.SUCCESS('Successfully created groups and permissions'))
diff --git a/scipost/models.py b/scipost/models.py
index 182ed707d..7144644b0 100644
--- a/scipost/models.py
+++ b/scipost/models.py
@@ -56,17 +56,6 @@ class Contributor(models.Model):
     personalwebpage = models.URLField(verbose_name='personal web page', blank=True)
     vetted_by = models.OneToOneField('self', blank=True, null=True)
 
-    class Meta:
-        permissions = (
-            ('can_manage_registration_invitations', 'Can manage registration invitations'),
-            ('can_vet_registration_requests', 'Can vet registration requests'),
-            ('can_vet_commentary_requests', 'Can vet Commentary page requests'),
-            ('can_vet_thesislink_requests', 'Can vet Thesis Link requests'),
-            ('can_vet_authorship_claims', 'Can vet Authorship claims'),
-            ('can_vet_comments', 'Can vet submitted comments'),
-            ('can_process_incoming_submissions', 'Can process incoming Submissions'),
-            ('can_vet_submitted_reports', 'Can vet submitted Reports'),
-            )
 
     def __str__ (self):
         return self.user.last_name + ', ' + self.user.first_name
diff --git a/scipost/utils.py b/scipost/utils.py
index 28905f64f..26f7d492a 100644
--- a/scipost/utils.py
+++ b/scipost/utils.py
@@ -1,6 +1,3 @@
-#!/usr/bin/env python
-# -*- coding: latin-1 -*-
-
 import datetime
 import hashlib
 import random
diff --git a/submissions/models.py b/submissions/models.py
index 107e98f1d..fc0385b06 100644
--- a/submissions/models.py
+++ b/submissions/models.py
@@ -4,9 +4,10 @@ from django.contrib.auth.models import User
 
 from .models import *
 
-from scipost.models import *
-from journals.models import *
-
+from scipost.models import Contributor
+from scipost.models import SCIPOST_DISCIPLINES
+from journals.models import SCIPOST_JOURNALS_SUBMIT, SCIPOST_JOURNALS_DOMAINS, SCIPOST_JOURNALS_SPECIALIZATIONS
+from journals.models import journals_submit_dict, journals_domains_dict, journals_spec_dict
 
 
 ###############
-- 
GitLab