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
|
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):
|
try:
|
||||||
files = request.files
|
model_obj = UploadSolar(
|
||||||
if len(files) > upload_handler.MAX_FILES_PER_UPLOAD:
|
upload_user = user_id,
|
||||||
return 'Naložite lahko do {} datotek hkrati.'.format(upload_handler.MAX_FILES_PER_UPLOAD), 400
|
institution = institution_id,
|
||||||
elif len(files) < 1:
|
upload_hash=upload_metadata['upload_id'],
|
||||||
return 'Priložena ni bila nobena datoteka.', 400
|
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)
|
def handle_upload(self, request, user_id):
|
||||||
if err:
|
err = portal.base.check_upload_request(request, self)
|
||||||
return err, 400
|
if err:
|
||||||
|
return err, 400
|
||||||
|
|
||||||
err = check_form(request.form)
|
err = self.check_form(request.form)
|
||||||
if err:
|
if err:
|
||||||
return err, 400
|
return err, 400
|
||||||
|
|
||||||
# Parse request.
|
# Parse request.
|
||||||
upload_metadata = upload_handler.extract_upload_metadata(corpus_name, request)
|
upload_metadata = self.extract_upload_metadata('solar', request)
|
||||||
|
|
||||||
logging.info('Upload from user "{}" with upload id "{}" supplied form data: {}'.format(
|
logging.info('Upload from user "{}" with upload id "{}" supplied form data: {}'.format(
|
||||||
request.user,
|
user_id,
|
||||||
upload_metadata['upload_id'],
|
upload_metadata['upload_id'],
|
||||||
str(upload_metadata['form_data']
|
str(upload_metadata['form_data']
|
||||||
)))
|
)))
|
||||||
|
|
||||||
# Store uploaded files to disk.
|
# Store uploaded files to disk.
|
||||||
upload_handler.store_datafiles(files, upload_metadata)
|
self.store_datafiles(request.files, upload_metadata)
|
||||||
|
|
||||||
# Store metadata to database.
|
# Store to database.
|
||||||
upload_handler.store_metadata_solar(upload_metadata)
|
self.store_metadata(upload_metadata, user_id)
|
||||||
|
|
||||||
# Send confirmation mail along with the contract to the submitted email address.
|
return 'Uspešno ste oddali datotek(e). Št. datotek: {}'.format(len(request.files))
|
||||||
upload_handler.send_confirm_mail(upload_metadata)
|
|
||||||
|
|
||||||
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):
|
for key, val in form.items():
|
||||||
pass
|
if len(val) > MAXLEN_FORM:
|
||||||
|
return 'Value in form field "{}" exceeds max len of {}'.format(key, MAXLEN_FORM)
|
||||||
|
Loading…
Reference in new issue