Skip to content
Snippets Groups Projects
Commit 19aa0092 authored by Julian's avatar Julian
Browse files

work of dashboardfeeds

parent 4d323519
No related branches found
No related tags found
No related merge requests found
......@@ -5,4 +5,4 @@ try:
except Exception:
__version__ = "unknown"
default_app_config = "aleksis.apps.dashboardfeeds.apps.DefaulConfig"
default_app_config = "aleksis.apps.dashboardfeeds.apps.DefaultConfig"
from django.contrib import admin
from .models import DashboardWidget, RSSFeedWidget
admin.site.register(DashboardWidget)
admin.site.register(RSSFeedWidget)
# Generated by Django 3.0.2 on 2020-01-13 14:35
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='DashboardWidget',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=150, verbose_name='Widget Title')),
('active', models.BooleanField(blank=True, verbose_name='Activate Widget')),
],
options={
'verbose_name': 'Dashboard Widget',
'verbose_name_plural': 'Dashboard Widgets',
},
),
migrations.CreateModel(
name='RSSFeedWidget',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('url', models.URLField(verbose_name='RSS Url')),
('widget', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='widget', to='dashboardfeeds.DashboardWidget', verbose_name='widget')),
],
options={
'verbose_name': 'RSS Widget',
'verbose_name_plural': 'RSS Widgets',
},
),
]
# Generated by Django 3.0.2 on 2020-01-13 21:07
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dashboardfeeds', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='dashboardwidget',
name='base_url',
field=models.URLField(default='example.com', help_text='index url of the news website (as link for users)', verbose_name='Base URL'),
preserve_default=False,
),
]
from typing import Optional
from django.contrib.auth import get_user_model
from django.contrib.auth.models import User
from django.db import models
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
import feedparser
from constance import config
from aleksis.core.util import network
class DashboardWidget(models.Model):
title = models.CharField(max_length=150, verbose_name=_("Widget Title"))
active = models.BooleanField(blank=True, verbose_name=_("Activate Widget"))
base_url = models.URLField(verbose_name=_("Base URL"),
help_text=_("index url of the news website (as link for users)"))
def __str__(self):
return self.title
class Meta:
verbose_name = _("Dashboard Widget")
verbose_name_plural = _("Dashboard Widgets")
# class WordpressFeedWidget(models.Model):
# widget = models.OneToOneField(DashboardWidget, related_name="widget", verbose_name=_("widget"),
# on_delete=models.CASCADE)
# url = models.URLField(verbose_name=_("Wordpress Url"))
# filter_vs_composer = models.BooleanField(verbose_name=_("Filter out Visual Composer Tags?"), blank=True, default=True)
#
# # author_whitelist: list = None,
# # author_blacklist: list = None,
# # category_whitelist: list = None,
# # category_blacklist: list = None,
#
# # https://wordpress.org/support/article/wordpress-feeds/#finding-your-feed-url
#
# def get_feed(self):
# feed = {
# "title": self.widget.title,
# "active": self.widget.active,
# "url": self.url,
# "results": network.get_newest_articles(domain=self.url, ),
# }
#
# class Meta:
# verbose_name = _("Wordpress Widget")
# verbose_name_plural = _("Wordpress Widgets")
class RSSFeedWidget(models.Model):
template = "dashboardfeeds/rss.html"
widget = models.OneToOneField(DashboardWidget, related_name="widget", verbose_name=_("widget"),
on_delete=models.CASCADE)
url = models.URLField(verbose_name=_("RSS Url"))
def get_feed(self):
feed = {
"title": self.widget.title,
"active": self.widget.active,
"url": self.url,
"base_url": self.widget.base_url,
"result": feedparser.parse(self.url)["entries"][0],
}
return feed
class Meta:
verbose_name = _("RSS Widget")
verbose_name_plural = _("RSS Widgets")
aleksis/apps/dashboardfeeds/static/dashboardfeeds/image_not_found.png

50 KiB

{% load i18n static %}
<div class="card">
<div class="card-image">
<span class="badge-image z-depth-2">{{ title }}</span>
{# <img src="{{ result.enclosures.0.href }}" alt="{{ title }} – {% trans "title image" %}">#}
<img src="{{ result.enclosures.0.href }}" alt="{{ title }} – {% trans "title image" %}"
onerror="this.src='{% static "dashboardfeeds/image_not_found.png" %}'; "/>
</div>
{# THIS DOSEN'T WOKR! #}
<div class="card-content"><span class="card-title">{{ result.title }}</span>
{{ result.summary|safe }}
</div>
<div class="card-action">
<a href="{{ result.link }}" target="_blank">Mehr lesen</a>
</div>
</div><a class="btn hundred-percent primary-color" href="{{ base_url }}" target="_blank">Weitere
Artikel<i class="material-icons right">arrow_forward</i></a>
from django.contrib.auth.decorators import login_required
from django.http import Http404, HttpRequest, HttpResponse
from django.shortcuts import render
from django.template.loader import render_to_string
from .models import DashboardWidget
@login_required
......@@ -8,3 +11,16 @@ def empty(request: HttpRequest) -> HttpResponse:
context = {}
return render(request, "dashboardfeeds/empty.html", context)
def get_widgets(request):
widgets = DashboardWidget.objects.all()
widgets_to_return = []
for widget in widgets:
feed = widget.widget.get_feed()
widgets_to_return.append(render_to_string(widget.widget.template, feed, request))
return widgets_to_return
poetry.lock 0 → 100644
This diff is collapsed.
......@@ -21,6 +21,7 @@ classifiers = [
[tool.poetry.dependencies]
python = "^3.7"
AlekSIS = { path = "../../.." }
feedparser = "^5.2.1"
[build-system]
requires = ["poetry>=1.0"]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment