First implementation of private messages.

portnov [2008-06-12 05:53:43]
First implementation of private messages.
Filename
TODO
mgmt/models.py
mgmt/views.py
templates/private_message.html
templates/user_page.html
urls.py
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..cb1bdc0
--- /dev/null
+++ b/TODO
@@ -0,0 +1,6 @@
+* Все настройки - в одно место [ALMOST DONE]
+* Развернутая форма багрепорта (где, условия,...)
+* Приоритеты багов (выставляются админом проекта)
+* Пометка степени сложности исправления для каждого бага (может изменять команда)
+* (?) Баги могут постить только тестеры, прописанные в проекте, если в проекте не стоит соотв. галочка
+* Приватные сообщения
diff --git a/mgmt/models.py b/mgmt/models.py
index 2f0425c..9ae63f9 100644
--- a/mgmt/models.py
+++ b/mgmt/models.py
@@ -2,7 +2,8 @@ from os.path import dirname

 from django.db import models
 from django.contrib.auth.models import User
-from django.utils.translation import gettext as _
+# from django.utils.translation import gettext as _
+_ = lambda s: s

 class Object(models.Model):
   name = models.CharField(max_length=64)
@@ -75,3 +76,13 @@ class Comment(models.Model):
     verbose_name = _("Comment")
     verbose_name_plural = _("Comments")
     ordering = ("created",)
+
+class PrivateMsg(Object):
+  author = models.ForeignKey(User,related_name='sended_messages')
+  reciever = models.ForeignKey(User,related_name='recieved_messages')
+  def __unicode__(self):
+    return self.name + " from " + self.author.username
+  class Meta:
+    verbose_name = _("Private message")
+    verbose_name_plural = _("Private messages")
+    ordering = ("-created",)
diff --git a/mgmt/views.py b/mgmt/views.py
index 86b126f..3e6a174 100644
--- a/mgmt/views.py
+++ b/mgmt/views.py
@@ -3,17 +3,19 @@

 from datetime import datetime

-from django.http import HttpResponse,Http404
+from django.http import HttpResponse,Http404,HttpResponseForbidden
 from django.core.paginator import Paginator
 from django.template import RequestContext
 from django.template.loader import get_template
 from django.shortcuts import render_to_response
 import django.newforms as forms
 from django.contrib.auth.models import User
+from django.contrib.auth.decorators import login_required

 from models import *
 from context import add_blocks,debug_messages,add_menu
 from rights import can,possible_changes
+import debug

 from django.conf import settings

@@ -32,7 +34,10 @@ class BugForm(forms.Form):

 class DocForm(forms.Form):
   name = forms.CharField()
-#   project = forms.ModelChoiceField(Project.objects.all())
+  text = forms.CharField(widget=forms.Textarea())
+
+class MessageForm(forms.Form):
+  name = forms.CharField()
   text = forms.CharField(widget=forms.Textarea())

 def get_comments(request,id,type):
@@ -259,17 +264,48 @@ def bugs_by_state(request,sid):
       'state': state.name},
      request)

+@login_required
 def user_page(request,name):
   try:
     user = User.objects.get(username=name)
   except:
     raise Http404
+
+  if request.method == 'POST':
+    title = request.POST['name']
+    text = request.POST['text']
+    msg = PrivateMsg(name=title,
+        text=text,
+        author=request.user,
+        reciever=user,
+        created=datetime.now())
+    msg.save()
+
+  if request.user.username == name:
+    messages = PrivateMsg.objects.filter(reciever=user)
+    form = None
+  else:
+    messages = None
+    form = MessageForm()
+
   pr_admin = Project.objects.filter(admins=user)
   pr_team  = Project.objects.filter(team=user)
   bugs_resp = Bug.objects.filter(responsible=user,status__id__lt=4)
+
   return render_it('user_page.html',
       {'user_view': user,
+       'private_messages': messages,
+       'form': form,
        'projects_admin': pr_admin,
        'projects_team': pr_team,
        'bugs_resp': bugs_resp},
        request)
+
+@login_required
+def private_message(request,mid):
+  msg = PrivateMsg.objects.get(pk=mid)
+  if request.user.id != msg.reciever.id:
+    return HttpResponseForbidden('<h1>Forbidden!</h1>')
+  return render_it('private_message.html',
+      {'message': msg},
+      request)
diff --git a/templates/private_message.html b/templates/private_message.html
new file mode 100644
index 0000000..8b0210b
--- /dev/null
+++ b/templates/private_message.html
@@ -0,0 +1,15 @@
+{% extends "base.html" %}
+{% load prj_filters %}
+
+{% block title %}Сообщение: {{message.name}}{% endblock %}
+
+{% block main %}
+<h2>{{message.name}}</h2>
+<p><strong>От:</strong> <a href='{% url mgmt.views.user_page message.author.username %}'>{{message.author.username}}</a></p>
+<p><strong>Отправлено:</strong> {{message.created}}</p>
+
+<div class='message'>
+{{message.text|markdown|safe}}
+</div>
+
+{% endblock %}
diff --git a/templates/user_page.html b/templates/user_page.html
index 8c3ac22..f7faa91 100644
--- a/templates/user_page.html
+++ b/templates/user_page.html
@@ -6,6 +6,24 @@
 {% block main %}
 <h2>Пользователь {{user_view.username}}</h2>

+{% if form %}
+  <h3>Отправить сообщение</h3>
+  <form action='.' method='post'>
+    {{form.as_p}}
+    <input type='submit'/>
+  </form>
+{% else %}
+  <h3>Сообщения</h3>
+  <table>
+  {% for message in private_messages %}
+  <tr>
+    <td><a href='{% url mgmt.views.private_message message.id %}'>{{message.name}}</a></td>
+    <td>{{message.author.username}}</td><td>{{message.created}}</td>
+  </tr>
+  {% endfor %}
+  </table>
+{% endif %}
+
 {% if projects_admin %}
   <h3>Администрирует проекты:</h3>
   <ul>
diff --git a/urls.py b/urls.py
index 437b276..99e3106 100644
--- a/urls.py
+++ b/urls.py
@@ -14,6 +14,7 @@ urlpatterns = patterns('',
     (r'^bugs/$', "mgmt.views.all_bugs"),
     (r'^create/doc/(\d+)/$', "mgmt.views.create_document"),
     (r'^users/(\w+)/$', 'mgmt.views.user_page'),
+    (r'^message/(\d+)/$', 'mgmt.views.private_message'),

     (r'git/', include('pygit.urls')),
ViewGit