pre evenint commit

remotes/origin/1203
Nazar Kotyuk 12 years ago
parent 9f520b7140
commit 7b6ff86a2d
  1. 11
      accounts/admin.py
  2. 104
      accounts/edit_forms.py
  3. 2
      accounts/forms.py
  4. 538
      accounts/migrations/0001_initial.py
  5. 0
      accounts/migrations/__init__.py
  6. 112
      accounts/models.py
  7. 1
      accounts/search_indexes.py
  8. 32
      accounts/urls.py
  9. 185
      accounts/views.py
  10. 1
      article/models.py
  11. 5
      build/pip-delete-this-directory.txt
  12. 16
      city/admin.py
  13. 2
      city/admin_urls.py
  14. 4
      city/forms.py
  15. 1
      city/management/__init__.py
  16. 1
      city/management/commands/__init__.py
  17. 8210
      city/management/commands/errors.txt
  18. 128
      city/management/commands/fill_city.py
  19. 129
      city/management/commands/fill_city_desc.py
  20. 2
      city/models.py
  21. 12
      city/search_indexes.py
  22. 3
      company/admin.py
  23. 3
      conference/admin.py
  24. 4
      conference/models.py
  25. 7
      country/admin.py
  26. 22
      country/forms.py
  27. 17
      country/models.py
  28. 3
      django_messages/__init__.py
  29. 112
      django_messages/admin.py
  30. 6
      django_messages/apps.py
  31. 7
      django_messages/context_processors.py
  32. 14
      django_messages/expomap_urls.py
  33. 90
      django_messages/expomap_views.py
  34. 60
      django_messages/fields.py
  35. 87
      django_messages/forms.py
  36. BIN
      django_messages/locale/ar/LC_MESSAGES/django.mo
  37. 317
      django_messages/locale/ar/LC_MESSAGES/django.po
  38. BIN
      django_messages/locale/da/LC_MESSAGES/django.mo
  39. 367
      django_messages/locale/da/LC_MESSAGES/django.po
  40. BIN
      django_messages/locale/de/LC_MESSAGES/django.mo
  41. 321
      django_messages/locale/de/LC_MESSAGES/django.po
  42. BIN
      django_messages/locale/el/LC_MESSAGES/django.mo
  43. 291
      django_messages/locale/el/LC_MESSAGES/django.po
  44. BIN
      django_messages/locale/es/LC_MESSAGES/django.mo
  45. 314
      django_messages/locale/es/LC_MESSAGES/django.po
  46. BIN
      django_messages/locale/es_AR/LC_MESSAGES/django.mo
  47. 312
      django_messages/locale/es_AR/LC_MESSAGES/django.po
  48. BIN
      django_messages/locale/fa/LC_MESSAGES/django.mo
  49. 357
      django_messages/locale/fa/LC_MESSAGES/django.po
  50. BIN
      django_messages/locale/fr/LC_MESSAGES/django.mo
  51. 316
      django_messages/locale/fr/LC_MESSAGES/django.po
  52. BIN
      django_messages/locale/it/LC_MESSAGES/django.mo
  53. 317
      django_messages/locale/it/LC_MESSAGES/django.po
  54. BIN
      django_messages/locale/ko/LC_MESSAGES/django.mo
  55. 292
      django_messages/locale/ko/LC_MESSAGES/django.po
  56. BIN
      django_messages/locale/nl/LC_MESSAGES/django.mo
  57. 314
      django_messages/locale/nl/LC_MESSAGES/django.po
  58. BIN
      django_messages/locale/pl/LC_MESSAGES/django.mo
  59. 305
      django_messages/locale/pl/LC_MESSAGES/django.po
  60. BIN
      django_messages/locale/pt_BR/LC_MESSAGES/django.mo
  61. 314
      django_messages/locale/pt_BR/LC_MESSAGES/django.po
  62. BIN
      django_messages/locale/ru/LC_MESSAGES/django.mo
  63. 315
      django_messages/locale/ru/LC_MESSAGES/django.po
  64. BIN
      django_messages/locale/zh_CN/LC_MESSAGES/django.mo
  65. 299
      django_messages/locale/zh_CN/LC_MESSAGES/django.po
  66. 18
      django_messages/management.py
  67. 109
      django_messages/models.py
  68. 0
      django_messages/signals.py
  69. 14
      django_messages/templates/django_messages/base.html
  70. 13
      django_messages/templates/django_messages/compose.html
  71. 31
      django_messages/templates/django_messages/inbox.html
  72. 14
      django_messages/templates/django_messages/new_message.html
  73. 28
      django_messages/templates/django_messages/outbox.html
  74. 30
      django_messages/templates/django_messages/trash.html
  75. 23
      django_messages/templates/django_messages/view.html
  76. 1
      django_messages/templates/notification/messages_deleted/full.txt
  77. 1
      django_messages/templates/notification/messages_deleted/notice.html
  78. 7
      django_messages/templates/notification/messages_received/full.txt
  79. 2
      django_messages/templates/notification/messages_received/notice.html
  80. 1
      django_messages/templates/notification/messages_received/short.txt
  81. 1
      django_messages/templates/notification/messages_recovered/full.txt
  82. 1
      django_messages/templates/notification/messages_recovered/notice.html
  83. 1
      django_messages/templates/notification/messages_replied/full.txt
  84. 2
      django_messages/templates/notification/messages_replied/notice.html
  85. 7
      django_messages/templates/notification/messages_reply_received/full.txt
  86. 2
      django_messages/templates/notification/messages_reply_received/notice.html
  87. 1
      django_messages/templates/notification/messages_reply_received/short.txt
  88. 1
      django_messages/templates/notification/messages_sent/full.txt
  89. 2
      django_messages/templates/notification/messages_sent/notice.html
  90. 0
      django_messages/templatetags/__init__.py
  91. 45
      django_messages/templatetags/inbox.py
  92. 145
      django_messages/tests.py
  93. 17
      django_messages/urls.py
  94. 103
      django_messages/utils.py
  95. 211
      django_messages/views.py
  96. 5
      exposition/admin.py
  97. 39
      exposition/forms.py
  98. 13
      exposition/models.py
  99. 8
      exposition/urls.py
  100. 47
      exposition/views.py
  101. Some files were not shown because too many files have changed in this diff Show More

@ -8,7 +8,7 @@ import random
from django.utils.translation import ugettext as _
#models and forms
from models import User
from forms import UserForm, UserCreationForm, ChangePasswordForm, EmailAnnouncementForm
from forms import UserForm, UserCreationForm, ChangePasswordForm, EmailAnnouncementForm
#custom views
from functions.custom_views import objects_list
@ -16,13 +16,6 @@ from hashlib import md5
import json
@login_required
def profile(request):
args = {'change_password_form': ChangePasswordForm(),
'email_announcement_form': EmailAnnouncementForm()}
args.update(csrf(request))
return render_to_response('profile.html', args, context_instance=RequestContext(request))
def user_all(request):
@ -51,6 +44,8 @@ def user_change(request, url):
return HttpResponseRedirect('/admin/accounts/all')
else:
form = UserForm(instance=user)
if user.profile.city:
form.fields['city'].widget.attrs['data-init-text'] = user.profile.city.name
args = {}
args.update(csrf(request))

@ -0,0 +1,104 @@
# -*- coding: utf-8 -*-
from django import forms
from django.utils.translation import ugettext as _
from models import User, Profile
from country.models import Country
class AvatarForm(forms.ModelForm):
avatar = forms.ImageField(label=_(u'Выберите файл (GIF, JPG, PNG. Размер 100 × 100 пикселей)'),
required=False)
class Meta:
model = Profile
fields = ('avatar',)
class NameForm(forms.ModelForm):
first_name = forms.CharField(label=_(u'Введите ваше имя'))
last_name = forms.CharField(label=_(u'Введите вашу фамилию'))
class Meta:
model = User
fields = ('first_name', 'last_name')
def get_full_name(self):
return u'%s %s'%(self.instance.first_name, self.instance.last_name,)
class HomeForm(forms.ModelForm):
city = forms.ChoiceField(label='Город', required=False)
country = forms.ModelChoiceField(label=_(u'Страна'), queryset=Country.objects.all(), empty_label='', required=False)
class Meta:
model = Profile
fields = ('country', 'city')
def current_country(self):
return self.instance.country
country = Country.objects.get(id=self.instance.country)
return country
def clean_city(self):
return None
class WorkForm(forms.ModelForm):
position = forms.CharField(label=_(u'Укажите вашу должность'),
required=False)
work = forms.CharField(label=_(u'Место работы'),
required=False)
class Meta:
model = Profile
fields = ('position', 'work')
def get_full_work(self):
divider = _('в')
return 'dsfsdf'
return u'%s %s %s'%(self.instance.position, divider, self.instance.work)
class AboutCompanyForm(forms.ModelForm):
about_company = forms.CharField(label=_(u'Описание компании'), required=False,
widget=forms.Textarea(attrs={'cols':'30'}))
class Meta:
model = Profile
fields = ('about_company',)
class PhoneForm(forms.ModelForm):
phone = forms.CharField(label=_(u'Контактный телефон'), required=False)
class Meta:
model = Profile
fields = ('phone',)
class EmailForm(forms.ModelForm):
email = forms.EmailField(label=_(u'Ваш e-mail'), required=False)
class Meta:
model = User
fields = ('email',)
class WebPageForm(forms.ModelForm):
web_page = forms.CharField(label=_(u'Адрес вашего сайта'), required=False)
class Meta:
model = User
fields = ('web_page',)
class SocialForm(forms.ModelForm):
facebook = forms.CharField(label=_(u'Facebook'), required=False)
twitter = forms.CharField(label=_(u'Twitter'), required=False)
vk = forms.CharField(label=_(u'В контакте'), required=False)
linkedin = forms.CharField(label=_(u'LinkedIn'), required=False)
class Meta:
model = Profile
fields = ('facebook', 'twitter', 'vk', 'linkedin')
class AboutForm(forms.ModelForm):
about = forms.CharField(label=_(u'Немного о себе'), required=False,
widget=forms.Textarea(attrs={'cols':'30'}))
class Meta:
model = Profile
fields = ('about',)

@ -60,7 +60,7 @@ class UserChangeForm(forms.ModelForm):
class UserForm(forms.ModelForm):
email = forms.EmailField(widget=forms.TextInput(attrs={'disabled' : True}), required=False)
country = forms.ModelChoiceField(label='Страна', queryset=Country.objects.all(), empty_label=None, required=False)
city = forms.ModelChoiceField(label='Город', queryset=City.objects.all(), empty_label='', required=False)
city = forms.CharField(label='Город', widget=forms.HiddenInput())
company = forms.ModelChoiceField(label='Компания', queryset=Company.objects.all(), empty_label='', required=False)
organiser = forms.ModelChoiceField(label='Организатор', queryset=Organiser.objects.all(), empty_label='', required=False)
title = forms.CharField(widget=forms.TextInput(attrs={'style':'width: 550px'}), required=False)

@ -0,0 +1,538 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'User'
db.create_table(u'accounts_user', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('password', self.gf('django.db.models.fields.CharField')(max_length=128)),
('last_login', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)),
('is_superuser', self.gf('django.db.models.fields.BooleanField')(default=False)),
('email', self.gf('django.db.models.fields.EmailField')(unique=True, max_length=255, db_index=True)),
('first_name', self.gf('django.db.models.fields.CharField')(max_length=255)),
('last_name', self.gf('django.db.models.fields.CharField')(max_length=255)),
('url', self.gf('django.db.models.fields.SlugField')(max_length=50, blank=True)),
('is_active', self.gf('django.db.models.fields.BooleanField')(default=False)),
('is_staff', self.gf('django.db.models.fields.BooleanField')(default=False)),
('is_admin', self.gf('django.db.models.fields.BooleanField')(default=False)),
('date_joined', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
('date_registered', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
('date_modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
('organiser', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['organiser.Organiser'], unique=True, null=True, on_delete=models.PROTECT, blank=True)),
('translator', self.gf('django.db.models.fields.related.ForeignKey')(related_name='user', null=True, on_delete=models.PROTECT, to=orm['translator.Translator'], blank=True, unique=True)),
('country', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='users', null=True, on_delete=models.PROTECT, to=orm['country.Country'])),
('city', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['city.City'], null=True, on_delete=models.PROTECT, blank=True)),
('company', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='users', null=True, on_delete=models.PROTECT, to=orm['company.Company'])),
('phone', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True)),
('position', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
('about', self.gf('django.db.models.fields.TextField')(blank=True)),
('avatar', self.gf('django.db.models.fields.files.ImageField')(max_length=100, blank=True)),
('web_page', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
('social', self.gf('django.db.models.fields.TextField')(blank=True)),
('skype', self.gf('django.db.models.fields.CharField')(max_length=50, blank=True)),
('title', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
('descriptions', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
('keywords', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
))
db.send_create_signal(u'accounts', ['User'])
# Adding M2M table for field groups on 'User'
m2m_table_name = db.shorten_name(u'accounts_user_groups')
db.create_table(m2m_table_name, (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('user', models.ForeignKey(orm[u'accounts.user'], null=False)),
('group', models.ForeignKey(orm[u'auth.group'], null=False))
))
db.create_unique(m2m_table_name, ['user_id', 'group_id'])
# Adding M2M table for field user_permissions on 'User'
m2m_table_name = db.shorten_name(u'accounts_user_user_permissions')
db.create_table(m2m_table_name, (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('user', models.ForeignKey(orm[u'accounts.user'], null=False)),
('permission', models.ForeignKey(orm[u'auth.permission'], null=False))
))
db.create_unique(m2m_table_name, ['user_id', 'permission_id'])
# Adding model 'Calendar'
db.create_table(u'accounts_calendar', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('user', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['accounts.User'], unique=True)),
))
db.send_create_signal(u'accounts', ['Calendar'])
# Adding M2M table for field expositions on 'Calendar'
m2m_table_name = db.shorten_name(u'accounts_calendar_expositions')
db.create_table(m2m_table_name, (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('calendar', models.ForeignKey(orm[u'accounts.calendar'], null=False)),
('exposition', models.ForeignKey(orm[u'exposition.exposition'], null=False))
))
db.create_unique(m2m_table_name, ['calendar_id', 'exposition_id'])
# Adding M2M table for field conferences on 'Calendar'
m2m_table_name = db.shorten_name(u'accounts_calendar_conferences')
db.create_table(m2m_table_name, (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('calendar', models.ForeignKey(orm[u'accounts.calendar'], null=False)),
('conference', models.ForeignKey(orm[u'conference.conference'], null=False))
))
db.create_unique(m2m_table_name, ['calendar_id', 'conference_id'])
# Adding M2M table for field seminars on 'Calendar'
m2m_table_name = db.shorten_name(u'accounts_calendar_seminars')
db.create_table(m2m_table_name, (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('calendar', models.ForeignKey(orm[u'accounts.calendar'], null=False)),
('seminar', models.ForeignKey(orm[u'seminar.seminar'], null=False))
))
db.create_unique(m2m_table_name, ['calendar_id', 'seminar_id'])
# Adding M2M table for field webinars on 'Calendar'
m2m_table_name = db.shorten_name(u'accounts_calendar_webinars')
db.create_table(m2m_table_name, (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('calendar', models.ForeignKey(orm[u'accounts.calendar'], null=False)),
('webinar', models.ForeignKey(orm[u'webinar.webinar'], null=False))
))
db.create_unique(m2m_table_name, ['calendar_id', 'webinar_id'])
def backwards(self, orm):
# Deleting model 'User'
db.delete_table(u'accounts_user')
# Removing M2M table for field groups on 'User'
db.delete_table(db.shorten_name(u'accounts_user_groups'))
# Removing M2M table for field user_permissions on 'User'
db.delete_table(db.shorten_name(u'accounts_user_user_permissions'))
# Deleting model 'Calendar'
db.delete_table(u'accounts_calendar')
# Removing M2M table for field expositions on 'Calendar'
db.delete_table(db.shorten_name(u'accounts_calendar_expositions'))
# Removing M2M table for field conferences on 'Calendar'
db.delete_table(db.shorten_name(u'accounts_calendar_conferences'))
# Removing M2M table for field seminars on 'Calendar'
db.delete_table(db.shorten_name(u'accounts_calendar_seminars'))
# Removing M2M table for field webinars on 'Calendar'
db.delete_table(db.shorten_name(u'accounts_calendar_webinars'))
models = {
u'accounts.calendar': {
'Meta': {'object_name': 'Calendar'},
'conferences': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['conference.Conference']", 'null': 'True', 'symmetrical': 'False'}),
'expositions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['exposition.Exposition']", 'null': 'True', 'symmetrical': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'seminars': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['seminar.Seminar']", 'null': 'True', 'symmetrical': 'False'}),
'user': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['accounts.User']", 'unique': 'True'}),
'webinars': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['webinar.Webinar']", 'null': 'True', 'symmetrical': 'False'})
},
u'accounts.user': {
'Meta': {'object_name': 'User'},
'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'avatar': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}),
'city': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['city.City']", 'null': 'True', 'on_delete': 'models.PROTECT', 'blank': 'True'}),
'company': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'users'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['company.Company']"}),
'country': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'users'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['country.Country']"}),
'date_joined': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'date_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'date_registered': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'descriptions': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_admin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'keywords': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'organiser': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['organiser.Organiser']", 'unique': 'True', 'null': 'True', 'on_delete': 'models.PROTECT', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
'position': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'skype': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
'social': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'translator': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['translator.Translator']", 'blank': 'True', 'unique': 'True'}),
'url': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'blank': 'True'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'city.city': {
'Meta': {'object_name': 'City'},
'code_IATA': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['directories.Iata']", 'null': 'True', 'blank': 'True'}),
'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'cities'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['country.Country']"}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'phone_code': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'population': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'services': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'})
},
u'company.company': {
'Meta': {'object_name': 'Company'},
'address': ('functions.custom_fields.LocationField', [], {'blank': 'True'}),
'city': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'companies'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['city.City']"}),
'country': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'companies'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['country.Country']"}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'created_company'", 'null': 'True', 'to': u"orm['accounts.User']"}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'fax': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
'foundation': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
'social': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'staff_number': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
'tag': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'companies'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['theme.Tag']"}),
'theme': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'companies'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['theme.Theme']"}),
'url': ('django.db.models.fields.SlugField', [], {'max_length': '50'}),
'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
},
u'conference.conference': {
'Meta': {'object_name': 'Conference'},
'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'canceled_by_administrator': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'city': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['city.City']", 'on_delete': 'models.PROTECT'}),
'company': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'conference_companies'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['company.Company']"}),
'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Country']", 'on_delete': 'models.PROTECT'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'currency': ('functions.custom_fields.EnumField', [], {'default': "'RUB'"}),
'data_begin': ('django.db.models.fields.DateField', [], {}),
'data_end': ('django.db.models.fields.DateField', [], {}),
'discount': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'expohit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'foundation_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'link': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'max_price': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'members': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'min_price': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'moved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'organiser': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'conference_organisers'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['organiser.Organiser']"}),
'place': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'conference_place'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['place_conference.PlaceConference']"}),
'quality_label': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'services': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'tag': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'conference_tags'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['theme.Tag']"}),
'tax': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'theme': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'conference_themes'", 'symmetrical': 'False', 'to': u"orm['theme.Theme']"}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'conference_users'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['accounts.User']"}),
'views': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
'visitors': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'country.area': {
'Meta': {'object_name': 'Area'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'country.country': {
'Meta': {'object_name': 'Country'},
'area': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Area']"}),
'big_cities': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'cities'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['city.City']"}),
'capital': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'capital'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['city.City']"}),
'country_code': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'currency': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['directories.Currency']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['directories.Language']", 'null': 'True', 'blank': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'phone_code': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'population': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'services': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'teritory': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'time_delivery': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
'timezone': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'})
},
u'directories.currency': {
'Meta': {'object_name': 'Currency'},
'currency': ('django.db.models.fields.CharField', [], {'max_length': '20'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'directories.iata': {
'Meta': {'object_name': 'Iata'},
'airport': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
'code': ('django.db.models.fields.CharField', [], {'max_length': '5'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'directories.language': {
'Meta': {'object_name': 'Language'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'exposition.exposition': {
'Meta': {'object_name': 'Exposition'},
'application_deadline': ('django.db.models.fields.DateField', [], {'null': 'True'}),
'audience': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'canceled_by_administrator': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'city': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['city.City']", 'on_delete': 'models.PROTECT'}),
'company': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'exposition_companies'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['company.Company']"}),
'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Country']", 'on_delete': 'models.PROTECT'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'currency': ('functions.custom_fields.EnumField', [], {'default': "'RUB'"}),
'data_begin': ('django.db.models.fields.DateField', [], {}),
'data_end': ('django.db.models.fields.DateField', [], {}),
'discount': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'expohit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'foundation_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'max_closed_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'max_closed_equipped_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'max_open_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'members': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'min_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'min_closed_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'min_closed_equipped_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'min_open_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'min_stand_size': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'moved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'organiser': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'exposition_organisers'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['organiser.Organiser']"}),
'periodic': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
'place': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'exposition_place'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['place_exposition.PlaceExposition']"}),
'price_all': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'price_all_bar': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'price_catalog': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'price_day': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'price_day_bar': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'quality_label': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'registration_payment': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'services': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'tag': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'exposition_tags'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['theme.Tag']"}),
'tax': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'theme': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'exposition_themes'", 'symmetrical': 'False', 'to': u"orm['theme.Theme']"}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'exposition_users'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['accounts.User']"}),
'views': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'null': 'True'}),
'visitors': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
},
u'file.filemodel': {
'Meta': {'object_name': 'FileModel'},
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']", 'null': 'True'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'file_path': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
'file_type': ('functions.custom_fields.EnumField', [], {'default': "'PDF'", 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'img_height': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'img_width': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'object_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'purpose': ('functions.custom_fields.EnumField', [], {'default': "'photo'"})
},
u'organiser.organiser': {
'Meta': {'object_name': 'Organiser'},
'address': ('functions.custom_fields.LocationField', [], {'null': 'True', 'blank': 'True'}),
'city': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['city.City']", 'null': 'True', 'on_delete': 'models.PROTECT', 'blank': 'True'}),
'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Country']", 'null': 'True', 'on_delete': 'models.PROTECT', 'blank': 'True'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'events_number': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'fax': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
'foundation': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
'place_conference': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'organiser_place_conference'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['place_conference.PlaceConference']"}),
'place_exposition': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'organiser_place_exposition'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['place_exposition.PlaceExposition']"}),
'social': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'staff_number': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'tag': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['theme.Tag']", 'null': 'True', 'blank': 'True'}),
'theme': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['theme.Theme']", 'null': 'True', 'blank': 'True'}),
'url': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'blank': 'True'}),
'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
},
u'place_conference.placeconference': {
'Meta': {'object_name': 'PlaceConference'},
'address': ('functions.custom_fields.LocationField', [], {}),
'amount_halls': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'banquet_hall': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'catering': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'city': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['city.City']", 'on_delete': 'models.PROTECT'}),
'conference_call': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Country']", 'on_delete': 'models.PROTECT'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'exp_hall_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'exposition_hall': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'fax': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
'foundation_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'hotel': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'multimedia_equipment': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
'total_capacity': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'translate_equipment': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'type': ('functions.custom_fields.EnumField', [], {'default': "'Convention centre'"}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
'video_link': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'views': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
'web_page': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
'wifi': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'})
},
u'place_exposition.placeexposition': {
'Meta': {'ordering': "['translations__name']", 'object_name': 'PlaceExposition'},
'address': ('functions.custom_fields.LocationField', [], {}),
'bank': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'business_centre': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'cafe': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'children_room': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'city': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['city.City']", 'on_delete': 'models.PROTECT'}),
'closed_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'conference_centre': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Country']", 'on_delete': 'models.PROTECT'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'disabled_service': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'fax': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
'foundation_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'mobile_application': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'online_registration': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'open_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'parking': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
'press_centre': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'terminals': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'total_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'total_halls': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'total_pavilions': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'type': ('functions.custom_fields.EnumField', [], {'default': "'Exposition complex'"}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
'video_link': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'views': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
'web_page': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
'wifi': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'})
},
u'seminar.seminar': {
'Meta': {'object_name': 'Seminar'},
'address': ('functions.custom_fields.LocationField', [], {'blank': 'True'}),
'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'canceled_by_administrator': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'city': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['city.City']", 'on_delete': 'models.PROTECT'}),
'company': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'seminar_companies'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['company.Company']"}),
'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Country']", 'on_delete': 'models.PROTECT'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'currency': ('functions.custom_fields.EnumField', [], {'default': "'RUB'"}),
'data_begin': ('django.db.models.fields.DateTimeField', [], {}),
'data_end': ('django.db.models.fields.DateTimeField', [], {}),
'discount': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'expohit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'foundation_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'link': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'max_price': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'members': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'min_price': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'moved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'organiser': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'seminar_organisers'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['organiser.Organiser']"}),
'quality_label': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'services': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'tag': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'seminar_tags'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['theme.Tag']"}),
'tax': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'theme': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'seminar_themes'", 'symmetrical': 'False', 'to': u"orm['theme.Theme']"}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'seminar_users'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['accounts.User']"}),
'views': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
'visitors': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
},
u'theme.tag': {
'Meta': {'object_name': 'Tag'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'theme': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tags'", 'on_delete': 'models.PROTECT', 'to': u"orm['theme.Theme']"}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'})
},
u'theme.theme': {
'Meta': {'ordering': "['translations__name']", 'object_name': 'Theme'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'types': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'})
},
u'translator.translator': {
'Meta': {'object_name': 'Translator'},
'birth': ('django.db.models.fields.DateField', [], {}),
'car': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'gender': ('functions.custom_fields.EnumField', [], {'default': "'male'"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'webinar.webinar': {
'Meta': {'object_name': 'Webinar'},
'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'canceled_by_administrator': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'company': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'webinar_companies'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['company.Company']"}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'currency': ('functions.custom_fields.EnumField', [], {'default': "'RUB'"}),
'data_begin': ('django.db.models.fields.DateTimeField', [], {'blank': 'True'}),
'discount': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'expohit': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'foundation_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'link': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'max_price': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'members': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'min_price': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'moved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'organiser': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'webinar_organisers'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['organiser.Organiser']"}),
'quality_label': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'services': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}),
'tag': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'webinar_tags'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['theme.Tag']"}),
'tax': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'theme': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'webinar_themes'", 'symmetrical': 'False', 'to': u"orm['theme.Theme']"}),
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'webinar_users'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['accounts.User']"}),
'views': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
'visitors': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
}
}
complete_apps = ['accounts']

@ -8,7 +8,9 @@ from django.utils.translation import ugettext as _
from django.db.models.signals import post_save
#custom functions
from functions.form_check import translit_with_separator
import random, string
from django.core.validators import email_re
from django.db.models import Q
"""
from django.contrib.auth.hashers import check_password
@ -29,6 +31,7 @@ class UserManager(BaseUserManager):
user= self.model(
email = UserManager.normalize_email(email),first_name = first_name,last_name = last_name,
username = UserManager.normalize_email(email),
is_staff=False, is_active=False, is_superuser=False,
last_login=now, date_joined=now, **extra_fields
)
@ -37,12 +40,37 @@ class UserManager(BaseUserManager):
user.save(using=self._db)
return user
def create_superuser(self, email, first_name, last_name, password, **extra_fields):
if not email:
def create_social_user(self,username, first_name, last_name, password=None, **extra_fields):
now = timezone.now()
# generate random password
digits = random.sample(('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'), 4)
chars = random.sample(string.lowercase[:], 4)
password = chars + digits
random.shuffle(password)
password = ''.join(password)
user= self.model(first_name=first_name, last_name=last_name, username=username,
is_staff=False, is_active=True, is_superuser=False,
last_login=now, date_joined=now, **extra_fields)
check = True if email_re.match(username) else False
if check:
user.email = UserManager.normalize_email(username)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, username, first_name, last_name, password, **extra_fields):
if not username:
raise ValueError('Вы должни ввести электронную почту')
username = UserManager.normalize_email(username)
user = self.create_user(
email = UserManager.normalize_email(email),
email = username,
first_name = first_name,last_name = last_name,
password = password, **extra_fields
)
@ -73,9 +101,10 @@ class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(
verbose_name = u'Электронная почта',
max_length = 255,
unique = True,
#unique = True,
db_index = True,
)
username = models.CharField(verbose_name='Почта', max_length=255, unique=True, db_index=True)
first_name = models.CharField(verbose_name='Имя', max_length=255)
last_name = models.CharField(verbose_name='Фамилия', max_length=255)
@ -95,29 +124,11 @@ class User(AbstractBaseUser, PermissionsMixin):
translator = models.ForeignKey('translator.Translator', verbose_name='Переводчик', blank=True, null=True,
unique=True,
on_delete=models.PROTECT, related_name='user')
country = models.ForeignKey('country.Country', verbose_name='Страна', blank=True, null=True,
company = models.ForeignKey('company.Company', blank=True, null=True,
on_delete=models.PROTECT, related_name='users')
city = models.ForeignKey('city.City', verbose_name='Город', blank=True, null=True,
on_delete=models.PROTECT)
company = models.ForeignKey('company.Company', blank=True, null=True, on_delete=models.PROTECT, related_name='users')
# other user information
phone = models.BigIntegerField(verbose_name='Телефон', blank=True, null=True)
position = models.CharField(verbose_name='Должность', max_length=255, blank=True)
about = models.TextField(verbose_name='О себе', blank=True)
avatar = models.ImageField(verbose_name='Фото', upload_to='/accounts/avatar/', blank=True)
web_page = models.CharField(verbose_name='Вебсайт', max_length=255, blank=True)
social = models.TextField(verbose_name='Социальные страницы', blank=True)
skype = models.CharField(blank=True, max_length=50)
# meta
title = models.CharField(max_length=255, blank=True)
descriptions = models.CharField(max_length=255, blank=True)
keywords = models.CharField(max_length=255, blank=True)
#
objects = UserManager()
USERNAME_FIELD = 'email'
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['first_name', 'last_name']
def get_full_name(self):
@ -158,6 +169,34 @@ class User(AbstractBaseUser, PermissionsMixin):
webinars = self.webinar_users.all()
return len(list(expositions)+list(conferences)+list(seminars)+list(webinars))
class Profile(models.Model):
user = models.OneToOneField(User)
country = models.ForeignKey('country.Country', verbose_name='Страна', blank=True, null=True,
on_delete=models.PROTECT, related_name='users')
city = models.ForeignKey('city.City', verbose_name='Город', blank=True, null=True,
on_delete=models.PROTECT)
position = models.CharField(verbose_name='Должность', max_length=255, blank=True)
work = models.CharField(verbose_name='Работа', max_length=255, blank=True)
about_company = models.TextField(verbose_name=_(u'Описание компании'), blank=True)
phone = models.BigIntegerField(verbose_name='Телефон', blank=True, null=True)
web_page = models.URLField(verbose_name='Вебсайт',blank=True)
about = models.TextField(verbose_name='О себе', blank=True)
avatar = models.ImageField(verbose_name='Фото', upload_to='accounts/avatar/', blank=True)
skype = models.CharField(blank=True, max_length=255)
facebook = models.URLField(verbose_name=_(u'Facebook'), blank=True)
twitter = models.URLField(verbose_name=_(u'Twitter'), blank=True)
linkedin = models.URLField(verbose_name=_(u'LinkedIn'), blank=True)
vk = models.URLField(verbose_name=_(u'В контакте'), blank=True)
# meta
title = models.CharField(max_length=255, blank=True)
descriptions = models.CharField(max_length=255, blank=True)
keywords = models.CharField(max_length=255, blank=True)
from dateutil.relativedelta import relativedelta
class Calendar(models.Model):
user = models.OneToOneField(User)
expositions = models.ManyToManyField('exposition.Exposition', null=True)
@ -165,13 +204,32 @@ class Calendar(models.Model):
seminars = models.ManyToManyField('seminar.Seminar', null=True)
webinars = models.ManyToManyField('webinar.Webinar', null=True)
def get_events(self):
events = list(self.expositions.all()) + list(self.conferences.all()) + list(self.seminars.all()) + list(self.webinars.all())
return events
def events_by_month(self, day):
exp = list(self.expositions.filter((Q(data_begin__month=day.month) & Q(data_begin__year=day.year))\
| (Q(data_end__month=day.month) & Q(data_end__year=day.year))))
con = list(self.conferences.filter((Q(data_begin__month=day.month) & Q(data_begin__year=day.year))\
| (Q(data_end__month=day.month) & Q(data_end__year=day.year))))
sem = list(self.seminars.filter((Q(data_begin__month=day.month) & Q(data_begin__year=day.year))\
| (Q(data_end__month=day.month) & Q(data_end__year=day.year))))
web = list(self.webinars.filter(Q(data_begin__month=day.month)&Q(data_begin__year=day.year)))
return exp+con+sem+web
def create_user_calendar(sender, instance, created, **kwargs):
def create_user_inf(sender, instance, created, **kwargs):
if created:
Calendar.objects.create(user=instance)
Profile.objects.create(user=instance)
post_save.connect(create_user_calendar, sender=User)
post_save.connect(create_user_inf, sender=User)
#need import after User Model, because User imported in "organiser.models"

@ -6,7 +6,6 @@ class UserIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
first_name = indexes.CharField(model_attr='first_name')
def get_model(self):
return User

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
from django.conf.urls import patterns, url
from django.contrib.auth.decorators import login_required
from views import SettingsView, ProfileView, CalendarView, MessagesView
from views import NameView, HomeView, AvatarView, WorkView, AboutCompanyView, PhoneView, EmailView, WebPageView,\
SocialView, AboutView
from views import test
urlpatterns = patterns('',
url(r'^profile/$', login_required(ProfileView.as_view())),
url(r'^profile/settings/$', login_required(SettingsView.as_view())),
url(r'^profile/calendar/$', login_required(CalendarView.as_view())),
#url(r'^profile/messages/(?P<user>.*)/$', login_required(MessagesView.as_view())),
#url(r'^profile/messages/$', login_required(MessagesView.as_view())),
#
url(r'^profile/update/name/$', login_required(NameView.as_view())),
url(r'^profile/update/home/$', login_required(HomeView.as_view())),
url(r'^profile/update/avatar/$', login_required(AvatarView.as_view())),
url(r'^profile/update/work/$', login_required(WorkView.as_view())),
url(r'^profile/update/about-company/$', login_required(AboutCompanyView.as_view())),
url(r'^profile/update/phone/$', login_required(PhoneView.as_view())),
url(r'^profile/update/email/$', login_required(EmailView.as_view())),
url(r'^profile/update/web-page/$', login_required(WebPageView.as_view())),
url(r'^profile/update/social/$', login_required(SocialView.as_view())),
url(r'^profile/update/about/$', login_required(AboutView.as_view())),
#
url(r'^accounts/get/calendar/(?P<year>\d+)/(?P<month>\d+)/$', 'accounts.views.get_calendar'),
url(r'^accounts/get-tag-users/$', 'accounts.views.user_for_tag'),
)

@ -5,18 +5,98 @@ from django.template import RequestContext
from django.core.context_processors import csrf
from django.contrib.auth.decorators import login_required
from django.utils.translation import ugettext as _
from django.utils import timezone
# forms
from forms import ChangePasswordForm, EmailAnnouncementForm
from edit_forms import AvatarForm, NameForm, HomeForm, WorkForm, AboutCompanyForm, PhoneForm, EmailForm,\
WebPageForm, SocialForm, AboutForm
from models import User
# python
import json
import json, datetime
import calendar as python_calendar
from django.views.generic import TemplateView, FormView
class SettingsView(TemplateView):
template_name = 'accounts/settings.html'
def get_context_data(self, **kwargs):
context = super(SettingsView, self).get_context_data(**kwargs)
context['change_password_form'] = ChangePasswordForm()
context['email_announcement_form'] = EmailAnnouncementForm()
return context
class CalendarView(TemplateView):
template_name = 'accounts/calendar.html'
def get_context_data(self, **kwargs):
context = super(CalendarView, self).get_context_data(**kwargs)
now = timezone.now().replace(microsecond=0, second=0, minute=0, hour=0)
number_of_days = python_calendar.monthrange(now.year, now.month)[1]
days = [timezone.make_aware(datetime.datetime(now.year, now.month, i+1), timezone.get_default_timezone()) for i in range(number_of_days)]
context['days'] = days
context['current_day'] = now
# --------------------
calendar = self.request.user.calendar
context['events'] = calendar.events_by_month(now)
return context
def events_handeler(obj):
response = {'name': obj.name, 'country': obj.country.name, 'city': obj.city.name}
if obj.place:
response['place'] = obj.place.name
return response
@login_required
def profile(request):
args = {'change_password_form': ChangePasswordForm(),
'email_announcement_form': EmailAnnouncementForm()}
args.update(csrf(request))
return render_to_response('profile.html', args, context_instance=RequestContext(request))
def get_calendar(request, year, month):
now = timezone.now().replace(microsecond=0, second=0, minute=0, hour=0)
day = timezone.make_aware(datetime.datetime(year=int(year), month=int(month), day=1), timezone.get_default_timezone())
calendar = request.user.calendar
number_of_days = python_calendar.monthrange(day.year, day.month)[1]
days = [timezone.make_aware(datetime.datetime(day.year, day.month, i+1), timezone.get_default_timezone()) for i in range(number_of_days)]
args = {}
dthandler = lambda obj: (obj.isoformat() if isinstance(obj, datetime.datetime) or isinstance(obj, datetime.date) else None)
args['days'] = json.dumps(days, default=dthandler)
args['current_day'] = json.dumps(now, default=dthandler)
events = calendar.events_by_month(day)
args['events'] = json.dumps(events, default=events_handeler)
return HttpResponse(json.dumps(args), content_type='application/json')
class ProfileView(TemplateView):
template_name = 'accounts/profile.html'
def post(self):
return HttpResponse(self.request.POST)
def get_context_data(self, **kwargs):
context = super(ProfileView, self).get_context_data(**kwargs)
user = self.request.user
profile = user.profile
profile_forms = {
'avatar_form': AvatarForm(instance=profile), 'name_form': NameForm(instance=user),
'home_form': HomeForm(instance=profile), 'work_form': WorkForm(instance=profile),
'about_company_form': AboutCompanyForm(instance=profile), 'phone_form': PhoneForm(instance=profile),
'email_form': EmailForm(instance=user), 'web_page_form': WebPageForm(instance=profile),
'social_form': SocialForm(instance=profile), 'about_form': AboutForm(instance=profile)
}
context.update(profile_forms)
return context
class MessagesView(TemplateView):
template_name = 'accounts/messages.html'
@login_required
def change_password(request):
@ -45,3 +125,96 @@ def change_password(request):
return HttpResponse(json.dumps(success), content_type='application/json')
else:
return HttpResponse(json.dumps(success), content_type='application/json')
def user_for_tag(request):
users = [{'id': user.id, 'label': user.get_full_name(), 'value': user.get_full_name() } for user in User.objects.all()]
return HttpResponse(json.dumps(users), content_type='application/json')
class ProfileInvalidView(FormView):
"""
abstract view
"""
def form_invalid(self, form):
response = {'success': False}
return HttpResponse(json.dumps(response), content_type='application/json')
class BaseProfileView(ProfileInvalidView):
"""
abstract view
"""
def form_valid(self, form):
profile = self.request.user.profile
form = self.form_class(self.request.POST, instance=profile)
form.save()
response = {'success': True}
return HttpResponse(json.dumps(response), content_type='application/json')
class WorkView(BaseProfileView):
form_class = WorkForm
class AvatarView(BaseProfileView):
form_class = AvatarForm
def form_valid(self, form):
profile = self.request.user.profile
form = self.form_class(self.request.POST, self.request.FILES, instance=profile)
form.save()
response = {'success': True}
return HttpResponse(json.dumps(response), content_type='application/json')
class HomeView(BaseProfileView):
form_class = HomeForm
class AboutCompanyView(BaseProfileView):
form_class = AboutCompanyForm
class PhoneView(BaseProfileView):
form_class = PhoneForm
class WebPageView(BaseProfileView):
form_class = WebPageForm
class SocialView(BaseProfileView):
form_class = SocialForm
class AboutView(BaseProfileView):
form_class = AboutForm
class EmailView(ProfileInvalidView):
form_class = EmailForm
def form_valid(self, form):
user = self.request.user
form = self.form_class(self.request.POST, instance=user)
form.save()
response = {'success': True}
return HttpResponse(json.dumps(response), content_type='application/json')
class NameView(ProfileInvalidView):
form_class = NameForm
def form_valid(self, form):
user = self.request.user
form = self.form_class(self.request.POST, instance=user)
form.save()
response = {'success': True}
return HttpResponse(json.dumps(response), content_type='application/json')
def test(request):
return HttpResponse('test')

@ -27,6 +27,7 @@ class Article(TranslatableModel):
tag = models.ManyToManyField('theme.Tag', related_name='tags',blank=True, null=True)
user = models.ForeignKey('accounts.User', verbose_name='Автор',
on_delete=models.PROTECT, related_name='articles')
main_page = models.PositiveIntegerField(default=0, db_index=True)
#translated fields
translations = TranslatedFields(

@ -0,0 +1,5 @@
This file is placed here by pip to indicate the source was put
here by pip.
Once this package is successfully installed this source code will be
deleted (unless you remove this file).

@ -91,3 +91,19 @@ def city_change(request, url):
args['obj_id'] = city_id
return render_to_response('city_add.html', args)
from django.http import HttpResponse
import json
def search_city(request):
country = request.GET['country']
term = request.GET['term'].capitalize()
if not term:
qs = City.objects.language().filter(country=country)[:200]
else:
qs = City.objects.language().filter(country=country, translations__name__contains=term)
result = [{'id': city.id, 'label': city.name} for city in qs]
return HttpResponse(json.dumps(result), content_type='application/json')
return HttpResponse(country_id)

@ -6,4 +6,6 @@ urlpatterns = patterns('city.admin',
url(r'^delete/(?P<url>.*)/$', 'city_delete'),
url(r'^change/(.*)/$', 'city_change'),
url(r'^all/$', 'city_all'),
url(r'^search/$', 'search_city'),
)

@ -61,9 +61,9 @@ class CityForm(forms.Form):
#meta data
self.fields['title_%s' % code] = forms.CharField(label='Тайтл', required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['keywords_%s' % code] = forms.CharField(label='Дескрипшен', required=False, max_length=255,
self.fields['keywords_%s' % code] = forms.CharField(label='Кейвордс', required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['descriptions_%s' % code] = forms.CharField(label='Кейвордс', required=False, max_length=255,
self.fields['descriptions_%s' % code] = forms.CharField(label='Дескрипшен', required=False, max_length=255,
widget=forms.TextInput(attrs={'style':'width: 550px'}))

@ -0,0 +1 @@
__author__ = 'kotzilla'

@ -0,0 +1 @@
__author__ = 'kotzilla'

File diff suppressed because it is too large Load Diff

@ -0,0 +1,128 @@
from django.core.management.base import BaseCommand, CommandError
import urllib2, base64, json
from country.models import Country
from city.models import City
from functions.form_check import translit_with_separator
import string, random
def random_url():
salt = 'randomurl-'
r = ''.join(random.choice(string.ascii_lowercase) for _ in range(8))
return salt+r
class Command(BaseCommand):
# booking data
b_username = 'expomap'
b_password = '33xp00m33p'
def fill_city(self, d):
lang = d['languagecode']
id = d['city_id']
country_code = d['countrycode']
name = d['name']
country = Country.objects.filter(country_code=country_code)[0]
try:
city = City.objects.get(id=id)
except City.DoesNotExist:
try:
url = translit_with_separator(name)+'-%s'%country_code
except:
url = random_url()
city = City(country=country, id=id, url=url)
city.translate(lang)
city.name = name
try:
city.save()
except Exception, e:
with open('/home/kotzilla/Documents/qwer/proj/city/management/commands/errors.txt', 'a') as f:
f.write('error: %s\n city: %s\n'%(str(e), str(d)))
return
try:
url = translit_with_separator(name)+'-%s'%country_code
except:
url = random_url()
city.url = url
try:
city.save()
except Exception, e:
with open('/home/kotzilla/Documents/qwer/proj/city/management/commands/errors.txt', 'a') as f:
f.write('error: %s\n city: %s\n'%(str(e), str(d)))
return
try:
tr = City._meta.translations_model.objects.get(language_code=lang,master__id=getattr(city, 'id'))
except:
city.translate(lang)
city.name = name
try:
city.save()
return
except Exception, e:
with open('/home/kotzilla/Documents/qwer/proj/city/management/commands/errors.txt', 'a') as f:
f.write('error: %s\n city: %s\n'%(str(e), str(d)))
return
tr.name = name
tr.save()
return
def handle(self, *args, **options):
ROWS = 1000
qs = Country.objects.filter()
codes = [country.country_code for country in qs]
#print(codes[86:])
for code in codes[86:]:# start from 7 cause previous already filled(delete this)
offset= 0
run = True
while(run):
url = 'https://distribution-xml.booking.com/json/bookings.getCities?countrycodes=%s&rows=%s&offset=%s&lanuagecodes=ru,en'%(code ,ROWS, offset)
request = urllib2.Request(url)
base64string = base64.encodestring('%s:%s' % (self.b_username, self.b_password)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)
try:
response = urllib2.urlopen(request)
except urllib2.HTTPError, e:
continue
#raise CommandError('request failed. code error: %s'%code)
except urllib2.URLError, e:
continue
#raise CommandError('request failed. code error: %s'%code)
if response:
try:
json_list = response.read()
except Exception, e:
with open('/home/kotzilla/Documents/qwer/proj/city/management/commands/errors.txt', 'a') as f:
f.write('error: %s\n'%str(e))
continue
else:
with open('/home/kotzilla/Documents/qwer/proj/city/management/commands/errors.txt', 'a') as f:
f.write('error: bad request\n')
continue
try:
cities = json.loads(json_list)
except:
continue
for city in cities:
if isinstance(city, dict):
self.fill_city(city)
print('city: %s, country: %s, language: %s'%(city.get('name'), city.get('countrycode'), city.get('languagecode')))
if len(cities) < ROWS:
run = False
else:
offset += ROWS

@ -0,0 +1,129 @@
from django.core.management.base import BaseCommand, CommandError
import urllib2, base64, json
from country.models import Country
from city.models import City
from functions.form_check import translit_with_separator
import string, random
def random_url():
salt = 'randomurl-'
r = ''.join(random.choice(string.ascii_lowercase) for _ in range(8))
return salt+r
class Command(BaseCommand):
# booking data
b_username = 'expomap'
b_password = '33xp00m33p'
def fill_city(self, d):
lang = d['languagecode']
id = d['city_id']
country_code = d['countrycode']
name = d['name']
country = Country.objects.filter(country_code=country_code)[0]
try:
city = City.objects.get(id=id)
except City.DoesNotExist:
try:
url = translit_with_separator(name)+'-%s'%country_code
except:
url = random_url()
city = City(country=country, id=id, url=url)
city.translate(lang)
city.name = name
try:
city.save()
except Exception, e:
with open('/home/kotzilla/Documents/qwer/proj/city/management/commands/errors.txt', 'a') as f:
f.write('error: %s\n city: %s\n'%(str(e), str(d)))
return
try:
url = translit_with_separator(name)+'-%s'%country_code
except:
url = random_url()
city.url = url
try:
city.save()
except Exception, e:
with open('/home/kotzilla/Documents/qwer/proj/city/management/commands/errors.txt', 'a') as f:
f.write('error: %s\n city: %s\n'%(str(e), str(d)))
return
try:
tr = City._meta.translations_model.objects.get(language_code=lang,master__id=getattr(city, 'id'))
except:
city.translate(lang)
city.name = name
try:
city.save()
return
except Exception, e:
with open('/home/kotzilla/Documents/qwer/proj/city/management/commands/errors.txt', 'a') as f:
f.write('error: %s\n city: %s\n'%(str(e), str(d)))
return
tr.name = name
tr.save()
return
def handle(self, *args, **options):
ROWS = 1000
qs = Country.objects.filter()
codes = [country.country_code for country in qs]
#print(sorted(codes, reverse=True))
for code in sorted(codes, reverse=True):
offset= 0
run = True
while(run):
url = 'https://distribution-xml.booking.com/json/bookings.getCities?countrycodes=%s&rows=%s&offset=%s&lanuagecodes=ru,en'%(code ,ROWS, offset)
request = urllib2.Request(url)
base64string = base64.encodestring('%s:%s' % (self.b_username, self.b_password)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)
try:
response = urllib2.urlopen(request)
except urllib2.HTTPError, e:
continue
#raise CommandError('request failed. code error: %s'%code)
except urllib2.URLError, e:
continue
#raise CommandError('request failed. code error: %s'%code)
if response:
try:
json_list = response.read()
except Exception, e:
with open('/home/kotzilla/Documents/qwer/proj/city/management/commands/errors.txt', 'a') as f:
f.write('error: %s\n'%str(e))
continue
else:
with open('/home/kotzilla/Documents/qwer/proj/city/management/commands/errors.txt', 'a') as f:
f.write('error: bad request\n')
continue
try:
cities = json.loads(json_list)
except:
continue
for city in cities:
if isinstance(city, dict):
self.fill_city(city)
print('city: %s, country: %s, language: %s'%(city.get('name'), city.get('countrycode'), city.get('languagecode')))
if len(cities) < ROWS:
run = False
else:
offset += ROWS

@ -48,7 +48,7 @@ class City(TranslatableModel):
descriptions = models.CharField(max_length=255),
keywords = models.CharField(max_length=255),
)
#fields saves information about creating and changing model
# fields saves information about creating and changing model
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)

@ -0,0 +1,12 @@
from haystack import indexes
from models import City
class CityIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True)
name = indexes.CharField(model_attr='name')
def get_model(self):
return City
def index_queryset(self, using=None):
return self.get_model().objects.all()

@ -89,8 +89,9 @@ def company_change(request, url):
data['descriptions_%s' % code] = obj.descriptions
#fill form
form = CompanyForm(initial=data)
form.fields['city'].widget.attrs['data-init-text'] = company.city.name
#set choices filled by ajax
form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=data['country'])]
#form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=data['country'])]
form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.filter(theme__in=data['theme'])]
args = {}

@ -190,8 +190,9 @@ def conference_change(request, url):
data['descriptions_%s' % code] = obj.descriptions
#initial form
form = ConferenceChangeForm(initial=data)
form.fields['city'].widget.attrs['data-init-text'] = conference.city.name
#set choices filled by ajax
form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=data['country'])]
#form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=data['country'])]
form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.filter(theme__in=data['theme'])]
#get existing statistic
statistic = Statistic.objects.filter(conference=getattr(conference, 'id'))

@ -88,7 +88,9 @@ class Conference(TranslatableModel, EventMixin):
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
views = models.PositiveIntegerField(null=True)
main_page = models.PositiveIntegerField(default=0, db_index=True)
views = models.PositiveIntegerField(default=0)
def __unicode__(self):
return self.lazy_translation_getter('name', unicode(self.pk))

@ -4,13 +4,10 @@ from django.http import HttpResponseRedirect, HttpResponse
from django.core.context_processors import csrf
from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.decorators import login_required
from django.db.models.loading import get_model
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
#models and forms
from models import Country
from forms import CountryForm, CountryDeleteForm
from file.models import FileModel, TmpFile
from file.models import FileModel
from file.forms import FileModelForm
#custom views
from functions.custom_views import objects_list, add_object_with_file, delete_object, filtered_list
@ -72,7 +69,7 @@ def country_change(request, url):
else:
#fill form with data from database
data = {'population' : c.population, 'teritory' : c.teritory, #data from NOT translated fields
'timezone' : c.timezone, 'region' : c.region, 'country_id' : country_id,
'timezone' : c.timezone, 'country_id' : country_id,
'phone_code' : c.phone_code, 'time_delivery' : c.time_delivery}
if c.capital:

@ -6,7 +6,7 @@ from tinymce.widgets import TinyMCE
from django.core.exceptions import ValidationError
from django.forms.util import ErrorList
#models
from models import Country, City, REGIONS
from models import Country, City
from directories.models import Language, Currency, Iata
#functions
from functions.translate import fill_with_signal
@ -53,7 +53,6 @@ class CountryForm(forms.Form):
widget=forms.TextInput(attrs={'placeholder':'Код страны'}))
time_delivery = forms.CharField(label='Срок выдачи', required=False,
widget=forms.TextInput(attrs={'placeholder':'Срок выдачи'}))
region = forms.ChoiceField(label='Регион', choices=((item, item) for item in REGIONS))
#services = forms.MultipleChoiceField(label='Сервисы', required=False, choices=);
#field for comparing tmp files
@ -127,17 +126,11 @@ class CountryForm(forms.Form):
country.language.clear()
country.currency.clear()
if data.get("name_en"):
country.url = translit_with_separator(data['name_en'].strip()).lower()
else:
country.url = translit_with_separator(data['name_ru'].strip()).lower()
country.population = data['population']
country.teritory = data['teritory']
country.timezone = data['timezone']
country.phone_code = data['phone_code']
country.time_delivery = data['time_delivery']
country.region = data['region']
if data.get('capital'):
country.capital = City.objects.get(id=data['capital'])
@ -161,19 +154,6 @@ class CountryForm(forms.Form):
check_tmp_files(country, data['key'])
def clean(self):
data = self.cleaned_data
id = data.get('country_id')
name_ru = data.get('name_ru')
country = Country.objects.filter(url=translit_with_separator(name_ru))
if country and str(country[0].id) != id:
msg = 'Страна с таким названием уже существует'
self._errors['name_ru'] = ErrorList([msg])
del data['name_ru']
return data
def clean_phone_code(self):
"""
phone code checking

@ -17,7 +17,6 @@ from django.utils.translation import get_language as lang
# check if table exist and create flags if true
flags = [str(item.id) for item in Service.objects.all()] if db_table_exists('service_service') else []
REGIONS =('europa', 'asia', 'america', 'africa')
class CountryManager(TranslationManager):
def all(self):
@ -33,6 +32,11 @@ class CountryManager(TranslationManager):
except:
return None
class Area(TranslatableModel):
translations = TranslatedFields(
name = models.CharField(max_length=255),
)
class Country(TranslatableModel):
"""
Create Country model
@ -45,6 +49,7 @@ class Country(TranslatableModel):
services = BitField(flags=flags)
url = models.SlugField(unique=True)
# relations
area = models.ForeignKey(Area)
big_cities = models.ManyToManyField(City, blank=True, null=True, related_name='cities')
capital = models.ForeignKey(City,blank=True, null=True, on_delete=models.PROTECT, related_name='capital')
language = models.ManyToManyField(Language, blank=True, null=True)
@ -56,8 +61,7 @@ class Country(TranslatableModel):
phone_code = models.PositiveIntegerField(blank=True, null=True)
time_delivery = models.PositiveSmallIntegerField(blank=True, null=True)
#
region = EnumField(values=REGIONS)
# fields saves information about creating and changing model
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
@ -73,11 +77,12 @@ class Country(TranslatableModel):
documents = models.TextField(blank=True),#pdf?
consulate = models.TextField(blank=True),
#-----meta data
title = models.CharField(max_length=250),
descriptions = models.CharField(max_length=250),
keywords = models.CharField(max_length=250),
title = models.CharField(max_length=255),
descriptions = models.CharField(max_length=255),
keywords = models.CharField(max_length=255),
)
country_code = models.CharField(max_length=2)
# class Meta:
# ordering = ['translations__name']

@ -0,0 +1,3 @@
VERSION = (0, 5, 0,)
__version__ = '.'.join(map(str, VERSION))
default_app_config = 'django_messages.apps.DjangoMessagesConfig'

@ -0,0 +1,112 @@
from django import forms
from django.conf import settings
from django.utils.translation import gettext_lazy as _
from django.contrib import admin
from django.contrib.auth.models import Group
from django_messages.utils import get_user_model
User = get_user_model()
if "notification" in settings.INSTALLED_APPS:
from notification import models as notification
else:
notification = None
from django_messages.models import Message
class MessageAdminForm(forms.ModelForm):
"""
Custom AdminForm to enable messages to groups and all users.
"""
group = forms.ChoiceField(label=_('group'), required=False,
help_text=_('Creates the message optionally for all users or a group of users.'))
def __init__(self, *args, **kwargs):
super(MessageAdminForm, self).__init__(*args, **kwargs)
self.fields['group'].choices = self._get_group_choices()
self.fields['recipient'].required = True
def _get_group_choices(self):
return [('', u'---------'), ('all', _('All users'))] + \
[(group.pk, group.name) for group in Group.objects.all()]
class Meta:
model = Message
fields = ('sender', 'recipient', 'group', 'parent_msg', 'subject',
'body', 'sent_at', 'read_at', 'replied_at', 'sender_deleted_at',
'recipient_deleted_at')
class MessageAdmin(admin.ModelAdmin):
form = MessageAdminForm
fieldsets = (
(None, {
'fields': (
'sender',
('recipient', 'group'),
),
}),
(_('Message'), {
'fields': (
'parent_msg',
'subject', 'body',
),
'classes': ('monospace' ),
}),
(_('Date/time'), {
'fields': (
'sent_at', 'read_at', 'replied_at',
'sender_deleted_at', 'recipient_deleted_at',
),
'classes': ('collapse', 'wide'),
}),
)
list_display = ('subject', 'sender', 'recipient', 'sent_at', 'read_at')
list_filter = ('sent_at', 'sender', 'recipient')
search_fields = ('subject', 'body')
raw_id_fields = ('sender', 'recipient', 'parent_msg')
def save_model(self, request, obj, form, change):
"""
Saves the message for the recipient and looks in the form instance
for other possible recipients. Prevents duplication by excludin the
original recipient from the list of optional recipients.
When changing an existing message and choosing optional recipients,
the message is effectively resent to those users.
"""
obj.save()
if notification:
# Getting the appropriate notice labels for the sender and recipients.
if obj.parent_msg is None:
sender_label = 'messages_sent'
recipients_label = 'messages_received'
else:
sender_label = 'messages_replied'
recipients_label = 'messages_reply_received'
# Notification for the sender.
notification.send([obj.sender], sender_label, {'message': obj,})
if form.cleaned_data['group'] == 'all':
# send to all users
recipients = User.objects.exclude(pk=obj.recipient.pk)
else:
# send to a group of users
recipients = []
group = form.cleaned_data['group']
if group:
group = Group.objects.get(pk=group)
recipients.extend(
list(group.user_set.exclude(pk=obj.recipient.pk)))
# create messages for all found recipients
for user in recipients:
obj.pk = None
obj.recipient = user
obj.save()
if notification:
# Notification for the recipient.
notification.send([user], recipients_label, {'message' : obj,})
admin.site.register(Message, MessageAdmin)

@ -0,0 +1,6 @@
from django.apps import AppConfig
from django.utils.translation import ugettext_lazy as _
class DjangoMessagesConfig(AppConfig):
name = 'django_messages'
verbose_name = _('Messages')

@ -0,0 +1,7 @@
from django_messages.models import inbox_count_for
def inbox(request):
if request.user.is_authenticated():
return {'messages_inbox_count': inbox_count_for(request.user)}
else:
return {}

@ -0,0 +1,14 @@
# -*- coding: utf-8 -*-
from django.conf.urls import patterns, url
from django.contrib.auth.decorators import login_required
from expomap_views import InboxView, message_reply, MessageHistory
urlpatterns = patterns('',
url(r'^profile/messages/reply/(?P<message_id>[\d]+)/$', message_reply),
url(r'^profile/messages/history/(?P<user_id>[\d]+)/$', login_required(MessageHistory.as_view())),
url(r'^profile/messages/$', login_required(InboxView.as_view())),
#url(r'^profile/messages/reply/(?P<message_id>[\d]+)/$', login_required(InboxView.as_view())),
)

@ -0,0 +1,90 @@
# -*- coding: utf-8 -*-
from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render_to_response, get_object_or_404
from django.views.generic import ListView, DetailView, TemplateView, FormView
from django.utils.translation import ugettext as _
from django.contrib import messages
from django.db.models import Q
from django.utils import timezone
from forms import ComposeForm, ReplyForm
from models import Message
import json
class InboxView(TemplateView):
template_name = 'accounts/messages.html'
def get_context_data(self, **kwargs):
context = super(InboxView, self).get_context_data(**kwargs)
senders = Message.objects.senders(self.request.user)
context['senders'] = [{'sender': s, 'message': Message.objects.filter(recipient=self.request.user, sender=s)[0]}\
for s in senders]
reply_form = ReplyForm()
context['reply_form'] = reply_form
return context
def message_reply(request, message_id):
response = {'success': False}
if request.POST:
form = ReplyForm(request.POST)
if form.is_valid():
parent_msg =get_object_or_404(Message, id=message_id)# Message.objects.get(id=parent)
form.save(sender=request.user, parent_msg=parent_msg)
response['success'] = True
return HttpResponse(json.dumps(response), content_type='application/json')
else:
return HttpResponse('error')
return HttpResponse('not ajax')
class MessageHistory(FormView):
template_name = 'accounts/messages_history.html'
form_class = ReplyForm
success_url = ''
def get_initial(self):
return {'recipient':self.kwargs.get('user_id')}
def get_context_data(self, **kwargs):
now = timezone.now()
context = super(MessageHistory, self).get_context_data(**kwargs)
user = self.kwargs.get('user_id')
messages = Message.objects.filter(
Q(sender=self.request.user, recipient=user) |
Q(sender=user, recipient=self.request.user)
)[:15]
Message.objects.filter(sender=self.request.user, recipient=user).update(read_at=now)
context['profile_messages'] = messages
return context
def form_invalid(self, form):
user_id = self.kwargs.get('user_id')
return HttpResponseRedirect('/profile/messages/history/'+user_id+'/')
def form_valid(self, form):
form.save(sender=self.request.user)
user_id = self.kwargs.get('user_id')
return HttpResponseRedirect('/profile/messages/history/'+user_id+'/')
"""
class ReplyView(FormView):
form_class = ComposeForm
template_name = 'message_reply.html'
def form_valid(self, form):
form.save(sender=self.request.user, parent_msg=self.parent)
messages.info(self.request, _(u"Message successfully sent."))
return HttpResponseRedirect('/profile/messages')
def get_context_data(self, **kwargs):
context = super(InboxView, self).get_context_data(**kwargs)
parent = self.kwargs.get('self.message_id')
parent_msg =get_object_or_404(Message, id=parent)# Message.objects.get(id=parent)
context['parent_msg'] = parent_msg
return context
"""

@ -0,0 +1,60 @@
"""
Based on http://www.djangosnippets.org/snippets/595/
by sopelkin
"""
from django import forms
from django.forms import widgets
from django.utils.translation import ugettext_lazy as _
from django_messages.utils import get_user_model, get_username_field
User = get_user_model()
class CommaSeparatedUserInput(widgets.Input):
input_type = 'text'
def render(self, name, value, attrs=None):
if value is None:
value = ''
elif isinstance(value, (list, tuple)):
value = (', '.join([getattr(user, get_username_field()) for user in value]))
return super(CommaSeparatedUserInput, self).render(name, value, attrs)
class CommaSeparatedUserField(forms.Field):
widget = CommaSeparatedUserInput
def __init__(self, *args, **kwargs):
recipient_filter = kwargs.pop('recipient_filter', None)
self._recipient_filter = recipient_filter
super(CommaSeparatedUserField, self).__init__(*args, **kwargs)
def clean(self, value):
super(CommaSeparatedUserField, self).clean(value)
if not value:
return ''
if isinstance(value, (list, tuple)):
return value
names = set(value.split(','))
names_set = set([name.strip() for name in names if name.strip()])
users = list(User.objects.filter(**{'%s__in' % get_username_field(): names_set}))
unknown_names = names_set ^ set([getattr(user, get_username_field()) for user in users])
recipient_filter = self._recipient_filter
invalid_users = []
if recipient_filter is not None:
for r in users:
if recipient_filter(r) is False:
users.remove(r)
invalid_users.append(getattr(r, get_username_field()))
if unknown_names or invalid_users:
raise forms.ValidationError(_(u"The following usernames are incorrect: %(users)s") % {'users': ', '.join(list(unknown_names)+invalid_users)})
return users

@ -0,0 +1,87 @@
import datetime
from django import forms
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
if "notification" in settings.INSTALLED_APPS:
from notification import models as notification
else:
notification = None
from django_messages.models import Message
from django_messages.fields import CommaSeparatedUserField
from accounts.models import User
class ReplyForm(forms.Form):
recipient = forms.CharField(widget=forms.HiddenInput(), required=False)
subject = forms.CharField(label=_(u"Subject"), max_length=120, required=False)
body = forms.CharField(label=_(u"Body"),
widget=forms.Textarea(attrs={'rows': '12', 'cols':'55'}))
def save(self, sender, parent_msg=None):
subject = self.cleaned_data['subject']
body = self.cleaned_data['body']
recipient = self.cleaned_data['recipient']
msg = Message(
sender = sender,
recipient = recipient,
subject = subject,
body = body,
)
if parent_msg is not None:
msg.parent_msg = parent_msg
parent_msg.replied_at = datetime.datetime.now()
parent_msg.save()
msg.save()
return msg
def clean_recipient(self):
recipient = self.cleaned_data.get('recipient')
user = User.objects.get(id=recipient)
return user
class ComposeForm(forms.Form):
"""
A simple default form for private messages.
"""
recipient = CommaSeparatedUserField(label=_(u"Recipient"))
subject = forms.CharField(label=_(u"Subject"), max_length=120, required=False)
body = forms.CharField(label=_(u"Body"),
widget=forms.Textarea(attrs={'rows': '12', 'cols':'55'}))
def __init__(self, *args, **kwargs):
recipient_filter = kwargs.pop('recipient_filter', None)
super(ComposeForm, self).__init__(*args, **kwargs)
if recipient_filter is not None:
self.fields['recipient']._recipient_filter = recipient_filter
def save(self, sender, parent_msg=None):
recipients = self.cleaned_data['recipient']
subject = self.cleaned_data['subject']
body = self.cleaned_data['body']
message_list = []
for r in recipients:
msg = Message(
sender = sender,
recipient = r,
subject = subject,
body = body,
)
if parent_msg is not None:
msg.parent_msg = parent_msg
parent_msg.replied_at = datetime.datetime.now()
parent_msg.save()
msg.save()
message_list.append(msg)
if notification:
if parent_msg is not None:
notification.send([sender], "messages_replied", {'message': msg,})
notification.send([r], "messages_reply_received", {'message': msg,})
else:
notification.send([sender], "messages_sent", {'message': msg,})
notification.send([r], "messages_received", {'message': msg,})
return message_list

@ -0,0 +1,317 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Ossama M. Khayat <okhayat@yahoo.com>, 2009.
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-10-14 04:23+0300\n"
"PO-Revision-Date: 2009-11-02 00:41+0300\n"
"Last-Translator: Ossama M. Khayat <okhayat@yahoo.com>\n"
"Language-Team: Arabic <doc@arabeyes.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 1.0\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:8
#: templates/messages/view.html:12
msgid "Recipient"
msgstr "المستلم"
#: admin.py:15
msgid "group"
msgstr "مجموعة"
#: admin.py:16
msgid "Creates the message optionally for all users or a group of users."
msgstr "ينشئ الرسالة اختياريا لجميع المستخدمين او لمجموعة من المستخدمين."
#: admin.py:23
msgid "All users"
msgstr "جميع المستخدمين"
#: admin.py:38 models.py:88
msgid "Message"
msgstr "الرسالة"
#: admin.py:45
msgid "Date/time"
msgstr "التاريخ/الوقت"
#: fields.py:53
#, python-format
msgid "The following usernames are incorrect: %(users)s"
msgstr "أسماء المستخدمين التالي ذكرهم غير صحيحة: %(users)s"
#: forms.py:21 models.py:49 templates/messages/inbox.html:8
#: templates/messages/outbox.html:8 templates/messages/trash.html:8
#: templates/messages/view.html:6
msgid "Subject"
msgstr "الموضوع"
#: forms.py:22 models.py:50
msgid "Body"
msgstr "المحتوى"
#: management.py:9
msgid "Message Received"
msgstr "تم استلام الرسالة"
#: management.py:9
msgid "you have received a message"
msgstr "وصلتك رسالة"
#: management.py:10
msgid "Message Sent"
msgstr "تم إرسال الرسالة"
#: management.py:10
msgid "you have sent a message"
msgstr "قمت بإرسال رسالة"
#: management.py:11
msgid "Message Replied"
msgstr "تم الرد على الرسالة"
#: management.py:11
msgid "you have replied to a message"
msgstr "قمت بالرد على الرسالة"
#: management.py:12
msgid "Reply Received"
msgstr "تم استلام الرد"
#: management.py:12
msgid "you have received a reply to a message"
msgstr "استملت رداً على رسالة"
#: management.py:13
msgid "Message Deleted"
msgstr "تم حذف الرسالة"
#: management.py:13
msgid "you have deleted a message"
msgstr "قمت بحذف رسالة"
#: management.py:14
msgid "Message Recovered"
msgstr "تم استرجاع الرسالة"
#: management.py:14
msgid "you have undeleted a message"
msgstr "قمت باسترجاع رسالة"
#: models.py:51 templates/messages/inbox.html:8
#: templates/messages/trash.html:8 templates/messages/view.html:8
msgid "Sender"
msgstr "المرسل"
#: models.py:53
msgid "Parent message"
msgstr "الرسالة الأساسية"
#: models.py:54
msgid "sent at"
msgstr "أرسلت في"
#: models.py:55
msgid "read at"
msgstr "قُرأت في"
#: models.py:56
msgid "replied at"
msgstr "رُدّ عليها في"
#: models.py:57
msgid "Sender deleted at"
msgstr "حذفها المُرسل في"
#: models.py:58
msgid "Recipient deleted at"
msgstr "حذفها المستلم في"
#: models.py:89
msgid "Messages"
msgstr "الرسائل"
#: utils.py:27
#, python-format
msgid "New Message: %(subject)s"
msgstr "رسالة جديدة: %(subject)s"
#: views.py:78 views.py:112
msgid "Message successfully sent."
msgstr "تم إرسال الرسالة بنجاح."
#: views.py:118
#, python-format
msgid ""
"%(sender)s wrote:\n"
"%(body)s"
msgstr ""
"كتب %(sender)s:\n"
"%(body)s"
#: views.py:122
#, python-format
msgid "Re: %(subject)s"
msgstr "رد: %(subject)s"
#: views.py:158
msgid "Message successfully deleted."
msgstr "تم حذف الرسالة بنجاح."
#: views.py:185
msgid "Message successfully recovered."
msgstr "تم استرجاع الرسالة بنجاح."
#: templates/messages/base.html:8 templates/messages/inbox.html:4
#: templates/messages/new_message.html:10
msgid "Inbox"
msgstr "الوارد"
#: templates/messages/base.html:9 templates/messages/outbox.html:4
msgid "Sent Messages"
msgstr "الرسائل المرسلة"
#: templates/messages/base.html:10
msgid "New Message"
msgstr "رسالة جديدة"
#: templates/messages/base.html:11
msgid "Trash"
msgstr "الحاوية"
#: templates/messages/compose.html:4
msgid "Compose Message"
msgstr "أكتب رسالة"
#: templates/messages/compose.html:9
msgid "Send"
msgstr "أرسل"
#: templates/messages/inbox.html:8
msgid "Received"
msgstr "استُلمت"
#: templates/messages/inbox.html:8 templates/messages/outbox.html:8
#: templates/messages/trash.html:8
msgid "Action"
msgstr "إجراء"
#: templates/messages/inbox.html:20 templates/messages/outbox.html:17
#: templates/messages/trash.html:17 templates/messages/view.html:11
msgid "DATETIME_FORMAT"
msgstr "DATETIME_FORMAT"
#: templates/messages/inbox.html:21 templates/messages/outbox.html:18
msgid "delete"
msgstr "حذف"
#: templates/messages/inbox.html:27 templates/messages/outbox.html:24
#: templates/messages/trash.html:24
msgid "No messages."
msgstr "لا توجد رسائل."
#: templates/messages/new_message.html:1
#, python-format
msgid ""
"Hello %(recipient)s,\n"
"\n"
"you received a private message from %(sender)s with\n"
"the following contents:"
msgstr ""
"مرحباً %(recipient)s،\n"
"\n"
"وصلتك رسالة خاصة من %(sender)s\n"
"تحتوي ما يلي:"
#: templates/messages/new_message.html:9
#, python-format
msgid "Sent from %(site_url)s"
msgstr "أرسلت من %(site_url)s"
#: templates/messages/new_message.html:11 templates/messages/view.html:18
msgid "Reply"
msgstr "رد"
#: templates/messages/outbox.html:8
msgid "Sent"
msgstr "أرسل"
#: templates/messages/trash.html:4
msgid "Deleted Messages"
msgstr "الرسائل المحذوفة"
#: templates/messages/trash.html:8 templates/messages/view.html:10
msgid "Date"
msgstr "التاريخ"
#: templates/messages/trash.html:18
msgid "undelete"
msgstr "استرجاع"
#: templates/messages/trash.html:27
msgid ""
"Deleted Messages are removed from the trash at unregular intervals, don't "
"rely on this feature for long-time storage."
msgstr ""
"تتم إزالة الرسائل المحذوفة من الحاوية على فترات زمنيّة متفاوتة، "
"فلا تعتمد على هذه الميزة للتخزين الطويل المدى."
#: templates/messages/view.html:4
msgid "View Message"
msgstr "مشاهدة الرسالة"
#: templates/messages/view.html:20
msgid "Delete"
msgstr "حذف"
#: templates/notification/messages_deleted/notice.html:1
#, python-format
msgid ""
"You have deleted the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "قمت بحذف الرسالة <a href=\"%(message_url)s\">%(message)s</a>."
#: templates/notification/messages_received/notice.html:2
#, python-format
msgid ""
"You have received the message <a href=\"%(message_url)s\">%(message)s</a> "
"from %(message_sender)s."
msgstr ""
"وصلتك الرسالة <a href=\"%(message_url)s\">%(message)s</a> "
"من %(message_sender)s."
#: templates/notification/messages_recovered/notice.html:1
#, python-format
msgid ""
"You have recovered the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "قمت باسترجاع الرسالة <a href=\"%(message_url)s\">%(message)s</a>."
#: templates/notification/messages_replied/notice.html:2
#, python-format
msgid ""
"You have replied to <a href=\"%(message_url)s\">%(message_parent_msg)s</a> "
"from %(message_recipient)s."
msgstr ""
"قمت بالرد الرسائل <a href=\"%(message_url)s\">%(message_parent_msg)s</a> "
"من %(message_recipient)s."
#: templates/notification/messages_reply_received/notice.html:2
#, python-format
msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s."
msgstr "أرسل لك %(message_sender)s رداً على %(message_parent_msg)s."
#: templates/notification/messages_sent/notice.html:2
#, python-format
msgid ""
"You have sent the message <a href=\"%(message_url)s\">%(message)s</a> to %"
"(message_recipient)s."
msgstr ""
"قمت بإرسالة الرسالة <a href=\"%(message_url)s\">%(message)s</a> إلى %"
"(message_recipient)s."

@ -0,0 +1,367 @@
# django-messages in Danish.
# django-messages på Dansk.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Michael Lind Mortensen <illio@cs.au.dk>, 2009.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-09-11 12:31-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7
#: templates/messages/view.html:12
msgid "Recipient"
msgstr "Modtager"
#: admin.py:15
msgid "group"
msgstr "gruppe"
#: admin.py:16
msgid "Creates the message optionally for all users or a group of users."
msgstr "Skaber beskeden for alle brugere eller en gruppe af brugere."
#: admin.py:23
msgid "All users"
msgstr "Alle brugere"
#: admin.py:38 models.py:88
msgid "Message"
msgstr "Beskeder"
#: admin.py:45
msgid "Date/time"
msgstr "Dato/tid"
#: fields.py:53
#, python-format
msgid "The following usernames are incorrect: %(users)s"
msgstr "De følgende brugernavne er forkerte: %(users)s"
#: forms.py:21 models.py:49 templates/messages/inbox.html:7
#: templates/messages/outbox.html:7 templates/messages/trash.html:7
#: templates/messages/view.html:6
msgid "Subject"
msgstr "Emne"
#: forms.py:22 models.py:50
msgid "Body"
msgstr "Indhold"
#: management.py:9
msgid "Message Received"
msgstr "Besked Modtaget"
#: management.py:9
msgid "you have received a message"
msgstr "du har modtaget en besked"
#: management.py:10
msgid "Message Sent"
msgstr "Besked Afsendt"
#: management.py:10
msgid "you have sent a message"
msgstr "du har sendt en besked"
#: management.py:11
msgid "Message Replied"
msgstr "Besked Besvaret"
#: management.py:11
msgid "you have replied to a message"
msgstr "du har besvaret en besked"
#: management.py:12
msgid "Reply Received"
msgstr "Svar Modtaget"
#: management.py:12
msgid "you have received a reply to a message"
msgstr "du har modtaget en besvarelse på en besked"
#: management.py:13
msgid "Message Deleted"
msgstr "Besked Slettet"
#: management.py:13
msgid "you have deleted a message"
msgstr "du har slettet en besked"
#: management.py:14
msgid "Message Recovered"
msgstr "Besked Genskabt"
#: management.py:14
msgid "you have undeleted a message"
msgstr "du har genskabt en besked"
#: models.py:51 templates/messages/inbox.html:7
#: templates/messages/trash.html:7 templates/messages/view.html:8
msgid "Sender"
msgstr "Afsender"
#: models.py:53
msgid "Parent message"
msgstr "Stambesked"
#: models.py:54
msgid "sent at"
msgstr "sendt"
#: models.py:55
msgid "read at"
msgstr "læst"
#: models.py:56
msgid "replied at"
msgstr "besvaret"
#: models.py:57
msgid "Sender deleted at"
msgstr "Afsender slettet"
#: models.py:58
msgid "Recipient deleted at"
msgstr "Modtager slettet"
#: models.py:89
msgid "Messages"
msgstr "Beskeder"
#: utils.py:27
#, python-format
msgid "New Message: %(subject)s"
msgstr "Ny besked: %(subject)s"
#: views.py:78 views.py:112
msgid "Message successfully sent."
msgstr "Besked sendt succesfuldt."
#: views.py:118
#, python-format
msgid ""
"%(sender)s wrote:\n"
"%(body)s"
msgstr ""
"%(sender)s skrev:\n"
"%(body)s"
#: views.py:122
#, python-format
msgid "Re: %(subject)s"
msgstr "SV: %(subject)s"
#: views.py:158
msgid "Message successfully deleted."
msgstr "Besked slettet succesfuldt."
#: views.py:185
msgid "Message successfully recovered."
msgstr "Besked genskabt succesfuldt."
#: templates/messages/base.html:8 templates/messages/inbox.html:4
#: templates/messages/new_message.html:10
msgid "Inbox"
msgstr "Indboks"
#: templates/messages/base.html:9 templates/messages/outbox.html:4
msgid "Sent Messages"
msgstr "Sendte Beskeder"
#: templates/messages/base.html:10
msgid "New Message"
msgstr "Ny Besked"
#: templates/messages/base.html:11
msgid "Trash"
msgstr "Papirkurv"
#: templates/messages/compose.html:4
msgid "Compose Message"
msgstr "Skriv Ny Besked"
#: templates/messages/compose.html:9
msgid "Send"
msgstr "Send"
#: templates/messages/inbox.html:7
msgid "Received"
msgstr "Modtaget"
#: templates/messages/inbox.html:7 templates/messages/outbox.html:7
#: templates/messages/trash.html:7
msgid "Action"
msgstr "Handling"
#: templates/messages/inbox.html:19 templates/messages/outbox.html:16
#: templates/messages/trash.html:16 templates/messages/view.html:11
msgid "DATETIME_FORMAT"
msgstr "DATETIME_FORMAT"
#: templates/messages/inbox.html:20 templates/messages/outbox.html:17
msgid "delete"
msgstr "slet"
#: templates/messages/new_message.html:1
#, python-format
msgid ""
"Hello %(recipient)s,\n"
"\n"
"you received a private message from %(sender)s with\n"
"the following contents:"
msgstr ""
"Goddag %(recipient)s,\n"
"\n"
"du har modtaget en privat besked fra %(sender)s med\n"
"følgende indhold:"
#: templates/messages/new_message.html:9
#, python-format
msgid "Sent from %(site_url)s"
msgstr "Sendt fra %(site_url)s"
#: templates/messages/new_message.html:11 templates/messages/view.html:18
msgid "Reply"
msgstr "Besvar"
#: templates/messages/outbox.html:7
msgid "Sent"
msgstr "Sendt"
#: templates/messages/trash.html:4
msgid "Deleted Messages"
msgstr "Slettede Beskeder"
#: templates/messages/trash.html:7 templates/messages/view.html:10
msgid "Date"
msgstr "Dato"
#: templates/messages/trash.html:17
msgid "undelete"
msgstr "genskab"
#: templates/messages/trash.html:23
msgid ""
"Deleted Messages are removed from the trash at unregular intervals, don't "
"rely on this feature for long-time storage."
msgstr ""
"Slettede beskeder fjernes fra papirkurven med jævne mellemrum. Lad være med "
"at regne med denne funktion til langtidslagring."
#: templates/messages/view.html:4
msgid "View Message"
msgstr "Læs Besked"
#: templates/messages/view.html:20
msgid "Delete"
msgstr "Slet"
#: templates/notification/messages_deleted/notice.html:1
#, python-format
msgid ""
"You have deleted the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "Du har slettet beskeden <a href=\"%(message_url)s\">%(message)s</a>."
#: templates/notification/messages_received/notice.html:2
#, python-format
msgid ""
"You have received the message <a href=\"%(message_url)s\">%(message)s</a> "
"from %(message_sender)s."
msgstr ""
"Du har modtaget beskeden <a href=\"%(message_url)s\">%(message)s</a> fra %"
"(message_sender)s."
#: templates/notification/messages_recovered/notice.html:1
#, python-format
msgid ""
"You have recovered the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "Du har genskabt beskeden <a href=\"%(message_url)s\">%(message)s</a>."
#: templates/notification/messages_replied/notice.html:2
#, python-format
msgid ""
"You have replied to <a href=\"%(message_url)s\">%(message_parent_msg)s</a> "
"from %(message_recipient)s."
msgstr ""
"Du har besvaret <a href=\"%(message_url)s\">%(message_parent_msg)s</a> fra %"
"(message_recipient)s."
#: templates/notification/messages_reply_received/notice.html:2
#, python-format
msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s."
msgstr ""
"%(message_sender)s har sendt dig en besvarelse på %(message_parent_msg)s."
#: templates/notification/messages_sent/notice.html:2
#, python-format
msgid ""
"You have sent the message <a href=\"%(message_url)s\">%(message)s</a> to %"
"(message_recipient)s."
msgstr ""
"Du har sendt beskeden <a href=\"%(message_url)s\">%(message)s</a> til %"
"(message_recipient)s."
#, fuzzy
#~ msgid "You have deleted the message '%(message)s'."
#~ msgstr "Du har slettet beskeden '%(message)s'."
#, fuzzy
#~ msgid ""
#~ "%(message_sender)s has sent you a message:\n"
#~ "\n"
#~ "%(message)s\n"
#~ "\n"
#~ "%(message_body)s\n"
#~ "\n"
#~ "http://%(current_site)s%(message_url)s"
#~ msgstr ""
#~ "%(message_sender)s har sendt dig en besked:\n"
#~ "\n"
#~ "%(message)s\n"
#~ "\n"
#~ "%(message_body)s\n"
#~ "\n"
#~ "http://%(current_site)s%(message_url)s"
#~ msgid "%(notice)s by %(message_sender)s"
#~ msgstr "%(notice)s af %(message_sender)s"
#, fuzzy
#~ msgid "You have recovered the message '%(message)s'."
#~ msgstr "Du har genskabt beskeden '%(message)s'."
#, fuzzy
#~ msgid ""
#~ "You have replied to '%(message_parent_msg)s' from %(message_recipient)s."
#~ msgstr "Du har besvaret '%(message_parent_msg)s' fra %(message_recipient)s."
#~ msgid ""
#~ "%(message_sender)s replied to '%(message_parent_msg)s':\n"
#~ "\n"
#~ "%(message)s\n"
#~ "\n"
#~ "%(message_body)s\n"
#~ "\n"
#~ "http://%(current_site)s%(message_url)s"
#~ msgstr ""
#~ "%(message_sender)s besvarede '%(message_parent_msg)s':\n"
#~ "\n"
#~ "%(message)s\n"
#~ "\n"
#~ "%(message_body)s\n"
#~ "\n"
#~ "http://%(current_site)s%(message_url)s"
#, fuzzy
#~ msgid "You have sent the message '%(message)s' to %(message_recipient)s."
#~ msgstr "Du har sendt beskeden '%(message)s' til %(message_recipient)s."

@ -0,0 +1,321 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-09-11 12:31-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7
#: templates/messages/view.html:12
msgid "Recipient"
msgstr "Empfänger"
#: admin.py:15
msgid "group"
msgstr "Gruppe"
#: admin.py:16
msgid "Creates the message optionally for all users or a group of users."
msgstr ""
"Fügt die Nachricht wahlweise für jeden Benutzer der ausgewählten Gruppe "
"hinzu."
#: admin.py:23
msgid "All users"
msgstr "Alle Benutzer"
#: admin.py:38 models.py:88
msgid "Message"
msgstr "Nachricht"
#: admin.py:45
msgid "Date/time"
msgstr "Datum/Zeit"
#: fields.py:53
#, python-format
msgid "The following usernames are incorrect: %(users)s"
msgstr "Die folgenden Benutzernamen sind nicht korrekt: %(users)s"
#: forms.py:21 models.py:49 templates/messages/inbox.html:7
#: templates/messages/outbox.html:7 templates/messages/trash.html:7
#: templates/messages/view.html:6
msgid "Subject"
msgstr "Betreff"
#: forms.py:22 models.py:50
msgid "Body"
msgstr "Inhalt"
#: management.py:9
msgid "Message Received"
msgstr "Nachricht erhalten"
#: management.py:9
msgid "you have received a message"
msgstr "Du hast eine Nachricht erhalten"
#: management.py:10
msgid "Message Sent"
msgstr "Nachricht gesendet"
#: management.py:10
msgid "you have sent a message"
msgstr "Du hast eine Nachricht gesendet"
#: management.py:11
msgid "Message Replied"
msgstr "Nachricht beantwortet"
#: management.py:11
msgid "you have replied to a message"
msgstr "Du hast eine Nachricht beantwortet"
#: management.py:12
msgid "Reply Received"
msgstr "Antwort erhalten"
#: management.py:12
msgid "you have received a reply to a message"
msgstr "Du hast eine Antwort auf eine Nachricht erhalten"
#: management.py:13
msgid "Message Deleted"
msgstr "Nachricht gelöscht"
#: management.py:13
msgid "you have deleted a message"
msgstr "Du hast eine Nachricht gelöscht"
#: management.py:14
msgid "Message Recovered"
msgstr "Nachricht wiederhergestellt"
#: management.py:14
msgid "you have undeleted a message"
msgstr "Du hast eine Nachricht wiederhergestellt"
#: models.py:51 templates/messages/inbox.html:7
#: templates/messages/trash.html:7 templates/messages/view.html:8
msgid "Sender"
msgstr "Absender"
#: models.py:53
msgid "Parent message"
msgstr "Übergeordnete Nachricht"
#: models.py:54
msgid "sent at"
msgstr "gesendet am"
#: models.py:55
msgid "read at"
msgstr "gelesen am"
#: models.py:56
msgid "replied at"
msgstr "beantwortet am"
#: models.py:57
msgid "Sender deleted at"
msgstr "Vom Absender gelöscht"
#: models.py:58
msgid "Recipient deleted at"
msgstr "Vom Empfänger gelöscht"
#: models.py:89
msgid "Messages"
msgstr "Nachrichten"
#: utils.py:27
#, python-format
msgid "New Message: %(subject)s"
msgstr "Neue Nachricht: %(subject)s"
#: views.py:78 views.py:112
msgid "Message successfully sent."
msgstr "Nachricht erfolgreich gesendet."
#: views.py:118
#, python-format
msgid ""
"%(sender)s wrote:\n"
"%(body)s"
msgstr ""
"%(sender)s schrieb:\n"
"%(body)s"
#: views.py:122
#, python-format
msgid "Re: %(subject)s"
msgstr "Re: %(subject)s"
#: views.py:158
msgid "Message successfully deleted."
msgstr "Nachricht erfolgreich gelöscht."
#: views.py:185
msgid "Message successfully recovered."
msgstr "Nachricht erfolgreich wiederhergestellt."
#: templates/messages/base.html:8 templates/messages/inbox.html:4
#: templates/messages/new_message.html:10
msgid "Inbox"
msgstr "Posteingang"
#: templates/messages/base.html:9 templates/messages/outbox.html:4
msgid "Sent Messages"
msgstr "Gesendete Nachrichten"
#: templates/messages/base.html:10
msgid "New Message"
msgstr "Neue Nachricht"
#: templates/messages/base.html:11
msgid "Trash"
msgstr "Papierkorb"
#: templates/messages/compose.html:4
msgid "Compose Message"
msgstr "Nachricht verfassen"
#: templates/messages/compose.html:9
msgid "Send"
msgstr "Senden"
#: templates/messages/inbox.html:7
msgid "Received"
msgstr "Erhalten"
#: templates/messages/inbox.html:7 templates/messages/outbox.html:7
#: templates/messages/trash.html:7
msgid "Action"
msgstr "Aktion"
#: templates/messages/inbox.html:19 templates/messages/outbox.html:16
#: templates/messages/trash.html:16 templates/messages/view.html:11
msgid "DATETIME_FORMAT"
msgstr "j. N Y, H:i"
#: templates/messages/inbox.html:20 templates/messages/outbox.html:17
msgid "delete"
msgstr "löschen"
#: templates/messages/inbox.html:27 templates/messages/outbox.html:24
#: templates/messages/trash.html:24
msgid "No messages."
msgstr "Keine Nachrichten."
#: templates/messages/new_message.html:1
#, python-format
msgid ""
"Hello %(recipient)s,\n"
"\n"
"you received a private message from %(sender)s with\n"
"the following contents:"
msgstr ""
"Hallo %(recipient)s,\n"
"\n"
"du hast eine private Nachricht von %(sender)s mit\n"
"dem folgenden Inhalt erhalten:"
#: templates/messages/new_message.html:9
#, python-format
msgid "Sent from %(site_url)s"
msgstr "Gesendet von %(site_url)s"
#: templates/messages/new_message.html:11 templates/messages/view.html:18
msgid "Reply"
msgstr "Antworten"
#: templates/messages/outbox.html:7
msgid "Sent"
msgstr "Gesendet"
#: templates/messages/trash.html:4
msgid "Deleted Messages"
msgstr "Gelöschte Nachrichten"
#: templates/messages/trash.html:7 templates/messages/view.html:10
msgid "Date"
msgstr "Datum"
#: templates/messages/trash.html:17
msgid "undelete"
msgstr "wiederherstellen"
#: templates/messages/trash.html:23
msgid ""
"Deleted Messages are removed from the trash at unregular intervals, don't "
"rely on this feature for long-time storage."
msgstr ""
"Gelöschte Nachrichten werden in unregelmäßigen Intervallen entfernt, verlass "
"dich nicht drauf, dass diese Nachrichten hier lange gespeichert werden."
#: templates/messages/view.html:4
msgid "View Message"
msgstr "Nachrichtendetails"
#: templates/messages/view.html:20
msgid "Delete"
msgstr "Löschen"
#: templates/notification/messages_deleted/notice.html:1
#, python-format
msgid ""
"You have deleted the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr ""
"Du hast die Nachricht <a href=\"%(message_url)s\">%(message)s</a> gelöscht."
#: templates/notification/messages_received/notice.html:2
#, python-format
msgid ""
"You have received the message <a href=\"%(message_url)s\">%(message)s</a> "
"from %(message_sender)s."
msgstr ""
"Du hast die Nachricht <a href=\"%(message_url)s\">%(message)s</a> von %"
"(message_sender)s erhalten."
#: templates/notification/messages_recovered/notice.html:1
#, python-format
msgid ""
"You have recovered the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr ""
"Du hast die Nachricht <a href=\"%(message_url)s\">%(message)s</a> "
"wiederhergestellt."
#: templates/notification/messages_replied/notice.html:2
#, python-format
msgid ""
"You have replied to <a href=\"%(message_url)s\">%(message_parent_msg)s</a> "
"from %(message_recipient)s."
msgstr ""
"Du hast auf die Nachricht <a href=\"%(message_url)s\">%(message_parent_msg)"
"s</a> von %(message_recipient)s geantwortet."
#: templates/notification/messages_reply_received/notice.html:2
#, python-format
msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s."
msgstr ""
"%(message_sender)s hat dir eine Antwort auf %(message_parent_msg)s gesendet."
#: templates/notification/messages_sent/notice.html:2
#, python-format
msgid ""
"You have sent the message <a href=\"%(message_url)s\">%(message)s</a> to %"
"(message_recipient)s."
msgstr ""
"Du hast die Nachricht <a href=\"%(message_url)s\">%(message)s</a> an %"
"(message_recipient)s gesendet."

@ -0,0 +1,291 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-09-11 12:31-0700\n"
"PO-Revision-Date: 2009-09-08 15:50+0200\n"
"Last-Translator: markos <mgogoulos@gmail.com>\n"
"Language-Team: Markos Gogoulos <mgogoulos@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7
#: templates/messages/view.html:12
msgid "Recipient"
msgstr "Αποδέκτης"
#: admin.py:15
msgid "group"
msgstr "ομάδα"
#: admin.py:16
msgid "Creates the message optionally for all users or a group of users."
msgstr "Δημιουργεί το μήνυμα προαιρετικά για όλους τους χρήστες ή για ομάδα χρηστών."
#: admin.py:23
msgid "All users"
msgstr "Όλοι οι χρήστες"
#: admin.py:38 models.py:88
msgid "Message"
msgstr "Μήνυμα"
#: admin.py:45
msgid "Date/time"
msgstr "Ημερομηνία/Ώρα"
#: fields.py:53
#, python-format
msgid "The following usernames are incorrect: %(users)s"
msgstr "Τα παρακάτω usernames δεν είναι σωστά: %(users)s"
#: forms.py:21 models.py:49 templates/messages/inbox.html:7
#: templates/messages/outbox.html:7 templates/messages/trash.html:7
#: templates/messages/view.html:6
msgid "Subject"
msgstr "Θέμα"
#: forms.py:22 models.py:50
msgid "Body"
msgstr "Κυρίως μέρος"
#: management.py:9
msgid "Message Received"
msgstr "Το μήνυμα ελήφθη "
#: management.py:9
msgid "you have received a message"
msgstr "έχετε λάβει ένα μήνυμα"
#: management.py:10
msgid "Message Sent"
msgstr "Το μήνυμα εστάλει"
#: management.py:10
msgid "you have sent a message"
msgstr "έχετε στείλει ένα μήνυμα"
#: management.py:11
msgid "Message Replied"
msgstr "Το μήνυμα έχει απαντηθεί"
#: management.py:11
msgid "you have replied to a message"
msgstr "έχετε απαντήσει σε ένα μήνυμα"
#: management.py:12
msgid "Reply Received"
msgstr "Η απάντηση ελήφθη"
#: management.py:12
msgid "you have received a reply to a message"
msgstr "έχετε λάβει μια απάντηση σε ένα μήνυμα"
#: management.py:13
msgid "Message Deleted"
msgstr "Το μήνυμα έχει διαγραφεί"
#: management.py:13
msgid "you have deleted a message"
msgstr "διαγράψατε ένα μήνυμα"
#: management.py:14
msgid "Message Recovered"
msgstr "Το μήνυμα έχει ανακληθεί"
#: management.py:14
msgid "you have undeleted a message"
msgstr "έχετε ανακτήσει ένα μήνυμα"
#: models.py:51 templates/messages/inbox.html:7
#: templates/messages/trash.html:7 templates/messages/view.html:8
msgid "Sender"
msgstr "Αποστολέας"
#: models.py:53
msgid "Parent message"
msgstr "Μήνυμα Γονέας"
#: models.py:54
msgid "sent at"
msgstr "εστάλει στις"
#: models.py:55
msgid "read at"
msgstr "αναγνώστηκε στις"
#: models.py:56
msgid "replied at"
msgstr "απαντήθηκε στις"
#: models.py:57
msgid "Sender deleted at"
msgstr "Ο αποστολέας το διέγραψε στις"
#: models.py:58
msgid "Recipient deleted at"
msgstr "Ο αποδέκτης το διέγραψε στις"
#: models.py:89
msgid "Messages"
msgstr "Μηνύματα"
#: utils.py:27
#, python-format
msgid "New Message: %(subject)s"
msgstr "καινούργιο μήνυμα: %(subject)s"
#: views.py:78 views.py:112
msgid "Message successfully sent."
msgstr "Το μήνυμα έχει αποσταλεί με επιτυχία."
#: views.py:118
#, python-format
msgid ""
"%(sender)s wrote:\n"
"%(body)s"
msgstr ""
"%(sender)s έγραψε:\n"
"%(body)s"
#: views.py:122
#, python-format
msgid "Re: %(subject)s"
msgstr "Re: %(subject)s"
#: views.py:158
msgid "Message successfully deleted."
msgstr "Το μήνυμα διεγράφει."
#: views.py:185
msgid "Message successfully recovered."
msgstr "Το μήνυμα έχει ανακληθεί επιτυχημένα"
#: templates/messages/base.html:8 templates/messages/inbox.html:4
#: templates/messages/new_message.html:10
msgid "Inbox"
msgstr "Εισερχόμενα"
#: templates/messages/base.html:9 templates/messages/outbox.html:4
msgid "Sent Messages"
msgstr "Σταλμένα μηνύματα"
#: templates/messages/base.html:10
msgid "New Message"
msgstr "Νέο μήνυμα"
#: templates/messages/base.html:11
msgid "Trash"
msgstr "Άχρηστα"
#: templates/messages/compose.html:4
msgid "Compose Message"
msgstr "Συντάξτε μήνυμα"
#: templates/messages/compose.html:9
msgid "Send"
msgstr "Στείλτε"
#: templates/messages/inbox.html:7
msgid "Received"
msgstr "Ελήφθη"
#: templates/messages/inbox.html:7 templates/messages/outbox.html:7
#: templates/messages/trash.html:7
msgid "Action"
msgstr "Ενέργεια"
#: templates/messages/inbox.html:19 templates/messages/outbox.html:16
#: templates/messages/trash.html:16 templates/messages/view.html:11
msgid "DATETIME_FORMAT"
msgstr "DATETIME_FORMAT"
#: templates/messages/inbox.html:20 templates/messages/outbox.html:17
msgid "delete"
msgstr "διαγράφω"
#: templates/messages/new_message.html:1
#, python-format
msgid ""
"Hello %(recipient)s,\n"
"\n"
"you received a private message from %(sender)s with\n"
"the following contents:"
msgstr ""
"Γειά χαρά %(recipient)s,\n"
"\n"
"έχετε λάβει ένα προσωπικό μήνυμα από τον/την %(sender)s με\n"
"το ακόλουθο περιεχόμενο:"
#: templates/messages/new_message.html:9
#, python-format
msgid "Sent from %(site_url)s"
msgstr "Εστάλει απο %(site_url)s"
#: templates/messages/new_message.html:11 templates/messages/view.html:18
msgid "Reply"
msgstr "Απαντήστε"
#: templates/messages/outbox.html:7
msgid "Sent"
msgstr "Απεσταλμένα"
#: templates/messages/trash.html:4
msgid "Deleted Messages"
msgstr "Διαγραμμένα μηνύματα"
#: templates/messages/trash.html:7 templates/messages/view.html:10
msgid "Date"
msgstr "Ημερομηνία"
#: templates/messages/trash.html:17
msgid "undelete"
msgstr "ξεδιαγράψτε"
#: templates/messages/trash.html:23
msgid "Deleted Messages are removed from the trash at unregular intervals, don't rely on this feature for long-time storage."
msgstr "Τα διαγραμμένα μηνύματα απομακρύνονται απο τα Άχρηστα σε μη τακτά διαστήματα, μη βασίζεστε σε αυτά για μακροχρόνια αποθήκευση."
#: templates/messages/view.html:4
msgid "View Message"
msgstr "Προβολή Μηνύματος"
#: templates/messages/view.html:20
msgid "Delete"
msgstr "Διαγραφή"
#: templates/notification/messages_deleted/notice.html:1
#, python-format
msgid "You have deleted the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "Έχετε διαγράψει το μήνυμα <a href=\"%(message_url)s\">%(message)s</a>."
#: templates/notification/messages_received/notice.html:2
#, python-format
msgid "You have received the message <a href=\"%(message_url)s\">%(message)s</a> from %(message_sender)s."
msgstr "Έχετε λάβει το μήνυμα <a href=\"%(message_url)s\">%(message)s</a> από τον/την %(message_sender)s."
#: templates/notification/messages_recovered/notice.html:1
#, python-format
msgid "You have recovered the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "Έχετε ανακτήσει το μήνυμα <a href=\"%(message_url)s\">%(message)s</a>."
#: templates/notification/messages_replied/notice.html:2
#, python-format
msgid "You have replied to <a href=\"%(message_url)s\">%(message_parent_msg)s</a> from %(message_recipient)s."
msgstr "Έχετε απαντήσει στο <a href=\"%(message_url)s\">%(message_parent_msg)s</a>από τον/την %(message_recipient)s."
#: templates/notification/messages_reply_received/notice.html:2
#, python-format
msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s."
msgstr "Ο/η %(message_sender)s σας έστειλε μια απάντηση στο %(message_parent_msg)s."
#: templates/notification/messages_sent/notice.html:2
#, python-format
msgid "You have sent the message <a href=\"%(message_url)s\">%(message)s</a> to %(message_recipient)s."
msgstr "Έχετε στείλει το μήνυμα <a href=\"%(message_url)s\">%(message)s</a> στον/στην %(message_recipient)s."

@ -0,0 +1,314 @@
# django-messages in Spanish.
# django-messages en Español.
# Copyright (C) 2008
# This file is distributed under the same license as the django-messages package.
# Maria Guadalupe Paz Urrea <paz.lupita@gmail.com>, 2008.
# Alfonso Bernardo Harita Rascón <alharita@gmail.com>, 2008.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-09-11 12:31-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7
#: templates/messages/view.html:12
msgid "Recipient"
msgstr "Destinatario"
#: admin.py:15
msgid "group"
msgstr ""
#: admin.py:16
msgid "Creates the message optionally for all users or a group of users."
msgstr ""
#: admin.py:23
msgid "All users"
msgstr ""
#: admin.py:38 models.py:88
msgid "Message"
msgstr "Mensaje"
#: admin.py:45
#, fuzzy
msgid "Date/time"
msgstr "Fecha"
#: fields.py:53
#, python-format
msgid "The following usernames are incorrect: %(users)s"
msgstr "Los siguientes usuarios son incorrectos: %(users)s"
#: forms.py:21 models.py:49 templates/messages/inbox.html:7
#: templates/messages/outbox.html:7 templates/messages/trash.html:7
#: templates/messages/view.html:6
msgid "Subject"
msgstr "Asunto"
#: forms.py:22 models.py:50
msgid "Body"
msgstr "Cuerpo"
#: management.py:9
msgid "Message Received"
msgstr "Mensaje Recibido"
#: management.py:9
msgid "you have received a message"
msgstr "ha recibido un mensaje"
#: management.py:10
msgid "Message Sent"
msgstr "Mensaje Enviado"
#: management.py:10
msgid "you have sent a message"
msgstr "ha enviado un mensaje"
#: management.py:11
msgid "Message Replied"
msgstr "Mensaje Respondido"
#: management.py:11
msgid "you have replied to a message"
msgstr "ha respondido un mensaje"
#: management.py:12
msgid "Reply Received"
msgstr "Respuesta Recibida"
#: management.py:12
msgid "you have received a reply to a message"
msgstr "ha recibido una respuesta a un mensaje"
#: management.py:13
msgid "Message Deleted"
msgstr "Mensaje Eliminado"
#: management.py:13
msgid "you have deleted a message"
msgstr "ha eliminado un mensaje"
#: management.py:14
msgid "Message Recovered"
msgstr "Mensaje Recuperado"
#: management.py:14
msgid "you have undeleted a message"
msgstr "ha recuperado un mensaje"
#: models.py:51 templates/messages/inbox.html:7
#: templates/messages/trash.html:7 templates/messages/view.html:8
msgid "Sender"
msgstr "Emisor"
#: models.py:53
msgid "Parent message"
msgstr "Mensaje padre"
#: models.py:54
msgid "sent at"
msgstr "enviado"
#: models.py:55
msgid "read at"
msgstr "leído"
#: models.py:56
msgid "replied at"
msgstr "respondido"
#: models.py:57
msgid "Sender deleted at"
msgstr "Emisor borrado"
#: models.py:58
msgid "Recipient deleted at"
msgstr "Destinatario borrado"
#: models.py:89
msgid "Messages"
msgstr "Mensajes"
#: utils.py:27
#, python-format
msgid "New Message: %(subject)s"
msgstr "Nuevo Mensaje: %(subject)s"
#: views.py:78 views.py:112
msgid "Message successfully sent."
msgstr "Se envió con éxito el mensaje."
#: views.py:118
#, python-format
msgid ""
"%(sender)s wrote:\n"
"%(body)s"
msgstr ""
"%(sender)s escribió:\n"
"%(body)s"
#: views.py:122
#, python-format
msgid "Re: %(subject)s"
msgstr "Re: %(subject)s"
#: views.py:158
msgid "Message successfully deleted."
msgstr "Se eliminó con éxito el mensaje."
#: views.py:185
msgid "Message successfully recovered."
msgstr "Se recuperó con éxito el mensaje."
#: templates/messages/base.html:8 templates/messages/inbox.html:4
#: templates/messages/new_message.html:10
msgid "Inbox"
msgstr "Bandeja de entrada"
#: templates/messages/base.html:9 templates/messages/outbox.html:4
msgid "Sent Messages"
msgstr "Mensajes Enviados"
#: templates/messages/base.html:10
msgid "New Message"
msgstr "Nuevo Mensaje"
#: templates/messages/base.html:11
msgid "Trash"
msgstr "Papelera"
#: templates/messages/compose.html:4
msgid "Compose Message"
msgstr "Redactar Mensaje"
#: templates/messages/compose.html:9
msgid "Send"
msgstr "Enviar"
#: templates/messages/inbox.html:7
msgid "Received"
msgstr "Recibido"
#: templates/messages/inbox.html:7 templates/messages/outbox.html:7
#: templates/messages/trash.html:7
msgid "Action"
msgstr "Acción"
#: templates/messages/inbox.html:19 templates/messages/outbox.html:16
#: templates/messages/trash.html:16 templates/messages/view.html:11
msgid "DATETIME_FORMAT"
msgstr ""
#: templates/messages/inbox.html:20 templates/messages/outbox.html:17
msgid "delete"
msgstr "eliminar"
#: templates/messages/new_message.html:1
#, python-format
msgid ""
"Hello %(recipient)s,\n"
"\n"
"you received a private message from %(sender)s with\n"
"the following contents:"
msgstr ""
"Hola %(recipient)s,\n"
"\n"
"ha recibido un mensaje de %(sender)s con\n"
"el siguiente contenido:"
#: templates/messages/new_message.html:9
#, python-format
msgid "Sent from %(site_url)s"
msgstr "Enviado desde %(site_url)s"
#: templates/messages/new_message.html:11 templates/messages/view.html:18
msgid "Reply"
msgstr "Responder"
#: templates/messages/outbox.html:7
msgid "Sent"
msgstr "Enviado"
#: templates/messages/trash.html:4
msgid "Deleted Messages"
msgstr "Mensajes Eliminados"
#: templates/messages/trash.html:7 templates/messages/view.html:10
msgid "Date"
msgstr "Fecha"
#: templates/messages/trash.html:17
msgid "undelete"
msgstr "recuperar"
#: templates/messages/trash.html:23
msgid ""
"Deleted Messages are removed from the trash at unregular intervals, don't "
"rely on this feature for long-time storage."
msgstr ""
"Los Mensajes Eliminados son borrados de la Papelera a intérvalos irregulares,"
"no se confíe en esta característica para almacenamiento a largo plazo."
#: templates/messages/view.html:4
msgid "View Message"
msgstr "Ver Mensaje"
#: templates/messages/view.html:20
msgid "Delete"
msgstr "Eliminar"
#: templates/notification/messages_deleted/notice.html:1
#, python-format
msgid ""
"You have deleted the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "ha borrado el mensaje <a href=\"%(message_url)s\">%(message)s</a>."
#: templates/notification/messages_received/notice.html:2
#, python-format
msgid ""
"You have received the message <a href=\"%(message_url)s\">%(message)s</a> "
"from %(message_sender)s."
msgstr ""
"ha recibido el mensaje <a href=\"%(message_url)s\">%(message)s</a> de %"
"(message_sender)s."
#: templates/notification/messages_recovered/notice.html:1
#, python-format
msgid ""
"You have recovered the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "ha recuperado el mensaje <a href=\"%(message_url)s\">%(message)s</a>."
#: templates/notification/messages_replied/notice.html:2
#, python-format
msgid ""
"You have replied to <a href=\"%(message_url)s\">%(message_parent_msg)s</a> "
"from %(message_recipient)s."
msgstr ""
"ha respondido a <a href=\"%(message_url)s\">%(message_parent_msg)s</a> de %"
"(message_recipient)s."
#: templates/notification/messages_reply_received/notice.html:2
#, python-format
msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s."
msgstr ""
"%(message_sender)s le ha enviado una respuesta a %(message_parent_msg)s."
#: templates/notification/messages_sent/notice.html:2
#, python-format
msgid ""
"You have sent the message <a href=\"%(message_url)s\">%(message)s</a> to %"
"(message_recipient)s."
msgstr ""
"ha enviado el mensaje <a href=\"%(message_url)s\">%(message)s</a> a %"
"(message_recipient)s."

@ -0,0 +1,312 @@
# django-messages in Spanish Argentina.
# django-messages en Español Argentina.
# Copyright (C) 2008
# This file is distributed under the same license as the django-messages package.
# Cecilia Lorena Puccinelli <ceciliapuccinelli@gmail.com>, 2008.
# Juan José Conti <jjconti@gnu.org>, 2008.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-09-11 12:31-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7
#: templates/messages/view.html:12
msgid "Recipient"
msgstr "Destinatario"
#: admin.py:15
msgid "group"
msgstr ""
#: admin.py:16
msgid "Creates the message optionally for all users or a group of users."
msgstr ""
#: admin.py:23
msgid "All users"
msgstr ""
#: admin.py:38 models.py:88
msgid "Message"
msgstr "Mensaje"
#: admin.py:45
#, fuzzy
msgid "Date/time"
msgstr "Fecha"
#: fields.py:53
#, python-format
msgid "The following usernames are incorrect: %(users)s"
msgstr ""
#: forms.py:21 models.py:49 templates/messages/inbox.html:7
#: templates/messages/outbox.html:7 templates/messages/trash.html:7
#: templates/messages/view.html:6
msgid "Subject"
msgstr "Asunto"
#: forms.py:22 models.py:50
msgid "Body"
msgstr "Cuerpo"
#: management.py:9
msgid "Message Received"
msgstr "Mensaje Recibido"
#: management.py:9
msgid "you have received a message"
msgstr "ha recibido un mensaje"
#: management.py:10
msgid "Message Sent"
msgstr "Mensaje Enviado"
#: management.py:10
msgid "you have sent a message"
msgstr "ha enviado un mensaje"
#: management.py:11
msgid "Message Replied"
msgstr "Mensaje Respondido"
#: management.py:11
msgid "you have replied to a message"
msgstr "ha respondido un mensaje"
#: management.py:12
msgid "Reply Received"
msgstr "Respuesta Recibida"
#: management.py:12
msgid "you have received a reply to a message"
msgstr "ha recibido una respuesta a un mensaje"
#: management.py:13
msgid "Message Deleted"
msgstr "Mensaje Eliminado"
#: management.py:13
msgid "you have deleted a message"
msgstr "ha eliminado un mensaje"
#: management.py:14
msgid "Message Recovered"
msgstr "Mensaje Recuperado"
#: management.py:14
msgid "you have undeleted a message"
msgstr "ha recuperado un mensaje"
#: models.py:51 templates/messages/inbox.html:7
#: templates/messages/trash.html:7 templates/messages/view.html:8
msgid "Sender"
msgstr "Emisor"
#: models.py:53
msgid "Parent message"
msgstr "Mensaje padre"
#: models.py:54
msgid "sent at"
msgstr "enviado"
#: models.py:55
msgid "read at"
msgstr "leído"
#: models.py:56
msgid "replied at"
msgstr "respondido"
#: models.py:57
msgid "Sender deleted at"
msgstr "Emisor borrado"
#: models.py:58
msgid "Recipient deleted at"
msgstr "Destinatario borrado"
#: models.py:89
msgid "Messages"
msgstr "Mensajes"
#: utils.py:27
#, fuzzy, python-format
msgid "New Message: %(subject)s"
msgstr "Re: %(subject)s"
#: views.py:78 views.py:112
msgid "Message successfully sent."
msgstr "Se envió con éxito el mensaje."
#: views.py:118
#, python-format
msgid ""
"%(sender)s wrote:\n"
"%(body)s"
msgstr ""
"%(sender)s escribió:\n"
"%(body)s"
#: views.py:122
#, python-format
msgid "Re: %(subject)s"
msgstr "Re: %(subject)s"
#: views.py:158
msgid "Message successfully deleted."
msgstr "Se eliminó con éxito el mensaje."
#: views.py:185
msgid "Message successfully recovered."
msgstr "Se recuperó con éxito el mensaje."
#: templates/messages/base.html:8 templates/messages/inbox.html:4
#: templates/messages/new_message.html:10
msgid "Inbox"
msgstr "Bandeja de entrada"
#: templates/messages/base.html:9 templates/messages/outbox.html:4
msgid "Sent Messages"
msgstr "Mensajes Enviados"
#: templates/messages/base.html:10
msgid "New Message"
msgstr "Nuevo Mensaje"
#: templates/messages/base.html:11
msgid "Trash"
msgstr "Papelera"
#: templates/messages/compose.html:4
msgid "Compose Message"
msgstr "Redactar Mensaje"
#: templates/messages/compose.html:9
msgid "Send"
msgstr "Enviar"
#: templates/messages/inbox.html:7
msgid "Received"
msgstr "Recibido"
#: templates/messages/inbox.html:7 templates/messages/outbox.html:7
#: templates/messages/trash.html:7
msgid "Action"
msgstr "Acción"
#: templates/messages/inbox.html:19 templates/messages/outbox.html:16
#: templates/messages/trash.html:16 templates/messages/view.html:11
msgid "DATETIME_FORMAT"
msgstr ""
#: templates/messages/inbox.html:20 templates/messages/outbox.html:17
msgid "delete"
msgstr "eliminar"
#: templates/messages/new_message.html:1
#, python-format
msgid ""
"Hello %(recipient)s,\n"
"\n"
"you received a private message from %(sender)s with\n"
"the following contents:"
msgstr ""
#: templates/messages/new_message.html:9
#, python-format
msgid "Sent from %(site_url)s"
msgstr "Enviado desde %(site_url)s"
#: templates/messages/new_message.html:11 templates/messages/view.html:18
msgid "Reply"
msgstr "Responder"
#: templates/messages/outbox.html:7
msgid "Sent"
msgstr "Enviado"
#: templates/messages/trash.html:4
msgid "Deleted Messages"
msgstr "Mensajes Eliminados"
#: templates/messages/trash.html:7 templates/messages/view.html:10
msgid "Date"
msgstr "Fecha"
#: templates/messages/trash.html:17
msgid "undelete"
msgstr "recuperar"
#: templates/messages/trash.html:23
msgid ""
"Deleted Messages are removed from the trash at unregular intervals, don't "
"rely on this feature for long-time storage."
msgstr ""
"Los Mensajes Eliminados son borrados de la Papelera a intérvalos irregulares,"
"no se confíe en esta característica para almacenamiento a largo plazo."
#: templates/messages/view.html:4
msgid "View Message"
msgstr "Ver Mensaje"
#: templates/messages/view.html:20
msgid "Delete"
msgstr "Eliminar"
#: templates/notification/messages_deleted/notice.html:1
#, fuzzy, python-format
msgid ""
"You have deleted the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "ha eliminado el mensaje %(message)s."
#: templates/notification/messages_received/notice.html:2
#, fuzzy, python-format
msgid ""
"You have received the message <a href=\"%(message_url)s\">%(message)s</a> "
"from %(message_sender)s."
msgstr "ha recibido un mensaje de %(sender)s."
#: templates/notification/messages_recovered/notice.html:1
#, fuzzy, python-format
msgid ""
"You have recovered the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "ha recuperado el mensaje %(message)s."
#: templates/notification/messages_replied/notice.html:2
#, fuzzy, python-format
msgid ""
"You have replied to <a href=\"%(message_url)s\">%(message_parent_msg)s</a> "
"from %(message_recipient)s."
msgstr "ha respondido a %(message)s de %(recipient)s."
#: templates/notification/messages_reply_received/notice.html:2
#, fuzzy, python-format
msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s."
msgstr "%(sender)s le ha enviado una respuesta a %(message)s."
#: templates/notification/messages_sent/notice.html:2
#, python-format
msgid ""
"You have sent the message <a href=\"%(message_url)s\">%(message)s</a> to %"
"(message_recipient)s."
msgstr ""
#~ msgid "There is no user with this username."
#~ msgstr "No hay ningún usuario con ese nombre."
#~ msgid "you have sent a message to %(recipient)s."
#~ msgstr "ha enviado un mensaje a %(recipient)s."
#~ msgid "New Message:"
#~ msgstr "Mensaje Nuevo"

@ -0,0 +1,357 @@
# django-messages fari translations
# Copyright (C) 2012 Hassan Zamani
# This file is distributed under the same license as the djagno-messages package.
# Hassan Zamani <hsn.zamani@gmail.com>, 2012.
#
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-27 12:44+0430\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"First-Translator: Mohammad Hamidi Esfahani"
"Last-Translator: Hassan Zamani <hsn.zamani@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: fa\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0\n"
#: admin.py:19 forms.py:20 models.py:52
#: templates/django_messages/outbox.html:8
#: templates/django_messages/view.html:12
msgid "Recipient"
msgstr "گیرنده"
#: admin.py:21
msgid "group"
msgstr "گروه"
#: admin.py:22
msgid "Creates the message optionally for all users or a group of users."
msgstr "ارسال پیام به همه کاربران یا گروهی از آنها."
#: admin.py:29
msgid "All users"
msgstr "تمامی کاربران"
#: admin.py:44 models.py:88
msgid "Message"
msgstr "پیام"
#: admin.py:51
msgid "Date/time"
msgstr "تاریخ/ساعت"
#: fields.py:53
#, python-format
msgid "The following usernames are incorrect: %(users)s"
msgstr "این کاربرها صحیح نمیباشند: %(users)s"
#: forms.py:21 models.py:49 templates/django_messages/inbox.html:8
#: templates/django_messages/outbox.html:8
#: templates/django_messages/trash.html:8
#: templates/django_messages/view.html:6
msgid "Subject"
msgstr "موضوع"
#: forms.py:22 models.py:50
msgid "Body"
msgstr "متن"
#: management.py:9
msgid "Message Received"
msgstr "پیام دریافتشد"
#: management.py:9
msgid "you have received a message"
msgstr "شما یک پیام دریافت کردهاید"
#: management.py:10
msgid "Message Sent"
msgstr "پیام ارسالشد"
#: management.py:10
msgid "you have sent a message"
msgstr "شما یک پیام ارسال کردهاید"
#: management.py:11
msgid "Message Replied"
msgstr "پیام پاسخ دادهشد"
#: management.py:11
msgid "you have replied to a message"
msgstr "شما به یک پیام پاسخ دادید"
#: management.py:12
msgid "Reply Received"
msgstr "پاسخ دریافتشد"
#: management.py:12
msgid "you have received a reply to a message"
msgstr "شما پاسخی به یک پیام دریافت کردهاید"
#: management.py:13
msgid "Message Deleted"
msgstr "پیام حذف گردید"
#: management.py:13
msgid "you have deleted a message"
msgstr "شما یک پیام حذف کردید"
#: management.py:14
msgid "Message Recovered"
msgstr "پیام بازیابیشد"
#: management.py:14
msgid "you have undeleted a message"
msgstr "شما یک پیام را بازیابی کردید"
#: models.py:51 templates/django_messages/inbox.html:8
#: templates/django_messages/trash.html:8
#: templates/django_messages/view.html:8
msgid "Sender"
msgstr "فرستنده"
#: models.py:53
msgid "Parent message"
msgstr "پیام مرجع"
#: models.py:54
msgid "sent at"
msgstr "ارسال شده در"
#: models.py:55
msgid "read at"
msgstr "خوانده شده در"
#: models.py:56
msgid "replied at"
msgstr "پاسخ داده شده در"
#: models.py:57
msgid "Sender deleted at"
msgstr "فرستنده حذفشده در"
#: models.py:58
msgid "Recipient deleted at"
msgstr "گیرنده خذفشده در"
#: models.py:89
msgid "Messages"
msgstr "پیام ها"
#: utils.py:26
#, python-format
msgid ""
"%(sender)s wrote:\n"
"%(body)s"
msgstr ""
"%(sender)s گفت:\n"
"%(body)s"
#: utils.py:54
#, python-format
msgid "Re%(prefix)s: %(subject)s"
msgstr "پاسخ%(prefix)s: %(subject)s"
#: utils.py:60
#, python-format
msgid "New Message: %(subject)s"
msgstr "پیام جدید: %(subject)s"
#: views.py:78 views.py:114
msgid "Message successfully sent."
msgstr "پیام با موفقیت ارسالشد."
#: views.py:121
#, python-format
msgid "Re: %(subject)s"
msgstr "پاسخ: %(subject)s"
#: views.py:157
msgid "Message successfully deleted."
msgstr "پیام با موفقیت حذفشد."
#: views.py:184
msgid "Message successfully recovered."
msgstr "پیام با موفقیت بازیابیشد."
#: templates/django_messages/base.html:8
#: templates/django_messages/inbox.html:4
#: templates/django_messages/new_message.html:10
msgid "Inbox"
msgstr "صندوق دریافتی"
#: templates/django_messages/base.html:9
#: templates/django_messages/outbox.html:4
msgid "Sent Messages"
msgstr "پیامهای ارسالشده"
#: templates/django_messages/base.html:10
msgid "New Message"
msgstr "پیام جدید"
#: templates/django_messages/base.html:11
msgid "Trash"
msgstr "پیامهای حذفشده"
#: templates/django_messages/compose.html:4
msgid "Compose Message"
msgstr "ایجاد پیام جدید"
#: templates/django_messages/compose.html:10
msgid "Send"
msgstr "بفرست"
#: templates/django_messages/inbox.html:8
msgid "Received"
msgstr "دریافتشد"
#: templates/django_messages/inbox.html:8
#: templates/django_messages/outbox.html:8
#: templates/django_messages/trash.html:8
msgid "Action"
msgstr "عمل"
#: templates/django_messages/inbox.html:20
#: templates/django_messages/outbox.html:17
#: templates/django_messages/trash.html:17
#: templates/django_messages/view.html:11
msgid "DATETIME_FORMAT"
msgstr ""
#: templates/django_messages/inbox.html:21
#: templates/django_messages/outbox.html:18
msgid "delete"
msgstr "حذف"
#: templates/django_messages/inbox.html:27
#: templates/django_messages/outbox.html:24
#: templates/django_messages/trash.html:24
msgid "No messages."
msgstr "پیامی وجود ندارد."
#: templates/django_messages/new_message.html:1
#, python-format
msgid ""
"Hello %(recipient)s,\n"
"\n"
"you received a private message from %(sender)s with\n"
"the following contents:"
msgstr "سلام %(recipient)s,\n"
"\n"
"شما یک پیام خصوصی از %(sender)s دریافت کردهاید:"
#: templates/django_messages/new_message.html:9
#, python-format
msgid "Sent from %(site_url)s"
msgstr "ارسال شده از %(site_url)s"
#: templates/django_messages/new_message.html:11
#: templates/django_messages/view.html:18
msgid "Reply"
msgstr "پاسخ"
#: templates/django_messages/outbox.html:8
msgid "Sent"
msgstr "ارسالشد"
#: templates/django_messages/trash.html:4
msgid "Deleted Messages"
msgstr "پیام های حذفشده"
#: templates/django_messages/trash.html:8
#: templates/django_messages/view.html:10
msgid "Date"
msgstr "تاریخ"
#: templates/django_messages/trash.html:18
msgid "undelete"
msgstr "بازیابی"
#: templates/django_messages/trash.html:27
msgid ""
"Deleted Messages are removed from the trash at unregular intervals, don't "
"rely on this feature for long-time storage."
msgstr ""
"پیامهای حذفشده در بازههای زمانی مشخصی از اینجا حذف میشوند، بنابراین برای نگهداری طولانی مدت از اینجا استفاده نکنید."
#: templates/django_messages/view.html:4
msgid "View Message"
msgstr "نمایش پیام"
#: templates/django_messages/view.html:20
msgid "Delete"
msgstr "حذف"
#: templates/notification/messages_deleted/notice.html:1
#, python-format
msgid ""
"You have deleted the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "شما پیام <a href=\"%(message_url)s\">%(message)s</a> را حذف کردید."
#: templates/notification/messages_received/notice.html:2
#, python-format
msgid ""
"You have received the message <a href=\"%(message_url)s\">%(message)s</a> "
"from %(message_sender)s."
msgstr "شما پیام جدید <a href=\"%(message_url)s\">%(message)s</a> را از %(message_sender)s دریافت کردید."
#: templates/notification/messages_recovered/notice.html:1
#, python-format
msgid ""
"You have recovered the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "شما پیام <a href=\"%(message_url)s\">%(message)s</a> را بازیابی کردید."
#: templates/notification/messages_replied/notice.html:2
#, python-format
msgid ""
"You have replied to <a href=\"%(message_url)s\">%(message_parent_msg)s</a> "
"from %(message_recipient)s."
msgstr "شما به پیام <a href=\"%(message_url)s\">%(message_parent_msg)s</a> از %(message_recipient)s پاسخدادید."
#: templates/notification/messages_reply_received/notice.html:2
#, python-format
msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s."
msgstr "%(message_sender)s پاسخی به %(message_parent_msg)s برای شما ارسال کرده."
#: templates/notification/messages_sent/notice.html:2
#, python-format
msgid ""
"You have sent the message <a href=\"%(message_url)s\">%(message)s</a> to "
"%(message_recipient)s."
msgstr "شما پیام <a href=\"%(message_url)s\">%(message)s</a> را به %(message_recipient)s ارسالکردید."
#~ msgid "context"
#~ msgstr "متن پیام"
#~ msgid "received at"
#~ msgstr "دریافت شده در"
#~ msgid "deleted by sender at"
#~ msgstr "حذف شده توسط فرستنده در"
#~ msgid "deleted by receiver at"
#~ msgstr "حذف شده توسط گیرنده در"
#~ msgid "Message revert successfully"
#~ msgstr "پیام با موفقیت بازگردانی شد"
#~ msgid "send message"
#~ msgstr "ارسال پیام"
#~ msgid "date"
#~ msgstr "تاریخ"
#~ msgid "revert"
#~ msgstr "بازگردانی"
#~ msgid "deleted Messages will remove from trash step by step"
#~ msgstr "پیام های حذف شده در فواصل نامنظم از سطل زباله حذف می گردند"
#~ msgid "not replied yet"
#~ msgstr "هنوز پاسخ داده نشده است"

@ -0,0 +1,316 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: messages\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-09-11 12:31-0700\n"
"PO-Revision-Date: 2008-08-09 21:58+0100\n"
"Last-Translator: Roland Frédéric <frederic.roland@creativeconvergence.be>\n"
"Language-Team: Frédéric Roland <frederic.roland@creativeconvergence.be>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: French\n"
#: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7
#: templates/messages/view.html:12
msgid "Recipient"
msgstr "Destinataire"
#: admin.py:38 models.py:88
msgid "Message"
msgstr "Message"
#: forms.py:21 models.py:49 templates/messages/inbox.html:7
#: templates/messages/outbox.html:7 templates/messages/trash.html:7
#: templates/messages/view.html:6
msgid "Subject"
msgstr "Sujet"
#: forms.py:22 models.py:50
msgid "Body"
msgstr "Message"
#: management.py:9
msgid "Message Received"
msgstr "Message Reçu"
#: management.py:9
msgid "you have received a message"
msgstr "vous avez reçu un message"
#: management.py:10
msgid "Message Sent"
msgstr "Message Envoyé"
#: management.py:10
msgid "you have sent a message"
msgstr "vous avez envoyé un message"
#: management.py:11
msgid "Message Replied"
msgstr "Message Répondu"
#: management.py:11
msgid "you have replied to a message"
msgstr "vous avez répondu à un message"
#: management.py:12
msgid "Reply Received"
msgstr "Réponse Reçue"
#: management.py:12
msgid "you have received a reply to a message"
msgstr "vous avez reçu une réponse à un message"
#: management.py:13
msgid "Message Deleted"
msgstr "Message Effacé"
#: management.py:13
msgid "you have deleted a message"
msgstr "vous avez effacé un message"
#: management.py:14
msgid "Message Recovered"
msgstr "Message Récupéré"
#: management.py:14
msgid "you have undeleted a message"
msgstr "vous avez récupéré un message"
#: models.py:51 templates/messages/inbox.html:7
#: templates/messages/trash.html:7 templates/messages/view.html:8
msgid "Sender"
msgstr "Expéditeur"
#: models.py:53
msgid "Parent message"
msgstr "Message parent"
#: models.py:54
msgid "sent at"
msgstr "envoyé à"
#: models.py:55
msgid "read at"
msgstr "lu à"
#: models.py:56
msgid "replied at"
msgstr "répondu à"
#: models.py:57
msgid "Sender deleted at"
msgstr "Expéditeur effacé à"
#: models.py:58
msgid "Recipient deleted at"
msgstr "Destinataire effacé à"
#: models.py:89
msgid "Messages"
msgstr "Messages"
#: views.py:78 views.py:112
msgid "Message successfully sent."
msgstr "Message envoyé avec succès."
#: views.py:118
#, python-format
msgid ""
"%(sender)s wrote:\n"
"%(body)s"
msgstr ""
"%(sender)s a écrit:\n"
"%(body)s"
#: views.py:122
#, python-format
msgid "Re: %(subject)s"
msgstr "Re: %(subject)s"
#: views.py:158
msgid "Message successfully deleted."
msgstr "Message effacé avec succès."
#: views.py:185
msgid "Message successfully recovered."
msgstr "Message récupéré avec succès."
#: templates/messages/base.html:8 templates/messages/inbox.html:4
#: templates/messages/new_message.html:10
msgid "Inbox"
msgstr "Boîte de réception"
#: templates/messages/base.html:9 templates/messages/outbox.html:4
msgid "Sent Messages"
msgstr "Messages envoyés"
#: templates/messages/base.html:10
msgid "New Message"
msgstr "Nouveau Message"
#: templates/messages/base.html:11
msgid "Trash"
msgstr "Poubelle"
#: templates/messages/compose.html:4
msgid "Compose Message"
msgstr "Composer Message"
#: templates/messages/compose.html:9
msgid "Send"
msgstr "Envoyer"
#: templates/messages/inbox.html:7
msgid "Received"
msgstr "Reçu"
#: templates/messages/inbox.html:7 templates/messages/outbox.html:7
#: templates/messages/trash.html:7
msgid "Action"
msgstr "Action"
#: templates/messages/inbox.html:19 templates/messages/outbox.html:16
#: templates/messages/trash.html:16 templates/messages/view.html:11
msgid "DATETIME_FORMAT"
msgstr "j F Y, G:i"
#: templates/messages/inbox.html:20 templates/messages/outbox.html:17
msgid "delete"
msgstr "effacer"
#: templates/messages/new_message.html:9
#, python-format
msgid "Sent from %(site_url)s"
msgstr "Envoyé depuis %(site_url)s"
#: templates/messages/new_message.html:11 templates/messages/view.html:18
msgid "Reply"
msgstr "Répondre"
#: templates/messages/outbox.html:7
msgid "Sent"
msgstr "Envoyé"
#: templates/messages/trash.html:4
msgid "Deleted Messages"
msgstr "Messages Effacés"
#: templates/messages/trash.html:7 templates/messages/view.html:10
msgid "Date"
msgstr "Date"
#: templates/messages/trash.html:17
msgid "undelete"
msgstr "restaurer"
#: templates/messages/trash.html:23
msgid "Deleted Messages are removed from the trash at unregular intervals, don't rely on this feature for long-time storage."
msgstr "Les Messages Effacés sont enlevé de la poubelle a intervalles irréguliers, ne comptez pas sur cette fonctionnalité pour du stockage à long terme."
#: templates/messages/view.html:4
msgid "View Message"
msgstr "Voir Message"
#: templates/messages/view.html:20
msgid "Delete"
msgstr "Effacer"
#: templates/notification/messages_deleted/notice.html:1
#, python-format
msgid "You have deleted the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "Vous avez effacé le message <a href=\"%(message_url)s\">%(message)s</a>."
#: templates/notification/messages_recovered/notice.html:1
#, python-format
msgid "You have recovered the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "Vous avez récupéré le message <a href=\"%(message_url)s\">%(message)s</a>."
#: templates/notification/messages_received/notice.html:2
#, python-format
msgid "You have received the message <a href=\"%(message_url)s\">%(message)s</a> from %(message_sender)s."
msgstr "Vous avez reçu le message <a href=\"%(message_url)s\">%(message)s</a> de %(message_sender)s."
#: templates/notification/messages_reply_received/notice.html:2
#, python-format
msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s."
msgstr "%(message_sender)s vous a envoyé une réponse à %(message_parent_msg)s."
#: templates/notification/messages_sent/notice.html:2
#, python-format
msgid "You have sent the message <a href=\"%(message_url)s\">%(message)s</a> to %(message_recipient)s."
msgstr "Vous avez envoyé le message <a href=\"%(message_url)s\">%(message)s</a> à %(message_recipient)s."
#: templates/notification/messages_replied/notice.html:2
#, python-format
msgid "You have replied to <a href=\"%(message_url)s\">%(message_parent_msg)s</a> from %(message_recipient)s."
msgstr "Vous avez répondu à <a href=\"%(message_url)s\">%(message_parent_msg)s</a> de %(message_recipient)s."
#: templates/messages/new_message.html:1
#, python-format
msgid ""
"Hello %(recipient)s,\n"
"\n"
"you received a private message from %(sender)s with\n"
"the following contents:"
msgstr ""
"Bonjour %(recipient)s,\n"
"\n"
"vous avez reçu un message privé de %(sender)s avec\n"
"le contenu suivant :"
#: admin.py:16
msgid "Creates the message optionally for all users or a group of users."
msgstr "Créé le message en option pour tous les utilisateurs ou un groupe d'utilisateurs."
#: admin.py:15
msgid "group"
msgstr "groupe"
#: admin.py:23
msgid "All users"
msgstr "Tous les utilisateurs"
#: fields.py:53
#, python-format
msgid "The following usernames are incorrect: %(users)s"
msgstr "Les noms d'utilisateurs suivants sont incorrects : %(users)s"
#: admin.py:45
msgid "Date/time"
msgstr "Date/heure"
#: utils.py:27
#, python-format
msgid "New Message: %(subject)s"
msgstr "Nouveau message: %(subject)s"
#~ msgid "There is no user with this username."
#~ msgstr "Il n'y a pas d'utilisateur avec ce nom d'utilisateur."
#~ msgid "New Message:"
#~ msgstr "Nouveau Message:"
#~ msgid "You have deleted the message '%(message)s'."
#~ msgstr "Vous avez effacé le message '%(message)s'."
#~ msgid "You have received a message from %(message_sender)s."
#~ msgstr "Vous avez reçu un message de %(message_sender)s."
#~ msgid "You have recovered the message '%(message)s'."
#~ msgstr "vous avez récupéré le message '%(message)s'."
#~ msgid "You have replied to '%(message_parent_msg)s' from %(message_recipient)s."
#~ msgstr "Vous avez répondu à '%(message_parent_msg)s' de %(message_recipient)s."
#~ msgid "<a href=\"%(sender_url)s\">%(message_sender)s</a> has sent you a reply to '<a href=\"%(message_url)s\">%(message_parent_msg)s</a>'."
#~ msgstr "<a href=\"%(sender_url)s\">%(message_sender)s</a> vous a envoyé une réponse à '<a href=\"%(message_url)s\">%(message_parent_msg)s</a>'."
#~ msgid "You have sent the message '%(message)s' to %(message_recipient)s."
#~ msgstr "Vous avez envoyé le message '%(message)s' à %(message_recipient)s."

@ -0,0 +1,317 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Sergio Morstabilini <sergiomorstabilini@gmail.com>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: messages\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-03-03 12:31-0700\n"
"PO-Revision-Date: 2010-03-03 21:58+0100\n"
"Last-Translator: Sergio Morstabilini <sergiomorstabilini@gmail.com>\n"
"Language-Team: Sergio Morstabilini <sergiomorstabilini@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-Language: Italian\n"
#: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7
#: templates/messages/view.html:12
msgid "Recipient"
msgstr "Destinatario"
#: admin.py:38 models.py:88
msgid "Message"
msgstr "Messaggio"
#: forms.py:21 models.py:49 templates/messages/inbox.html:7
#: templates/messages/outbox.html:7 templates/messages/trash.html:7
#: templates/messages/view.html:6
msgid "Subject"
msgstr "Oggetto"
#: forms.py:22 models.py:50
msgid "Body"
msgstr "Messaggio"
#: management.py:9
msgid "Message Received"
msgstr "Messaggio Ricevuto"
#: management.py:9
msgid "you have received a message"
msgstr "hai ricevuto un messaggio"
#: management.py:10
msgid "Message Sent"
msgstr "Messaggio Inviato"
#: management.py:10
msgid "you have sent a message"
msgstr "hai inviato un messaggio"
#: management.py:11
msgid "Message Replied"
msgstr "Risposta Inviata"
#: management.py:11
msgid "you have replied to a message"
msgstr "hai risposto ad un messaggio"
#: management.py:12
msgid "Reply Received"
msgstr "Risposta Ricevuta"
#: management.py:12
msgid "you have received a reply to a message"
msgstr "hai ricevuto una risposta ad un messaggio"
#: management.py:13
msgid "Message Deleted"
msgstr "Messaggio Cancellato"
#: management.py:13
msgid "you have deleted a message"
msgstr "hai cancellato un messaggio"
#: management.py:14
msgid "Message Recovered"
msgstr "Messaggio Ripristinato"
#: management.py:14
msgid "you have undeleted a message"
msgstr "hai ripristinato un messaggio"
#: models.py:51 templates/messages/inbox.html:7
#: templates/messages/trash.html:7 templates/messages/view.html:8
msgid "Sender"
msgstr "Mittente"
#: models.py:53
msgid "Parent message"
msgstr "In risposta a"
#: models.py:54
msgid "sent at"
msgstr "inviato il"
#: models.py:55
msgid "read at"
msgstr "letto il"
#: models.py:56
msgid "replied at"
msgstr "risposto il"
#: models.py:57
msgid "Sender deleted at"
msgstr "Mittente cancellato il"
#: models.py:58
msgid "Recipient deleted at"
msgstr "Destinatario cancellato il"
#: models.py:89
msgid "Messages"
msgstr "Messaggi"
#: views.py:78 views.py:112
msgid "Message successfully sent."
msgstr "Messaggio inviato con successo."
#: views.py:118
#, python-format
msgid ""
"%(sender)s wrote:\n"
"%(body)s"
msgstr ""
"%(sender)s ha scritto:\n"
"%(body)s"
#: views.py:122
#, python-format
msgid "Re: %(subject)s"
msgstr "Re: %(subject)s"
#: views.py:158
msgid "Message successfully deleted."
msgstr "Messaggio cancellato con successo."
#: views.py:185
msgid "Message successfully recovered."
msgstr "Messaggio recuperato con successo."
#: templates/messages/base.html:8 templates/messages/inbox.html:4
#: templates/messages/new_message.html:10
msgid "Inbox"
msgstr "Messaggi Ricevuti"
#: templates/messages/base.html:9 templates/messages/outbox.html:4
msgid "Sent Messages"
msgstr "Messaggi Inviati"
#: templates/messages/base.html:10
msgid "New Message"
msgstr "Nuovo Messaggio"
#: templates/messages/base.html:11
msgid "Trash"
msgstr "Cestino"
#: templates/messages/compose.html:4
msgid "Compose Message"
msgstr "Scrivi Messaggio"
#: templates/messages/compose.html:9
msgid "Send"
msgstr "Invia"
#: templates/messages/inbox.html:7
msgid "Received"
msgstr "Ricevuto"
#: templates/messages/inbox.html:7 templates/messages/outbox.html:7
#: templates/messages/trash.html:7
msgid "Action"
msgstr "Azione"
#: templates/messages/inbox.html:19 templates/messages/outbox.html:16
#: templates/messages/trash.html:16 templates/messages/view.html:11
msgid "DATETIME_FORMAT"
msgstr "j F Y, G:i"
#: templates/messages/inbox.html:20 templates/messages/outbox.html:17
msgid "delete"
msgstr "cancella"
#: templates/messages/new_message.html:9
#, python-format
msgid "Sent from %(site_url)s"
msgstr "Spedito da %(site_url)s"
#: templates/messages/new_message.html:11 templates/messages/view.html:18
msgid "Reply"
msgstr "Rispondi"
#: templates/messages/outbox.html:7
msgid "Sent"
msgstr "Spedito"
#: templates/messages/trash.html:4
msgid "Deleted Messages"
msgstr "Messaggi Cancellati"
#: templates/messages/trash.html:7 templates/messages/view.html:10
msgid "Date"
msgstr "Data"
#: templates/messages/trash.html:17
msgid "undelete"
msgstr "ripristina"
#: templates/messages/trash.html:23
msgid "Deleted Messages are removed from the trash at unregular intervals, don't rely on this feature for long-time storage."
msgstr "I messaggi cancellati sono rimossi dal cestino ad intervalli irregolari, non affidatevi a questa cartella per salvare messaggi a lungo termine."
#: templates/messages/view.html:4
msgid "View Message"
msgstr "Vedi Messaggio"
#: templates/messages/view.html:20
msgid "Delete"
msgstr "Cancella"
#: templates/notification/messages_deleted/notice.html:1
#, python-format
msgid "You have deleted the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "Hai cancellato il messaggio <a href=\"%(message_url)s\">%(message)s</a>."
#: templates/notification/messages_recovered/notice.html:1
#, python-format
msgid "You have recovered the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "Hai ripristinato il messaggio <a href=\"%(message_url)s\">%(message)s</a>."
#: templates/notification/messages_received/notice.html:2
#, python-format
msgid "You have received the message <a href=\"%(message_url)s\">%(message)s</a> from %(message_sender)s."
msgstr "Hai ricevuto il messaggio <a href=\"%(message_url)s\">%(message)s</a> da %(message_sender)s."
#: templates/notification/messages_reply_received/notice.html:2
#, python-format
msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s."
msgstr "%(message_sender)s ha mandato una risposta a %(message_parent_msg)s."
#: templates/notification/messages_sent/notice.html:2
#, python-format
msgid "You have sent the message <a href=\"%(message_url)s\">%(message)s</a> to %(message_recipient)s."
msgstr "Hai inviato il messaggio <a href=\"%(message_url)s\">%(message)s</a> a %(message_recipient)s."
#: templates/notification/messages_replied/notice.html:2
#, python-format
msgid "You have replied to <a href=\"%(message_url)s\">%(message_parent_msg)s</a> from %(message_recipient)s."
msgstr "Hai risposto a <a href=\"%(message_url)s\">%(message_parent_msg)s</a> ricevuto da %(message_recipient)s."
#: templates/messages/new_message.html:1
#, python-format
msgid ""
"Hello %(recipient)s,\n"
"\n"
"you received a private message from %(sender)s with\n"
"the following contents:"
msgstr ""
"Ciao %(recipient)s,\n"
"\n"
"hai ricevuto un messaggio privato da %(sender)s con\n"
"il seguente contenuto:"
#: admin.py:16
msgid "Creates the message optionally for all users or a group of users."
msgstr "Crea il messaggio facoltativamente per tutti gli utenti o per un gruppo di utenti."
#: admin.py:15
msgid "group"
msgstr "gruppo"
#: admin.py:23
msgid "All users"
msgstr "Tutti gli utenti"
#: fields.py:53
#, python-format
msgid "The following usernames are incorrect: %(users)s"
msgstr "I seguenti nomi utente sono incorretti: %(users)s"
#: admin.py:45
msgid "Date/time"
msgstr "Data/ora"
#: utils.py:27
#, python-format
msgid "New Message: %(subject)s"
msgstr "Nuovo Messaggio: %(subject)s"
#~ msgid "There is no user with this username."
#~ msgstr "Non esiste un utente con questo nome."
#~ msgid "New Message:"
#~ msgstr "Nuovo Messaggio:"
#~ msgid "You have deleted the message '%(message)s'."
#~ msgstr "Hai cancellato il messaggio '%(message)s'."
#~ msgid "You have received a message from %(message_sender)s."
#~ msgstr "Hai ricevuto un messaggio da %(message_sender)s."
#~ msgid "You have recovered the message '%(message)s'."
#~ msgstr "Hai ripristinato il messaggio '%(message)s'."
#~ msgid "You have replied to '%(message_parent_msg)s' from %(message_recipient)s."
#~ msgstr "Hai risposto a '%(message_parent_msg)s' ricevuto da %(message_recipient)s."
#~ msgid "<a href=\"%(sender_url)s\">%(message_sender)s</a> has sent you a reply to '<a href=\"%(message_url)s\">%(message_parent_msg)s</a>'."
#~ msgstr "<a href=\"%(sender_url)s\">%(message_sender)s</a> ha risposto a '<a href=\"%(message_url)s\">%(message_parent_msg)s</a>'."
#~ msgid "You have sent the message '%(message)s' to %(message_recipient)s."
#~ msgstr "Hai spedito il messaggio '%(message)s' a %(message_recipient)s."

@ -0,0 +1,292 @@
# django-messages translation for Korean.
# Copyright (C) 2012 Jeong YunWon
# This file is distributed under the same license as the django-messages package.
# Jeong YunWon <jeong@youknowone.org>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: messages\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-09-11 12:31-0700\n"
"PO-Revision-Date: 2012-02-04 10:58+0900\n"
"Last-Translator: Jeong YunWon <jeong@youknowone.org>\n"
"Language-Team: Jeong YunWon <jeong@youknowone.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Korean\n"
#: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7
#: templates/messages/view.html:12
msgid "Recipient"
msgstr "받는이"
#: admin.py:38 models.py:88
msgid "Message"
msgstr "쪽지"
#: forms.py:21 models.py:49 templates/messages/inbox.html:7
#: templates/messages/outbox.html:7 templates/messages/trash.html:7
#: templates/messages/view.html:6
msgid "Subject"
msgstr "제목"
#: forms.py:22 models.py:50
msgid "Body"
msgstr "내용"
#: management.py:9
msgid "Message Received"
msgstr "받은 시각"
#: management.py:9
msgid "you have received a message"
msgstr "쪽지를 받았습니다"
#: management.py:10
msgid "Message Sent"
msgstr "쪽지 보냄"
#: management.py:10
msgid "you have sent a message"
msgstr "쪽지를 보냈습니다"
#: management.py:11
msgid "Message Replied"
msgstr "쪽지 답장"
#: management.py:11
msgid "you have replied to a message"
msgstr "쪽지에 답장하였습니다"
#: management.py:12
msgid "Reply Received"
msgstr "답장 받음"
#: management.py:12
msgid "you have received a reply to a message"
msgstr "쪽지에 답장을 받았습니다"
#: management.py:13
msgid "Message Deleted"
msgstr "쪽지 지움"
#: management.py:13
msgid "you have deleted a message"
msgstr "쪽지를 지웠습니다"
#: management.py:14
msgid "Message Recovered"
msgstr "쪽지 되살림"
#: management.py:14
msgid "you have undeleted a message"
msgstr "쪽지를 되살렸습니다"
#: models.py:51 templates/messages/inbox.html:7
#: templates/messages/trash.html:7 templates/messages/view.html:8
msgid "Sender"
msgstr "보낸이"
#: models.py:53
msgid "Parent message"
msgstr "이전 쪽지"
#: models.py:54
msgid "sent at"
msgstr "보낸 시각:"
#: models.py:55
msgid "read at"
msgstr "읽은 시각:"
#: models.py:56
msgid "replied at"
msgstr "답장 시각:"
#: models.py:57
msgid "Sender deleted at"
msgstr "보낸이가 지운 시각:"
#: models.py:58
msgid "Recipient deleted at"
msgstr "받는이가 지운 시각:"
#: models.py:89
msgid "Messages"
msgstr "쪽지"
#: views.py:78 views.py:112
msgid "Message successfully sent."
msgstr "쪽지를 보냈습니다."
#: views.py:118
#, python-format
msgid ""
"%(sender)s wrote:\n"
"%(body)s"
msgstr ""
"%(sender)s 님의 글:\n"
"%(body)s"
#: views.py:122
#, python-format
msgid "Re: %(subject)s"
msgstr "Re: %(subject)s"
#: views.py:158
msgid "Message successfully deleted."
msgstr "쪽지를 지웠습니다."
#: views.py:185
msgid "Message successfully recovered."
msgstr "쪽지를 되살렸습니다."
#: templates/messages/base.html:8 templates/messages/inbox.html:4
#: templates/messages/new_message.html:10
msgid "Inbox"
msgstr "받은 편지함"
#: templates/messages/base.html:9 templates/messages/outbox.html:4
msgid "Sent Messages"
msgstr "보낸 편지함"
#: templates/messages/base.html:10
msgid "New Message"
msgstr "새 쪽지"
#: templates/messages/base.html:11
msgid "Trash"
msgstr "휴지통"
#: templates/messages/compose.html:4
msgid "Compose Message"
msgstr "새 쪽지 쓰기"
#: templates/messages/compose.html:9
msgid "Send"
msgstr "보내기"
#: templates/messages/inbox.html:7
msgid "Received"
msgstr "받은 시각"
#: templates/messages/inbox.html:7 templates/messages/outbox.html:7
#: templates/messages/trash.html:7
msgid "Action"
msgstr "할일"
#: templates/messages/inbox.html:19 templates/messages/outbox.html:16
#: templates/messages/trash.html:16 templates/messages/view.html:11
msgid "DATETIME_FORMAT"
msgstr "Y-m-d G:i"
#: templates/messages/inbox.html:20 templates/messages/outbox.html:17
msgid "delete"
msgstr "지우기"
#: templates/messages/new_message.html:9
#, python-format
msgid "Sent from %(site_url)s"
msgstr "%(site_url)s 에서 보냄"
#: templates/messages/new_message.html:11 templates/messages/view.html:18
msgid "Reply"
msgstr "답장"
#: templates/messages/outbox.html:7
msgid "Sent"
msgstr "보낸 시각"
#: templates/messages/trash.html:4
msgid "Deleted Messages"
msgstr "지운 쪽지"
#: templates/messages/trash.html:7 templates/messages/view.html:10
msgid "Date"
msgstr "날짜"
#: templates/messages/trash.html:17
msgid "undelete"
msgstr "되살리기"
#: templates/messages/trash.html:23
msgid "Deleted Messages are removed from the trash at unregular intervals, don't rely on this feature for long-time storage."
msgstr "지운 쪽지는 비정기적으로 휴지통에서 완전히 삭제됩니다. 오래 보관해야 하는 쪽지에 이 기능을 사용하지 마세요."
#: templates/messages/view.html:4
msgid "View Message"
msgstr "쪽지 보기"
#: templates/messages/view.html:20
msgid "Delete"
msgstr "지우기"
#: templates/notification/messages_deleted/notice.html:1
#, python-format
msgid "You have deleted the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "<a href=\"%(message_url)s\">%(message)s</a> 지윘습니다."
#: templates/notification/messages_recovered/notice.html:1
#, python-format
msgid "You have recovered the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "<a href=\"%(message_url)s\">%(message)s</a> 되살렸습니다."
#: templates/notification/messages_received/notice.html:2
#, python-format
msgid "You have received the message <a href=\"%(message_url)s\">%(message)s</a> from %(message_sender)s."
msgstr "%(message_sender)s 님에게 <a href=\"%(message_url)s\">%(message)s</a> 받았습니다."
#: templates/notification/messages_reply_received/notice.html:2
#, python-format
msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s."
msgstr "%(message_sender)s 님이 %(message_parent_msg)s 에 답장을 보냈습니다."
#: templates/notification/messages_sent/notice.html:2
#, python-format
msgid "You have sent the message <a href=\"%(message_url)s\">%(message)s</a> to %(message_recipient)s."
msgstr "%(message_recipient)s 님에게 <a href=\"%(message_url)s\">%(message)s</a> 보냈습니다."
#: templates/notification/messages_replied/notice.html:2
#, python-format
msgid "You have replied to <a href=\"%(message_url)s\">%(message_parent_msg)s</a> from %(message_recipient)s."
msgstr "%(message_recipient)s 님의 <a href=\"%(message_url)s\">%(message_parent_msg)s</a> 에 답장하였습니다."
#: templates/messages/new_message.html:1
#, python-format
msgid ""
"Hello %(recipient)s,\n"
"\n"
"you received a private message from %(sender)s with\n"
"the following contents:"
msgstr ""
"%(recipient)s 님\n"
"\n"
"%(sender)s 님께 다음 내용으로 쪽지를 받았습니다:"
#: admin.py:16
msgid "Creates the message optionally for all users or a group of users."
msgstr "Creates the message optionally for all users or a group of users."
#: admin.py:15
msgid "group"
msgstr "그룹"
#: admin.py:23
msgid "All users"
msgstr "모든 사용자"
#: fields.py:53
#, python-format
msgid "The following usernames are incorrect: %(users)s"
msgstr "올바르지 않은 사용자 이름을 입력하였습니다: %(users)s"
#: admin.py:45
msgid "Date/time"
msgstr "날짜/시각"
#: utils.py:27
#, python-format
msgid "New Message: %(subject)s"
msgstr "새 쪽지: %(subject)s"

@ -0,0 +1,314 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: django-messages-0.4.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-09-11 12:31-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: krisje8 <info@krisje8.com>\n"
"Language-Team: krisje8 <info@krisje8.com\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7
#: templates/messages/view.html:12
msgid "Recipient"
msgstr "Ontvanger"
#: admin.py:15
msgid "group"
msgstr "groep"
#: admin.py:16
msgid "Creates the message optionally for all users or a group of users."
msgstr ""
"Maakt het bericht optioneel voor alle gebruikers of een groep van gebruikers."
#: admin.py:23
msgid "All users"
msgstr "Alle gebruikers"
#: admin.py:38 models.py:88
msgid "Message"
msgstr "Bericht"
#: admin.py:45
msgid "Date/time"
msgstr "Datum/tijd"
#: fields.py:53
#, python-format
msgid "The following usernames are incorrect: %(users)s"
msgstr "De volgende gebruikersnamen zijn incorrect: %(users)s"
#: forms.py:21 models.py:49 templates/messages/inbox.html:7
#: templates/messages/outbox.html:7 templates/messages/trash.html:7
#: templates/messages/view.html:6
msgid "Subject"
msgstr "Onderwerp"
#: forms.py:22 models.py:50
msgid "Body"
msgstr "Inhoud"
#: management.py:9
msgid "Message Received"
msgstr "Bericht Ontvangen"
#: management.py:9
msgid "you have received a message"
msgstr "je hebt een bericht ontvangen"
#: management.py:10
msgid "Message Sent"
msgstr "Bericht Verstuurd"
#: management.py:10
msgid "you have sent a message"
msgstr "je hebt een bericht verstuurd"
#: management.py:11
msgid "Message Replied"
msgstr "Bericht Beantwoord"
#: management.py:11
msgid "you have replied to a message"
msgstr "je hebt een bericht beantwoord"
#: management.py:12
msgid "Reply Received"
msgstr "Antwoord Ontvangen"
#: management.py:12
msgid "you have received a reply to a message"
msgstr "je hebt een antwoord op een bericht ontvangen"
#: management.py:13
msgid "Message Deleted"
msgstr "Bericht Verwijderd"
#: management.py:13
msgid "you have deleted a message"
msgstr "je hebt een bericht verwijderd"
#: management.py:14
msgid "Message Recovered"
msgstr "Bericht Hersteld"
#: management.py:14
msgid "you have undeleted a message"
msgstr "je hebt een bericht hersteld"
#: models.py:51 templates/messages/inbox.html:7
#: templates/messages/trash.html:7 templates/messages/view.html:8
msgid "Sender"
msgstr "Verstuurder"
#: models.py:53
msgid "Parent message"
msgstr "Hoofdbericht"
#: models.py:54
msgid "sent at"
msgstr "verstuurd op"
#: models.py:55
msgid "read at"
msgstr "gelezen op"
#: models.py:56
msgid "replied at"
msgstr "beantwoord op"
#: models.py:57
msgid "Sender deleted at"
msgstr "Verstuurder verwijderde op"
#: models.py:58
msgid "Recipient deleted at"
msgstr "Ontvanger verwijderde op"
#: models.py:89
msgid "Messages"
msgstr "Berichten"
#: utils.py:27
#, python-format
msgid "New Message: %(subject)s"
msgstr "Nieuw Bericht: %(subject)s"
#: views.py:78 views.py:112
msgid "Message successfully sent."
msgstr "Bericht succesvol verstuurd."
#: views.py:118
#, python-format
msgid ""
"%(sender)s wrote:\n"
"%(body)s"
msgstr ""
"%(sender)s schreef:\n"
"%(body)s"
#: views.py:122
#, python-format
msgid "Re: %(subject)s"
msgstr "Antw: %(subject)s"
#: views.py:158
msgid "Message successfully deleted."
msgstr "Bericht succesvol verwijderd."
#: views.py:185
msgid "Message successfully recovered."
msgstr "Bericht succesvol hersteld."
#: templates/messages/base.html:8 templates/messages/inbox.html:4
#: templates/messages/new_message.html:10
msgid "Inbox"
msgstr "Postvak In"
#: templates/messages/base.html:9 templates/messages/outbox.html:4
msgid "Sent Messages"
msgstr "Verstuurde berichten"
#: templates/messages/base.html:10
msgid "New Message"
msgstr "Nieuw Bericht"
#: templates/messages/base.html:11
msgid "Trash"
msgstr "Prullenbak"
#: templates/messages/compose.html:4
msgid "Compose Message"
msgstr "Schrijf een bericht"
#: templates/messages/compose.html:9
msgid "Send"
msgstr "Verstuur"
#: templates/messages/inbox.html:7
msgid "Received"
msgstr "Ontvangen"
#: templates/messages/inbox.html:7 templates/messages/outbox.html:7
#: templates/messages/trash.html:7
msgid "Action"
msgstr "Actie"
#: templates/messages/inbox.html:19 templates/messages/outbox.html:16
#: templates/messages/trash.html:16 templates/messages/view.html:11
msgid "DATETIME_FORMAT"
msgstr "DATETIME_FORMAT"
#: templates/messages/inbox.html:20 templates/messages/outbox.html:17
msgid "delete"
msgstr "verwijderen"
#: templates/messages/new_message.html:1
#, python-format
msgid ""
"Hello %(recipient)s,\n"
"\n"
"you received a private message from %(sender)s with\n"
"the following contents:"
msgstr ""
"Hallo %(recipient)s,\n"
"\n"
"Je hebt een persoonlijk bericht ontvangen van %(sender)s met\n"
"de volgende inhoud:"
#: templates/messages/new_message.html:9
#, python-format
msgid "Sent from %(site_url)s"
msgstr "Verstuurd vanaf %(site_url)s"
#: templates/messages/new_message.html:11 templates/messages/view.html:18
msgid "Reply"
msgstr "Beantwoord"
#: templates/messages/outbox.html:7
msgid "Sent"
msgstr "Verstuurd"
#: templates/messages/trash.html:4
msgid "Deleted Messages"
msgstr "Verwijderde Berichten"
#: templates/messages/trash.html:7 templates/messages/view.html:10
msgid "Date"
msgstr "Datum"
#: templates/messages/trash.html:17
msgid "undelete"
msgstr "herstel"
#: templates/messages/trash.html:23
msgid ""
"Deleted Messages are removed from the trash at unregular intervals, don't "
"rely on this feature for long-time storage."
msgstr ""
"Verwijderde Berichten worden uit de prullenbak verwijderd op onregelmatige "
"tijden, vertrouw niet op deze functie voor langdurige opslag."
#: templates/messages/view.html:4
msgid "View Message"
msgstr "Bekijk Bericht"
#: templates/messages/view.html:20
msgid "Delete"
msgstr "Verwijder"
#: templates/notification/messages_deleted/notice.html:1
#, python-format
msgid ""
"You have deleted the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr ""
"Je hebt het bericht <a href=\"%(message_url)s\">%(message)s</a> verwijderd."
#: templates/notification/messages_received/notice.html:2
#, python-format
msgid ""
"You have received the message <a href=\"%(message_url)s\">%(message)s</a> "
"from %(message_sender)s."
msgstr ""
"Je hebt het bericht <a href=\"%(message_url)s\">%(message)s</a> ontvangen "
"van %(message_sender)s."
#: templates/notification/messages_recovered/notice.html:1
#, python-format
msgid ""
"You have recovered the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr ""
"Je hebt het bericht <a href=\"%(message_url)s\">%(message)s</a> hersteld."
#: templates/notification/messages_replied/notice.html:2
#, python-format
msgid ""
"You have replied to <a href=\"%(message_url)s\">%(message_parent_msg)s</a> "
"from %(message_recipient)s."
msgstr ""
"Je hebt op <a href=\"%(message_url)s\">%(message_parent_msg)s</a> van %"
"(message_recipient)s geantwoord."
#: templates/notification/messages_reply_received/notice.html:2
#, python-format
msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s."
msgstr ""
"%(message_sender)s heeft je een antwoord op %(message_parent_msg)s gestuurd."
#: templates/notification/messages_sent/notice.html:2
#, python-format
msgid ""
"You have sent the message <a href=\"%(message_url)s\">%(message)s</a> to %"
"(message_recipient)s."
msgstr ""
"Je hebt het bericht <a href=\"%(message_url)s\">%(message)s</a> naar %"
"(message_recipient)s gestuurd."

@ -0,0 +1,305 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-09-11 12:31-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7
#: templates/messages/view.html:12
msgid "Recipient"
msgstr "Odbiorca"
#: admin.py:15
msgid "group"
msgstr ""
#: admin.py:16
msgid "Creates the message optionally for all users or a group of users."
msgstr ""
#: admin.py:23
msgid "All users"
msgstr ""
#: admin.py:38 models.py:88
msgid "Message"
msgstr "Wiadomość"
#: admin.py:45
#, fuzzy
msgid "Date/time"
msgstr "Data"
#: fields.py:53
#, python-format
msgid "The following usernames are incorrect: %(users)s"
msgstr "Te nazwy użytkowników są niewłaściwe: %(users)s"
#: forms.py:21 models.py:49 templates/messages/inbox.html:7
#: templates/messages/outbox.html:7 templates/messages/trash.html:7
#: templates/messages/view.html:6
msgid "Subject"
msgstr "Temat"
#: forms.py:22 models.py:50
msgid "Body"
msgstr "Treść"
#: management.py:9
msgid "Message Received"
msgstr "Wiadomość otrzymana"
#: management.py:9
msgid "you have received a message"
msgstr "otrzymałeś wiadomość"
#: management.py:10
msgid "Message Sent"
msgstr "Wiadomość wysłana"
#: management.py:10
msgid "you have sent a message"
msgstr "wysłałeś wiadomość"
#: management.py:11
msgid "Message Replied"
msgstr "Odpowiedź wysłana"
#: management.py:11
msgid "you have replied to a message"
msgstr "odpowiedziałeś na wiadomość"
#: management.py:12
msgid "Reply Received"
msgstr "Odpowiedź otrzymana"
#: management.py:12
msgid "you have received a reply to a message"
msgstr "Dostałeś odpowiedź na wiadomość"
#: management.py:13
msgid "Message Deleted"
msgstr "Wiadomość skasowana"
#: management.py:13
msgid "you have deleted a message"
msgstr "skasowałeś wiadomość"
#: management.py:14
msgid "Message Recovered"
msgstr "Wiadomość odzyskana"
#: management.py:14
msgid "you have undeleted a message"
msgstr "Odzyskałeś skasowaną wiadomość"
#: models.py:51 templates/messages/inbox.html:7
#: templates/messages/trash.html:7 templates/messages/view.html:8
msgid "Sender"
msgstr "Nadawca"
#: models.py:53
msgid "Parent message"
msgstr "Poprzednia wiadomość"
#: models.py:54
msgid "sent at"
msgstr "wysłano"
#: models.py:55
msgid "read at"
msgstr "przeczytano"
#: models.py:56
msgid "replied at"
msgstr "odpowiedziano"
#: models.py:57
msgid "Sender deleted at"
msgstr "Nadawcę skasowano"
#: models.py:58
msgid "Recipient deleted at"
msgstr "Adresata skasowano"
#: models.py:89
msgid "Messages"
msgstr "Wiadomości"
#: utils.py:27
#, python-format
msgid "New Message: %(subject)s"
msgstr "Nowa wiadomość: %(subject)s"
#: views.py:78 views.py:112
msgid "Message successfully sent."
msgstr "Wiadomość wysłana"
#: views.py:118
#, python-format
msgid ""
"%(sender)s wrote:\n"
"%(body)s"
msgstr ""
"%(sender)s napisał:\n"
"%(body)s"
#: views.py:122
#, python-format
msgid "Re: %(subject)s"
msgstr "Odp: %(subject)s"
#: views.py:158
msgid "Message successfully deleted."
msgstr "Wiadomość skasowana"
#: views.py:185
msgid "Message successfully recovered."
msgstr "Wiadomość odzyskana"
#: templates/messages/base.html:8 templates/messages/inbox.html:4
#: templates/messages/new_message.html:10
msgid "Inbox"
msgstr "Wiadomości otrzymane"
#: templates/messages/base.html:9 templates/messages/outbox.html:4
msgid "Sent Messages"
msgstr "Wiadomości wysłane"
#: templates/messages/base.html:10
msgid "New Message"
msgstr "Nowa wiadomość"
#: templates/messages/base.html:11
msgid "Trash"
msgstr "Kosz"
#: templates/messages/compose.html:4
msgid "Compose Message"
msgstr "Stwórz wiadomość"
#: templates/messages/compose.html:9
msgid "Send"
msgstr "Wyślij"
#: templates/messages/inbox.html:7
msgid "Received"
msgstr "Otrzymane"
#: templates/messages/inbox.html:7 templates/messages/outbox.html:7
#: templates/messages/trash.html:7
msgid "Action"
msgstr "akcja"
#: templates/messages/inbox.html:19 templates/messages/outbox.html:16
#: templates/messages/trash.html:16 templates/messages/view.html:11
msgid "DATETIME_FORMAT"
msgstr ""
#: templates/messages/inbox.html:20 templates/messages/outbox.html:17
msgid "delete"
msgstr "usuń"
#: templates/messages/new_message.html:1
#, python-format
msgid ""
"Hello %(recipient)s,\n"
"\n"
"you received a private message from %(sender)s with\n"
"the following contents:"
msgstr ""
"Witaj, %(recipient)s,\n"
"\n"
"otrzymałeś od użytkownika %(sender)s wiadomość\n"
"o następującej treści:"
#: templates/messages/new_message.html:9
#, python-format
msgid "Sent from %(site_url)s"
msgstr "Wysłane z adresu %(site_url)s"
#: templates/messages/new_message.html:11 templates/messages/view.html:18
msgid "Reply"
msgstr "Odpowiedz"
#: templates/messages/outbox.html:7
msgid "Sent"
msgstr "Wiadomości wysłane"
#: templates/messages/trash.html:4
msgid "Deleted Messages"
msgstr "Wiadomości skasowane"
#: templates/messages/trash.html:7 templates/messages/view.html:10
msgid "Date"
msgstr "Data"
#: templates/messages/trash.html:17
msgid "undelete"
msgstr "odzyskaj"
#: templates/messages/trash.html:23
msgid ""
"Deleted Messages are removed from the trash at unregular intervals, don't "
"rely on this feature for long-time storage."
msgstr ""
"Wiadomości są usuwane z Kosza nieregularnie. Nie licz, że zastaniesz je "
"tutaj po dłuższym czasie"
#: templates/messages/view.html:4
msgid "View Message"
msgstr "Zobacz wiadomość"
#: templates/messages/view.html:20
msgid "Delete"
msgstr "Usuń"
#: templates/notification/messages_deleted/notice.html:1
#, python-format
msgid ""
"You have deleted the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr ""
#: templates/notification/messages_received/notice.html:2
#, python-format
msgid ""
"You have received the message <a href=\"%(message_url)s\">%(message)s</a> "
"from %(message_sender)s."
msgstr ""
#: templates/notification/messages_recovered/notice.html:1
#, python-format
msgid ""
"You have recovered the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr ""
#: templates/notification/messages_replied/notice.html:2
#, python-format
msgid ""
"You have replied to <a href=\"%(message_url)s\">%(message_parent_msg)s</a> "
"from %(message_recipient)s."
msgstr ""
#: templates/notification/messages_reply_received/notice.html:2
#, python-format
msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s."
msgstr ""
#: templates/notification/messages_sent/notice.html:2
#, python-format
msgid ""
"You have sent the message <a href=\"%(message_url)s\">%(message)s</a> to %"
"(message_recipient)s."
msgstr ""

@ -0,0 +1,314 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Diego Martins <conchas@gmail.com>, 2009.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-02-01 10:24+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: admin.py:19 forms.py:20 models.py:52 templates/messages/outbox.html:8
#: templates/messages/view.html:12
msgid "Recipient"
msgstr "Usuário"
#: admin.py:21
msgid "group"
msgstr "grupo"
#: admin.py:22
msgid "Creates the message optionally for all users or a group of users."
msgstr "Cria a mensagem para todos os usuários ou para um grupo de usuários."
#: admin.py:29
msgid "All users"
msgstr "Todos os usuários"
#: admin.py:44 models.py:88
msgid "Message"
msgstr "Mensagem"
#: admin.py:51
msgid "Date/time"
msgstr "Data/Hora"
#: fields.py:53
#, python-format
msgid "The following usernames are incorrect: %(users)s"
msgstr "Os seguintes nome de usuário estão incorretos: %(users)s"
#: forms.py:21 models.py:49 templates/messages/inbox.html:8
#: templates/messages/outbox.html:8 templates/messages/trash.html:8
#: templates/messages/view.html:6
msgid "Subject"
msgstr "Assunto"
#: forms.py:22 models.py:50
msgid "Body"
msgstr "Mensagem"
#: management.py:9
msgid "Message Received"
msgstr "Mensagem Recebida"
#: management.py:9
msgid "you have received a message"
msgstr "Você recebeu uma mensagem"
#: management.py:10
msgid "Message Sent"
msgstr "Mensagem Enviada"
#: management.py:10
msgid "you have sent a message"
msgstr "Você enviou uma mensagem"
#: management.py:11
msgid "Message Replied"
msgstr "Mensagem Respondida"
#: management.py:11
msgid "you have replied to a message"
msgstr "Você respondeu uma mensagem"
#: management.py:12
msgid "Reply Received"
msgstr "Resposta Recebida"
#: management.py:12
msgid "you have received a reply to a message"
msgstr "Você recebeu uma resposta de uma mensagem"
#: management.py:13
msgid "Message Deleted"
msgstr "Mensagem excluída"
#: management.py:13
msgid "you have deleted a message"
msgstr "Você excluiu uma mensagem"
#: management.py:14
msgid "Message Recovered"
msgstr "Mensagem Recuperada"
#: management.py:14
msgid "you have undeleted a message"
msgstr "Você recuperou uma mensagem"
#: models.py:51 templates/messages/inbox.html:8
#: templates/messages/trash.html:8 templates/messages/view.html:8
msgid "Sender"
msgstr "Remetente"
#: models.py:53
msgid "Parent message"
msgstr "Mensagem pai"
#: models.py:54
msgid "sent at"
msgstr "enviado à"
#: models.py:55
msgid "read at"
msgstr "lido à"
#: models.py:56
msgid "replied at"
msgstr "respondido à"
#: models.py:57
msgid "Sender deleted at"
msgstr "Remetente excluiu à"
#: models.py:58
msgid "Recipient deleted at"
msgstr "Destinatário excluiu à"
#: models.py:89
msgid "Messages"
msgstr "Mensagens"
#: utils.py:27
#, python-format
msgid "New Message: %(subject)s"
msgstr "Nova Mensagem: %(subject)s"
#: views.py:78 views.py:112
msgid "Message successfully sent."
msgstr "Mensagem enviada com sucesso."
#: views.py:118
#, python-format
msgid ""
"%(sender)s wrote:\n"
"%(body)s"
msgstr ""
"%(sender)s escreveu:\n"
"%(body)s"
#: views.py:122
#, python-format
msgid "Re: %(subject)s"
msgstr "Re: %(subject)s"
#: views.py:158
msgid "Message successfully deleted."
msgstr "Mensagem excluida com sucesso."
#: views.py:185
msgid "Message successfully recovered."
msgstr "Mensagem recuperada com sucesso."
#: templates/messages/base.html:8 templates/messages/inbox.html:4
#: templates/messages/new_message.html:10
msgid "Inbox"
msgstr "Caixa de Entrada"
#: templates/messages/base.html:9 templates/messages/outbox.html:4
msgid "Sent Messages"
msgstr "Mensagens Enviadas"
#: templates/messages/base.html:10
msgid "New Message"
msgstr "Nova Mensagem"
#: templates/messages/base.html:11
msgid "Trash"
msgstr "Lixeira"
#: templates/messages/compose.html:4
msgid "Compose Message"
msgstr "Escrever Mensagem"
#: templates/messages/compose.html:9
msgid "Send"
msgstr "Enviar"
#: templates/messages/inbox.html:8
msgid "Received"
msgstr "Recebida"
#: templates/messages/inbox.html:8 templates/messages/outbox.html:8
#: templates/messages/trash.html:8
msgid "Action"
msgstr "Ação"
#: templates/messages/inbox.html:20 templates/messages/outbox.html:17
#: templates/messages/trash.html:17 templates/messages/view.html:11
msgid "DATETIME_FORMAT"
msgstr "DATETIME_FORMAT"
#: templates/messages/inbox.html:21 templates/messages/outbox.html:18
msgid "delete"
msgstr "excluir"
#: templates/messages/inbox.html:27 templates/messages/outbox.html:24
#: templates/messages/trash.html:24
msgid "No messages."
msgstr ""
#: templates/messages/new_message.html:1
#, python-format
msgid ""
"Hello %(recipient)s,\n"
"\n"
"you received a private message from %(sender)s with\n"
"the following contents:"
msgstr ""
"Ola %(recipient)s,\n"
"\n"
"Você recebeu uma mensagem privada de %(sender)s com\n"
"o seguinte conteúdo:"
#: templates/messages/new_message.html:9
#, python-format
msgid "Sent from %(site_url)s"
msgstr "Enviado de %(site_url)s"
#: templates/messages/new_message.html:11 templates/messages/view.html:18
msgid "Reply"
msgstr "Responder"
#: templates/messages/outbox.html:8
msgid "Sent"
msgstr "Enviada"
#: templates/messages/trash.html:4
msgid "Deleted Messages"
msgstr "Mensagens Excluidas"
#: templates/messages/trash.html:8 templates/messages/view.html:10
msgid "Date"
msgstr "Data"
#: templates/messages/trash.html:18
msgid "undelete"
msgstr "recuperar"
#: templates/messages/trash.html:27
msgid ""
"Deleted Messages are removed from the trash at unregular intervals, don't "
"rely on this feature for long-time storage."
msgstr ""
"Mensagens excluidas são removidas da lixeira em intervalos de tempo não "
"regulares,não use a lixeira para armazenar mensagens por muito tempo."
#: templates/messages/view.html:4
msgid "View Message"
msgstr "Ver Mensagem"
#: templates/messages/view.html:20
msgid "Delete"
msgstr "Excluir"
#: templates/notification/messages_deleted/notice.html:1
#, python-format
msgid ""
"You have deleted the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "Você excluiu a mensagem <a href=\"%(message_url)s\">%(message)s</a>."
#: templates/notification/messages_received/notice.html:2
#, python-format
msgid ""
"You have received the message <a href=\"%(message_url)s\">%(message)s</a> "
"from %(message_sender)s."
msgstr ""
"Você recebeu a mensagem <a href=\"%(message_url)s\">%(message)s</a> de %"
"(message_sender)s."
#: templates/notification/messages_recovered/notice.html:1
#, python-format
msgid ""
"You have recovered the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "Você recuperou a mensagem <a href=\"%(message_url)s\">%(message)s</a>."
#: templates/notification/messages_replied/notice.html:2
#, python-format
msgid ""
"You have replied to <a href=\"%(message_url)s\">%(message_parent_msg)s</a> "
"from %(message_recipient)s."
msgstr ""
"Você respondeu a mensagem <a href=\"%(message_url)s\">%(message_parent_msg)"
"s</a> de %(message_recipient)s."
#: templates/notification/messages_reply_received/notice.html:2
#, python-format
msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s."
msgstr "%(message_sender)s lhe enviou uma resposta a %(message_parent_msg)s."
#: templates/notification/messages_sent/notice.html:2
#, python-format
msgid ""
"You have sent the message <a href=\"%(message_url)s\">%(message)s</a> to %"
"(message_recipient)s."
msgstr ""
"Você enviou a mensagem <a href=\"%(message_url)s\">%(message)s</a> para %"
"(message_recipient)s."

@ -0,0 +1,315 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Michail Sychev m.sychev@axion-rti.ru, 2009
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-09-11 12:31-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: admin.py:13 forms.py:20 models.py:52 templates/messages/outbox.html:7
#: templates/messages/view.html:12
msgid "Recipient"
msgstr "Получатель"
#: admin.py:15
msgid "group"
msgstr "Группа"
#: admin.py:16
msgid "Creates the message optionally for all users or a group of users."
msgstr "Создать сообщения опционально для всех пользователей или группы"
#: admin.py:23
msgid "All users"
msgstr "Все пользователи"
#: admin.py:38 models.py:88
msgid "Message"
msgstr "Сообщение"
#: admin.py:45
msgid "Date/time"
msgstr "Дата/Время"
#: fields.py:53
#, python-format
msgid "The following usernames are incorrect: %(users)s"
msgstr "Некорректные имена пользователей: %(users)s"
#: forms.py:21 models.py:49 templates/messages/inbox.html:7
#: templates/messages/outbox.html:7 templates/messages/trash.html:7
#: templates/messages/view.html:6
msgid "Subject"
msgstr "Тема"
#: forms.py:22 models.py:50
msgid "Body"
msgstr "Сообщение"
#: management.py:9
msgid "Message Received"
msgstr "Сообщение получено"
#: management.py:9
msgid "you have received a message"
msgstr "вы получили сообщение"
#: management.py:10
msgid "Message Sent"
msgstr "Сообщение отправлено"
#: management.py:10
msgid "you have sent a message"
msgstr "Вы отправили сообщение"
#: management.py:11
msgid "Message Replied"
msgstr "Сообщение отвечено"
#: management.py:11
msgid "you have replied to a message"
msgstr "вы ответили на сообщение"
#: management.py:12
msgid "Reply Received"
msgstr "Ответ получен"
#: management.py:12
msgid "you have received a reply to a message"
msgstr "вы получили ответ на сообщение"
#: management.py:13
msgid "Message Deleted"
msgstr "Сообщение удалено"
#: management.py:13
msgid "you have deleted a message"
msgstr "вы удалили сообщение"
#: management.py:14
msgid "Message Recovered"
msgstr "Сообщение восстановлено"
#: management.py:14
msgid "you have undeleted a message"
msgstr "вы восстановили сообщение"
#: models.py:51 templates/messages/inbox.html:7
#: templates/messages/trash.html:7 templates/messages/view.html:8
msgid "Sender"
msgstr "Отправитель"
#: models.py:53
msgid "Parent message"
msgstr "Родительское сообщение"
#: models.py:54
msgid "sent at"
msgstr "отправлено"
#: models.py:55
msgid "read at"
msgstr "прочитано"
#: models.py:56
msgid "replied at"
msgstr "отвечено"
#: models.py:57
msgid "Sender deleted at"
msgstr "Отправитель удалил"
#: models.py:58
msgid "Recipient deleted at"
msgstr "Получатель удалил"
#: models.py:89
msgid "Messages"
msgstr "Сообщения"
#: utils.py:27
#, python-format
msgid "New Message: %(subject)s"
msgstr "Новое сообщение: %(subject)s"
#: views.py:78 views.py:112
msgid "Message successfully sent."
msgstr "Сообщение успешно отправлено."
#: views.py:118
#, python-format
msgid ""
"%(sender)s wrote:\n"
"%(body)s"
msgstr ""
"%(sender)s написал:\n"
"%(body)s"
#: views.py:122
#, python-format
msgid "Re: %(subject)s"
msgstr "Re: %(subject)s"
#: views.py:158
msgid "Message successfully deleted."
msgstr "Сообщение успешно удалено."
#: views.py:185
msgid "Message successfully recovered."
msgstr "Сообщение успешно восстановлено."
#: templates/messages/base.html:8 templates/messages/inbox.html:4
#: templates/messages/new_message.html:10
msgid "Inbox"
msgstr "Входящие"
#: templates/messages/base.html:9 templates/messages/outbox.html:4
msgid "Sent Messages"
msgstr "Исходящие"
#: templates/messages/base.html:10
msgid "New Message"
msgstr "Новое сообщение"
#: templates/messages/base.html:11
msgid "Trash"
msgstr "Удалённые"
#: templates/messages/compose.html:4
msgid "Compose Message"
msgstr "Новое сообщение"
#: templates/messages/compose.html:9
msgid "Send"
msgstr "Отправить"
#: templates/messages/inbox.html:7
msgid "Received"
msgstr "Получено"
#: templates/messages/inbox.html:7 templates/messages/outbox.html:7
#: templates/messages/trash.html:7
msgid "Action"
msgstr "Действия"
#: templates/messages/inbox.html:19 templates/messages/outbox.html:16
#: templates/messages/trash.html:16 templates/messages/view.html:11
msgid "DATETIME_FORMAT"
msgstr "j. N Y, H:i"
#: templates/messages/inbox.html:20 templates/messages/outbox.html:17
msgid "delete"
msgstr "удалить"
#: templates/messages/inbox.html:27 templates/messages/outbox.html:24
#: templates/messages/trash.html:24
msgid "No messages."
msgstr "Сообщений нет."
#: templates/messages/new_message.html:1
#, python-format
msgid ""
"Hello %(recipient)s,\n"
"\n"
"you received a private message from %(sender)s with\n"
"the following contents:"
msgstr ""
"Hallo %(recipient)s,\n"
"\n"
"Вы получили сообщение от %(sender)s\n"
"со следующим содержанием:"
#: templates/messages/new_message.html:9
#, python-format
msgid "Sent from %(site_url)s"
msgstr "Отправлено %(site_url)s"
#: templates/messages/new_message.html:11 templates/messages/view.html:18
msgid "Reply"
msgstr "Ответить"
#: templates/messages/outbox.html:7
msgid "Sent"
msgstr "Отправлено"
#: templates/messages/trash.html:4
msgid "Deleted Messages"
msgstr "Удалённые сообщения"
#: templates/messages/trash.html:7 templates/messages/view.html:10
msgid "Date"
msgstr "Дата"
#: templates/messages/trash.html:17
msgid "undelete"
msgstr "восстановить"
#: templates/messages/trash.html:23
msgid ""
"Deleted Messages are removed from the trash at unregular intervals, don't "
"rely on this feature for long-time storage."
msgstr ""
"Удалённые сообщения очищаются из корзины через произвольные интервалы,не "
"используйте эту возможность как долгосрочное хранилище."
#: templates/messages/view.html:4
msgid "View Message"
msgstr "Просмотр сообщений"
#: templates/messages/view.html:20
msgid "Delete"
msgstr "Удалить"
#: templates/notification/messages_deleted/notice.html:1
#, python-format
msgid ""
"You have deleted the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "Вы удалили сообщение <a href=\"%(message_url)s\">%(message)s</a>."
#: templates/notification/messages_received/notice.html:2
#, python-format
msgid ""
"You have received the message <a href=\"%(message_url)s\">%(message)s</a> "
"from %(message_sender)s."
msgstr ""
"Вы получили сообщение <a href=\"%(message_url)s\">%(message)s</a> от %"
"(message_sender)s."
#: templates/notification/messages_recovered/notice.html:1
#, python-format
msgid ""
"You have recovered the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "Вы восстановили сообщение <a href=\"%(message_url)s\">%(message)s</a>."
#: templates/notification/messages_replied/notice.html:2
#, python-format
msgid ""
"You have replied to <a href=\"%(message_url)s\">%(message_parent_msg)s</a> "
"from %(message_recipient)s."
msgstr ""
"Вы ответили на <a href=\"%(message_url)s\">%(message_parent_msg)s</a> от %"
"(message_recipient)s."
#: templates/notification/messages_reply_received/notice.html:2
#, python-format
msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s."
msgstr "%(message_sender)s ответил на %(message_parent_msg)s."
#: templates/notification/messages_sent/notice.html:2
#, python-format
msgid ""
"You have sent the message <a href=\"%(message_url)s\">%(message)s</a> to %"
"(message_recipient)s."
msgstr ""
"Вы отправили сообщение <a href=\"%(message_url)s\">%(message)s</a> "
"получателям %(message_recipient)s."

@ -0,0 +1,299 @@
# django-messages in Simplify Chinese.
# django-messages 简体中文.
# Copyright (C) 2008
# This file is distributed under the same license as the django-messages package.
# Gene Wu <genewoo@gmail.com>, 2008.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-10-04 12:00-0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: GENE WU <genewoo@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: fields.py:39
#, python-format
msgid "The following usernames are incorrect: %(users)s"
msgstr "以下用户名不正确: %(users)s"
#: forms.py:23 models.py:53 templates\messages\outbox.html.py:7
#: templates\messages\view.html.py:12
msgid "Recipient"
msgstr "收信人"
#: forms.py:24 models.py:50 templates\messages\inbox.html.py:7
#: templates\messages\outbox.html.py:7 templates\messages\trash.html.py:7
#: templates\messages\view.html.py:6
msgid "Subject"
msgstr "主题"
#: forms.py:25 models.py:51
msgid "Body"
msgstr "消息主体"
#: management.py:10
msgid "Message Received"
msgstr "收到的消息"
#: management.py:10
msgid "you have received a message"
msgstr "你受到了一条消息"
#: management.py:11
msgid "Message Sent"
msgstr "消息已发出"
#: management.py:11
msgid "you have sent a message"
msgstr "你已发出了一条消息"
#: management.py:12
msgid "Message Replied"
msgstr "消息已回复"
#: management.py:12
msgid "you have replied to a message"
msgstr "你已回复了一条消息"
#: management.py:13
msgid "Reply Received"
msgstr "回复已收到"
#: management.py:13
msgid "you have received a reply to a message"
msgstr "你已收到了消息的一条回复"
#: management.py:14
msgid "Message Deleted"
msgstr "消息已删除"
#: management.py:14
msgid "you have deleted a message"
msgstr "你已删除了一条消息"
#: management.py:15
msgid "Message Recovered"
msgstr "消息已恢复"
#: management.py:15
msgid "you have undelete a message"
msgstr "你已恢复了一条消息"
#: models.py:52 templates\messages\inbox.html.py:7
#: templates\messages\trash.html.py:7 templates\messages\view.html.py:8
msgid "Sender"
msgstr "发信人"
#: models.py:54
msgid "Parent message"
msgstr "原消息"
#: models.py:55
msgid "sent at"
msgstr "发送于"
#: models.py:56
msgid "read at"
msgstr "阅读于"
#: models.py:57
msgid "replied at"
msgstr "回复于"
#: models.py:58
msgid "Sender deleted at"
msgstr "发信人删除于"
#: models.py:59
msgid "Recipient deleted at"
msgstr "收件人删除于"
#: models.py:89
msgid "Message"
msgstr "消息"
#: models.py:90
msgid "Messages"
msgstr "消息"
#: utils.py:29
#, python-format
msgid "New Message: %(subject)s"
msgstr "新消息: %(subject)s"
#: views.py:80 views.py:108
msgid "Message successfully sent."
msgstr "消息已成功发送。"
#: views.py:114
#, python-format
msgid ""
"%(sender)s wrote:\n"
"%(body)s"
msgstr ""
"%(sender)s 写道:\n"
"%(body)s"
#: views.py:118
#, python-format
msgid "Re: %(subject)s"
msgstr "回复: %(subject)s"
#: views.py:154
msgid "Message successfully deleted."
msgstr "消息已成功删除。"
#: views.py:181
msgid "Message successfully recovered."
msgstr "消息已成功恢复。"
#: templates\messages\base.html.py:8 templates\messages\inbox.html.py:4
#: templates\messages\new_message.html.py:10
msgid "Inbox"
msgstr "收件箱"
#: templates\messages\base.html.py:9 templates\messages\outbox.html.py:4
msgid "Sent Messages"
msgstr "发送的消息"
#: templates\messages\base.html.py:10
msgid "New Message"
msgstr "新消息"
#: templates\messages\base.html.py:11
msgid "Trash"
msgstr "回收站"
#: templates\messages\compose.html.py:4
msgid "Compose Message"
msgstr "撰写消息"
#: templates\messages\compose.html.py:9
msgid "Send"
msgstr "发送"
#: templates\messages\inbox.html.py:7
msgid "Received"
msgstr "受到于"
#: templates\messages\inbox.html.py:7 templates\messages\outbox.html.py:7
#: templates\messages\trash.html.py:7
msgid "Action"
msgstr "动作"
#: templates\messages\inbox.html.py:19
#: templates\messages\outbox.html.py:16
#: templates\messages\trash.html.py:16 templates\messages\view.html.py:11
msgid "DATETIME_FORMAT"
msgstr ""
#: templates\messages\inbox.html.py:20
#: templates\messages\outbox.html.py:17
msgid "delete"
msgstr "删除"
#: templates\messages\new_message.html.py:1
#, python-format
msgid ""
"Hello %(recipient)s,\n"
"\n"
"you received a private message from %(sender)s with\n"
"the following contents:"
msgstr ""
"%(recipient)s:\n"
"\n"
"你受到一条从%(sender)s发出的私人信息有\n"
"以下内容:"
#: templates\messages\new_message.html.py:9
#, python-format
msgid "Sent from %(site_url)s"
msgstr "消息已从%(site_url)s发出"
#: templates\messages\new_message.html.py:11
#: templates\messages\view.html.py:18
msgid "Reply"
msgstr "回复"
#: templates\messages\outbox.html.py:7
msgid "Sent"
msgstr "已发出"
#: templates\messages\trash.html.py:4
msgid "Deleted Messages"
msgstr "删除的消息"
#: templates\messages\trash.html.py:7 templates\messages\view.html.py:10
msgid "Date"
msgstr "日期"
#: templates\messages\trash.html.py:17
msgid "undelete"
msgstr "恢复"
#: templates\messages\trash.html.py:23
msgid ""
"Deleted Messages are removed from the trash at unregular intervals, don't "
"rely on this feature for long-time storage."
msgstr ""
"删除的消息将定期删除,不要依赖此功能作为长期存储。"
""
#: templates\messages\view.html.py:4
msgid "View Message"
msgstr "浏览消息"
#: templates\messages\view.html.py:20
msgid "Delete"
msgstr "删除"
#: templates\notification\messages_deleted\notice.html.py:1
#, python-format
msgid ""
"You have deleted the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "你已删除了消息<a href=\"%(message_url)s\">%(message)s</a>."
#: templates\notification\messages_received\notice.html.py:2
#, python-format
msgid ""
"You have received the message <a href=\"%(message_url)s\">%(message)s</a> "
"from %(message_sender)s."
msgstr ""
"你已收到%(message_sender)s的消息<a href=\"%(message_url)s\">%(message)s</a>。"
""
#: templates\notification\messages_recovered\notice.html.py:1
#, python-format
msgid ""
"You have recovered the message <a href=\"%(message_url)s\">%(message)s</a>."
msgstr "你已恢复了消息<a href=\"%(message_url)s\">%(message)s</a>."
#: templates\notification\messages_replied\notice.html.py:2
#, python-format
msgid ""
"You have replied to <a href=\"%(message_url)s\">%(message_parent_msg)s</a> "
"from %(message_recipient)s."
msgstr ""
"你已回复了%(message_recipient)s.发出的消息<a href=\"%(message_url)s\">%(message_parent_msg)s</a>"
""
#: templates\notification\messages_reply_received\notice.html.py:2
#, python-format
msgid "%(message_sender)s has sent you a reply to %(message_parent_msg)s."
msgstr ""
"%(message_sender)s已回复你发出的消息:%(message_parent_msg)s."
#: templates\notification\messages_sent\notice.html.py:2
#, python-format
msgid ""
"You have sent the message <a href=\"%(message_url)s\">%(message)s</a> to %"
"(message_recipient)s."
msgstr ""
"你已发送消息<a href=\"%(message_url)s\">%(message)s</a>到%"
"(message_recipient)s."

@ -0,0 +1,18 @@
from django.db.models import get_models, signals
from django.conf import settings
from django.utils.translation import ugettext_noop as _
if "notification" in settings.INSTALLED_APPS:
from notification import models as notification
def create_notice_types(app, created_models, verbosity, **kwargs):
notification.create_notice_type("messages_received", _("Message Received"), _("you have received a message"), default=2)
notification.create_notice_type("messages_sent", _("Message Sent"), _("you have sent a message"), default=1)
notification.create_notice_type("messages_replied", _("Message Replied"), _("you have replied to a message"), default=1)
notification.create_notice_type("messages_reply_received", _("Reply Received"), _("you have received a reply to a message"), default=2)
notification.create_notice_type("messages_deleted", _("Message Deleted"), _("you have deleted a message"), default=1)
notification.create_notice_type("messages_recovered", _("Message Recovered"), _("you have undeleted a message"), default=1)
signals.post_syncdb.connect(create_notice_types, sender=notification)
else:
print "Skipping creation of NoticeTypes as notification app not found"

@ -0,0 +1,109 @@
from django.db import models
from django.conf import settings
from django.db.models import signals
from django.utils.translation import ugettext_lazy as _
from django.utils import timezone
AUTH_USER_MODEL = getattr(settings, 'AUTH_USER_MODEL', 'auth.User')
from accounts.models import User
class MessageManager(models.Manager):
def senders(self, user):
users_ids = self.order_by('sender').filter(recipient=user).values_list('sender').distinct()[:10]
users_ids = [item[0] for item in users_ids]
return User.objects.filter(id__in=users_ids)
def inbox_for(self, user):
"""
Returns all messages that were received by the given user and are not
marked as deleted.
"""
return self.filter(
recipient=user,
recipient_deleted_at__isnull=True,
)
def outbox_for(self, user):
"""
Returns all messages that were sent by the given user and are not
marked as deleted.
"""
return self.filter(
sender=user,
sender_deleted_at__isnull=True,
)
def trash_for(self, user):
"""
Returns all messages that were either received or sent by the given
user and are marked as deleted.
"""
return self.filter(
recipient=user,
recipient_deleted_at__isnull=False,
) | self.filter(
sender=user,
sender_deleted_at__isnull=False,
)
class Message(models.Model):
"""
A private message from user to user
"""
subject = models.CharField(_("Subject"), max_length=120)
body = models.TextField(_("Body"))
sender = models.ForeignKey(AUTH_USER_MODEL, related_name='sent_messages', verbose_name=_("Sender"))
recipient = models.ForeignKey(AUTH_USER_MODEL, related_name='received_messages', null=True, blank=True, verbose_name=_("Recipient"))
parent_msg = models.ForeignKey('self', related_name='next_messages', null=True, blank=True, verbose_name=_("Parent message"))
sent_at = models.DateTimeField(_("sent at"), null=True, blank=True)
read_at = models.DateTimeField(_("read at"), null=True, blank=True)
replied_at = models.DateTimeField(_("replied at"), null=True, blank=True)
sender_deleted_at = models.DateTimeField(_("Sender deleted at"), null=True, blank=True)
recipient_deleted_at = models.DateTimeField(_("Recipient deleted at"), null=True, blank=True)
objects = MessageManager()
def new(self):
"""returns whether the recipient has read the message or not"""
if self.read_at is not None:
return False
return True
def replied(self):
"""returns whether the recipient has written a reply to this message"""
if self.replied_at is not None:
return True
return False
def __unicode__(self):
return self.subject
def get_absolute_url(self):
return ('messages_detail', [self.id])
get_absolute_url = models.permalink(get_absolute_url)
def save(self, **kwargs):
if not self.id:
self.sent_at = timezone.now()
super(Message, self).save(**kwargs)
class Meta:
ordering = ['-sent_at']
verbose_name = _("Message")
verbose_name_plural = _("Messages")
def inbox_count_for(user):
"""
returns the number of unread messages for the given user but does not
mark them seen
"""
return Message.objects.filter(recipient=user, read_at__isnull=True, recipient_deleted_at__isnull=True).count()
# fallback for email notification if django-notification could not be found
"""
if "notification" not in settings.INSTALLED_APPS:
from django_messages.utils import new_message_email
signals.post_save.connect(new_message_email, sender=Message)
"""

@ -0,0 +1,14 @@
{% extends "base.html" %}
{% load i18n %}
{% load url from future %}
{% block bodyclass %}about{% endblock %}
{% block content %}
{% endblock %}
{% block sidebar %}
<ul class="subnavilist">
<li><a href="{% url 'messages_inbox' %} ">&raquo;&nbsp;{% trans "Inbox" %}</a></li>
<li><a href="{% url 'messages_outbox' %} ">&raquo;&nbsp;{% trans "Sent Messages" %}</a></li>
<li><a href="{% url 'messages_compose' %} ">&raquo;&nbsp;{% trans "New Message" %}</a></li>
<li><a href="{% url 'messages_trash' %} ">&raquo;&nbsp;{% trans "Trash" %}</a></li>
</ul>
{% endblock %}

@ -0,0 +1,13 @@
{% extends "django_messages/base.html" %}
{% load i18n %}
{% block content %}
<h1>{% trans "Compose Message"%}</h1>
<form action="" method="post">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit" value="{% trans "Send" %} &raquo;"/>
</form>
{% endblock %}

@ -0,0 +1,31 @@
{% extends "django_messages/base.html" %}
{% load i18n %}
{% load url from future %}
{% block content %}
<h1>{% trans "Inbox" %}</h1>
{% if message_list %}
<table class="messages">
<thead>
<tr><th>{% trans "Sender" %}</th><th>{% trans "Subject" %}</th><th>{% trans "Received" %}</th><th>{% trans "Action" %}</th></tr>
</thead>
<tbody>
{% for message in message_list %}
<tr>
<td>{{ message.sender }}</td>
<td>
{% if message.new %}<strong>{% endif %}
{% if message.replied %}<em>{% endif %}
<a href="{{message.get_absolute_url }}">{{ message.subject }}</a>
{% if message.replied %}</em>{% endif %}
{% if message.new %}</strong>{% endif %}</td>
<td>{{ message.sent_at|date:_("DATETIME_FORMAT") }}</td>
<td><a href="{% url 'messages_delete' message.id %}">{% trans "delete" %}</a></td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>{% trans "No messages." %}</p>
{% endif %}
{% endblock %}

@ -0,0 +1,14 @@
{% load i18n %}
{% load url from future %}
{% blocktrans with recipient=message.recipient sender=message.sender %}Hello {{ recipient }},
you received a private message from {{ sender }} with
the following contents:{% endblocktrans %}
{{ message.body|safe }}
--
{% blocktrans %}Sent from {{ site_url }}{% endblocktrans %}
{% trans "Inbox" %}: {{ site_url }}{% url 'messages_inbox' %}
{% trans "Reply" %}: {{ site_url }}{% url 'messages_reply' message.pk %}

@ -0,0 +1,28 @@
{% extends "django_messages/base.html" %}
{% load i18n %}
{% load url from future %}
{% block content %}
<h1>{% trans "Sent Messages" %}</h1>
{% if message_list %}
<table class="messages">
<thead>
<tr><th>{% trans "Recipient" %}</th><th>{% trans "Subject" %}</th><th>{% trans "Sent" %}</th><th>{% trans "Action" %}</th></tr>
</thead>
<tbody>
{% for message in message_list %}
<tr>
<td>{{ message.recipient }}</td>
<td>
<a href="{{ message.get_absolute_url }}">{{ message.subject }}</a>
</td>
<td>{{ message.sent_at|date:_("DATETIME_FORMAT") }}</td>
<td><a href="{% url 'messages_delete' message.id %}?next={% url 'messages_outbox' %}">{% trans "delete" %}</a></td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>{% trans "No messages." %}</p>
{% endif %}
{% endblock %}

@ -0,0 +1,30 @@
{% extends "django_messages/base.html" %}
{% load i18n %}
{% load url from future %}
{% block content %}
<h1>{% trans "Deleted Messages" %}</h1>
{% if message_list %}
<table class="messages">
<thead>
<tr><th>{% trans "Sender" %}</th><th>{% trans "Subject" %}</th><th>{% trans "Date" %}</th><th>{% trans "Action" %}</th></tr>
</thead>
<tbody>
{% for message in message_list %}
<tr>
<td>{{ message.sender }}</td>
<td>
{{ message.subject }}
</td>
<td>{{ message.sent_at|date:_("DATETIME_FORMAT") }}</td>
<td><a href="{% url 'messages_undelete' message.id %}">{% trans "undelete" %}</a></td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>{% trans "No messages." %}</p>
{% endif %}
<br />
<p>{% trans "Deleted Messages are removed from the trash at unregular intervals, don't rely on this feature for long-time storage." %}</p>
{% endblock %}

@ -0,0 +1,23 @@
{% extends "django_messages/base.html" %}
{% load i18n %}
{% load url from future %}
{% block content %}
<h1>{% trans "View Message" %}</h1>
<dl class="message-headers">
<dt>{% trans "Subject" %}</dt>
<dd><strong>{{ message.subject }}</strong></dd>
<dt>{% trans "Sender" %}</dt>
<dd>{{ message.sender }}</dd>
<dt>{% trans "Date" %} </dt>
<dd>{{ message.sent_at|date:_("DATETIME_FORMAT")}}</dd>
<dt>{% trans "Recipient" %}</dt>
<dd>{{ message.recipient }}</dd>
</dl>
{{ message.body|linebreaksbr }}<br /><br />
{% ifequal message.recipient.pk user.pk %}
<a href="{% url 'messages_reply' message.id %}">{% trans "Reply" %}</a>
{% endifequal %}
<a href="{% url 'messages_delete' message.id %}">{% trans "Delete" %}</a>
{% endblock %}

@ -0,0 +1 @@
{% load i18n %}{% blocktrans %}You have deleted the message '{{ message }}'.{% endblocktrans %}

@ -0,0 +1 @@
{% load i18n %}{% blocktrans with message.get_absolute_url as message_url %}You have deleted the message <a href="{{ message_url }}">{{ message }}</a>.{% endblocktrans %}

@ -0,0 +1,7 @@
{% load i18n %}{% blocktrans with message.sender as message_sender and message.body|safe as message_body and message.get_absolute_url as message_url %}{{ message_sender }} has sent you a message:
{{ message }}
{{ message_body }}
http://{{ current_site }}{{ message_url }}{% endblocktrans %}

@ -0,0 +1,2 @@
{% load i18n %}
{% blocktrans with message.get_absolute_url as message_url and message.sender as message_sender %}You have received the message <a href="{{ message_url }}">{{ message }}</a> from {{ message_sender }}.{% endblocktrans %}

@ -0,0 +1 @@
{% load i18n %}{% blocktrans with message.sender as message_sender %}{{ notice }} by {{ message_sender }}{% endblocktrans %}

@ -0,0 +1 @@
{% load i18n %}{% blocktrans %}You have recovered the message '{{ message }}'.{% endblocktrans %}

@ -0,0 +1 @@
{% load i18n %}{% blocktrans with message.get_absolute_url as message_url %}You have recovered the message <a href="{{ message_url }}">{{ message }}</a>.{% endblocktrans %}

@ -0,0 +1 @@
{% load i18n %}{% blocktrans with message.parent_msg as message_parent_msg and message.recipient as message_recipient %}You have replied to '{{ message_parent_msg }}' from {{ message_recipient }}.{% endblocktrans %}

@ -0,0 +1,2 @@
{% load i18n %}
{% blocktrans with message.parent_msg.get_absolute_url as message_url and message.parent_msg as message_parent_msg and message.recipient as message_recipient %}You have replied to <a href="{{ message_url }}">{{ message_parent_msg }}</a> from {{ message_recipient }}.{% endblocktrans %}

@ -0,0 +1,7 @@
{% load i18n %}{% blocktrans with message.sender as message_sender and message.parent_msg as message_parent_msg and message.body|safe as message_body and message.get_absolute_url as message_url %}{{ message_sender }} replied to '{{ message_parent_msg }}':
{{ message }}
{{ message_body }}
http://{{ current_site }}{{ message_url }}{% endblocktrans %}

@ -0,0 +1,2 @@
{% load i18n %}
{% blocktrans with message.get_absolute_url as message_url and message.sender as message_sender and message.parent_msg as message_parent_msg %}{{ message_sender }} has sent you a reply to {{ message_parent_msg }}.{% endblocktrans %}

@ -0,0 +1 @@
{% load i18n %}{% blocktrans with message.sender as message_sender %}{{ notice }} by {{ message_sender }}{% endblocktrans %}

@ -0,0 +1 @@
{% load i18n %}{% blocktrans with message.recipient as message_recipient %}You have sent the message '{{ message }}' to {{ message_recipient }}.{% endblocktrans %}

@ -0,0 +1,2 @@
{% load i18n %}
{% blocktrans with message.get_absolute_url as message_url and message.recipient as message_recipient %}You have sent the message <a href="{{ message_url }}">{{ message }}</a> to {{ message_recipient }}.{% endblocktrans %}

@ -0,0 +1,45 @@
from django.template import Library, Node, TemplateSyntaxError
class InboxOutput(Node):
def __init__(self, varname=None):
self.varname = varname
def render(self, context):
try:
user = context['user']
count = user.received_messages.filter(read_at__isnull=True, recipient_deleted_at__isnull=True).count()
except (KeyError, AttributeError):
count = ''
if self.varname is not None:
context[self.varname] = count
return ""
else:
return "%s" % (count)
def do_print_inbox_count(parser, token):
"""
A templatetag to show the unread-count for a logged in user.
Returns the number of unread messages in the user's inbox.
Usage::
{% load inbox %}
{% inbox_count %}
{# or assign the value to a variable: #}
{% inbox_count as my_var %}
{{ my_var }}
"""
bits = token.contents.split()
if len(bits) > 1:
if len(bits) != 3:
raise TemplateSyntaxError, "inbox_count tag takes either no arguments or exactly two arguments"
if bits[1] != 'as':
raise TemplateSyntaxError, "first argument to inbox_count tag must be 'as'"
return InboxOutput(bits[2])
else:
return InboxOutput()
register = Library()
register.tag('inbox_count', do_print_inbox_count)

@ -0,0 +1,145 @@
from django.test import TestCase
from django.test.client import Client
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.utils import timezone
from django_messages.models import Message
from django_messages.utils import format_subject, format_quote
class SendTestCase(TestCase):
def setUp(self):
self.user1 = User.objects.create_user('user1', 'user1@example.com', '123456')
self.user2 = User.objects.create_user('user2', 'user2@example.com', '123456')
self.msg1 = Message(sender=self.user1, recipient=self.user2, subject='Subject Text', body='Body Text')
self.msg1.save()
def testBasic(self):
self.assertEquals(self.msg1.sender, self.user1)
self.assertEquals(self.msg1.recipient, self.user2)
self.assertEquals(self.msg1.subject, 'Subject Text')
self.assertEquals(self.msg1.body, 'Body Text')
self.assertEquals(self.user1.sent_messages.count(), 1)
self.assertEquals(self.user1.received_messages.count(), 0)
self.assertEquals(self.user2.received_messages.count(), 1)
self.assertEquals(self.user2.sent_messages.count(), 0)
class DeleteTestCase(TestCase):
def setUp(self):
self.user1 = User.objects.create_user('user3', 'user3@example.com', '123456')
self.user2 = User.objects.create_user('user4', 'user4@example.com', '123456')
self.msg1 = Message(sender=self.user1, recipient=self.user2, subject='Subject Text 1', body='Body Text 1')
self.msg2 = Message(sender=self.user1, recipient=self.user2, subject='Subject Text 2', body='Body Text 2')
self.msg1.sender_deleted_at = timezone.now()
self.msg2.recipient_deleted_at = timezone.now()
self.msg1.save()
self.msg2.save()
def testBasic(self):
self.assertEquals(Message.objects.outbox_for(self.user1).count(), 1)
self.assertEquals(Message.objects.outbox_for(self.user1)[0].subject, 'Subject Text 2')
self.assertEquals(Message.objects.inbox_for(self.user2).count(),1)
self.assertEquals(Message.objects.inbox_for(self.user2)[0].subject, 'Subject Text 1')
#undelete
self.msg1.sender_deleted_at = None
self.msg2.recipient_deleted_at = None
self.msg1.save()
self.msg2.save()
self.assertEquals(Message.objects.outbox_for(self.user1).count(), 2)
self.assertEquals(Message.objects.inbox_for(self.user2).count(),2)
class IntegrationTestCase(TestCase):
"""
Test the app from a user perpective using Django's Test-Client.
"""
T_USER_DATA = [{'username': 'user_1', 'password': '123456',
'email': 'user_1@example.com'},
{'username': 'user_2', 'password': '123456',
'email': 'user_2@example.com'},]
T_MESSAGE_DATA = [{'subject': 'Test Subject 1',
'body': 'Lorem ipsum\ndolor sit amet\n\nconsectur.'}]
def setUp(self):
""" create 2 users and a test-client logged in as user_1 """
self.user_1 = User.objects.create_user(**self.T_USER_DATA[0])
self.user_2 = User.objects.create_user(**self.T_USER_DATA[1])
self.c = Client()
self.c.login(username=self.T_USER_DATA[0]['username'],
password=self.T_USER_DATA[0]['password'])
def testInboxEmpty(self):
""" request the empty inbox """
response = self.c.get(reverse('messages_inbox'))
self.assertEquals(response.status_code, 200)
self.assertEquals(response.templates[0].name, 'django_messages/inbox.html')
self.assertEquals(len(response.context['message_list']), 0)
def testOutboxEmpty(self):
""" request the empty outbox """
response = self.c.get(reverse('messages_outbox'))
self.assertEquals(response.status_code, 200)
self.assertEquals(response.templates[0].name, 'django_messages/outbox.html')
self.assertEquals(len(response.context['message_list']), 0)
def testTrashEmpty(self):
""" request the empty trash """
response = self.c.get(reverse('messages_trash'))
self.assertEquals(response.status_code, 200)
self.assertEquals(response.templates[0].name, 'django_messages/trash.html')
self.assertEquals(len(response.context['message_list']), 0)
def testCompose(self):
""" compose a message step by step """
response = self.c.get(reverse('messages_compose'))
self.assertEquals(response.status_code, 200)
self.assertEquals(response.templates[0].name, 'django_messages/compose.html')
response = self.c.post(reverse('messages_compose'),
{'recipient': self.T_USER_DATA[1]['username'],
'subject': self.T_MESSAGE_DATA[0]['subject'],
'body': self.T_MESSAGE_DATA[0]['body']})
# successfull sending should redirect to inbox
self.assertEquals(response.status_code, 302)
self.assertEquals(response['Location'], "http://testserver%s"%reverse('messages_inbox'))
# make sure the message exists in the outbox after sending
response = self.c.get(reverse('messages_outbox'))
self.assertEquals(len(response.context['message_list']), 1)
def testReply(self):
""" test that user_2 can reply """
# create a message for this test
Message.objects.create(sender=self.user_1,
recipient=self.user_2,
subject=self.T_MESSAGE_DATA[0]['subject'],
body=self.T_MESSAGE_DATA[0]['body'])
# log the user_2 in and check the inbox
self.c.login(username=self.T_USER_DATA[1]['username'],
password=self.T_USER_DATA[1]['password'])
response = self.c.get(reverse('messages_inbox'))
self.assertEquals(response.status_code, 200)
self.assertEquals(response.templates[0].name, 'django_messages/inbox.html')
self.assertEquals(len(response.context['message_list']), 1)
pk = getattr(response.context['message_list'][0], 'pk')
# reply to the first message
response = self.c.get(reverse('messages_reply',
kwargs={'message_id':pk}))
self.assertEquals(response.status_code, 200)
self.assertEquals(response.templates[0].name, 'django_messages/compose.html')
self.assertEquals(response.context['form'].initial['body'],
format_quote(self.user_1, self.T_MESSAGE_DATA[0]['body']))
self.assertEqual(response.context['form'].initial['subject'],
u"Re: %(subject)s"%{'subject': self.T_MESSAGE_DATA[0]['subject']})
class FormatTestCase(TestCase):
""" some tests for helper functions """
def testSubject(self):
""" test that reply counting works as expected """
self.assertEquals(format_subject(u"foo bar"), u"Re: foo bar")
self.assertEquals(format_subject(u"Re: foo bar"), u"Re[2]: foo bar")
self.assertEquals(format_subject(u"Re[2]: foo bar"), u"Re[3]: foo bar")
self.assertEquals(format_subject(u"Re[10]: foo bar"), u"Re[11]: foo bar")

@ -0,0 +1,17 @@
from django.conf.urls import patterns, url
from django.views.generic import RedirectView
from django_messages.views import *
urlpatterns = patterns('',
url(r'^$', RedirectView.as_view(url='inbox/'), name='messages_redirect'),
url(r'^inbox/$', inbox, name='messages_inbox'),
url(r'^outbox/$', outbox, name='messages_outbox'),
url(r'^compose/$', compose, name='messages_compose'),
url(r'^compose/(?P<recipient>[\w.@+-]+)/$', compose, name='messages_compose_to'),
url(r'^reply/(?P<message_id>[\d]+)/$', reply, name='messages_reply'),
url(r'^view/(?P<message_id>[\d]+)/$', view, name='messages_detail'),
url(r'^delete/(?P<message_id>[\d]+)/$', delete, name='messages_delete'),
url(r'^undelete/(?P<message_id>[\d]+)/$', undelete, name='messages_undelete'),
url(r'^trash/$', trash, name='messages_trash'),
)

@ -0,0 +1,103 @@
import re
import django
from django.utils.text import wrap
from django.utils.translation import ugettext, ugettext_lazy as _
from django.contrib.sites.models import Site
from django.template.loader import render_to_string
from django.conf import settings
# favour django-mailer but fall back to django.core.mail
if "mailer" in settings.INSTALLED_APPS:
from mailer import send_mail
else:
from django.core.mail import send_mail
def format_quote(sender, body):
"""
Wraps text at 55 chars and prepends each
line with `> `.
Used for quoting messages in replies.
"""
lines = wrap(body, 55).split('\n')
for i, line in enumerate(lines):
lines[i] = "> %s" % line
quote = '\n'.join(lines)
return ugettext(u"%(sender)s wrote:\n%(body)s") % {
'sender': sender,
'body': quote
}
def format_subject(subject):
"""
Prepends 'Re:' to the subject. To avoid multiple 'Re:'s
a counter is added.
NOTE: Currently unused. First step to fix Issue #48.
FIXME: Any hints how to make this i18n aware are very welcome.
"""
subject_prefix_re = r'^Re\[(\d*)\]:\ '
m = re.match(subject_prefix_re, subject, re.U)
prefix = u""
if subject.startswith('Re: '):
prefix = u"[2]"
subject = subject[4:]
elif m is not None:
try:
num = int(m.group(1))
prefix = u"[%d]" % (num+1)
subject = subject[6+len(str(num)):]
except:
# if anything fails here, fall back to the old mechanism
pass
return ugettext(u"Re%(prefix)s: %(subject)s") % {
'subject': subject,
'prefix': prefix
}
def new_message_email(sender, instance, signal,
subject_prefix=_(u'New Message: %(subject)s'),
template_name="django_messages/new_message.html",
default_protocol=None,
*args, **kwargs):
"""
This function sends an email and is called via Django's signal framework.
Optional arguments:
``template_name``: the template to use
``subject_prefix``: prefix for the email subject.
``default_protocol``: default protocol in site URL passed to template
"""
if default_protocol is None:
default_protocol = getattr(settings, 'DEFAULT_HTTP_PROTOCOL', 'http')
if 'created' in kwargs and kwargs['created']:
try:
current_domain = Site.objects.get_current().domain
subject = subject_prefix % {'subject': instance.subject}
message = render_to_string(template_name, {
'site_url': '%s://%s' % (default_protocol, current_domain),
'message': instance,
})
if instance.recipient.email != "":
send_mail(subject, message, settings.DEFAULT_FROM_EMAIL,
[instance.recipient.email,])
except Exception, e:
#print e
pass #fail silently
def get_user_model():
if django.VERSION[:2] >= (1, 5):
from django.contrib.auth import get_user_model
return get_user_model()
else:
from django.contrib.auth.models import User
return User
def get_username_field():
if django.VERSION[:2] >= (1, 5):
return get_user_model().USERNAME_FIELD
else:
return 'username'

@ -0,0 +1,211 @@
from django.http import Http404, HttpResponseRedirect
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.utils.translation import ugettext as _
from django.utils import timezone
from django.core.urlresolvers import reverse
from django.conf import settings
from django_messages.models import Message
from django_messages.forms import ComposeForm
from django_messages.utils import format_quote, get_user_model, get_username_field
User = get_user_model()
if "notification" in settings.INSTALLED_APPS:
from notification import models as notification
else:
notification = None
def inbox(request, template_name='django_messages/inbox.html'):
"""
Displays a list of received messages for the current user.
Optional Arguments:
``template_name``: name of the template to use.
"""
message_list = Message.objects.inbox_for(request.user)
return render_to_response(template_name, {
'message_list': message_list,
}, context_instance=RequestContext(request))
inbox = login_required(inbox)
def outbox(request, template_name='django_messages/outbox.html'):
"""
Displays a list of sent messages by the current user.
Optional arguments:
``template_name``: name of the template to use.
"""
message_list = Message.objects.outbox_for(request.user)
return render_to_response(template_name, {
'message_list': message_list,
}, context_instance=RequestContext(request))
outbox = login_required(outbox)
def trash(request, template_name='django_messages/trash.html'):
"""
Displays a list of deleted messages.
Optional arguments:
``template_name``: name of the template to use
Hint: A Cron-Job could periodicly clean up old messages, which are deleted
by sender and recipient.
"""
message_list = Message.objects.trash_for(request.user)
return render_to_response(template_name, {
'message_list': message_list,
}, context_instance=RequestContext(request))
trash = login_required(trash)
def compose(request, recipient=None, form_class=ComposeForm,
template_name='django_messages/compose.html', success_url=None, recipient_filter=None):
"""
Displays and handles the ``form_class`` form to compose new messages.
Required Arguments: None
Optional Arguments:
``recipient``: username of a `django.contrib.auth` User, who should
receive the message, optionally multiple usernames
could be separated by a '+'
``form_class``: the form-class to use
``template_name``: the template to use
``success_url``: where to redirect after successfull submission
"""
if request.method == "POST":
sender = request.user
form = form_class(request.POST, recipient_filter=recipient_filter)
if form.is_valid():
form.save(sender=request.user)
messages.info(request, _(u"Message successfully sent."))
if success_url is None:
success_url = reverse('messages_inbox')
if 'next' in request.GET:
success_url = request.GET['next']
return HttpResponseRedirect(success_url)
else:
form = form_class()
if recipient is not None:
recipients = [u for u in User.objects.filter(**{'%s__in' % get_username_field(): [r.strip() for r in recipient.split('+')]})]
form.fields['recipient'].initial = recipients
return render_to_response(template_name, {
'form': form,
}, context_instance=RequestContext(request))
compose = login_required(compose)
def reply(request, message_id, form_class=ComposeForm,
template_name='django_messages/compose.html', success_url=None,
recipient_filter=None, quote_helper=format_quote):
"""
Prepares the ``form_class`` form for writing a reply to a given message
(specified via ``message_id``). Uses the ``format_quote`` helper from
``messages.utils`` to pre-format the quote. To change the quote format
assign a different ``quote_helper`` kwarg in your url-conf.
"""
parent = get_object_or_404(Message, id=message_id)
if parent.sender != request.user and parent.recipient != request.user:
raise Http404
if request.method == "POST":
sender = request.user
form = form_class(request.POST, recipient_filter=recipient_filter)
if form.is_valid():
form.save(sender=request.user, parent_msg=parent)
messages.info(request, _(u"Message successfully sent."))
if success_url is None:
success_url = reverse('messages_inbox')
return HttpResponseRedirect(success_url)
else:
form = form_class(initial={
'body': quote_helper(parent.sender, parent.body),
'subject': _(u"Re: %(subject)s") % {'subject': parent.subject},
'recipient': [parent.sender,]
})
return render_to_response(template_name, {
'form': form,
}, context_instance=RequestContext(request))
reply = login_required(reply)
def delete(request, message_id, success_url=None):
"""
Marks a message as deleted by sender or recipient. The message is not
really removed from the database, because two users must delete a message
before it's save to remove it completely.
A cron-job should prune the database and remove old messages which are
deleted by both users.
As a side effect, this makes it easy to implement a trash with undelete.
You can pass ?next=/foo/bar/ via the url to redirect the user to a different
page (e.g. `/foo/bar/`) than ``success_url`` after deletion of the message.
"""
user = request.user
now = timezone.now()
message = get_object_or_404(Message, id=message_id)
deleted = False
if success_url is None:
success_url = reverse('messages_inbox')
if 'next' in request.GET:
success_url = request.GET['next']
if message.sender == user:
message.sender_deleted_at = now
deleted = True
if message.recipient == user:
message.recipient_deleted_at = now
deleted = True
if deleted:
message.save()
messages.info(request, _(u"Message successfully deleted."))
if notification:
notification.send([user], "messages_deleted", {'message': message,})
return HttpResponseRedirect(success_url)
raise Http404
delete = login_required(delete)
def undelete(request, message_id, success_url=None):
"""
Recovers a message from trash. This is achieved by removing the
``(sender|recipient)_deleted_at`` from the model.
"""
user = request.user
message = get_object_or_404(Message, id=message_id)
undeleted = False
if success_url is None:
success_url = reverse('messages_inbox')
if 'next' in request.GET:
success_url = request.GET['next']
if message.sender == user:
message.sender_deleted_at = None
undeleted = True
if message.recipient == user:
message.recipient_deleted_at = None
undeleted = True
if undeleted:
message.save()
messages.info(request, _(u"Message successfully recovered."))
if notification:
notification.send([user], "messages_recovered", {'message': message,})
return HttpResponseRedirect(success_url)
raise Http404
undelete = login_required(undelete)
def view(request, message_id, template_name='django_messages/view.html'):
"""
Shows a single message.``message_id`` argument is required.
The user is only allowed to see the message, if he is either
the sender or the recipient. If the user is not allowed a 404
is raised.
If the user is the recipient and the message is unread
``read_at`` is set to the current datetime.
"""
user = request.user
now = timezone.now()
message = get_object_or_404(Message, id=message_id)
if (message.sender != user) and (message.recipient != user):
raise Http404
if message.read_at is None and message.recipient == user:
message.read_at = now
message.save()
return render_to_response(template_name, {
'message': message,
}, context_instance=RequestContext(request))
view = login_required(view)

@ -165,9 +165,11 @@ def exposition_change(request, url):
'data_begin':exposition.data_begin, 'data_end':exposition.data_end, 'periodic':exposition.periodic,
'min_area':exposition.min_area, 'currency':exposition.currency, 'tax':exposition.tax,
'price_day':exposition.price_day, 'price_all':exposition.price_all, 'price_catalog':exposition.price_catalog,
'price_day_bar':exposition.price_day_bar, 'price_all_bar':exposition.price_all_bar,
'min_closed_area':exposition.min_closed_area, 'max_closed_area':exposition.max_closed_area,
'min_closed_equipped_area':exposition.min_closed_equipped_area,
'max_closed_equipped_area':exposition.max_closed_equipped_area,
'min_stand_size':exposition.min_stand_size, 'application_deadline':exposition.application_deadline,
'min_open_area':exposition.min_open_area, 'max_open_area':exposition.max_open_area,
'registration_payment':exposition.registration_payment, 'exposition_id':exposition.id,
'expohit': exposition.expohit, 'discount': exposition.discount,
@ -203,8 +205,9 @@ def exposition_change(request, url):
data['descriptions_%s' % code] = obj.descriptions
# initial form
form = ExpositionCreateForm(initial=data)
form.fields['city'].widget.attrs['data-init-text'] = exposition.city.name
# set choices filled by ajax
form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=data['country'])]
#form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=data['country'])]
form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.filter(theme__in=data['theme'])]
# get existing statistic
statistic = Statistic.objects.filter(exposition=getattr(exposition, 'id'))

@ -49,7 +49,7 @@ class ExpositionCreateForm(forms.Form):
place = forms.ModelChoiceField(label=u'Место проведения', queryset=PlaceExposition.objects.all(),
empty_label='', required=False)
#creates select input with empty choices cause it will be filled with ajax
city = forms.ChoiceField(label=u'Город', choices=[('','')])
city = forms.CharField(label=u'Город', widget=forms.HiddenInput())
tag = forms.MultipleChoiceField(label=u'Теги', required=False)
periodic = forms.ChoiceField(label=u'Периодичность', choices=PERIODIC, required=False)
@ -65,8 +65,13 @@ class ExpositionCreateForm(forms.Form):
widget=forms.CheckboxSelectMultiple())
#
currency = forms.ChoiceField(label=u'Валюта', choices=currencies, required=False)
application_deadline = forms.DateField(label=u'Срок подачи стэнда', required=False)
min_stand_size = forms.CharField(label=u'Минимальный размер стэнда', required=False)
price_day = forms.CharField(label=u'Цена за 1 день', required=False)
price_all = forms.CharField(label=u'Цена за все дни', required=False)
price_day_bar = forms.CharField(label=u'Цена на стойке 1 день', required=False)
price_all_bar = forms.CharField(label=u'Цена на стойке все дни', required=False)
price_catalog = forms.CharField(label=u'Цена за каталог', required=False)
tax = forms.BooleanField(label=u'Налог включен', initial=True, required=False)
min_closed_area = forms.CharField(label=u'Минимальная цена закрытой НЕ оборудованной площади', required=False)
@ -85,7 +90,6 @@ class ExpositionCreateForm(forms.Form):
#
exposition_id = forms.CharField(required=False, widget=forms.HiddenInput())
def __init__(self, *args, **kwargs):
"""
create dynamical translated fields fields
@ -149,10 +153,15 @@ class ExpositionCreateForm(forms.Form):
exposition.members = data['members']
exposition.visitors = data['visitors']
exposition.min_area = data['min_area']
#
exposition.currency = data['currency']
exposition.application_deadline = data['application_deadline']
exposition.min_stand_size = data['min_stand_size']
exposition.price_day = data['price_day']
exposition.price_all = data['price_all']
exposition.price_all_bar = data['price_all_bar']
exposition.price_day_bar = data['price_day_bar']
exposition.price_catalog = data['price_catalog']
exposition.tax = data['tax']
exposition.min_closed_area = data['min_closed_area']
@ -264,6 +273,30 @@ class ExpositionCreateForm(forms.Form):
price_all = cleaned_data.get('price_all').strip()
return is_positive_integer(price_all)
def clean_price_day_bar(self):
"""
checking price_day_bar
"""
cleaned_data = super(ExpositionCreateForm, self).clean()
price_day_bar = cleaned_data.get('price_day_bar').strip()
return is_positive_integer(price_day_bar)
def clean_price_all_bar(self):
"""
checking price_all_bar
"""
cleaned_data = super(ExpositionCreateForm, self).clean()
price_all_bar = cleaned_data.get('price_all_bar').strip()
return is_positive_integer(price_all_bar)
def clean_min_stand_size(self):
"""
checking min_stand_size
"""
cleaned_data = super(ExpositionCreateForm, self).clean()
min_stand_size = cleaned_data.get('min_stand_size').strip()
return is_positive_integer(min_stand_size)
def clean_price_catalog(self):
"""
checking price_catalog

@ -71,8 +71,15 @@ class Exposition(TranslatableModel, EventMixin):
min_area = models.PositiveIntegerField(verbose_name='Минимальная площадь', blank=True, null=True)
#
currency = EnumField(values=CURRENCY, default='RUB')
application_deadline = models.DateField(verbose_name='Срок подачи заявки', null=True)
min_stand_size = models.PositiveIntegerField(verbose_name='Минимальный размер стэнда', blank=True, null=True)
price_day = models.PositiveIntegerField(verbose_name='Стоимость билета 1 день', blank=True, null=True)
price_all = models.PositiveIntegerField(verbose_name='Стоимость билета все дни', blank=True, null=True)
price_day_bar = models.PositiveIntegerField(verbose_name='Стоимость на стойке 1 день', blank=True, null=True)
price_all_bar = models.PositiveIntegerField(verbose_name='Стоимость на стойке все дни', blank=True, null=True)
price_catalog = models.PositiveIntegerField(verbose_name='Стоимость каталога', blank=True, null=True)
tax = models.BooleanField(verbose_name='Налог', default=1)
@ -90,12 +97,11 @@ class Exposition(TranslatableModel, EventMixin):
blank=True, null=True)
registration_payment = models.PositiveIntegerField(verbose_name='Регистрационный взнос', blank=True, null=True)
discount = models.PositiveIntegerField(verbose_name='Скидка', blank=True, null=True)
expohit = models.BooleanField(verbose_name='Expohit', default=0)
#administrator can cancel exposition
# administrator can cancel exposition
canceled_by_administrator = models.BooleanField(default=0)
#can publish not immediately
is_published = models.BooleanField(default=0)
@ -123,8 +129,9 @@ class Exposition(TranslatableModel, EventMixin):
# field saves information about creating and changing model
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
main_page = models.PositiveIntegerField(default=0, db_index=True)
views = models.PositiveIntegerField(null=True, default=0)
views = models.PositiveIntegerField(default=0)
def __unicode__(self):

@ -1,10 +1,16 @@
# -*- coding: utf-8 -*-
from django.conf.urls import patterns, include, url
from views import ExpositionView, ExpositionVisitors, ExpositionMembers
from views import ExpositionView, ExpositionVisitors, ExpositionMembers, ExpositionStatistic, ExpositionPrice,\
ExpositionProgramme
urlpatterns = patterns('',
url(r'expositions/(?P<params>.*)/(?P<page>\d+)/$', ExpositionView.as_view()),
url(r'expositions/(?P<page>\d+)/$', ExpositionView.as_view()),
#
url(r'expositions/(?P<params>.*)/statistic/$', ExpositionStatistic.as_view()),
url(r'expositions/(?P<params>.*)/price/$', ExpositionPrice.as_view()),
url(r'expositions/(?P<params>.*)/program/$', ExpositionProgramme.as_view()),
#
url(r'expositions/(?P<params>.*)/visitors/$', ExpositionVisitors.as_view()),
url(r'expositions/(?P<params>.*)/members/$', ExpositionMembers.as_view()),
url(r'expositions/(?P<params>.*)/$', ExpositionView.as_view()),

@ -7,8 +7,8 @@ from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
#models
from models import Exposition
from accounts.models import User
from functions.custom_views import ExpoListView, ExpoMixin
from django.views.generic import ListView
from functions.custom_views import ExpoListView, ExpoMixin, EventDetail
from django.views.generic import ListView, DetailView
#
import json
from django.utils.translation import ugettext as _
@ -51,9 +51,50 @@ class ExpositionMembers(ExpoListView):
self.params = params
return exp.company.all()
class ExpositionStatistic(ExpoListView):
model = Exposition
template_name = 'exposition_statistic.html'
def get_queryset(self):
params = self.get_params()
for param in params:
if param.get('type') == 'event':
exp = Exposition.objects.filter(url=param.get('url'))
param['name'] = exp[0].name
#query = exp.users
self.single_page = True
params.append({'type':'statistic', 'name':_(u'Статистика')})
self.params = params
return exp
class ExpositionProgramme(ExpoListView):
model = Exposition
template_name = 'exposition_programm.html'
def get_queryset(self):
params = self.get_params()
for param in params:
if param.get('type') == 'event':
exp = Exposition.objects.filter(url=param.get('url'))
param['name'] = exp[0].name
#query = exp.users
self.single_page = True
params.append({'type':'programme', 'name':_(u'Программа')})
self.params = params
return exp
class ExpositionPrice(ExpoListView):
model = Exposition
template_name = 'exposition_price.html'
def get_queryset(self):
params = self.get_params()
for param in params:
if param.get('type') == 'event':
exp = Exposition.objects.filter(url=param.get('url'))
param['name'] = exp[0].name
#query = exp.users
self.single_page = True
params.append({'type':'price', 'name':_(u'Стоимость посещения и участия')})
self.params = params
return exp

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save