more apps

This commit is contained in:
2024-04-26 12:43:00 +03:00
parent 52b209b176
commit 69a2160eb7
536 changed files with 33118 additions and 0 deletions

0
plan/__init__.py Normal file
View File

11
plan/admin.py Normal file
View File

@@ -0,0 +1,11 @@
from django.contrib import admin
# Register your models here.
from plan.models import Day, SessionBearLakes, SessionUssuriysk, Upload, UserProfile
admin.site.register(Day)
admin.site.register(Upload)
admin.site.register(UserProfile)
admin.site.register(SessionBearLakes)
admin.site.register(SessionUssuriysk)

5
plan/apps.py Normal file
View File

@@ -0,0 +1,5 @@
from django.apps import AppConfig
class PlanConfig(AppConfig):
name = 'plan'

View File

@@ -0,0 +1,86 @@
# Generated by Django 2.2.6 on 2019-12-09 18:12
from django.conf import settings
import django.core.files.storage
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
import plan.models
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Day',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=100)),
('Notes', models.TextField(blank=True, max_length=2000, null=True, validators=[django.core.validators.MaxLengthValidator(1600)], verbose_name='Notes')),
('date', models.DateField(blank=True, null=True)),
('DayNumber', models.IntegerField()),
('modified', models.DateTimeField(auto_now=True)),
],
),
migrations.CreateModel(
name='UserProfile',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='profile', to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='Upload',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=128)),
('filename', models.CharField(max_length=256)),
('filefield', models.FileField(storage=django.core.files.storage.FileSystemStorage(location='/srv/srg-plan/srg/Uploads'), upload_to=plan.models.upload_filename, validators=[plan.models.validate_upload_file])),
('uploaded', models.DateTimeField(auto_now_add=True)),
('day', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='plan.Day', verbose_name='Day')),
('owner', models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='plan.UserProfile', verbose_name='Author')),
],
),
migrations.CreateModel(
name='SessionUssuriysk',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(blank=True, max_length=100)),
('TimeBegin_hh', models.IntegerField(default=0, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(24)])),
('TimeEnd_hh', models.IntegerField(default=0, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(24)])),
('TimeBegin_mm', models.IntegerField(blank=True, default=0, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(60)])),
('TimeEnd_mm', models.IntegerField(blank=True, default=0, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(60)])),
('sysSessionRequest', models.IntegerField(default=0)),
('eroSessionRequest', models.IntegerField(default=0)),
('artSessionRequest', models.IntegerField(default=0)),
('sysNotes', models.TextField(blank=True, max_length=2000, null=True, verbose_name='System Notes')),
('eroNotes', models.TextField(blank=True, max_length=2000, null=True, verbose_name='eRosita Notes')),
('artNotes', models.TextField(blank=True, max_length=2000, null=True, verbose_name='ART-XC Notes')),
('Day', models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='UssuriyskDay', to='plan.Day', verbose_name='Day')),
],
),
migrations.CreateModel(
name='SessionBearLakes',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(blank=True, max_length=100)),
('TimeBegin_hh', models.IntegerField(default=0, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(24)])),
('TimeEnd_hh', models.IntegerField(default=0, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(24)])),
('TimeBegin_mm', models.IntegerField(blank=True, default=0, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(60)])),
('TimeEnd_mm', models.IntegerField(blank=True, default=0, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(60)])),
('sysSessionRequest', models.IntegerField(default=0)),
('eroSessionRequest', models.IntegerField(default=0)),
('artSessionRequest', models.IntegerField(default=0)),
('sysNotes', models.TextField(blank=True, max_length=2000, null=True, validators=[django.core.validators.MaxLengthValidator(1600)], verbose_name='System Notes')),
('eroNotes', models.TextField(blank=True, max_length=2000, null=True, validators=[django.core.validators.MaxLengthValidator(1600)], verbose_name='eRosita Notes')),
('artNotes', models.TextField(blank=True, max_length=2000, null=True, validators=[django.core.validators.MaxLengthValidator(1600)], verbose_name='ART-XC Notes')),
('Day', models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='BearLakesDay', to='plan.Day', verbose_name='Day')),
],
),
]

View File

@@ -0,0 +1,38 @@
# Generated by Django 3.2.10 on 2021-12-29 09:59
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('plan', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='day',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='sessionbearlakes',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='sessionussuriysk',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='upload',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='userprofile',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
]

View File

262
plan/models.py Normal file
View File

@@ -0,0 +1,262 @@
import logging
from django.db import models
from django import forms
from django.core.exceptions import ValidationError
import time
import datetime
import re
from django.core.validators import MaxLengthValidator, MinValueValidator, MaxValueValidator
from django.utils import timezone
from django.core.exceptions import ValidationError
from django.utils.translation import ugettext as _, ugettext_noop as _noop
from django.contrib.auth.models import User
import hashlib
import os, os.path as osp
from django.utils.translation import gettext_lazy
# Create your models here.
LaunchDate = datetime.date(2019, 7, 13)
root=''
INPUT_DATA_DIR='/export/django/srg/data'
from django.core.files.storage import FileSystemStorage
from django.core.validators import EmailValidator
from django.core.validators import MaxLengthValidator
PRESENTATIONS_PATH = '/srv/srg-plan/srg/Uploads'
email_notification=['krivonos@iki.rssi.ru',]
readme_txt='/srv/srg-plan/srg/README.txt'
def get_session_duration_in_min(begin_hh, begin_mm, end_hh, end_mm):
if (end_hh > begin_hh):
return (end_hh-begin_hh)*60+end_mm-begin_mm
else:
return (24-begin_hh+end_hh)*60+end_mm-begin_mm
class Day(models.Model):
title = models.CharField(max_length=100)
Notes = models.TextField("Notes",max_length=2000, null=True, blank=True, validators=[MaxLengthValidator(1600)])
date = models.DateField(blank=True, null=True)
DayNumber = models.IntegerField()
modified = models.DateTimeField(auto_now=True)
def __unicode__(self):
return 'Day: ' + "%i" % (self.DayNumber)
def __str__(self):
return 'Day: ' + "%i" % (self.DayNumber)
def get_upload_url(self):
return "/plan/day/%i/upload" % (self.pk)
def get_absolute_url(self):
return "/plan/day/%i" % (self.pk)
class SessionBearLakes(models.Model):
Day = models.OneToOneField(Day, on_delete=models.CASCADE,verbose_name="Day", related_name="BearLakesDay",null=True)
title = models.CharField(max_length=100,blank=True)
TimeBegin_hh = models.IntegerField(default=0,validators=[MinValueValidator(0),MaxValueValidator(24)])
TimeEnd_hh = models.IntegerField(default=0,validators=[MinValueValidator(0),MaxValueValidator(24)])
TimeBegin_mm = models.IntegerField(default=0,validators=[MinValueValidator(0),MaxValueValidator(60)],blank=True)
TimeEnd_mm = models.IntegerField(default=0,validators=[MinValueValidator(0),MaxValueValidator(60)],blank=True)
sysSessionRequest = models.IntegerField(default=0)
eroSessionRequest = models.IntegerField(default=0)
artSessionRequest = models.IntegerField(default=0)
sysNotes = models.TextField("System Notes",max_length=2000, null=True, blank=True, validators=[MaxLengthValidator(1600)])
eroNotes = models.TextField("eRosita Notes",max_length=2000, null=True, blank=True, validators=[MaxLengthValidator(1600)])
artNotes = models.TextField("ART-XC Notes",max_length=2000, null=True, blank=True, validators=[MaxLengthValidator(1600)])
def clean(self, *args, **kwargs):
# add custom validation here
session_duration_min=get_session_duration_in_min(self.TimeBegin_hh,self.TimeBegin_mm, self.TimeEnd_hh,self.TimeEnd_mm)
request_min=(self.sysSessionRequest+self.eroSessionRequest+self.artSessionRequest)
if (request_min>session_duration_min):
msg="Total requested time (sys:%i + ero:%i + art:%i = %i min) cannot be longer than session duration: %i min" % (self.sysSessionRequest,
self.eroSessionRequest,
self.artSessionRequest,
request_min,
session_duration_min)
raise forms.ValidationError(msg)
super(SessionBearLakes, self).clean(*args, **kwargs)
def save(self, *args, **kwargs):
self.full_clean()
super(SessionBearLakes, self).save(*args, **kwargs)
def __unicode__(self):
return self.title
def __str__(self):
return 'Session: Day ' + "%i" % (self.Day.DayNumber)
def get_absolute_url(self):
return root+"/plan/BearLakes/%i/show" % (self.Day.DayNumber)
def get_update_url(self):
return root+"/plan/BearLakes/%i/update" % (self.Day.DayNumber)
def get_rest(self):
session_duration_min=get_session_duration_in_min(self.TimeBegin_hh,self.TimeBegin_mm, self.TimeEnd_hh,self.TimeEnd_mm)
request_min=(self.sysSessionRequest+self.eroSessionRequest+self.artSessionRequest)
return "%i" % (session_duration_min - request_min)
class SessionBearLakesForm(forms.ModelForm):
class Meta:
model=SessionBearLakes
fields=('title','TimeBegin_hh','TimeBegin_mm','TimeEnd_hh','TimeEnd_mm','sysSessionRequest','eroSessionRequest','artSessionRequest','sysNotes','eroNotes','artNotes')
widgets = {
'title': forms.TextInput(attrs={'style': 'width: 620px;', 'class': 'title'}),
'TimeBegin_hh': forms.TextInput(attrs={'style': 'width: 70px;', 'class': 'title'}),
'TimeBegin_mm': forms.TextInput(attrs={'style': 'width: 70px;', 'class': 'title'}),
'TimeEnd_hh': forms.TextInput(attrs={'style': 'width: 70px;', 'class': 'title'}),
'TimeEnd_mm': forms.TextInput(attrs={'style': 'width: 70px;', 'class': 'title'}),
'sysSessionRequest': forms.TextInput(attrs={'style': 'width: 70px;', 'class': 'title'}),
'eroSessionRequest': forms.TextInput(attrs={'style': 'width: 70px;', 'class': 'title'}),
'artSessionRequest': forms.TextInput(attrs={'style': 'width: 70px;', 'class': 'title'}),
'sysNotes': forms.Textarea(attrs={'style': 'width: 620px;', 'rows': 10}),
'eroNotes': forms.Textarea(attrs={'style': 'width: 620px;', 'rows': 10}),
'artNotes': forms.Textarea(attrs={'style': 'width: 620px;', 'rows': 10}),
}
class SessionUssuriysk(models.Model):
Day = models.OneToOneField(Day, on_delete=models.CASCADE,verbose_name="Day",related_name="UssuriyskDay",null=True)
title = models.CharField(max_length=100,blank=True)
TimeBegin_hh = models.IntegerField(default=0,validators=[MinValueValidator(0),MaxValueValidator(24)])
TimeEnd_hh = models.IntegerField(default=0,validators=[MinValueValidator(0),MaxValueValidator(24)])
TimeBegin_mm = models.IntegerField(default=0,validators=[MinValueValidator(0),MaxValueValidator(60)],blank=True)
TimeEnd_mm = models.IntegerField(default=0,validators=[MinValueValidator(0),MaxValueValidator(60)],blank=True)
sysSessionRequest = models.IntegerField(default=0)
eroSessionRequest = models.IntegerField(default=0)
artSessionRequest = models.IntegerField(default=0)
sysNotes = models.TextField("System Notes",max_length=2000, null=True, blank=True) #,validators=[MaxLengthValidator(1600)])
eroNotes = models.TextField("eRosita Notes",max_length=2000, null=True, blank=True) #,validators=[MaxLengthValidator(1600)])
artNotes = models.TextField("ART-XC Notes",max_length=2000, null=True, blank=True) #,validators=[MaxLengthValidator(1600)])
def clean(self, *args, **kwargs):
# add custom validation here
session_duration_min=get_session_duration_in_min(self.TimeBegin_hh,self.TimeBegin_mm, self.TimeEnd_hh,self.TimeEnd_mm)
request_min=(self.sysSessionRequest+self.eroSessionRequest+self.artSessionRequest)
if (request_min>session_duration_min):
msg="Total requested time (sys:%i + ero:%i + art:%i = %i min) cannot be longer than session duration: %i min" % (self.sysSessionRequest,
self.eroSessionRequest,
self.artSessionRequest,
request_min,
session_duration_min)
raise forms.ValidationError(msg)
super(SessionUssuriysk, self).clean(*args, **kwargs)
def save(self, *args, **kwargs):
self.full_clean()
super(SessionUssuriysk, self).save(*args, **kwargs)
def __unicode__(self):
return self.title
def __str__(self):
return 'Session: Day ' + "%i" % (self.Day.DayNumber)
def get_absolute_url(self):
return root+"/plan/Ussuriysk/%i/show" % (self.Day.DayNumber)
def get_update_url(self):
return root+"/plan/Ussuriysk/%i/update" % (self.Day.DayNumber)
def get_rest(self):
session_duration_min=get_session_duration_in_min(self.TimeBegin_hh,self.TimeBegin_mm, self.TimeEnd_hh,self.TimeEnd_mm)
request_min=(self.sysSessionRequest+self.eroSessionRequest+self.artSessionRequest)
return "%i" % (session_duration_min - request_min)
class SessionUssuriyskForm(forms.ModelForm):
class Meta:
model=SessionUssuriysk
fields=('title','TimeBegin_hh','TimeBegin_mm','TimeEnd_hh','TimeEnd_mm','sysSessionRequest','eroSessionRequest','artSessionRequest','sysNotes','eroNotes','artNotes')
widgets = {
'title': forms.TextInput(attrs={'style': 'width: 620px;', 'class': 'title'}),
'TimeBegin_hh': forms.TextInput(attrs={'style': 'width: 70px;', 'class': 'title'}),
'TimeBegin_mm': forms.TextInput(attrs={'style': 'width: 70px;', 'class': 'title'}),
'TimeEnd_hh': forms.TextInput(attrs={'style': 'width: 70px;', 'class': 'title'}),
'TimeEnd_mm': forms.TextInput(attrs={'style': 'width: 70px;', 'class': 'title'}),
'sysSessionRequest': forms.TextInput(attrs={'style': 'width: 70px;', 'class': 'title'}),
'eroSessionRequest': forms.TextInput(attrs={'style': 'width: 70px;', 'class': 'title'}),
'artSessionRequest': forms.TextInput(attrs={'style': 'width: 70px;', 'class': 'title'}),
'sysNotes': forms.Textarea(attrs={'style': 'width: 620px;', 'rows': 10}),
'eroNotes': forms.Textarea(attrs={'style': 'width: 620px;', 'rows': 10}),
'artNotes': forms.Textarea(attrs={'style': 'width: 620px;', 'rows': 10}),
}
FS = FileSystemStorage(location=PRESENTATIONS_PATH)
VALID_CONTENT_TYPES = ['application/pdf', 'image/png', 'application/vnd.ms-powerpoint','application/octet-stream',
'application/nappdf','application/x-pdf','application/x-bzpdf',
'application/x-gzpdf','application/force-download','application/x-file-download',
'application/vnd.openxmlformats-officedocument.presentationml.presentation'
]
VALID_EXTENSIONS = ['.pdf', '.ppt', '.pptx', '.png', '.txt', '.dat']
def validate_upload_file(value):
file = value.file
_, ext = osp.splitext(file.name)
if ext not in VALID_EXTENSIONS:
raise forms.ValidationError(
'Extension %s not supported.' % ext
)
if file.content_type not in VALID_CONTENT_TYPES:
raise forms.ValidationError(
'Filetype %s not supported.' % file.content_type
)
def upload_filename(instance, filename):
_, ext = osp.splitext(filename)
tohash = filename + str(time.clock())
#new_fname = hashlib.md5(tohash).hexdigest()
new_fname = hashlib.md5(tohash.encode('utf-8')).hexdigest()
return new_fname + ext
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name="profile", on_delete=models.CASCADE)
#target_list = models.ManyToManyField(Target, blank=True)
#docker_list = models.ManyToManyField(DockerProxy, blank=True)
def __unicode__(self):
return self.user.email
def __str__(self):
return self.user.email
def get_objects(self):
return self.object_set.all()
class LoginUsernameForm(forms.Form):
username = forms.CharField(max_length=75, label="User name", widget=forms.TextInput(attrs={'class':'form-control', 'style': 'width: 450px;'}))
password = forms.CharField( widget=forms.PasswordInput(attrs={'class':'form-control', 'style': 'width: 450px;'}), label="Your Password" )
def clean_username(self):
username = self.cleaned_data.get('username')
try:
User.objects.get(username=username)
except User.DoesNotExist:
raise forms.ValidationError('This username is no such username.')
return username
class Upload(models.Model):
owner = models.ForeignKey(UserProfile, on_delete=models.CASCADE, default=None, unique=False, verbose_name="Author")
day = models.ForeignKey(Day, unique=False, verbose_name="Day", on_delete=models.CASCADE)
title = models.CharField(max_length=128)
filename = models.CharField(max_length=256)
filefield = models.FileField(upload_to=upload_filename, storage=FS, validators=[validate_upload_file])
uploaded = models.DateTimeField(auto_now_add=True)
#read_only = models.BooleanField("Read only", default=False)
def get_delete_url(self):
return self.day.get_absolute_url() + "/upload/%d/delete" % (self.id)
def delete(self, remove_file=True):
if remove_file:
FS.delete(str(self.filefield))
return models.Model.delete(self)
def __str__(self):
return '['+"%d" % (self.day.DayNumber)+'] '+self.title
class UploadForm(forms.ModelForm):
class Meta:
model = Upload
fields = ('title', 'filefield')
widgets = {
'title': forms.TextInput(attrs={'style': 'width: 620px;', 'class': 'title'}),
}

3
plan/tests.py Normal file
View File

@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

17
plan/urls.py Normal file
View File

@@ -0,0 +1,17 @@
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('BearLakes/<int:day>/show', views.show_SessionBearLakes, name='showBearLakes'),
path('BearLakes/<int:day>/update', views.update_SessionBearLakes, name='showBearLakes'),
path('Ussuriysk/<int:day>/show', views.show_SessionUssuriysk, name='showUssuriysk'),
path('Ussuriysk/<int:day>/update', views.update_SessionUssuriysk, name='showUssuriysk'),
path('day/<int:day_id>/upload', views.upload, name='upload'),
path('day/<int:day_id>/upload/<int:upload_id>/delete', views.delete_upload, name='delete'),
path('day/<int:day_id>', views.show_day, name='show'),
path('login', views.login_username, name='login'),
path('logout', views.logout_view, name='logout'),
]

196
plan/views.py Normal file
View File

@@ -0,0 +1,196 @@
from django.shortcuts import render
from django.http import HttpResponse
from datetime import date
from plan.models import Day, SessionBearLakes, SessionBearLakesForm, SessionUssuriysk, SessionUssuriyskForm, LoginUsernameForm, UserProfile, UploadForm, Upload
from plan.models import INPUT_DATA_DIR
from plan.models import LaunchDate
from django.http import HttpResponseRedirect
import datetime
from django.utils import timezone
import astropy
import pandas as pd
from django.utils import timezone
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User
from django.core.files.storage import FileSystemStorage
# Create your views here. Berkeley
def index(request):
if request.user.is_authenticated:
try:
user_profile=request.user.profile
except:
return HttpResponse("docker: no UserProfile.")
else:
return HttpResponse("docker: not authenticated.")
all_bearlakes = SessionBearLakes.objects.all()
return render(request,'plan/show_plan.html', {'bearlakes': all_bearlakes,'LaunchDate':LaunchDate})
def show_day(request, day_id):
if request.user.is_authenticated:
try:
user_profile=request.user.profile
except:
return HttpResponse("docker: no UserProfile.")
else:
return HttpResponse("docker: not authenticated.")
try:
myday=Day.objects.get(pk=day_id)
except:
return HttpResponse("This Day was not found")
uploads = myday.upload_set.all()
return render(request,'plan/show_day.html', {'uploads': uploads, 'day':myday,})
def show_SessionBearLakes(request,day):
try:
session=SessionBearLakes.objects.get(Day__DayNumber__exact=day)
except:
return HttpResponse("This Day was not found")
return render(request,'plan/show_session_bearlakes.html', {'session': session,})
def show_SessionUssuriysk(request,day):
try:
session=SessionUssuriysk.objects.get(Day__DayNumber__exact=day)
except:
return HttpResponse("This Day was not found")
session_lakes=session.Day.BearLakesDay
return render(request,'plan/show_session_bearlakes.html', {'session': session_lakes,})
def update_SessionBearLakes(request,day):
try:
session=SessionBearLakes.objects.get(Day__DayNumber__exact=day)
except:
return HttpResponse("This Day was not found")
if request.method == 'POST': # If the form has been submitted...
form = SessionBearLakesForm(request.POST,instance=session) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
new_form=form.save()
return HttpResponseRedirect(new_form.get_absolute_url())
else:
return render(request,'plan/update_session_bearlakes.html', {'form':form,'session': session})
else:
form = SessionBearLakesForm(instance=session)
return render(request,'plan/update_session_bearlakes.html', {'form':form,'session': session})
def update_SessionUssuriysk(request,day):
try:
session=SessionUssuriysk.objects.get(Day__DayNumber__exact=day)
except:
return HttpResponse("This Day was not found")
if request.method == 'POST': # If the form has been submitted...
form = SessionUssuriyskForm(request.POST,instance=session) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
new_form=form.save()
return HttpResponseRedirect(new_form.get_absolute_url())
else:
return render(request,'plan/update_session_ussuriysk.html', {'form':form,'session': session})
else:
form = SessionUssuriyskForm(instance=session)
return render(request,'plan/update_session_ussuriysk.html', {'form':form,'session': session})
def login_username(request):
if request.user.is_authenticated:
try:
user_profile=request.user.profile
except:
return HttpResponse("login: authenticated but no UserProfile.")
if request.method == 'POST': # If the form has been submitted...
form = LoginUsernameForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
username=form.clean_username()
password=form.cleaned_data["password"]
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
try:
user_profile=user.profile
except:
form = UserProfileForm() # An unbound form
return HttpResponse("login: authenticated but no UserProfile.")
else:
return HttpResponse("login: user account is not active.")
else:
form = LoginUsernameForm() # An unbound form
return render(request,'plan/login.html', {'form':form, 'invalid_login': True})
else:
return HttpResponse("login: form is not valid.")
else:
form = LoginUsernameForm() # An unbound form
return render(request,'plan/login.html', {'form':form})
all_bearlakes = SessionBearLakes.objects.all()
return render(request,'plan/show_plan.html', {'bearlakes': all_bearlakes,'LaunchDate':LaunchDate})
def logout_view(request):
if request.user.is_authenticated:
logout(request)
return HttpResponse('<a class="button orange big" href="/plan/login">Login</a>')
def delete_upload(request, day_id, upload_id):
if not request.user.is_authenticated:
html = "<html><body>You have no rights to upload/delete documents. Please <a href='/plan/login'>login<>.</body></html>"
return HttpResponseForbidden(html)
try:
user_profile=request.user.profile
except:
html = "<html><body>You have no user profile.</body></html>"
return HttpResponseForbidden(html)
try:
myday=Day.objects.get(pk=day_id)
except Day.DoesNotExist:
raise Http404
# if mytarget.owner != user_profile:
# html = "<html><body>You trying to delete presentation for someone else's target.</body></html>"
# return HttpResponseForbidden(html)
try:
upload=Upload.objects.get(pk=upload_id)
except Upload.DoesNotExist:
raise Http404
if upload.day != myday:
html = "<html><body>Sorry, wrong day/upload pair.</body></html>"
return HttpResponseForbidden(html)
upload.delete()
return HttpResponseRedirect(myday.get_absolute_url())
def upload(request, day_id):
if not request.user.is_authenticated:
html = "<html><body>You have no rights for this operation.</body></html>"
return HttpResponseForbidden(html)
try:
user_profile=request.user.profile
except:
html = "<html><body>You have no user profile.</body></html>"
return HttpResponseForbidden(html)
try:
myday=Day.objects.get(pk=day_id)
except Day.DoesNotExist:
raise Http404
if request.method == 'POST':
form = UploadForm(request.POST, request.FILES)
if form.is_valid():
upload = form.save(commit=False)
upload.day = myday
upload.owner = user_profile
upload.filename = request.FILES['filefield'].name.encode('utf-8')
upload.save()
return HttpResponseRedirect(myday.get_absolute_url())
else:
form = UploadForm()
return render(request,'plan/upload.html',
{'UserProfile':user_profile, 'form': form, 'day':myday}
)