Esempio n. 1
0
def media_home(request, media, page, **kwargs):
    """
    'Homepage' of a MediaEntry()
    """
    comment_id = request.matchdict.get('comment', None)
    if comment_id:
        if request.user:
            mark_comment_notification_seen(comment_id, request.user)

        pagination = Pagination(
            page, media.get_comments(
                mg_globals.app_config['comments_ascending']),
            MEDIA_COMMENTS_PER_PAGE,
            comment_id)
    else:
        pagination = Pagination(
            page, media.get_comments(
                mg_globals.app_config['comments_ascending']),
            MEDIA_COMMENTS_PER_PAGE)

    comments = pagination()

    comment_form = user_forms.MediaCommentForm(request.form)

    media_template_name = media.media_manager.display_template

    return render_to_response(
        request,
        media_template_name,
        {'media': media,
         'comments': comments,
         'pagination': pagination,
         'comment_form': comment_form,
         'app_config': mg_globals.app_config})
Esempio n. 2
0
def user_home(request, page):
    """'Homepage' of a User()"""
    # TODO: decide if we only want homepages for active users, we can
    # then use the @get_active_user decorator and also simplify the
    # template html.
    user = User.query.filter_by(username=request.matchdict['user']).first()
    if not user:
        return render_404(request)
    elif user.status != u'active':
        return render_to_response(request, 'mediagoblin/user_pages/user.html',
                                  {'user': user})

    cursor = MediaEntry.query.\
        filter_by(uploader = user.id,
                  state = u'processed').order_by(MediaEntry.created.desc())

    pagination = Pagination(page, cursor)
    media_entries = pagination()

    #if no data is available, return NotFound
    if media_entries == None:
        return render_404(request)

    user_gallery_url = request.urlgen('mediagoblin.user_pages.user_gallery',
                                      user=user.username)

    return render_to_response(
        request, 'mediagoblin/user_pages/user.html', {
            'user': user,
            'user_gallery_url': user_gallery_url,
            'media_entries': media_entries,
            'pagination': pagination
        })
Esempio n. 3
0
def user_home(request, page):
    """'Homepage' of a LocalUser()"""
    user = LocalUser.query.filter_by(
        username=request.matchdict['user']).first()
    if not user:
        return render_404(request)
    elif not user.has_privilege('active'):
        return render_to_response(
            request, 'mediagoblin/user_pages/user_nonactive.html',
            {'user': user})

    cursor = MediaEntry.query.\
        filter_by(actor = user.id).order_by(MediaEntry.created.desc())

    pagination = Pagination(page, cursor)
    media_entries = pagination()

    # if no data is available, return NotFound
    if media_entries == None:
        return render_404(request)

    user_gallery_url = request.urlgen('mediagoblin.user_pages.user_gallery',
                                      user=user.username)

    return render_to_response(
        request, 'mediagoblin/user_pages/user.html', {
            'user': user,
            'user_gallery_url': user_gallery_url,
            'media_entries': media_entries,
            'pagination': pagination
        })
Esempio n. 4
0
def user_gallery(request, page, url_user=None):
    """'Gallery' of a LocalUser()"""
    tag = request.matchdict.get('tag', None)
    cursor = MediaEntry.query.filter_by(actor=url_user.id,
                                        state='processed').order_by(
                                            MediaEntry.created.desc())

    # Filter potentially by tag too:
    if tag:
        cursor = cursor.filter(
            MediaEntry.tags_helper.any(
                MediaTag.slug == request.matchdict['tag']))

    # Paginate gallery
    pagination = Pagination(page, cursor)
    media_entries = pagination()

    #if no data is available, return NotFound
    # TODO: Should we really also return 404 for empty galleries?
    if media_entries == None:
        return render_404(request)

    return render_to_response(
        request, 'mediagoblin/user_pages/gallery.html', {
            'user': url_user,
            'tag': tag,
            'media_entries': media_entries,
            'pagination': pagination
        })
Esempio n. 5
0
def search_results_view(request, page):
    media_entries = None
    pagination = None
    form = indexedsearch.forms.SearchForm(request.form)

    config = pluginapi.get_config('indexedsearch')
    if config.get('SEARCH_LINK_STYLE') == 'form':
        form.show = False
    else:
        form.show = True

    query = None
    if request.method == 'GET' and 'q' in request.GET:
        query = request.GET['q']

    if query:
        engine = get_engine()
        result_ids = engine.search(query)

        if result_ids:
            matches = MediaEntry.query.filter(
                MediaEntry.id.in_(result_ids))
            pagination = Pagination(page, matches)
            media_entries = pagination()

    return render_to_response(
        request,
        'indexedsearch/results.html',
        {'media_entries': media_entries,
         'pagination': pagination,
         'form': form})
Esempio n. 6
0
def user_collection(request, page, url_user=None):
    """A User-defined Collection"""
    collection = Collection.query.filter_by(
        get_actor=url_user, slug=request.matchdict['collection']).first()

    if not collection:
        return render_404(request)

    cursor = collection.get_collection_items()

    pagination = Pagination(page, cursor)
    collection_items = pagination()

    # if no data is available, return NotFound
    # TODO: Should an empty collection really also return 404?
    if collection_items == None:
        return render_404(request)

    return render_to_response(
        request, 'mediagoblin/user_pages/collection.html', {
            'user': url_user,
            'collection': collection,
            'collection_items': collection_items,
            'pagination': pagination
        })
Esempio n. 7
0
def media_home(request, media, page, **kwargs):
    """
    'Homepage' of a MediaEntry()
    """
    comment_id = request.matchdict.get('comment', None)
    if comment_id:
        if request.user:
            mark_comment_notification_seen(comment_id, request.user)

        pagination = Pagination(
            page, media.get_comments(
                mg_globals.app_config['comments_ascending']),
            MEDIA_COMMENTS_PER_PAGE,
            comment_id)
    else:
        pagination = Pagination(
            page, media.get_comments(
                mg_globals.app_config['comments_ascending']),
            MEDIA_COMMENTS_PER_PAGE)

    comments = pagination()

    comment_form = user_forms.MediaCommentForm(request.form)

    media_template_name = media.media_manager.display_template

    context = {
        'media': media,
        'comments': comments,
        'pagination': pagination,
        'comment_form': comment_form,
        'app_config': mg_globals.app_config}

    # Since the media template name gets swapped out for each media
    # type, normal context hooks don't work if you want to affect all
    # media displays.  This gives a general purpose hook.
    context = hook_transform(
        "media_home_context", context)

    return render_to_response(
        request,
        media_template_name,
        context)
Esempio n. 8
0
def default_root_view(request, page):
    cursor = request.db.query(MediaEntry).filter_by(state='processed').\
        order_by(MediaEntry.created.desc())

    pagination = Pagination(page, cursor)
    media_entries = pagination()
    return render_to_response(
        request, 'mediagoblin/root.html',
        {'media_entries': media_entries,
         'allow_registration': mg_globals.app_config["allow_registration"],
         'pagination': pagination})
Esempio n. 9
0
def processing_panel(request, page, url_user):
    """
    Show to the user what media is still in conversion/processing...
    and what failed, and why!
    """
    user = LocalUser.query.filter_by(
        username=request.matchdict['user']).first()
    # TODO: XXX: Should this be a decorator?
    #
    # Make sure we have permission to access this user's panel.  Only
    # admins and this user herself should be able to do so.
    if not (user.id == request.user.id
            or request.user.has_privilege(u'admin')):
        # No?  Simply redirect to this user's homepage.
        return redirect(request,
                        'mediagoblin.user_pages.user_home',
                        user=user.username)
    # Get media entries which are in-processing
    entries = (MediaEntry.query.filter_by(actor=user.id).order_by(
        MediaEntry.created.desc()))

    try:
        state = request.matchdict['state']
        # no exception was thrown, filter entries by state
        entries = entries.filter_by(state=state)
    except KeyError:
        # show all entries
        pass

    pagination = Pagination(page, entries)
    pagination.per_page = 30
    entries_on_a_page = pagination()

    # Render to response
    return render_to_response(request,
                              'mediagoblin/user_pages/processing_panel.html', {
                                  'user': user,
                                  'entries': entries_on_a_page,
                                  'pagination': pagination
                              })
Esempio n. 10
0
def recent_media_gallery_view(request, page):
    """
    The replaced homepage is available through this view.
    """
    cursor = MediaEntry.query.filter_by(state=u'processed').\
        order_by(MediaEntry.created.desc())

    pagination = Pagination(page, cursor)
    media_entries = pagination()
    return render_to_response(request, 'archivalook/recent_media.html', {
        'media_entries': media_entries,
        'pagination': pagination
    })
Esempio n. 11
0
def blog_post_listing(request, page, url_user=None):
    """
    Page, listing all the blog posts of a particular blog.
    """
    blog_slug = request.matchdict['blog_slug']
    blog = get_blog_by_slug(request, blog_slug, author=url_user.id)
    if not blog:
        return render_404(request)

    all_blog_posts = blog.get_all_blog_posts(u'processed').order_by(MediaEntry.created.desc())
    pagination = Pagination(page, all_blog_posts)
    pagination.per_page = 8
    blog_posts_on_a_page = pagination()

    return render_to_response(
        request,
        'mediagoblin/blog/blog_post_listing.html',
        {'blog_posts': blog_posts_on_a_page,
         'pagination': pagination,
         'blog_owner': url_user,
         'blog':blog
        })
Esempio n. 12
0
def blog_dashboard(request, page, url_user=None):
    """
    Dashboard for a blog, only accessible to
    the owner of the blog.
    """
    blog_slug = request.matchdict.get('blog_slug', None)
    blogs = request.db.Blog.query.filter_by(author=url_user.id)
    config = pluginapi.get_config('mediagoblin.media_types.blog')
    max_blog_count = config['max_blog_count']
    if request.user and (request.user.id == url_user.id or request.user.has_privilege(u'admin')):
        if blog_slug:
            blog = get_blog_by_slug(request, blog_slug)
            if not blog:
                return render_404(request)
            else:
                blog_posts_list = blog.get_all_blog_posts().order_by(MediaEntry.created.desc())
                pagination = Pagination(page, blog_posts_list)
                pagination.per_page = 15
                blog_posts_on_a_page = pagination()
                if may_edit_blogpost(request, blog):
                    return render_to_response(
                        request,
                        'mediagoblin/blog/blog_admin_dashboard.html',
                        {'blog_posts_list': blog_posts_on_a_page,
                        'blog_slug':blog_slug,
                        'blog':blog,
                        'user':url_user,
                        'pagination':pagination
                        })
    if not request.user or request.user.id != url_user.id or not blog_slug:
        blogs = blogs.all()
        return render_to_response(
        request,
        'mediagoblin/blog/list_of_blogs.html',
        {
        'blogs':blogs,
        'user':url_user,
        'max_blog_count':max_blog_count
        })
Esempio n. 13
0
def blog_post_listing(request, page, url_user=None):
    """
    Page, listing all the blog posts of a particular blog.
    """
    blog_slug = request.matchdict['blog_slug']
    blog = get_blog_by_slug(request, blog_slug, author=url_user.id)
    if not blog:
        return render_404(request)

    all_blog_posts = blog.get_all_blog_posts(u'processed').order_by(
        MediaEntry.created.desc())
    pagination = Pagination(page, all_blog_posts)
    pagination.per_page = 8
    blog_posts_on_a_page = pagination()

    return render_to_response(
        request, 'mediagoblin/blog/blog_post_listing.html', {
            'blog_posts': blog_posts_on_a_page,
            'pagination': pagination,
            'blog_owner': url_user,
            'blog': blog
        })
Esempio n. 14
0
def blog_dashboard(request, page, url_user=None):
    """
    Dashboard for a blog, only accessible to
    the owner of the blog.
    """
    blog_slug = request.matchdict.get('blog_slug', None)
    blogs = request.db.Blog.query.filter_by(author=url_user.id)
    config = pluginapi.get_config('mediagoblin.media_types.blog')
    max_blog_count = config['max_blog_count']
    if request.user and (request.user.id == url_user.id
                         or request.user.has_privilege(u'admin')):
        if blog_slug:
            blog = get_blog_by_slug(request, blog_slug)
            if not blog:
                return render_404(request)
            else:
                blog_posts_list = blog.get_all_blog_posts().order_by(
                    MediaEntry.created.desc())
                pagination = Pagination(page, blog_posts_list)
                pagination.per_page = 15
                blog_posts_on_a_page = pagination()
                if may_edit_blogpost(request, blog):
                    return render_to_response(
                        request, 'mediagoblin/blog/blog_admin_dashboard.html',
                        {
                            'blog_posts_list': blog_posts_on_a_page,
                            'blog_slug': blog_slug,
                            'blog': blog,
                            'user': url_user,
                            'pagination': pagination
                        })
    if not request.user or request.user.id != url_user.id or not blog_slug:
        blogs = blogs.all()
        return render_to_response(request,
                                  'mediagoblin/blog/list_of_blogs.html', {
                                      'blogs': blogs,
                                      'user': url_user,
                                      'max_blog_count': max_blog_count
                                  })
Esempio n. 15
0
def processing_panel(request, page, url_user):
    """
    Show to the user what media is still in conversion/processing...
    and what failed, and why!
    """
    user = LocalUser.query.filter_by(username=request.matchdict['user']).first()
    # TODO: XXX: Should this be a decorator?
    #
    # Make sure we have permission to access this user's panel.  Only
    # admins and this user herself should be able to do so.
    if not (user.id == request.user.id or request.user.has_privilege(u'admin')):
        # No?  Simply redirect to this user's homepage.
        return redirect(
            request, 'mediagoblin.user_pages.user_home',
            user=user.username)
    # Get media entries which are in-processing
    entries = (MediaEntry.query.filter_by(actor=user.id)
            .order_by(MediaEntry.created.desc()))

    try:
        state = request.matchdict['state']
        # no exception was thrown, filter entries by state
        entries = entries.filter_by(state=state)
    except KeyError:
        # show all entries
        pass

    pagination = Pagination(page, entries)
    pagination.per_page = 30
    entries_on_a_page = pagination()

    # Render to response
    return render_to_response(
        request,
        'mediagoblin/user_pages/processing_panel.html',
        {'user': user,
         'entries': entries_on_a_page,
         'pagination': pagination})
Esempio n. 16
0
def search_results_view(request, page):

    media_entries = None
    pagination = None
    query = None

    form = search_forms.SearchForm(request.form)

    if (request.GET.get('query') != None and request.GET.get('query') != ''):
        terms = []
        skipterms = ['a', 'an', 'the', 'of']
        for query in request.GET.get('query').split():
            lquery = query.lower()
            if lquery not in skipterms:
                terms.append('%' + lquery + '%')

        media_entry_statements = []
        media_tag_statements = []
        if len(terms) == 0:
            media_entry_statements.append(True)
            media_tag_statements.append(True)
        else:
            for term in terms:
                media_entry_statements.append(MediaEntry.title.ilike(term))
                media_entry_statements.append(
                    MediaEntry.description.ilike(term))
                media_tag_statements.append(MediaTag.name.ilike(term))

        matches = MediaEntry.query.filter(
            and_(
                MediaEntry.state == u'processed',
                or_(
                    and_(MediaEntry.id == MediaTag.media_entry,
                         *media_tag_statements),
                    *media_entry_statements))).order_by(MediaEntry.title)

        pagination = Pagination(page, matches)
        media_entries = pagination()

    return render_to_response(request,
                              'mediagoblin/plugins/basicsearch/results.html', {
                                  'media_entries': media_entries,
                                  'pagination': pagination,
                                  'form': form
                              })
Esempio n. 17
0
def tag_listing(request, page):
    """'Gallery'/listing for this tag slug"""
    tag_slug = request.matchdict[u'tag']

    cursor = media_entries_for_tag_slug(request.db, tag_slug)
    cursor = cursor.order_by(MediaEntry.created.desc())

    pagination = Pagination(page, cursor)
    media_entries = pagination()

    tag_name = _get_tag_name_from_entries(media_entries, tag_slug)

    return render_to_response(
        request,
        'mediagoblin/listings/tag.html',
        {'tag_slug': tag_slug,
         'tag_name': tag_name,
         'media_entries': media_entries,
         'pagination': pagination})
Esempio n. 18
0
 def _create_paginator(self, num_items, page, per_page):
     """Create a Paginator with a mock database cursor."""
     mock_cursor = mock.MagicMock()
     mock_cursor.count.return_value = num_items
     return Pagination(page, mock_cursor, per_page)