Edit upload items in administration menu.
This commit is contained in:
parent
965ddee7a7
commit
7d9d2b175c
42
app.py
42
app.py
|
@ -374,9 +374,10 @@ def solar(text):
|
|||
inactive_users = portal.base.get_all_users_join_institutions(active=False)
|
||||
solar_institutions = portal.solar.get_all_institutions()
|
||||
cooperation_history = portal.base.get_cooperation_history()
|
||||
uploads = portal.solar.get_all_upload_history(-1)
|
||||
if is_admin:
|
||||
return render_template('solar-admin.html', users=users, user_cooperation_history=cooperation_history,
|
||||
institutions=solar_institutions, inactive_users=inactive_users)
|
||||
institutions=solar_institutions, inactive_users=inactive_users, uploads=uploads)
|
||||
elif text.startswith('manage-institution/') or text == 'manage-institution':
|
||||
if portal.base.is_institution_coordinator(current_user.id, current_user_institution.id):
|
||||
solar_users = portal.base.get_all_active_users()
|
||||
|
@ -612,6 +613,45 @@ def add_cooperation_history_item():
|
|||
flash('Vnos dodan.')
|
||||
return redirect(redirect_url())
|
||||
|
||||
@app.route('/solar/updateuploaditem', methods=['POST'])
|
||||
@login_required
|
||||
def update_upload_item():
|
||||
if not portal.base.is_admin(current_user.id):
|
||||
return '', 404
|
||||
|
||||
err_msg = portal.solar.UploadHandlerSolar.check_form(request.form)
|
||||
if err_msg:
|
||||
flash(err_msg)
|
||||
return redirect(redirect_url())
|
||||
|
||||
item_id = request.form.get('item-id')
|
||||
program = request.form.get('program')
|
||||
subject = request.form.get('predmet')
|
||||
subject_custom = request.form.get('predmet-custom')
|
||||
grade = request.form.get('letnik')
|
||||
text_type = request.form.get('vrsta')
|
||||
text_type_custom = request.form.get('vrsta-custom')
|
||||
school_year = request.form.get('solsko-leto')
|
||||
grammar_corrections = request.form.get('jezikovni-popravki')
|
||||
|
||||
rowcount = portal.solar.update_upload_item(
|
||||
item_id,
|
||||
program,
|
||||
subject,
|
||||
subject_custom,
|
||||
grade,
|
||||
text_type,
|
||||
text_type_custom,
|
||||
school_year,
|
||||
grammar_corrections)
|
||||
|
||||
if rowcount == 0:
|
||||
return '', 404
|
||||
|
||||
flash('Vnos spremenjen.')
|
||||
return redirect(redirect_url())
|
||||
|
||||
|
||||
@app.route('/solar/delcooperationhistoryitem', methods=['POST'])
|
||||
@login_required
|
||||
def del_cooperation_history_item():
|
||||
|
|
|
@ -6,7 +6,7 @@ from sqlalchemy import desc
|
|||
from collections import Counter
|
||||
|
||||
from portal.base import UploadHandler, get_user_institution, has_user_corpus_access
|
||||
from portal.model import UploadSolar, ContractsSolar, RegisteredUser, Institution, InstitutionContract, UserInstitutionMapping, CorpusAccess
|
||||
from . model import *
|
||||
|
||||
|
||||
VALID_PROGRAMS = {'OS', 'SSG', 'MGP', 'ZG', 'NPI', 'SPI', 'SSI', 'PTI'}
|
||||
|
@ -161,12 +161,19 @@ class UploadHandlerSolar(UploadHandler):
|
|||
|
||||
|
||||
def get_upload_history(user_id, n=20):
|
||||
if n == -1:
|
||||
return UploadSolar.query.filter_by(upload_user=user_id).order_by(desc(UploadSolar.timestamp)).all()
|
||||
return UploadSolar.query.filter_by(upload_user=user_id).order_by(desc(UploadSolar.timestamp)).limit(n).all()
|
||||
|
||||
|
||||
def get_institution_upload_history(institution_id, n=20):
|
||||
return UploadSolar.query.filter_by(institution=institution_id).order_by(desc(UploadSolar.timestamp)).limit(n).all()
|
||||
|
||||
def get_all_upload_history(n=20):
|
||||
if n == -1:
|
||||
return UploadSolar.query.order_by(desc(UploadSolar.timestamp)).all()
|
||||
return UploadSolar.query.order_by(desc(UploadSolar.timestamp)).limit(n).all()
|
||||
|
||||
|
||||
def get_all_institutions():
|
||||
# TODO: do filtering purely within an SQL query
|
||||
|
@ -211,3 +218,16 @@ def get_all_active_users():
|
|||
res.append(user)
|
||||
return res
|
||||
|
||||
def update_upload_item(item_id, program, subject, subject_custom, grade, text_type, text_type_custom, school_year, grammar_corrections):
|
||||
rowcount = db.session.query(UploadSolar).filter_by(id=item_id).update({
|
||||
'program': program,
|
||||
'subject': subject,
|
||||
'subject_custom': subject_custom,
|
||||
'grade': grade,
|
||||
'text_type': text_type,
|
||||
'text_type_custom': text_type_custom,
|
||||
'school_year': school_year,
|
||||
'grammar_corrections': grammar_corrections
|
||||
})
|
||||
db.session.commit()
|
||||
return rowcount
|
||||
|
|
|
@ -279,4 +279,136 @@
|
|||
<input type="text" id="entry-id" name="entry-id"><br>
|
||||
<input type="submit" value="Odstrani">
|
||||
</form>
|
||||
<h2>Nalaganja</h2>
|
||||
<div class="tableFixHead">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>ID uporabnika</th>
|
||||
<th>ID institucije</th>
|
||||
<th>Čas nalaganja</th>
|
||||
<th>Program</th>
|
||||
<th>Predmet</th>
|
||||
<th>Predmet (drugo)</th>
|
||||
<th>Letnik</th>
|
||||
<th>Vrsta besedila</th>
|
||||
<th>Vrsta besedila (drugo)</th>
|
||||
<th>Šolsko leto</th>
|
||||
<th>Jezikovni popravki</th>
|
||||
<th>ID-ji naloženih datotek</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for item in uploads %}
|
||||
<tr>
|
||||
<td>{{item.id}}</td>
|
||||
<td>{{item.upload_user}}</td>
|
||||
<td>{{item.institution}}</td>
|
||||
<td>{{item.timestamp}}</td>
|
||||
<td>{{item.program}}</td>
|
||||
<td>{{item.subject}}</td>
|
||||
<td>{{item.subject_custom}}</td>
|
||||
<td>{{item.grade}}</td>
|
||||
<td>{{item.text_type}}</td>
|
||||
<td>{{item.text_type_custom}}</td>
|
||||
<td>{{item.school_year}}</td>
|
||||
<td>{{item.grammar_corrections}}</td>
|
||||
<td>{{item.upload_file_hashes}}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</div>
|
||||
<h3>Posodobi podatke nalaganja</h3>
|
||||
<form action="/solar/updateuploaditem" method="post">
|
||||
<label for="item-id">ID nalaganja</label>
|
||||
<input type="text" id="item-id" name="item-id"/><br>
|
||||
<label for="program">Program</label>
|
||||
<select id="program" name="program">
|
||||
<option value="OS" selected="selected">Osnovnošolski (OŠ)</option>
|
||||
<option value="SSG">Splošna in strokovna gimnazija (SGG)</option>
|
||||
<option value="MGP">Mednarodni gimnazijski programi (MGP)</option>
|
||||
<option value="ZG">Zasebne gimnazije (ZG)</option>
|
||||
<option value="NPI">Nižje poklicno izobraževanje (NPI)</option>
|
||||
<option value="SPI">Srednje poklicno izobraževanje (SPI)</option>
|
||||
<option value="SSI">Srednje strokovno izobraževanje (SSI)</option>
|
||||
<option value="PTI">Poklicno-tehnično izobraževanje (PTI)</option>
|
||||
</select><br>
|
||||
|
||||
<label for="predmet">Predmet</label>
|
||||
<select id="predmet" name="predmet">
|
||||
<option value="slo" selected="selected">Slovenščina</option>
|
||||
<option value="drug-jez">Drugi jezikoslovni predmeti</option>
|
||||
<option value="drug-druz">Drugi družboslovni predmeti</option>
|
||||
<option value="drug-narav">Drugi naravoslovni predmeti</option>
|
||||
<option value="drug-strok">Drugi strokovni predmeti</option>
|
||||
<option value="drug-izb">Drugi izbirni ali dodatni predmeti</option>
|
||||
</select><br>
|
||||
<div id="predmet-custom-box" style="display: none;">
|
||||
<label for="predmet-custom">Ime predmeta:</label>
|
||||
<input type="text" id="predmet-custom" name="predmet-custom"/><br>
|
||||
</div>
|
||||
|
||||
<label for="letnik">Letnik</label>
|
||||
<select id="letnik" name="letnik">
|
||||
<option value="1" selected="selected">1</option>
|
||||
<option value="2">2</option>
|
||||
<option value="3">3</option>
|
||||
<option value="4">4</option>
|
||||
<option value="5">5</option>
|
||||
<option value="6">6</option>
|
||||
<option value="7">7</option>
|
||||
<option value="8">8</option>
|
||||
<option value="9">9</option>
|
||||
</select><br>
|
||||
|
||||
<label for="vrsta">Vrsta besedila</label>
|
||||
<select id="vrsta" name="vrsta">
|
||||
<option value="esej-spis" selected="selected">Esej ali spis</option>
|
||||
<option value="prakticno">Praktično besedilo (npr. vabila, prošnje ipd. pri pouku slovenščine), napisano za oceno</option>
|
||||
<option value="solski-test">Šolski test</option>
|
||||
<option value="delo-v-razredu">Delo v razredu, ne za oceno</option>
|
||||
</select>
|
||||
<div id="vrsta-custom-box" style="display: none;">
|
||||
<label for="vrsta-custom">Vtipkajte besedilno vrsto:</label>
|
||||
<input type="text" id="vrsta-custom" name="vrsta-custom"/><br>
|
||||
</div>
|
||||
|
||||
<label for="solsko-leto">Šolsko leto</label>
|
||||
<select id="solsko-leto" name="solsko-leto">
|
||||
<option value="20-21" selected="selected">2020/21</option>
|
||||
<option value="21-22">2021/22</option>
|
||||
</select><br>
|
||||
|
||||
<label for="jezikovni-popravki">Jezikovni popravki</label>
|
||||
<select id="jezikovni-popravki" name="jezikovni-popravki">
|
||||
<option value="popr-ne" selected="selected">Besedilo vsebuje učiteljske popravke in strinjam se z njihovo vključitvijo v korpus</option>
|
||||
<option value="brez-popr">Besedilo ne vsebuje učiteljskih popravkov</option>
|
||||
<option value="popr-da">Besedilo vsebuje učiteljske popravke in ne strinjam se z njihovo vključitvijo v korpus</option>
|
||||
</select><br>
|
||||
|
||||
<button id="button-submit" type="submit">Posodobi</button>
|
||||
</form>
|
||||
<script>
|
||||
var selectPredmet = document.getElementById("predmet");
|
||||
var selectVrsta = document.getElementById("vrsta");
|
||||
|
||||
selectPredmet.addEventListener("change", function(e) {
|
||||
var predmetCustomBox = document.getElementById("predmet-custom-box");
|
||||
if (selectPredmet.value.startsWith("drug")) {
|
||||
predmetCustomBox.style.display = "inherit";
|
||||
} else {
|
||||
predmetCustomBox.style.display = "none";
|
||||
}
|
||||
});
|
||||
|
||||
selectVrsta.addEventListener("change", function(e) {
|
||||
var vrstaCustomBox = document.getElementById("vrsta-custom-box");
|
||||
if (selectVrsta.value == "delo-v-razredu") {
|
||||
vrstaCustomBox.style.display = "inherit";
|
||||
} else {
|
||||
vrstaCustomBox.style.display = "none";
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
|
Loading…
Reference in New Issue
Block a user