def add_attachment(request, event_slug, template_name=None, next=None): """ add related cals """ (event, err) = fetch_from_url(request, event_slug) if err: return err request_user = request.user if request.method == 'POST': form = AttachmentForm(request.POST, request.FILES) if form.is_valid(): AttachmentEvent(picture=form.cleaned_data['picture'], event=event, uploaded_by=request_user).save() if not request.is_ajax(): return HttpResponseRedirect( reverse(next, args=(event.get_url(), ))) response = {'success': True} else: response = errors_as_json(form) if request.is_ajax(): json = simplejson.dumps(response, ensure_ascii=False) return HttpResponse(json, mimetype="application/json") else: form = AttachmentForm() c = RequestContext(request, { 'form': form, 'event': event, }) return render_to_response(template_name, c)
def add_attachment(request, event_slug, template_name=None, next=None): """ add related cals """ (event, err) = fetch_from_url(request, event_slug) if err: return err request_user = request.user if request.method == 'POST': form = AttachmentForm(request.POST, request.FILES) if form.is_valid(): AttachmentEvent(picture=form.cleaned_data['picture'], event = event, uploaded_by = request_user).save() if not request.is_ajax(): return HttpResponseRedirect(reverse(next, args=(event.get_url(),))) response = {'success':True} else: response = errors_as_json(form) if request.is_ajax(): json = simplejson.dumps(response, ensure_ascii=False) return HttpResponse(json, mimetype="application/json") else: form = AttachmentForm() c = RequestContext(request, {'form': form, 'event': event, }) return render_to_response(template_name, c)
def change_invite_list(request, event_slug, template_name=None, next=None): """ invite people for a cal """ (event, err) = fetch_from_url(request, event_slug) if err: return err old_invite_list = [] request_user = request.user stats = Stat.objects.filter(event=event)[0] invite_l = User.objects.filter(calendar__stats=stats, calendar__is_guest=True) for user in invite_l: old_invite_list.append(user) if request.method == 'POST': f = InviteEventForm(request.POST) if f.is_valid(): old_close = stats.close stats.close = f.cleaned_data['close'] invite = f.cleaned_data['invite'] stats.min_number_guests = f.cleaned_data['min_number_guests'] stats.max_number_guests = f.cleaned_data['max_number_guests'] stats.save() if invite: for user in invite: if user in old_invite_list: old_invite_list.remove(user) else: Calendar(event=event, user=user, stats=stats, is_guest=True).save() #send notification #notification.send([user], "event_invitation", {'event': event,}) #set the notification object #ToNotify.objects.get_or_create(user=user, event=event) for user in old_invite_list: #delete calendar Calendar.objects.filter(event=event, user=user, stats=stats)[0].delete() #delete tonotofy for this user #ToNotify.objects.filter(user=user, event=event)[0].delete() return HttpResponseRedirect(reverse(next, args=(event.get_url(),))) invite_names = '' for user in old_invite_list: if not user == request_user: invite_names = invite_names + user.first_name+' '+user.last_name + ',' f = InviteEventForm({ 'close': stats.close, 'invite': old_invite_list, 'min_number_guests':stats.min_number_guests, 'max_number_guests':stats.max_number_guests, }) c = RequestContext(request, {'form': f, 'invite_names': invite_names, 'event': event, }) return render_to_response(template_name, c)
def cancelled_occurrence(request, event_slug, template_name): """ return a list of cancelled occurrences for the current cal""" (event, err) = fetch_from_url(request, event_slug) if err: return err request_user = request.user cancelled_occurrences = event.occurrence_set.filter(cancelled=True) c = RequestContext(request, { 'event': event, 'cancelled_occurrences' : cancelled_occurrences, }) return render_to_response(template_name, c)
def cancelled_occurrence(request, event_slug, template_name): """ return a list of cancelled occurrences for the current cal""" (event, err) = fetch_from_url(request, event_slug) if err: return err request_user = request.user cancelled_occurrences = event.occurrence_set.filter(cancelled=True) c = RequestContext(request, { 'event': event, 'cancelled_occurrences': cancelled_occurrences, }) return render_to_response(template_name, c)
def cancel(request, event_slug, next=None): """ Cancel a cal """ (event, err) = fetch_from_url(request, event_slug) if err: return err request_user = request.user if event.delete(request_user): """ The function delete returns True if it is set to True, False otherwise notify all concerned users by the object by the deletion """ #users_tonotify = ToNotify.objects.filter(event=event).exclude(user=request_user) #for user_tonotify in users_tonotify: #user = user_tonotify.user #notification.send([user], "event_cancelled", {'event': event, 'user':request_user,}) if request.is_ajax(): json_response = simplejson.dumps({ 'success': True,}) return HttpResponse(json_response, mimetype="application/json") return HttpResponseRedirect(reverse(next, args=(event.get_url(),)))
def view(request, event_slug, template_name=None): """ view a cal """ (event, err) = fetch_from_url(request, event_slug) if err: return err rspv = False if event.start > timezone.now(): rspv = True stats = Stat.objects.filter(event=event)[0] open = not stats.close values = Calendar.objects.filter(event=event, status=RSPV_YES).values_list('user', flat=True) if values: confirmed = User.objects.filter(pk__in=values) else: confirmed = None accept_url = reverse('event_accept_inv', args=[event.get_url()]) maybe_url = reverse('event_maybe_accept_inv', args=[event.get_url()]) refuse_url = reverse('event_refuse_inv', args=[event.get_url()]) attachments_count = event.attachments().count() rest_attachments = 0 first_attachments = [] if attachments_count > 0: first_attachments = event.attachments()[:4] if attachments_count < 4: rest_attachments = range(4 - attachments_count) c = RequestContext( request, { 'event': event, 'accept_url': accept_url, 'maybe_url': maybe_url, 'refuse_url': refuse_url, 'open': open, 'confirmed': confirmed, 'rspv': rspv, 'attachments_count': attachments_count, 'first_attachments': first_attachments, 'rest_attachments': rest_attachments, }) return render_to_response(template_name, c)
def cancel(request, event_slug, next=None): """ Cancel a cal """ (event, err) = fetch_from_url(request, event_slug) if err: return err request_user = request.user if event.delete(request_user): """ The function delete returns True if it is set to True, False otherwise notify all concerned users by the object by the deletion """ #users_tonotify = ToNotify.objects.filter(event=event).exclude(user=request_user) #for user_tonotify in users_tonotify: #user = user_tonotify.user #notification.send([user], "event_cancelled", {'event': event, 'user':request_user,}) if request.is_ajax(): json_response = simplejson.dumps({ 'success': True, }) return HttpResponse(json_response, mimetype="application/json") return HttpResponseRedirect(reverse(next, args=(event.get_url(), )))
def respond_to_invitation(request, event_slug, status, next): """respond to the invitation by changing the invitation status""" (event, err) = fetch_from_url(request, event_slug) if err: return err request_user = request.user calendar = Calendar.objects.filter(event=event, user=request_user) if calendar.count() == 0: stats = Stat.objects.filter(event=event)[0] calendar = Calendar(event=event, user=request_user, stats=stats) calendar.save() else: calendar = calendar[0] if status == RSPV_YES: #attending stat = calendar.accept() #if (stat): #add user to be notified #ToNotify.objects.get_or_create(user=request_user, event=event) #notification.send([event.author], "cal_accepted", {'event': event, 'user_to':request_user,}) elif status == RSPV_MAYBE: #may be attending #add user to be notified #ToNotify.objects.get_or_create(user=request_user, event=event) calendar.maybe_accept() elif status == RSPV_NO: #not attending #delete tonotofy for this user #ToNotify.objects.filter(user=request_user, event=event)[0].delete() #notification.send([event.author], "cal_refused", {'event': event, 'user_to':request_user,}) calendar.refuse() if request.is_ajax(): json_response = simplejson.dumps({ 'success': True, }) return HttpResponse(json_response, mimetype="application/json") return HttpResponseRedirect(reverse(next, args=(event.get_url(), )))
def respond_to_invitation(request, event_slug, status, next): """respond to the invitation by changing the invitation status""" (event, err) = fetch_from_url(request, event_slug) if err: return err request_user = request.user calendar = Calendar.objects.filter(event=event, user=request_user) if calendar.count() == 0: stats = Stat.objects.filter(event=event)[0] calendar = Calendar(event=event, user=request_user, stats=stats) calendar.save() else: calendar = calendar[0] if status == RSPV_YES: #attending stat = calendar.accept() #if (stat): #add user to be notified #ToNotify.objects.get_or_create(user=request_user, event=event) #notification.send([event.author], "cal_accepted", {'event': event, 'user_to':request_user,}) elif status == RSPV_MAYBE: #may be attending #add user to be notified #ToNotify.objects.get_or_create(user=request_user, event=event) calendar.maybe_accept() elif status == RSPV_NO: #not attending #delete tonotofy for this user #ToNotify.objects.filter(user=request_user, event=event)[0].delete() #notification.send([event.author], "cal_refused", {'event': event, 'user_to':request_user,}) calendar.refuse() if request.is_ajax(): json_response = simplejson.dumps({ 'success': True,}) return HttpResponse(json_response, mimetype="application/json") return HttpResponseRedirect(reverse(next, args=(event.get_url(),)))
def view(request, event_slug, template_name=None): """ view a cal """ (event, err) = fetch_from_url(request, event_slug) if err: return err rspv = False if event.start > timezone.now(): rspv = True stats = Stat.objects.filter(event=event)[0] open = not stats.close values = Calendar.objects.filter(event=event, status = RSPV_YES).values_list('user', flat=True) if values: confirmed = User.objects.filter(pk__in = values) else: confirmed = None accept_url = reverse('event_accept_inv', args=[event.get_url()]) maybe_url = reverse('event_maybe_accept_inv', args=[event.get_url()]) refuse_url = reverse('event_refuse_inv', args=[event.get_url()]) attachments_count= event.attachments().count() rest_attachments = 0 first_attachments = [] if attachments_count > 0: first_attachments = event.attachments()[:4] if attachments_count < 4: rest_attachments = range(4 - attachments_count) c = RequestContext(request, {'event': event, 'accept_url':accept_url, 'maybe_url':maybe_url, 'refuse_url':refuse_url, 'open' : open, 'confirmed': confirmed, 'rspv': rspv, 'attachments_count': attachments_count, 'first_attachments': first_attachments, 'rest_attachments': rest_attachments, }) return render_to_response(template_name, c)
def edit(request, event_slug, cal_type="5", template_name=None, next=None): """ edit a withcal """ (event, err) = fetch_from_url(request, event_slug) if err: return err request_user = request.user if request.method == 'POST': f = BaseEventForm(request.POST) if f.is_valid(): event.start = f.cleaned_data['start_time'] event.end = f.cleaned_data['end_time'] event.allDay = f.cleaned_data['check_whole_day'] event.category = f.cleaned_data['category'] event.priority = f.cleaned_data['priority'] event.end_recurring_period = f.cleaned_data['end_recurring_period'] recursion_frequency = f.cleaned_data['recursion_frequency'] recursion_count = f.cleaned_data['recursion_count'] recursion_byweekday = f.cleaned_data['recursion_byweekday'] recursion_bymonthday = f.cleaned_data['recursion_bymonthday'] #first we have to check if the current event is recurring, if so we: #the recursion parameters are required if f.cleaned_data['add_recursion']: recursion_params = recursion_count + recursion_byweekday + recursion_bymonthday if event.recursion is None: recursion = Recursion(frequency=recursion_frequency, params=recursion_params) recursion.save() event.recursion = recursion else : recursion = event.recursion recursion.frequency = recursion_frequency recursion.params = recursion_params recursion.save() else : if event.recursion is not None: recursion = event.recursion event.recursion = None event.save() recursion.delete() event.save() #notify all concerned users by the object by the new comment #users_tonotify = ToNotify.objects.filter(event=event).exclude(user=request_user) #for user_tonotify in users_tonotify: #user = user_tonotify.user #notification.send([user], "cal_updated", {'event': event, 'user':request_user,}) if not request.is_ajax(): return HttpResponseRedirect(reverse(next, args=(event.get_url(),))) response = ({'success':'True'}) else: response = errors_as_json(f) if request.is_ajax(): json = simplejson.dumps(response, ensure_ascii=False) return HttpResponse(json, mimetype="application/json") else: if event.recursion: params = event.recursion.get_params() count = '' byweekday = '' bymonthday = '' if 'count' in params: count = params['count'] if 'byweekday' in params: try: byweekday = [int(params['byweekday'])] except: byweekday = params['byweekday'] if 'bymonthday' in params: try: bymonthday = [int(params['bymonthday'])] except: bymonthday = params['bymonthday'] f = BaseEventForm({'start_date': event.start.date(), 'start_time': event.start.time().strftime("%I:%M %p"), 'end_date': event.end.date(), 'end_time': event.end.time().strftime("%I:%M %p"), 'category': event.cal_category, 'priority': event.priority, 'check_whole_day': event.allDay, 'end_recurring_period': event.end_recurring_period, 'recursion_frequency' : event.recursion.frequency, 'add_recursion': True, 'recursion_count': count, 'recursion_byweekday':byweekday, 'recursion_bymonthday':bymonthday, }) else : f = BaseEventForm({'start_date': event.start.date(), 'start_time': event.start.time().strftime("%I:%M %p"), 'end_date': event.end.date(), 'end_time': event.end.time().strftime("%I:%M %p"), 'check_whole_day': event.allDay, 'category': event.category, 'priority': event.priority, 'end_recurring_period': event.end_recurring_period, }) c = RequestContext(request, {'form': f, 'action': event.get_edit_url(), 'event': event, }) return render_to_response(template_name, c)
def change_invite_list(request, event_slug, template_name=None, next=None): """ invite people for a cal """ (event, err) = fetch_from_url(request, event_slug) if err: return err old_invite_list = [] request_user = request.user stats = Stat.objects.filter(event=event)[0] invite_l = User.objects.filter(calendar__stats=stats, calendar__is_guest=True) for user in invite_l: old_invite_list.append(user) if request.method == 'POST': f = InviteEventForm(request.POST) if f.is_valid(): old_close = stats.close stats.close = f.cleaned_data['close'] invite = f.cleaned_data['invite'] stats.min_number_guests = f.cleaned_data['min_number_guests'] stats.max_number_guests = f.cleaned_data['max_number_guests'] stats.save() if invite: for user in invite: if user in old_invite_list: old_invite_list.remove(user) else: Calendar(event=event, user=user, stats=stats, is_guest=True).save() #send notification #notification.send([user], "event_invitation", {'event': event,}) #set the notification object #ToNotify.objects.get_or_create(user=user, event=event) for user in old_invite_list: #delete calendar Calendar.objects.filter(event=event, user=user, stats=stats)[0].delete() #delete tonotofy for this user #ToNotify.objects.filter(user=user, event=event)[0].delete() return HttpResponseRedirect(reverse(next, args=(event.get_url(), ))) invite_names = '' for user in old_invite_list: if not user == request_user: invite_names = invite_names + user.first_name + ' ' + user.last_name + ',' f = InviteEventForm({ 'close': stats.close, 'invite': old_invite_list, 'min_number_guests': stats.min_number_guests, 'max_number_guests': stats.max_number_guests, }) c = RequestContext(request, { 'form': f, 'invite_names': invite_names, 'event': event, }) return render_to_response(template_name, c)
def edit(request, event_slug, cal_type="5", template_name=None, next=None): """ edit a withcal """ (event, err) = fetch_from_url(request, event_slug) if err: return err request_user = request.user if request.method == 'POST': f = BaseEventForm(request.POST) if f.is_valid(): event.start = f.cleaned_data['start_time'] event.end = f.cleaned_data['end_time'] event.allDay = f.cleaned_data['check_whole_day'] event.category = f.cleaned_data['category'] event.priority = f.cleaned_data['priority'] event.end_recurring_period = f.cleaned_data['end_recurring_period'] recursion_frequency = f.cleaned_data['recursion_frequency'] recursion_count = f.cleaned_data['recursion_count'] recursion_byweekday = f.cleaned_data['recursion_byweekday'] recursion_bymonthday = f.cleaned_data['recursion_bymonthday'] #first we have to check if the current event is recurring, if so we: #the recursion parameters are required if f.cleaned_data['add_recursion']: recursion_params = recursion_count + recursion_byweekday + recursion_bymonthday if event.recursion is None: recursion = Recursion(frequency=recursion_frequency, params=recursion_params) recursion.save() event.recursion = recursion else: recursion = event.recursion recursion.frequency = recursion_frequency recursion.params = recursion_params recursion.save() else: if event.recursion is not None: recursion = event.recursion event.recursion = None event.save() recursion.delete() event.save() #notify all concerned users by the object by the new comment #users_tonotify = ToNotify.objects.filter(event=event).exclude(user=request_user) #for user_tonotify in users_tonotify: #user = user_tonotify.user #notification.send([user], "cal_updated", {'event': event, 'user':request_user,}) if not request.is_ajax(): return HttpResponseRedirect( reverse(next, args=(event.get_url(), ))) response = ({'success': 'True'}) else: response = errors_as_json(f) if request.is_ajax(): json = simplejson.dumps(response, ensure_ascii=False) return HttpResponse(json, mimetype="application/json") else: if event.recursion: params = event.recursion.get_params() count = '' byweekday = '' bymonthday = '' if 'count' in params: count = params['count'] if 'byweekday' in params: try: byweekday = [int(params['byweekday'])] except: byweekday = params['byweekday'] if 'bymonthday' in params: try: bymonthday = [int(params['bymonthday'])] except: bymonthday = params['bymonthday'] f = BaseEventForm({ 'start_date': event.start.date(), 'start_time': event.start.time().strftime("%I:%M %p"), 'end_date': event.end.date(), 'end_time': event.end.time().strftime("%I:%M %p"), 'category': event.cal_category, 'priority': event.priority, 'check_whole_day': event.allDay, 'end_recurring_period': event.end_recurring_period, 'recursion_frequency': event.recursion.frequency, 'add_recursion': True, 'recursion_count': count, 'recursion_byweekday': byweekday, 'recursion_bymonthday': bymonthday, }) else: f = BaseEventForm({ 'start_date': event.start.date(), 'start_time': event.start.time().strftime("%I:%M %p"), 'end_date': event.end.date(), 'end_time': event.end.time().strftime("%I:%M %p"), 'check_whole_day': event.allDay, 'category': event.category, 'priority': event.priority, 'end_recurring_period': event.end_recurring_period, }) c = RequestContext(request, { 'form': f, 'action': event.get_edit_url(), 'event': event, }) return render_to_response(template_name, c)