[snowy] Add gravatar support



commit 747178f6b5e15977e6b76b52f6a2bbf4f50e83db
Author: Brad Taylor <brad getcoded net>
Date:   Mon May 18 14:26:48 2009 -0400

    Add gravatar support
    
    Patch from Ray Wang <rawang novell com>
---
 lib/gravatar/models.py                     |    3 ++
 lib/gravatar/templatetags/gravatar.py      |   49 ++++++++++++++++++++++++++++
 lib/gravatar/templatetags/gravatar_tags.py |   49 ++++++++++++++++++++++++++++
 lib/gravatar/views.py                      |    1 +
 settings.py                                |    1 +
 templates/base.html                        |    3 +-
 6 files changed, 105 insertions(+), 1 deletions(-)

diff --git a/lib/gravatar/__init__.py b/lib/gravatar/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/lib/gravatar/models.py b/lib/gravatar/models.py
new file mode 100644
index 0000000..71a8362
--- /dev/null
+++ b/lib/gravatar/models.py
@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.
diff --git a/lib/gravatar/templatetags/__init__.py b/lib/gravatar/templatetags/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/lib/gravatar/templatetags/gravatar.py b/lib/gravatar/templatetags/gravatar.py
new file mode 100644
index 0000000..178b6ce
--- /dev/null
+++ b/lib/gravatar/templatetags/gravatar.py
@@ -0,0 +1,49 @@
+from django import template
+from django.utils.html import escape
+from django.contrib.auth.models import User
+from django.conf import settings
+from django.utils.hashcompat import md5_constructor
+
+import urllib
+
+GRAVATAR_URL_PREFIX = getattr(settings, "GRAVATAR_URL_PREFIX", "http://www.gravatar.com/";)
+GRAVATAR_DEFAULT_IMAGE = getattr(settings, "GRAVATAR_DEFAULT_IMAGE", "")
+
+register = template.Library()
+
+def get_user(user):
+    if not isinstance(user, User):
+        try:
+            user = User.objects.get(username=user)
+        except User.DoesNotExist:
+            # TODO: make better? smarter? strong? maybe give it wheaties?
+            raise Exception, "Bad user for gravatar."
+    return user
+
+def gravatar_for_email(email, size=80):
+    url = "%savatar/%s/?" % (GRAVATAR_URL_PREFIX, md5_constructor(email).hexdigest())
+    url += urllib.urlencode({"s": str(size), "default": GRAVATAR_DEFAULT_IMAGE})
+    return escape(url)
+
+def gravatar_for_user(user, size=80):
+    user = get_user(user)
+    return gravatar_for_email(user.email, size)
+
+def gravatar_img_for_email(email, size=80):
+    url = gravatar_for_email(email, size)
+    return """<img src="%s" height="%s" width="%s"/>""" % (escape(url), size, size)
+
+def gravatar_img_for_user(user, size=80):
+    user = get_user(user)
+    url = gravatar_for_user(user)
+    return """<img src="%s" alt="Avatar for %s" height="%s" width="%s"/>""" % (escape(url), user.username, size, size)
+
+def gravatar(user, size=80):
+    # backward compatibility
+    return gravatar_img_for_user(user, size)
+
+register.simple_tag(gravatar)
+register.simple_tag(gravatar_for_user)
+register.simple_tag(gravatar_for_email)
+register.simple_tag(gravatar_img_for_user)
+register.simple_tag(gravatar_img_for_email)
diff --git a/lib/gravatar/templatetags/gravatar_tags.py b/lib/gravatar/templatetags/gravatar_tags.py
new file mode 100644
index 0000000..178b6ce
--- /dev/null
+++ b/lib/gravatar/templatetags/gravatar_tags.py
@@ -0,0 +1,49 @@
+from django import template
+from django.utils.html import escape
+from django.contrib.auth.models import User
+from django.conf import settings
+from django.utils.hashcompat import md5_constructor
+
+import urllib
+
+GRAVATAR_URL_PREFIX = getattr(settings, "GRAVATAR_URL_PREFIX", "http://www.gravatar.com/";)
+GRAVATAR_DEFAULT_IMAGE = getattr(settings, "GRAVATAR_DEFAULT_IMAGE", "")
+
+register = template.Library()
+
+def get_user(user):
+    if not isinstance(user, User):
+        try:
+            user = User.objects.get(username=user)
+        except User.DoesNotExist:
+            # TODO: make better? smarter? strong? maybe give it wheaties?
+            raise Exception, "Bad user for gravatar."
+    return user
+
+def gravatar_for_email(email, size=80):
+    url = "%savatar/%s/?" % (GRAVATAR_URL_PREFIX, md5_constructor(email).hexdigest())
+    url += urllib.urlencode({"s": str(size), "default": GRAVATAR_DEFAULT_IMAGE})
+    return escape(url)
+
+def gravatar_for_user(user, size=80):
+    user = get_user(user)
+    return gravatar_for_email(user.email, size)
+
+def gravatar_img_for_email(email, size=80):
+    url = gravatar_for_email(email, size)
+    return """<img src="%s" height="%s" width="%s"/>""" % (escape(url), size, size)
+
+def gravatar_img_for_user(user, size=80):
+    user = get_user(user)
+    url = gravatar_for_user(user)
+    return """<img src="%s" alt="Avatar for %s" height="%s" width="%s"/>""" % (escape(url), user.username, size, size)
+
+def gravatar(user, size=80):
+    # backward compatibility
+    return gravatar_img_for_user(user, size)
+
+register.simple_tag(gravatar)
+register.simple_tag(gravatar_for_user)
+register.simple_tag(gravatar_for_email)
+register.simple_tag(gravatar_img_for_user)
+register.simple_tag(gravatar_img_for_email)
diff --git a/lib/gravatar/views.py b/lib/gravatar/views.py
new file mode 100644
index 0000000..60f00ef
--- /dev/null
+++ b/lib/gravatar/views.py
@@ -0,0 +1 @@
+# Create your views here.
diff --git a/settings.py b/settings.py
index bae6efe..5564603 100644
--- a/settings.py
+++ b/settings.py
@@ -97,6 +97,7 @@ INSTALLED_APPS = (
     'registration',
     'django_evolution',
     'reversion',
+    'gravatar',
 
     # Local apps
     'notes',
diff --git a/templates/base.html b/templates/base.html
index 8be65b5..b31aeb3 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -1,3 +1,4 @@
+{% load gravatar %}
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd";>
 <html lang="en">
 
@@ -23,7 +24,7 @@
         </div>
         <div id="header-avatar">
 {% if user.is_authenticated %}
-            <img src="{{ MEDIA_URL }}img/blank-avatar.png" width="48" height="48" alt="Your Avatar"/>
+            {% gravatar_img_for_user user 64 %}
 {% endif %}
         </div>
         <div id="header-auth">



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