fixes for bugs discovered in meeting
This commit is contained in:
parent
d60ef26741
commit
965ddee7a7
31
app.py
31
app.py
|
@ -199,7 +199,7 @@ def solar_login_post():
|
||||||
password = request.form.get('password')
|
password = request.form.get('password')
|
||||||
remember = True if request.form.get('remember') else False
|
remember = True if request.form.get('remember') else False
|
||||||
|
|
||||||
user = RegisteredUser.query.filter_by(email=email).first()
|
user = portal.base.get_user_obj_by_email(email)
|
||||||
|
|
||||||
if not user or not check_password_hash(user.pass_hash, password):
|
if not user or not check_password_hash(user.pass_hash, password):
|
||||||
flash('Napačni podatki za prijavo. Poskusite ponovno.')
|
flash('Napačni podatki za prijavo. Poskusite ponovno.')
|
||||||
|
@ -250,6 +250,9 @@ def solar_register_post():
|
||||||
if not password:
|
if not password:
|
||||||
flash('Prazno polje za geslo.')
|
flash('Prazno polje za geslo.')
|
||||||
return redirect('/solar/register')
|
return redirect('/solar/register')
|
||||||
|
if len(password) > 8:
|
||||||
|
flash('Geslo mora biti vsaj 8 znakov dolgo.')
|
||||||
|
return redirect('/solar/register')
|
||||||
if len(password) > 100:
|
if len(password) > 100:
|
||||||
flash('Predolgo geslo.')
|
flash('Predolgo geslo.')
|
||||||
return redirect('/solar/register')
|
return redirect('/solar/register')
|
||||||
|
@ -621,6 +624,32 @@ def del_cooperation_history_item():
|
||||||
flash('Vnos odstranjen.')
|
flash('Vnos odstranjen.')
|
||||||
return redirect(redirect_url())
|
return redirect(redirect_url())
|
||||||
|
|
||||||
|
@app.route('/solar/changeinstitutiondata', methods=['POST'])
|
||||||
|
@login_required
|
||||||
|
def change_institution_data():
|
||||||
|
if not portal.base.is_admin(current_user.id):
|
||||||
|
return '', 404
|
||||||
|
|
||||||
|
institution_id = request.form.get('id')
|
||||||
|
new_name = request.form.get('name')
|
||||||
|
new_region = request.form.get('region')
|
||||||
|
|
||||||
|
if not new_name:
|
||||||
|
flash('Prazno polje za naziv.')
|
||||||
|
return redirect(redirect_url())
|
||||||
|
if len(new_name) > 100:
|
||||||
|
flash('Predolgo ime.')
|
||||||
|
return redirect(redirect_url())
|
||||||
|
|
||||||
|
if not new_region in portal.solar.VALID_REGIONS:
|
||||||
|
flash('Neveljavna vrednost za regijo.')
|
||||||
|
return redirect(redirect_url())
|
||||||
|
|
||||||
|
portal.base.update_institution_data(institution_id, new_name, new_region)
|
||||||
|
flash('Podatki institucije so bili spremenjeni.')
|
||||||
|
return redirect(redirect_url())
|
||||||
|
|
||||||
|
|
||||||
@app.route('/solar/changeuseremail', methods=['POST'])
|
@app.route('/solar/changeuseremail', methods=['POST'])
|
||||||
@login_required
|
@login_required
|
||||||
def change_user_email():
|
def change_user_email():
|
||||||
|
|
|
@ -18,8 +18,8 @@ depends_on = None
|
||||||
|
|
||||||
def upgrade():
|
def upgrade():
|
||||||
# ### commands auto generated by Alembic - please adjust! ###
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
op.add_column('institution', sa.Column('is_removed', sa.Boolean(), server_default='true', nullable=False))
|
op.add_column('institution', sa.Column('is_removed', sa.Boolean(), server_default='false', nullable=False))
|
||||||
op.add_column('registered_user', sa.Column('is_removed', sa.Boolean(), server_default='true', nullable=False))
|
op.add_column('registered_user', sa.Column('is_removed', sa.Boolean(), server_default='false', nullable=False))
|
||||||
# ### end Alembic commands ###
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -405,22 +405,30 @@ def update_user_name(user_id, new_name):
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
return rowcount
|
return rowcount
|
||||||
|
|
||||||
|
def update_institution_data(institution_id, new_name, new_region):
|
||||||
|
rowcount = db.session.query(Institution).filter_by(id=institution_id).update({'name': new_name, 'region': new_region})
|
||||||
|
db.session.commit()
|
||||||
|
return rowcount
|
||||||
|
|
||||||
|
|
||||||
def remove_user(user_id):
|
def remove_user(user_id):
|
||||||
#db.session.query(UserCooperationHistory).filter(UserCooperationHistory.user == user_id).delete()
|
db.session.query(UserCooperationHistory).filter(UserCooperationHistory.user == user_id).delete()
|
||||||
#db.session.query(UserInstitutionMapping).filter(UserInstitutionMapping.user == user_id).delete()
|
db.session.query(UserInstitutionMapping).filter(UserInstitutionMapping.user == user_id).delete()
|
||||||
#db.session.query(RegisteredUser).filter(RegisteredUser.id == user_id).delete()
|
db.session.query(RegisteredUser).filter(RegisteredUser.id == user_id).delete()
|
||||||
|
db.session.commit()
|
||||||
|
#db.session.query(RegisteredUser).filter(RegisteredUser.id == user_id).update({'is_removed': True})
|
||||||
#db.session.commit()
|
#db.session.commit()
|
||||||
db.session.query(RegisteredUser).filter(RegisteredUser.id == user_id).update({'is_removed': True})
|
|
||||||
db.session.commit()
|
|
||||||
|
|
||||||
def undo_remove_user(user_id):
|
#def undo_remove_user(user_id):
|
||||||
db.session.query(RegisteredUser).filter(RegisteredUser.id == user_id).update({'is_removed': False})
|
# db.session.query(RegisteredUser).filter(RegisteredUser.id == user_id).update({'is_removed': False})
|
||||||
db.session.commit()
|
# db.session.commit()
|
||||||
|
|
||||||
def remove_institution(institution_id):
|
def remove_institution(institution_id):
|
||||||
db.session.query(Institution).filter(Institution.id == institution_id).update({'is_removed': True})
|
db.session.query(CorpusAccess).filter(CorpusAccess.institution == institution_id).delete()
|
||||||
|
db.session.query(Institution).filter(Institution.id == institution_id).delete()
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
#db.session.query(Institution).filter(Institution.id == institution_id).update({'is_removed': True})
|
||||||
|
#db.session.commit()
|
||||||
|
|
||||||
|
|
||||||
def del_user_from_institution(user_id, institution_id):
|
def del_user_from_institution(user_id, institution_id):
|
||||||
|
@ -429,22 +437,22 @@ def del_user_from_institution(user_id, institution_id):
|
||||||
|
|
||||||
|
|
||||||
def get_all_active_users():
|
def get_all_active_users():
|
||||||
return RegisteredUser.query.filter_by(is_removed=False).filter_by(active=True).order_by(RegisteredUser.id).all()
|
return RegisteredUser.query.filter_by(active=True).order_by(RegisteredUser.id).all()
|
||||||
|
|
||||||
|
|
||||||
def get_all_inactive_users():
|
def get_all_inactive_users():
|
||||||
return RegisteredUser.query.filter_by(is_removed=False).filter_by(active=False).order_by(RegisteredUser.id).all()
|
return RegisteredUser.query.filter_by(active=False).order_by(RegisteredUser.id).all()
|
||||||
|
|
||||||
|
|
||||||
def get_all_users_join_institutions(active=True):
|
def get_all_users_join_institutions(active=True):
|
||||||
#return RegisteredUser.query.filter_by(active=True).order_by(RegisteredUser.id).all()
|
#return RegisteredUser.query.filter_by(active=True).order_by(RegisteredUser.id).all()
|
||||||
return db.session.query(RegisteredUser, UserInstitutionMapping).filter(RegisteredUser.is_removed==False).outerjoin(UserInstitutionMapping,
|
return db.session.query(RegisteredUser, UserInstitutionMapping).outerjoin(UserInstitutionMapping,
|
||||||
RegisteredUser.id == UserInstitutionMapping.user).filter(RegisteredUser.active == active).order_by(RegisteredUser.id).all()
|
RegisteredUser.id == UserInstitutionMapping.user).filter(RegisteredUser.active == active).order_by(RegisteredUser.id).all()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def get_all_active_institution_users(institution_id):
|
def get_all_active_institution_users(institution_id):
|
||||||
return RegisteredUser.query.filter_by(is_removed=False).filter_by(active=True).join(UserInstitutionMapping,
|
return RegisteredUser.query.filter_by(active=True).join(UserInstitutionMapping,
|
||||||
RegisteredUser.id == UserInstitutionMapping.user).filter(UserInstitutionMapping.institution == institution_id).all()
|
RegisteredUser.id == UserInstitutionMapping.user).filter(UserInstitutionMapping.institution == institution_id).all()
|
||||||
|
|
||||||
|
|
||||||
|
@ -552,12 +560,6 @@ def send_admins_new_user_notification_mail(user_id, config):
|
||||||
Nov uporabnik "{}" je ustvaril uporabniški račun na portalu za oddajanje besedil Šolar in čaka na odobritev.
|
Nov uporabnik "{}" je ustvaril uporabniški račun na portalu za oddajanje besedil Šolar in čaka na odobritev.
|
||||||
'''.format(user.name)
|
'''.format(user.name)
|
||||||
|
|
||||||
message = MIMEMultipart()
|
|
||||||
message['From'] = config['MAIL_LOGIN']
|
|
||||||
message['To'] = email
|
|
||||||
message['Subject'] = 'Ponastavitev gesla'
|
|
||||||
message.attach(MIMEText(body, "plain"))
|
|
||||||
text = message.as_string()
|
|
||||||
|
|
||||||
admins = RegisteredUser.query.filter_by(role="admin").all()
|
admins = RegisteredUser.query.filter_by(role="admin").all()
|
||||||
|
|
||||||
|
@ -565,6 +567,12 @@ def send_admins_new_user_notification_mail(user_id, config):
|
||||||
context = ssl.create_default_context()
|
context = ssl.create_default_context()
|
||||||
|
|
||||||
for admin in admins:
|
for admin in admins:
|
||||||
|
message = MIMEMultipart()
|
||||||
|
message['From'] = config['MAIL_LOGIN']
|
||||||
|
message['To'] = admin.email
|
||||||
|
message['Subject'] = 'Nova registracija'
|
||||||
|
message.attach(MIMEText(body, "plain"))
|
||||||
|
text = message.as_string()
|
||||||
try:
|
try:
|
||||||
with SMTP_SSL(config['MAIL_HOST'], config['SMTP_PORT'], context=context) as server:
|
with SMTP_SSL(config['MAIL_HOST'], config['SMTP_PORT'], context=context) as server:
|
||||||
server.login(config['MAIL_LOGIN'], config['MAIL_PASS'])
|
server.login(config['MAIL_LOGIN'], config['MAIL_PASS'])
|
||||||
|
@ -579,7 +587,7 @@ def send_user_activation_mail(user_id, config):
|
||||||
|
|
||||||
message = MIMEMultipart()
|
message = MIMEMultipart()
|
||||||
message['From'] = config['MAIL_LOGIN']
|
message['From'] = config['MAIL_LOGIN']
|
||||||
message['To'] = email
|
message['To'] = user.email
|
||||||
message['Subject'] = 'Ponastavitev gesla'
|
message['Subject'] = 'Ponastavitev gesla'
|
||||||
message.attach(MIMEText(body, "plain"))
|
message.attach(MIMEText(body, "plain"))
|
||||||
text = message.as_string()
|
text = message.as_string()
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<a href="/solar/oddaja">Nazaj na oddajo</a>
|
||||||
{% with messages = get_flashed_messages() %}
|
{% with messages = get_flashed_messages() %}
|
||||||
{% if messages %}
|
{% if messages %}
|
||||||
<div style="background: blue;">
|
<div style="background: blue;">
|
||||||
|
@ -206,6 +207,28 @@
|
||||||
<input type="text" id="id-to" name="id-to"><br>
|
<input type="text" id="id-to" name="id-to"><br>
|
||||||
<input type="submit" value="Združi">
|
<input type="submit" value="Združi">
|
||||||
</form>
|
</form>
|
||||||
|
<h3>Spremeni podatke institucije</h3>
|
||||||
|
<form action="/solar/changeinstitutiondata" method="post">
|
||||||
|
<label for="id">ID institucije</label>
|
||||||
|
<input type="text" id="id" name="id"><br>
|
||||||
|
<label for="name">Nov naziv:</label>
|
||||||
|
<input type="text" id="name" name="name"><br>
|
||||||
|
<label for="region">Nova regija:</label>
|
||||||
|
<select name="region" id="region">
|
||||||
|
<option value="CE">Celje</option>
|
||||||
|
<option value="GO">Nova Gorica</option>
|
||||||
|
<option value="KK">Krško</option>
|
||||||
|
<option value="KP">Koper</option>
|
||||||
|
<option value="KR">Kranj</option>
|
||||||
|
<option value="LJ">Ljubljana</option>
|
||||||
|
<option value="MB">Maribor</option>
|
||||||
|
<option value="MS">Murska Sobota</option>
|
||||||
|
<option value="NM">Novo mesto</option>
|
||||||
|
<option value="PO">Postojna</option>
|
||||||
|
<option value="SG">Slovenj Gradec</option>
|
||||||
|
</select>
|
||||||
|
<input type="submit" value="Spremeni">
|
||||||
|
</form>
|
||||||
<h2>Zgodovina sodelovanja</h2>
|
<h2>Zgodovina sodelovanja</h2>
|
||||||
<div class="tableFixHead">
|
<div class="tableFixHead">
|
||||||
<table>
|
<table>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
<div id="logo-container">
|
<div id="logo-container">
|
||||||
<img src="/static/image/logo.svg" alt="logo"/>
|
<img src="/static/image/logo.svg" alt="logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
<a href="/solar/login" class="contract-item-button" style="float: none;">Nazaj na prijavo</a>
|
||||||
<h3 id="title" style="font-size: 27px; text-align: left;">Pozabljeno geslo - ŠOLAR</h3>
|
<h3 id="title" style="font-size: 27px; text-align: left;">Pozabljeno geslo - ŠOLAR</h3>
|
||||||
<div>
|
<div>
|
||||||
{% with messages = get_flashed_messages() %}
|
{% with messages = get_flashed_messages() %}
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<a href="/solar/oddaja">Nazaj na oddajo</a>
|
||||||
{% with messages = get_flashed_messages() %}
|
{% with messages = get_flashed_messages() %}
|
||||||
{% if messages %}
|
{% if messages %}
|
||||||
<div style="background: blue;">
|
<div style="background: blue;">
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
left: 385px;
|
left: 385px;
|
||||||
background: linear-gradient(198.62deg, rgba(255, 255, 255, 0.49) -1.62%, rgba(255, 255, 255, 0.73) -1.61%, rgba(255, 255, 255, 0.41) 79.34%);
|
background: linear-gradient(198.62deg, rgba(255, 255, 255, 0.49) -1.62%, rgba(255, 255, 255, 0.73) -1.61%, rgba(255, 255, 255, 0.41) 79.34%);
|
||||||
box-shadow: 20px 4px 40px rgba(0, 0, 0, 0.25);
|
box-shadow: 20px 4px 40px rgba(0, 0, 0, 0.25);
|
||||||
backdrop-filter: blur(20px);
|
|
||||||
border: 0px;
|
border: 0px;
|
||||||
|
backdrop-filter: blur(20px);
|
||||||
border-radius: 0px 20px 20px 0px;') }}
|
border-radius: 0px 20px 20px 0px;') }}
|
||||||
<link rel="stylesheet" href="/static/style.css" type="text/css">
|
<link rel="stylesheet" href="/static/style.css" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
<div class="form-text"><em>Zbiranje besedil za korpus Šolar poteka po naslednjem postopku, ki prinaša tudi točke za napredovanje.</em></div>
|
<div class="form-text"><em>Zbiranje besedil za korpus Šolar poteka po naslednjem postopku, ki prinaša tudi točke za napredovanje.</em></div>
|
||||||
|
|
||||||
|
<a href="/solar/login" class="contract-item-button" style="float: none;">Nazaj na prijavo</a>
|
||||||
<h3 id="title" style="font-size: 27px; text-align: left;">Registracija</h3>
|
<h3 id="title" style="font-size: 27px; text-align: left;">Registracija</h3>
|
||||||
<div>
|
<div>
|
||||||
{% with messages = get_flashed_messages() %}
|
{% with messages = get_flashed_messages() %}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user