120
by Holger Rapp
Initital (unusable) version of wlmaps application |
1 |
#!/usr/bin/env python -tt
|
2 |
# encoding: utf-8
|
|
3 |
||
4 |
from django.db import models |
|
5 |
from django.contrib.auth.models import User |
|
6 |
from django.template.defaultfilters import slugify |
|
489.1.16
by franku
run through django1.111 deprecations |
7 |
from django.urls import reverse |
542.2.2
by franku
added signal receiver for deletion of map files |
8 |
from django.db.models.signals import pre_delete |
542.2.7
by kaputtnik
use a custom delete function instead of signals |
9 |
from django.conf import settings |
542.2.1
by franku
move minimap files |
10 |
|
120
by Holger Rapp
Initital (unusable) version of wlmaps application |
11 |
import datetime |
542.2.7
by kaputtnik
use a custom delete function instead of signals |
12 |
import os |
450.1.14
by franku
trys: excepts: ; some comments |
13 |
try: |
14 |
from notification import models as notification |
|
15 |
except ImportError: |
|
16 |
notification = None |
|
120
by Holger Rapp
Initital (unusable) version of wlmaps application |
17 |
|
18 |
||
19 |
class Map(models.Model): |
|
402.1.2
by franku
add_hint_to_map_views |
20 |
name = models.CharField(max_length=255, unique=True) |
120
by Holger Rapp
Initital (unusable) version of wlmaps application |
21 |
slug = models.SlugField(unique=True) |
402.1.2
by franku
add_hint_to_map_views |
22 |
author = models.CharField(max_length=255) |
23 |
w = models.PositiveIntegerField(verbose_name='Width') |
|
24 |
h = models.PositiveIntegerField(verbose_name='Height') |
|
25 |
nr_players = models.PositiveIntegerField(verbose_name='Max Players') |
|
26 |
||
27 |
descr = models.TextField(verbose_name='Description') |
|
482.1.1
by franku
changed admin site and allow blank model fields |
28 |
hint = models.TextField(verbose_name='Hint', blank=True) |
402.1.2
by franku
add_hint_to_map_views |
29 |
minimap = models.ImageField( |
418.1.2
by franku
correct wrong migration for wlmaps |
30 |
verbose_name='Minimap', upload_to='wlmaps/minimaps') |
402.1.2
by franku
add_hint_to_map_views |
31 |
file = models.FileField(verbose_name='Mapfile', |
418.1.2
by franku
correct wrong migration for wlmaps |
32 |
upload_to='wlmaps/maps') |
402.1.2
by franku
add_hint_to_map_views |
33 |
|
482.1.1
by franku
changed admin site and allow blank model fields |
34 |
world_name = models.CharField(max_length=50, blank=True) |
402.1.2
by franku
add_hint_to_map_views |
35 |
|
36 |
pub_date = models.DateTimeField(default=datetime.datetime.now) |
|
37 |
uploader_comment = models.TextField( |
|
38 |
verbose_name='Uploader comment', blank=True) |
|
120
by Holger Rapp
Initital (unusable) version of wlmaps application |
39 |
uploader = models.ForeignKey(User) |
402.1.2
by franku
add_hint_to_map_views |
40 |
nr_downloads = models.PositiveIntegerField( |
41 |
verbose_name='Download count', default=0) |
|
542.2.5
by franku
implemented new property need_widelands_version_after |
42 |
wl_version_after = models.PositiveIntegerField( |
43 |
verbose_name='WL version after', |
|
542.2.7
by kaputtnik
use a custom delete function instead of signals |
44 |
null=True, |
45 |
blank=True) |
|
157
by Holger Rapp
Backend for map voting is completed. 'Only' the UI is missing |
46 |
|
121
by Holger Rapp
Wlmaps application is now in a usuable state |
47 |
class Meta: |
370.1.4
by Matthias Horne
Small cleanups |
48 |
ordering = ('-pub_date',) |
121
by Holger Rapp
Wlmaps application is now in a usuable state |
49 |
get_latest_by = 'pub_date' |
173.2.2
by Holger Rapp
Added diff_match_patch from google, because they do not provide a setup.py |
50 |
|
402.1.2
by franku
add_hint_to_map_views |
51 |
def get_absolute_url(self): |
489.1.16
by franku
run through django1.111 deprecations |
52 |
return reverse('wlmaps_view', kwargs={'map_slug': self.slug}) |
120
by Holger Rapp
Initital (unusable) version of wlmaps application |
53 |
|
532.1.2
by franku
replaced renamed functions and __unicode__ with __str__ |
54 |
def __str__(self): |
532.1.1
by franku
converted to python 3.6 using 2to3 script |
55 |
return '%s by %s' % (self.name, self.author) |
325.1.9
by Shevonar
Maps modul reworked and adjusted to new style. |
56 |
|
57 |
def save(self, *args, **kwargs): |
|
58 |
if not self.slug: |
|
59 |
self.slug = slugify(self.name) |
|
60 |
||
461
by franku
added a query to examine a new map to prevend sending emails for map voting; also corrected a 404 on map vote |
61 |
# Check if this is a new map for sending notifications
|
62 |
is_new = False |
|
63 |
try: |
|
64 |
Map.objects.get(slug=self.slug) |
|
65 |
except Map.DoesNotExist: |
|
66 |
is_new = True |
|
67 |
||
325.1.9
by Shevonar
Maps modul reworked and adjusted to new style. |
68 |
map = super(Map, self).save(*args, **kwargs) |
459
by franku
Send notifications only if the map is newly saved, not when updating some fields, e.g. nr_downloads |
69 |
|
478.2.11
by franku
unified notice for new topics; maps: exclude uploader from notifications |
70 |
# Send notifications only on new maps, not when updating fields, e.g.
|
71 |
# nr_downloads
|
|
461
by franku
added a query to examine a new map to prevend sending emails for map voting; also corrected a 404 on map vote |
72 |
if notification and is_new: |
478.2.18
by franku
fixed a failure in wlmaps |
73 |
notification.send(notification.get_observers_for('maps_new_map', excl_user=self.uploader), 'maps_new_map', |
478.2.11
by franku
unified notice for new topics; maps: exclude uploader from notifications |
74 |
{'mapname': self.name, |
75 |
'url': self.get_absolute_url(), |
|
76 |
'user': self.uploader, |
|
77 |
'uploader_comment': self.uploader_comment |
|
78 |
},
|
|
520.1.1
by franku
add global constant NOTIFICATION_QUEUE_ALL |
79 |
)
|
450.1.14
by franku
trys: excepts: ; some comments |
80 |
|
478.2.11
by franku
unified notice for new topics; maps: exclude uploader from notifications |
81 |
return map |
542.2.2
by franku
added signal receiver for deletion of map files |
82 |
|
542.2.7
by kaputtnik
use a custom delete function instead of signals |
83 |
def delete(self, *args, **kwargs): |
84 |
"""Delete also corresponding map files."""
|
|
85 |
||
86 |
# For some reason this throws no error if a file didn't exist
|
|
87 |
self.minimap.delete() |
|
88 |
self.file.delete() |
|
89 |
super(Map, self).delete(*args, **kwargs) |