Example #1
0
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)
Example #2
0
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)
Example #3
0
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)
Example #4
0
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)
Example #5
0
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)
Example #6
0
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(),)))
Example #7
0
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)
Example #8
0
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(), )))
Example #9
0
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(), )))
Example #10
0
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(),)))
Example #11
0
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)
Example #12
0
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)
Example #13
0
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)
Example #14
0
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)