[damned-lies] Allow possible usage of gravatar.com face image



commit 595009486d233deae4b3b70bc35b8c9d0bbb048f
Author: Claude Paroz <claude 2xlibre net>
Date:   Mon Mar 24 18:06:01 2014 +0100

    Allow possible usage of gravatar.com face image

 people/forms.py                              |    3 +-
 people/migrations/0002_add_gravatar_field.py |   72 ++++++++++++++++++++++++++
 people/models.py                             |    2 +
 people/templatetags/people.py                |   12 ++++-
 4 files changed, 87 insertions(+), 2 deletions(-)
---
diff --git a/people/forms.py b/people/forms.py
index 0ffb0ea..0684fc9 100644
--- a/people/forms.py
+++ b/people/forms.py
@@ -91,7 +91,8 @@ class RegistrationForm(forms.Form):
 class DetailForm(forms.ModelForm):
     class Meta:
         model = Person
-        fields = ('first_name', 'last_name', 'email', 'image', 'webpage_url', 'irc_nick', 'bugzilla_account')
+        fields = ('first_name', 'last_name', 'email', 'image', 'use_gravatar',
+                  'webpage_url', 'irc_nick', 'bugzilla_account')
 
     def clean_image(self):
         url = self.cleaned_data['image']
diff --git a/people/migrations/0002_add_gravatar_field.py b/people/migrations/0002_add_gravatar_field.py
new file mode 100644
index 0000000..a6a0934
--- /dev/null
+++ b/people/migrations/0002_add_gravatar_field.py
@@ -0,0 +1,72 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        # Adding field 'Person.use_gravatar'
+        db.add_column('person', 'use_gravatar',
+                      self.gf('django.db.models.fields.BooleanField')(default=False),
+                      keep_default=False)
+
+
+    def backwards(self, orm):
+        # Deleting field 'Person.use_gravatar'
+        db.delete_column('person', 'use_gravatar')
+
+
+    models = {
+        u'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': 
u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        u'auth.permission': {
+            'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 
'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': 
u"orm['contenttypes.ContentType']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        u'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 
'datetime.datetime.now'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 
'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 
'datetime.datetime.now'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 
'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        u'contenttypes.contenttype': {
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 
'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        u'people.person': {
+            'Meta': {'ordering': "('username',)", 'object_name': 'Person', 'db_table': "'person'", 
'_ormbases': [u'auth.User']},
+            'activation_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 
'blank': 'True'}),
+            'bugzilla_account': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 
'True', 'blank': 'True'}),
+            'image': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 
'True'}),
+            'irc_nick': ('django.db.models.fields.SlugField', [], {'max_length': '20', 'null': 'True', 
'blank': 'True'}),
+            'svn_account': ('django.db.models.fields.SlugField', [], {'max_length': '20', 'null': 'True', 
'blank': 'True'}),
+            'use_gravatar': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            u'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['auth.User']", 
'unique': 'True', 'primary_key': 'True'}),
+            'webpage_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 
'blank': 'True'})
+        }
+    }
+
+    complete_apps = ['people']
\ No newline at end of file
diff --git a/people/models.py b/people/models.py
index 5ddac2d..e102739 100644
--- a/people/models.py
+++ b/people/models.py
@@ -40,6 +40,8 @@ class Person(User):
     svn_account = models.SlugField(max_length=20, null=True, blank=True)
     image = models.URLField(_("Image"), null=True, blank=True,
                             help_text=_("URL to an image file (.jpg, .png, ...) of an hackergotchi (max. 
100x100 pixels)"))
+    use_gravatar = models.BooleanField(default=False,
+        help_text=_("Display the image of your gravatar.com account"))
     webpage_url = models.URLField(_("Web page"), null=True, blank=True)
     irc_nick = models.SlugField(_("IRC nickname"), max_length=20, null=True, blank=True)
     bugzilla_account = models.EmailField(_("Bugzilla account"), null=True, blank=True,
diff --git a/people/templatetags/people.py b/people/templatetags/people.py
index ce363e6..144335f 100644
--- a/people/templatetags/people.py
+++ b/people/templatetags/people.py
@@ -1,5 +1,8 @@
+import hashlib
+
 from django import template
 from django.conf import settings
+from django.utils.http import urlencode
 from django.utils.safestring import mark_safe
 from django.utils.translation import ugettext as _
 
@@ -18,7 +21,14 @@ def people_list(lst):
 
 @register.filter
 def people_image(person):
-    if person.image:
+    if person.use_gravatar:
+        digest = hashlib.md5(person.email.lower().encode("utf-8")).hexdigest()
+        tag = '<img src="https://secure.gravatar.com/avatar/%(hash)s.jpg?%(qs)s" alt="gravatar icon">' % {
+            'hash': digest,
+            # Size, default image, rating
+            'qs': urlencode({'s': '80', 'd': 'identicon', 'r': 'g'}),
+        }
+    elif person.image:
         tag = '<img src="%s" alt="%s">' % (person.image, person.name)
     else:
         tag = '<img src="%simg/nobody.png" alt="generic person icon">' % settings.STATIC_URL


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]