def save_current_discussion_reply(request, url): site = get_object_or_404(GroupSite, Q(id=request.POST['site']) & (Q(random_name=url) | Q(name=url))) form = DiscussionReplyForm(request.POST) if request.method == 'POST' and form.is_valid() and ygauth.auth_user(request, url, site): post = Post(topic=form.cleaned_data['topic'], body=form.cleaned_data['body']) if request.user.is_authenticated(): post.creator = request.user post.author = post.creator.first_name else: post.author = 'Anon' post.save() if request.user.is_authenticated(): ReadStatus.objects.filter(Q(topic=form.cleaned_data['topic']) & ~Q(member=request.user)).update(read=False) members = MemberInfo.objects.filter(sites=site) if members.count > 0: email = YakEmail() for m in members: if request.user.is_authenticated() and request.user.id == m.id: continue email.add_email(to_addy=m.email, subject=post.topic.title, from_addy=site.get_site_title()+' YakGroup', template='discuss/emailPost.html', context={'topic': post.topic, 'post': post}) email.send_all_emails() now = datetime.datetime.today() pretty_datetime = make_pretty_datetime(now.date(), now.time()) post.created = pretty_datetime[1] + " " + pretty_datetime[0] post.body = post.body.replace('\n', '<br />') post.topic.save() return json.to_json_response(post, include=('author', 'created', 'body'))
def get_all_site_info(request, url): """AJAX view to return all site info on initial loading of the site""" site = get_object_or_404(GroupSite, Q(random_name=url) | Q(name=url)) if not ygauth.auth_user(request, url, site): return discuss = { 'new_discussion_form': display_new_discussion_form(request, url, True), 'all_discussions': display_all_discussions(request, url, True) } files = { 'all_files': display_all_files(request, url, True), } if request.user.is_authenticated(): user = request.user.id else: user = 0 response = { 'site': site.id, 'url': site.random_name, 'media_url': settings.MEDIA_URL, 'user': user, 'discuss': discuss, 'files': files, 'settings_box': show_settings_box(request, url, True), } return json.to_json_response(response)
def quickadd_todo(request, url): if request.method == 'GET': site = get_object_or_404(GroupSite, Q(random_name=url) | Q(name=url)) form = QuickAddTodoForm(request.GET) if form.is_valid() and ygauth.auth_user(request, url, site): new_todo = form.save(commit=False) members = MemberInfo.objects.filter(sites=site) members_list = members.values_list('first_name', flat=True) parse_data = parse_todo(new_todo.title, members_list) pretty_datetime = make_pretty_datetime(parse_data[1], parse_data[2]) new_todo.title = parse_data[0] new_todo.due_date = parse_data[1] new_todo.due_time = parse_data[2] new_todo.pretty_date = pretty_datetime[0] new_todo.pretty_time = pretty_datetime[1] if not request.user.is_anonymous(): new_todo.creator = request.user new_todo.order = ToDo.objects.filter(site=site).count() + 1 new_todo.save() new_todo.assigned_members = members.filter(first_name__in=parse_data[3]) new_todo.members = [member.first_name for member in new_todo.assigned_members.all()] return json.to_json_response(new_todo, include=('id', 'complete', 'title', 'members', 'due_date', 'pretty_date', 'pretty_time')) else: return json.to_json_response({'s': False, 'errors': form.errors.keys()})
def viewmodify_todo_details(request, url): if request.method == 'POST': todo = get_object_or_404(ToDo, id=request.POST.get('id')) form = ToDoDetailsForm(request.POST, instance=todo) if form.is_valid(): todo = form.save(commit=False) if todo.complete: todo.complete = 1 else: todo.complete = 0 parse_data = parse_todo(form.cleaned_data['due_date_string']) pretty_datetime = make_pretty_datetime(parse_data[1], parse_data[2]) todo.due_date = parse_data[1] todo.due_time = parse_data[2] todo.pretty_date = pretty_datetime[0] todo.pretty_time = pretty_datetime[1] todo.save() form.save_m2m() todo.form_success = True else: todo.form_success = False todo.error_keys = form.errors.keys() else: site = get_object_or_404(GroupSite, Q(random_name=url) | Q(name=url)) id = request.GET['id'] if not ygauth.auth_user(request, url, site): return todo = get_object_or_404(ToDo, Q(id=id) & Q(site=site)) form = ToDoDetailsForm(instance=todo) if todo.due_time is None: due_datetime = todo.due_date else: due_datetime = datetime.datetime.combine(todo.due_date, todo.due_time) #todo_description = todo.description.replace("\n", "<br />") data = { 'todo': todo, #'todo_description': todo_description, 'due_datetime': due_datetime } todo.members = [member.first_name for member in todo.assigned_members.all()] todo.table = json.render_to_json('todos/viewToDoDetails.html', data) todo.form = json.render_to_json('todos/modifyToDoDetails.html', {'form': form, 'todo': todo}) return json.to_json_response(todo, include=('id', 'title', 'complete', 'table', 'form', 'members', 'due_date', 'pretty_time', 'pretty_date', 'form_success', 'error_keys'))
def create_empty_discussion(request, url): site = get_object_or_404(GroupSite, Q(id=request.GET['site']) & (Q(random_name=url) | Q(name=url))) if ygauth.auth_user(request, url, site): topic = Topic(site=site) if request.user.is_authenticated(): topic.creator = request.user topic.save() return json.to_json_response(topic, include=('id',))
def display_all_files(request, url, initial_load): site = get_object_or_404(GroupSite, Q(random_name=url) | Q(name=url)) if ygauth.auth_user(request, url, site): files = File.objects.filter(site=site).order_by('-updated') all_files = json.render_to_json('files/allFiles.html', {'files': files, 'site': site, 'media_url': settings.MEDIA_URL}) if initial_load: return all_files return json.to_json_response({'all_files': all_files})
def disable_show_settings_box(request, url): """Sets the show_settings value for a particular user""" site = get_object_or_404(GroupSite, Q(random_name=url) | Q(name=url)) if not request.user.is_anonymous() and ygauth.auth_user(request, url, site): user = MemberInfo.objects.get(email=request.user.email) user.show_settings = False user.save() return json.to_json_response({'s': True})
def reorder_todos(request, url): site = get_object_or_404(GroupSite, Q(random_name=url) | Q(name=url)) if ygauth.auth_user(request, url, site): todos_list = [int(item) for item in request.GET.getlist('todo[]')] todos = ToDo.objects.in_bulk(todos_list) for i, item in enumerate(todos_list): todos[item].order = i + 1 todos[item].save() return json.to_json_response({'s': True})
def display_all_discussions(request, url, initial_load): site = get_object_or_404(GroupSite, (Q(random_name=url) | Q(name=url))) if ygauth.auth_user(request, url, site): topics = Topic.objects.filter(site=site, empty=False).order_by('-updated') for t in topics: t.read = t.read_status(request.user) all_discussions = json.render_to_json('discuss/allDiscussions.html', {'topics': topics, 'user': request.user}) if initial_load: return all_discussions return json.to_json_response({'all_discussions': all_discussions})
def assign_related_todo(request, url): site = get_object_or_404(GroupSite, Q(id=request.POST['site']) & (Q(random_name=url) | Q(name=url))) form = RelatedToDoForm(request.POST) if request.method == 'POST' and form.is_valid() and ygauth.auth_user(request, url, site): todo_id = form.cleaned_data['todo'] file_id = form.cleaned_data['item'] todo = get_object_or_404(ToDo, id=todo_id) file = get_object_or_404(File, id=file_id) file.todos.add(todo) return json.to_json_response({'s': True})
def get_all_todos(request, url): if request.method == 'GET': site = get_object_or_404(GroupSite, Q(random_name=url) | Q(name=url)) if not ygauth.auth_user(request, url, site): return todos = ToDo.objects.filter(site=site.id).order_by('order') for i, todo in enumerate(todos): todos[i].members = [member.first_name for member in todo.assigned_members.all()] return json.to_json_response(todos, include=('id', 'complete', 'title', 'members', 'due_date', 'pretty_date', 'pretty_time'))
def remove_related_todo(request, url): site = get_object_or_404(GroupSite, Q(id=request.POST['site']) & (Q(random_name=url) | Q(name=url))) form = RelatedToDoForm(request.POST) if request.method == 'POST' and form.is_valid() and ygauth.auth_user(request, url, site): todo_id = form.cleaned_data['todo'] topic_id = form.cleaned_data['item'] todo = get_object_or_404(ToDo, id=todo_id) topic = get_object_or_404(Topic, id=topic_id) topic.todos.remove(todo) todos = topic.todos.all().order_by('order') todos_table = json.render_to_json('discuss/relatedTodosTable.html', {'todos': todos}) return json.to_json_response({'todos_table': todos_table})
def site(request, url): """Displays new site""" s = get_object_or_404(GroupSite, Q(random_name=url) | Q(name=url)) #Following line is required for authentication to work properly in the case of anon users just adding new members if request.session.get('fresh_site', False): del request.session['fresh_site'] if s.group_leader != 0 and not ygauth.auth_user(request, url, s): return HttpResponseRedirect('/' + url + '/site/login/') r = re.compile('MSIE \d', re.I) result = re.search(r, request.META['HTTP_USER_AGENT']) if result != None: result = result.group() data = {} if not request.session.get('saw_ie_warning', False): if int(result[-1:]) <= 7: data['ieVersion'] = result[-1:] else: request.session["saw_ie_warning"] = True return render_to_response('sites/ieLandingPage.html', data, context_instance=RequestContext(request)) #del request.session["saw_ie_warning"] if request.user.is_authenticated(): email = request.user.email user = MemberInfo.objects.get(id = request.user.id) unique_url = user.unique_url else: email = '' unique_url = '' if s.name != s.random_name + '000' and url == s.random_name: return HttpResponseRedirect('/' + s.name) #If s.name has been modified, forward them there if s.name == s.random_name + '000': s.name = s.name[:-3] #Modifes s.name to remove the '000' from the end data = { 'site': s, 'user_email': email, 'unique_url': unique_url, } return render_to_response('sites/main.html', data, context_instance=RequestContext(request))
def remove_related_file(request, url): site = get_object_or_404(GroupSite, Q(id=request.POST['site']) & (Q(random_name=url) | Q(name=url))) form = RelatedToDoForm(request.POST) if request.method == 'POST' and form.is_valid() and ygauth.auth_user(request, url, site): todo_id = form.cleaned_data['todo'] file_id = form.cleaned_data['item'] todo = get_object_or_404(ToDo, id=todo_id) file = get_object_or_404(File, id=file_id) #file.todos.remove(todo) todo.file_set.remove(file) #todos = file.todos.all().order_by('order') files_table = json.render_to_json('todos/relatedFilesTable.html', {'todo': todo}) return json.to_json_response({'files_table': files_table})
def display_current_discussion(request, url): site = get_object_or_404(GroupSite, Q(id=request.GET['site']) & (Q(random_name=url) | Q(name=url))) if ygauth.auth_user(request, url, site): topic = Topic.objects.get(id=request.GET['id']) posts = Post.objects.filter(topic=topic).order_by('updated') todos = topic.todos.all().order_by('order') if request.user.is_authenticated(): r = ReadStatus.objects.get_or_create(member=request.user, topic=topic) r[0].read = True r[0].save() fdict = {} for todo in todos: for file in todo.file_set.all(): fdict[file.id] = file current_discussion = json.render_to_json('discuss/currentDiscussion.html', {'posts': posts, 'topic': topic, 'todos': todos, 'files': fdict.values()}) return json.to_json_response({'current_discussion': current_discussion})
def get_all_site_info_test(request, url): """AJAX view to return all site info on initial loading of the site""" site = get_object_or_404(GroupSite, Q(random_name=url) | Q(name=url)) if not ygauth.auth_user(request, url, site): return #new_discussion_form = json.render_to_json('discuss/newDiscussion.html', {'form': NewDiscussionForm(), 'site': site.id}) discuss = { 'new_discussion_form': display_new_discussion_form(request, url, True), 'all_discussions': display_all_discussions(request, url, True) } response = { 'site': site.id, 'discuss': discuss, } return HttpResponse(json.json_encode(response))
def toggle_complete_status(request, url): site = get_object_or_404(GroupSite, Q(random_name=url) | Q(name=url)) if ygauth.auth_user(request, url, site): id = request.GET.get('id') #sometimes the value for complete gets returned as 'true' or 'false' or 1 or 0. Not sure why if request.GET.get('complete') == 'true': complete = 1 elif request.GET.get('complete') == 'false': complete = 0 else: complete = int(request.GET.get('complete')) todo = ToDo.objects.get(id=id, site=site) if complete: todo.complete = 0 else: todo.complete = 1 todo.save() return json.to_json_response(todo, include=('id', 'complete'))
def save_new_discussion(request, url): site = get_object_or_404(GroupSite, Q(id=request.POST['site']) & (Q(random_name=url) | Q(name=url))) topic = get_object_or_404(Topic, id=request.POST['new_discussion_id'], site=site, empty=True) form = NewDiscussionForm(request.POST, instance=topic) if request.method == 'POST' and form.is_valid() and ygauth.auth_user(request, url, site): topic = form.save(commit=False) topic.empty = False topic.save() post = Post(topic=topic, body=form.cleaned_data['body']) if request.user.is_authenticated(): post.creator = request.user post.save() form.cleaned_data['success'] = True members = MemberInfo.objects.filter(sites=site) if members.count() > 0: email = YakEmail() for m in members: r = ReadStatus(member=m, topic=topic) if request.user.is_authenticated() and m.id == request.user.id: r.read = True r.save() if request.user.is_authenticated() and request.user.id == m.id: continue email.add_email(to_addy=m.email, subject=topic.title, from_addy=site.get_site_title()+' YakGroup', template='discuss/emailPost.html', context={'topic': topic, 'post': post}) email.send_all_emails() return json.to_json_response(form.cleaned_data) else: discussion_form = json.render_to_json('discuss/newDiscussion.html', {'form': form, 'site': site.id}) response = { 'error_keys': form.errors.keys(), 'form': discussion_form, 'success': False } return json.to_json_response(response)
def delete_empty_discussion(request, url): site = get_object_or_404(GroupSite, Q(id=request.POST['site']) & (Q(random_name=url) | Q(name=url))) if request.method == 'POST' and ygauth.auth_user(request, url, site): topic = get_object_or_404(Topic, id=request.POST['discussion'], site=site, empty=True) topic.delete() return json.to_json_response({'s': True})