Skip to content
Snippets Groups Projects
Commit 28fbbe20 authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

- Show whole plan on dashboard

- Disable "My status" and "Exams"
- Add beta notice
- Add fallback view to dashboard urls
- Add excepts for network operations
- Comment and refactor
parent 3c31d325
No related branches found
No related tags found
1 merge request!86Merge school-apps
const REFRESH_TIME = 15;
function WithCheckCircleIcon(props) {
return <div className={"col s12"}>
<i className={"material-icons left green-text"}>check_circle</i>
{props.children}
</div>
}
// function WithCheckCircleIcon(props) {
// return <div className={"col s12"}>
// <i className={"material-icons left green-text"}>check_circle</i>
// {props.children}
// </div>
// }
class Dashboard extends React.Component {
constructor() {
......@@ -23,7 +23,6 @@ class Dashboard extends React.Component {
}
const timeout = window.setTimeout(this.updateRefreshTime, 1000);
this.setState({refreshIn: this.state.refreshIn - 1, timeout: timeout});
console.log("WOrk");
} else {
this.updateData();
}
......@@ -55,7 +54,7 @@ class Dashboard extends React.Component {
console.log(notification);
$("#not-" + notification.id).addClass("scale-out");
window.setTimeout(() => {
$("#not-" + notification.id).remove();
$("#not-" + notification.id).hide();
}, 200);
$.getJSON(API_URL + "/notifications/read/" + notification.id);
this.updateData();
......@@ -64,7 +63,8 @@ class Dashboard extends React.Component {
render() {
if (this.state.isLoading) {
return <div className={"row center-via-flex container"} style={{"height": "10em"}}>
// Show loading screen until first data are loaded
return <div className={"row center-via-flex container"} style={{"height": "15em"}}>
<div className={"center2-via-flex"}>
<div className="preloader-wrapper big active">
<div className="spinner-layer spinner-primary">
......@@ -79,7 +79,7 @@ class Dashboard extends React.Component {
</div>
</div>
</div>
<p className={"text-center"}>Wird geladen </p>
<p className={"text-center flow-text"}>Deine aktuellen Informationen werden geladen </p>
</div>
</div>;
}
......@@ -97,19 +97,32 @@ class Dashboard extends React.Component {
Moin, {this.state.user.full_name !== "" ? this.state.user.full_name : this.state.user.username}. Hier
findest du alle aktuellen Informationen:</p>
<div className={"alert success"}>
<p>
<i className={"material-icons left"}>report_problem</i>
Das neue Dashboard von SchoolApps befindet sich momentan in der <strong>Testphase</strong>. Falls
Fehler auftreten oder du einen Verbesserungsvorschlag für uns hast, schreibe uns bitte unter <a
href={"mailto:support@katharineum.de"}>support@katharineum.de</a>.
</p>
</div>
{/* UNREAD NOTIFICATIONS*/}
{this.state.unread_notifications && this.state.unread_notifications.length > 0 ?
this.state.unread_notifications.map(function (notification) {
return <div className={"alert primary scale-transition"} id={"not-" + notification.id}
key={notification.id}>
<div>
{/* Info icon */}
<i className={"material-icons left"}>info</i>
<div className={"right"}>
{/* Button for marking as read*/}
<button className={"btn-flat"} onClick={() => that.closeNotification(notification)}>
<i className={"material-icons center"}>close</i>
{/*Gelesen*/}
</button>
</div>
{/* Notification title and desc */}
<strong>{notification.title}</strong>
<p>{notification.description}</p>
</div>
......@@ -120,8 +133,6 @@ class Dashboard extends React.Component {
{this.state.plan && this.state.plan.hints.length > 0 ?
<div>
{this.state.plan.hints.map(function (hint, idx) {
const from_date = moment(hint.from_date);
const to_date = moment(hint.to_date);
return <div className="alert primary" key={idx}>
<div>
<em className="right hide-on-small-and-down">
......@@ -143,78 +154,81 @@ class Dashboard extends React.Component {
<div className={"row"}>
<div className={"dashboard-cards"}>
{/* CURRENT SUBSTITUTIONS*/}
<div className="card">
{this.state.has_plan ? <div className="card-content">
{/* MY PLAN */}
{this.state.has_plan ? <div className="card">
<div className="card-content">
{/* Show individualized title */}
<span className="card-title">
Vertretungen {this.state.plan.type === 2 ? "der" : "für"} <em>
Plan {this.state.plan.type === 2 ? "der" : "für"} <em>
{this.state.plan.name}</em> für {this.state.date_formatted}
</span>
{this.state.lessons && this.state.lessons.length > 0 ? <div>
{this.state.lessons.map(function (lesson) {
return <div className="row">
<div className="col s4">
<div className="card timetable-title-card">
<div className="card-content">
<span className="card-title left">
{lesson.time.number_format}
</span>
<div
className="right timetable-time grey-text text-darken-2">
<span>{lesson.time.start}</span>
<br/>
<span>{lesson.time.end}</span>
</div>
{/* Show plan */}
{this.state.lessons && this.state.lessons.length > 0 ? <div className={"timetable-plan"}>
{this.state.lessons.map(function (lesson) {
// Show one lesson row
return <div className="row">
{/* Show time information*/}
<div className="col s4">
<div className="card timetable-title-card">
<div className="card-content">
{/* Lesson number*/}
<span className="card-title left">
{lesson.time.number_format}
</span>
{/* Times */}
<div className="right timetable-time grey-text text-darken-2">
<span>{lesson.time.start}</span>
<br/>
<span>{lesson.time.end}</span>
</div>
</div>
</div>
<div className={"col s8"} dangerouslySetInnerHTML={{__html: lesson.html}}/>
</div>;
})}
</div>
:
<p>Keine Vertretungen für morgen vorhanden.</p>
}
</div> : <p className={"flow-text"}>Keine Vertretungen vorhanden.</p>}
{this.state.has_plan ? <div className="card-action">
</div>
{/* Show lesson content (via generated HTML by Django) */}
<div className={"col s8"} dangerouslySetInnerHTML={{__html: lesson.html}}/>
</div>;
})}
</div> : ""}
</div>
<div className="card-action">
<a href={MY_PLAN_URL}>
<span className="badge new primary-color card-action-badge">SMART PLAN</span>
anzeigen
</a>
</div> : ""}
</div>
</div>
</div> : ""}
{/* MY STATUS */}
<div className="card">
<div className="card-content">
<span className="card-title">Mein Status</span>
<div className={"row"}>
<WithCheckCircleIcon>
{this.state.user_type_formatted}
</WithCheckCircleIcon>
{this.state.user_type === 1 || this.state.user_type === 2 ? <WithCheckCircleIcon>
Meine Klassen: {this.state.classes.join(", ")}
</WithCheckCircleIcon> : ""}
{this.state.user_type === 1 || this.state.user_type === 2 ? <WithCheckCircleIcon>
Meine Kurse: {this.state.courses.join(", ")}
</WithCheckCircleIcon> : ""}
{this.state.user_type === 1 ? <WithCheckCircleIcon>
Meine Fächer: {this.state.subjects.join(", ")}
</WithCheckCircleIcon> : ""}
{this.state.user_type === 1 || this.state.has_wifi ?
<WithCheckCircleIcon>WLAN</WithCheckCircleIcon> : <div className={"col"}>
<i className={"material-icons left red-text"}>cancel</i>
Kein WLAN
</div>}
</div>
</div>
</div>
{/*<div className="card">*/}
{/* <div className="card-content">*/}
{/* <span className="card-title">Mein Status</span>*/}
{/* <div className={"row"}>*/}
{/* <WithCheckCircleIcon>*/}
{/* {this.state.user_type_formatted}*/}
{/* </WithCheckCircleIcon>*/}
{/* {this.state.user_type === 1 || this.state.user_type === 2 ? <WithCheckCircleIcon>*/}
{/* Meine Klassen: {this.state.classes.join(", ")}*/}
{/* </WithCheckCircleIcon> : ""}*/}
{/* {this.state.user_type === 1 || this.state.user_type === 2 ? <WithCheckCircleIcon>*/}
{/* Meine Kurse: {this.state.courses.join(", ")}*/}
{/* </WithCheckCircleIcon> : ""}*/}
{/* {this.state.user_type === 1 ? <WithCheckCircleIcon>*/}
{/* Meine Fächer: {this.state.subjects.join(", ")}*/}
{/* </WithCheckCircleIcon> : ""}*/}
{/* {this.state.user_type === 1 || this.state.has_wifi ?*/}
{/* <WithCheckCircleIcon>WLAN</WithCheckCircleIcon> : <div className={"col"}>*/}
{/* <i className={"material-icons left red-text"}>cancel</i>*/}
{/* Kein WLAN*/}
{/* </div>}*/}
{/* </div>*/}
{/* </div>*/}
{/*</div>*/}
{/* CURRENT EVENTS*/}
{this.state.current_events && this.state.current_events.length > 0 ?
......@@ -230,37 +244,38 @@ class Dashboard extends React.Component {
})}
</div>
<div className="card-action">
<a href="https://katharineum-zu-luebeck.de/aktuelles/termine/"
target={"_blank"}>Weitere Termine
<a href="https://katharineum-zu-luebeck.de/aktuelles/termine/" target={"_blank"}>
Weitere Termine
</a>
</div>
</div>
: ""}
{/* EXAMS */}
<div className="card">
<div className="card-content">
<span className="card-title">Klausuren der <em>Eb</em></span>
<div className="card-panel event-card">
<span className={"title"}>Sextanereinschulung</span>
<br/>
28.Aug. 2019 18:30 - 22:00
</div>
<div className="card-panel event-card">
<span className={"title"}>Sextanereinschulung</span>
<br/>
28.Aug. 2019 18:30 - 22:00
</div>
</div>
<div className="card-action">
<a href="https://katharineum-zu-luebeck.de/aktuelles/termine/">Alle Klausuren</a>
</div>
</div>
{/*<div className="card">*/}
{/* <div className="card-content">*/}
{/* <span className="card-title">Klausuren der <em>Eb</em></span>*/}
{/* <div className="card-panel event-card">*/}
{/* <span className={"title"}>Sextanereinschulung</span>*/}
{/* <br/>*/}
{/* 28.Aug. 2019 18:30 - 22:00*/}
{/* </div>*/}
{/* <div className="card-panel event-card">*/}
{/* <span className={"title"}>Sextanereinschulung</span>*/}
{/* <br/>*/}
{/* 28.Aug. 2019 18:30 - 22:00*/}
{/* </div>*/}
{/* </div>*/}
{/* <div className="card-action">*/}
{/* <a href="https://katharineum-zu-luebeck.de/aktuelles/termine/">Alle Klausuren</a>*/}
{/* </div>*/}
{/*</div>*/}
{/* NEWEST ARTICLE FROM HOMEPAGE*/}
{this.state.newest_article ?
<div>
<div className="card">
{/* Image with badge and title */}
<div className="card-image">
<span className={"badge-image"}>Aktuelles von der Homepage</span>
<img src={this.state.newest_article.image_url}
......@@ -268,13 +283,19 @@ class Dashboard extends React.Component {
<span className="card-title"
dangerouslySetInnerHTML={{__html: this.state.newest_article.title}}/>
</div>
{/* Short text */}
<div className="card-content">
<p dangerouslySetInnerHTML={{__html: this.state.newest_article.short_text}}/>
</div>
{/* Link to article */}
<div className="card-action">
<a href={this.state.newest_article.link} target={"_blank"}>Mehr lesen</a>
</div>
</div>
{/* Link to homepage */}
<a className={"btn hundred-percent primary-color"}
href={"https://katharineum-zu-luebeck.de/"}
target={"_blank"}>
......
......@@ -14,7 +14,7 @@ class CurrentEventsSettings(dbsettings.Group):
calendar_url = dbsettings.StringValue("URL des Kalenders", help_text="Pfad zu einer ICS-Datei",
default="https://nimbus.katharineum.de/remote.php/dav/public-calendars"
"/owit7yysLB2CYNTq?export")
events_count = dbsettings.IntegerValue("Anzahl der Termine, die angezeigt werden sollen", default=3)
events_count = dbsettings.IntegerValue("Anzahl der Termine, die angezeigt werden sollen", default=5)
class MyStatusSettings(dbsettings.Group):
......
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='dashboard'),
path('api', views.api_information, name="api_information"),
path('api/notifications/read/<int:id>', views.api_read_notification, name="api_read_notification"),
path('api/my-plan', views.api_my_plan_html, name="api_my_plan_html"),
]
from untisconnect.models import Terms, Schoolyear
try:
from . import views
urlpatterns = [
path('', views.index, name='dashboard'),
path('api', views.api_information, name="api_information"),
path('api/notifications/read/<int:id>', views.api_read_notification, name="api_read_notification"),
path('api/my-plan', views.api_my_plan_html, name="api_my_plan_html"),
]
except (Terms.DoesNotExist, Schoolyear.DoesNotExist):
from timetable import fallback_view
urlpatterns = [
path('', fallback_view.fallback, name='dashboard'),
path('api', fallback_view.fallback, name="api_information"),
path('api/notifications/read/<int:id>', fallback_view.fallback, name="api_read_notification"),
path('api/my-plan', fallback_view.fallback, name="api_my_plan_html"),
]
from email.utils import formatdate
from django.contrib.auth.decorators import login_required
from django.core.serializers import serialize
from django.http import JsonResponse
from django.shortcuts import render, get_object_or_404
from django.template.loader import render_to_string
......@@ -9,15 +8,14 @@ from django.utils import timezone, formats
from martor.templatetags.martortags import safe_markdown
from dashboard.settings import latest_article_settings, current_events_settings
from helper import get_newest_articles, get_current_events, get_newest_article_from_news
from schoolapps.settings import LONG_WEEK_DAYS
from helper import get_current_events, get_newest_article_from_news, get_current_events_with_cal
from timetable.helper import get_name_for_next_week_day_from_today, get_type_and_object_of_user
from timetable.hints import get_all_hints_by_class_and_time_period, get_all_hints_for_teachers_by_time_period
from timetable.views import get_next_weekday_with_time, get_calendar_week
from untisconnect.api import TYPE_TEACHER, TYPE_CLASS
from untisconnect.plan import get_plan
from .models import Activity, Notification
from userinformation import UserInformation
from .models import Activity, Notification
@login_required
......@@ -37,35 +35,31 @@ def api_information(request):
notifications = request.user.notifications.all().filter(user=request.user).order_by('-created_at')[:5]
unread_notifications = request.user.notifications.all().filter(user=request.user, read=False).order_by(
'-created_at')
# Get latest article from homepage
if latest_article_settings.latest_article_is_activated:
newest_article = get_newest_article_from_news(domain=latest_article_settings.wp_domain)
else:
newest_article = None
# Get date information
date_formatted = get_name_for_next_week_day_from_today()
next_weekday = get_next_weekday_with_time(timezone.now(), timezone.now().time())
# Get user type (student, teacher, etc.)
_type, el = get_type_and_object_of_user(request.user)
hints = None
if _type == TYPE_TEACHER:
# Teacher
plan_id = el.id
raw_type = "teacher"
# Get hints
# Get hints
if _type == TYPE_TEACHER:
# Get hints for teachers
hints = list(get_all_hints_for_teachers_by_time_period(next_weekday, next_weekday))
elif _type == TYPE_CLASS:
# Student
plan_id = el.id
raw_type = "class"
# Get hints
# Get hints for students
hints = list(get_all_hints_by_class_and_time_period(el, next_weekday, next_weekday))
else:
hints = []
# Serialize hints
ser = []
for hint in hints:
serialized = {}
......@@ -74,7 +68,7 @@ def api_information(request):
serialized["html"] = safe_markdown(hint.text)
ser.append(serialized)
hints = ser
print(hints)
context = {
'activities': list(activities.values()),
'notifications': list(notifications.values()),
......@@ -86,8 +80,7 @@ def api_information(request):
'subjects': UserInformation.user_subjects(request.user),
'has_wifi': UserInformation.user_has_wifi(request.user),
"newest_article": newest_article,
"current_events": get_current_events(
limit=current_events_settings.events_count) if current_events_settings.current_events_is_activated else None,
"current_events": get_current_events_with_cal() if current_events_settings.current_events_is_activated else None,
"date_formatted": date_formatted,
"user": {
"username": request.user.username,
......@@ -95,6 +88,7 @@ def api_information(request):
}
}
# If plan is available for user give extra information
if _type is not None:
context["plan"] = {
"type": _type,
......@@ -105,7 +99,6 @@ def api_information(request):
else:
context["has_plan"] = False
print(context)
return JsonResponse(context)
......@@ -116,6 +109,7 @@ def api_read_notification(request, id):
notification = get_object_or_404(Notification, id=id, user=request.user)
notification.read = True
notification.save()
return JsonResponse({"success": True})
......@@ -125,23 +119,14 @@ def api_my_plan_html(request):
# Get user type (student, teacher, etc.)
_type, el = get_type_and_object_of_user(request.user)
hints = None
if _type == TYPE_TEACHER:
# Teacher
plan_id = el.id
raw_type = "teacher"
# Get hints
# hints = list(get_all_hints_for_teachers_by_time_period(next_weekday, next_weekday))
elif _type == TYPE_CLASS:
# Student
plan_id = el.id
raw_type = "class"
# Get hints
# hints = list(get_all_hints_by_class_and_time_period(el, next_weekday, next_weekday))
else:
return JsonResponse({"success": False})
......@@ -150,24 +135,18 @@ def api_my_plan_html(request):
calendar_week = next_weekday.isocalendar()[1]
monday_of_week = get_calendar_week(calendar_week, next_weekday.year)["first_day"]
week_day = next_weekday.isoweekday() - 1
print(raw_type, plan_id, next_weekday, calendar_week, monday_of_week)
# Get plan
plan = get_plan(_type, plan_id, smart=True, monday_of_week=monday_of_week)
lessons = []
for row, time in plan:
lesson_container = row[week_day]
for element in lesson_container.elements:
if element.substitution is not None:
print(time)
html = render_to_string("timetable/lesson.html", {"col": lesson_container}, request=request)
time["start"] = formats.date_format(time["start"], "H:i")
time["end"] = formats.date_format(time["end"], "H:i")
lessons.append({"time": time, "html": html})
break
print(lessons)
html = render_to_string("timetable/lesson.html", {"col": lesson_container, "type": _type}, request=request)
time["start"] = formats.date_format(time["start"], "H:i")
time["end"] = formats.date_format(time["end"], "H:i")
lessons.append({"time": time, "html": html})
print(lessons)
return JsonResponse({"success": True, "lessons": lessons})
......
......@@ -7,6 +7,7 @@ from django.template.loader_tags import register
from django.utils import timezone, formats
from ics import Calendar
import requests
from requests import RequestException
from dashboard import settings
......@@ -64,10 +65,12 @@ def get_newest_articles(domain: str = WP_DOMAIN,
suffix: str = "/wp-json/wp/v2/posts"
url: str = domain + suffix
site: requests.request = requests.get(url)
data: dict = site.json()
try:
site: requests.request = requests.get(url, timeout=10)
data: dict = site.json()
except RequestException as e:
print("E", str(e))
return []
posts: list = []
for post in data:
......@@ -108,18 +111,13 @@ def get_newest_articles(domain: str = WP_DOMAIN,
def get_newest_article_from_news(domain=WP_DOMAIN):
newest_articles: list = get_newest_articles(domain=domain, limit=1, category_whitelist=[1, 27])
if len(newest_articles) >= 0:
if len(newest_articles) > 0:
return newest_articles[0]
else:
return None
# Set calendar here
CALENDAR_URL: str = settings.current_events_settings.calendar_url
CALENDAR: Calendar = Calendar(requests.get(CALENDAR_URL).text)
def get_current_events(calendar: Calendar = CALENDAR, limit: int = 5) -> list:
def get_current_events(calendar: Calendar, limit: int = 5) -> list:
"""
Get upcoming events from calendar
:param calendar: The calendar object
......@@ -170,3 +168,20 @@ def get_current_events(calendar: Calendar = CALENDAR, limit: int = 5) -> list:
})
return events
def get_current_events_with_cal(limit: int = 5) -> list:
# Get URL
calendar_url: str = settings.current_events_settings.calendar_url
if calendar_url is None or calendar_url == "":
return []
# Get ICS
try:
calendar: Calendar = Calendar(requests.get(calendar_url, timeout=3).text)
except RequestException as e:
print("E", str(e))
return []
# Get events
return get_current_events(calendar, settings.current_events_settings.events_count)
......@@ -124,7 +124,7 @@ EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# TIMETABLE
TIMETABLE_WIDTH = 5
TIMETABLE_HEIGHT = 10
TIMETABLE_HEIGHT = 9
LESSONS = [('8:00', '1.'), ('8:45', '2.'), ('9:45', '3.'), ('10:35', '4.'), ('11:35', '5.'),
('12:25', '6.'), ('13:15', '7.'), ('14:05', '8.'), ('14:50', '9.')]
SHORT_WEEK_DAYS = ["Mo", "Di", "Mi", "Do", "Fr"]
......
......@@ -46,18 +46,12 @@ function _inherits(subClass, superClass) {
var REFRESH_TIME = 15;
function WithCheckCircleIcon(props) {
return React.createElement(
"div",
{className: "col s12"},
React.createElement(
"i",
{className: "material-icons left green-text"},
"check_circle"
),
props.children
);
}
// function WithCheckCircleIcon(props) {
// return <div className={"col s12"}>
// <i className={"material-icons left green-text"}>check_circle</i>
// {props.children}
// </div>
// }
var Dashboard = function (_React$Component) {
_inherits(Dashboard, _React$Component);
......@@ -74,7 +68,6 @@ var Dashboard = function (_React$Component) {
}
var timeout = window.setTimeout(_this.updateRefreshTime, 1000);
_this.setState({refreshIn: _this.state.refreshIn - 1, timeout: timeout});
console.log("WOrk");
} else {
_this.updateData();
}
......@@ -116,7 +109,7 @@ var Dashboard = function (_React$Component) {
console.log(notification);
$("#not-" + notification.id).addClass("scale-out");
window.setTimeout(function () {
$("#not-" + notification.id).remove();
$("#not-" + notification.id).hide();
}, 200);
$.getJSON(API_URL + "/notifications/read/" + notification.id);
this.updateData();
......@@ -126,9 +119,10 @@ var Dashboard = function (_React$Component) {
key: "render",
value: function render() {
if (this.state.isLoading) {
// Show loading screen until first data are loaded
return React.createElement(
"div",
{className: "row center-via-flex container", style: {"height": "10em"}},
{className: "row center-via-flex container", style: {"height": "15em"}},
React.createElement(
"div",
{className: "center2-via-flex"},
......@@ -157,8 +151,8 @@ var Dashboard = function (_React$Component) {
),
React.createElement(
"p",
{className: "text-center"},
"Wird geladen \u2026"
{className: "text-center flow-text"},
"Deine aktuellen Informationen werden geladen \u2026"
)
)
);
......@@ -187,6 +181,34 @@ var Dashboard = function (_React$Component) {
this.state.user.full_name !== "" ? this.state.user.full_name : this.state.user.username,
". Hier findest du alle aktuellen Informationen:"
),
React.createElement(
"div",
{className: "alert success"},
React.createElement(
"p",
null,
React.createElement(
"i",
{className: "material-icons left"},
"report_problem"
),
"Das neue Dashboard von SchoolApps befindet sich momentan in der ",
React.createElement(
"strong",
null,
"Testphase"
),
". Falls Fehler auftreten oder du einen Verbesserungsvorschlag f\xFCr uns hast, schreibe uns bitte unter ",
React.createElement(
"a",
{
href: "mailto:support@katharineum.de"
},
"support@katharineum.de"
),
"."
)
),
this.state.unread_notifications && this.state.unread_notifications.length > 0 ? this.state.unread_notifications.map(function (notification) {
return React.createElement(
"div",
......@@ -236,8 +258,6 @@ var Dashboard = function (_React$Component) {
"div",
null,
this.state.plan.hints.map(function (hint, idx) {
var from_date = moment(hint.from_date);
var to_date = moment(hint.to_date);
return React.createElement(
"div",
{className: "alert primary", key: idx},
......@@ -272,16 +292,16 @@ var Dashboard = function (_React$Component) {
React.createElement(
"div",
{className: "dashboard-cards"},
React.createElement(
this.state.has_plan ? React.createElement(
"div",
{className: "card"},
this.state.has_plan ? React.createElement(
React.createElement(
"div",
{className: "card-content"},
React.createElement(
"span",
{className: "card-title"},
"Vertretungen ",
"Plan ",
this.state.plan.type === 2 ? "der" : "für",
" ",
React.createElement(
......@@ -294,8 +314,9 @@ var Dashboard = function (_React$Component) {
),
this.state.lessons && this.state.lessons.length > 0 ? React.createElement(
"div",
null,
{className: "timetable-plan"},
this.state.lessons.map(function (lesson) {
// Show one lesson row
return React.createElement(
"div",
{className: "row"},
......@@ -315,9 +336,7 @@ var Dashboard = function (_React$Component) {
),
React.createElement(
"div",
{
className: "right timetable-time grey-text text-darken-2"
},
{className: "right timetable-time grey-text text-darken-2"},
React.createElement(
"span",
null,
......@@ -339,17 +358,9 @@ var Dashboard = function (_React$Component) {
})
);
})
) : React.createElement(
"p",
null,
"Keine Vertretungen f\xFCr morgen vorhanden."
)
) : React.createElement(
"p",
{className: "flow-text"},
"Keine Vertretungen vorhanden."
) : ""
),
this.state.has_plan ? React.createElement(
React.createElement(
"div",
{className: "card-action"},
React.createElement(
......@@ -362,62 +373,8 @@ var Dashboard = function (_React$Component) {
),
"anzeigen"
)
) : ""
),
React.createElement(
"div",
{className: "card"},
React.createElement(
"div",
{className: "card-content"},
React.createElement(
"span",
{className: "card-title"},
"Mein Status"
),
React.createElement(
"div",
{className: "row"},
React.createElement(
WithCheckCircleIcon,
null,
this.state.user_type_formatted
),
this.state.user_type === 1 || this.state.user_type === 2 ? React.createElement(
WithCheckCircleIcon,
null,
"Meine Klassen: ",
this.state.classes.join(", ")
) : "",
this.state.user_type === 1 || this.state.user_type === 2 ? React.createElement(
WithCheckCircleIcon,
null,
"Meine Kurse: ",
this.state.courses.join(", ")
) : "",
this.state.user_type === 1 ? React.createElement(
WithCheckCircleIcon,
null,
"Meine F\xE4cher: ",
this.state.subjects.join(", ")
) : "",
this.state.user_type === 1 || this.state.has_wifi ? React.createElement(
WithCheckCircleIcon,
null,
"WLAN"
) : React.createElement(
"div",
{className: "col"},
React.createElement(
"i",
{className: "material-icons left red-text"},
"cancel"
),
"Kein WLAN"
)
)
)
),
) : "",
this.state.current_events && this.state.current_events.length > 0 ? React.createElement(
"div",
{className: "card"},
......@@ -448,63 +405,11 @@ var Dashboard = function (_React$Component) {
{className: "card-action"},
React.createElement(
"a",
{
href: "https://katharineum-zu-luebeck.de/aktuelles/termine/",
target: "_blank"
},
{href: "https://katharineum-zu-luebeck.de/aktuelles/termine/", target: "_blank"},
"Weitere Termine"
)
)
) : "",
React.createElement(
"div",
{className: "card"},
React.createElement(
"div",
{className: "card-content"},
React.createElement(
"span",
{className: "card-title"},
"Klausuren der ",
React.createElement(
"em",
null,
"Eb"
)
),
React.createElement(
"div",
{className: "card-panel event-card"},
React.createElement(
"span",
{className: "title"},
"Sextanereinschulung"
),
React.createElement("br", null),
"28.Aug. 2019 18:30 - 22:00"
),
React.createElement(
"div",
{className: "card-panel event-card"},
React.createElement(
"span",
{className: "title"},
"Sextanereinschulung"
),
React.createElement("br", null),
"28.Aug. 2019 18:30 - 22:00"
)
),
React.createElement(
"div",
{className: "card-action"},
React.createElement(
"a",
{href: "https://katharineum-zu-luebeck.de/aktuelles/termine/"},
"Alle Klausuren"
)
)
),
this.state.newest_article ? React.createElement(
"div",
null,
......
......@@ -24,7 +24,7 @@ def get_name_for_next_week_day_from_today() -> str:
date_formatted = "morgen"
else:
# Other weekday
date_formatted = LONG_WEEK_DAYS[next_weekday.isoweekday() - 2]
date_formatted = LONG_WEEK_DAYS[next_weekday.isoweekday() - 1][0]
return date_formatted
......@@ -36,16 +36,11 @@ def get_type_and_object_of_user(user):
_type = TYPE_TEACHER
shortcode = user.username
el = get_teacher_by_shortcode(shortcode)
plan_id = el.id
raw_type = "teacher"
elif _type == UserInformation.STUDENT:
# Student
_type = TYPE_CLASS
_name = UserInformation.user_classes(user)[0]
el = get_class_by_name(_name)
plan_id = el.id
raw_type = "class"
else:
return None, None
......
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