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')),