Exemplo n.º 1
0
def item(request, type, pk, slug, src=None):
    '''
    @summary: Details of an item
    
    @src: Source of access. It may be used to manipulate the context/templates.
        eg. src='public_url' means this view is being accessed using some public url.
    '''
    
    item_cls, template = _resolve_item_type(type)
    if item_cls is None:
        print "Error: content type is not found"
        raise Http404 
    
    # Get the object from the `pk`, raises a Http404 if not found
    obj = get_object_or_404(item_cls, pk=pk)
    
    # Check for permissions
    if type == 'poetry' or type == 'snippet':
        if user_has_group(request.user, ['Administrator', 'Editor']) is False:
            # Do not show unpublished `poetry`, `snippet` 
            if obj.is_published() is False:
                raise PermissionDenied
        
    ##
    # Check, if `slug` is different from what it is expected,
    if slug != obj.get_slug():
        if user_has_group(request.user, ['Administrator', 'Editor']):
            # softredirect to correct url
            return redirect(obj)
        else:
            # softredirect to the list page
            return HttpResponseRedirect(reverse('repository:list', kwargs={'type': type}))
    
    # Instantiate the Meta class
    meta = Meta(title = obj.title(), 
                description = obj.meta_description(), 
                section= type, 
                url = obj.get_absolute_url(),
                author = obj.get_author(), 
                date_time = obj.get_last_edit_time(),
                object_type = 'article',
                keywords = obj.get_keywords(),
            )
    
    # Make the context and render  
    context = {'obj': obj, 'meta': meta, 'item_type': type, 
               'src': src}    
    return render(request, template, context)
Exemplo n.º 2
0
def items(request):
    '''
    @summary: Show all data items
    @note: Only 'Administrator' has access (redirect others to home page).
    '''
    
    if user_has_group(request.user, ['Administrator',]) is False:
        # Redirect to home page
        return redirect('/')
    
    else:
        count = {}
        count['poetry'] = Poetry.objects.all().count
        count['snippet'] = Snippet.objects.all().count
        count['person'] = Person.objects.all().count
        count['place'] = Place.objects.all().count
        count['product'] = Product.objects.all().count
        count['event'] = Event.objects.all().count
        count['organization'] = Organization.objects.all().count
        count['book'] = Book.objects.all().count
        
        # Make the context and render  
        context = {'obj': None, 'count': count }
        template = "repository/items/data.html"
        return render(request, template, context)
Exemplo n.º 3
0
def items(request):
    '''
    @summary: Show all data items
    @note: Only Administrator & Editor have access (redirect others to home page).
    '''

    if user_has_group(request.user, ['Administrator', 'Editor']) is False:
        # Redirect to home page
        return redirect('/')

    else:
        count = {}
        count['poetry'] = Poetry.objects.all().count
        count['snippet'] = Snippet.objects.all().count
        count['person'] = Person.objects.all().count
        count['place'] = Place.objects.all().count
        count['product'] = Product.objects.all().count
        count['event'] = Event.objects.all().count
        count['organization'] = Organization.objects.all().count
        count['book'] = Book.objects.all().count

        # Make the context and render
        context = {'obj': None, 'count': count}
        template = "repository/items/data.html"
        return render(request, template, context)
Exemplo n.º 4
0
def tagged_items(request, slug, item_type, src=None):
    """
    @summary: Views the list of Items tagged using 'slug'
        TODO:: Order the list using some criteria
    
    @src: Source of access. It may be used to manipulate the context/templates.
        eg. src='public_url' means this view is being accessed using some public url.        
    """

    if item_type == Snippet.item_type():
        item_cls = Snippet
        list_template = "repository/include/list/snippet.html"
    else:
        # Currently, tagging is supported only on Snippet & Poetry
        item_cls = Poetry
        list_template = "repository/include/list/poetry.html"

    try:
        if user_has_group(request.user, ['Administrator', 'Editor']):
            obj_list = item_cls.objects.filter(keywords__slug=slug)
        else:
            # Show only published `poetry`, `snippet`
            obj_list = item_cls.published.filter(keywords__slug=slug)
    except:
        print("Error: Unexpected error:", sys.exc_info()[0])
        for frame in traceback.extract_tb(sys.exc_info()[2]):
            fname, lineno, fn, text = frame
            print("DBG:: Error in %s on line %d" % (fname, lineno))
        obj_list = []

    result_title = '#' + slug

    # Pagination
    paginator = Paginator(obj_list, 20)  # Show 20 entries per page
    page = request.GET.get('page')
    try:
        objs = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        objs = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        objs = paginator.page(paginator.num_pages)

    context = {
        'items': objs,
        'tag': slug,
        'list_template': list_template,
        'item_type': item_type,
        'result_title': result_title,
        'src': src
    }
    template = 'repository/items/tagged-list.html'

    return render(request, template, context)
Exemplo n.º 5
0
def tagged_items(request, slug, type, src=None):
    """
    @summary: Views the list of Items tagged using 'slug'
        TODO:: Order the list using some criteria
    
    @src: Source of access. It may be used to manipulate the context/templates.
        eg. src='public_url' means this view is being accessed using some public url.        
    """
    
    if type == Snippet.item_type():
        item_cls = Snippet
        list_template = "repository/include/list/snippet.html"        
    else:
        # Currently, tagging is supported only on Snippet & Poetry
        item_cls = Poetry
        list_template = "repository/include/list/poetry.html"
    
    try:
        if user_has_group(request.user, ['Administrator', 'Editor']):    
            obj_list = item_cls.objects.filter(keywords__slug=slug)
        else:
            # Show only published `poetry`, `snippet`
            obj_list = item_cls.published.filter(keywords__slug=slug)
    except:
        print ("Error: Unexpected error:", sys.exc_info()[0])
        for frame in traceback.extract_tb(sys.exc_info()[2]):
            fname,lineno,fn,text = frame
            print ("DBG:: Error in %s on line %d" % (fname, lineno))
        obj_list = []
    
    result_title = '#' + slug
    
    # Pagination
    paginator = Paginator(obj_list, 20) # Show 20 entries per page    
    page = request.GET.get('page')
    try:
        objs = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        objs = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        objs = paginator.page(paginator.num_pages)
            
    context = {'items': objs, 'tag': slug, 'list_template': list_template, 
               'item_type': type, 'result_title': result_title, 
               'src': src}
    template = 'repository/items/tagged-list.html'    

    return render(request, template, context)
Exemplo n.º 6
0
def home(request):
    '''
    @summary: Show home page of Repository
    @note: Only 'Administrator' has access (redirect others to home page).
    '''
    if user_has_group(request.user, ['Administrator',]) is False:
        # Redirect to home page
        return redirect('/')
    
    else:
        # Make the context and render  
        context = {'obj': None }
        template = "repository/home.html"  
        return render(request, template, context)
Exemplo n.º 7
0
def home(request):
    '''
    @summary: Show home page of Repository
    @note: Only Administrator & Editor have access (redirect others to home page).
    '''
    if user_has_group(request.user, ['Administrator', 'Editor']) is False:
        # Redirect to home page
        return redirect('/')

    else:
        # Make the context and render
        context = {'obj': None}
        template = "repository/home.html"
        return render(request, template, context)
Exemplo n.º 8
0
def list(request, type, src=None):
    '''
    @summary: List the data item of `type`
    
    @src: Source of access. It may be used to manipulate the context/templates.
        eg. src='public_url' means this view is being accessed using some public url.    
    '''    
    
    item_cls, list_template = _resolve_item_type(type, list=True)    
    if item_cls is None:
        print "Error: content type is not found"
        raise Http404 
        
    q_objects = Q()
    
    ##
    # Check the parameters passed in the URL and process accordingly

    # Query tab
    q_tab = request.GET.get('tab', None)
        
    # Creator id (valid for items derived from `CreativeWork`)
    creator = request.GET.get('creator', None)
    # Language (valid for items derived from `CreativeWork`)
    language = request.GET.get('lan', None)    
    # Sort the result by: 'name' for `Author.name`, 'edit' for `Author.date_modified`
    # Default is 'edit' i.e. Give recently edited item first
    sort = request.GET.get('sort', 'edit')
    # Order the result: 
    #    'recent' for recently changed items first;
    #    'random' for random selection;
    #    Default is 'recent'
    order = request.GET.get('o', 'recent')
              
    obj_list = []
    result_title = item_cls._meta.verbose_name_plural.title()
    kwargs = {}
    query_tabs = []
    extra_get_queries = []

    #
    ## Process get queries
    if q_tab:
        if q_tab == 'all':
            pass
        elif q_tab == 'pub':
            kwargs['published'] = True
        elif q_tab == 'unpub':
            kwargs['published'] = False
        else:
            # Set the q_tab to None: ignore other values
            q_tab = None        
    
    # Set order to its default i.e. `recent` if it is not the expected one.
    if order != 'shuffle':
        order = 'recent'
    q_string = '&o=' + order
    extra_get_queries.append(q_string)
            
    # Get the items having creator.id = creator
    if creator:
        try:
            q_string = '&creator=' + creator
            extra_get_queries.append(q_string)
            creator = int(creator)
            result_title = get_object_or_404(Person, pk=creator).full_name() 
            kwargs['creator'] = creator

        except (TypeError, ValueError):
            print 'Error: That creator_id is not an integer, pass silently'
            pass

    if language:        
        tmp = dict(LANGUAGES)
        if language in tmp:
            q_string = '&lan=' + language
            extra_get_queries.append(q_string)            
            kwargs['language'] = language
            result_title += ', #' + tmp[language]                         

    # Only for ``poetry`` and ``snippet``
    if type == 'poetry' or type == 'snippet':
        # Check for permissions
        if user_has_group(request.user, ['Administrator', 'Editor']):
            # Create ``query_tabs`` for user of Administrator and Editor groups
            query_tabs = _create_query_tabs(request.path, q_tab, extra_get_queries)
        else:
            # Create ``query_tabs`` for public users
            query_tabs = []                        
            # Show only published `poetry`, `snippet` 
            kwargs['published'] = True      
    
    if order == 'shuffle':
        # Note: order_by('?') queries may be expensive and slow, 
        # depending on the database backend you are using.
        # FIXME: It will slow down if table is large. Use some other options.
        obj_list = item_cls.objects.apply_filter(**kwargs).order_by('?')
    else:
        obj_list = item_cls.objects.apply_filter(**kwargs).order_by('-date_modified')                
    
    
    # Pagination
    paginator = Paginator(obj_list, 20) # Show 20 entries per page    
    page = request.GET.get('page')
    try:
        objs = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        objs = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        objs = paginator.page(paginator.num_pages)
            
    context = {'items': objs, 'list_template': list_template, 
               'item_type': type, 'result_title': result_title,
               'query_tabs': query_tabs, 'order': order,
               'src': src}
    template = 'repository/items/list.html'    

    return render(request, template, context)
Exemplo n.º 9
0
def _create_query_list(request, q=None, extra_get_queries=[]):
    '''
    @summary: Return query list object for feedbacks
    '''
    get_query = ''.join(extra_get_queries)
    url = request.path
    
    q_name = {
              'all': 'All',
              'pending': 'Pending',
              'closed': 'Closed',
              'me': 'My feedbacks',
              'anonymous': 'Anonymous',
              'known': 'By known'
            }
    
    # Create query list and populate
    query_list = []
    
    item = {
           'name': q_name['all'],
           'help_text': 'Recent feedbacks',
           'url': url + '?q=all',
           'css': 'is-active' if q == 'all' else '',
        }
    query_list.append(item)
    
    item = {
           'name': q_name['pending'],
           'help_text': 'Feedbacks to which response is awaiting.',
           'url': url + '?q=pending',
           'css': 'is-active' if q == 'pending' else '',
        }
    query_list.append(item)
    
    item = {
           'name': q_name['closed'],
           'help_text': 'Feedbacks to which response has given.',
           'url': url + '?q=closed',
           'css': 'is-active' if q == 'closed' else '',
        }
    query_list.append(item)
    
    item = {
           'name': q_name['me'],
           'help_text': 'My feedbacks',
           'url': url + '?q=me',
           'css': 'is-active' if q == 'me' else '',
        }
    query_list.append(item)
    
    if user_has_group(request.user, ['Administrator',]):
        item = {
               'name': q_name['anonymous'],
               'help_text': 'Feedbacks by anonymous users',
               'url': url + '?q=anonymous',
               'css': 'is-active' if q == 'anonymous' else '',
            }
        query_list.append(item)
        
        item = {
               'name': q_name['known'],
               'help_text': 'User has account or have given email id',
               'url': url + '?q=known',
               'css': 'is-active' if q == 'known' else '',
            }
        query_list.append(item)
    
    return query_list, q_name[q]
Exemplo n.º 10
0
def list(request, item_type, src=None):
    '''
    @summary: List the data item of `item_type`
    
    @note: Only Administrator & Editor have access (redirect others to home page).
    '''

    if user_has_group(request.user, ['Administrator', 'Editor']) is False:
        # Redirect to home page
        return redirect('/')

    item_cls, list_template = _resolve_item_type(item_type, list=True)
    if item_cls is None:
        print "Error: content item_type is not found"
        raise Http404

    q_objects = Q()

    ##
    # Check the parameters passed in the URL and process accordingly

    # Query tab
    q_tab = request.GET.get('tab', None)

    # Creator id (valid for items derived from `CreativeWork`)
    creator = request.GET.get('creator', None)
    # Language (valid for items derived from `CreativeWork`)
    language = request.GET.get('lan', None)
    # Sort the result by: 'name' for `Author.name`, 'edit' for `Author.date_modified`
    # Default is 'edit' i.e. Give recently edited item first
    sort = request.GET.get('sort', 'edit')
    # Order the result:
    #    'recent' for recently changed items first;
    #    'random' for random selection;
    #    Default is 'recent'
    order = request.GET.get('o', 'recent')

    obj_list = []
    result_title = item_cls._meta.verbose_name_plural.title()
    kwargs = {}
    query_tabs = []
    extra_get_queries = []

    #
    ## Process get queries
    if q_tab:
        if q_tab == 'all':
            pass
        elif q_tab == 'pub':
            kwargs['published'] = True
        elif q_tab == 'unpub':
            kwargs['published'] = False
        else:
            # Set the q_tab to None: ignore other values
            q_tab = None

    # Set order to its default i.e. `recent` if it is not the expected one.
    if order != 'shuffle':
        order = 'recent'
    q_string = '&o=' + order
    extra_get_queries.append(q_string)

    # Get the items having creator.id = creator
    if creator:
        try:
            q_string = '&creator=' + creator
            extra_get_queries.append(q_string)
            creator = int(creator)
            result_title = get_object_or_404(Person, pk=creator).full_name()
            kwargs['creator'] = creator

        except (TypeError, ValueError):
            print 'Error: That creator_id is not an integer, pass silently'
            pass

    if language:
        tmp = dict(LANGUAGES)
        if language in tmp:
            q_string = '&lan=' + language
            extra_get_queries.append(q_string)
            kwargs['language'] = language
            result_title += ', #' + tmp[language]

    # Only for ``poetry`` and ``snippet``
    if item_type == 'poetry' or item_type == 'snippet':
        # Check for permissions
        if user_has_group(request.user, ['Administrator', 'Editor']):
            # Create ``query_tabs`` for user of Administrator and Editor groups
            query_tabs = _create_query_tabs(request.path, q_tab,
                                            extra_get_queries)
        else:
            # Create ``query_tabs`` for public users
            query_tabs = []
            # Show only published `poetry`, `snippet`
            kwargs['published'] = True

    if order == 'shuffle':
        # Note: order_by('?') queries may be expensive and slow,
        # depending on the database backend you are using.
        # FIXME: It will slow down if table is large. Use some other options.
        obj_list = item_cls.objects.apply_filter(**kwargs).order_by('?')
    else:
        if (q_tab == 'pub') and (item_type == 'poetry'
                                 or item_type == 'snippet'):
            obj_list = item_cls.objects.apply_filter(
                **kwargs).order_by('-date_published')
        else:
            obj_list = item_cls.objects.apply_filter(
                **kwargs).order_by('-date_modified')

    # Pagination
    paginator = Paginator(obj_list, 20)  # Show 20 entries per page
    page = request.GET.get('page')
    try:
        objs = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        objs = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        objs = paginator.page(paginator.num_pages)

    context = {
        'items': objs,
        'list_template': list_template,
        'item_type': item_type,
        'result_title': result_title,
        'query_tabs': query_tabs,
        'order': order,
        'src': src
    }
    template = 'repository/items/list.html'

    return render(request, template, context)
Exemplo n.º 11
0
def item(request, item_type, pk, slug, src=None):
    '''
    @summary: Details of an item
    
    @src: Source of access. It may be used to manipulate the context/templates.
        eg. src='public_url' means this view is being accessed using some public url.
    '''

    item_cls, template = _resolve_item_type(item_type)
    if item_cls is None:
        print "Error: content item_type is not found"
        raise Http404

    # Get the object from the `pk`, raises a Http404 if not found
    obj = get_object_or_404(item_cls, pk=pk)

    # Check for permissions
    if src != 'public_url':
        # public users should not have access to repository urls '/r/data/...'
        # redirect to respective public url
        if user_has_group(request.user, ['Administrator', 'Editor']) is False:
            if item_type == 'poetry' or item_type == 'snippet' or item_type == 'book':
                # There are different URLs for above three for public users
                # Redirect to those urls.
                # ADD THE NEW ITEM TYPE ABOVE if there are public url available for that ITEM TYPE.
                return HttpResponseRedirect(obj.get_absolute_url())
            else:
                raise PermissionDenied

    if item_type == 'poetry' or item_type == 'snippet':
        if user_has_group(request.user, ['Administrator', 'Editor']) is False:
            # Do not show unpublished `poetry`, `snippet`
            if obj.is_published() is False:
                raise PermissionDenied

    # Check, if `slug` is different from what it is expected,
    if slug != obj.get_slug():
        if user_has_group(request.user, ['Administrator', 'Editor']):
            # softredirect to correct url
            return redirect(obj)
        else:
            # softredirect to the item list page
            return HttpResponseRedirect(obj.get_list_url())

    # Instantiate the Meta class
    if item_type == 'poetry':
        meta_image_url = obj.creator.get_image_url()
    elif item_type == 'person':
        meta_image_url = obj.get_image_url()
    else:
        meta_image_url = "img/poetrylearner_logo_120x120.png"

    meta = Meta(
        title=obj.title(),
        description=obj.meta_description(),
        section=item_type,
        url=obj.get_absolute_url(),
        author=obj.get_author(),
        date_time=obj.get_last_edit_time(),
        object_type='article',
        keywords=obj.get_keywords(),
        image=meta_image_url,
    )

    # Make the context and render
    context = {'obj': obj, 'meta': meta, 'item_type': item_type, 'src': src}
    return render(request, template, context)
Exemplo n.º 12
0
def feedback_list(request):
    '''
    @summary: List all the feedbacks submitted till now by users
    '''
        
    q_objects = Q()
    obj_list = []
    
    ##
    # Check the parameters passed in the URL and process accordingly
    
    # Query tab
    q_tab = request.GET.get('tab', None)
    
    if q_tab == 'pending':
        # Feedbacks to which we have not responded
        obj_list = Feedback.objects.all().filter(
                                                  Q(action__isnull=True) | 
                                                  Q(action=u'')
                                                  )

    elif q_tab == 'closed':
        # Feedbacks to which we have responded
        obj_list = Feedback.objects.all().exclude(
                                                  Q(action__isnull=True) | 
                                                  Q(action=u'')
                                                  ).order_by('-date_responded')
            
    elif q_tab == 'known':
        # User has account or have given email id
        obj_list = Feedback.objects.all().filter(
                                                 Q(added_by__isnull=False) |
                                                 Q(email__isnull=False)
                                                 ).exclude(email=u'')
        
    elif q_tab == 'anonymous':
        # Feedbacks by anonymous users (haven't given email id)        
        obj_list = Feedback.objects.all().filter(
                                                 Q(added_by__isnull=True),
                                                 Q(email__isnull=True) | 
                                                 Q(email=u'')
                                                 )        
    elif q_tab == 'me':
        # Feedbacks by me i.e. request.user        
        obj_list = Feedback.objects.all().filter(
                                                 Q(added_by=request.user)
                                                 )    
    elif q_tab == 'all':
        # Most recent feedbacks
        obj_list = Feedback.objects.all()
 
    else:
        # Default: Feedbacks to which we have not responded
        obj_list = Feedback.objects.all().filter(
                                                  Q(action__isnull=True) | 
                                                  Q(action=u'')
                                                  )
          
    
    # Create tab list and populate
    query_tabs = []    
    
    tab = {
           'name': 'all',
           'help_text': 'Recent feedbacks',
           'url': request.path + '?tab=all',
           'css': 'is-active' if q_tab == 'all' else '',
        }
    query_tabs.append(tab)
    
    tab = {
           'name': 'pending',
           'help_text': 'Feedbacks to which response is awaiting.',
           'url': request.path + '?tab=pending',
           'css': 'is-active' if q_tab == 'pending' or q_tab is None else '',
        }
    query_tabs.append(tab)
    
    tab = {
           'name': 'closed',
           'help_text': 'Feedbacks to which response has given.',
           'url': request.path + '?tab=closed',
           'css': 'is-active' if q_tab == 'closed' else '',
        }
    query_tabs.append(tab)
    
    tab = {
           'name': 'by me',
           'help_text': 'My feedbacks',
           'url': request.path + '?tab=me',
           'css': 'is-active' if q_tab == 'me' else '',
        }
    query_tabs.append(tab)
    
    if user_has_group(request.user, ['Administrator',]):    
        tab = {
               'name': 'by anonymous',
               'help_text': 'Feedbacks by anonymous users',
               'url': request.path + '?tab=anonymous',
               'css': 'is-active' if q_tab == 'anonymous' else '',
            }
        query_tabs.append(tab)
        
        tab = {
               'name': 'by known',
               'help_text': 'User has account or have given email id',
               'url': request.path + '?tab=known',
               'css': 'is-active' if q_tab == 'known' else '',
            }
        query_tabs.append(tab)    
            
    
    # Pagination
    paginator = Paginator(obj_list, 20) # Show 20 entries per page    
    page = request.GET.get('page')
    try:
        objs = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        objs = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        objs = paginator.page(paginator.num_pages)
            
    context = {'feedbacks': objs, 'query_tabs': query_tabs}
    template = 'feedback/list.html'    

    return render(request, template, context)