New testing tools
@ -284,6 +284,7 @@ class ZScoDoc(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Imp
|
|||||||
raise ValueError("nom de departement invalide")
|
raise ValueError("nom de departement invalide")
|
||||||
if not pass2:
|
if not pass2:
|
||||||
# 1- Creation de repertoire Dept
|
# 1- Creation de repertoire Dept
|
||||||
|
log("creating Zope folder " + DeptId)
|
||||||
add_method = self.manage_addProduct["OFSP"].manage_addFolder
|
add_method = self.manage_addProduct["OFSP"].manage_addFolder
|
||||||
add_method(DeptId, title="Site dept. " + DeptId)
|
add_method(DeptId, title="Site dept. " + DeptId)
|
||||||
|
|
||||||
@ -291,10 +292,12 @@ class ZScoDoc(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Imp
|
|||||||
|
|
||||||
if not pass2:
|
if not pass2:
|
||||||
# 2- Creation du repertoire Fotos
|
# 2- Creation du repertoire Fotos
|
||||||
|
log("creating Zope folder %s/Fotos" % DeptId)
|
||||||
add_method = DeptFolder.manage_addProduct["OFSP"].manage_addFolder
|
add_method = DeptFolder.manage_addProduct["OFSP"].manage_addFolder
|
||||||
add_method("Fotos", title="Photos identites " + DeptId)
|
add_method("Fotos", title="Photos identites " + DeptId)
|
||||||
|
|
||||||
# 3- Creation instance ScoDoc
|
# 3- Creation instance ScoDoc
|
||||||
|
log("creating Zope ZScolar instance")
|
||||||
add_method = DeptFolder.manage_addProduct["ScoDoc"].manage_addZScolarForm
|
add_method = DeptFolder.manage_addProduct["ScoDoc"].manage_addZScolarForm
|
||||||
return add_method(DeptId, REQUEST=REQUEST)
|
return add_method(DeptId, REQUEST=REQUEST)
|
||||||
|
|
||||||
|
45
ZScolar.py
@ -2037,49 +2037,8 @@ function tweakmenu( gname ) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
if not edit:
|
if not edit:
|
||||||
# creation d'un etudiant
|
etud = scolars.create_etud(self, cnx, args=tf[2], REQUEST=REQUEST)
|
||||||
etudid = scolars.etudident_create(
|
etudid = etud["etudid"]
|
||||||
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"],
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
# modif d'un etudiant
|
# modif d'un etudiant
|
||||||
scolars.etudident_edit(cnx, tf[2], context=self, REQUEST=REQUEST)
|
scolars.etudident_edit(cnx, tf[2], context=self, REQUEST=REQUEST)
|
||||||
|
@ -13,27 +13,45 @@
|
|||||||
source config.sh
|
source config.sh
|
||||||
source utils.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\"): "
|
if [ "$1" = "-n" ]
|
||||||
read DEPT
|
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]+$ ]]
|
if [[ ! "$DEPT" =~ ^[A-Za-z0-9]+$ ]]
|
||||||
then
|
then
|
||||||
echo 'Nom de departement invalide !'
|
echo 'Nom de departement invalide !'
|
||||||
exit 1
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export DEPT
|
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
|
cfg_pathname="${SCODOC_VAR_DIR}/config/depts/$DEPT".cfg
|
||||||
|
|
||||||
if [ -e $cfg_pathname ]
|
if [ -e "$cfg_pathname" ]
|
||||||
then
|
then
|
||||||
echo 'Erreur: Il existe deja une configuration pour "'$DEPT'"'
|
echo 'Erreur: Il existe deja une configuration pour "'"$DEPT"'"'
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -41,29 +59,32 @@ fi
|
|||||||
init_postgres_user
|
init_postgres_user
|
||||||
|
|
||||||
# ----------------------- Create database
|
# ----------------------- Create database
|
||||||
su -c ./create_database.sh $POSTGRES_SUPERUSER
|
su -c ./create_database.sh "$POSTGRES_SUPERUSER"
|
||||||
|
|
||||||
# ----------------------- Create tables
|
# ----------------------- Create tables
|
||||||
# POSTGRES_USER == regular unix user (www-data)
|
# POSTGRES_USER == regular unix user (www-data)
|
||||||
su -c ./initialize_database.sh $POSTGRES_USER
|
su -c ./initialize_database.sh "$POSTGRES_USER"
|
||||||
|
|
||||||
# ----------------------- Enregistre fichier config
|
# ----------------------- 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] "
|
if [ "$interactive" = 1 ]
|
||||||
read ans
|
|
||||||
if [ "$(norm_ans "$ans")" != 'N' ]
|
|
||||||
then
|
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
|
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
|
source utils.sh
|
||||||
|
|
||||||
check_uid_root $0
|
check_uid_root $0
|
||||||
|
usage() {
|
||||||
echo
|
echo "$0 [-n DEPT]"
|
||||||
echo "Ce script supprime la base de donnees ScoDoc d'un departement"
|
echo "(default to interactive mode)"
|
||||||
echo
|
exit 1
|
||||||
echo "Attention: le departement doit au prealable avoir ete supprime via l'interface web !"
|
}
|
||||||
echo "faites le AVANT d'executer ce script !!!"
|
[ $# = 0 ] || [ $# = 2 ] || usage
|
||||||
echo
|
if [ "$1" = "-n" ]
|
||||||
echo -n "Nom du departement a supprimer (un mot sans ponctuation, exemple \"Info\"): "
|
then
|
||||||
read DEPT
|
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]+$ ]]
|
if [[ ! "$DEPT" =~ ^[A-Za-z0-9]+$ ]]
|
||||||
then
|
then
|
||||||
echo "Nom de departement invalide !"
|
echo "Nom de departement invalide !"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export DEPT
|
export DEPT
|
||||||
|
|
||||||
cfg_pathname="${SCODOC_VAR_DIR}/config/depts/$DEPT".cfg
|
cfg_pathname="${SCODOC_VAR_DIR}/config/depts/$DEPT".cfg
|
||||||
|
|
||||||
if [ -e $cfg_pathname ]
|
if [ -e "$cfg_pathname" ]
|
||||||
then
|
then
|
||||||
# arret de ScoDoc
|
# arret de ScoDoc
|
||||||
scodocctl stop
|
scodocctl stop
|
||||||
|
|
||||||
# suppression de la base postgres
|
# 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"
|
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
|
# 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
|
# relance ScoDoc
|
||||||
|
if [ "$interactive" = 1 ]
|
||||||
|
then
|
||||||
echo -n "Demarrer le serveur ScoDoc ? (y/n) [n]"
|
echo -n "Demarrer le serveur ScoDoc ? (y/n) [n]"
|
||||||
read ans
|
read -r ans
|
||||||
if [ "$(norm_ans "$ans")" = 'Y' ]
|
if [ "$(norm_ans "$ans")" = 'Y' ]
|
||||||
then
|
then
|
||||||
scodocctl start
|
scodocctl start
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
exit 0
|
exit 0
|
||||||
else
|
else
|
||||||
echo 'Erreur: pas de configuration trouvee pour "'$DEPT'"'
|
echo 'Erreur: pas de configuration trouvee pour "'"$DEPT"'"'
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
6
debug.py
@ -31,6 +31,8 @@ nt = context.Notes._getNotesCache().get_NotesTable(context.Notes, formsemestre_i
|
|||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
import pdb
|
||||||
|
|
||||||
from notesdb import *
|
from notesdb import *
|
||||||
from notes_log import log
|
from notes_log import log
|
||||||
from sco_utils import *
|
from sco_utils import *
|
||||||
@ -78,6 +80,9 @@ class FakeUser:
|
|||||||
def has_permission(self, op, context):
|
def has_permission(self, op, context):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def has_role(self, role):
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
class DummyResponse:
|
class DummyResponse:
|
||||||
"""Emulation vide de Reponse http Zope"""
|
"""Emulation vide de Reponse http Zope"""
|
||||||
@ -104,6 +109,7 @@ class DummyRequest:
|
|||||||
self.URL1 = self.URL
|
self.URL1 = self.URL
|
||||||
self.URL0 = self.URL
|
self.URL0 = self.URL
|
||||||
self.BASE0 = "localhost"
|
self.BASE0 = "localhost"
|
||||||
|
self.REMOTE_HOST = "localhost"
|
||||||
self.REMOTE_ADDR = "127.0.0.1"
|
self.REMOTE_ADDR = "127.0.0.1"
|
||||||
self.HTTP_REFERER = ""
|
self.HTTP_REFERER = ""
|
||||||
self.REQUEST_METHOD = "get"
|
self.REQUEST_METHOD = "get"
|
||||||
|
@ -34,7 +34,7 @@ class _logguer:
|
|||||||
if LOG_FILENAME:
|
if LOG_FILENAME:
|
||||||
path = os.path.join(self.directory, LOG_FILENAME)
|
path = os.path.join(self.directory, LOG_FILENAME)
|
||||||
self.file = open(path, "a")
|
self.file = open(path, "a")
|
||||||
self("new _logguer")
|
self("new _logguer (%s)" % path)
|
||||||
else:
|
else:
|
||||||
self.file = None # logging disabled
|
self.file = None # logging disabled
|
||||||
|
|
||||||
|
@ -248,8 +248,7 @@ def DBDelete(cnx, table, colid, val, commit=False):
|
|||||||
|
|
||||||
|
|
||||||
class EditableTable:
|
class EditableTable:
|
||||||
""" --- generic class: SQL table with create/edit/list/delete
|
"""--- generic class: SQL table with create/edit/list/delete"""
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
@ -377,7 +376,11 @@ class EditableTable:
|
|||||||
# format value
|
# format value
|
||||||
for title in vals.keys():
|
for title in vals.keys():
|
||||||
if self.input_formators.has_key(title):
|
if self.input_formators.has_key(title):
|
||||||
|
try:
|
||||||
vals[title] = self.input_formators[title](vals[title])
|
vals[title] = self.input_formators[title](vals[title])
|
||||||
|
except:
|
||||||
|
log("exception while converting %s=%s" % (title, vals[title]))
|
||||||
|
raise
|
||||||
DBUpdateArgs(
|
DBUpdateArgs(
|
||||||
cnx,
|
cnx,
|
||||||
self.table_name,
|
self.table_name,
|
||||||
|
@ -28,6 +28,8 @@
|
|||||||
"""Synchronisation des listes d'étudiants avec liste portail (Apogée)
|
"""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 sco_utils import ScoEtudInscrit, annee_scolaire_debut, log, ScoValueError
|
||||||
from notesdb import ScoDocCursor
|
from notesdb import ScoDocCursor
|
||||||
@ -42,8 +44,6 @@ import sco_formsemestre_inscriptions
|
|||||||
import sco_formsemestre_status
|
import sco_formsemestre_status
|
||||||
from sco_news import NEWS_INSCR, NEWS_NOTE, NEWS_FORM, NEWS_SEM, NEWS_MISC
|
from sco_news import NEWS_INSCR, NEWS_NOTE, NEWS_FORM, NEWS_SEM, NEWS_MISC
|
||||||
|
|
||||||
import time
|
|
||||||
|
|
||||||
# Clés utilisées pour la synchro
|
# Clés utilisées pour la synchro
|
||||||
EKEY_APO = "nip"
|
EKEY_APO = "nip"
|
||||||
EKEY_SCO = "code_nip"
|
EKEY_SCO = "code_nip"
|
||||||
@ -695,7 +695,7 @@ def do_import_etud_admission(
|
|||||||
"codelycee": get_opt_str(etud, "lycee"),
|
"codelycee": get_opt_str(etud, "lycee"),
|
||||||
"boursier": get_opt_str(etud, "bourse"),
|
"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})
|
al = scolars.admission_list(cnx, args={"etudid": etudid})
|
||||||
if not al:
|
if not al:
|
||||||
scolars.admission_create(cnx, args) # -> adm_id
|
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 *
|
from sco_utils import *
|
||||||
@ -35,7 +35,7 @@ from TrivialFormulator import TrivialFormulator
|
|||||||
import safehtml
|
import safehtml
|
||||||
from scolog import logdb
|
from scolog import logdb
|
||||||
from notes_table import *
|
from notes_table import *
|
||||||
|
import sco_news
|
||||||
|
|
||||||
# XXXXXXXXX HACK: zope 2.7.7 bug turaround ?
|
# XXXXXXXXX HACK: zope 2.7.7 bug turaround ?
|
||||||
import locale
|
import locale
|
||||||
@ -618,6 +618,59 @@ def make_etud_args(etudid=None, code_nip=None, REQUEST=None, raise_exc=True):
|
|||||||
return args
|
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"
|
# ---------- "EVENTS"
|
||||||
_scolar_eventsEditor = EditableTable(
|
_scolar_eventsEditor = EditableTable(
|
||||||
"scolar_events",
|
"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 |