150 CHOICES_INPUT_FORMATS = getattr(settings, 'CHOICES_INPUT_FORMATS', CHOICES_INPUT_FORMATS_PANDOC) |
150 CHOICES_INPUT_FORMATS = getattr(settings, 'CHOICES_INPUT_FORMATS', CHOICES_INPUT_FORMATS_PANDOC) |
151 |
151 |
152 class TextVersionManager(KeyManager): |
152 class TextVersionManager(KeyManager): |
153 |
153 |
154 def duplicate(self, text_version, duplicate_comments=True): |
154 def duplicate(self, text_version, duplicate_comments=True): |
155 #import pdb;pdb.set_trace() |
|
156 old_comment_set = set(text_version.comment_set.all()) |
155 old_comment_set = set(text_version.comment_set.all()) |
157 text_version.id = None |
156 text_version.id = None |
158 |
157 |
159 # generate new key |
158 # generate new key |
160 text_version.key = self._gen_key() |
159 text_version.key = self._gen_key() |
197 |
196 |
198 objects = TextVersionManager() |
197 objects = TextVersionManager() |
199 |
198 |
200 def get_content(self, format='html'): |
199 def get_content(self, format='html'): |
201 return pandoc_convert(self.content, self.format, format) |
200 return pandoc_convert(self.content, self.format, format) |
202 # def _get_comments(self, user = None, filter_reply = 0): |
201 |
203 # """ |
|
204 # get comments viewable by this user (user = None or user = AnonymousUser => everyone) |
|
205 # filter_reply = 0: comments and replies |
|
206 # 1: comments |
|
207 # 2: replies |
|
208 # """ |
|
209 # from cm.security import has_perm_on_text # should stay here to avoid circular dependencies |
|
210 # |
|
211 # if has_perm(user, 'can_view_unapproved_comment', self.text): |
|
212 # comments = self.comment_set.all() |
|
213 # elif has_perm(user, 'can_view_approved_comment', self.text): |
|
214 # comments = self.comment_set.filter(visible=True) |
|
215 # elif has_perm(user, 'can_view_comment_own', self.text): |
|
216 # comments = self.comment_set.filter(user=user) |
|
217 # else: |
|
218 # return Comment.objects.none() # empty queryset |
|
219 # if filter_reply: |
|
220 # comments = comments.filter) |
|
221 # return comments |
|
222 # |
|
223 # def get_comments_as_json(self, user = None): |
|
224 # return simplejson.dumps(self._get_comments(user, filter_reply=0)) |
|
225 # |
|
226 # def get_comments_and_replies(self, user = None): |
|
227 # return (self.get_comments(user), |
|
228 # self.get_replies(user)) |
|
229 # |
|
230 def get_comments(self): |
202 def get_comments(self): |
231 "Warning: data access without security" |
203 "Warning: data access without security" |
232 return self.comment_set.filter(reply_to=None, deleted=False) |
204 return self.comment_set.filter(reply_to=None, deleted=False) |
233 |
205 |
234 def get_replies(self): |
206 def get_replies(self): |
243 if not keep_comments : |
215 if not keep_comments : |
244 self.comment_set.all().delete() |
216 self.comment_set.all().delete() |
245 elif self.content != new_content or new_format != self.format: |
217 elif self.content != new_content or new_format != self.format: |
246 comments = self.get_comments() ; |
218 comments = self.get_comments() ; |
247 tomodify_comments, toremove_comments = compute_new_comment_positions(self.content, self.format, new_content, new_format, comments) |
219 tomodify_comments, toremove_comments = compute_new_comment_positions(self.content, self.format, new_content, new_format, comments) |
248 #print "tomodify_comments" |
|
249 #print tomodify_comments |
|
250 #print "toremove_comments",len(toremove_comments) |
|
251 [comment.save(keep_dates=True) for comment in tomodify_comments] |
220 [comment.save(keep_dates=True) for comment in tomodify_comments] |
252 if cancel_modified_scopes : |
221 if cancel_modified_scopes : |
253 [comment.remove_scope() for comment in toremove_comments] |
222 [comment.remove_scope() for comment in toremove_comments] |
254 else : |
223 else : |
255 [comment.delete() for comment in toremove_comments] |
224 [comment.delete() for comment in toremove_comments] |
381 from cm.role_models import change_role_model |
350 from cm.role_models import change_role_model |
382 |
351 |
383 class ConfigurationManager(models.Manager): |
352 class ConfigurationManager(models.Manager): |
384 def set_workspace_name(self, workspace_name): |
353 def set_workspace_name(self, workspace_name): |
385 if workspace_name: |
354 if workspace_name: |
386 #self.set_key('workspace_name', _(u"%(workspace_name)s's workspace") %{'workspace_name':workspace_name}) |
|
387 self.set_key('workspace_name', workspace_name) |
355 self.set_key('workspace_name', workspace_name) |
388 |
356 |
389 def get_key(self, key, default_value=None): |
357 def get_key(self, key, default_value=None): |
390 try: |
358 try: |
391 return self.get(key=key).value |
359 return self.get(key=key).value |
545 """ |
513 """ |
546 'Static' application roles |
514 'Static' application roles |
547 """ |
515 """ |
548 name = models.CharField(ugettext_lazy('name'), max_length=50, unique=True) |
516 name = models.CharField(ugettext_lazy('name'), max_length=50, unique=True) |
549 description = models.TextField(ugettext_lazy('description')) |
517 description = models.TextField(ugettext_lazy('description')) |
550 #order = models.IntegerField(unique=True) |
|
551 permissions = models.ManyToManyField(Permission, related_name="roles") |
518 permissions = models.ManyToManyField(Permission, related_name="roles") |
552 |
519 |
553 global_scope = models.BooleanField('global scope', default=False) # applies to global scope only |
520 global_scope = models.BooleanField('global scope', default=False) # applies to global scope only |
554 anon = models.BooleanField('anonymous', default=False) # role possible for anonymous users? |
521 anon = models.BooleanField('anonymous', default=False) # role possible for anonymous users? |
555 |
522 |
700 |
667 |
701 send_mail(subject, message, ApplicationConfiguration['email_from'], [self.user.email]) |
668 send_mail(subject, message, ApplicationConfiguration['email_from'], [self.user.email]) |
702 |
669 |
703 from django.db.models import signals |
670 from django.db.models import signals |
704 |
671 |
705 #def create_profile(sender, **kwargs): |
|
706 # created = kwargs['created'] |
|
707 # if created: |
|
708 # user = kwargs['instance'] |
|
709 # UserProfile.objects.create(user = user) |
|
710 |
|
711 def delete_profile(sender, **kwargs): |
672 def delete_profile(sender, **kwargs): |
712 user_profile = kwargs['instance'] |
673 user_profile = kwargs['instance'] |
713 user = user_profile.user |
674 user = user_profile.user |
714 user.delete() |
675 user.delete() |
715 |
676 |
716 #signals.post_save.connect(create_profile, sender=User) |
|
717 signals.post_delete.connect(delete_profile, sender=UserProfile) |
677 signals.post_delete.connect(delete_profile, sender=UserProfile) |
718 |
678 |
719 class ActivityManager(models.Manager): |
679 class ActivityManager(models.Manager): |
720 pass |
680 pass |
721 |
681 |