Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Refactor of profiles using django-user-accounts and geonode.people

  • Loading branch information...
commit 95d43b1e313f88472a38c90d3c7d057363c89481 1 parent b34a35b
@jj0hns0n jj0hns0n authored
Showing with 198 additions and 384 deletions.
  1. +3 −3 geonode/layers/forms.py
  2. +6 −6 geonode/layers/models.py
  3. +1 −1  geonode/layers/templates/layers/layer_replace.html
  4. +1 −1  geonode/layers/templates/layers/layer_upload.html
  5. +3 −3 geonode/layers/utils.py
  6. +8 −8 geonode/layers/views.py
  7. +2 −2 geonode/maps/views.py
  8. +3 −3 geonode/people/admin.py
  9. +4 −4 geonode/people/forms.py
  10. +14 −25 geonode/people/models.py
  11. +0 −1  geonode/people/templates/idios/base.html
  12. 0  geonode/{templates/registration → people/templates/people}/base.html
  13. +2 −2 geonode/people/templates/people/forgot_username_form.html
  14. +2 −2 geonode/people/templates/{idios → people}/profile_create.html
  15. +6 −5 geonode/people/templates/{idios/profile.html → people/profile_detail.html}
  16. +2 −2 geonode/people/templates/{idios → people}/profile_edit.html
  17. +3 −3 geonode/people/templates/{idios/profiles.html → people/profile_list.html}
  18. +4 −0 geonode/people/urls.py
  19. +46 −0 geonode/people/views.py
  20. +2 −2 geonode/search/extension.py
  21. +7 −7 geonode/search/fixtures/search_testdata.json
  22. +3 −3 geonode/search/populate_search_test_data.py
  23. +2 −2 geonode/search/search.py
  24. +2 −2 geonode/search/tests.py
  25. +2 −2 geonode/search/views.py
  26. +15 −7 geonode/settings.py
  27. +5 −0 geonode/social_signals.py
  28. +1 −1  geonode/templates/401.html
  29. +2 −2 geonode/templates/404.html
  30. +2 −2 geonode/templates/500.html
  31. +2 −2 geonode/templates/_permissions_form_js.html
  32. +1 −1  geonode/templates/activity/actor.html
  33. +1 −1  geonode/templates/announcements/announcement_detail.html
  34. +1 −1  geonode/templates/announcements/announcement_list.html
  35. +5 −5 geonode/templates/base_geonode.html
  36. +1 −1  geonode/templates/developer.html
  37. +1 −1  geonode/templates/help.html
  38. +1 −1  geonode/templates/notification/notice_settings.html
  39. +1 −1  geonode/templates/notification/notices.html
  40. +1 −1  geonode/templates/notification/single.html
  41. +0 −86 geonode/templates/profiles/profile_detail.html
  42. +0 −11 geonode/templates/registration/activate.html
  43. +0 −1  geonode/templates/registration/activation_complete.html
  44. +0 −6 geonode/templates/registration/activation_email.txt
  45. +0 −1  geonode/templates/registration/activation_email_subject.txt
  46. +0 −8 geonode/templates/registration/logged_out.html
  47. +0 −24 geonode/templates/registration/login.html
  48. +0 −9 geonode/templates/registration/logout.html
  49. +0 −6 geonode/templates/registration/password_change_done.html
  50. +0 −16 geonode/templates/registration/password_change_form.html
  51. +0 −8 geonode/templates/registration/password_reset_complete.html
  52. +0 −19 geonode/templates/registration/password_reset_confirm.html
  53. +0 −6 geonode/templates/registration/password_reset_done.html
  54. +0 −5 geonode/templates/registration/password_reset_email.html
  55. +0 −15 geonode/templates/registration/password_reset_form.html
  56. +0 −6 geonode/templates/registration/registration_complete.html
  57. +0 −15 geonode/templates/registration/registration_form.html
  58. +1 −1  geonode/templates/relationships/confirm.html
  59. +1 −1  geonode/templates/relationships/relationship_list.html
  60. +1 −1  geonode/templates/relationships/success.html
  61. +1 −0  geonode/templates/site_base.html
  62. +7 −8 geonode/urls.py
  63. +8 −0 requirements.txt
  64. +11 −15 setup.py
View
6 geonode/layers/forms.py
@@ -27,7 +27,7 @@
from django.utils.translation import ugettext_lazy as _
from geonode.layers.models import Layer, Attribute
-from geonode.people.models import Contact
+from geonode.people.models import Profile
class JSONField(forms.CharField):
@@ -48,11 +48,11 @@ class LayerForm(forms.ModelForm):
poc = forms.ModelChoiceField(empty_label = "Person outside GeoNode (fill form)",
label = "Point Of Contact", required=False,
- queryset = Contact.objects.exclude(user=None))
+ queryset = Profile.objects.exclude(user=None))
metadata_author = forms.ModelChoiceField(empty_label = "Person outside GeoNode (fill form)",
label = "Metadata Author", required=False,
- queryset = Contact.objects.exclude(user=None))
+ queryset = Profile.objects.exclude(user=None))
keywords = taggit.forms.TagField(required=False,
help_text=_("A space or comma-separated list of keywords"))
class Meta:
View
12 geonode/layers/models.py
@@ -42,7 +42,7 @@
from geonode import GeoNodeException
from geonode.utils import _wms, _user, _password, get_wms, bbox_to_wkt
from geonode.gs_helpers import cascading_delete
-from geonode.people.models import Contact, Role
+from geonode.people.models import Profile, Role
from geonode.security.models import PermissionLevelMixin
from geonode.security.models import AUTHENTICATED_USERS, ANONYMOUS_USERS
from geonode.layers.ows import wcs_links, wfs_links, wms_links
@@ -85,7 +85,7 @@ def admin_contact(self):
if superusers.count() == 0:
raise RuntimeError('GeoNode needs at least one admin/superuser set')
- contact = Contact.objects.get_or_create(user=superusers[0],
+ contact = Profile.objects.get_or_create(user=superusers[0],
defaults={"name": "Geonode Admin"})[0]
return contact
@@ -316,7 +316,7 @@ class Layer(ResourceBase):
popular_count = models.IntegerField(default=0)
share_count = models.IntegerField(default=0)
- contacts = models.ManyToManyField(Contact, through='ContactRole')
+ contacts = models.ManyToManyField(Profile, through='ContactRole')
default_style = models.ForeignKey(Style, related_name='layer_default_style', null=True, blank=True)
styles = models.ManyToManyField(Style, related_name='layer_styles')
@@ -492,9 +492,9 @@ def __str__(self):
class ContactRole(models.Model):
"""
- ContactRole is an intermediate model to bind Contacts and Layers and apply roles.
+ ContactRole is an intermediate model to bind Profiles as Contacts to Layers and apply roles.
"""
- contact = models.ForeignKey(Contact)
+ contact = models.ForeignKey(Profile)
layer = models.ForeignKey(Layer, null=True)
role = models.ForeignKey(Role)
@@ -641,7 +641,7 @@ def geoserver_pre_save(instance, sender, **kwargs):
if instance.poc and instance.poc.user:
gs_layer.attribution = str(instance.poc.user)
- profile = Contact.objects.get(user=instance.poc.user)
+ profile = Profile.objects.get(user=instance.poc.user)
gs_layer.attribution_link = settings.SITEURL[:-1] + profile.get_absolute_url()
gs_catalog.save(gs_layer)
View
2  geonode/layers/templates/layers/layer_replace.html
@@ -9,7 +9,7 @@
{{ block.super }}
{% endblock %}
-{% block main %}
+{% block body %}
{% if errors %}
<div id="errors">
View
2  geonode/layers/templates/layers/layer_upload.html
@@ -237,7 +237,7 @@ <h2 class="page-title">{% trans "Upload Layers" %}</h2>
var permissionsEditor = new GeoNode.PermissionsEditor({
renderTo: "permissions_form",
- userLookup: "{% url auth_ajax_lookup %}",
+ userLookup: "{% url account_ajax_lookup %}",
listeners: {
updated: function(pe) {
permissionsField.setValue(Ext.util.JSON.encode(pe.writePermissions()));
View
6 geonode/layers/utils.py
@@ -40,7 +40,7 @@
from geonode.people.utils import get_valid_user
from geonode.layers.models import Layer
from geonode.layers.metadata import set_metadata
-from geonode.people.models import Contact
+from geonode.people.models import Profile
from geonode.gs_helpers import cascading_delete
from geonode.gs_helpers import get_sld_for
from geonode.gs_helpers import delete_from_postgis
@@ -465,9 +465,9 @@ def save(layer, base_file, user, overwrite=True, title=None,
# A user without a profile might be uploading this
logger.info('>>> Step 9. Creating points of contact records for '
'[%s]', name)
- pc, __ = Contact.objects.get_or_create(user=user,
+ pc, __ = Profile.objects.get_or_create(user=user,
defaults={"name": user.username})
- ac, __ = Contact.objects.get_or_create(user=user,
+ ac, __ = Profile.objects.get_or_create(user=user,
defaults={"name": user.username}
)
View
16 geonode/layers/views.py
@@ -53,7 +53,7 @@
from geonode.layers.utils import save
from geonode.layers.utils import layer_set_permissions
from geonode.utils import resolve_object
-from geonode.people.forms import ContactForm, PocForm
+from geonode.people.forms import ProfileForm, PocForm
from geonode.security.views import _perms_info_json
from geonode.security.models import AUTHENTICATED_USERS, ANONYMOUS_USERS
from django.forms.models import inlineformset_factory
@@ -224,12 +224,12 @@ def layer_metadata(request, layername, template='layers/layer_metadata.html'):
new_keywords = layer_form.cleaned_data['keywords']
if new_poc is None:
- poc_form = ContactForm(request.POST, prefix="poc")
+ poc_form = ProfileForm(request.POST, prefix="poc")
if poc_form.has_changed and poc_form.is_valid():
new_poc = poc_form.save()
if new_author is None:
- author_form = ContactForm(request.POST, prefix="author")
+ author_form = ProfileForm(request.POST, prefix="author")
if author_form.has_changed and author_form.is_valid():
new_author = author_form.save()
@@ -251,17 +251,17 @@ def layer_metadata(request, layername, template='layers/layer_metadata.html'):
return HttpResponseRedirect(reverse('layer_detail', args=(layer.typename,)))
if poc.user is None:
- poc_form = ContactForm(instance=poc, prefix="poc")
+ poc_form = ProfileForm(instance=poc, prefix="poc")
else:
layer_form.fields['poc'].initial = poc.id
- poc_form = ContactForm(prefix="poc")
+ poc_form = ProfileForm(prefix="poc")
poc_form.hidden=True
if metadata_author.user is None:
- author_form = ContactForm(instance=metadata_author, prefix="author")
+ author_form = ProfileForm(instance=metadata_author, prefix="author")
else:
layer_form.fields['metadata_author'].initial = metadata_author.id
- author_form = ContactForm(prefix="author")
+ author_form = ProfileForm(prefix="author")
author_form.hidden=True
return render_to_response(template, RequestContext(request, {
@@ -691,4 +691,4 @@ def feature_edit_check(request, layername):
layer = get_object_or_404(Layer, typename=layername);
return HttpResponse(
status=200 if request.user.has_perm('maps.change_layer', obj=layer) and layer.storeType == 'dataStore' else 401
- )
+ )
View
4 geonode/maps/views.py
@@ -48,7 +48,7 @@
from geonode.utils import default_map_config
from geonode.utils import resolve_object
from geonode.maps.forms import MapForm
-from geonode.people.models import Contact
+from geonode.people.models import Profile
from geonode.security.models import AUTHENTICATED_USERS, ANONYMOUS_USERS
from geonode.security.views import _perms_info
@@ -651,7 +651,7 @@ def _maps_search(query, start, limit, sort_field, sort_dir):
for m in map_query.all()[start:start+limit]:
try:
- owner_name = Contact.objects.get(user=m.owner).name
+ owner_name = Profile.objects.get(user=m.owner).name
except Exception:
owner_name = m.owner.first_name + " " + m.owner.last_name
View
6 geonode/people/admin.py
@@ -19,14 +19,14 @@
#########################################################################
from django.contrib import admin
-from geonode.people.models import Contact, Role
+from geonode.people.models import Profile, Role
from geonode.layers.models import ContactRole
class ContactRoleInline(admin.TabularInline):
model = ContactRole
-class ContactAdmin(admin.ModelAdmin):
+class ProfileAdmin(admin.ModelAdmin):
inlines = [ContactRoleInline]
-admin.site.register(Contact, ContactAdmin)
+admin.site.register(Profile, ProfileAdmin)
admin.site.register(Role)
View
8 geonode/people/forms.py
@@ -18,7 +18,7 @@
#
#########################################################################
-from geonode.people.models import Contact
+from geonode.people.models import Profile
from geonode.layers.models import ContactRole
from django import forms
from django.utils.translation import ugettext_lazy as _
@@ -40,12 +40,12 @@ class Meta:
class PocForm(forms.Form):
contact = forms.ModelChoiceField(label = "New point of contact",
- queryset = Contact.objects.exclude(user=None))
+ queryset = Profile.objects.exclude(user=None))
-class ContactForm(forms.ModelForm):
+class ProfileForm(forms.ModelForm):
keywords = taggit.forms.TagField(required=False,
help_text=_("A space or comma-separated list of keywords"))
class Meta:
- model = Contact
+ model = Profile
exclude = ('user',)
View
39 geonode/people/models.py
@@ -21,18 +21,18 @@
from django.conf import settings
from django.core.exceptions import ValidationError
from django.db import models
-from django.db.models import signals
+from django.db.models.signals import post_save
+from django.dispatch import receiver
from django.utils.translation import ugettext as _
from django.contrib.auth.models import User, Permission
-from idios.models import ProfileBase, create_profile
-
from geonode.layers.enumerations import COUNTRIES
from geonode.people.enumerations import ROLE_VALUES, CONTACT_FIELDS
-class Contact(ProfileBase):
+class Profile(models.Model):
+ user = models.OneToOneField(User, related_name="profile", null=True, blank=True)
name = models.CharField(_('Individual Name'), max_length=255, blank=True, null=True, help_text=_('name of the responsible personsurname, given name, title separated by a delimiter'))
organization = models.CharField(_('Organization Name'), max_length=255, blank=True, null=True, help_text=_('name of the responsible organization'))
profile = models.TextField(_('Profile'), null=True, blank=True)
@@ -71,24 +71,13 @@ class Role(models.Model):
def __unicode__(self):
return self.get_value_display()
-
-def create_user_profile(instance, sender, created, **kwargs):
- try:
- profile = Contact.objects.get(user=instance)
- except Contact.DoesNotExist:
- profile = Contact(user=instance)
- profile.name = instance.username
- profile.save()
-
-def relationship_post_save(instance, sender, created, **kwargs):
- if "notification" in settings.INSTALLED_APPS:
- from notification import models as notification
- notification.queue([instance.to_user], "user_follow", {"from_user": instance.from_user})
-
-# Remove the idios create_profile handler, which interferes with ours.
-signals.post_save.disconnect(create_profile, sender=User)
-signals.post_save.connect(create_user_profile, sender=User)
-
-if 'relationships' in settings.INSTALLED_APPS:
- from relationships.models import Relationship
- signals.post_save.connect(relationship_post_save, sender=Relationship)
+@receiver(post_save, sender=User)
+def user_post_save(sender, **kwargs):
+ """
+ Create a Profile instance for all newly created User instances. We only
+ run on user creation to avoid having to check for existence on each call
+ to User.save.
+ """
+ user, created = kwargs["instance"], kwargs["created"]
+ if created:
+ Profile.objects.create(user=user, name=user.username)
View
1  geonode/people/templates/idios/base.html
@@ -1 +0,0 @@
-{% extends "base.html" %}
View
0  geonode/templates/registration/base.html → geonode/people/templates/people/base.html
File renamed without changes
View
4 geonode/people/templates/people/forgot_username_form.html
@@ -5,7 +5,7 @@
<a id="logo" href="{% url geonode.views.index %}"><img src="{{STATIC_URL}}theme/img/WorldMap-Logo_26px.png" border="0"></a>
<div id="page-breadcrumb"><span>{% trans "Forgot Username" %}</span></div>
{% endblock %}
-{% block main %}
+{% block body %}
<div class="twocol">
<p>{% trans "Enter your email address and click the submit button. Your username will be sent to you." %}</p>
@@ -24,4 +24,4 @@
{% endif %}
</div>
-{% endblock %}
+{% endblock %}
View
4 geonode/people/templates/idios/profile_create.html → geonode/people/templates/people/profile_create.html
@@ -1,9 +1,9 @@
-{% extends "idios/base.html" %}
+{% extends "people/base.html" %}
{% load i18n %}
{% load bootstrap_tags %}
-{% block main %}
+{% block body %}
<form action="" class="form-horizontal" method="post">
<legend>{% trans "Create Profile" %}</legend>
{% csrf_token %}
View
11 geonode/people/templates/idios/profile.html → geonode/people/templates/people/profile_detail.html
@@ -1,8 +1,8 @@
-{% extends "idios/base.html" %}
+{% extends "people/base.html" %}
{% load friendly_loader %}
{% friendly_load i18n avatar_tags relationship_tags %}
-{% block main %}
+{% block body %}
<table class="table table-striped table-bordered table-condensed">
<thead>
<tr>
@@ -65,7 +65,8 @@
<h3>{% trans "Actions" %}</h3>
<ul class="nav nav-list">
<li><a href="{% url profile_edit user.username %}">{% trans "Edit profile information" %}</a></li>
- <li><a href="{% url auth_password_change %}">{% trans "Change password" %}</a></li>
+ <li><a href="{% url account_settings %}">{% trans "Account Settings" %}</a></li>
+ <li><a href="{% url account_password %}">{% trans "Change password" %}</a></li>
<li><a href="{% url layer_upload %}">{% trans "Upload new layers" %}</a></li>
<li><a href="{% url new_map %}">{% trans "Create a new map" %}</a></li>
</ul>
@@ -92,11 +93,11 @@
{% if_has_tag if_relationship %}
<h3>Following</h3>
{% for u in profile.user.relationships.following %}
- <a href="{% url profile_detail u %}">{% avatar u 65 %}</a>
+ <a href="{% url profile_detail u.username %}">{% avatar u 65 %}</a>
{% endfor %}
<h3>Followers</h3>
{% for u in profile.user.relationships.followers %}
- <a href="{% url profile_detail u %}">{% avatar u 65 %}</a>
+ <a href="{% url profile_detail u.username %}">{% avatar u 65 %}</a>
{% endfor %}
{% endif_has_tag %}
{% endblock %}
View
4 geonode/people/templates/idios/profile_edit.html → geonode/people/templates/people/profile_edit.html
@@ -1,8 +1,8 @@
-{% extends "idios/base.html" %}
+{% extends "people/base.html" %}
{% load i18n avatar_tags %}
{% load bootstrap_tags %}
-{% block main %}
+{% block body %}
{% avatar user %}
{% if not avatars %}
<p>{% trans "You haven't uploaded an avatar yet. Please upload one now." %}</p>
View
6 geonode/people/templates/idios/profiles.html → geonode/people/templates/people/profile_list.html
@@ -1,16 +1,16 @@
-{% extends "idios/base.html" %}
+{% extends "people/base.html" %}
{% load friendly_loader %}
{% friendly_load avatar_tags %}
{% friendly_load relationship_tags %}
{% block body_class %}profiles{% endblock %}
-{% block main %}
+{% block body %}
<ul>
{% for profile in object_list %}
{% if profile.user %}
<li>
- {% avatar profile.user 50 %}<a href="{{ profile.get_absolute_url }}">{{ profile.name }}</a>
+ {% avatar profile.user 50 %}<a href="{% url profile_detail profile.user.username %}">{{ profile.name }}</a>
{% if request.user != profile.user %}
{% if_has_tag if_relationship remove_relationship_url %}
{% if_relationship request.user profile.user "following" %}
View
4 geonode/people/urls.py
@@ -19,7 +19,11 @@
from django.conf.urls.defaults import *
+from geonode.people.views import ProfileListView
urlpatterns = patterns('geonode.people.views',
+ url(r'^$', ProfileListView.as_view(), name='profile_browse'),
+ url(r"^edit/(?P<username>[^/]*)$", "profile_edit", name="profile_edit"),
+ url(r"^profile/(?P<username>[^/]*)/$", "profile_detail", name="profile_detail"),
url(r'^forgotname','forgot_username',name='forgot_username'),
)
View
46 geonode/people/views.py
@@ -19,12 +19,58 @@
from django.contrib.auth.models import User
from django.core.mail import send_mail
+from django.contrib.auth.decorators import login_required
+from django.contrib import messages
+from django.http import Http404
+from django.shortcuts import render, redirect, get_object_or_404
from django.shortcuts import render_to_response
+from django.core.urlresolvers import reverse
from django.template.context import RequestContext
from django.utils.translation import ugettext as _
+from django.views.generic.list import ListView
from django.conf import settings
+
+from geonode.people.models import Profile
+from geonode.people.forms import ProfileForm
from geonode.people.forms import ForgotUsernameForm
+class ProfileListView(ListView):
+
+ def __init__(self, *args, **kwargs):
+ self.queryset = Profile.objects.all()
+ super(ProfileListView, self).__init__(*args, **kwargs)
+
+
+@login_required
+def profile_edit(request, username=None):
+ if username is None:
+ try:
+ profile = request.user.profile_detail
+ except Profile.DoesNotExist:
+ return redirect("profile_create")
+ else:
+ profile = get_object_or_404(Profile, user=User.objects.get(username=username))
+
+ if request.method == "POST":
+ form = ProfileForm(request.POST, request.FILES, instance=profile)
+ if form.is_valid():
+ form.save()
+ messages.success(request, "Profile profile updated.")
+ return redirect(reverse('profile_detail', args=[request.user.username]))
+ else:
+ form = ProfileForm(instance=profile)
+
+ return render(request, "people/profile_edit.html", {
+ "form": form,
+ })
+
+
+def profile_detail(request, username):
+ profile = get_object_or_404(Profile, user=User.objects.get(username=username))
+
+ return render(request, "people/profile_detail.html", {
+ "profile": profile,
+ })
def forgot_username(request):
""" Look up a username based on an email address, and send an email
View
4 geonode/search/extension.py
@@ -17,7 +17,7 @@
#
#########################################################################
-from geonode.people.models import Contact
+from geonode.people.models import Profile
from geonode.layers.models import Layer
from geonode.maps.models import Map
from geonode.search.util import resolve_extension
@@ -43,7 +43,7 @@
owner_query = resolve_extension('owner_query')
if not owner_query:
- owner_query = lambda q: Contact.objects.filter()
+ owner_query = lambda q: Profile.objects.filter()
owner_query_fields = resolve_extension('owner_query_fields') or []
View
14 geonode/search/fixtures/search_testdata.json
@@ -109,7 +109,7 @@
},
{
"pk": 1,
- "model": "people.contact",
+ "model": "people.profile",
"fields": {
"profile": null,
"city": null,
@@ -130,7 +130,7 @@
},
{
"pk": 2,
- "model": "people.contact",
+ "model": "people.profile",
"fields": {
"profile": "this contains all my interesting profile information",
"city": null,
@@ -151,7 +151,7 @@
},
{
"pk": 3,
- "model": "people.contact",
+ "model": "people.profile",
"fields": {
"profile": "some other information goes here",
"city": null,
@@ -172,7 +172,7 @@
},
{
"pk": 4,
- "model": "people.contact",
+ "model": "people.profile",
"fields": {
"profile": "this contains all my interesting profile information",
"city": null,
@@ -193,7 +193,7 @@
},
{
"pk": 5,
- "model": "people.contact",
+ "model": "people.profile",
"fields": {
"profile": "some other information goes here",
"city": null,
@@ -214,7 +214,7 @@
},
{
"pk": 6,
- "model": "people.contact",
+ "model": "people.profile",
"fields": {
"profile": "this contains all my interesting profile information",
"city": null,
@@ -1033,4 +1033,4 @@
"object_id": 8
}
}
-]
+]
View
6 geonode/search/populate_search_test_data.py
@@ -23,7 +23,7 @@
from django.contrib.auth.models import User
from geonode.layers.models import Layer
from geonode.maps.models import Map
-from geonode.people.models import Contact
+from geonode.people.models import Profile
from itertools import cycle
from taggit.models import Tag
from taggit.models import TaggedItem
@@ -82,7 +82,7 @@ def create_models():
u.first_name = first_name
u.last_name = last_name
u.save()
- contact = Contact.objects.get(user=u)
+ contact = Profile.objects.get(user=u)
contact.profile = profile
contact.save()
users.append(u)
@@ -130,7 +130,7 @@ def create_models():
def dump_models(path=None):
result = serialize("json", sum([list(x) for x in
[User.objects.all(),
- Contact.objects.all(),
+ Profile.objects.all(),
Layer.objects.all(),
Map.objects.all(),
Tag.objects.all(),
View
4 geonode/search/search.py
@@ -30,7 +30,7 @@
from geonode.maps.models import Layer
from geonode.maps.models import Map
from geonode.maps.models import MapLayer
-from geonode.people.models import Contact
+from geonode.people.models import Profile
from geonode.search import extension
from geonode.search.models import filter_by_period
@@ -170,7 +170,7 @@ def _get_owner_results(query):
q = q.filter(qs)
rules = _rank_rules(User,['username', 10, 5]) + \
- _rank_rules(Contact,['organization', 5, 2])
+ _rank_rules(Profile,['organization', 5, 2])
added = extension.owner_rank_rules()
if added:
rules = rules + _rank_rules(*added)
View
4 geonode/search/tests.py
@@ -25,7 +25,7 @@
from geonode.security.models import ANONYMOUS_USERS
from geonode.layers.models import Layer
from geonode.maps.models import Map
-from geonode.people.models import Contact
+from geonode.people.models import Profile
from geonode.search import search
from geonode.search import util
from geonode.search.query import query_from_request
@@ -299,4 +299,4 @@ def assert_rules(rules):
assert_rules([(Layer,
[('name', 10, 1), ('title', 10, 5), ('abstract', 5, 2)])])
assert_rules([(User, [('username', 10, 5)]),
- (Contact, [('organization', 5, 2)])])
+ (Profile, [('organization', 5, 2)])])
View
4 geonode/search/views.py
@@ -28,7 +28,7 @@
from geonode.maps.views import default_map_config
from geonode.maps.models import Layer
from geonode.maps.models import Map
-from geonode.people.models import Contact
+from geonode.people.models import Profile
from geonode.search.search import combined_search_results
from geonode.search.util import resolve_extension
from geonode.search.normalizers import apply_normalizers
@@ -86,7 +86,7 @@ def _get_search_context():
'layers' : Layer.objects.count(),
'vector' : Layer.objects.filter(storeType='dataStore').count(),
'raster' : Layer.objects.filter(storeType='coverageStore').count(),
- 'users' : Contact.objects.count()
+ 'users' : Profile.objects.count()
}
topics = Layer.objects.all().values_list('topic_category',flat=True)
topic_cnts = {}
View
22 geonode/settings.py
@@ -64,7 +64,7 @@
('de', 'Deutsch'),
('el', 'Ελληνικά'),
('id', 'Bahasa Indonesia'),
- ('zh', '中文'),
+# ('zh', '中文'),
('ja', '日本人'),
)
@@ -132,16 +132,19 @@
# Utility
'pagination',
- 'django_forms_bootstrap',
'taggit',
'taggit_templatetags',
'south',
'friendlytagloader',
'leaflet',
+ # Theme
+ "pinax_theme_bootstrap_account",
+ "pinax_theme_bootstrap",
+ 'django_forms_bootstrap',
+
# Social
- 'registration',
- 'profiles',
+ 'account',
'avatar',
'dialogos',
'agon_ratings',
@@ -216,15 +219,20 @@
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
- 'django.contrib.messages.context_processors.messages',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
+ "django.core.context_processors.tz",
'django.core.context_processors.media',
+ "django.core.context_processors.static",
'django.core.context_processors.request',
+ 'django.contrib.messages.context_processors.messages',
#'announcements.context_processors.site_wide_announcements',
- # The context processor belows add things like SITEURL
+ "account.context_processors.account",
+ # The context processor below adds things like SITEURL
# and GEOSERVER_BASE_URL to all pages that use a RequestContext
'geonode.context_processors.resource_urls',
+ # The pinax context_utils context processor ...
+ "pinax_utils.context_processors.settings",
)
MIDDLEWARE_CLASSES = (
@@ -290,7 +298,7 @@ def get_user_url(u):
}
# For django-profiles
-AUTH_PROFILE_MODULE = 'people.Contact'
+AUTH_PROFILE_MODULE = 'people.Profile'
# For django-registration
REGISTRATION_OPEN = False
View
5 geonode/social_signals.py
@@ -62,6 +62,9 @@ def relationship_post_save_actstream(instance, sender, created, **kwargs):
def relationship_pre_delete_actstream(instance, sender, **kwargs):
unfollow(instance.from_user, instance.to_user)
+def relationship_post_save(instance, sender, created, **kwargs):
+ notification.queue([instance.to_user], "user_follow", {"from_user": instance.from_user})
+
if activity:
signals.post_save.connect(activity_post_save_layer, sender=Layer)
if notification:
@@ -69,3 +72,5 @@ def relationship_pre_delete_actstream(instance, sender, **kwargs):
if relationships and activity:
signals.post_save.connect(relationship_post_save_actstream, sender=Relationship)
signals.pre_delete.connect(relationship_pre_delete_actstream, sender=Relationship)
+if relationships and notification:
+ signals.post_save.connect(relationship_post_save, sender=Relationship)
View
2  geonode/templates/401.html
@@ -1,7 +1,7 @@
{% extends "base.html" %}
{% load i18n %}
-{% block main %}
+{% block body %}
<div id="description">
<h3>
{% if error_title %}
View
4 geonode/templates/404.html
@@ -1,9 +1,9 @@
{% extends "base.html" %}
{% load i18n %}
-{% block main %}
+{% block body %}
<div id="description"><h3>{% trans "Page Not Found" %}</h3></div>
{% blocktrans %}
The page you requested does not exist. Perhaps you are using an outdated bookmark?
{% endblocktrans %}
-{% endblock %}
+{% endblock %}
View
4 geonode/templates/500.html
@@ -1,9 +1,9 @@
{% extends "base.html" %}
{% load i18n %}
-{% block main %}
+{% block body %}
<div id="description"><h3>{% trans "Internal Server Error" %}</h3></div>
{% blocktrans %}
An internal error occurred. Please try again, and if the problem continues, contact your site administrator.
{% endblocktrans %}
-{% endblock %}
+{% endblock %}
View
4 geonode/templates/_permissions_form_js.html
@@ -6,7 +6,7 @@
minimumInputLength: 1,
multiple: true,
ajax: {
- url: "{% url auth_ajax_lookup %}",
+ url: "{% url account_ajax_lookup %}",
dataType: "json",
type: "POST",
data: function (term, page) {
@@ -69,4 +69,4 @@
$("#permission_form").submit();
});
$("#permission_form").submit({% if layer or map %}perms_submit{% else %}batch_perms_submit{% endif %});
- });</script>
+ });</script>
View
2  geonode/templates/activity/actor.html
@@ -27,7 +27,7 @@
{% endifequal %}
{% endblock %}
-{% block main %}
+{% block body %}
{% if request.user.is_authenticated %}
<p><b><a href="{% actor_url request.user %}">{% trans "View my actions" %}</a></b></p>
{% endif %}
View
2  geonode/templates/announcements/announcement_detail.html
@@ -2,7 +2,7 @@
{% load i18n %}
{% block title %} {% blocktrans %}Announcements : {{ object }}{% endblocktrans %} {{ block.super }} {% endblock %}
-{% block main %}
+{% block body %}
<h1>{{ object }}</h1>
<p>{{ object.content }}</p>
{% endblock %}
View
2  geonode/templates/announcements/announcement_list.html
@@ -2,7 +2,7 @@
{% load i18n %}
{% block title %} {% trans "Announcements" %} - {{ block.super }} {% endblock %}
-{% block main %}
+{% block body %}
<h1>{% trans "Announcements" %}</h1>
{% if object_list %}
View
10 geonode/templates/base_geonode.html
@@ -50,7 +50,7 @@
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
- <li><a href="{% if user.get_profile %}{{ user.get_profile.get_absolute_url }}{% else %}{% url profiles_create_profile %}{% endif %}"><i class="icon-user"></i> {% trans "Profile" %}</a></li>
+ <li><a href="{% if user.get_profile %}{% url profile_detail user.username %}{% else %}{% url profile_create %}{% endif %}"><i class="icon-user"></i> {% trans "Profile" %}</a></li>
{% if user.is_staff %}
<li><a href="{% url admin:index %}"><i class="icon-cog"></i> {% trans "Admin" %}</a></li>
{% endif %}
@@ -58,7 +58,7 @@
<li><a href="{{ GEOSERVER_BASE_URL }}"><i class="icon-globe"></i> {% trans "GeoServer" %}</a></li>
{% endif %}
<li class="divider"></li>
- <li><a href="{% url auth_logout %}"><i class="icon-off"></i> {% trans "Log out" %}</a></li>
+ <li><a href="{% url account_logout %}"><i class="icon-off"></i> {% trans "Log out" %}</a></li>
</ul>
</li>
<li class="divider-v">|</li>
@@ -77,7 +77,7 @@
<a href="#" class="dropdown-toggle" data-toggle="dropdown">{% trans "Sign in" %}</a>
<ul class="dropdown-menu">
<li>
- <form action="{% url auth_login %}" method="post" class="sign-in">
+ <form action="{% url account_login %}" method="post" class="sign-in">
{% csrf_token %}
<label for="id_username">{% trans "Username" %}:</label>
<input id="id_username" name="username" type="text" />
@@ -119,7 +119,7 @@
<a href="{% url maps_browse %}">{% trans "Maps" %}</a>
</li>
<li id="nav_profiles">
- <a href="{% url profile_list_all %}">{% trans "People" %}</a>
+ <a href="{% url profile_browse %}">{% trans "People" %}</a>
</li>
<li id="nav_search">
<a href="{% url advanced_search %}">{% trans "Search" %}</a>
@@ -160,7 +160,7 @@
{% block body_outer %}
<div class="span8">
{% block navlinks %} {% endblock %}
- {% block main %}{% endblock %}
+ {% block body %}{% endblock %}
</div>
<div class="span4">
{% block sidebar %}{% endblock %}
View
2  geonode/templates/developer.html
@@ -3,7 +3,7 @@
{% load i18n %}
{% block title %} {% trans "Information for Developers" %} — {{ block.super }} {% endblock %}
-{% block main %}
+{% block body %}
<header class="jumbotron subhead" id="overview">
<h1>{% trans "Information for Developers" %}</h1>
<p class="lead">{% trans "Useful information for developers interested in GeoNode." %}</p>
View
2  geonode/templates/help.html
@@ -3,7 +3,7 @@
{% load i18n %}
{% block title %} {% trans "User Guide" %} - {{ block.super }} {% endblock %}
-{% block main %}
+{% block body %}
<header class="jumbotron subhead" id="overview">
<h1>{% trans "GeoNode Help" %}</h1>
<p class="lead">{% trans "This page provides helpful information about how to use the GeoNode. You can use the sidebar links to navigate to what you want to know." %}</p>
View
2  geonode/templates/notification/notice_settings.html
@@ -4,7 +4,7 @@
{% block head_title %}{% trans "Notification Settings" %}{% endblock %}
-{% block main %}
+{% block body %}
<div class="notice_settings">
<h1>{% trans "Notification Settings" %}</h1>
View
2  geonode/templates/notification/notices.html
@@ -6,7 +6,7 @@
{% block head_title %}{% trans "Notices" %}{% endblock %}
-{% block main %}
+{% block body %}
<h1>{% trans "Notices" %}</h1>
View
2  geonode/templates/notification/single.html
@@ -5,7 +5,7 @@
{% block head_title %}{% trans "Notice" %}{% endblock %}
-{% block main %}
+{% block body %}
<h1>{% trans "Notice" %}</h1>
{% if notice.is_unseen %}
View
86 geonode/templates/profiles/profile_detail.html
@@ -1,86 +0,0 @@
-{% extends "profiles/base.html" %}
-
-{% load i18n avatar_tags %}
-
-{% block main %}
- <table class="table table-striped table-bordered table-condensed">
- <thead>
- <tr>
- <th>{% trans "Type" %}</th>
- <th>{% trans "Title" %}</th>
- <th>{% trans "Date" %}</th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- {% for layer in profile.user.layer_set.all %}
- <tr data-type="layer">
- <td>{% trans "Layer" %}</td>
- <td><a href="{% url layer_detail layer.typename %}">{{ layer.title }}</a></td>
- <td>{{ layer.date|date:"Y-m-d" }}</td>
- <td><input type="checkbox" class="asset-selector pull-right" data-id="{{ layer.id }}" data-type="layer"></td>
- </tr>
- {% endfor %}
-
- {% for map in profile.user.map_set.all %}
- <tr data-type="map">
- <td>{% trans "Map" %}</td>
- <td><a href="{% url map_detail map.id %}">{{ map.title }}</a></td>
- <td>{{ map.last_modified|date:"Y-m-d" }}</td>
- <td><input type="checkbox" class="asset-selector pull-right" data-id="{{ map.id }}" data-type="map"></td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- <div class="pull-right">
- <a href="#modal_perms" class="btn disabled asset-modifier" data-toggle="modal"><i class="icon-lock"></i> {% trans "Change permissions on selected" %}</a>
- <a href="#modal_delete" class="btn disabled asset-modifier" data-toggle="modal"><i class="icon-remove"></i> {% trans "Remove selected" %}</a>
- </div>
-
- <div class="modal fade" id="modal_delete" style="display:none">
- <form id="delete_form" accept-charset="UTF-8" action="{% url data_batch_del %}" data-remote="true" method="post" class="modal-form">
- <div class="modal-header">
- <a class="close" data-dismiss="modal">×</a>
- <h3>{% trans "Delete Layers" %}</h3>
- </div>
- <div class="modal-body">
- <p>{% trans "You're about to delete multiple layers and maps. Is that really what you want to do?" %}</p>
- </div>
- <div class="modal-footer">
- <a href="#" class="btn" data-dismiss="modal">{% trans "Cancel" %}</a>
- <button type="submit" class="btn btn-danger">{% trans "Delete" %}</button>
- </div>
- </form>
- </div>
- {% with "/data/api/batch_permissions/" as form_action %}
- {% include "_permissions_form.html" %}
- {% endwith %}
-
-{% endblock %}
-
-{% block sidebar %}
- <div class="pull-right">{% avatar profile.user 70 %}</div>
- <h3>{{ profile.name }}</h3>
- {% if user == profile.user %}
- <ul class="nav nav-list">
- <li class="nav-header">{% trans "Actions" %}</li>
- {% if user == profile.user %}
- <li><a href="{% url profiles_edit_profile %}">{% trans "Edit profile information" %}</a></li>
- <li><a href="{% url auth_password_change %}">{% trans "Change password" %}</a></li>
- {% endif %}
- <li><a href="{% url data_upload %}">{% trans "Upload new data" %}</a></li>
- <li><a href="{% url maps_new %}">{% trans "Create a new map" %}</a></li>
- <li class="nav-header">{% trans "Settings" %}</li>
- <li><a href="{% url profiles_edit_profile %}">{% trans "Edit profile information" %}</a></li>
- </ul>
- {% endif %}
-{% endblock %}
-
-{% block extra_script %}
- <script>
- $(function() {
- $("#permission_form").submit(batch_perms_submit);
- $("#delete_form").submit(batch_delete);
- });
- </script>
-{% endblock %}
View
11 geonode/templates/registration/activate.html
@@ -1,11 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-
-{% block main %}
- {% if account %}
- <p>{% trans "Account successfully activated" %}</p>
- <p><a href="{% url auth_login %}">{% trans "Log in" %}</a></p>
- {% else %}
- <p>{% trans "Account activation failed" %}</p>
- {% endif %}
-{% endblock %}
View
1  geonode/templates/registration/activation_complete.html
@@ -1 +0,0 @@
-{% extends "index.html" %}
View
6 geonode/templates/registration/activation_email.txt
@@ -1,6 +0,0 @@
-{% load i18n %}
-{% trans "Activate account at" %} {{ site.name }}:
-
-http://{{ site.domain }}{% url registration_activate activation_key %}
-
-{% blocktrans %}Link is valid for {{ expiration_days }} days.{% endblocktrans %}
View
1  geonode/templates/registration/activation_email_subject.txt
@@ -1 +0,0 @@
-{% load i18n %}{% trans "Account activation on" %} {{ site.name }}
View
8 geonode/templates/registration/logged_out.html
@@ -1,8 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-
-{% block main %}
-<p>{% trans "Thanks for spending some quality time with the GeoNode today." %}</p>
-
-<p><a href="{% url auth_login %}">{% trans "Log in again" %}</a></p>
-{% endblock %}
View
24 geonode/templates/registration/login.html
@@ -1,24 +0,0 @@
-{% extends "registration/base.html" %}
-
-{% load i18n %}
-{% load bootstrap_tags %}
-
-{% block title %} {% trans "Log in" %} — {{ block.super }}{% endblock %}
-
-{% block main %}
- <form method="post" action="{% url auth_login %}" class="login">
- <legend>{{ SITENAME }} {% trans "Log in" %}</legend>
- {% csrf_token %}
- <input type="hidden" name="next" value="{{ next }}" />
- <div class="form-controls">
- {{ form|as_bootstrap }}
- </div>
- <div class="form-actions">
- <input type="submit" class="btn btn-primary" value="Log in"/>
- </div>
- <p>
- <a href="{% url auth_password_reset %}">{% trans "Forgot password?" %}</a> |
- <a href="{% url forgot_username %}">{% trans "Forgot username?" %}</a>
- </p>
- </form>
-{% endblock %}
View
9 geonode/templates/registration/logout.html
@@ -1,9 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-
-{% block main %}
-<header class="jumbotron subhead" id="overview">
- <h1>{% trans "Logged out" %}</h1>
- <p class="lead">{% trans "You have been logged out of GeoNode." %}</p>
-</header>
-{% endblock %}
View
6 geonode/templates/registration/password_change_done.html
@@ -1,6 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-
-{% block main %}
- <p>{% trans "Password changed" %}</p>
-{% endblock %}
View
16 geonode/templates/registration/password_change_form.html
@@ -1,16 +0,0 @@
-{% extends "registration/base.html" %}
-
-{% load i18n %}
-{% load bootstrap_tags %}
-
-{% block main %}
- <form method="post" action=".">
- {% csrf_token %}
- <div class="form-controls">
- {{ form|as_bootstrap }}
- </div>
- <div class="form-actions">
- <input type="submit" class="btn btn-primary" value="{% trans "Change password" %}" />
- </div>
- </form>
-{% endblock %}
View
8 geonode/templates/registration/password_reset_complete.html
@@ -1,8 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-
-{% block main %}
-<p>{% trans "Password reset successfully" %}</p>
-
-<p><a href="{% url auth_login %}">{% trans "Log in" %}</a></p>
-{% endblock %}
View
19 geonode/templates/registration/password_reset_confirm.html
@@ -1,19 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-{% load bootstrap_tags %}
-
-{% block main %}
- {% if validlink %}
- <form method="post" action=".">
- {% csrf_token %}
- <div class="form-controls">
- {{ form|as_bootstrap }}
- </div>
- <div class="form-actions">
- <input type="submit" value="{% trans "Reset my password" %}" />
- </div>
- </form>
- {% else %}
- <p>{% trans "Password reset failed" %}</p>
- {% endif %}
-{% endblock %}
View
6 geonode/templates/registration/password_reset_done.html
@@ -1,6 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-
-{% block main %}
- <p>{% trans "Email with password reset instructions has been sent." %}</p>
-{% endblock %}
View
5 geonode/templates/registration/password_reset_email.html
@@ -1,5 +0,0 @@
-{% load i18n %}
-{% blocktrans %}Reset password at {{ site_name }}{% endblocktrans %}:
-{% block reset_link %}
-{{ protocol }}://{{ domain }}{% url auth_password_reset_confirm uidb36=uid, token=token %}
-{% endblock %}
View
15 geonode/templates/registration/password_reset_form.html
@@ -1,15 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-{% load bootstrap_tags %}
-
-{% block main %}
- <form method="post" action=".">
- {% csrf_token %}
- <div class="form-controls">
- {{ form|as_bootstrap }}
- </div>
- <div class="form-actions">
- <input type="submit" class="btn btn-primary" value="{% trans "Reset my password" %}" />
- </div>
- </form>
-{% endblock %}
View
6 geonode/templates/registration/registration_complete.html
@@ -1,6 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-
-{% block main %}
- <p>{% trans "You are now registered. Activation email sent." %}</p>
-{% endblock %}
View
15 geonode/templates/registration/registration_form.html
@@ -1,15 +0,0 @@
-{% extends "registration/base.html" %}
-{% load i18n %}
-{% load bootstrap_tags %}
-
-{% block main %}
- <form method="post" action=".">
- {% csrf_token %}
- <div class="form-controls">
- {{ form|as_bootstrap }}
- </div>
- <div class="form-actions">
- <input type="submit" class="btn btn-primary" value="{% trans "Create account" %}" />
- <div>
- </form>
-{% endblock %}
View
2  geonode/templates/relationships/confirm.html
@@ -3,7 +3,7 @@
{% block title %}{% if not add %}{% trans "No longer" %} {% endif %}{{ status.verb|capfirst }} {{ to_user.username }}?{% endblock %}
-{% block main %}
+{% block body %}
<p>{% if not add %}{% trans "No longer" %} {% endif %}{{ status.verb|capfirst }} {{ to_user.username }}?</p>
<form method="post" action="">{% csrf_token %}
{{ form.as_table }}
View
2  geonode/templates/relationships/relationship_list.html
@@ -2,7 +2,7 @@
{% load i18n avatar_tags relationship_tags %}
-{% block main %}
+{% block body %}
<div class="twocol">
<div id="confirmation" style="display: none;">
View
2  geonode/templates/relationships/success.html
@@ -1,7 +1,7 @@
{% extends "base.html" %}
{% load i18n %}
-{% block main %}
+{% block body %}
<h1>{% trans "Success" %}</h1>
<p>{% trans "You are " %}{% if add %}{% trans "now" %}{% else %}{% trans "no longer" %}{% endif %} {{ status.from_slug }} {{ to_user.username }}</p>
<p><a href="{% url profile_detail to_user.username %}">{% blocktrans with to_user.username as to_user_username %}{{ to_user_username }}'s profile{% endblocktrans %}</a></p>
View
1  geonode/templates/site_base.html
@@ -0,0 +1 @@
+{% extends "base_geonode.html" %}
View
15 geonode/urls.py
@@ -64,22 +64,21 @@
(r'^search/', include('geonode.search.urls')),
# Social views
- (r'^accounts/', include('registration.urls')),
- (r'^profiles/', include('idios.urls')),
+ (r"^account/", include("account.urls")),
(r'^people/', include('geonode.people.urls')),
(r'^avatar/', include('avatar.urls')),
- #(r'^announcements/', include('announcements.urls')),
- #(r'^notifications/', include('notification.urls')),
(r'^comments/', include('dialogos.urls')),
(r'^ratings/', include('agon_ratings.urls')),
#(r'^activity/', include('actstream.urls')),
#(r'^relationships/', include('relationships.urls')),
+ #(r'^announcements/', include('announcements.urls')),
+ #(r'^notifications/', include('notification.urls')),
# Accounts
- url(r'^accounts/ajax_login$', 'geonode.views.ajax_login',
- name='auth_ajax_login'),
- url(r'^accounts/ajax_lookup$', 'geonode.views.ajax_lookup',
- name='auth_ajax_lookup'),
+ url(r'^account/ajax_login$', 'geonode.views.ajax_login',
+ name='account_ajax_login'),
+ url(r'^account/ajax_lookup$', 'geonode.views.ajax_lookup',
+ name='account_ajax_lookup'),
# Meta
url(r'^lang\.js$', 'django.views.generic.simple.direct_to_template',
View
8 requirements.txt
@@ -0,0 +1,8 @@
+--extra-index-url=http://dist.pinaxproject.com/dev/
+--extra-index-url=http://dist.pinaxproject.com/alpha/
+
+pinax-theme-bootstrap==2.0.4
+pinax-theme-bootstrap-account==1.0b2
+django-user-accounts==1.0b4
+django-forms-bootstrap==2.0.3.post1
+pinax-utils==1.0b1.dev3
View
26 setup.py
@@ -82,26 +82,22 @@ def fullsplit(path, result=None):
"Django==1.4",
"httplib2>=0.7",
# Django Apps
- "geonode-avatar==2.1.1",
- "geonode-profiles==0.2",
- "django-profiles==0.2",
- "django-registration==0.8",
- "agon-ratings==0.2",
- "dialogos==0.2",
- "django-relationships==0.3.2",
- "django-notification==0.2",
- "django-announcements==0.1.2",
- "django-activity-stream==0.4.4",
- "django-taggit==0.9.3",
- "django-taggit-templatetags",
- "django-leaflet==0.3.0",
- "dialogos==0.2",
"South==0.7.3",
"django-forms-bootstrap==2.0.3.post1",
"django-pagination",
"django-jsonfield==0.8.11",
"django-friendly-tag-loader==1.1",
- "South==0.7.3",
+ "django-taggit==0.9.3",
+ "django-taggit-templatetags",
+ "django-leaflet==0.3.0",
+ "django-user-accounts==1.0b7",
+ "django-relationships==0.3.2",
+ "django-notification==0.2",
+ "django-announcements==0.1.2",
+ "django-activity-stream==0.4.4",
+ "geonode-avatar==2.1.1",
+ "dialogos==0.2",
+ "agon-ratings==0.2",
#catalogue
"Shapely>=1.2.15",
"pycsw>=1.4.0",
Please sign in to comment.
Something went wrong with that request. Please try again.