parent
a8f06855b5
commit
2c6e239833
@ -1,136 +0,0 @@ |
||||
# MediaGoblin for LibrePlanet |
||||
# Copyright (C) 2015 David Thompson <davet@gnu.org> |
||||
# |
||||
# This program is free software: you can redistribute it and/or modify |
||||
# it under the terms of the GNU Affero General Public License as published by |
||||
# the Free Software Foundation, either version 3 of the License, or |
||||
# (at your option) any later version. |
||||
# |
||||
# This program is distributed in the hope that it will be useful, |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
# GNU Affero General Public License for more details. |
||||
# |
||||
# You should have received a copy of the GNU Affero General Public License |
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
||||
import logging |
||||
import os |
||||
|
||||
from mediagoblin import mg_globals |
||||
from mediagoblin.tools.pluginapi import get_config, register_template_path, register_routes, register_template_hooks |
||||
from mediagoblin.db.models import MediaEntry |
||||
from mediagoblin.db.util import media_entries_for_tag_slug |
||||
from mediagoblin.tools.pagination import Pagination |
||||
from mediagoblin.tools.response import render_to_response |
||||
from mediagoblin.tools.licenses import SORTED_LICENSES, SUPPORTED_LICENSES, License |
||||
from mediagoblin.decorators import uses_pagination, user_not_banned |
||||
|
||||
# Add three CC BY non-NC 4.0 to licenses |
||||
cc_by_4 = License("CC BY 4.0", |
||||
"Creative Commons Attribution 4.0 International", |
||||
"https://creativecommons.org/licenses/by/4.0/") |
||||
cc_by_sa_4 = License("CC BY-SA 4.0", |
||||
"Creative Commons Attribution-ShareAlike 4.0 International", |
||||
"https://creativecommons.org/licenses/by-sa/4.0/") |
||||
cc_by_nd_4 = License("CC BY-ND 4.0", |
||||
"Creative Commons Attribution-NoDerivatives 4.0 International", |
||||
"https://creativecommons.org/licenses/by-nd/4.0/") |
||||
gfdl_1_3 = License("GFDL 1.3", |
||||
"GNU Free Documentation License 1.3", |
||||
"https://www.gnu.org/licenses/fdl-1.3.en.html") |
||||
SORTED_LICENSES.insert(1, cc_by_4) |
||||
SORTED_LICENSES.insert(2, cc_by_sa_4) |
||||
SORTED_LICENSES.insert(3, cc_by_nd_4) |
||||
SORTED_LICENSES.insert(4, gfdl_1_3) |
||||
SUPPORTED_LICENSES[cc_by_4.uri] = cc_by_4 |
||||
SUPPORTED_LICENSES[cc_by_sa_4.uri] = cc_by_sa_4 |
||||
SUPPORTED_LICENSES[cc_by_nd_4.uri] = cc_by_nd_4 |
||||
SUPPORTED_LICENSES[gfdl_1_3.uri] = gfdl_1_3 |
||||
|
||||
PLUGIN_DIR = os.path.dirname(__file__) |
||||
|
||||
MAX_HOME_ITEMS_DEFAULT = 10 |
||||
|
||||
MAX_HOME_ALL_VIDEO_ITEMS = 10 |
||||
MAX_HOME_ALL_PHOTO_ITEMS = 20 |
||||
MAX_HOME_FEATURED_ITEMS = 10 |
||||
MAX_HOME_LP_ITEMS = 10 |
||||
|
||||
# make tags lowercase and use dashes in place of spaces. |
||||
# uppercase tags will be included by the lowercase form. |
||||
FEATURED_TAG = "featured" |
||||
|
||||
|
||||
_log = logging.getLogger(__name__) |
||||
|
||||
# This is the function that gets called when the setup |
||||
# hook fires. |
||||
def setup_plugin(): |
||||
_log.info("Setting up Libreplanet...") |
||||
|
||||
# Register the template path. |
||||
register_template_path(os.path.join(PLUGIN_DIR, 'templates')) |
||||
|
||||
def lp_media_for_type(db, type, tag=None, max_items=MAX_HOME_ITEMS_DEFAULT): |
||||
if (tag == None): |
||||
cursor = MediaEntry.query |
||||
else: |
||||
cursor = media_entries_for_tag_slug(db, tag) |
||||
|
||||
return cursor.\ |
||||
filter((MediaEntry.media_type == type) |
||||
& (MediaEntry.state == u'processed')).\ |
||||
order_by(MediaEntry.created.desc()).\ |
||||
limit(max_items) |
||||
|
||||
@user_not_banned |
||||
def frontpage_view(request): |
||||
images = lp_media_for_type(request.db, u'mediagoblin.media_types.image', None, MAX_HOME_ALL_PHOTO_ITEMS) |
||||
videos = lp_media_for_type(request.db, u'mediagoblin.media_types.video', None, MAX_HOME_ALL_VIDEO_ITEMS) |
||||
|
||||
lp2017_keynotes = lp_media_for_type(request.db, u'mediagoblin.media_types.video', "libreplanet-2017-keynote", MAX_HOME_LP_ITEMS) |
||||
lp2017_videos = lp_media_for_type(request.db, u'mediagoblin.media_types.video', "libreplanet-2017-video", MAX_HOME_LP_ITEMS) |
||||
|
||||
lp2016_videos = lp_media_for_type(request.db, u'mediagoblin.media_types.video', "libreplanet-2016-video", MAX_HOME_LP_ITEMS) |
||||
|
||||
featured_images = lp_media_for_type(request.db, u'mediagoblin.media_types.image', FEATURED_TAG, MAX_HOME_FEATURED_ITEMS) |
||||
featured_videos = lp_media_for_type(request.db, u'mediagoblin.media_types.video', FEATURED_TAG, MAX_HOME_FEATURED_ITEMS) |
||||
|
||||
return render_to_response( |
||||
request, 'libreplanet/root.html', |
||||
{'images': images, |
||||
'videos': videos, |
||||
'lp2017_keynotes': lp2017_keynotes, |
||||
'lp2017_videos': lp2017_videos, |
||||
'lp2016_videos': lp2016_videos, |
||||
'featured_images': featured_images, |
||||
'featured_videos': featured_videos, |
||||
'allow_registration': mg_globals.app_config["allow_registration"]}) |
||||
|
||||
def frontpage_view_hook(): |
||||
return frontpage_view |
||||
|
||||
register_routes([('all-videos', '/videos', |
||||
'mediagoblin.plugins.libreplanet.views:video_listing'), |
||||
('all-photos', '/photos', |
||||
'mediagoblin.plugins.libreplanet.views:image_listing'), |
||||
|
||||
('featured-videos', '/videos/featured', |
||||
'mediagoblin.plugins.libreplanet.views:featured_video_listing'), |
||||
('featured-photos', '/photos/featured', |
||||
'mediagoblin.plugins.libreplanet.views:featured_image_listing') |
||||
]) |
||||
|
||||
# This is a dict that specifies which hooks this plugin uses. |
||||
# This one only uses one hook: setup. |
||||
hooks = { |
||||
'setup': setup_plugin, |
||||
'frontpage_view': frontpage_view_hook |
||||
} |
||||
|
||||
register_template_hooks( |
||||
{'header_left': "libreplanet/banner.html", |
||||
'header_extra': "libreplanet/join.html"} |
||||
) |
||||
|
@ -1,42 +0,0 @@ |
||||
{# |
||||
# MediaGoblin for LibrePlanet |
||||
# Copyright (C) 2017 Andrew Engelbrecht <andrew@fsf.org> |
||||
# |
||||
# This program is free software: you can redistribute it and/or modify |
||||
# it under the terms of the GNU Affero General Public License as published by |
||||
# the Free Software Foundation, either version 3 of the License, or |
||||
# (at your option) any later version. |
||||
# |
||||
# This program is distributed in the hope that it will be useful, |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
# GNU Affero General Public License for more details. |
||||
# |
||||
# You should have received a copy of the GNU Affero General Public License |
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
#} |
||||
|
||||
{# banner |
||||
<style> |
||||
.logo img { margin-top: 80px; } |
||||
.header_left { position: relative; margin-bottom: -64px; } |
||||
</style> |
||||
|
||||
<div style="position: absolute; margin-left: -30px; top: 0; width: 1000px;"> |
||||
<iframe src="//static.fsf.org/nosvn/banners/libreplanet/libreplanet-banner.html" width="100%" height="64px" frameborder="0" scrolling="no"></iframe> |
||||
</div> |
||||
#} |
||||
|
||||
{# style for no banner #} |
||||
<style> |
||||
.logo img { margin-top: 16px; } |
||||
</style> |
||||
|
||||
{# for spacing below the banner |
||||
also update the join.html template file when adding/removing/changing |
||||
the spacing of this div. |
||||
-- sudoman 2017-03-09 |
||||
|
||||
<div style="margin-top: 64px;"></div> |
||||
#} |
||||
|
@ -1,42 +0,0 @@ |
||||
{# |
||||
# MediaGoblin for LibrePlanet |
||||
# Copyright (C) 2017 Andrew Engelbrecht <andrew@fsf.org> |
||||
# |
||||
# This program is free software: you can redistribute it and/or modify |
||||
# it under the terms of the GNU Affero General Public License as published by |
||||
# the Free Software Foundation, either version 3 of the License, or |
||||
# (at your option) any later version. |
||||
# |
||||
# This program is distributed in the hope that it will be useful, |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
# GNU Affero General Public License for more details. |
||||
# |
||||
# You should have received a copy of the GNU Affero General Public License |
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
#} |
||||
|
||||
<style> |
||||
.noselect { |
||||
-webkit-touch-callout: none; /* iOS Safari */ |
||||
-webkit-user-select: none; /* Safari */ |
||||
-khtml-user-select: none; /* Konqueror HTML */ |
||||
-moz-user-select: none; /* Firefox */ |
||||
-ms-user-select: none; /* Internet Explorer/Edge */ |
||||
user-select: none; /* Non-prefixed version, currently |
||||
supported by Chrome and Opera */ |
||||
} |
||||
</style> |
||||
|
||||
{# for spacing below the banner; see banner.html template. -- sudoman 2017-03-09 #} |
||||
{# |
||||
<div style="margin-top: 64px;"></div> |
||||
#} |
||||
|
||||
<div class="noselect" style="display: inline; margin-right: 40px;"> |
||||
<div style="display: inline; margin-right: 40px;"><a href="https://my.fsf.org/donate">Donate</a></div> |
||||
<a href="http://fsf.org/jfb"> |
||||
<img id="join-button" src="//static.fsf.org/nosvn/join.en.png" alt="Join now" style="vertical-align: middle;"> |
||||
</a> |
||||
</div> |
||||
|
@ -1,32 +0,0 @@ |
||||
{# |
||||
# MediaGoblin for LibrePlanet |
||||
# Copyright (C) 2011, 2012 MediaGoblin contributors |
||||
# Copyright (C) 2015 David Thompson <davet@gnu.org> |
||||
# |
||||
# This program is free software: you can redistribute it and/or modify |
||||
# it under the terms of the GNU Affero General Public License as published by |
||||
# the Free Software Foundation, either version 3 of the License, or |
||||
# (at your option) any later version. |
||||
# |
||||
# This program is distributed in the hope that it will be useful, |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
# GNU Affero General Public License for more details. |
||||
# |
||||
# You should have received a copy of the GNU Affero General Public License |
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
#} |
||||
{% extends "mediagoblin/base.html" %} |
||||
|
||||
{% from "mediagoblin/utils/object_gallery.html" import object_gallery %} |
||||
|
||||
{% block title %} |
||||
{{ title }} — {{ super() }} |
||||
{% endblock %} |
||||
|
||||
{% block mediagoblin_content -%} |
||||
<h1>{{ title }}</h1> |
||||
|
||||
{{ object_gallery(request, media_entries, pagination) }} |
||||
|
||||
{% endblock %} |
@ -1,103 +0,0 @@ |
||||
{# |
||||
# MediaGoblin for LibrePlanet |
||||
# Copyright (C) 2011, 2012 MediaGoblin contributors |
||||
# Copyright (C) 2015 David Thompson <davet@gnu.org> |
||||
# |
||||
# This program is free software: you can redistribute it and/or modify |
||||
# it under the terms of the GNU Affero General Public License as published by |
||||
# the Free Software Foundation, either version 3 of the License, or |
||||
# (at your option) any later version. |
||||
# |
||||
# This program is distributed in the hope that it will be useful, |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
# GNU Affero General Public License for more details. |
||||
# |
||||
# You should have received a copy of the GNU Affero General Public License |
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
#} |
||||
{% extends "mediagoblin/base.html" %} |
||||
|
||||
{% from "mediagoblin/utils/object_gallery.html" import media_grid %} |
||||
|
||||
{% set feed_url = request.urlgen('mediagoblin.listings.atom_feed') %} |
||||
|
||||
{% block mediagoblin_head -%} |
||||
{% set feed_url = request.urlgen('mediagoblin.listings.atom_feed') -%} |
||||
<link rel="alternate" type="application/atom+xml" href="{{ feed_url }}"> |
||||
{%- endblock mediagoblin_head %} |
||||
|
||||
{% block mediagoblin_content %} |
||||
<h1>{% trans %}LibrePlanet{% endtrans %}</h1> |
||||
<img class="right_align" src="//static.fsf.org/nosvn/libreplanet/wiki/lp_logo_small_stacked.png" /> |
||||
<p> |
||||
This site hosts media about free software and the amazing community |
||||
that uses and builds it. Much of the media is from our yearly <a href="https://libreplanet.org/wiki/LibrePlanet:Conference">LibrePlanet |
||||
conference</a> in the Boston area, USA, but some is from other events. |
||||
</p> |
||||
|
||||
<p> |
||||
This site and the conference are run by the <a href="https://www.fsf.org">Free Software Foundation</a>, a nonprofit |
||||
with three decades of experience promoting and defending computer user |
||||
freedom. The site itself is running <a href="http://mediagoblin.org">GNU |
||||
MediaGoblin</a>, a wonderful free media hosting platform. Enjoy! |
||||
</p> |
||||
<div class="clear"></div> |
||||
|
||||
<div style="margin-top:40px;"> |
||||
<p>We uploaded most of the LibrePlanet 2017 videos! We'll add the rest as soon as we can.</p> |
||||
</div> |
||||
|
||||
<h2>{% trans %}LibrePlanet 2017 Keynotes{% endtrans %}</h2> |
||||
{{ media_grid(request, lp2017_keynotes) }} |
||||
<div class="clear"></div> |
||||
|
||||
<h2>{% trans %}LibrePlanet 2017 Videos{% endtrans %}</h2> |
||||
{{ media_grid(request, lp2017_videos) }} |
||||
<div class="clear"></div> |
||||
<p> |
||||
<a href="/u/libreplanet/tag/libreplanet-2017-video/">View all LibrePlanet 2017 videos</a> |
||||
</p> |
||||
|
||||
<h2>{% trans %}LibrePlanet 2016 Videos{% endtrans %}</h2> |
||||
{{ media_grid(request, lp2016_videos) }} |
||||
<div class="clear"></div> |
||||
<p> |
||||
<a href="/u/libreplanet/tag/libreplanet-2016-video/">View all LibrePlanet 2016 videos</a> |
||||
</p> |
||||
|
||||
{# commenting out featured media sections for front page #} |
||||
{# |
||||
<h2>{% trans %}Featured Videos{% endtrans %}</h2> |
||||
{{ media_grid(request, featured_videos) }} |
||||
<div class="clear"></div> |
||||
<p> |
||||
<a href="/videos/featured">View all featured videos</a> |
||||
</p> |
||||
|
||||
<h2>{% trans %}Featured Photos{% endtrans %}</h2> |
||||
{{ media_grid(request, featured_images) }} |
||||
<div class="clear"></div> |
||||
<p> |
||||
<a href="/photos/featured">View all featured photos</a> |
||||
</p> |
||||
#} |
||||
|
||||
<h2>{% trans %}All Videos{% endtrans %}</h2> |
||||
{{ media_grid(request, videos) }} |
||||
<div class="clear"></div> |
||||
<p> |
||||
<a href="/videos">View all videos</a> |
||||
</p> |
||||
|
||||
<h2>{% trans %}All Photos{% endtrans %}</h2> |
||||
{{ media_grid(request, images) }} |
||||
<div class="clear"></div> |
||||
<p> |
||||
<a href="/photos">View all photos</a> |
||||
</p> |
||||
|
||||
{#- Need to set feed_url within this block so template can use it. -#} |
||||
{%- set feed_url = feed_url -%} |
||||
{%- include "mediagoblin/utils/feed_link.html" -%} |
||||
{% endblock %} |
@ -1,62 +0,0 @@ |
||||
# MediaGoblin for LibrePlanet |
||||
# Copyright (C) 2015 David Thompson <davet@gnu.org> |
||||
# |
||||
# This program is free software: you can redistribute it and/or modify |
||||
# it under the terms of the GNU Affero General Public License as published by |
||||
# the Free Software Foundation, either version 3 of the License, or |
||||
# (at your option) any later version. |
||||
# |
||||
# This program is distributed in the hope that it will be useful, |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
# GNU Affero General Public License for more details. |
||||
# |
||||
# You should have received a copy of the GNU Affero General Public License |
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
||||
from mediagoblin import mg_globals |
||||
from mediagoblin.db.models import MediaEntry |
||||
from mediagoblin.db.util import media_entries_for_tag_slug |
||||
from mediagoblin.tools.pagination import Pagination |
||||
from mediagoblin.tools.response import render_to_response |
||||
from mediagoblin.decorators import uses_pagination |
||||
|
||||
def type_listing(media_type, title, request, page, tag=None): |
||||
if (tag == None): |
||||
cursor = MediaEntry.query |
||||
else: |
||||
cursor = media_entries_for_tag_slug(request.db, tag) |
||||
|
||||
cursor = cursor.\ |
||||
filter((MediaEntry.media_type == media_type) |
||||
& (MediaEntry.state == u'processed')).\ |
||||
order_by(MediaEntry.created.desc()) |
||||
|
||||
pagination = Pagination(page, cursor) |
||||
media_entries = pagination() |
||||
|
||||
return render_to_response( |
||||
request, |
||||
'libreplanet/listing.html', |
||||
{'title': title, |
||||
'media_entries': media_entries, |
||||
'pagination': pagination}) |
||||
|
||||
|
||||
@uses_pagination |
||||
def image_listing(request, page): |
||||
return type_listing(u'mediagoblin.media_types.image', 'Photos', request, page) |
||||
|
||||
@uses_pagination |
||||
def video_listing(request, page): |
||||
return type_listing(u'mediagoblin.media_types.video', 'Videos', request, page) |
||||
|
||||
|
||||
@uses_pagination |
||||
def featured_image_listing(request, page): |
||||
return type_listing(u'mediagoblin.media_types.image', 'Featured Photos', request, page, "featured") |
||||
|
||||
@uses_pagination |
||||
def featured_video_listing(request, page): |
||||
return type_listing(u'mediagoblin.media_types.video', 'Featured Videos', request, page, "featured") |
||||
|
Loading…
Reference in new issue