New testing tools
@ -284,6 +284,7 @@ class ZScoDoc(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Imp
|
||||
raise ValueError("nom de departement invalide")
|
||||
if not pass2:
|
||||
# 1- Creation de repertoire Dept
|
||||
log("creating Zope folder " + DeptId)
|
||||
add_method = self.manage_addProduct["OFSP"].manage_addFolder
|
||||
add_method(DeptId, title="Site dept. " + DeptId)
|
||||
|
||||
@ -291,10 +292,12 @@ class ZScoDoc(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Imp
|
||||
|
||||
if not pass2:
|
||||
# 2- Creation du repertoire Fotos
|
||||
log("creating Zope folder %s/Fotos" % DeptId)
|
||||
add_method = DeptFolder.manage_addProduct["OFSP"].manage_addFolder
|
||||
add_method("Fotos", title="Photos identites " + DeptId)
|
||||
|
||||
# 3- Creation instance ScoDoc
|
||||
log("creating Zope ZScolar instance")
|
||||
add_method = DeptFolder.manage_addProduct["ScoDoc"].manage_addZScolarForm
|
||||
return add_method(DeptId, REQUEST=REQUEST)
|
||||
|
||||
|
45
ZScolar.py
@ -2037,49 +2037,8 @@ function tweakmenu( gname ) {
|
||||
)
|
||||
|
||||
if not edit:
|
||||
# creation d'un etudiant
|
||||
etudid = scolars.etudident_create(
|
||||
cnx, tf[2], context=self, REQUEST=REQUEST
|
||||
)
|
||||
# crée une adresse vide (chaque etudiant doit etre dans la table "adresse" !)
|
||||
adresse_id = scolars.adresse_create(
|
||||
cnx,
|
||||
{
|
||||
"etudid": etudid,
|
||||
"typeadresse": "domicile",
|
||||
"description": "(creation individuelle)",
|
||||
},
|
||||
)
|
||||
|
||||
# event
|
||||
scolars.scolar_events_create(
|
||||
cnx,
|
||||
args={
|
||||
"etudid": etudid,
|
||||
"event_date": time.strftime("%d/%m/%Y"),
|
||||
"formsemestre_id": None,
|
||||
"event_type": "CREATION",
|
||||
},
|
||||
)
|
||||
# log
|
||||
logdb(
|
||||
REQUEST,
|
||||
cnx,
|
||||
method="etudident_edit_form",
|
||||
etudid=etudid,
|
||||
msg="creation initiale",
|
||||
)
|
||||
etud = scolars.etudident_list(cnx, {"etudid": etudid})[0]
|
||||
self.fillEtudsInfo([etud])
|
||||
etud["url"] = "ficheEtud?etudid=%(etudid)s" % etud
|
||||
sco_news.add(
|
||||
self,
|
||||
REQUEST,
|
||||
typ=NEWS_INSCR,
|
||||
object=None, # pas d'object pour ne montrer qu'un etudiant
|
||||
text='Nouvel étudiant <a href="%(url)s">%(nomprenom)s</a>' % etud,
|
||||
url=etud["url"],
|
||||
)
|
||||
etud = scolars.create_etud(self, cnx, args=tf[2], REQUEST=REQUEST)
|
||||
etudid = etud["etudid"]
|
||||
else:
|
||||
# modif d'un etudiant
|
||||
scolars.etudident_edit(cnx, tf[2], context=self, REQUEST=REQUEST)
|
||||
|
@ -13,27 +13,45 @@
|
||||
source config.sh
|
||||
source utils.sh
|
||||
|
||||
check_uid_root $0
|
||||
check_uid_root "$0"
|
||||
|
||||
usage() {
|
||||
echo "$0 [-n DEPT]"
|
||||
echo "(default to interactive mode)"
|
||||
exit 1
|
||||
}
|
||||
[ $# = 0 ] || [ $# = 2 ] || usage
|
||||
|
||||
echo -n "Nom du departement (un mot sans ponctuation, exemple \"Info\"): "
|
||||
read DEPT
|
||||
if [ "$1" = "-n" ]
|
||||
then
|
||||
interactive=0
|
||||
if [ $# -lt 2 ]
|
||||
then
|
||||
usage
|
||||
fi
|
||||
DEPT=$2
|
||||
else
|
||||
interactive=1
|
||||
echo -n "Nom du departement (un mot sans ponctuation, exemple \"Info\"): "
|
||||
read -r DEPT
|
||||
fi
|
||||
|
||||
if [[ ! "$DEPT" =~ ^[A-Za-z0-9]+$ ]]
|
||||
then
|
||||
echo 'Nom de departement invalide !'
|
||||
exit 1
|
||||
exit 2
|
||||
fi
|
||||
|
||||
export DEPT
|
||||
|
||||
export db_name=SCO$(to_upper "$DEPT")
|
||||
db_name=SCO$(to_upper "$DEPT")
|
||||
export db_name
|
||||
|
||||
cfg_pathname="${SCODOC_VAR_DIR}/config/depts/$DEPT".cfg
|
||||
|
||||
if [ -e $cfg_pathname ]
|
||||
if [ -e "$cfg_pathname" ]
|
||||
then
|
||||
echo 'Erreur: Il existe deja une configuration pour "'$DEPT'"'
|
||||
echo 'Erreur: Il existe deja une configuration pour "'"$DEPT"'"'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@ -41,29 +59,32 @@ fi
|
||||
init_postgres_user
|
||||
|
||||
# ----------------------- Create database
|
||||
su -c ./create_database.sh $POSTGRES_SUPERUSER
|
||||
su -c ./create_database.sh "$POSTGRES_SUPERUSER"
|
||||
|
||||
# ----------------------- Create tables
|
||||
# POSTGRES_USER == regular unix user (www-data)
|
||||
su -c ./initialize_database.sh $POSTGRES_USER
|
||||
su -c ./initialize_database.sh "$POSTGRES_USER"
|
||||
|
||||
# ----------------------- Enregistre fichier config
|
||||
echo "dbname="$db_name > $cfg_pathname
|
||||
echo "dbname=${db_name}" > "$cfg_pathname"
|
||||
|
||||
# ----------------------- Force mise à jour
|
||||
echo -n "Voulez vous mettre a jour ScoDoc (tres recommande) ? (y/n) [y] "
|
||||
read ans
|
||||
if [ "$(norm_ans "$ans")" != 'N' ]
|
||||
|
||||
if [ "$interactive" = 1 ]
|
||||
then
|
||||
(cd "$SCODOC_DIR/config"; ./upgrade.sh)
|
||||
# ----------------------- Force mise à jour
|
||||
echo -n "Voulez vous mettre a jour ScoDoc (tres recommande) ? (y/n) [y] "
|
||||
read -r ans
|
||||
if [ "$(norm_ans "$ans")" != 'N' ]
|
||||
then
|
||||
(cd "$SCODOC_DIR/config" || terminate "no config directory"; ./upgrade.sh)
|
||||
fi
|
||||
# -----------------------
|
||||
echo
|
||||
echo " Departement $DEPT cree"
|
||||
echo
|
||||
echo " Attention: la base de donnees n'a pas de copies de sauvegarde"
|
||||
echo
|
||||
echo " Maintenant, vous pouvez ajouter le departement via l'application web"
|
||||
echo " en suivant le lien \"Administration de ScoDoc\" sur la page d'accueil."
|
||||
echo
|
||||
fi
|
||||
|
||||
# -----------------------
|
||||
echo
|
||||
echo " Departement $DEPT cree"
|
||||
echo
|
||||
echo " Attention: la base de donnees n'a pas de copies de sauvegarde"
|
||||
echo
|
||||
echo " Maintenant, vous pouvez ajouter le departement via l'application web"
|
||||
echo " en suivant le lien \"Administration de ScoDoc\" sur la page d'accueil."
|
||||
echo
|
||||
|
@ -18,46 +18,64 @@ source config.sh
|
||||
source utils.sh
|
||||
|
||||
check_uid_root $0
|
||||
|
||||
echo
|
||||
echo "Ce script supprime la base de donnees ScoDoc d'un departement"
|
||||
echo
|
||||
echo "Attention: le departement doit au prealable avoir ete supprime via l'interface web !"
|
||||
echo "faites le AVANT d'executer ce script !!!"
|
||||
echo
|
||||
echo -n "Nom du departement a supprimer (un mot sans ponctuation, exemple \"Info\"): "
|
||||
read DEPT
|
||||
usage() {
|
||||
echo "$0 [-n DEPT]"
|
||||
echo "(default to interactive mode)"
|
||||
exit 1
|
||||
}
|
||||
[ $# = 0 ] || [ $# = 2 ] || usage
|
||||
if [ "$1" = "-n" ]
|
||||
then
|
||||
interactive=0
|
||||
if [ $# -lt 2 ]
|
||||
then
|
||||
usage
|
||||
fi
|
||||
DEPT=$2
|
||||
else
|
||||
interactive=1
|
||||
echo
|
||||
echo "Ce script supprime la base de donnees ScoDoc d'un departement"
|
||||
echo
|
||||
echo "Attention: le departement doit au prealable avoir ete supprime via l'interface web !"
|
||||
echo "faites le AVANT d'executer ce script !!!"
|
||||
echo
|
||||
echo -n "Nom du departement a supprimer (un mot sans ponctuation, exemple \"Info\"): "
|
||||
read -r DEPT
|
||||
fi
|
||||
|
||||
if [[ ! "$DEPT" =~ ^[A-Za-z0-9]+$ ]]
|
||||
then
|
||||
echo "Nom de departement invalide !"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export DEPT
|
||||
|
||||
cfg_pathname="${SCODOC_VAR_DIR}/config/depts/$DEPT".cfg
|
||||
|
||||
if [ -e $cfg_pathname ]
|
||||
if [ -e "$cfg_pathname" ]
|
||||
then
|
||||
# arret de ScoDoc
|
||||
scodocctl stop
|
||||
|
||||
# suppression de la base postgres
|
||||
db_name=$(cat $cfg_pathname | sed '/^dbname=*/!d; s///;q')
|
||||
db_name=$(cat "$cfg_pathname" | sed '/^dbname=*/!d; s///;q')
|
||||
echo "suppression de la base postgres $db_name"
|
||||
su -c "dropdb $db_name" $POSTGRES_SUPERUSER || terminate "ne peux supprimer base de donnees $db_name"
|
||||
su -c "dropdb $db_name" "$POSTGRES_SUPERUSER" || terminate "ne peux supprimer base de donnees $db_name"
|
||||
# suppression du fichier de config
|
||||
/bin/rm -f $cfg_pathname || terminate "ne peux supprimer $cfg_pathname"
|
||||
/bin/rm -f "$cfg_pathname" || terminate "ne peux supprimer $cfg_pathname"
|
||||
# relance ScoDoc
|
||||
if [ "$interactive" = 1 ]
|
||||
then
|
||||
echo -n "Demarrer le serveur ScoDoc ? (y/n) [n]"
|
||||
read ans
|
||||
read -r ans
|
||||
if [ "$(norm_ans "$ans")" = 'Y' ]
|
||||
then
|
||||
scodocctl start
|
||||
fi
|
||||
fi
|
||||
exit 0
|
||||
else
|
||||
echo 'Erreur: pas de configuration trouvee pour "'$DEPT'"'
|
||||
echo 'Erreur: pas de configuration trouvee pour "'"$DEPT"'"'
|
||||
exit 1
|
||||
fi
|
||||
|
6
debug.py
@ -31,6 +31,8 @@ nt = context.Notes._getNotesCache().get_NotesTable(context.Notes, formsemestre_i
|
||||
|
||||
|
||||
"""
|
||||
import pdb
|
||||
|
||||
from notesdb import *
|
||||
from notes_log import log
|
||||
from sco_utils import *
|
||||
@ -78,6 +80,9 @@ class FakeUser:
|
||||
def has_permission(self, op, context):
|
||||
return True
|
||||
|
||||
def has_role(self, role):
|
||||
return True
|
||||
|
||||
|
||||
class DummyResponse:
|
||||
"""Emulation vide de Reponse http Zope"""
|
||||
@ -104,6 +109,7 @@ class DummyRequest:
|
||||
self.URL1 = self.URL
|
||||
self.URL0 = self.URL
|
||||
self.BASE0 = "localhost"
|
||||
self.REMOTE_HOST = "localhost"
|
||||
self.REMOTE_ADDR = "127.0.0.1"
|
||||
self.HTTP_REFERER = ""
|
||||
self.REQUEST_METHOD = "get"
|
||||
|
@ -34,7 +34,7 @@ class _logguer:
|
||||
if LOG_FILENAME:
|
||||
path = os.path.join(self.directory, LOG_FILENAME)
|
||||
self.file = open(path, "a")
|
||||
self("new _logguer")
|
||||
self("new _logguer (%s)" % path)
|
||||
else:
|
||||
self.file = None # logging disabled
|
||||
|
||||
|
@ -248,8 +248,7 @@ def DBDelete(cnx, table, colid, val, commit=False):
|
||||
|
||||
|
||||
class EditableTable:
|
||||
""" --- generic class: SQL table with create/edit/list/delete
|
||||
"""
|
||||
"""--- generic class: SQL table with create/edit/list/delete"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
@ -377,7 +376,11 @@ class EditableTable:
|
||||
# format value
|
||||
for title in vals.keys():
|
||||
if self.input_formators.has_key(title):
|
||||
try:
|
||||
vals[title] = self.input_formators[title](vals[title])
|
||||
except:
|
||||
log("exception while converting %s=%s" % (title, vals[title]))
|
||||
raise
|
||||
DBUpdateArgs(
|
||||
cnx,
|
||||
self.table_name,
|
||||
|
@ -28,6 +28,8 @@
|
||||
"""Synchronisation des listes d'étudiants avec liste portail (Apogée)
|
||||
"""
|
||||
|
||||
import time
|
||||
import pprint
|
||||
|
||||
from sco_utils import ScoEtudInscrit, annee_scolaire_debut, log, ScoValueError
|
||||
from notesdb import ScoDocCursor
|
||||
@ -42,8 +44,6 @@ import sco_formsemestre_inscriptions
|
||||
import sco_formsemestre_status
|
||||
from sco_news import NEWS_INSCR, NEWS_NOTE, NEWS_FORM, NEWS_SEM, NEWS_MISC
|
||||
|
||||
import time
|
||||
|
||||
# Clés utilisées pour la synchro
|
||||
EKEY_APO = "nip"
|
||||
EKEY_SCO = "code_nip"
|
||||
@ -695,7 +695,7 @@ def do_import_etud_admission(
|
||||
"codelycee": get_opt_str(etud, "lycee"),
|
||||
"boursier": get_opt_str(etud, "bourse"),
|
||||
}
|
||||
log("do_import_etud_admission: etud=%s" % etud)
|
||||
log("do_import_etud_admission: etud=%s" % pprint.pformat(etud))
|
||||
al = scolars.admission_list(cnx, args={"etudid": etudid})
|
||||
if not al:
|
||||
scolars.admission_create(cnx, args) # -> adm_id
|
||||
|
57
scolars.py
@ -25,7 +25,7 @@
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
""" Acces donnees etudiants
|
||||
""" Accès donnees etudiants
|
||||
"""
|
||||
|
||||
from sco_utils import *
|
||||
@ -35,7 +35,7 @@ from TrivialFormulator import TrivialFormulator
|
||||
import safehtml
|
||||
from scolog import logdb
|
||||
from notes_table import *
|
||||
|
||||
import sco_news
|
||||
|
||||
# XXXXXXXXX HACK: zope 2.7.7 bug turaround ?
|
||||
import locale
|
||||
@ -618,6 +618,59 @@ def make_etud_args(etudid=None, code_nip=None, REQUEST=None, raise_exc=True):
|
||||
return args
|
||||
|
||||
|
||||
def create_etud(context, cnx, args={}, REQUEST=None):
|
||||
"""Creation d'un étudiant. génère aussi évenement et "news".
|
||||
|
||||
Args:
|
||||
args: dict avec les attributs de l'étudiant
|
||||
|
||||
Returns:
|
||||
etud, l'étudiant créé.
|
||||
"""
|
||||
# creation d'un etudiant
|
||||
etudid = etudident_create(cnx, args, context=context, REQUEST=REQUEST)
|
||||
# crée une adresse vide (chaque etudiant doit etre dans la table "adresse" !)
|
||||
_ = adresse_create(
|
||||
cnx,
|
||||
{
|
||||
"etudid": etudid,
|
||||
"typeadresse": "domicile",
|
||||
"description": "(creation individuelle)",
|
||||
},
|
||||
)
|
||||
|
||||
# event
|
||||
scolar_events_create(
|
||||
cnx,
|
||||
args={
|
||||
"etudid": etudid,
|
||||
"event_date": time.strftime("%d/%m/%Y"),
|
||||
"formsemestre_id": None,
|
||||
"event_type": "CREATION",
|
||||
},
|
||||
)
|
||||
# log
|
||||
logdb(
|
||||
REQUEST,
|
||||
cnx,
|
||||
method="etudident_edit_form",
|
||||
etudid=etudid,
|
||||
msg="creation initiale",
|
||||
)
|
||||
etud = scolars.etudident_list(cnx, {"etudid": etudid})[0]
|
||||
context.fillEtudsInfo([etud])
|
||||
etud["url"] = "ficheEtud?etudid=%(etudid)s" % etud
|
||||
sco_news.add(
|
||||
context,
|
||||
REQUEST,
|
||||
typ=sco_news.NEWS_INSCR,
|
||||
object=None, # pas d'object pour ne montrer qu'un etudiant
|
||||
text='Nouvel étudiant <a href="%(url)s">%(nomprenom)s</a>' % etud,
|
||||
url=etud["url"],
|
||||
)
|
||||
return etud
|
||||
|
||||
|
||||
# ---------- "EVENTS"
|
||||
_scolar_eventsEditor = EditableTable(
|
||||
"scolar_events",
|
||||
|
1
scotests/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
#
|
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 9.8 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.4 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.1 KiB |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.7 KiB |
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.0 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.4 KiB |
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 9.8 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.0 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 9.9 KiB |
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 9.6 KiB |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.7 KiB |
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 9.8 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.7 KiB |
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 9.0 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.7 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.7 KiB |
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.0 KiB |
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 9.0 KiB |
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 9.8 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.0 KiB |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.7 KiB |
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |