def add_post(request): reply_to_id = request.POST['post_reply_id'] reply_to = None if not reply_to_id else get_object_or_404( Post.objects.select_related('author'), pk=reply_to_id) math_content_form = MathContentForm(request.POST) if math_content_form.is_valid(): content_type = get_object_or_404(ContentType, pk=request.POST['content_type_id']) try: object = content_type.get_object_for_this_type( pk=request.POST['object_id']) except: raise Http404('Object does not exist.') if hasattr(object, 'can_send_post'): if not object.can_send_post(request.user): return HttpResponseForbidden( "You are not allowed to send messages to this object!") object_author = getattr(object, 'author', None) object_author_id = None object_author_group = None if object_author: object_author_id = object_author.id try: object_author_group = Group.objects.get( name=object_author.username) except Group.DoesNotExist: pass # TODO: report error content = math_content_form.save() post = Post.objects.create(content_object=object, author=request.user, last_edit_by=request.user, content=content) post.save() if reply_to: try: reply_to_author_group = Group.objects.get( name=reply_to.author.username) except Group.DoesNotExist: pass # TODO: report error else: reply_to_author_group = None _action.add(request.user, _action.POST_SEND, action_object=post, target=object, group=reply_to_author_group) return HttpResponseRedirect(request.POST['post_redirect'])
def leave(request, group, context_dict): if group.data is None: return (403, 'Can\'t leave your private user-group.') if not context_dict['is_member']: return (403, 'You are not a member of this group.') if request.method == 'POST': if request.POST.get('confirm') == u'1': request.user.groups.remove(group) user_refresh_group_cache([request.user.id]) group.data.cache_member_count = group.data.get_members().count() group.data.save(force_update=True) _action.add(request.user, _action.GROUP_LEAVE, action_object=request.user, target=group, group=group) return ('/usergroup/', ) return context_dict
def members(request, group, context_dict): if context_dict['can_add_members'] and request.method == 'POST': form = UserEntryForm(request.POST) if form.is_valid(): created_user_ids = [] users = form.cleaned_data['list'] for user in users: #user.groups.add(group) dummy, created = User.groups.through.objects.get_or_create( user=user, group=group) if created: created_user_ids.append(user.id) _action.add(request.user, _action.GROUP_ADD, action_object=user, target=group, group=group) # TODO: manually create function like 'group_members_update' user_refresh_group_cache(created_user_ids) group.data.cache_member_count = group.data.get_members().count() group.data.save() form = UserEntryForm() else: form = UserEntryForm() context_dict['form'] = form return context_dict
def new(request, task_id=None, is_file=None, is_lecture=None): """ New Task and Edit Task + New TaskFile and Edit TaskFile """ content_type = ContentType.objects.get_for_model(Task) if task_id: task = get_object_or_404(Task.objects.select_related('content'), pk=task_id) perm = task.get_user_permissions(request.user) if EDIT not in perm: return 403 math_content = task.content edit = True is_file = task.is_file() is_lecture = task.is_lecture else: perm = [] task = math_content = None edit = False # Make sure each lecture is a file. assert is_lecture and is_file or not is_lecture form_class = TaskLectureForm if is_lecture \ else (TaskFileForm if is_file else TaskForm) math_content_label = 'Opis' if is_file else None # else default if request.method == 'POST': old_hidden = getattr(task, 'hidden', -1) old_solvable = getattr(task, 'solvable', -1) # Files can have blank description (i.e. math content) task_form = form_class(request.POST, instance=task, user=request.user) math_content_form = MathContentForm(request.POST, instance=math_content, blank=is_file, label=math_content_label, auto_preview=False) attachment_form = is_file and not edit \ and AttachmentForm(request.POST, request.FILES) if task_form.is_valid() and math_content_form.is_valid() \ and (not attachment_form or attachment_form.is_valid()): task = task_form.save(commit=False) math_content = math_content_form.save() if not edit: if attachment_form: attachment, attachment_form = check_and_save_attachment( request, math_content) task.file_attachment = attachment # This is a file. path = attachment.get_full_path_and_filename() try: thumbnail_path = create_file_thumbnail(path) task.cache_file_attachment_thumbnail_url = \ media_path_to_url(thumbnail_path) except ThumbnailRenderingException: pass # Immediately remember file url, so that we don't have to # access Attachment table to show the link. task.cache_file_attachment_url = attachment.get_url() else: task.file_attachment = None # This is a task. if is_file: task.cache_file_attachment_url = task.file_attachment.get_url() if not edit: task.author = request.user task.content = math_content task.save() # Do not call task_form.save_m2m()! set_tags(task, task_form.cleaned_data['tags']) # TODO: signals! if not edit or old_hidden != task.hidden \ or old_solvable != task.solvable: \ invalidate_folder_cache_for_task(task) # send action if creating a new nonhidden task if not edit: # TODO: signals! type = _action.LECTURE_ADD if is_lecture \ else (_action.FILE_ADD if is_file else _action.TASK_ADD) _action.add(request.user, type, action_object=task, target=task) # TODO: izbrisati task_new_finish.html i url #return HttpResponseRedirect('/task/%d/' % task.id if edit else '/task/new/finish/') return HttpResponseRedirect(task.get_absolute_url()) else: task_form = form_class(instance=task) math_content_form = MathContentForm(instance=math_content, blank=is_file, label=math_content_label, auto_preview=False) attachment_form = is_file and not edit and AttachmentForm() forms = [task_form, math_content_form] if attachment_form: forms.append(attachment_form) data = get_task_folder_data(task, request.user) if task else {} data.update({ 'action_url': request.path, 'bulk_add_url': '/task/new/bulk/', 'can_edit_permissions': EDIT_PERMISSIONS in perm, 'content_type': content_type, 'edit': edit, 'forms': forms, 'is_file': is_file, 'is_lecture': is_lecture, 'lectures_folder_url': settings.LECTURES_FOLDER_URL, 'task_name': task.name if task else None, # Convenience. 'task': task, }) return data