diff --git a/api/serialisers.py b/api/serialisers.py new file mode 100644 index 0000000..2fa2591 --- /dev/null +++ b/api/serialisers.py @@ -0,0 +1,10 @@ +from rest_framework import serializers +from spa.models.comment import Comment + + +class CommentSerialiser(serializers.HyperlinkedModelSerializer): + user = serializers.RelatedField(many=False) + + class Meta: + model = Comment + fields = ('comment', 'date_created', 'user') \ No newline at end of file diff --git a/api/urls.py b/api/urls.py new file mode 100644 index 0000000..dfed7c6 --- /dev/null +++ b/api/urls.py @@ -0,0 +1,12 @@ +from api.views import CommentViewSet +from django.conf.urls import url, patterns, include +from rest_framework import routers + + +router = routers.DefaultRouter() +router.register(r'comments', CommentViewSet) + +urlpatterns = patterns( + '', + url(r'^', include(router.urls)), +) diff --git a/dss/settings.py b/dss/settings.py index 42b414d..f4d09f0 100755 --- a/dss/settings.py +++ b/dss/settings.py @@ -1,4 +1,4 @@ -#e Django settings for dss project. +# e Django settings for dss project. import os import mimetypes from django.core.urlresolvers import reverse_lazy @@ -35,7 +35,8 @@ DATABASES = { } } import sys -if 'test' in sys.argv or 'test_coverage' in sys.argv: #Covers regular testing and django-coverage + +if 'test' in sys.argv or 'test_coverage' in sys.argv: # Covers regular testing and django-coverage print "Testing" DATABASES['default']['ENGINE'] = 'django.db.backends.sqlite3' @@ -89,11 +90,11 @@ MIDDLEWARE_CLASSES = ( 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'spa.middleware.cors.XsSharingMiddleware', - #'htmlmin.middleware.HtmlMinifyMiddleware', + # 'htmlmin.middleware.HtmlMinifyMiddleware', #'htmlmin.middleware.MarkRequestMiddleware', 'django_user_agents.middleware.UserAgentMiddleware', 'pipeline.middleware.MinifyHTMLMiddleware', - #'spa.middleware.uploadify.SWFUploadMiddleware', + # 'spa.middleware.uploadify.SWFUploadMiddleware', #'spa.middleware.sqlprinter.SqlPrintingMiddleware' if DEBUG else None, #'debug_toolbar.middleware.DebugToolbarMiddleware', ) @@ -138,8 +139,9 @@ INSTALLED_APPS = ( 'djrill', 'paypal.standard.ipn', 'django_user_agents', - 'storages', - #'backbone_tastypie', + 'storages', + 'rest_framework', + # 'backbone_tastypie', ) # where to redirect users to after logging in @@ -181,11 +183,9 @@ mimetypes.add_type("text/xml", ".plist", False) HTML_MINIFY = not DEBUG - DEFAULT_FROM_EMAIL = 'DSS ChatBot ' DEFAULT_HTTP_PROTOCOL = 'http' - EMAIL_BACKEND = 'djrill.mail.backends.djrill.DjrillBackend' if DEBUG: @@ -208,3 +208,15 @@ if 'test' in sys.argv: except ImportError: pass +REST_FRAMEWORK = { + # Use hyperlinked styles by default. + # Only used if the `serializer_class` attribute is not set on a view. + 'DEFAULT_MODEL_SERIALIZER_CLASS': + 'rest_framework.serializers.HyperlinkedModelSerializer', + + # Use Django's standard `django.contrib.auth` permissions, + # or allow read-only access for unauthenticated users. + 'DEFAULT_PERMISSION_CLASSES': [ + 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' + ] +} \ No newline at end of file diff --git a/dss/urls.py b/dss/urls.py index 2eac684..ddd2a32 100755 --- a/dss/urls.py +++ b/dss/urls.py @@ -14,6 +14,8 @@ urlpatterns = patterns( '', url(r'^favicon\.ico$', RedirectView.as_view(url='/static/img/favicon.ico')), url(r'^admin/', include(admin.site.urls)), + url(r'^api/v2/', include('api.urls', namespace='api_v2')), + url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), url(r'', include('user_sessions.urls', 'user_sessions')), (r'^channel\.html$', TemplateView.as_view(template_name='boiler/fb_channel.html')), (r'^privacy\.html$', TemplateView.as_view(template_name='boiler/privacy.html')), diff --git a/spa/api/v1/CommentResource.py b/spa/api/v1/CommentResource.py index cef81c8..63e45b5 100755 --- a/spa/api/v1/CommentResource.py +++ b/spa/api/v1/CommentResource.py @@ -11,6 +11,9 @@ from spa.models.comment import Comment class CommentResource(BackboneCompatibleResource): mix = fields.ToOneField('spa.api.v1.MixResource.MixResource', 'mix') + likes = fields.ToManyField('spa.api.v1.UserResource.UserResource', + 'likes', related_name='favourites', + full=False, null=True) class Meta: queryset = Comment.objects.all().order_by('-date_created') diff --git a/spa/models/comment.py b/spa/models/comment.py index 6f9872c..281f100 100755 --- a/spa/models/comment.py +++ b/spa/models/comment.py @@ -1,7 +1,7 @@ from django.contrib.auth.models import User from django.db import models -from spa.models import BaseModel +from spa.models import BaseModel, UserProfile from spa.models.mix import Mix @@ -14,6 +14,7 @@ class Comment(BaseModel): comment = models.CharField(max_length=1024) date_created = models.DateTimeField(auto_now_add=True) time_index = models.IntegerField(default=0) + likes = models.ManyToManyField(UserProfile, related_name='liked_comments', blank=True, null=True) def get_absolute_url(self): return '/comment/%i' % self.id diff --git a/static/js/dss/app.coffee b/static/js/dss/app.coffee index 2131b02..6c620a3 100644 --- a/static/js/dss/app.coffee +++ b/static/js/dss/app.coffee @@ -79,6 +79,11 @@ no: -> console.log("Controller: mixDeleteNO!!") + @listenTo @vent, "comment:like", (model, id, success, favourite) -> + console.log "App(vent): mix:like" + model.save 'liked', !model.get('liked'), patch: true + true + @listenTo @vent, "user:follow", (model)-> console.log "App(vent): user:follow" user = new App.UserApp.Models.UserItem({id: com.podnoms.settings.currentUser }) diff --git a/static/js/dss/apps/comments/views/commentItemView.coffee b/static/js/dss/apps/comments/views/commentItemView.coffee index eb04ed7..bee730a 100644 --- a/static/js/dss/apps/comments/views/commentItemView.coffee +++ b/static/js/dss/apps/comments/views/commentItemView.coffee @@ -3,8 +3,13 @@ template: "commentitemview" events: "click #delete-comment": "deleteComment" + "click #like-comment": "likeComment" deleteComment: -> utils.messageBox "/dlg/DeleteCommentConfirm", => @model.destroy() + likeComment: -> + console.log("CommentItemView: likeComment") + App.vent.trigger("comment:like", @model) + true diff --git a/static/js/dss/templates/commentitemview.jst b/static/js/dss/templates/commentitemview.jst index ce31417..c99fd7f 100644 --- a/static/js/dss/templates/commentitemview.jst +++ b/static/js/dss/templates/commentitemview.jst @@ -13,13 +13,17 @@ <%= user_name %>
<%= comment %>
- - <% if (can_edit) { %> -
- - - -
+ <% if (utils.isAuth()) { %> +
+ + + + <% if (can_edit) { %> + + + + <% } %> +
<% } %> \ No newline at end of file