From 0ca09a9483a11afa0a1eae23e158a971834d1f75 Mon Sep 17 00:00:00 2001
From: Fabien Quatravaux <fabien.quatravaux@riseup.net>
Date: Wed, 10 Jun 2020 17:42:49 +0200
Subject: [PATCH] update: modify fields to match Person ontology

---
 djangoldp_profile/models.py | 86 ++++++++++++++++++++++++++-----------
 1 file changed, 61 insertions(+), 25 deletions(-)

diff --git a/djangoldp_profile/models.py b/djangoldp_profile/models.py
index 0703065..761cc68 100644
--- a/djangoldp_profile/models.py
+++ b/djangoldp_profile/models.py
@@ -6,14 +6,38 @@ from django.dispatch import receiver
 
 from djangoldp.models import Model
 
+class Contact(Model):
+    fullName = models.CharField(max_length=255)
+    givenName = models.CharField(max_length=255, blank=True)
+    familyName = models.CharField(max_length=255, blank=True)
+    email = models.EmailField(max_length=254, blank=True)
+    phone = models.CharField(max_length=255, blank=True)
+    role = models.CharField(max_length=255, blank=True)
+
+    class Meta(Model.Meta):
+        anonymous_perms = ['view']
+        authenticated_perms = ['inherit']
+        owner_perms = ['inherit', 'change']
+        rdf_type = 'vcard:Individual'
+        rdf_context = {
+            'fullName': 'vcard:fn',
+            'givenName': 'vcard:given-name',
+            'familyName': 'vcard:family-name',
+            'email': 'vcard:hasEmail',
+            'phone': 'vcard:hasTelephone',
+            'role': 'vcard:role'
+        }
+    def __str__(self):
+        return self.fullName
 
 class Profile(Model):
     user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="profile")
+    contact = models.OneToOneField(Contact, on_delete=models.CASCADE, related_name="profile", blank=True, null=True)
+    bio = models.CharField(max_length=2048, blank=True)
     slug = models.SlugField(unique=True, blank=True)
     available = models.NullBooleanField(blank=True)
     job = models.CharField(max_length=150, blank=True)
     city = models.CharField(max_length=255, blank=True)
-    phone = models.CharField(max_length=255, blank=True)
     website = models.URLField(blank=True)
 
     def jabberID(self):
@@ -22,41 +46,53 @@ class Profile(Model):
         except:
             return None
 
+    def name(self):
+        try:
+            return self.contact.fullName
+        except:
+            return None
+
+    def givenName(self):
+        try:
+            return self.contact.givenName
+        except:
+            return None
+
+    def familyName(self):
+        try:
+            return self.contact.familyName
+        except:
+            return None
+
+    def phone(self):
+        try:
+            return self.contact.phone
+        except:
+            return None
+
     class Meta:
         auto_author = 'user'
         anonymous_perms = ['view']
         authenticated_perms = ['inherit']
         owner_perms = ['inherit', 'change']
         lookup_field = 'slug'
+        rdf_type = 'foaf:Person'
+        rdf_context = {
+            'foaf': "http://xmlns.com/foaf/0.1/",
+            'user': 'foaf:account',
+            'name': 'foaf:name',
+            'givenName': 'foaf:givenName',
+            'familyName': 'foaf:familyName',
+            'bio': 'bio:biography',
+            'phone': 'foaf:phone',
+            'jabberID': 'foaf:jabberID',
+            'website': 'foaf:homepage'
+        }
 
 
     def __str__(self):
         return '{} ({})'.format(self.user.get_full_name(), self.user.username)
 
-class Contact(Model):
-    fullName = models.CharField(max_length=255)
-    givenName = models.CharField(max_length=255, blank=True)
-    familyName = models.CharField(max_length=255, blank=True)
-    email = models.EmailField(max_length=254, blank=True)
-    phone = models.CharField(max_length=255, blank=True)
-    role = models.CharField(max_length=255, blank=True)
-
-    class Meta(Model.Meta):
-        anonymous_perms = []
-        authenticated_perms = []
-        owner_perms = []
-        rdf_type = 'vcard:Individual'
-        rdf_context = {
-            'fullName': 'vcard:fn',
-            'givenName': 'vcard:given-name',
-            'familyName': 'vcard:family-name',
-            'email': 'vcard:hasEmail',
-            'phone': 'vcard:hasTelephone',
-            'role': 'vcard:role'
-        }
-    def __str__(self):
-        return self.fullName
-
 @receiver(post_save, sender=settings.AUTH_USER_MODEL)
 def create_user_profile(sender, instance, created, **kwargs):
     if created:
-- 
GitLab