Exemplo n.º 1
0
def phone_update(sender, instance, **kwargs):
    # quick hack to see if the address (instance.content_object) is connected to a MemberProfile
    if hasattr(instance.content_object, 'user2'):
        memberprofile = instance.content_object
        user = memberprofile.user2
        
        profile = get_object_or_none(TrackingProfile, user=user)
    
        if not profile:
            return
    
        profile_pickle = pickle.dumps(profile.to_dict())

        # this address is already in the rolodex; just update it
        phone = get_object_or_none(Phone, myewbphone=instance)
        if phone:
            phone.phone = instance.number
            phone.save()

        # add new address to rolodex
        else:
            phoneddress = Phone.objects.create(phone=instance.number,
                                               profile = profile,
                                               myewbphone=instance)
        
        history = ProfileHistory.objects.create(profile=profile,
                                                editor=user,
                                                revision=profile_pickle)
Exemplo n.º 2
0
def address_update(sender, instance, **kwargs):
    # quick hack to see if the address (instance.content_object) is connected to a MemberProfile
    if hasattr(instance.content_object, 'user2'):
        memberprofile = instance.content_object
        user = memberprofile.user2
        
        profile = get_object_or_none(TrackingProfile, user=user)
    
        if not profile:
            return
    
        profile_pickle = pickle.dumps(profile.to_dict())

        # this address is already in the rolodex; just update it
        address = get_object_or_none(Address, myewbaddress=instance)
        if address:
            address.address = "%s\n%s %s\n%s\n%s" % (instance.street, instance.city, instance.province, instance.postal_code, instance.country)
            address.save()

        # add new address to rolodex
        else:
            address = Address.objects.create(address = "%s\n%s %s\n%s\n%s" % (instance.street, instance.city, instance.province, instance.postal_code, instance.country),
                                             profile = profile,
                                             myewbaddress=instance)
                                             
        # update rolodex profile city too?
        if not profile.city and instance.city:
            profile.city = instance.city
            profile.save()
        
        history = ProfileHistory.objects.create(profile=profile,
                                                editor=user,
                                                revision=profile_pickle)
Exemplo n.º 3
0
    def clean(self, value):
        value = super(AutocompleteField, self).clean(value)

        if self.multi:
            objects = []
            for v in value.split(','):
                v = v.strip()

                if v:
                    obj = get_object_or_none(self.model, name=v)
                    if obj:
                        objects.append(obj)

                    elif self.create:
                        obj = self.model(name=v)
                        obj.save()
                        objects.append(obj)
                    else:
                        raise forms.ValidationError("Invalid choice")

            return objects

        elif value:
            obj = get_object_or_none(self.model, name=value)
            if obj:
                return obj

            if self.create:
                obj = self.model(name=value)
                obj.save()
                return obj
            else:
                raise forms.ValidationError("Invalid choice")

        return None
Exemplo n.º 4
0
 def clean(self, value):
     value = super(AutocompleteField, self).clean(value)
     
     if self.multi:
         objects = []
         for v in value.split(','):
             v = v.strip()
             
             if v:
                 obj = get_object_or_none(self.model, name=v)
                 if obj:
                     objects.append(obj)
                 
                 elif self.create:
                     obj = self.model(name=v)
                     obj.save()
                     objects.append(obj)
                 else:
                     raise forms.ValidationError("Invalid choice")
             
         return objects
     
     elif value:
         obj = get_object_or_none(self.model, name=value)
         if obj:
             return obj
         
         if self.create:
             obj = self.model(name=value)
             obj.save()
             return obj
         else:
             raise forms.ValidationError("Invalid choice")
         
     return None
Exemplo n.º 5
0
def get_address_or_404(user, label):
    profile = user.get_profile()
    content_type = ContentType.objects.get_for_model(profile)
    
    address = get_object_or_none(Address, content_type__pk=content_type.id, object_id=profile.id, label=label)
    if not address:
        address = get_object_or_none(Address, content_type__pk=content_type.id, object_id=profile.id, id=label)
    
    # TODO: if address is None: return 404
    return address
Exemplo n.º 6
0
def custom_fields(request):
    if not perm(request):
        return HttpResponseRedirect(reverse('rolodex_login'))

    form = CustomFieldForm()

    if request.method == 'POST':
        if request.POST.get('action', None) == 'add':
            form = CustomFieldForm(request.POST)
            
            if form.is_valid():
                field = form.save(commit=False)
                field.owner = request.user
                field.save()
                
                request.user.message_set.create(message='Field added.')
                return HttpResponseRedirect(reverse('rolodex_custom_fields'))
            
        elif request.POST.get('action', None) == 'update':
            field = get_object_or_none(CustomField, id=request.POST['field_id'])
            
            if field and (field.visibility == 'everyone' or (field.visibility == 'private' and field.owner == request.user)):
                form = CustomFieldForm(request.POST, instance=field)
                
                if form.is_valid():
                    field = form.save()
                    
                    request.user.message_set.create(message='Field updated.')
                    return HttpResponseRedirect(reverse('rolodex_custom_fields'))
            
        elif request.POST.get('action', None) == 'delete' & request.POST.get('field_id', None):
            field = get_object_or_none(CustomField, id=request.POST['field_id'])
            
            if field and (field.visibility == 'everyone' or (field.visibility == 'private' and field.owner == request.user)):
                field.delete()
                request.user.message_set.create(message='Field deleted.')
                return HttpResponseRedirect(reverse('rolodex_custom_fields'))

    qry = Q(visibility='anyone') | (Q(visibility='private') & Q(owner=request.user))
    fields = CustomField.objects.filter(qry).order_by('name')
    
    badges = Badge.objects.all()
    flags = Flag.objects.all()

    return render_to_response("rolodex/custom_fields.html",
                              {'fields': fields,
                               'badges': badges,
                               'flags': flags},
                              context_instance=RequestContext(request))
Exemplo n.º 7
0
def email_delete(sender, instance, **kwargs):
    user = instance.user
    profile = get_object_or_none(TrackingProfile, user=user)
    if not profile:
        return

    profile_pickle = pickle.dumps(profile.to_dict())

    email = get_object_or_none(Email, myewbemail=instance)
    if email:
        email.delete()
    
        history = ProfileHistory.objects.create(profile=profile,
                                                editor=user,
                                                revision=profile_pickle)
Exemplo n.º 8
0
    def dashboard(self, user):
        u = get_object_or_none(User, username=user)

        if u:
            filter1 = Q(user=u)
            filter2 = Q(dashboard=True) | Q(is_admin=True)
            mrecords = GroupMember.objects.filter(filter1, filter2)
            groups = []
            for m in mrecords:
                if m.group not in groups:
                    groups.append(m.group)

            chapter = u.get_profile().get_chapter()
            if chapter:
                chapter = BaseGroup.objects.get(slug=chapter.slug)
            if chapter and chapter not in groups:
                groups.insert(0, chapter)
                
            return groups
            
            #return self.get_query_set().filter(member_users=u,
            #                                   groupmember__dashboard=True)

        else:
            return []        
Exemplo n.º 9
0
    def removal_notice(self, resource, user):
        m = get_object_or_none(Membership, collection=self, resource=resource)

        if not m:
            curator = self.owner

            message = render_to_string(
                "library/emails/removal.html", {"resource": resource, "collection": self, "user": user}
            )

            ctx = {
                "body": message,
                "title": "Recommendation for your EWB Library collection",
                "topic_id": None,
                "event": None,
                "attachments": None,
            }
            sender = "myEWB <*****@*****.**>"

            send_mail(
                subject="Recommendation for your EWB Library collection",
                txtMessage=None,
                htmlMessage=message,
                fromemail=sender,
                recipients=[curator.email],
                context=ctx,
                content_object=self,
            )

            return True

        return False
Exemplo n.º 10
0
def user_update(sender, instance, created=None, **kwargs):
    user = instance
    
    profile = get_object_or_none(TrackingProfile, user=user)
    
    if profile:
        modified = False
        profile_pickle = pickle.dumps(profile.to_dict())
        
        if profile.primary_email() != user.email:
            profile.update_email(user.email)
            modified = True
            
        if profile.first_name != user.first_name:
            profile.first_name = user.first_name
            modified = True
            
        if profile.last_name != user.last_name:
            profile.last_name = user.last_name
            modified = True
            
        if modified:
            profile.save()
            history = ProfileHistory.objects.create(profile=profile,
                                                    editor=user,
                                                    revision=profile_pickle)
                                                    
    else:
        profile = TrackingProfile.objects.create(user=user,
                                                 profile=user.get_profile(),
                                                 first_name=user.first_name,
                                                 last_name=user.last_name,
                                                 updated_by=user)
        profile.update_email(user.email)
Exemplo n.º 11
0
def evaluation_interview_answer(request, app_id):
    application = get_object_or_404(Application, id=app_id)

    if request.method == 'POST':
        if request.POST.get('key', None):
            key = request.POST.get('key', None)
            question = get_object_or_404(InterviewQuestion,
                                         id=key,
                                         session=application.session)
            comment = request.POST.get('comment', None)

            if comment:
                answer, created = Answer.objects.get_or_create(
                    application=application, question=question)
                answer.answer = comment
                answer.save()
            else:
                answer = get_object_or_none(Answer,
                                            application=application,
                                            question=question)
                if answer:
                    answer.delete()
            return HttpResponse("success")
    elif request.is_ajax():
        answers = Answer.objects.filter(application=application)
        json = serializers.get_serializer('json')()
        response = HttpResponse(mimetype='application/json')
        json.serialize(comments, stream=response)
        return response
    return HttpResponse("invalid")
Exemplo n.º 12
0
def browse_event(request, event_id=None):
    if not event_id and not request.POST.get('event', None):
        request.user.message_set.create(message='Enter an event into the search')
        return HttpResponseRedirect(reverse('rolodex_home'))

    if not event_id:
        #events = Event.objects.filter(name__icontains=request.POST['event']).order_by('-date')

        # support space-deliminated search terms
        qry = Q(name__icontains=request.POST['event'].split()[0])
        for term in request.POST['event'].split()[1:]:
            qry = qry & Q(name__icontains=term)

        events = Event.objects.filter(qry).order_by('-date')        
        
        if events.count() == 1:
            return HttpResponseRedirect(reverse('rolodex_browse_event', \
                                                kwargs={'event_id': events[0].id}))
            
        return render_to_response("rolodex/browse_event_search.html",
                                  {'events': events},
                                  context_instance=RequestContext(request))

                                  
    event = get_object_or_none(Event, id=event_id)

    results = EventAttendance.objects.filter(event=event)
    results = results.order_by('profile__last_name')
    
    return render_to_response("rolodex/browse_event.html",
                              {'event': event,
                               'results': results},
                              context_instance=RequestContext(request))
Exemplo n.º 13
0
def browse_chapter(request, chapter=None):
    if request.GET.get('chapter') and not chapter:
        chapter = request.GET['chapter']
        return HttpResponseRedirect(reverse('rolodex_browse_chapter', \
            kwargs={'chapter': chapter}))
            
    chapter = get_object_or_none(Network, slug=chapter)
    if not chapter:
        request.user.message_set.create(message='Chapter not found')
        return HttpResponseRedirect(reverse('rolodex_home'))

    results = TrackingProfile.objects.filter(chapter=chapter)
    
    filters = request.GET.get('filters', '')
    if filters:
        if filters == 'role':
            results = results.filter(profilebadge__current=True, profilebadge__active=True).distinct()
        if filters == 'past':
            results = results.filter(profilebadge__current=False, profilebadge__active=True).distinct()
        if filters == 'flag':
            results = results.filter(profileflag__active=True).distinct()
    
    results = results.order_by('last_name')

    return render_to_response("rolodex/browse_chapter.html",
                              {'chapter': chapter,
                               'results': results,
                               'filters': filters},
                              context_instance=RequestContext(request))
Exemplo n.º 14
0
def group_join(sender, instance, created, **kwargs):
    user = instance.user
    group = instance.group
    
    profile = get_object_or_none(TrackingProfile, user=user)
    
    if not profile:
        return

    # messy hack.  but what the heck, it'll work...
    badge = None
    if group.slug == 'exec':
        badge = Badge.objects.get(name='Exec')
    elif group.slug == 'presidents' or group.slug == 'citynetworkpres':
        badge = Badge.objects.get(name='President')
        
    if badge:
        pb = ProfileBadge.objects.filter(profile=profile, badge=badge, active=True, current=True)
        
        if not pb.count():
            ProfileBadge.objects.create(profile=profile,
                                        badge=badge,
                                        added_by=user,
                                        note='Automatic addition - sync from myEWB')
            
    # basically... "if they're a chapter exec, update their title"
    if instance.is_admin and hasattr(group, 'network'):
        if profile.chapter != group.network or profile.role != instance.admin_title:
            profile_pickle = pickle.dumps(profile.to_dict())
            profile.chapter = group.network
            profile.role = instance.admin_title
            profile.save()
            history = ProfileHistory.objects.create(profile=profile,
                                                    editor=user,
                                                    revision=profile_pickle)
Exemplo n.º 15
0
def resume(request):
    registration = get_object_or_none(ConferenceRegistration, user=request.user, submitted=True, cancelled=False)

    if not registration:
        request.user.message_set.create("You aren't registered for conference...")
        return HttpResponseRedirect(reverse('confreg'))
    
    if request.method == 'POST':
        form = ConferenceResumeForm(request.POST, request.FILES)
        if form.is_valid():
            resume = Attachment()
            resume.creator = request.user
            resume.content_type = ContentType.objects.get_for_model(registration)
            resume.object_id = registration.id
            resume.attachment_file = form.cleaned_data['resume']
            resume.save()
            
            request.user.message_set.create(message="Thank you!")
            return HttpResponseRedirect(reverse('confreg'))
    else:
        form = ConferenceResumeForm()
                
    return render_to_response('conference/resume.html',
                              {'registration': registration,
                               'form': form,
                               'user': request.user,
                              },
                              context_instance=RequestContext(request)
                             )
Exemplo n.º 16
0
def preview(request, workspace_id):
    workspace = get_object_or_404(Workspace, id=workspace_id)
    
    if request.method == 'POST' and request.POST.get('dir', None):
        
        # load up the requested file
        file = WorkspaceFile.objects.load(workspace, request.POST['dir'])
        if file:
            # check to see if we want a past revision
            rev_id = request.POST.get('revision', None)
            if rev_id and rev_id != 'current':
                revision = get_object_or_none(WorkspaceRevision,
                                              id=rev_id,
                                              workspace=workspace,
                                              parent_file=file)
                if revision:
                    file = revision.get_file()
                    
            # normalize the extension
            ext = file.get_extension()
            if preview_aliases.get(ext, None):
                ext = preview_aliases[ext]
        
            # load up the preview template
            if ext in preview_extensions:
                return render_to_response("workspace/preview/%s.html" % ext,
                                          {'file': file,
                                           'workspace': workspace},
                                          context_instance=RequestContext(request))
    
    return HttpResponse("preview not available")
Exemplo n.º 17
0
def get_address_or_404(user, label):
    profile = user.get_profile()
    content_type = ContentType.objects.get_for_model(profile)

    address = get_object_or_none(Address,
                                 content_type__pk=content_type.id,
                                 object_id=profile.id,
                                 label=label)
    if not address:
        address = get_object_or_none(Address,
                                     content_type__pk=content_type.id,
                                     object_id=profile.id,
                                     id=label)

    # TODO: if address is None: return 404
    return address
Exemplo n.º 18
0
def evaluation_interview_answer(request, app_id):
    application = get_object_or_404(Application, id=app_id)
    
    if request.method == 'POST':
        if request.POST.get('key', None):
            key = request.POST.get('key', None)
            question = get_object_or_404(InterviewQuestion, id=key, session=application.session)
            comment = request.POST.get('comment', None)
        
            if comment:
                answer, created = Answer.objects.get_or_create(application=application,
                                                               question=question)
                answer.answer = comment
                answer.save()
            else:
                answer = get_object_or_none(Answer,
                                            application=application,
                                            question=question)
                if answer:
                    answer.delete()
            return HttpResponse("success")
    elif request.is_ajax():
        answers = Answer.objects.filter(application=application)
        json = serializers.get_serializer('json')()
        response = HttpResponse(mimetype='application/json')
        json.serialize(comments, stream=response)
        return response
    return HttpResponse("invalid")
Exemplo n.º 19
0
def evaluation_comment(request, app_id):
    application = get_object_or_404(Application, id=app_id)
    
    if request.method == 'POST':
        if request.POST.get('key', None):
            key = request.POST.get('key', None)
            comment = request.POST.get('comment', None)
        
            if comment:
                evalcomment, created = EvaluationComment.objects.get_or_create(evaluation=application.evaluation,
                                                                               key=key)
                evalcomment.comment = comment
                evalcomment.save()
            else:
                comment = get_object_or_none(EvaluationComment,
                                             evaluation=application.evaluation,
                                             key=key)
                if comment:
                    comment.delete()
            return HttpResponse("success")
    elif request.is_ajax():
        comments = EvaluationComment.objects.filter(evaluation=application.evaluation)
        json = serializers.get_serializer('json')()
        response = HttpResponse(mimetype='application/json')
        json.serialize(comments, stream=response)
        return response
    return HttpResponse("invalid")
Exemplo n.º 20
0
def is_exec(request):
    """
    Sets a flag for whether a user is a chapter exec member
    """
    user = request.user
    
    if user.is_staff or user.is_superuser:
        return {'is_exec': True}
    
    ctx = {'is_exec': False}
    
    if user.is_authenticated():
        cache_key = "is_exec_%s" % user.username
        is_exec = cache.get(cache_key)
        if is_exec is None:
            # wrapped "get" since this needs sample data to be loaded 
            execlist = get_object_or_none(Community, slug='exec')
            
            if execlist and execlist.user_is_member(user):
                is_exec = True
            else:
                is_exec = False
            cache.set(cache_key, is_exec, 5*60)

        ctx['is_exec'] = is_exec
    return ctx
Exemplo n.º 21
0
def is_exec(request):
    """
    Sets a flag for whether a user is a chapter exec member
    """
    user = request.user

    if user.is_staff or user.is_superuser:
        return {'is_exec': True}

    ctx = {'is_exec': False}

    if user.is_authenticated():
        cache_key = "is_exec_%s" % user.username
        is_exec = cache.get(cache_key)
        if is_exec is None:
            # wrapped "get" since this needs sample data to be loaded
            execlist = get_object_or_none(Community, slug='exec')

            if execlist and execlist.user_is_member(user):
                is_exec = True
            else:
                is_exec = False
            cache.set(cache_key, is_exec, 5 * 60)

        ctx['is_exec'] = is_exec
    return ctx
Exemplo n.º 22
0
def evaluation_comment(request, app_id):
    application = get_object_or_404(Application, id=app_id)

    if request.method == 'POST':
        if request.POST.get('key', None):
            key = request.POST.get('key', None)
            comment = request.POST.get('comment', None)

            if comment:
                evalcomment, created = EvaluationComment.objects.get_or_create(
                    evaluation=application.evaluation, key=key)
                evalcomment.comment = comment
                evalcomment.save()
            else:
                comment = get_object_or_none(EvaluationComment,
                                             evaluation=application.evaluation,
                                             key=key)
                if comment:
                    comment.delete()
            return HttpResponse("success")
    elif request.is_ajax():
        comments = EvaluationComment.objects.filter(
            evaluation=application.evaluation)
        json = serializers.get_serializer('json')()
        response = HttpResponse(mimetype='application/json')
        json.serialize(comments, stream=response)
        return response
    return HttpResponse("invalid")
Exemplo n.º 23
0
def get_organization_role(user):
    ctx = {
        'role_chapter_member': False,
        'role_is_exec': False,
        'role_is_president': False,
        'role_is_jf': False,
        'role_is_aps': False,
        'role_is_office': False,
        'role_is_alumni': False,
        'role_is_guest': True
    }

    if user.is_authenticated():
        ctx['role_is_guest'] = False

        cache_key = "role_breakdown_%s" % user.username
        roles = cache.get(cache_key)
        if roles is None:
            # wrapped "get" since this needs sample data to be loaded
            execlist = get_object_or_none(Community, slug='exec')
            if execlist and execlist.user_is_member(user):
                ctx['role_is_exec'] = True

            preslist = get_object_or_none(Community, slug='Presidents')
            if preslist and preslist.user_is_member(user):
                ctx['role_is_president'] = True
            else:
                preslist = get_object_or_none(Community,
                                              slug='citynetworkpres')
                if preslist and preslist.user_is_member(user):
                    ctx['role_is_president'] = True

            officelist = get_object_or_none(BaseGroup, slug='natloffice')
            if officelist and officelist.user_is_member(user):
                ctx['role_is_office'] = True

            if execlist and not ctx['role_is_exec']:
                alumni = GroupMemberRecord.objects.filter(user=user,
                                                          group=execlist)
                if alumni.count():
                    ctx['role_is_alumni'] = True

            cache.set(cache_key, ctx, 5 * 60)

    return ctx
Exemplo n.º 24
0
def phone_delete(sender, instance, **kwargs):
    if hasattr(instance.content_object, 'user2'):
        memberprofile = instance.content_object
        user = memberprofile.user2
        
        profile = get_object_or_none(TrackingProfile, user=user)
        if not profile:
            return
    
        profile_pickle = pickle.dumps(profile.to_dict())

        phone = get_object_or_none(Phone, myewbphone=instance)
        if phone:
            phone.delete()
        
            history = ProfileHistory.objects.create(profile=profile,
                                                    editor=user,
                                                    revision=profile_pickle)
Exemplo n.º 25
0
def flag_view_ajax(request, flag_id):
    if not perm(request):
        return HttpResponseRedirect(reverse('rolodex_login'))

    flag = get_object_or_none(ProfileFlag, id=flag_id)
    
    return render_to_response("rolodex/flag_view_ajax.html",
                              {'flag': flag},
                              context_instance=RequestContext(request))
Exemplo n.º 26
0
def badge_view_ajax(request, badge_id):
    if not perm(request):
        return HttpResponseRedirect(reverse('rolodex_login'))

    badge = get_object_or_none(ProfileBadge, id=badge_id)
    
    return render_to_response("rolodex/badge_view_ajax.html",
                              {'badge': badge},
                              context_instance=RequestContext(request))
Exemplo n.º 27
0
def note_view_ajax(request, note_id):
    if not perm(request):
        return HttpResponseRedirect(reverse('rolodex_login'))

    note = get_object_or_none(Interaction, id=note_id)
    
    return render_to_response("rolodex/note_view_ajax.html",
                              {'note': note},
                              context_instance=RequestContext(request))
Exemplo n.º 28
0
def get_organization_role(user):
    ctx = {'role_chapter_member': False,
           'role_is_exec': False,
           'role_is_president': False,
           'role_is_jf': False,
           'role_is_aps': False,
           'role_is_office': False,
           'role_is_alumni': False,
           'role_is_guest': True}
    
    if user.is_authenticated():
        ctx['role_is_guest'] = False
        
        cache_key = "role_breakdown_%s" % user.username
        roles = cache.get(cache_key)
        if roles is None:
            # wrapped "get" since this needs sample data to be loaded 
            execlist = get_object_or_none(Community, slug='exec')
            if execlist and execlist.user_is_member(user):
               ctx['role_is_exec'] = True
                
            preslist = get_object_or_none(Community, slug='Presidents')
            if preslist and preslist.user_is_member(user):
                ctx['role_is_president'] = True
            else:
                preslist = get_object_or_none(Community, slug='citynetworkpres')
                if preslist and preslist.user_is_member(user):
                    ctx['role_is_president'] = True
            
            officelist = get_object_or_none(BaseGroup, slug='natloffice')
            if officelist and officelist.user_is_member(user):
                ctx['role_is_office'] = True
            
            if execlist and not ctx['role_is_exec']:
                alumni = GroupMemberRecord.objects.filter(user=user,
                                                          group=execlist)
                if alumni.count():
                    ctx['role_is_alumni'] = True
            
            cache.set(cache_key, ctx, 5*60)

    return ctx
Exemplo n.º 29
0
def note_unpin(request, note_id):
    if not perm(request):
        return HttpResponseRedirect(reverse('rolodex_login'))

    note = get_object_or_none(Interaction, id=note_id)
    
    if note.pinned:
        note.pinned = False
        note.save()
        
    request.user.message_set.create(message='Un-pinned')
    return HttpResponseRedirect(reverse('rolodex_view', kwargs={'profile_id': note.profile.id}))
Exemplo n.º 30
0
def parse_recipient(recipient):
    pattern = '(?:.*<)?([^>@]*)@my.ewb.ca(?:>.*)?'      # TODO: un-hardcode the my.ewb.ca domain!
    slug = re.findall(pattern, recipient)
    
    if len(slug):
        group = get_object_or_none(BaseGroup, slug=slug[0])
        
        if group:
            return group
        
    # TODO: modify to handle private-message replies
    raise BounceException("I wasn't able to figure out which group you want to post to! %s didn't make any sense to me." % recipient)
Exemplo n.º 31
0
    def remove_resource(self, resource, user=None):
        m = get_object_or_none(Membership, collection=self, resource=resource)

        if m:
            orderings = Membership.objects.filter(collection=self, ordering__gt=m.ordering)
            m.delete()

            for o in orderings:
                o.ordering = o.ordering - 1
                o.save()

            Activity.objects.create(resource=resource, user=user, activity_type="decollect", content_object=self)
        return True
Exemplo n.º 32
0
def email_update(sender, instance, **kwargs):
    if not instance.verified:
        return

    user = instance.user
    profile = get_object_or_none(TrackingProfile, user=user)
    
    if not profile:
        return
    
    profile_pickle = pickle.dumps(profile.to_dict())

    # this address is already in the rolodex; just update it
    email = get_object_or_none(Email, myewbemail=instance)

    if email:
        email.email = instance.email
        email.save()

    else:
        email = get_object_or_none(Email, email=instance.email)
        
        # or, is the address there, but not linked to the myEWB object?
        if email:
            email.myewbemail=instance
            email.save()
        
        # add new address to rolodex
        else:
            email = Email.objects.create(email=instance.email,
                                         profile = profile,
                                         myewbemail=instance)
                                     
    if instance.primary:
        profile.update_email(instance.email)
    
    history = ProfileHistory.objects.create(profile=profile,
                                            editor=user,
                                            revision=profile_pickle)
Exemplo n.º 33
0
 def clean(self, value):
     value = super(AutocompleteField, self).clean(value)
     
     obj = get_object_or_none(self.model, name=value)
     if obj:
         return obj
     
     if self.create:
         obj = self.model(name=value)
         obj.save()
         return obj
     else:
         raise forms.ValidationError("Invalid choice")
Exemplo n.º 34
0
 def update_phone(self, phone):
     if phone:
         phone_obj = get_object_or_none(Phone, phone=phone, profile=self)
         if not phone_obj:
             phone_obj = Phone.objects.create(phone=phone,
                                              profile=self,
                                              updated=datetime.now())
         if not phone_obj.primary:
             other_phones = Phone.objects.filter(profile=self)
             for e in other_phones:
                 e.primary = False
                 e.save()
             phone_obj.primary = True
             phone_obj.save()
Exemplo n.º 35
0
 def update_email(self, email):
     if email:
         email_obj = get_object_or_none(Email, email=email, profile=self)
         if not email_obj:
             email_obj = Email.objects.create(email=email,
                                              profile=self,
                                              updated=datetime.now())
         if not email_obj.primary:
             other_emails = Email.objects.filter(profile=self)
             for e in other_emails:
                 e.primary = False
                 e.save()
             email_obj.primary = True
             email_obj.save()
Exemplo n.º 36
0
def email_forwards_delete(request, group_slug, fwd_id):
    network = get_object_or_404(Network, slug=group_slug)
    # no need for security check: the get_ob ject_or_404 will fail since it's
    # impossible to create a non-chapter-forward in the first place
    
    if request.method == "POST":
        fwd = get_object_or_404(EmailForward, id=fwd_id, network=network)
        email = get_object_or_none(EmailAddress, email=fwd.address)
        fwd.delete()
        if email:
            email.delete()
            
        request.user.message_set.create(message="Deleted")  #should template-ize?
            
    return HttpResponseRedirect(reverse('email_forwards_index', kwargs={'group_slug': group_slug}))
Exemplo n.º 37
0
        def newf(request, *args, **kwargs):            
            user = request.user
                        
            if user.has_module_perms("base_groups"):
                return f(request, *args, **kwargs)

            if not user.is_authenticated():
                # deny access - would set this to redirect
                # to a custom template eventually
                return render_to_response('denied.html', context_instance=RequestContext(request))
            
            execlist = get_object_or_none(Community, slug='exec')
            if execlist and execlist.user_is_member(user):
                return f(request, *args, **kwargs)
                
            return render_to_response('denied.html', context_instance=RequestContext(request))
Exemplo n.º 38
0
def email_forwards_delete(request, group_slug, fwd_id):
    network = get_object_or_404(Network, slug=group_slug)
    # no need for security check: the get_ob ject_or_404 will fail since it's
    # impossible to create a non-chapter-forward in the first place

    if request.method == "POST":
        fwd = get_object_or_404(EmailForward, id=fwd_id, network=network)
        email = get_object_or_none(EmailAddress, email=fwd.address)
        fwd.delete()
        if email:
            email.delete()

        request.user.message_set.create(
            message="Deleted")  #should template-ize?

    return HttpResponseRedirect(
        reverse('email_forwards_index', kwargs={'group_slug': group_slug}))
Exemplo n.º 39
0
def create_queryset(user):
    # ideally we'd do it this way, and not mention specific models here
    # (instead doing visibility checking in their respective search_index.py files),
    # but there's no way to pass a user into serach_index.load_all_queryset.  yet.
    #
    # return RelatedSearchQuerySet()

    qs = RelatedSearchQuerySet().load_all_queryset(
        GroupTopic, GroupTopic.objects.visible(user))
    qs = qs.load_all_queryset(Whiteboard, Whiteboard.objects.visible(user))
    qs = qs.load_all_queryset(Event, Event.objects.visible(user))

    # TODO: centralize this somewhere?
    execlist = get_object_or_none(Community, slug='exec')
    if execlist and execlist.user_is_member(user, True):
        qs = qs.load_all_queryset(Activity, Activity.objects.all())
    else:
        qs = qs.load_all_queryset(Activity, Activity.objects.none())

    return qs
Exemplo n.º 40
0
def lookup_code(request):
    if request.user.has_module_perms('conference'):
        if request.method == 'POST' and request.POST.get('code', None):
            code = get_object_or_none(ConferenceCode,
                                      code=request.POST['code'])

            if code and code.expired:
                return HttpResponse("voided")
            elif code:
                reg = ConferenceRegistration.objects.filter(code=code,
                                                            cancelled=False)
                if reg.count():
                    return HttpResponse("used")
                else:
                    return HttpResponse("available")
            else:
                if ConferenceCode.isValid(request.POST['code']):
                    return HttpResponse("not issued")
                else:
                    return HttpResponse("invalid code")
    return HttpResponse("lookup error")
Exemplo n.º 41
0
def filters_save(request):
    if request.method == 'POST':
        kwargs = {}
        kwargs['user'] = request.user

        if request.POST.get('deadline', None) and request.POST.get(
                'deadline2', None):
            kwargs['deadline_comparison'] = request.POST['deadline']
            kwargs['deadline'] = request.POST['deadline2']

        if request.POST.get('urgency', None) and request.POST.get(
                'urgency2', None):
            kwargs['urgency_comparison'] = request.POST['urgency']
            kwargs['urgency'] = request.POST['urgency2']

        if request.POST.get('skills', None) and request.POST.get(
                'skills2', None):
            kwargs['skills_comparison'] = request.POST['skills']

        if request.POST.get('location', None) and request.POST.get(
                'location2', None):
            kwargs['location_comparison'] = request.POST['location']

        if request.POST.get('time_required', None) and request.POST.get(
                'time_required2', None):
            kwargs['time_required_comparison'] = request.POST['time_required']
            kwargs['time_required'] = request.POST['time_required2']

        if request.POST.get('search', None):
            kwargs['search'] = request.POST['search']

        filter = JobFilter.objects.filter(**kwargs)

        skills = []
        for s in request.POST.getlist('skills2'):
            skill = get_object_or_none(Skill, id=s)
            if skill:
                skills.append(skill)
                filter = filter.filter(skills=skill)

        if request.POST.get('skills', None) and request.POST.get(
                'skills2', None):
            filter = filter.exclude(~Q(skills__in=skills))

        locations = []
        for l in request.POST.getlist('location2'):
            location = get_object_or_none(Location, id=l)
            if location:
                locations.append(location)
                filter = filter.filter(location=location)

        if request.POST.get('location', None) and request.POST.get(
                'location2', None):
            filter = filter.exclude(~Q(location__in=locations))

        if filter.count():
            filter = filter[0]
        else:
            filter = JobFilter.objects.create(**kwargs)
            for s in skills:
                filter.skills.add(s)
            for l in locations:
                filter.location.add(l)

        filter.name = request.POST.get('name', '')
        if request.POST.get('email', None):
            filter.email = True
        else:
            filter.email = False

        filter.save()

        return HttpResponse("success")

    else:
        return render_to_response("jobboard/filters_save.html", {},
                                  context_instance=RequestContext(request))
Exemplo n.º 42
0
 def done(self, request, cleaned_data):
     
     #product = Product.objects.get(sku=cleaned_data['products'])
     address = get_object_or_none(Address, pk=cleaned_data['address'])
     if not address or  not request.user.get_profile() == address.content_object:
         address = Address()
         address.street = '366 Adelaide'
         address.city = 'Toronto'
         address.province = 'ON'
         address.postal_code = 'M5V1R9'
         address.country = 'CA'
     
     # stuff necessary values into dictionary... to be encoded.
     param = {'trnCardOwner': cleaned_data['billing_name'],
              'trnCardNumber': cleaned_data['cc_number'],
              'trnExpMonth': cleaned_data['cc_expiry'].split('/')[0],
              'trnExpYear': cleaned_data['cc_expiry'].split('/')[1],
              'ordName': cleaned_data['billing_name'],
              'ordEmailAddress': cleaned_data['email'],
              'ordPhoneNumber': cleaned_data['phone'],
              'ordAddress1': address.street,
              'ordAddress2': '',
              'ordCity':address.city,
              'ordProvince': address.province,
              'ordPostalCode': address.postal_code,
              'ordCountry': address.country,
              'requestType': 'BACKEND',
              'trnOrderNumber': '%s' % int(time.time()),
              'merchant_id': settings.TD_MERCHANT_ID,
             }
     
     product_count = 1
     total_cost = 0
     product_list = []
     if isinstance(cleaned_data['products'],ListType):
         for sku in cleaned_data['products']:
             product = Product.objects.get(sku=sku)
             param['prod_id_%s' % product_count] = product.sku
             param['prod_quantity_%s' % product_count] = '1'
             param['prod_name_%s' % product_count] = product.name
             param['prod_cost_%s' % product_count] = product.amount
             total_cost += Decimal(product.amount)
             product_count = product_count + 1
             product_list.append(product)
     else:
         product = Product.objects.get(sku=cleaned_data['products'])
         param['prod_id_1'] = product.sku
         param['prod_quantity_1'] = '1'
         param['prod_name_1'] = product.name
         param['prod_cost_1'] = product.amount
         total_cost += Decimal(product.amount)
         product_list.append(product)
     
     param['trnAmount'] = total_cost
         
     if total_cost > 0:
         #param = [fix_encoding(p) for p in param]
         fixed_param = {}
         for x, y in param.items():
             fixed_param[x] = fix_encoding(y)
         encoded = urllib.urlencode(fixed_param)
         
         # push the transaction to the bank
         handle = urllib.urlopen(settings.TD_MERCHANT_URL,
                                 encoded)
         result = handle.read().split('&')
         
         # parse the result string back into a dictionary
         results = {}
         for r in result:
             r2 = r.split('=')
             r2[0] = urllib.unquote_plus(r2[0])
             r2[1] = urllib.unquote_plus(r2[1])
             results[r2[0]] = r2[1]
         
         # TODO: any other processing/recordkeeping we want to do?
         # do I want to save this into the db?
         p = Payment()
         p.cc_type = cleaned_data['cc_type']
         p.billing_name=cleaned_data['billing_name']
         p.phone=cleaned_data['phone']
         p.email=cleaned_data['email']
         p.approved=results['trnApproved']
         p.response="\n".join(result)
         p.amount = total_cost
         p.save()
         for prod in product_list:
             p.products.add(prod)
         p.save()
         
         # return based on value
         if results['trnApproved'] == '1':
             
             # send receipt
             message = loader.get_template("creditcard/receipt.html")
             c = Context({'name': cleaned_data['billing_name'],
                          'date': datetime.today(),
                          'txid': results['trnOrderNumber'],
                          'product': product_list,
                          'amount': total_cost})
             body = message.render(c)
 
             send_mail(subject='Credit Card Receipt',
                       txtMessage=body,
                       htmlMessage=None,
                       fromemail='Engineers Without Borders Canada <*****@*****.**>',
                       recipients=[cleaned_data['email']],
                       use_template=False)
         
             # return success
             return (True, results['trnId'], results['trnOrderNumber'])
         else:
             return (False, results['messageText'])
     else:
         return (True, '00000', '00000')
Exemplo n.º 43
0
    def save(self):
        # username = self.cleaned_data["username"]
        firstname = self.cleaned_data['firstname']
        lastname = self.cleaned_data['lastname']
        email = self.cleaned_data["email"]
        password = self.cleaned_data["password1"]
        
        username = User.objects.make_random_password()     # not a password per se, just a random string
        while User.objects.filter(username=username).count() > 0:   # ensure uniqueness
            username = User.objects.make_random_password()

        if self.cleaned_data["confirmation_key"]:
            from friends.models import JoinInvitation # @@@ temporary fix for issue 93 (-- Pinax comment)
            try:
                join_invitation = JoinInvitation.objects.get(confirmation_key = self.cleaned_data["confirmation_key"])
                confirmed = True
            except JoinInvitation.DoesNotExist:
                confirmed = False
        else:
            confirmed = False

        # @@@ clean up some of the repetition below -- DRY! (-- Pinax comment)

        add_email = None
        if confirmed:
            if email == join_invitation.contact.email:
                new_user = User.objects.create_user(username, email, password)
                join_invitation.accept(new_user) # should go before creation of EmailAddress below
                new_user.message_set.create(message=ugettext(u"Your email address has already been verified"))
                # already verified so can just create
                EmailAddress(user=new_user, email=email, verified=True, primary=True).save()
            else:
                new_user = User.objects.create_user(username, "", password)      
                join_invitation.accept(new_user) # should go before creation of EmailAddress below
                if email:
                    new_user.message_set.create(message=ugettext(u"Confirmation email sent to %(email)s") % {'email': email})
                    add_email = email
        else:
            try:
                new_user = User.objects.get(email=email, is_bulk=True)
                signals.listupgrade.send(sender=new_user, user=new_user)
            except User.DoesNotExist:
                new_user = User.objects.create_user(username, "", password)
                signals.signup.send(sender=new_user, user=new_user)      
            
            if email:
                # new_user.message_set.create(message=ugettext(u"Confirmation email sent to %(email)s") % {'email': email})
                add_email = email
        profile = new_user.get_profile()
        profile.first_name = firstname
        profile.last_name = lastname
        profile.save()
        
        new_user.first_name = firstname
        new_user.last_name = lastname

        if settings.ACCOUNT_EMAIL_VERIFICATION:
            new_user.is_active = False
        
        new_user.save()
        
        # needs to be moved down after user is saved, so that the email 
        # confirmation message has the peron's actual name in it 
        if add_email:
            # email already exists in system? re-send verification...
            email_address = get_object_or_none(EmailAddress, user=new_user, email=add_email)
            if email_address:
                EmailConfirmation.objects.send_confirmation(email_address,
                                                            template="emailconfirmation/newuser.txt")
                
            # otherwise, create a new email (verification will be sent automatically)
            else:
                EmailAddress.objects.add_email(new_user, add_email,
                                               confirmation_template="emailconfirmation/newuser.txt")
        
        if self.cleaned_data['chapter'] != "none" and self.cleaned_data['chapter'] != "":
            chapter = get_object_or_404(Network, slug=self.cleaned_data['chapter'])
            chapter.add_member(new_user)
            
        return username, password # required for authenticate()
Exemplo n.º 44
0
def send_sms(request, session=None):
    if not request.user.has_module_perms("conference"):
        return HttpResponseRedirect(reverse('conference_schedule'))

    s = get_object_or_none(ConferenceSession, id=session)
    response = None

    if request.method == 'POST':
        api = settings.TWILIO_API_VERSION
        sid = settings.TWILIO_ACCOUNT_SID
        token = settings.TWILIO_ACCOUNT_TOKEN

        form = ConferenceSmsForm(request.POST)

        if s:
            del (form.fields['grouping'])

        if form.is_valid():
            success = 0
            failed = 0

            registrations = []
            if s:
                registrations = ConferenceRegistration.objects.filter(
                    user__in=list(s.attendees.all()))
            elif form.cleaned_data['grouping'] == 'all':
                registrations = ConferenceRegistration.objects.all()
            elif form.cleaned_data['grouping'] == 'internal':
                registrations = ConferenceRegistration.objects.filter(~Q(
                    type__contains='day'))
            elif form.cleaned_data['grouping'] == 'external':
                registrations = ConferenceRegistration.objects.filter(
                    type__contains='day')
            elif form.cleaned_data['grouping'] == 'alumni':
                registrations = ConferenceRegistration.objects.filter(
                    type__contains='alumni')
            elif form.cleaned_data['grouping'] == 'hotel':
                registrations = ConferenceRegistration.objects.filter(
                    Q(type__contains='single') | Q(type__contains='double'))
            elif form.cleaned_data['grouping'] == 'nohotel':
                registrations = ConferenceRegistration.objects.filter(
                    Q(type__contains='nohotel') | Q(type__contains='alumni'))
            elif form.cleaned_data['grouping'] == 'nohotel-all':
                registrations = ConferenceRegistration.objects.filter(
                    ~Q(type__contains='single'), ~Q(type__contains='double'))

            registrations = registrations.filter(cancelled=False,
                                                 cellphone__isnull=False,
                                                 cellphone_optout__isnull=True)

            if not s and form.cleaned_data['grouping'] == 'all':
                registrations = list(registrations)
                registrations.extend(
                    list(
                        ConferenceCellNumber.objects.filter(
                            cellphone_optout__isnull=True)))

            # Twilio
            account = twilio.Account(sid, token)
            thread_list = {}
            for r in registrations:
                if r.cellphone_optout or not r.cellphone:
                    continue

                fromnumber = r.cellphone_from
                if not fromnumber:
                    numbers = ConferencePhoneFrom.objects.order_by('accounts')
                    fromnumber = numbers[0]
                    r.cellphone_from = fromnumber
                    r.save()
                    fromnumber.accounts = fromnumber.accounts + 1
                    fromnumber.save()

                d = {
                    'From': fromnumber.number,  #  '415-599-2671',
                    'To': r.cellphone,
                    'Body': form.cleaned_data['message']
                }

                if fromnumber.number not in thread_list:
                    thread_list[fromnumber.number] = []
                thread_list[fromnumber.number].append(d)

            try:
                for i in thread_list:
                    t = Thread(target=do_send_sms, args=(thread_list[i], ))
                    t.start()

            except Exception, e:
                #response = e.read()
                failed = failed + 1
            else:
                success = success + 1

            response = ""
            if failed:
                response = "%s<br/>Messages queued for sending, but some errors encountered =(" % response
            else:
                response = "%s<br/>Messages queued for sending!" % response
            """
            # ThunderTexting, simple GET
            import urllib
            try:
                params = {}
                params['CellNumber'] = '000-000-0000'
                params['MessageBody'] = form.cleaned_data['message']
                params['AccountKey'] = 'PPD843rw14'
                
                encoded = urllib.urlencode(params)
                handle = urllib.urlopen("http://thundertexting.com/sendsms.aspx?%s" % encoded)
                response = handle.read()
                #response = "http://thundertexting.com/sendsms.aspx?%s" % encoded
                
            except Exception, e:
                response = r.read()
            """
            """
            # ThunderTexting, SOAP
            from suds.client import Client
            try:
                url = 'http://thundertexting.com/SendSMS.asmx?WSDL'
                client = Client(url)
                
                response = client.service.SendMessageWithReference(CellNumber='000-000-0000',
                                                                   MessageBody=form.cleaned_data['message'],
                                                                   AccountKey=settings.THUNDERTEXTING_KEY,
                                                                   Reference='test1')
            except Exception, e:
                response = r.read()
            """
            """
            # ThunderTexting, SOAP batch send
            try:
                from suds.client import Client
                url = 'http://thundertexting.com/SendSMS.asmx?WSDL'
                client = Client(url)

                numbers = []
                for r in registrations:
                    if r.cellphone and not r.cellphone_optout:
                        numbers.append(r.cellphone)
                
                # cell number should already be normalized to 123-456-7890
                response = client.service.SendBulkMessage(CellNumbers=numbers,
                                                          MessageBody=form.cleaned_data['message'],
                                                          AccountKey=settings.THUNDERTEXTING_KEY,
                                                          Reference=datetime.now())
            except Exception, e:
                response = r.read()
            """
            """
Exemplo n.º 45
0
def email_event(request, eventid):
    """
    Lets you email an event reminder.  Email goes to the parent group (if one exists).
    Later this would be great for "email all RSVPs" and such.
    """
    event = get_object_or_404(Event, id=eventid)
    parent = event.content_object

    if not helpers.is_visible(request.user, parent):
        return render_to_response('denied.html',
                                  context_instance=RequestContext(request))

    if BaseGroup not in parent.__class__.__bases__:
        request.user.message_set.create(
            message="You can only send emails to group-owned events.")
        return HttpResponseRedirect(reverse(event.get_absolute_url()))

    if not parent.user_is_admin(request.user):
        request.user.message_set.create(
            message="You cannot send emails to the parent group.")
        return HttpResponseRedirect(reverse(event.get_absolute_url()))

    confirm = None
    if request.method == 'POST':
        form = EventEmailForm(request.POST, user=request.user, group=parent)

        if form.is_valid():
            if request.POST.get('confirmed', None) and request.POST.get(
                    'action', 'back') == "send":
                # extra security check that sender isn't forged.
                # can't hurt...
                # copied from group_topics.views.topics.new_topic - can we combine?
                sender_valid = False
                if parent.user_is_admin(request.user):
                    if form.cleaned_data['sender'] == parent.from_email:
                        sender_valid = True
                        sender = '"%s" <%s>' % (parent.from_name,
                                                parent.from_email)

                    elif get_object_or_none(
                            EmailAddress, email=form.cleaned_data['sender']
                    ) in request.user.get_profile().email_addresses():
                        sender_valid = True
                        sender = '"%s %s" <%s>' % (request.user.get_profile(
                        ).first_name, request.user.get_profile().last_name,
                                                   form.cleaned_data['sender'])

                    elif request.user.is_staff and form.cleaned_data[
                            'sender'] == "*****@*****.**":
                        sender_valid = True
                        sender = '"EWB-ISF Canada" <*****@*****.**>'

                # and this is all copied from group_topics.models.GroupTopic.send_email ... =(
                tmpl = loader.get_template("email_template.html")
                c = Context({
                    'group': parent,
                    'title': form.cleaned_data['subject'],
                    'body': form.cleaned_data['body'],
                    'topic_id': None,
                    'event': event,
                    'attachments': None
                })
                message = tmpl.render(c)

                parent.send_mail_to_members(form.cleaned_data['subject'],
                                            message,
                                            sender=sender)

                request.user.message_set.create(message="Email sent.")
                return HttpResponseRedirect(event.get_absolute_url())

            if not request.POST.get('action', None):
                confirm = request.POST

    else:
        form = EventEmailForm(user=request.user, group=parent)

    return render_to_response(
        'events/email.html',
        {
            'event': event,
            'form': form,
            'confirm': confirm
        },
        context_instance=RequestContext(request),
    )
Exemplo n.º 46
0
def new_topic(request, group_slug=None, bridge=None):
    is_member = False
    group = None
    if group_slug is None:
        group_slug = "ewb"

    group = get_object_or_404(BaseGroup, slug=group_slug)
    is_member = group.user_is_member(request.user, admin_override=True)

    if not group.is_visible(request.user):
        return HttpResponseForbidden()

    attach_count = 0
    if request.method == "POST":
        if not request.user.is_authenticated():
            return HttpResponseForbidden()
        try:
            attach_count = int(request.POST.get("attach_count", 0))
        except ValueError:
            attach_count = 0

        if group.slug == "ewb" or is_member:
            # has been previewed.  mark it as good to go!
            if request.POST.get("previewed", None) and request.POST.get(
                    "postid", None):
                topic = GroupTopic.objects.get(id=request.POST['postid'],
                                               creator=request.user)
                if topic.pending:
                    topic.pending = False
                    topic.save()

                    # extra security check that sender isn't forged.
                    # can't hurt...
                    sender_valid = False
                    if group.user_is_admin(request.user) and request.POST.get(
                            'sender', None):
                        if request.POST['sender'] == group.from_email:
                            sender_valid = True
                            sender = '"%s" <%s>' % (group.from_name,
                                                    group.from_email)

                        elif get_object_or_none(
                                EmailAddress, email=request.POST['sender']
                        ) in request.user.get_profile().email_addresses():
                            sender_valid = True
                            sender = '"%s %s" <%s>' % (
                                request.user.get_profile().first_name,
                                request.user.get_profile().last_name,
                                request.POST['sender'])

                        elif request.user.is_staff and request.POST[
                                'sender'] == "*****@*****.**":
                            sender_valid = True
                            sender = '"EWB-ISF Canada" <*****@*****.**>'

                    if topic.send_as_email:
                        if sender_valid:
                            request.user.message_set.create(
                                message=escape("Sent as %s" % sender))
                            topic.send_email(sender=sender)
                        else:
                            request.user.message_set.create(
                                message="Unable to send email.")

                    # redirect out.
                    request.user.message_set.create(
                        message=_("You have started the topic %(topic_title)s")
                        % {"topic_title": topic.title})

                else:
                    # probably double-clicked the submit button and this is the dupe request...
                    pass

                return HttpResponseRedirect(topic.get_absolute_url())

            # confirmation was cancelled, so delete the temp post and bump back to edit screen
            topic = None
            if request.POST.get("goback", None) and request.POST.get(
                    "postid", None):
                topic = get_object_or_none(GroupTopic,
                                           id=request.POST['postid'],
                                           pending=True,
                                           creator=request.user)

            if topic:
                topic_form = GroupTopicForm(instance=topic,
                                            user=request.user,
                                            group=group)
                attach_forms = []
                topic.delete()

            # validate form and show preview...
            else:
                topic_form = GroupTopicForm(request.POST,
                                            user=request.user,
                                            group=group)
                attach_forms = [
                    AttachmentForm(request.POST,
                                   request.FILES,
                                   prefix=str(x),
                                   instance=Attachment())
                    for x in range(0, attach_count)
                ]

                # do not take blank attachment forms into account
                for af in attach_forms:
                    if not af.is_valid() and not af['attachment_file'].data:
                        attach_forms.remove(af)
                        attach_count = attach_count - 1

                # all good.  save it!
                if topic_form.is_valid() and all([
                        af.is_valid() for af in attach_forms
                ]) and not request.POST.get("goback", None):
                    # save the post but mark it as "pending".... and display a confirmation.
                    topic = topic_form.save(commit=False)
                    if group:
                        group.associate(topic, commit=False)
                    topic.creator = request.user
                    topic.pending = True
                    topic.save()

                    # save the attachments.
                    # We need the "Topic" object in order to retrieve attachments properly
                    # since other functions only get the Topic object
                    base_topic = GroupTopic.objects.get(id=topic.id)
                    attachments = []
                    for af in attach_forms:
                        attachment = af.save(request, base_topic)
                        attachments.append(
                            af.cleaned_data['attachment_file'].name)

                    sender = None
                    if topic_form.cleaned_data.get('send_as_email', None):
                        sender = topic_form.cleaned_data.get('sender', None)

                    is_large_group = False
                    if group.members.count() > 50:
                        is_large_group = True

                    return render_to_response(
                        "topics/preview.html", {
                            "group": group,
                            "topic": topic,
                            "is_member": is_member,
                            "sender": sender,
                            "attachments": attachments,
                            "is_large_group": is_large_group,
                        },
                        context_instance=RequestContext(request))
        else:
            # if they can't start a topic, why are we still loading up a form?
            request.user.message_set.create(message=_(
                "You are not a member and so cannot start a new topic"))
            topic_form = GroupTopicForm(instance=GroupTopic())
            attach_forms = [
                AttachmentForm(prefix=str(x), instance=Attachment())
                for x in range(0, attach_count)
            ]

    else:
        topic_form = GroupTopicForm(instance=GroupTopic(),
                                    user=request.user,
                                    group=group)
        attach_forms = []

    return render_to_response("topics/new_topic.html", {
        "group": group,
        "topic_form": topic_form,
        "attach_forms": attach_forms,
        "attach_count": attach_count,
        "is_member": is_member,
    },
                              context_instance=RequestContext(request))
Exemplo n.º 47
0
def login(request, details=False):
    if request.method == 'POST':
        if request.POST.get('user', None) and request.POST.get('password', None) and \
        (request.META['REMOTE_ADDR'] == '127.0.0.1' or request.META['REMOTE_ADDR'] == '69.77.162.110'):

            username = request.POST['user']
            password = request.POST['password']

            if User.objects.filter(username=username).count() == 0:
                if EmailAddress.objects.filter(email=username,
                                               verified=True).count() == 0:
                    if User.objects.filter(
                            google_username=username).count() == 0:
                        return HttpResponse("false")
                    else:
                        u = User.objects.get(google_username=username)
                        username = u.username
                else:
                    email = EmailAddress.objects.get(email=username,
                                                     verified=True)
                    username = email.user.username

            user = authenticate(username=username, password=password)
            if user and user.is_active:

                if request.POST.get('group', None):
                    slug = request.POST['group']
                    group = get_object_or_none(BaseGroup, slug=slug)

                    if not group or not group.user_is_member(user):
                        return HttpResponse("false")

                if request.POST.get('level', None):
                    level = request.POST['level']
                    if level == 'admin':
                        if not user.is_staff:
                            return HttpResponse("false")
                    elif level == 'email':
                        if not user.google_username:
                            return HttpResponse("false")
                    else:
                        return HttpResponse("false")

                if details:
                    response = {}
                    response['userid'] = str(user.id)
                    response['email'] = user.email
                    response['firstname'] = user.first_name
                    response['lastname'] = user.last_name
                    response['myewbprofilelink'] = "http://%s%s" % (
                        Site.objects.get_current().domain,
                        user.get_profile().get_absolute_url())
                    #response['myewbprofilephoto']
                    response['phonenumber'] = user.get_profile().default_phone(
                    ).number
                    response['addresslineone'] = user.get_profile(
                    ).default_address().street
                    response['city'] = user.get_profile().default_address(
                    ).city
                    response['postalcode'] = user.get_profile(
                    ).default_address().postal_code
                    response['province'] = user.get_profile().default_address(
                    ).province
                    response['country'] = user.get_profile().default_address(
                    ).country
                    response['preferredlanguage'] = user.get_profile().language

                    avatars = Avatar.objects.filter(
                        user=user).order_by('-primary')
                    if avatars.count() > 0:
                        avatar = avatars[0]
                        response['myewbprofilephoto'] = "http://%s%s" % (
                            Site.objects.get_current().domain,
                            avatar.avatar_url(200))

                    if user.get_profile().get_chapter():
                        response['chapter'] = user.get_profile().get_chapter(
                        ).name

                    return JsonResponse(response)
                else:
                    return HttpResponse(str(user.id))

            return HttpResponse("false")

    return HttpResponseForbidden()