24 from tagging.fields import TagField |
24 from tagging.fields import TagField |
25 import pickle |
25 import pickle |
26 from django.db import connection |
26 from django.db import connection |
27 from datetime import datetime |
27 from datetime import datetime |
28 |
28 |
29 # default conf values |
|
30 DEFAULT_CONF = { |
|
31 'workspace_name' : 'Workspace', |
|
32 'site_url' : settings.SITE_URL, |
|
33 'email_from' : settings.DEFAULT_FROM_EMAIL, |
|
34 } |
|
35 |
|
36 from cm.role_models import change_role_model |
|
37 |
|
38 class ConfigurationManager(models.Manager): |
|
39 def set_workspace_name(self, workspace_name): |
|
40 if workspace_name: |
|
41 self.set_key('workspace_name', workspace_name) |
|
42 |
|
43 def get_key(self, key, default_value=None): |
|
44 try: |
|
45 return self.get(key=key).value |
|
46 except Configuration.DoesNotExist: |
|
47 return DEFAULT_CONF.get(key, default_value) |
|
48 |
|
49 def del_key(self, key): |
|
50 try: |
|
51 self.get(key=key).delete() |
|
52 except Configuration.DoesNotExist: |
|
53 return None |
|
54 |
|
55 def set_key(self, key, value): |
|
56 conf, created = self.get_or_create(key=key) |
|
57 if created or conf.value != value: |
|
58 conf.value = value |
|
59 conf.save() |
|
60 if key == 'workspace_role_model': |
|
61 change_role_model(value) |
|
62 |
|
63 def __getitem__(self, key): |
|
64 if not key.startswith('f_'): |
|
65 return self.get_key(key, None) |
|
66 else: |
|
67 return getattr(self,key)() |
|
68 |
|
69 def f_get_logo_url(self): |
|
70 key = self.get_key('workspace_logo_file_key', None) |
|
71 if key: |
|
72 attach = Attachment.objects.get(key=key) |
|
73 return attach.data.url |
|
74 else: |
|
75 return None |
|
76 |
|
77 import base64 |
|
78 |
|
79 class Configuration(models.Model): |
|
80 key = models.TextField(blank=False) # , unique=True cannot be added: creates error on mysql (?) |
|
81 raw_value = models.TextField(blank=False) |
|
82 |
|
83 def get_value(self): |
|
84 return pickle.loads(base64.b64decode(self.raw_value.encode('utf8'))) |
|
85 |
|
86 def set_value(self, value): |
|
87 self.raw_value = base64.b64encode(pickle.dumps(value, 0)).encode('utf8') |
|
88 |
|
89 value = property(get_value, set_value) |
|
90 |
|
91 objects = ConfigurationManager() |
|
92 |
|
93 def __unicode__(self): |
|
94 return '%s: %s' % (self.key, self.value) |
|
95 |
|
96 ApplicationConfiguration = Configuration.objects |
|
97 |
|
98 class TextManager(Manager): |
29 class TextManager(Manager): |
99 def create_text(self, title, format, content, note, name, email, tags, user=None, state='approved', **kwargs): |
30 def create_text(self, title, format, content, note, name, email, tags, user=None, state='approved', **kwargs): |
100 content = on_content_receive(content, format) |
31 content = on_content_receive(content, format) |
101 text = self.create(name=name, email=email, user=user, state=state) |
32 text = self.create(name=name, email=email, user=user, state=state) |
102 text_version = TextVersion.objects.create(title=title, format=format, content=content, text=text, note=note, name=name, email=email, tags=tags, user=user) |
33 text_version = TextVersion.objects.create(title=title, format=format, content=content, text=text, note=note, name=name, email=email, tags=tags, user=user) |
416 def remove_scope(self): |
347 def remove_scope(self): |
417 self.start_wrapper = self.end_wrapper = self.start_offset = self.end_offset = -1 |
348 self.start_wrapper = self.end_wrapper = self.start_offset = self.end_offset = -1 |
418 self.save() |
349 self.save() |
419 |
350 |
420 # http://docs.djangoproject.com/en/dev/topics/files/#topics-files |
351 # http://docs.djangoproject.com/en/dev/topics/files/#topics-files |
|
352 |
|
353 # default conf values |
|
354 DEFAULT_CONF = { |
|
355 'workspace_name' : 'Workspace', |
|
356 'site_url' : settings.SITE_URL, |
|
357 'email_from' : settings.DEFAULT_FROM_EMAIL, |
|
358 } |
|
359 |
|
360 from cm.role_models import change_role_model |
|
361 |
|
362 class ConfigurationManager(models.Manager): |
|
363 def set_workspace_name(self, workspace_name): |
|
364 if workspace_name: |
|
365 self.set_key('workspace_name', workspace_name) |
|
366 |
|
367 def get_key(self, key, default_value=None): |
|
368 try: |
|
369 return self.get(key=key).value |
|
370 except Configuration.DoesNotExist: |
|
371 return DEFAULT_CONF.get(key, default_value) |
|
372 |
|
373 def del_key(self, key): |
|
374 try: |
|
375 self.get(key=key).delete() |
|
376 except Configuration.DoesNotExist: |
|
377 return None |
|
378 |
|
379 def set_key(self, key, value): |
|
380 conf, created = self.get_or_create(key=key) |
|
381 if created or conf.value != value: |
|
382 conf.value = value |
|
383 conf.save() |
|
384 if key == 'workspace_role_model': |
|
385 change_role_model(value) |
|
386 |
|
387 def __getitem__(self, key): |
|
388 if not key.startswith('f_'): |
|
389 return self.get_key(key, None) |
|
390 else: |
|
391 return getattr(self,key)() |
|
392 |
|
393 def f_get_logo_url(self): |
|
394 key = self.get_key('workspace_logo_file_key', None) |
|
395 if key: |
|
396 attach = Attachment.objects.get(key=key) |
|
397 return attach.data.url |
|
398 else: |
|
399 return None |
|
400 |
|
401 import base64 |
|
402 |
|
403 class Configuration(models.Model): |
|
404 key = models.TextField(blank=False) # , unique=True cannot be added: creates error on mysql (?) |
|
405 raw_value = models.TextField(blank=False) |
|
406 |
|
407 def get_value(self): |
|
408 return pickle.loads(base64.b64decode(self.raw_value.encode('utf8'))) |
|
409 |
|
410 def set_value(self, value): |
|
411 self.raw_value = base64.b64encode(pickle.dumps(value, 0)).encode('utf8') |
|
412 |
|
413 value = property(get_value, set_value) |
|
414 |
|
415 objects = ConfigurationManager() |
|
416 |
|
417 def __unicode__(self): |
|
418 return '%s: %s' % (self.key, self.value) |
|
419 |
|
420 ApplicationConfiguration = Configuration.objects |
421 |
421 |
422 class AttachmentManager(KeyManager): |
422 class AttachmentManager(KeyManager): |
423 def create_attachment(self, text_version, filename, data): |
423 def create_attachment(self, text_version, filename, data): |
424 attach = self.create(text_version=text_version) |
424 attach = self.create(text_version=text_version) |
425 ff = ContentFile(data) |
425 ff = ContentFile(data) |