First commit!
authorDavid Thompson <davet@gnu.org>
Tue, 31 Mar 2015 18:33:46 +0000 (14:33 -0400)
committerDavid Thompson <davet@gnu.org>
Tue, 31 Mar 2015 18:33:46 +0000 (14:33 -0400)
.gitignore [new file with mode: 0644]
AUTHORS [new file with mode: 0644]
COPYING [new file with mode: 0644]
README.md [new file with mode: 0644]
mediagoblin_libreplanet/__init__.py [new file with mode: 0644]
mediagoblin_libreplanet/templates/libreplanet/listing.html [new file with mode: 0644]
mediagoblin_libreplanet/templates/libreplanet/root.html [new file with mode: 0644]
mediagoblin_libreplanet/views.py [new file with mode: 0644]
setup.py [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..d424c36
--- /dev/null
@@ -0,0 +1,2 @@
+*.pyc
+/mediagoblin_libreplanet.egg-info/
diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
index 0000000..0372119
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1 @@
+David Thompson <davet@gnu.org>
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..b80c5d7
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,69 @@
+=========
+ COPYING
+=========
+
+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, in the file ``licenses/AGPLv3.txt``.
+If not, see <http://www.gnu.org/licenses/>.
+
+
+Translation files located under ``mediagoblin/i18n/`` directory tree
+are 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.
+
+You should have received a copy of the GNU Affero General Public
+License along with this program, in the file ``licenses/AGPLv3.txt``.
+If not, see <http://www.gnu.org/licenses/>.
+
+
+JavaScript files located in the ``mediagoblin/`` directory tree
+are free software: you can redistribute and/or modify them 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.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this program, in the file ``licenses/LGPLv3.txt``.
+If not, see <http://www.gnu.org/licenses/>.
+
+
+Documentation files located in the ``docs/`` directory tree and all
+original documentation theme CSS and assets (including image files)
+are released under a CC0 license.  To the extent possible under law,
+the author(s) have dedicated all copyright and related and neighboring
+rights to these files to the public domain worldwide.  These files are
+distributed without any warranty.
+
+You should have received a copy of the CC0 license in the file
+``licenses/CC0_1.0.txt``.  If not, see
+<http://creativecommons.org/publicdomain/zero/1.0/>.
+
+
+CSS, images and video located in the ``mediagoblin/`` directory tree are
+released under a CC0 license.  To the extent possible under law, the author(s)
+have dedicated all copyright and related and neighboring rights to these
+files to the public domain worldwide.  These files are distributed without
+any warranty.
+
+You should have received a copy of the CC0 license in the file
+``licenses/CC0_1.0.txt``.  If not, see
+<http://creativecommons.org/publicdomain/zero/1.0/>.
+
+
+Additional library software has been made available in the ``extlib/``
+directory.  All of it is Free Software and can be distributed under
+liberal terms, but those terms may differ in detail from the AGPL's
+particulars.  See each package's license file in the extlib directory
+for additional terms.
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..d0236c5
--- /dev/null
+++ b/README.md
@@ -0,0 +1,4 @@
+MediaGoblin for LibrePlanet
+===========================
+
+A simple plugin for https://media.libreplanet.org
diff --git a/mediagoblin_libreplanet/__init__.py b/mediagoblin_libreplanet/__init__.py
new file mode 100644 (file)
index 0000000..e27ba7e
--- /dev/null
@@ -0,0 +1,73 @@
+# 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
+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, user_not_banned
+
+PLUGIN_DIR = os.path.dirname(__file__)
+MAX_HOME_ITEMS = 20
+LP_TAG = 'libreplanet2014'
+
+_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):
+    return media_entries_for_tag_slug(db, 'libreplanet2015').\
+        filter(MediaEntry.media_type == type).\
+        order_by(MediaEntry.created.desc()).\
+        limit(MAX_HOME_ITEMS)
+
+@user_not_banned
+def frontpage_view(request):
+    images = lp_media_for_type(request.db, u'mediagoblin.media_types.image')
+    videos = lp_media_for_type(request.db, u'mediagoblin.media_types.video')
+
+    return render_to_response(
+        request, 'libreplanet/root.html',
+        {'images': images,
+         'videos': videos,
+         'allow_registration': mg_globals.app_config["allow_registration"]})
+
+def frontpage_view_hook():
+    return frontpage_view
+
+register_routes([('all-videos', '/videos',
+                  'mediagoblin_libreplanet.views:video_listing'),
+                 ('all-photos', '/photos',
+                  'mediagoblin_libreplanet.views: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
+}
diff --git a/mediagoblin_libreplanet/templates/libreplanet/listing.html b/mediagoblin_libreplanet/templates/libreplanet/listing.html
new file mode 100644 (file)
index 0000000..80f58c7
--- /dev/null
@@ -0,0 +1,32 @@
+{#
+# 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 }} &mdash; {{ super() }}
+{% endblock %}
+
+{% block mediagoblin_content -%}
+  <h1>{{ title }}</h1>
+
+  {{ object_gallery(request, media_entries, pagination) }}
+
+{% endblock %}
diff --git a/mediagoblin_libreplanet/templates/libreplanet/root.html b/mediagoblin_libreplanet/templates/libreplanet/root.html
new file mode 100644 (file)
index 0000000..73896a4
--- /dev/null
@@ -0,0 +1,60 @@
+{#
+# 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/2015/graphical_assets/lp-logo-for-gmg.svg" />
+  <p>
+    {% trans %}The videos on this site were recorded during&nbsp;
+      <a href="http://libreplanet.org">LibrePlanet</a>, an annual
+      conference for free software enthusiasts held by the Free
+      Software Foundation in Cambridge, MA. This site is running
+      <a href="http://mediagoblin.org">MediaGoblin</a>, a great piece
+      of free media hosting software.{% endtrans %}
+  </p>
+  <div class="clear"></div>
+
+  <h2>{% trans %}Videos{% endtrans %}</h2>
+  {{ media_grid(request, videos) }}
+  <div class="clear"></div>
+  <p>
+    <a href="/videos">View all LibrePlanet videos</a>
+  </p>
+
+  <h2>{% trans %}Photos{% endtrans %}</h2>
+  {{ media_grid(request, images) }}
+  <div class="clear"></div>
+  <p>
+    <a href="/photos">View all LibrePlanet 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 %}
diff --git a/mediagoblin_libreplanet/views.py b/mediagoblin_libreplanet/views.py
new file mode 100644 (file)
index 0000000..78e4d0e
--- /dev/null
@@ -0,0 +1,46 @@
+# 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(type, title, request, page):
+    cursor = MediaEntry.query.\
+             filter(MediaEntry.media_type == type).\
+             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)
diff --git a/setup.py b/setup.py
new file mode 100644 (file)
index 0000000..59bd3f5
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,26 @@
+# 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 setuptools import setup, find_packages
+
+setup(
+    name='mediagoblin_libreplanet',
+    version='0.1',
+    packages=find_packages(),
+    include_package_data=True,
+    install_requires=[],
+    license='AGPLv3',
+    )