parent
51b1237b5f
commit
9acce4a8e9
@ -0,0 +1,30 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<style>
|
||||
table, th, td {
|
||||
border: 1px solid black;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 80%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
{{ime_priimek}}
|
||||
</body>
|
||||
<p style="text-align: center;"><b>Priloga k pogodbi o prenosu avtorskih pravic: seznam avtorskih del, ki so predmet pogodbe</b></p>
|
||||
<div style="width: 100%;">
|
||||
<table>
|
||||
<tr>
|
||||
<td style="text-align: center;"><b>Ime, naslov ali oznaka dela</b></td>
|
||||
</tr>
|
||||
{{files_table_str}}
|
||||
</table>
|
||||
</div>
|
||||
</html>
|
@ -0,0 +1,123 @@
|
||||
import logging
|
||||
import traceback
|
||||
import re
|
||||
from datetime import datetime
|
||||
|
||||
import portal.base
|
||||
from portal.base import UploadHandler, ContractCreator, REGEX_EMAIL
|
||||
from portal.model import db, UploadPredavanja
|
||||
|
||||
|
||||
MAXLEN_FORM = 150
|
||||
|
||||
class UploadHandlerPredavanja(UploadHandler):
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.contract_creator = ContractCreator(base_path=self.get_uploads_subdir('contracts'),
|
||||
template_path='contract/predavanja.html')
|
||||
|
||||
def generate_upload_contract_pdf(self, upload_metadata):
|
||||
form_data = upload_metadata['form_data']
|
||||
|
||||
files_table_str = []
|
||||
for file_name in upload_metadata['file_names']:
|
||||
files_table_str.append('<tr><td style="text-align: center;">')
|
||||
files_table_str.append(file_name)
|
||||
files_table_str.append('</td></tr>')
|
||||
files_table_str = ''.join(files_table_str)
|
||||
|
||||
data = {
|
||||
'ime_priimek': form_data['ime'],
|
||||
'files_table_str': files_table_str
|
||||
}
|
||||
|
||||
self.contract_creator.create_pdf(upload_metadata['contract_file'], data)
|
||||
|
||||
@staticmethod
|
||||
def store_metadata(upload_metadata):
|
||||
timestamp = datetime.fromtimestamp(upload_metadata['timestamp'])
|
||||
form_data = upload_metadata['form_data']
|
||||
file_hashes = upload_metadata['file_hashes_dict']
|
||||
sorted_f_hashes = list(file_hashes.values())
|
||||
sorted_f_hashes.sort()
|
||||
|
||||
try:
|
||||
model_obj = UploadPredavanja(
|
||||
upload_hash=upload_metadata['upload_id'],
|
||||
timestamp=timestamp,
|
||||
name=form_data['ime'],
|
||||
address=form_data['naslov-predavanja'],
|
||||
subject=form_data['predmet'],
|
||||
faculty=form_data['fakulteta'],
|
||||
email=form_data['email'],
|
||||
phone=form_data.get('phone'),
|
||||
keywords=form_data['kljucne-besede'],
|
||||
agree_publish=True if 'kljucne-besde' in form_data else False,
|
||||
file_contract=upload_metadata['contract_file'],
|
||||
upload_file_hashes=sorted_f_hashes,
|
||||
)
|
||||
db.session.add(model_obj)
|
||||
db.session.commit()
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
def handle_upload(self, request):
|
||||
err = self.check_upload_request(request)
|
||||
if err:
|
||||
return err, 400
|
||||
|
||||
err = self.check_form(request.form)
|
||||
if err:
|
||||
return err, 400
|
||||
|
||||
# Parse request.
|
||||
upload_metadata = self.extract_upload_metadata('predavanja', request)
|
||||
|
||||
logging.info('Upload for "predavanja" with id "{}" supplied form data: {}'.format(
|
||||
upload_metadata['upload_id'], str(upload_metadata['form_data'])))
|
||||
|
||||
# Generate contract PDF file based on the uploads metadata.
|
||||
self.generate_upload_contract_pdf(upload_metadata)
|
||||
|
||||
# Store uploaded files to disk.
|
||||
self.store_datafiles(request.files, upload_metadata)
|
||||
|
||||
# Store metadata to database.
|
||||
self.store_metadata(upload_metadata)
|
||||
|
||||
# Send confirmation mail along with the contract to the submitted email address.
|
||||
self.send_confirm_mail(upload_metadata)
|
||||
|
||||
return 'Uspešno ste oddali datotek(e). Št. datotek: {}'.format(len(request.files))
|
||||
|
||||
|
||||
@staticmethod
|
||||
def check_form(form):
|
||||
name = form.get('ime')
|
||||
address = form.get('naslov-predavanja')
|
||||
subject = form.get('predmet')
|
||||
faculty = form.get('fakulteta')
|
||||
email = form.get('email')
|
||||
phone = form.get('telefon')
|
||||
keywords = form.get('kljucne-besede')
|
||||
|
||||
if not name \
|
||||
or not address \
|
||||
or not subject \
|
||||
or not faculty \
|
||||
or not email \
|
||||
or not keywords:
|
||||
return 'Izpolnite vsa obvezna polja.'
|
||||
|
||||
for keyword in keywords.split():
|
||||
if not keyword.isalpha():
|
||||
return 'Ključna beseda "{}" ni pravilnega formata.'.format(keyword)
|
||||
|
||||
if not re.search(REGEX_EMAIL, email):
|
||||
return 'Email napačnega formata.'
|
||||
|
||||
for key, val in form.items():
|
||||
if len(val) > MAXLEN_FORM:
|
||||
return 'Polje "{}" presega dolžino {} znakov.'.format(key, MAXLEN_FORM)
|
||||
|
@ -0,0 +1,130 @@
|
||||
import logging
|
||||
import re
|
||||
import traceback
|
||||
from datetime import datetime
|
||||
|
||||
from portal.base import UploadHandler, ContractCreator, REGEX_EMAIL
|
||||
from portal.model import db, UploadRegular
|
||||
|
||||
|
||||
class UploadHandlerRegular(UploadHandler):
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.contract_creator = ContractCreator(base_path=self.get_uploads_subdir('contracts'),
|
||||
template_path='contract/regular.html')
|
||||
|
||||
def generate_upload_contract_pdf(self, upload_metadata):
|
||||
base = self.get_uploads_subdir('contracts')
|
||||
form_data = upload_metadata['form_data']
|
||||
|
||||
files_table_str = []
|
||||
for file_name in upload_metadata['file_names']:
|
||||
files_table_str.append('<tr><td style="text-align: center;">')
|
||||
files_table_str.append(file_name)
|
||||
files_table_str.append('</td></tr>')
|
||||
files_table_str = ''.join(files_table_str)
|
||||
|
||||
data = {
|
||||
'ime_priimek': form_data['ime'],
|
||||
'naslov': form_data.get('naslov', ''),
|
||||
'posta': form_data.get('posta', ''),
|
||||
'kontakt_narocnik': self.config['CONTRACT_CLIENT_CONTACT'],
|
||||
'kontakt_imetnikpravic': form_data['ime'],
|
||||
'files_table_str': files_table_str
|
||||
}
|
||||
|
||||
self.contract_creator.create_pdf(upload_metadata['contract_file'], data)
|
||||
|
||||
@staticmethod
|
||||
def store_metadata(upload_metadata, corpus_name):
|
||||
timestamp = datetime.fromtimestamp(upload_metadata['timestamp'])
|
||||
form_data = upload_metadata['form_data']
|
||||
file_hashes = upload_metadata['file_hashes_dict']
|
||||
sorted_f_hashes = list(file_hashes.values())
|
||||
sorted_f_hashes.sort()
|
||||
|
||||
try:
|
||||
model_obj = UploadRegular(
|
||||
upload_hash=upload_metadata['upload_id'],
|
||||
timestamp=timestamp,
|
||||
name=form_data['ime'],
|
||||
org=form_data.get('podjetje'),
|
||||
address=form_data.get('naslov'),
|
||||
zipcode=form_data.get('posta'),
|
||||
email=form_data['email'],
|
||||
file_contract=upload_metadata['contract_file'],
|
||||
upload_file_hashes=sorted_f_hashes,
|
||||
corpus_name=corpus_name
|
||||
)
|
||||
|
||||
db.session.add(model_obj)
|
||||
db.session.commit()
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
|
||||
def handle_upload(self, request, corpus_name):
|
||||
err = self.check_upload_request(request)
|
||||
if err:
|
||||
return err, 400
|
||||
|
||||
err = self.check_form(request.form)
|
||||
if err:
|
||||
return err, 400
|
||||
|
||||
# Parse request.
|
||||
upload_metadata = self.extract_upload_metadata(corpus_name, request)
|
||||
|
||||
logging.info('Upload with id "{}" supplied form data: {}'.format(upload_metadata['upload_id'],
|
||||
str(upload_metadata['form_data'])))
|
||||
|
||||
# Generate contract PDF file based on the uploads metadata.
|
||||
self.generate_upload_contract_pdf(upload_metadata)
|
||||
|
||||
# Store uploaded files to disk.
|
||||
self.store_datafiles(request.files, upload_metadata)
|
||||
|
||||
# Store metadata to database.
|
||||
self.store_metadata(upload_metadata, corpus_name)
|
||||
|
||||
# Send confirmation mail along with the contract to the submitted email address.
|
||||
self.send_confirm_mail(upload_metadata)
|
||||
|
||||
return 'Uspešno ste oddali datotek(e). Št. datotek: {}'.format(len(request.files))
|
||||
|
||||
@staticmethod
|
||||
def check_form(form):
|
||||
ime = form.get('ime')
|
||||
podjetje = form.get('podjetje')
|
||||
naslov = form.get('naslov')
|
||||
posta = form.get('posta')
|
||||
email = form.get('email')
|
||||
telefon = form.get('telefon')
|
||||
|
||||
if not ime:
|
||||
return 'Prazno polje za ime.'
|
||||
if len(ime) > 100:
|
||||
return 'Predolgo ime.'
|
||||
|
||||
if podjetje and len(podjetje) > 100:
|
||||
return 'Predolgo ime institucije.'
|
||||
|
||||
if not email:
|
||||
return 'Prazno polje za elektronsko pošto.'
|
||||
if len(email) > 100:
|
||||
return 'Predolgi email naslov'
|
||||
elif not re.search(REGEX_EMAIL, email):
|
||||
return 'Email napačnega formata.'
|
||||
|
||||
if telefon and len(telefon) > 100:
|
||||
return 'Predolga telefonska št.'
|
||||
|
||||
if naslov and len(naslov) > 100:
|
||||
return 'Predolg naslov.'
|
||||
|
||||
if posta and len(posta) > 100:
|
||||
return 'Predolga pošta'
|
||||
|
||||
return None
|
||||
|
@ -1,41 +1,101 @@
|
||||
import logging
|
||||
import re
|
||||
from datetime import datetime
|
||||
|
||||
import portal.base
|
||||
from portal.base import UploadHandler
|
||||
from portal.model import UploadSolar
|
||||
|
||||
|
||||
VALID_PROGRAMS = {'OS', 'SSG', 'MGP', 'ZG', 'NPI', 'SPI', 'SSI', 'PTI'}
|
||||
VALID_SUBJECTS = {'slo', 'drug-jez', 'drug-druz', 'drug-narav', 'drug-strok', 'drug-izb'}
|
||||
VALID_TEXT_TYPES = {'esej-spis', 'prakticno', 'solski-test', 'delo-v-razredu'}
|
||||
VALID_GRAMMAR_CORRECTIONS = {'popr-ne', 'brez-popr', 'popr-da'}
|
||||
|
||||
MAXLEN_FORM = 150
|
||||
|
||||
|
||||
class UploadHandlerSolar(UploadHandler):
|
||||
|
||||
@staticmethod
|
||||
def store_metadata(upload_metadata, user_id):
|
||||
timestamp = datetime.fromtimestamp(upload_metadata['timestamp'])
|
||||
form_data = upload_metadata['form_data']
|
||||
file_hashes = upload_metadata['file_hashes_dict']
|
||||
sorted_f_hashes = list(file_hashes.values())
|
||||
sorted_f_hashes.sort()
|
||||
|
||||
institution_id = UploadHandler.get_user_institution(user_id)
|
||||
|
||||
def handle_upload(request, upload_handler):
|
||||
files = request.files
|
||||
if len(files) > upload_handler.MAX_FILES_PER_UPLOAD:
|
||||
return 'Naložite lahko do {} datotek hkrati.'.format(upload_handler.MAX_FILES_PER_UPLOAD), 400
|
||||
elif len(files) < 1:
|
||||
return 'Priložena ni bila nobena datoteka.', 400
|
||||
try:
|
||||
model_obj = UploadSolar(
|
||||
upload_user = user_id,
|
||||
institution = institution_id,
|
||||
upload_hash=upload_metadata['upload_id'],
|
||||
timestamp=timestamp,
|
||||
program=form_data['program'],
|
||||
subject=form_data['predmet'],
|
||||
subject_custom=form_data['predmet-custom'],
|
||||
grade=form_data['letnik'],
|
||||
text_type=form_data['vrsta'],
|
||||
text_type_custom=form_data['vrsta-custom'],
|
||||
school_year=form_data['solsko-leto'],
|
||||
grammar_corrections=form_data['jezikovni-popravki'],
|
||||
upload_file_hashes=sorted_f_hashes
|
||||
)
|
||||
db.session.add(model_obj)
|
||||
db.session.commit()
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
err = portal.base.check_suffixes(files)
|
||||
if err:
|
||||
return err, 400
|
||||
def handle_upload(self, request, user_id):
|
||||
err = portal.base.check_upload_request(request, self)
|
||||
if err:
|
||||
return err, 400
|
||||
|
||||
err = check_form(request.form)
|
||||
if err:
|
||||
return err, 400
|
||||
err = self.check_form(request.form)
|
||||
if err:
|
||||
return err, 400
|
||||
|
||||
# Parse request.
|
||||
upload_metadata = upload_handler.extract_upload_metadata(corpus_name, request)
|
||||
# Parse request.
|
||||
upload_metadata = self.extract_upload_metadata('solar', request)
|
||||
|
||||
logging.info('Upload from user "{}" with upload id "{}" supplied form data: {}'.format(
|
||||
request.user,
|
||||
upload_metadata['upload_id'],
|
||||
str(upload_metadata['form_data']
|
||||
)))
|
||||
logging.info('Upload from user "{}" with upload id "{}" supplied form data: {}'.format(
|
||||
user_id,
|
||||
upload_metadata['upload_id'],
|
||||
str(upload_metadata['form_data']
|
||||
)))
|
||||
|
||||
# Store uploaded files to disk.
|
||||
upload_handler.store_datafiles(files, upload_metadata)
|
||||
# Store uploaded files to disk.
|
||||
self.store_datafiles(request.files, upload_metadata)
|
||||
|
||||
# Store metadata to database.
|
||||
upload_handler.store_metadata_solar(upload_metadata)
|
||||
# Store to database.
|
||||
self.store_metadata(upload_metadata, user_id)
|
||||
|
||||
# Send confirmation mail along with the contract to the submitted email address.
|
||||
upload_handler.send_confirm_mail(upload_metadata)
|
||||
return 'Uspešno ste oddali datotek(e). Št. datotek: {}'.format(len(request.files))
|
||||
|
||||
return 'Uspešno ste oddali datotek(e). Št. datotek: {}'.format(len(files))
|
||||
@staticmethod
|
||||
def check_form(form):
|
||||
program = form['program']
|
||||
predmet = form['predmet']
|
||||
letnik = int(form['letnik'])
|
||||
vrsta = form['vrsta']
|
||||
solsko_leto = form['solsko-leto']
|
||||
jezikovni_popravki = form['jezikovni-popravki']
|
||||
|
||||
if program not in VALID_PROGRAMS:
|
||||
return 'Invalid program "{}"'.format(program)
|
||||
if predmet not in VALID_SUBJECTS:
|
||||
return 'Invalid subject "{}"'.format(premdet)
|
||||
if letnik < 1 or letnik > 9:
|
||||
return 'Invalid grade: {}'.format(letnik)
|
||||
if vrsta not in VALID_TEXT_TYPES:
|
||||
return 'Invalid text type "{}"'.format(vrsta)
|
||||
if not re.match('^\d{0,2}-\d{0,2}$', solsko_leto):
|
||||
return 'Invalid school year "{}"'.format(solsko_leto)
|
||||
if jezikovni_popravki not in VALID_GRAMMAR_CORRECTIONS:
|
||||
return 'Invalid text type "{}"'.format(jezikovni_popravki)
|
||||
|
||||
def check_form(form):
|
||||
pass
|
||||
for key, val in form.items():
|
||||
if len(val) > MAXLEN_FORM:
|
||||
return 'Value in form field "{}" exceeds max len of {}'.format(key, MAXLEN_FORM)
|
||||
|
Loading…
Reference in new issue