Пример #1
0
def revert_to_version(request, document_id, version_id):
    old_version = Version.objects.get(pk = version_id)
    document = Document.objects.get(pk = document_id)
    new_version = Version(document=document,title=old_version.title, contents=old_version.contents, owner=request.user)
    new_version.save()

    return version_response(request, new_version)    
Пример #2
0
def add_menu_item(request):
    check_perm(request.user, request.community, 'administrate homepage')
    owner_group = request.community
    owner_user = request.user

    choices = [(None, _('<No parent>'))]
    choices.extend([(x.id, x.title)
                    for x in MenuItem.objects.filter(group=owner_group,
                                                     parent__isnull=True)])

    class MenuForm(django.forms.Form):
        parent = django.forms.ChoiceField(required=False, choices=choices)
        title = django.forms.CharField(required=True, label=_('Title'))
        contents = django.forms.CharField(required=False,
                                          widget=django.forms.Textarea,
                                          label=_('Text'))

    if request.POST:
        form = MenuForm(request.POST)

        if form.is_valid():
            from curia.documents.models import Document, Version
            from curia.authentication import grant_access, get_public_user

            # create document
            document = Document.objects.create(owner_group=owner_group,
                                               owner_user=owner_user,
                                               is_presentation=False)
            new_version = Version(document=document,
                                  title=form.cleaned_data['title'],
                                  contents=form.cleaned_data['contents'],
                                  owner=request.user)
            new_version.save()

            # set up access rights
            grant_access(command='view', user=get_public_user(), obj=document)

            # create menu item
            parent = None
            if form.cleaned_data['parent'] != 'None':
                parent = MenuItem.objects.get(pk=form.cleaned_data['parent'])
            MenuItem.objects.create(group=owner_group,
                                    content_type=get_content_type(document),
                                    object_id=document.id,
                                    title=form.cleaned_data['title'],
                                    url=document.get_absolute_url(),
                                    order=0,
                                    parent=parent)

            return HttpResponseRedirect("/")
    else:
        initial = {}
        if MenuItem.objects.count() == 0:
            initial['title'] = _('Home')
        form = MenuForm(initial=initial)

    return render_to_response(request, 'homepage/add_menu_item.html',
                              {'form': form})
Пример #3
0
def add_document(request):
    is_presentation = get_boolean(request,'is_presentation')
    owner_group = None
    owner_user = None
    
    class DocumentForm(django.forms.Form):
        title = django.forms.CharField(max_length=1024, label=_('Title'))
        #labels = django.forms.CharField(required=False, label=_('Labels'))
        contents = django.forms.CharField(required=False, widget = django.forms.Textarea, label=_('Contents'))

    group_id = get_integer(request,'group_id')
    user_id = get_integer(request,'user_id')
    if group_id:    
        owner_group = get_object_or_404_and_check_access(request, Group, pk=group_id, command='add')
        check_access(request.user, obj=owner_group, command='add document')
    else:
        owner_user = get_object_or_404_and_check_access(request, User, pk=user_id, command='add')
        check_access(request.user, obj=owner_user, command='add document')       

    if request.POST:
        form = DocumentForm(request.POST)
        
        if form.is_valid():

            #Handle the document
            if owner_group != None:
                document = Document.objects.create(owner_group=owner_group, owner_user=owner_user, is_presentation=is_presentation)
            else:
                document = Document.objects.create(owner_user=owner_user, is_presentation=is_presentation)

            if document.is_presentation:
                if group == 0:
                    title = owner_user.username + 's Presentation'
                else:
                    owner_group = get_object_or_404_and_check_access(request, Group, pk=group, command='add')
                    title = owner_group.name + 's Presentation'
            else:
                title = form.cleaned_data['title']
            
            new_version = Version(document=document,title=title, contents=strip_p(form.cleaned_data['contents']), owner=request.user)
            new_version.save()
            
            #Handle the labels
            #handle_labels(request,document)

            if document.is_presentation:
                if document.owner_group:
                    return HttpResponseRedirect(document.owner_group.get_absolute_url())
                else:
                    return HttpResponseRedirect(document.owner_user.get_absolute_url())
            return HttpResponseRedirect(document.get_absolute_url())

    else:
        form = DocumentForm()

    return render_to_response(request, 'documents/add.html', {'form':form})
Пример #4
0
def revert_to_version(request, document_id, version_id):
    old_version = Version.objects.get(pk=version_id)
    document = Document.objects.get(pk=document_id)
    new_version = Version(document=document,
                          title=old_version.title,
                          contents=old_version.contents,
                          owner=request.user)
    new_version.save()

    return version_response(request, new_version)
Пример #5
0
def portal(request):
    if request.community == None:
        return render_to_response(request, '404_community.html')

    check_access(request.user, request.community, command='view')
    
    from curia.calendars.models import Event
    from curia.images.models import Image
    import datetime
    today = datetime.date.today()

    events = Event.objects.filter(end_time__gt=today, start_time__lt=today+datetime.timedelta(days=4), owner_group=request.community, deleted=False).order_by('start_time')
    bugs = ''
    if request.user.is_superuser:
        from curia.bugs.models import Bug
        c = Bug.objects.filter(deleted=False).count()
        if c != 0:
            bugs = 'There are %s bugs reported' % c
      
    # select u from User u, MetaUser mu, UserInGroup uig where uig.group_id = VARIABEL and u.id = uig.user_id and mu.user_id = u.id and mu.image is not null order by last_login limit 3

    try:    
        presentation = Document.objects.get(owner_user__isnull=True, owner_group=request.community, is_presentation=True)
    except Document.DoesNotExist:
        # this is a brand new community, so we need to set some initial data

        # create presentation
        presentation = Document.objects.create(owner_user=None, owner_group=request.community, is_presentation=True)
        title = 'Presentation'
        new_version = Version(document=presentation, title=title, contents=_('Welcome!'), owner=request.user)
        new_version.save()
    
    presentation = presentation.get_latest_version().contents
    return render_to_response(request, 'portal.html', 
        {
            'community':request.community,
            'events': events, 
            'news':News.objects.filter(deleted=False).order_by('-creation_time')[:3], 
            'bugs':bugs,
            'random_images':Image.objects.filter(owner_group=request.community, deleted=False).order_by('?')[:6],
            'latest_logged_in':request.community.user_set.order_by('-last_login')[:4],
            'presentation':presentation
        })
Пример #6
0
def add_menu_item(request):
    check_perm(request.user, request.community, 'administrate homepage')
    owner_group = request.community
    owner_user = request.user
    
    choices = [(None, _('<No parent>'))]
    choices.extend([(x.id,x.title) for x in MenuItem.objects.filter(group=owner_group, parent__isnull=True)])
    
    class MenuForm(django.forms.Form):
        parent = django.forms.ChoiceField(required=False, choices=choices)
        title = django.forms.CharField(required=True, label=_('Title'))
        contents = django.forms.CharField(required=False, widget = django.forms.Textarea, label=_('Text'))

    if request.POST:
        form = MenuForm(request.POST)
        
        if form.is_valid():
            from curia.documents.models import Document, Version
            from curia.authentication import grant_access, get_public_user
            
            # create document
            document = Document.objects.create(owner_group=owner_group, owner_user=owner_user, is_presentation=False)
            new_version = Version(document=document,title=form.cleaned_data['title'], contents=form.cleaned_data['contents'], owner=request.user)
            new_version.save()
            
            # set up access rights
            grant_access(command='view', user=get_public_user(), obj=document)
            
            # create menu item
            parent = None
            if form.cleaned_data['parent'] != 'None':
                parent = MenuItem.objects.get(pk=form.cleaned_data['parent'])
            MenuItem.objects.create(group=owner_group, content_type=get_content_type(document), object_id=document.id, title=form.cleaned_data['title'], url=document.get_absolute_url(), order=0, parent=parent)
            
            return HttpResponseRedirect("/")
    else:
        initial = {}
        if MenuItem.objects.count() == 0:
            initial['title'] = _('Home')
        form = MenuForm(initial=initial)
    
    return render_to_response(request, 'homepage/add_menu_item.html', {'form':form})
Пример #7
0
def portal(request):
    if request.community == None:
        return render_to_response(request, '404_community.html')

    check_access(request.user, request.community, command='view')

    from curia.calendars.models import Event
    from curia.images.models import Image
    import datetime
    today = datetime.date.today()

    events = Event.objects.filter(end_time__gt=today,
                                  start_time__lt=today +
                                  datetime.timedelta(days=4),
                                  owner_group=request.community,
                                  deleted=False).order_by('start_time')
    bugs = ''
    if request.user.is_superuser:
        from curia.bugs.models import Bug
        c = Bug.objects.filter(deleted=False).count()
        if c != 0:
            bugs = 'There are %s bugs reported' % c

    # select u from User u, MetaUser mu, UserInGroup uig where uig.group_id = VARIABEL and u.id = uig.user_id and mu.user_id = u.id and mu.image is not null order by last_login limit 3

    try:
        presentation = Document.objects.get(owner_user__isnull=True,
                                            owner_group=request.community,
                                            is_presentation=True)
    except Document.DoesNotExist:
        # this is a brand new community, so we need to set some initial data

        # create presentation
        presentation = Document.objects.create(owner_user=None,
                                               owner_group=request.community,
                                               is_presentation=True)
        title = 'Presentation'
        new_version = Version(document=presentation,
                              title=title,
                              contents=_('Welcome!'),
                              owner=request.user)
        new_version.save()

    presentation = presentation.get_latest_version().contents
    return render_to_response(
        request, 'portal.html', {
            'community':
            request.community,
            'events':
            events,
            'news':
            News.objects.filter(deleted=False).order_by('-creation_time')[:3],
            'bugs':
            bugs,
            'random_images':
            Image.objects.filter(owner_group=request.community,
                                 deleted=False).order_by('?')[:6],
            'latest_logged_in':
            request.community.user_set.order_by('-last_login')[:4],
            'presentation':
            presentation
        })
Пример #8
0
def edit_document(request, document_id, is_creating=False):
    group_id = get_integer(request, 'group_id')
    document = get_object_or_404_and_check_access(request,
                                                  Document,
                                                  pk=document_id,
                                                  command='edit')
    user = request.user

    class DocumentForm(django.forms.Form):
        if not document.is_presentation:
            title = django.forms.CharField(max_length=1024, label=_('Title'))
        #labels = django.forms.CharField(required=False, label=_('Labels'))
        contents = django.forms.CharField(required=False,
                                          widget=django.forms.Textarea,
                                          label=_('Contents'))
        edit_version = django.forms.IntegerField(
            widget=django.forms.HiddenInput, required=True)

    if request.POST:
        form = DocumentForm(request.POST)

        if int(request.POST['edit_version']) != document.get_latest_version(
        ).id:
            post = request.POST.copy()
            post['edit_version'] = document.get_latest_version().id
            form = DocumentForm(post)
            form.errors['contents'] = [
                _('Document was changed after you began editing it, please review the changes and then press save again'
                  )
            ]

        if form.is_valid():
            #Handle the labels
            #handle_labels(request,document)

            #Handle the document
            if not document.is_presentation:
                if form.cleaned_data.has_key('title'):
                    title = form.cleaned_data['title']
                else:
                    title = document.get_latest_version().title
            else:
                if user.first_name.endswith('s'):
                    title = user.first_name + ' presentation'
                else:
                    title = user.first_name + 's presentation'

            new_version = Version(document=document,
                                  title=title,
                                  contents=strip_p(
                                      form.cleaned_data['contents']),
                                  owner=request.user)
            new_version.save()

            if request.external:
                from curia.homepage.models import MenuItem
                try:
                    menu = MenuItem.objects.get(
                        content_type=get_content_type(document),
                        object_id=document.id)
                    menu.title = title
                    menu.save()
                except MenuItem.DoesNotExist:
                    pass

            if document.is_presentation:
                if document.owner_group:
                    return HttpResponseRedirect(
                        document.owner_group.get_absolute_url())
                else:
                    return HttpResponseRedirect(
                        document.owner_user.get_absolute_url())
            return HttpResponseRedirect(document.get_absolute_url())

    else:
        latest_version = document.get_latest_version()
        form = DocumentForm(
            initial={
                'title': latest_version.title,
                'contents': latest_version.contents,
                'edit_version': latest_version.id
            })

    return render_to_response(request, 'documents/edit.html', {
        'form': form,
        'document': document
    })
Пример #9
0
def add_document(request):
    is_presentation = get_boolean(request, 'is_presentation')
    owner_group = None
    owner_user = None

    class DocumentForm(django.forms.Form):
        title = django.forms.CharField(max_length=1024, label=_('Title'))
        #labels = django.forms.CharField(required=False, label=_('Labels'))
        contents = django.forms.CharField(required=False,
                                          widget=django.forms.Textarea,
                                          label=_('Contents'))

    group_id = get_integer(request, 'group_id')
    user_id = get_integer(request, 'user_id')
    if group_id:
        owner_group = get_object_or_404_and_check_access(request,
                                                         Group,
                                                         pk=group_id,
                                                         command='add')
        check_access(request.user, obj=owner_group, command='add document')
    else:
        owner_user = get_object_or_404_and_check_access(request,
                                                        User,
                                                        pk=user_id,
                                                        command='add')
        check_access(request.user, obj=owner_user, command='add document')

    if request.POST:
        form = DocumentForm(request.POST)

        if form.is_valid():

            #Handle the document
            if owner_group != None:
                document = Document.objects.create(
                    owner_group=owner_group,
                    owner_user=owner_user,
                    is_presentation=is_presentation)
            else:
                document = Document.objects.create(
                    owner_user=owner_user, is_presentation=is_presentation)

            if document.is_presentation:
                if group == 0:
                    title = owner_user.username + 's Presentation'
                else:
                    owner_group = get_object_or_404_and_check_access(
                        request, Group, pk=group, command='add')
                    title = owner_group.name + 's Presentation'
            else:
                title = form.cleaned_data['title']

            new_version = Version(document=document,
                                  title=title,
                                  contents=strip_p(
                                      form.cleaned_data['contents']),
                                  owner=request.user)
            new_version.save()

            #Handle the labels
            #handle_labels(request,document)

            if document.is_presentation:
                if document.owner_group:
                    return HttpResponseRedirect(
                        document.owner_group.get_absolute_url())
                else:
                    return HttpResponseRedirect(
                        document.owner_user.get_absolute_url())
            return HttpResponseRedirect(document.get_absolute_url())

    else:
        form = DocumentForm()

    return render_to_response(request, 'documents/add.html', {'form': form})
Пример #10
0
def edit_document(request, document_id, is_creating=False):
    group_id = get_integer(request, 'group_id')
    document = get_object_or_404_and_check_access(request, Document, pk=document_id, command='edit')
    user = request.user

    class DocumentForm(django.forms.Form):
        if not document.is_presentation:
            title = django.forms.CharField(max_length=1024, label=_('Title'))
        #labels = django.forms.CharField(required=False, label=_('Labels'))
        contents = django.forms.CharField(required=False, widget = django.forms.Textarea, label=_('Contents'))
        edit_version = django.forms.IntegerField(widget = django.forms.HiddenInput, required=True)
    
    if request.POST:
        form = DocumentForm(request.POST)

        if int(request.POST['edit_version']) != document.get_latest_version().id:
            post = request.POST.copy()
            post['edit_version'] = document.get_latest_version().id
            form = DocumentForm(post)
            form.errors['contents'] = [_('Document was changed after you began editing it, please review the changes and then press save again')]

        if form.is_valid():
            #Handle the labels
            #handle_labels(request,document)
            
            #Handle the document 
            if not document.is_presentation:
                if form.cleaned_data.has_key('title'):
                    title = form.cleaned_data['title']
                else:
                    title = document.get_latest_version().title
            else:
                if user.first_name.endswith('s'):
                    title=user.first_name+' presentation'
                else:
                    title = user.first_name+'s presentation'
            
            new_version = Version(document=document,title=title, contents=strip_p(form.cleaned_data['contents']), owner=request.user)
            new_version.save()
            
            if request.external:
                from curia.homepage.models import MenuItem
                try:
                    menu = MenuItem.objects.get(content_type=get_content_type(document), object_id=document.id)
                    menu.title = title
                    menu.save()
                except MenuItem.DoesNotExist:
                    pass
            
            if document.is_presentation:
                if document.owner_group:
                    return HttpResponseRedirect(document.owner_group.get_absolute_url())
                else:
                    return HttpResponseRedirect(document.owner_user.get_absolute_url())
            return HttpResponseRedirect(document.get_absolute_url())

    else:
        latest_version = document.get_latest_version()
        form = DocumentForm(initial={'title': latest_version.title, 'contents': latest_version.contents, 'edit_version':latest_version.id})

    return render_to_response(request, 'documents/edit.html', {'form':form, 'document':document})
Пример #11
0
def create_community(request):
    community_types = [
        ('Friends', _("Friends")),
        ('Organization', _("Organization")),
        ('Happening', _("Happening")),
        ('Project group', _("Project group")),
        ('Online group', _("Online group")),
        ('Other group', _("Other group"))
    ]
    
    class CreateForm(django.forms.Form):
        name = django.forms.CharField(min_length=4, label=_('Name of community'))
        domain = django.forms.CharField(min_length=4, label=_('Domain'), initial='', help_text='.eldmyra.se')
        email = django.forms.CharField(max_length=150,required=True, label=_('Your e-mail address'))
        confirm_email = django.forms.CharField(max_length=150,required=True, label=_('Confirm your e-mail address'))
        community_type = django.forms.ChoiceField(choices=community_types, label=_('Describe yourself'), widget = django.forms.RadioSelect)
        user_contract = django.forms.BooleanField(required=False, widget=CheckboxInput(attrs={'label':_('I have read and accepted the <a href="/registration/administrator_agreement/" target="blank">administrator agreement</a>')}), label='')

    if request.POST:
        form = CreateForm(request.POST)
        
        email = form.data["email"]
        if email != '':
            if not EmailValidator(email):
                form.errors['email'] = (_('%s is not a valid email address') % email,)
                        
        try: 
            form.data["user_contract"]
        except:
            form.errors['user_contract'] = (_("You must accept the user agreement."),)
        
        if form.data["email"] != form.data["confirm_email"]:
            form.errors['confirm_email'] = (_("Emails did not match."),)
        
        try:
            Group.objects.get(name=form.data["name"])
            form.errors['name'] = (_("That name is already taken."),)
        except Group.DoesNotExist:
            pass
        
        forbidden_names = ['support','login','administrator','administration','admin','administrate','administrering','administrera','eldmyra']
        for forbidden_name in forbidden_names:
            if form.data['name'].lower() == forbidden_name:
                form.errors['name'] = (_("You may not call your community %s.") % forbidden_name,)
                
        forbidden_domains = ['blogg','blog','start','community','eldmyra','admin','fest','rollspel','ninja','dota','administrering','administrera','student','hantverk','demo','test','support','login','administrator','administration']
        for forbidden_domain in forbidden_domains:
            if form.data['domain'].lower() == forbidden_domain:
                form.errors['domain'] = (_("You may not use the domain name %s.eldmyra.se") % forbidden_domain, )      

        try:
            user = User.objects.get(email=request.REQUEST['email'])
        except User.DoesNotExist:
            user = None
            
        try:
            MetaGroup.objects.get(domain=form.data['domain']+'.eldmyra.se')
            form.errors['domain'] = (_('Domain name is taken, please choose another'),)
        except MetaGroup.DoesNotExist:
            pass

        if form.is_valid():
            password = None
            new_user = False
            if not user:                
                # Create new user
                password = User.objects.make_random_password(6)
                user = User.objects.create(email=form.cleaned_data['email'], username=User.objects.make_random_password(30), is_active=False)     
                user.set_password(password)
                user.save()
                new_user = True

            community = Group.objects.create(name=form.cleaned_data['name'])
            meta_group = MetaGroup.objects.create(group=community, created_by=user, domain=form.cleaned_data['domain']+'.eldmyra.se')
            presentation = Document.objects.create(owner_group=community, is_presentation=True)
            new_version = Version(document=presentation,title='Presentation', contents='', owner=user)
            new_version.save()
            community.user_set.add(user)

            if new_user:
                Invite.objects.create(user=user, group=community, inviter=user, message='')

            from django.template import loader, Context

            t = loader.get_template('registration/community_email.html')
            c = {
                'password': password,
                'email': form.cleaned_data['email'],
                'domain': meta_group.domain,
                'inviter': None,
                'message': '',
                'community': community,
                } 
            subject =  _('Your community %s has been registered at Eldmyra.se!') % (community)
            html_message = t.render(Context(c))
            
            from curia.html2text import html2text
            from curia.mail import send_html_mail_with_attachments
            text_message = html2text(html_message)
            from django.contrib.sites.models import Site
            send_html_mail_with_attachments(subject=subject, message=text_message, html_message=html_message, from_email='invite@'+Site.objects.get_current().domain, recipient_list=[form.cleaned_data['email']])
            
            # Homepage / Do not create a homepage, the no external page view is default for new communitites
            #document = Document.objects.create(owner_group=community, owner_user=user, is_presentation=False)
            #new_version = Version(document=document,title='Hem', contents='', owner=user)
            #new_version.save()
            
            # set up access rights
            #from curia.authentication import grant_access, get_public_user
            #grant_access(command='view', user=get_public_user(), obj=document)
            
            # create menu item
            #from curia.homepage.models import MenuItem
            #MenuItem.objects.create(group=community, content_type=get_content_type(document), object_id=document.id, title='Hem', url=document.get_absolute_url(), order=0, parent=None)

            from curia.labels.models import SuggestedLabel
            from curia.forums.models import Thread
            SuggestedLabel.objects.create(title=_('Events'), label=_('Events'), group=community, created_by=user, content_type=get_content_type(Thread))
            SuggestedLabel.objects.create(title=_('Links'), label=_('Links'), group=community, created_by=user, content_type=get_content_type(Thread))

            Label.objects.create(object_id=community.id, deleted=False, name=form.cleaned_data['community_type'], content_type=get_content_type(community), created_by = user, owner_user=user, owner_group=community)
            
            if new_user:
                return render_to_response(request, 'registration/create_community_done.html', {'community':community, 'disable_login_box':True})
            else:
                return HttpResponseRedirect(community.get_external_absolute_url())
    else:
        form = CreateForm()

    return render_to_response(request, 'registration/create_community.html', {'form':form, 'disable_login_box':True})