diff --git a/current_version/.svn/all-wcprops b/current_version/.svn/all-wcprops deleted file mode 100644 index c56a326..0000000 --- a/current_version/.svn/all-wcprops +++ /dev/null @@ -1,155 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 39 -/svn/!svn/ver/204/trunk/current_version -END -log -K 25 -svn:wc:ra_dav:version-url -V 43 -/svn/!svn/ver/194/trunk/current_version/log -END -account.php -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/174/trunk/current_version/account.php -END -functions.js -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/180/trunk/current_version/functions.js -END -stats.php -K 25 -svn:wc:ra_dav:version-url -V 47 -/svn/!svn/ver/8/trunk/current_version/stats.php -END -settings.php -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/45/trunk/current_version/settings.php -END -qcmCreator.php -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/187/trunk/current_version/qcmCreator.php -END -style.css -K 25 -svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/202/trunk/current_version/style.css -END -changelog -K 25 -svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/191/trunk/current_version/changelog -END -qcmResults.php -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/191/trunk/current_version/qcmResults.php -END -qcmReader.php -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/132/trunk/current_version/qcmReader.php -END -account_admin.php -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/202/trunk/current_version/account_admin.php -END -search.php -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/174/trunk/current_version/search.php -END -frontal.php -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/202/trunk/current_version/frontal.php -END -config.php -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/202/trunk/current_version/config.php -END -install.php -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/187/trunk/current_version/install.php -END -rss.php -K 25 -svn:wc:ra_dav:version-url -V 47 -/svn/!svn/ver/142/trunk/current_version/rss.php -END -statsAdmin.php -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/204/trunk/current_version/statsAdmin.php -END -index.php -K 25 -svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/201/trunk/current_version/index.php -END -logon.php -K 25 -svn:wc:ra_dav:version-url -V 48 -/svn/!svn/ver/62/trunk/current_version/logon.php -END -qcmProcess.php -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/179/trunk/current_version/qcmProcess.php -END -styleIe.css -K 25 -svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/3/trunk/current_version/styleIe.css -END -test.php -K 25 -svn:wc:ra_dav:version-url -V 48 -/svn/!svn/ver/185/trunk/current_version/test.php -END -register.php -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/91/trunk/current_version/register.php -END -backUpCreator.php -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/192/trunk/current_version/backUpCreator.php -END -version.php -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/193/trunk/current_version/version.php -END diff --git a/current_version/.svn/dir-prop-base b/current_version/.svn/dir-prop-base deleted file mode 100644 index 444b365..0000000 --- a/current_version/.svn/dir-prop-base +++ /dev/null @@ -1,6 +0,0 @@ -K 10 -svn:ignore -V 13 -settings.php - -END diff --git a/current_version/.svn/entries b/current_version/.svn/entries deleted file mode 100644 index 8990a89..0000000 --- a/current_version/.svn/entries +++ /dev/null @@ -1,896 +0,0 @@ -10 - -dir -204 -https://qcmmaker.googlecode.com/svn/trunk/current_version -https://qcmmaker.googlecode.com/svn - - - -2011-02-08T19:22:12.337819Z -204 -francois.lutran -has-props - - - - - - - - - - - - - -1abcc3b6-0f78-11df-b47a-af0d17c1a499 - - - - - - - - -((conflict settings.php file update deleted edited (version https://qcmmaker.googlecode.com/svn 2 90 trunk/current_version/settings.php file) (version https://qcmmaker.googlecode.com/svn 3 101 trunk/current_version/settings.php none))) - -log -file - - - - -2010-11-06T16:35:59.299251Z -1cce094ea04fcf8e4adfdee41ab40a86 -2010-11-06T16:35:45.574309Z -194 -francois.lutran -has-props - - - - - - - - - - - - - - - - - - - - -192 - -account.php -file - - - - -2010-06-22T10:03:52.000000Z -46c44649a38f295b238c3ace19cf3da4 -2010-06-21T21:30:43.058512Z -174 -francois.lutran - - - - - - - - - - - - - - - - - - - - - -8472 - -functions.js -file - - - - -2010-06-24T18:14:17.000000Z -d15180502c17f40698bfcd325736b990 -2010-06-24T13:42:55.849562Z -180 -francois.lutran -has-props - - - - - - - - - - - - - - - - - - - - -3240 - -stats.php -file - - - - -2010-02-03T16:31:26.000000Z -55364c81629c96272ffe2b148b2099b2 -2010-02-02T23:56:56.079998Z -8 -Francois.Lutran - - - - - - - - - - - - - - - - - - - - - -2040 - -settings.php -file -90 - - -add -2010-03-01T01:00:10.000000Z -e35626cf50f16ff4312991f13c81740d -2010-02-28T15:00:52.349625Z -45 -Francois.Lutran - - - - - - - - -copied -https://qcmmaker.googlecode.com/svn/trunk/current_version/settings.php -90 - - - - - - - - - - -908 - -qcmCreator.php -file - - - - -2010-09-11T11:41:49.000000Z -cbae18788a57cc861ce631772497efc8 -2010-09-09T13:24:00.096915Z -187 -francois.lutran - - - - - - - - - - - - - - - - - - - - - -9395 - -style.css -file - - - - -2011-02-02T21:26:33.598825Z -052da18b80fd80adbd09e67183a26e03 -2011-02-02T21:25:35.154558Z -202 -francois.lutran -has-props - - - - - - - - - - - - - - - - - - - - -9866 - -changelog -file - - - - -2010-11-06T12:54:38.555055Z -3c86289533c86f53a5bc24b8e63eae17 -2010-11-06T12:54:00.872919Z -191 -francois.lutran - - - - - - - - - - - - - - - - - - - - - -5480 - -qcmResults.php -file - - - - -2010-11-06T12:54:38.555055Z -740f07de2aa4ee86b1ec555da3c56e27 -2010-11-06T12:54:00.872919Z -191 -francois.lutran - - - - - - - - - - - - - - - - - - - - - -2980 - -qcmReader.php -file - - - - -2010-05-17T13:58:33.000000Z -5b783e6fb522798ebb488e412a9312bb -2010-05-16T21:14:21.358495Z -132 -Francois.Lutran - - - - - - - - - - - - - - - - - - - - - -2208 - -downloads -dir - -account_admin.php -file - - - - -2011-02-02T21:26:33.608825Z -502b792e32849d5bc243b7750dc4494b -2011-02-02T21:25:35.154558Z -202 -francois.lutran - - - - - - - - - - - - - - - - - - - - - -10604 - -search.php -file - - - - -2010-06-22T10:03:52.000000Z -5bdfea908f1e9dfa2362d0a03ee58f59 -2010-06-21T21:30:43.058512Z -174 -francois.lutran - - - - - - - - - - - - - - - - - - - - - -2296 - -frontal.php -file - - - - -2011-02-02T21:26:33.608825Z -17207ab88483b6a53d38d4c69ab852ce -2011-02-02T21:25:35.154558Z -202 -francois.lutran - - - - - - - - - - - - - - - - - - - - - -5375 - -config.php -file - - - - -2011-02-02T21:26:33.608825Z -ae293d9b13d279274230720e79140db3 -2011-02-02T21:25:35.154558Z -202 -francois.lutran - - - - - - - - - - - - - - - - - - - - - -65700 - -install.php -file - - - - -2010-09-11T11:41:49.000000Z -b0d1bd4d0d104dcac219bc0c47ee12f0 -2010-09-09T13:24:00.096915Z -187 -francois.lutran - - - - - - - - - - - - - - - - - - - - - -5734 - -classes -dir - -statsAdmin.php -file - - - - -2011-02-08T19:23:20.139189Z -4398d511f7ad18b0de287ba25513c6a3 -2011-02-08T19:22:12.337819Z -204 -francois.lutran - - - - - - - - - - - - - - - - - - - - - -6168 - -index.php -file - - - - -2011-01-31T18:20:20.014061Z -2de83ba3f929c392a8e6878097335e2a -2011-01-31T18:18:47.374394Z -201 -francois.lutran - - - - - - - - - - - - - - - - - - - - - -6081 - -rss.php -file - - - - -2010-05-27T12:39:51.000000Z -6c7893982fe245db921986dd61c6434e -2010-05-26T15:19:46.928829Z -142 -francois.lutran - - - - - - - - - - - - - - - - - - - - - -8081 - -logon.php -file - - - - -2010-03-11T01:00:06.000000Z -bf839fe48d1d98afceb8fd45baea1714 -2010-03-10T21:53:51.228739Z -62 -Francois.Lutran - - - - - - - - - - - - - - - - - - - - - -829 - -images -dir - -qcmProcess.php -file - - - - -2010-06-24T18:14:18.000000Z -1dbafc64eaf454e018d86d0c7dd962ab -2010-06-23T16:43:59.392251Z -179 -francois.lutran - - - - - - - - - - - - - - - - - - - - - -4320 - -styleIe.css -file - - - - -2010-02-02T19:33:46.000000Z -6898c57837d40aa829bb009679faeac7 -2010-02-01T21:43:55.771214Z -3 -Francois.Lutran -has-props - - - - - - - - - - - - - - - - - - - - -32 - -test.php -file - - - - -2010-06-27T00:00:06.000000Z -87796986167401f14d80116616047a3e -2010-06-26T17:43:33.519351Z -185 -francois.lutran - - - - - - - - - - - - - - - - - - - - - -2673 - -register.php -file - - - - -2010-04-18T19:27:04.000000Z -21c92d501dddfdb72e5078292869b3c3 -2010-04-05T16:08:12.568839Z -91 -Francois.Lutran - - - - - - - - - - - - - - - - - - - - - -1132 - -backUpCreator.php -file - - - - -2010-11-06T14:46:11.949801Z -751c477b22c6087ca24c02f7d40c3bd3 -2010-11-06T14:45:26.623737Z -192 -francois.lutran - - - - - - - - - - - - - - - - - - - - - -8214 - -version.php -file - - - - -2010-11-06T16:29:26.119054Z -0438a184159709dec296f99509a8d14d -2010-11-06T16:29:05.080573Z -193 -francois.lutran - - - - - - - - - - - - - - - - - - - - - -6380 - diff --git a/current_version/.svn/prop-base/functions.js.svn-base b/current_version/.svn/prop-base/functions.js.svn-base deleted file mode 100644 index 138f983..0000000 --- a/current_version/.svn/prop-base/functions.js.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 10 -text/plain -END diff --git a/current_version/.svn/prop-base/log.svn-base b/current_version/.svn/prop-base/log.svn-base deleted file mode 100644 index 869ac71..0000000 --- a/current_version/.svn/prop-base/log.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 14 -svn:executable -V 1 -* -END diff --git a/current_version/.svn/prop-base/style.css.svn-base b/current_version/.svn/prop-base/style.css.svn-base deleted file mode 100644 index 138f983..0000000 --- a/current_version/.svn/prop-base/style.css.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 10 -text/plain -END diff --git a/current_version/.svn/prop-base/styleIe.css.svn-base b/current_version/.svn/prop-base/styleIe.css.svn-base deleted file mode 100644 index 138f983..0000000 --- a/current_version/.svn/prop-base/styleIe.css.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 10 -text/plain -END diff --git a/current_version/.svn/text-base/account.php.svn-base b/current_version/.svn/text-base/account.php.svn-base deleted file mode 100644 index 69ee7d3..0000000 --- a/current_version/.svn/text-base/account.php.svn-base +++ /dev/null @@ -1,230 +0,0 @@ -encryptPassword($_POST['pass']))); - echo getSuccess('Mot de passe modifié'); - } - } - elseif($_GET['type']=='info' && $_POST['login']!='' && $_POST['firstname']!='') - { - $sLastName = strtolower($_POST['login']); - $sFirstName = strtolower($_POST['firstname']); - //Check if someone has already been registered by that name - $asChangedUserInfo = getUserFromLogin($sLastName, $sFirstName); - $bUserAvailable = !$asChangedUserInfo || $iSelectedUserId==$asChangedUserInfo['id_user']; - if($bUserAvailable) - { - $asUserModif = array( 'user_first_name'=>$sFirstName, - 'user_last_name'=>$sLastName, - 'grade'=>$_POST['grade'], - 'class'=>$_POST['class']); - if($bAdmin) - { - $asUserModif['admin'] = isset($_POST['admin'])?'1':'0'; - } - - $asUserInfo = selectRow(USER_TABLE, array($iSelectedUserId)); - updateRow(USER_TABLE, $iSelectedUserId, $asUserModif); - - //feed - $sModifiedUserName = $asUserInfo[USER_TABLE.'_first_name'].' '.$asUserInfo[USER_TABLE.'_last_name']; - if($sModifiedUserName != $sFirstName.' '.$sLastName) - { - addFeed('MODIFY', $sModifiedUserName, USER_TABLE.'_name', $sModifiedUserName, $sFirstName.' '.$sLastName); - } - if($asUserInfo['grade']!=$_POST['grade'] || $asUserInfo['class']!=$_POST['class']) - { - addFeed('MODIFY', $sModifiedUserName, USER_TABLE.'_class', $asUserInfo['grade'].GRADE_CLASS_SEPARATOR.$asUserInfo['class'], $_POST['grade'].GRADE_CLASS_SEPARATOR.$_POST['class']); - } - - echo getSuccess('Coordonnées modifiées'); - - if($iSelectedUserId==$_SESSION['user']) - { - setSession($_SESSION['user']); - if($sLastName!=$asSelectedUserInfo['user_last_name'] || $sFirstName!=$asSelectedUserInfo['user_first_name']) - { - echo getWarning(array('Changement de login pour l\'authentification', 'Votre nouveau login est :', 'Nom : '.$sLastName, 'Prénom : '.$sFirstName)); - } - } - - } - else - { - echo getError('Ce nom existe déjà dans la base de données'); - } - } - else - { - echo getError('Champs incomplets'); - $bfailedPassModif = ($_GET['type']=="pass"); - } -} - -//student class selection / teacher -$sTeacherClass = 'Professeur'; -$sStudentClass = getClasses(array('grade' => isset($_POST['grade'])?$_POST['grade']:$asSelectedUserInfo['grade'], 'class' => isset($_POST['class'])?$_POST['class']:$asSelectedUserInfo['class'])); - -//Admin menu : student selection -$sPromoteAdmin = ''; -$bIsSelectedUserAdmin = isAdmin($iSelectedUserId); -if($bAdmin) -{ - $sPromoteAdmin = ' - Admin - - '; - ?> - -
- - - - - - - - -
Elève - -
- ?'))document.deleteUser.submit();" /> -
-
- -
-
- - - - - - - - - - - - - - - - - -
Changer de mot de passe
Ancien mot de passe
Nouveau mot de passe
Nouveau mot de passe (une nouvelle fois)
- - - -
-
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - -
Modification de compte
Prénom
Nom de famille
Classe - -
Mot de passe
- - -    -
-
-
- -
-
- -
- \ No newline at end of file diff --git a/current_version/.svn/text-base/account_admin.php.svn-base b/current_version/.svn/text-base/account_admin.php.svn-base deleted file mode 100644 index ff52111..0000000 --- a/current_version/.svn/text-base/account_admin.php.svn-base +++ /dev/null @@ -1,280 +0,0 @@ -$sValue) - { - list($DelUserTag, $iUserId) = explode('_', $sKey); - //pre($DelUserTag.' '.$iUserId, '',true); - if($DelUserTag==DEL_USER_TAG && is_numeric($iUserId)) - { - $sDeletedUserName = ucwords(getTextFromId(USER_TABLE, $iUserId)); - if(isAdmin($iUserId)) - { - addMessage(getError('Il est impossible de supprimer un compte administrateur ('.$sDeletedUserName.')')); - } - else - { - deleteRow(USER_TABLE, $iUserId); - $asDeletedUserNames[] = $sDeletedUserName; - addFeed('DELETE', $iUserId , USER_TABLE, $sDeletedUserName, ''); - } - } - } - if(count($asDeletedUserNames)>0) - { - addMessage(getSuccess('Les comptes suivants ont été supprimés : '.implode(', ', $asDeletedUserNames))); - } -} - - -//modify user account -$iSelectedUserId = isset($_REQUEST['studentId'])?$_REQUEST['studentId']:$_SESSION['user']; -$asSelectedUserInfo = selectRow(USER_TABLE, array($iSelectedUserId)); - -//modifications submit -$bfailedPassModif = false; -if(isset($_POST['submit'])) -{ - if($_GET['type']=='pass' && $_POST['pass']!='' && $_POST['oldpass']!='') - { - $sErrorMessage = checkPassword($_POST['oldpass'],$asSelectedUserInfo['pass'])?"":'Mot de passe incorrect'; - $sErrorMessage .= ($_POST['pass']==$_POST['pass2'])?"":'Les mots de passe ne sont pas les mêmes'; - $bfailedPassModif = ($sErrorMessage!=''); - if($bfailedPassModif) - { - echo getError($sErrorMessage); - } - else - { - updateRow(USER_TABLE, $iSelectedUserId, array('pass'=>encryptPassword($_POST['pass']))); - echo getSuccess('Mot de passe modifié'); - } - } - elseif($_GET['type']=='info' && $_POST['login']!='' && $_POST['firstname']!='') - { - $sLastName = strtolower($_POST['login']); - $sFirstName = strtolower($_POST['firstname']); - - //Check if someone has already been registered by that name - $asChangedUserInfo = getUserFromLogin($sLastName, $sFirstName); - $bUserAvailable = !$asChangedUserInfo || $iSelectedUserId==$asChangedUserInfo['id_user']; - if($bUserAvailable) - { - $asUserModif = array( 'user_first_name'=>$sFirstName, - 'user_last_name'=>$sLastName, - 'grade'=>$_POST['grade'], - 'class'=>$_POST['class']); - if($bAdmin) - { - $asUserModif['admin'] = isset($_POST['admin'])?'1':'0'; - } - - $asUserInfo = selectRow(USER_TABLE, array($iSelectedUserId)); - updateRow(USER_TABLE, $iSelectedUserId, $asUserModif); - - //feed - $sModifiedUserName = $asUserInfo[USER_TABLE.'_first_name'].' '.$asUserInfo[USER_TABLE.'_last_name']; - if($sModifiedUserName != $sFirstName.' '.$sLastName) - { - addFeed('MODIFY', $sModifiedUserName, USER_TABLE.'_name', $sModifiedUserName, $sFirstName.' '.$sLastName); - } - if($asUserInfo['grade']!=$_POST['grade'] || $asUserInfo['class']!=$_POST['class']) - { - addFeed('MODIFY', $sModifiedUserName, USER_TABLE.'_class', $asUserInfo['grade'].GRADE_CLASS_SEPARATOR.$asUserInfo['class'], $_POST['grade'].GRADE_CLASS_SEPARATOR.$_POST['class']); - } - - echo getSuccess('Coordonnées modifiées'); - - if($iSelectedUserId==$_SESSION['user']) - { - setSession($_SESSION['user']); - if($sLastName!=$asSelectedUserInfo['user_last_name'] || $sFirstName!=$asSelectedUserInfo['user_first_name']) - { - echo getWarning(array('Changement de login pour l\'authentification', 'Votre nouveau login est :', 'Nom : '.$sLastName, 'Prénom : '.$sFirstName)); - } - } - - } - else - { - echo getError('Ce nom existe déjà dans la base de données'); - } - } - else - { - echo getError('Champs incomplets'); - $bfailedPassModif = ($_GET['type']=="pass"); - } -} - -//student class selection / teacher -$sTeacherClass = 'Professeur'; -$sStudentClass = getClasses(array('grade' => isset($_POST['grade'])?$_POST['grade']:$asSelectedUserInfo['grade'], 'class' => isset($_POST['class'])?$_POST['class']:$asSelectedUserInfo['class'])); - -//forms display : info and password modifications -if(isset($_GET['type']) && $_GET['type']=="modif" && !isset($_POST['submit'])) -{ - $sPromoteAdmin = ''; - $bIsSelectedUserAdmin = isAdmin($iSelectedUserId); - $asSelectedUserInfo = selectRow(USER_TABLE, array($iSelectedUserId)); - $sPromoteAdmin = ' - Admin - - '; -?> - -
-
- - - - - - - - - - - - - - - - - - - - - - -
Modification de compte
Prénom
Nom de famille
Classe - -
Mot de passe
- - -    -
-
-
- -
-
- -
- -
-
- - - - - - - - - - - - - - - - - -
Changer de mot de passe
Ancien mot de passe
Nouveau mot de passe
Nouveau mot de passe (une nouvelle fois)
- - - -
-
-
-'0'); - $asConstraintsSigns = array('admin'=>'='); - $sGradeClass = 'Toutes les classes'; - if(isset($_POST['gradeClass'])) - { - $sGradeClass = $_POST['gradeClass']; - list($iGrade, $iClass) = explode(GRADE_CLASS_SEPARATOR, $sGradeClass); - if($iGrade!=0 && $iClass!=0) - { - $asConstraints['grade'] = $iGrade; - $asConstraints['class'] = $iClass; - } - } - - $asUsers = selectRows(array( - 'from'=>USER_TABLE, - 'constraint'=>$asConstraints, - 'orderBy'=>array('class'=>'asc', 'user_last_name'=>'asc'))); - $asStudents = array(); - foreach($asUsers as $asUser) - { - if($asUser['class']==0 || $asUser['grade']==0){continue;} - $asStudents[] = ' - '.ucwords($asUser['user_last_name']).' '.ucwords($asUser['user_first_name']).' - '.$asUser['grade'].GRADE_CLASS_SEPARATOR.$asUser['class'].' - Modifier - - '; - } - - $iStudentCount = count($asStudents); - $sStudents = ($iStudentCount>0)?implode("\n", $asStudents):'Aucun utilisateur dans cette classe'; - - - //Classes selection - $asClasses = getListe(array('select'=>array( "CONCAT(grade, '".GRADE_CLASS_SEPARATOR."', class) AS gradeClass", 'grade', 'class'), - 'from'=>USER_TABLE, - 'constraint'=>"admin=0 AND class<>0 AND grade<>0", - 'groupBy' => 'gradeClass', - 'orderBy'=>array('grade', 'class'))); - $sSelectClasses = getSelect($asClasses, 'gradeClass', '', array('0'.GRADE_CLASS_SEPARATOR.'0'=>'Toutes'), isset($_POST['gradeClass'])?$_POST['gradeClass']:'', 'classSelect'); -?> -
-

Classe :

-
-
- - - - - - - - - -
ElèveClasseModifierSupprimer
élève(s) ()
-
-
- \ No newline at end of file diff --git a/current_version/.svn/text-base/backUpCreator.php.svn-base b/current_version/.svn/text-base/backUpCreator.php.svn-base deleted file mode 100644 index 040fc8f..0000000 --- a/current_version/.svn/text-base/backUpCreator.php.svn-base +++ /dev/null @@ -1,178 +0,0 @@ -'validateBackUp(\'#backUpId#\')', 'Non'=>'')); -$oResetInputBox = new InputBox('Reset complet', 'Etes vous sûr de vouloir procéder à une réintallation complète ? (vous allez perdre toutes vos données)', array('Oui'=>'document.forms[\'reset\'].submit()', 'Non'=>'')); - -$sTitle = 'Suppression de la base de données courante'; -$sWarningMessage = 'Etes-vous sur de vouloir remplacer la base de données par celle-ci ? Il est fortement conseillé de créer une sauvegarde avant une telle opération.'; -$oUploadInputBox = new InputBox($sTitle, $sWarningMessage, array('Oui'=>'', 'Non'=>'document.forms[\'upload\'].restoreDb.checked = false;')); -$oSyncInputBox = new InputBox($sTitle, $sWarningMessage, array('Oui'=>'', 'Non'=>'document.forms[\'sync\'].restoreDb.checked = false;')); - -//display available backups -$asFileList = glob(BACKUP_FOLDER.'*.'.DB_EXT_FILE); -$iFileNb = count($asFileList); -$iFilePerPage = 10; - -//page switcher load -$oPageSwitcher = new PageSwitch('pageNb', $iFileNb, $iFilePerPage); - -foreach($asFileList as $sFileName) -{ - //set input box variables - $sBackUpId = encodeUrl(basename($sFileName)); - $sTimeStamp = getTimeStampFromFile($sFileName); - $sBackUpName = date(LAYOUT_DATE_FORMAT, $sTimeStamp); - $oRestoreInputBox->setTags(array('backUpId'=>$sBackUpId, 'backUpDate'=>$sBackUpName)); - - $sLinkBackUp[$sTimeStamp] = ' - Le '.$sBackUpName.' - - - '; -} -if(isset($sLinkBackUp)) -{ - krsort($sLinkBackUp); - $iFirstItem = $oPageSwitcher->getItemStartPointer(); - $aiFileRange = $oPageSwitcher->getItemRange(); - $sLinkBackUp = array_slice($sLinkBackUp, $iFirstItem, $iFilePerPage, true); - $sPageSwitchInfo = $aiFileRange['start'].' - '.$aiFileRange['end'].' sur '; -} -else -{ - $sLinkBackUp = array('

Aucune sauvegarde disponible

'); - $sPageSwitchInfo = ''; -} - -//KeyRing -$sKeyRing = getKeyRing(); -?> -
- Sauvegardes disponibles -
-
- - - - - - - - - - -
DateTéléchargementRestoration
getPrevLink().' '.$sPageSwitchInfo.$iFileNb; ?> sauvegardes getNextLink(); ?>
- -
-
-
- Créer une sauvegarde -
-

Sauvegarde de la base de données incluant les tables .

-

Inclure les requête de suppression de la base avant réécriture :

- -
-
-
- Ajouter une de vos sauvegardes -
-

Insérer ici le fichier de sauvegarde (.sql) :

-

remplacer la base de données actuelle par celle-ci : - -

- -
-
-
- Synchroniser la base avec un point d'accès -
-

- Insérer ici l'url de sauvegarde : - -

-

remplacer la base de données actuelle celle du point d'accès :

-

- Utiliser le KeyRing de cette session pour l'authentification : - -

- - -
-
-
- KeyRing -
-

- - -

-
-
-
- Ré-initialisation complète -
-

Tout supprimer et réinitialiser l'application (aka la méthode du bourinos) :

-
-
-getHtml(); -echo $oResetInputBox->getHtml(); -echo $oUploadInputBox->getHtml(); -echo $oSyncInputBox->getHtml(); -?> \ No newline at end of file diff --git a/current_version/.svn/text-base/changelog.svn-base b/current_version/.svn/text-base/changelog.svn-base deleted file mode 100644 index c84d8dc..0000000 --- a/current_version/.svn/text-base/changelog.svn-base +++ /dev/null @@ -1,68 +0,0 @@ -0000-00-00 00:00:00 0.1 new feature Création de QCM -0000-00-00 00:00:00 1.0 new feature affichage des notes en direct -0000-00-00 00:00:00 1.0 new feature compte utilisateur -0000-00-00 00:00:00 1.0 new feature lecture de QCM -0000-00-00 00:00:00 1.1 new feature visionnage des notes obtenues -0000-00-00 00:00:00 1.1 new feature modification de compte -0000-00-00 00:00:00 1.1 new feature menus -0000-00-00 00:00:00 1.2 new feature calcul de moyenne par classe -0000-00-00 00:00:00 1.2 new feature modification des comptes par l admin -0000-00-00 00:00:00 1.2 new feature visionnage des notes par classe -0000-00-00 00:00:00 1.2 new feature onglet admin -0000-00-00 00:00:00 1.2 bug fix temps limite pour la création des QCM supprimée -0000-00-00 00:00:00 1.2 bug fix caractères spéciaux lors de créations de qcm -0000-00-00 00:00:00 1.3 design Beta tag -0000-00-00 00:00:00 1.3 design positionnement des paragraphes sur la page de versions -0000-00-00 00:00:00 1.3 design couleurs des boutons -0000-00-00 00:00:00 1.3 design Ajout bouton Déconnexion -0000-00-00 00:00:00 1.3 design Bords arrondis -0000-00-00 00:00:00 1.3 new feature Téléchargement -0000-00-00 00:00:00 1.3 new feature Les réponses de l'élève apparaissent sur les résultats des QCM -0000-00-00 00:00:00 1.3 new feature Suppression de compte -0000-00-00 00:00:00 1.3 bug fix auto logout à la fin de l'édition de QCM -0000-00-00 00:00:00 1.3 bug fix couleurs des moyennes -0000-00-00 00:00:00 1.5 design Logo qcm -0000-00-00 00:00:00 1.5 design Notification du compte connecté -0000-00-00 00:00:00 1.5 new feature Export de la base de données -0000-00-00 00:00:00 1.5 new feature remontée vers le haut du document -0000-00-00 00:00:00 1.5 new feature Bouton export en csv (Excel) -0000-00-00 00:00:00 1.5 new feature Option de finalisation des qcm -0000-00-00 00:00:00 1.5 new feature Téléchargements silencieux -0000-00-00 00:00:00 1.5 bug fix encodage du mot de passe -0000-00-00 00:00:00 1.5 bug fix doublon de login à la création et à la modification de login -0000-00-00 00:00:00 1.5 bug fix onglet paramètre : possibilité de changements sans vérification du mot de passe -0000-00-00 00:00:00 1.5 bug fix restructuration de l installation -0000-00-00 00:00:00 1.5 bug fix saut de lignes dans le libellé des questions -0000-00-00 00:00:00 2.0 new feature Téléchargement en csv avec coma separator embedded -0000-00-00 00:00:00 2.0 new feature Upload et restoration de backup -0000-00-00 00:00:00 2.0 new feature retour à la page en cours après déconnexion -0000-00-00 00:00:00 2.0 bug fix suppression complète des qcm : QCM + notes -0000-00-00 00:00:00 2.0 bug fix Restructuration complete des questions et des resultats (SQL) -0000-00-00 00:00:00 2.1 new feature Mélange des questions des QCM en lecture (mode anti-triche) -0000-00-00 00:00:00 2.1 design remplacement des fenetres javascript par des layers en html -0000-00-00 00:00:00 2.1 new feature Ajout d'une table pour le changelog -0000-00-00 00:00:00 2.1 bug fix modifier l'appel des fichiers de back up pour respecter l'ordre des dates -2010-02-28 15:52:23 2.1 bug fix ajouter les dates de modifications dans lhistorique des versions -2010-02-28 20:55:08 2.1 bug fix log in par nom de famille et prénom (siblings) -2010-03-04 13:54:26 2.1 new feature Création dynamique de base de données -2010-03-04 13:36:51 2.1 bug fix Couper la liste des backups à 10 (et afficher un bouton) -2010-03-04 13:55:04 2.1 new feature Point d'accès pour back up : export et import de base de données vers ou depuis un url -2010-03-10 09:27:12 2.1 bug fix Renforcement des sécurités d'accès (qcmResults & qcmProcess) -2010-03-09 09:48:01 2.1 bug fix qcmProcess.php : redirection en fin de traitement -2010-03-08 21:43:54 2.1 bug fix Fix : ajout de réponses sans question liée (NULL) -2010-05-17 16:07:06 2.2 new feature Log des changements utilisateur + flux rss -2010-04-21 16:23:32 2.2 bug fix Interface dynamique admin <-> eleve (grade + class) dans la gestion des comptes -2010-04-21 16:21:38 2.2 new feature Report Admin sur les erreurs SQL et relocate() -2010-05-17 16:08:15 2.2 bug fix Download en fonction (tout passe par index.php !) -2010-03-29 00:52:20 2.2 bug fix Check usage of insertUpdateRow() and optimize function -2010-06-08 20:12:53 2.2 bug fix Bug des apostrophes dans le cas d'un server configuré avec des magic quotes -2010-04-21 10:21:42 2.2 bug fix ajouter changelog au moment de l'installation initiale -2010-04-01 18:27:06 2.2 new feature moteur de recherche -2010-04-05 19:17:55 2.2 new feature Kit d'installation facile -2010-04-21 10:21:15 2.2 new feature téléchargement en zip ou gz en fonction du HTTP_USER_AGENT -2010-03-12 14:17:47 2.2 bug fix secure access point (v2 : shuffle firstname / name / pass) -2010-03-17 22:42:46 2.2 bug fix Secure le logon : isset($_SESSION['user']) avec une deuxieme validation sur HTTP_USER_AGENT + IP -2010-05-17 16:08:40 2.2 new feature image dans les questions -2010-06-25 13:40:14 2.2 bug fix Gerer le mode message -2010-06-21 19:21:42 2.2 bug fix modification du fonctionnement des dates des fichiers de back up -2010-06-25 15:59:12 2.2 new feature remote control \ No newline at end of file diff --git a/current_version/.svn/text-base/config.php.svn-base b/current_version/.svn/text-base/config.php.svn-base deleted file mode 100644 index 14d82dc..0000000 --- a/current_version/.svn/text-base/config.php.svn-base +++ /dev/null @@ -1,2171 +0,0 @@ -0); - -//remote actions constants -@define('ACCESS_POINT_DB', 'access_point'); -@define('ACCESS_POINT_LAST_VERSION', ACCESS_POINT_DB.'_last_version'); -@define('ACCESS_POINT_NEW_VERSION', ACCESS_POINT_DB.'_new_version'); -@define('CREATE_NEW_BACKUP', 'create_backup'); - -//Cookie names constants -@define('EXPECTED_PAGE', 'backOnTrack'); - -//database constants -@define('QCM_TABLE', 'qcm'); -@define('USER_TABLE', 'user'); -@define('RESULT_TABLE', 'result'); -@define('QUESTION_TABLE', 'question'); -@define('ANSWER_TABLE', 'answer'); -@define('CHANGELOG_TABLE', 'changelog'); -@define('FEED_TABLE', 'feed'); -@define('NEWS_TABLE', 'news'); -@define('RIGHT_ANSWER', 'right_'.ANSWER_TABLE); -@define('DEFAULT_QCM_NAME', 'pas de nom'); -@define('END_OF_QUERY', '/* -END OF QUERY- */'); - -//display constants -@define('DEFAULT_LOGGED_PAGE', 'frontal'); -@define('DEFAULT_QUESTION_INPUT', 'Tapez ici la question...'); -@define('DEFAULT_ANSWER_INPUT', 'Tapez ici une reponse...'); -@define('ADD_IMAGE_TEXT', 'Ajouter une image à la question'); -@define('GRADE_CLASS_SEPARATOR', 'eme'); -@define('DECIMAL_LIMIT', 2); -@define('OS_WINDOWS', 'win'); -@define('OS_MAC', 'mac'); -@define('OS_LINUX', 'linux'); - -/* Required Classes */ - -//require_once CLASSES_PATH.'qcm.php'; -require_once CLASSES_PATH.'page_switch.php'; -require_once CLASSES_PATH.'input_box.php'; - -/* Server & Admin Settings */ - -if(file_exists(SETTINGS_FILE)) -{ - require_once SETTINGS_FILE; -} - -/* Integrity Functions */ - -function getFiles($sFileName=false) -{ - $asFiles =array('account.php' => true, - 'account_admin.php' => true, - 'backUpCreator.php' => true, - 'frontal.php' => true, - 'functions.js' => true, - 'index.php' => true, - 'install.php' => true, - 'logon.php' => true, - 'qcmCreator.php' => true, - 'qcmProcess.php' => true, - 'qcmReader.php' => true, - 'qcmResults.php' => true, - 'register.php' => true, - 'rss.php' => true, - 'search.php' => true, - 'stats.php' => true, - 'statsAdmin.php' => true, - 'style.css' => true, - 'styleIe.css' => false, - 'version.php' => false, - 'test.php' => false); - return (!$sFileName)?$asFiles:$asFiles[$sFileName]; -} -function getPageDescription($sPageName=false) -{ - $asFiles =array('account' => 'Paramètres utilisateur', - 'account_admin' => 'Comptes élèves', - 'backUpCreator' => 'Gestion des sauvegardes', - DEFAULT_LOGGED_PAGE => 'Accueil', - 'index' => 'Index', - 'install' => 'Paramètres d\'installation', - 'logon' => 'Connexion', - 'qcmCreator' => 'Formulaire de création de QCM', - 'qcmProcess' => 'Enregistrement du QCM dans la base de données', - 'qcmReader' => 'Evaluation d\'un QCM', - 'qcmResults' => 'Résultat du QCM', - 'register' => 'Créer un nouveau compte', - 'rss' => 'flux rss', - 'search' => 'Recherche', - 'stats' => 'Statistiques', - 'statsAdmin' => 'Statistiques [vue admin]', - 'version' => 'Logs et téléchargement', - 'test' => 'Tests Requête SQL', - 'logout' => 'Déconnexion', - 'download' => 'Téléchargement de fichier', - 'remote' => 'Action à distance'); - return (!$sPageName)?$asFiles:$asFiles[$sPageName]; -} -function checkIntegrity() -{ - foreach(getFiles() as $sFileName=>$bMandatory) - { - if($bMandatory && !file_exists($sFileName)) - { - $asMissingFiles[] = 'Le fichier '.$sFileName.' est manquant'; - } - } - return isset($asMissingFiles)?$asMissingFiles:true; -} - -/* Database Functions */ - -//Database construction functions -function connection() -{ - $asMissingFiles = checkIntegrity(); - if(is_array($asMissingFiles)) - { - $sPlural = count($asMissingFiles)>1?'s':''; - array_unshift($asMissingFiles, 'Fichier'.$sPlural.' manquant'.$sPlural, ''); - addMessage(getError($asMissingFiles)); - return false; - } - elseif(!defined('READY_TO_USE')) //settings.php ready to use - { - $_GET['page'] = 'install'; - return false; - } - $oConnection = mysql_connect(DB_SERVER, DB_LOGIN, DB_PASS); - if(!$oConnection) - { - addMessage(getError(array('La connexion à la base de donnée a échouée', 'Vérifiez les paramètres dans '.SETTINGS_FILE, 'Détails : '.mysql_error()), true)); - } - elseif(!mysql_select_db(DB_NAME, $oConnection)) - { - addMessage(getError(array('Impossible de sélectionner la base de données "'.DB_NAME.'"', 'Changez les constantes dans le fichier "'.SETTINGS_FILE.'" ou réinstaller la base de données'), true)); - $_GET['page'] = 'install'; - } - return $oConnection; -} - -function getTables() -{ - return array(QCM_TABLE, USER_TABLE, RESULT_TABLE, QUESTION_TABLE, ANSWER_TABLE, CHANGELOG_TABLE, FEED_TABLE, NEWS_TABLE); -} -function getQcmTables() -{ - return array(QCM_TABLE, QUESTION_TABLE, ANSWER_TABLE, RESULT_TABLE); -} -function getChangeLogEnum() -{ - return array('bug fix', 'new feature', 'design'); -} -function getTableColumns($sTable, $sColumnName=false) -{ - $asTableColumns = array('id_'.$sTable => "int(10) UNSIGNED NOT NULL auto_increment"); - switch($sTable) - { - case QCM_TABLE : - $asTableColumns['id_'.USER_TABLE] = "int(10) UNSIGNED NOT NULL DEFAULT '0'"; - $asTableColumns[QCM_TABLE] = "varchar(255) NOT NULL DEFAULT '".DEFAULT_QCM_NAME."'"; - $asTableColumns['valid'] = "tinyint(1) DEFAULT '0'"; - break; - case USER_TABLE : - $asTableColumns[USER_TABLE.'_first_name'] = "varchar(20) NOT NULL"; - $asTableColumns[USER_TABLE.'_last_name'] = "varchar(20) NOT NULL"; - $asTableColumns['grade'] = "varchar(3)"; - $asTableColumns['class'] = "varchar(3)"; - $asTableColumns['pass'] = "varchar(100) NOT NULL"; - $asTableColumns['admin'] = "tinyint(1) DEFAULT '0'"; - break; - case RESULT_TABLE : - $asTableColumns['id_'.USER_TABLE] = "int(10) UNSIGNED NOT NULL"; - $asTableColumns['id_'.QCM_TABLE] = "int(10) UNSIGNED NOT NULL"; - $asTableColumns[RESULT_TABLE] = "float(5)"; - break; - case QUESTION_TABLE : - $asTableColumns['id_'.QCM_TABLE] = "int(10) UNSIGNED NOT NULL"; - $asTableColumns[QUESTION_TABLE] = "longtext NOT NULL"; - $asTableColumns['image'] = "varchar(100)"; - break; - case ANSWER_TABLE : - $asTableColumns['id_'.QUESTION_TABLE] = "int(10) UNSIGNED NOT NULL"; - $asTableColumns['id_'.QCM_TABLE] = "int(10) UNSIGNED NOT NULL"; - $asTableColumns[ANSWER_TABLE] = "longtext"; - $asTableColumns[RIGHT_ANSWER] = "tinyint(1) DEFAULT '0'"; - break; - case CHANGELOG_TABLE : - $asTableColumns[CHANGELOG_TABLE] = "longtext NOT NULL"; - $asTableColumns['version'] = "decimal(4, 1)"; - $asTableColumns['type'] = "enum(".encapsulate(getChangeLogEnum(), "'", "'", ", ").")"; - $asTableColumns['progress'] = "tinyint(1) default 0"; - break; - case FEED_TABLE : - $asTableColumns['author'] = "varchar(100) NOT NULL"; - $asTableColumns['action'] = "varchar(15) NOT NULL"; - $asTableColumns['source'] = "varchar(255) NOT NULL"; - $asTableColumns['type'] = "varchar(100) NOT NULL"; - $asTableColumns['old_value'] = "varchar(255)"; - $asTableColumns['new_value'] = "varchar(255)"; - $asTableColumns['id_ref'] = "int(10) UNSIGNED DEFAULT 0"; - break; - case NEWS_TABLE: - $asTableColumns['id_'.CHANGELOG_TABLE] = "int(10) UNSIGNED NOT NULL"; - $asTableColumns['id_'.USER_TABLE] = "int(10) UNSIGNED NOT NULL"; - break; - default : - return false; - } - $asTableColumns['led'] = "TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP"; - return (!$sColumnName)?$asTableColumns:$asTableColumns[$sColumnName]; -} -function getTableConstraints($sTable) -{ - //primary key - $asTableConstraints = array('PRIMARY' => "PRIMARY KEY (`id_$sTable`)"); - - //other constraints - //TODO foreign key - switch($sTable) - { - case QCM_TABLE : - break; - case USER_TABLE : - $asTableConstraints['UNIQUE'] = "UNIQUE KEY `user_first_and_last_name` (`".USER_TABLE."_first_name`, `".USER_TABLE."_last_name`)"; - break; - case RESULT_TABLE : - break; - case QUESTION_TABLE : - break; - case ANSWER_TABLE : - break; - case CHANGELOG_TABLE : - break; - case FEED_TABLE : - break; - } - return $asTableConstraints; -} -function getQuote($sTable, $sColumnName) -{ - $sDesc = getTableColumns($sTable,$sColumnName); - $sType = substr($sDesc, 0, min(strpos($sDesc.'(', '('), strpos($sDesc.' ', ' '))); - $asNumericTypes = array('int', 'tinyint', 'decimal', 'float'); - return in_array($sType, $asNumericTypes)?"":"'"; -} -function getInstallQuery($sTable) -{ - $asTableColumns = getTableColumns($sTable); - if(!$asTableColumns) - { - return false; - } - else - { - $sQuery = "\n".implodeAll($asTableColumns, "` ", "\n", "`", ",")."\n".implode(", \n", getTableConstraints($sTable)); - return "CREATE /* ".basename(__FILE__)." ".__LINE__." */ TABLE `{$sTable}` ({$sQuery})"; - } -} -function install(&$oConnection, $sDbName, $asAdminsInfo, $bDropDb=true) -{ - - $bSuccess = false; - if($bDropDb) - { - setQuery("DROP DATABASE IF EXISTS ".$sDbName); - } - if(!setQuery("CREATE /* ".basename(__FILE__)." ".__LINE__." */ DATABASE ".$sDbName, false)) //create database - { - addMessage(getError(array( 'Base de données déjà présente', - 'Choisissez un autre nom de base de donnés ou supprimez la', - 'Détails : '.mysql_error()), true)); - } - elseif(!mysql_select_db($sDbName, $oConnection)) //select database - { - addMessage(getError(array('Sélection de la database "'.$sDbName.'" impossible', 'Détails : '.mysql_error()), true)); - } - else - { - //create tables - $asTableNames = getTables(); - array_walk(array_map('getInstallQuery', $asTableNames), 'setQuery'); - - //insert admin users and a test user - foreach($asAdminsInfo as $asAdminInfo) - { - insertRow(USER_TABLE, $asAdminInfo); - } - - //initial settings - insertUpdateRow(USER_TABLE, - array( USER_TABLE.'_last_name'=>'test', - USER_TABLE.'_first_name'=>'test', - 'grade'=>'6', - 'class'=>'1', - 'pass'=>encryptPassword('test'), - 'admin'=>0), - array(USER_TABLE.'_last_name', USER_TABLE.'_first_name')); - - //TODO insert Qcm at once use a qcm class - $iQcmId = insertRow(QCM_TABLE, array(1, 'Qcm test', 1)); - $iQuestionId = insertRow(QUESTION_TABLE, array($iQcmId, 'Quel est la couleur du cheval blanc d\'Henry 4 ?', 'qcm1question1.jpeg')); - insertRow(ANSWER_TABLE, array($iQuestionId, $iQcmId, 'Rouge !', '0')); - insertRow(ANSWER_TABLE, array($iQuestionId, $iQcmId, 'Vert', '0')); - insertRow(ANSWER_TABLE, array($iQuestionId, $iQcmId, 'Bleu', '0')); - insertRow(ANSWER_TABLE, array($iQuestionId, $iQcmId, 'Blanc', '1')); - - //insert changelog - if(!setChangeLog()) - { - addMessage(getWarning('Fichier de changelog introuvable')); - } - $bSuccess = true; - } - return $bSuccess; -} -function setChangeLog() -{ - $bChangeLogFileExists = file_exists(CHANGELOG_FILE); - if($bChangeLogFileExists) - { - $sChangeLog = file_get_contents(CHANGELOG_FILE); - $asOrder = array('led', 'version', 'type', CHANGELOG_TABLE, 'progress'); - $asChangeLogs = array_filter(explode("\n", str_replace("\r", '', $sChangeLog))); - foreach($asChangeLogs as $sChangeLogRow) - { - $asChangeLogRow = explode("\t", $sChangeLogRow); - $asChangeLogRow[] = 1; - insertRow(CHANGELOG_TABLE, array_combine($asOrder, $asChangeLogRow)); - } - } - return $bChangeLogFileExists; -} -function publishChangeLog($iChangeLogId) -{ - $asAdmins = selectRows(array('select'=>array('id_'.USER_TABLE), 'from'=>USER_TABLE, 'constraint'=>array('admin'=>1))); - foreach($asAdmins as $asInfo) - { - $iUserId = $asInfo['id_'.USER_TABLE]; - insertRow(NEWS_TABLE, array('id_'.USER_TABLE=>$iUserId, 'id_'.CHANGELOG_TABLE=>$iChangeLogId)); - } - return !empty($asAdmins); -} -function getCleanPublication($iUserId) -{ - $asNews = selectRows(array('from'=>NEWS_TABLE, 'constraint'=>array('id_user'=>$iUserId))); - $asNewsPanel = array(); - foreach($asNews as $asNews) - { - $iChangelogId = $asNews['id_'.CHANGELOG_TABLE]; - $asChangelog = selectRow(CHANGELOG_TABLE, array('id_'.CHANGELOG_TABLE=>$iChangelogId), array('changelog', 'type')); - $asNewsPanel[] = getSuccess(array( 'Message personnel', - getHtml(date(LAYOUT_DATE_FORMAT, strtotime($asNews['led'])), 'span', '', 'font-size:12px'), - 'Le feedback n°'.$iChangelogId.' ('.$asChangelog['type'].') a été traité : ', - $asChangelog['changelog'].'.', - '-- L\'équipe Admin')); - deleteRow(NEWS_TABLE, $asNews['id_'.NEWS_TABLE]); - } - return implode("\n", $asNewsPanel); -} -function getTableColumnNames($sTableName, $iTableColumn=false, $bTableId=true, $bTableLed=true) -{ - $asTableNames = getTableColumns($sTableName); - if(!$asTableNames) - { - return false; - } - if(!$bTableLed) - { - unset($asTableNames['led']); - } - if(!$bTableId) - { - unset($asTableNames['id_'.$sTableName]); - } - $aiTableColumnNames = array_keys($asTableNames); - return ($iTableColumn!==false)?$aiTableColumnNames[$iTableColumn]:$aiTableColumnNames; -} -function getId($sTableName) -{ - return $sTableName.'.id_'.$sTableName; -} - -//Back up functions -function getMaxIncrementedValue($sTable) -{ - return selectValue($sTable, "MAX(".getId($sTable).")"); -} -function createBackUp($bDropDb) -{ - $sFileName = DB_NAME.'_'.date(FILE_DATE_FORMAT); - - $sQuery = "/* ID ".$sFileName." */"; - $sQuery .= "\n\n"."SET SQL_MODE=\"NO_AUTO_VALUE_ON_ZERO\";".END_OF_QUERY; - $sQuery .= $bDropDb?"\n\n"."DROP DATABASE `".DB_NAME."`;".END_OF_QUERY:""; - $sQuery .= "\n\n"."CREATE DATABASE `".DB_NAME."` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;".END_OF_QUERY; - $sQuery .= "\n\n"."USE `".DB_NAME."`;".END_OF_QUERY; - - foreach(getTables() as $sTable) - { - $sQuery .= "\n\n".getUniqueValue("SHOW CREATE TABLE ".$sTable, 'Create Table').";".END_OF_QUERY; - $oTable = getQuery("SELECT * FROM `{$sTable}`"); - if(mysql_num_rows($oTable) > 0) - { - $iColumnNb = mysql_num_fields($oTable); - $sQuery .= "\n\n"."INSERT INTO `{$sTable}` \n("; - $sQuery .= encapsulate(array_map('mysql_field_name', array_fill(0, $iColumnNb, $oTable), range(0, $iColumnNb-1)), "`", false, ", "); - $sQuery .= ") \nVALUES\n"; - - $asValues = array(); - while ($asTableRow = mysql_fetch_array($oTable, MYSQL_ASSOC)) - { - cleanSql($asTableRow); - $asValues[] = "(".encapsulate($asTableRow, "'", false, ", ").")"; - } - $sQuery .= implode(",\n", $asValues).";".END_OF_QUERY; - } - } - $sFilePath = BACKUP_FOLDER.$sFileName.'.'.DB_EXT_FILE; - $bResult = file_put_contents($sFilePath, $sQuery); - if($bResult) - { - addMessage(getSuccess('Back up ajouté')); - addFeed('CREATE', DB_NAME, 'database', $sFilePath); - } - else - { - addMessage(getError(array( 'Impossible de créer un nouveau fichier de sauvegarde', - 'Vérifier les droits d\'écriture du dossier '.BACKUP_FOLDER))); - } - return $bResult; -} -function restoreBackUp($sBackFilePath, &$oConnection) -{ - $bResult = false; - if(checkBackup($sBackFilePath)) - { - $sFileContents = file_get_contents($sBackFilePath); - mysql_close($oConnection); - $oConnection = mysql_connect(DB_SERVER, DB_LOGIN, DB_PASS); - $asQueries = array_filter(explode(END_OF_QUERY, str_replace(array("\r\n", "\n"), '', $sFileContents))); - foreach($asQueries as $sQuery) - { - setQuery($sQuery); - } - mysql_select_db(DB_NAME,$oConnection); - addFeed('RESTORE', DB_NAME, 'database', $sBackFilePath); - addMessage(getSuccess(array('Base restorée', 'Fichier chargé : '.$sBackFilePath, getHtml('Pour des raisons de sécurité, vous allez être déconnecté', 'strong')))); - logMeOut(); - $bResult = true; - } - return $bResult; -} -function checkBackup($sFilePath) -{ - $bValidBackup = true; - $sFileContents = file_get_contents($sFilePath); - foreach(getTables() as $sTable) - { - //Check if table exists - if(getUniqueValue("SHOW TABLES LIKE '$sTable'")!='') - { - $sCreateTableQuery = getUniqueValue("SHOW CREATE TABLE ".$sTable, 'Create Table'); - $sCreateTableQuery = substr($sCreateTableQuery, 0, strpos($sCreateTableQuery,'ENGINE')); - if(strpos($sFileContents, $sCreateTableQuery)===false) - { - $iStart = strpos($sFileContents, 'CREATE TABLE `'.$sTable.'`'); - if($iStart===false) - { - file_put_contents($sFilePath, $sFileContents."\n".$sCreateTableQuery.";", FILE_APPEND); - addMessage(getWarning(array('La sauvegarde ne comprends pas la table "'.$sTable.'"', 'Celle-ci a été ajoutée'))); - } - else - { - $sStart = substr($sFileContents, $iStart); - $sBackupTableCreation = substr($sStart, 0, strpos($sStart, 'ENGINE')); - addMessage(getError(array('La base de donnée n\'est pas compatible', 'Erreur sur la table "'.$sTable.'"', 'Config'=>$sCreateTableQuery, 'Backup'=>$sBackupTableCreation))); - $bValidBackup = false; - } - } - } - } - return $bValidBackup; -} -function uploadBackUp($asFile, $bRestoreBackUp, &$oConnection) -{ - $bResult = false; - if(uploadFile($asFile, BACKUP_FOLDER, array(DB_EXT_FILE))) - { - $sFilePath = BACKUP_FOLDER.$asFile['name']; - if(checkBackup($sFilePath)) - { - addMessage(getSuccess('Upload terminé')); - addFeed('UPLOAD', DB_NAME, 'file', $asFile['name']); - $bResult = true; - if($bRestoreBackUp) - { - $bResult = restoreBackUp($sFilePath, $oConnection); - } - } - else - { - unlink($sFilePath); - } - } - return $bResult; -} -function getKeyRing($asAuth=array()) -{ - switch(count($asAuth)) - { - case 3: - $sLastName = $asAuth['lastName']; - $sFirstName = $asAuth['firstName']; - $sPass = $asAuth['pass']; - break; - case 0: - $sLastName = $_SESSION['lastName']; - $sFirstName = $_SESSION['firstName']; - $sPass = selectValue(USER_TABLE, 'pass', array('id_'.USER_TABLE=>$_SESSION['user'], 'admin'=>1)); - break; - default: - return false; - } - return encodeUrl(serialize(array('lastname'=>$sLastName, 'firstname'=>$sFirstName, 'pass'=>$sPass))); -} -function syncBackUp($sUrl, $bInternalLink, $sAuth, $bRestoreBackUp, &$oConnection) -{ - $bResult = false; - $sDomain = $sUrl; - if($bInternalLink) - { - //authorization - $sUrl .= '&auth='.$sAuth; - $sFileName = 'sync_'.date(FILE_DATE_FORMAT).'.'.DB_EXT_FILE; - } - else - { - $sFileName = basename($sUrl); - } - - $sFilePath = BACKUP_FOLDER.$sFileName; - $sContent = file_get_contents($sUrl); - $iFileTimeStamp = getTimeStampFromBackUp($sContent); - if(!isset($sContent) || $sContent=='') - { - addMessage(getError(array('Fichier introuvable sur le point d\'accès', 'url : '.$sUrl))); - } - elseif($iFileTimeStamp==0) - { - addMessage(getError('Fichier incompatible (date illisible)')); - } - elseif(!file_put_contents($sFilePath, $sContent)) - { - addMessage(getError(array('Impossible de créer un nouveau fichier de sauvegarde', 'Vérifier les droits d\'écriture du dossier '.BACKUP_FOLDER))); - } - else - { - $bResult = true; - addFeed('UPLOAD', $sDomain, 'sync', $sFileName); - addMessage(getSuccess(array('Back up ajouté', 'fichier : '.$sFileName, 'Date de la sauvegarde : '.date(LAYOUT_DATE_FORMAT, $iFileTimeStamp)))); - } - - if($bResult && $bRestoreBackUp) - { - $iServerLastBackTimeStamp = getLastBackUp('timeStamp'); - if($iServerLastBackTimeStamp > $iFileTimeStamp) - { - $bResult = false; - addMessage(getError(array( 'Sauvegarde trop ancienne', - 'Date de la sauvegarde du point d\'accès : '.date(LAYOUT_DATE_FORMAT, $iFileTimeStamp), - 'Dernière sauvegarde disponible sur le serveur : '.date(LAYOUT_DATE_FORMAT, $iServerLastBackTimeStamp)))); - } - else - { - $bResult = restoreBackUp($sFilePath, $oConnection); - } - } - return $bResult; -} -function resetDatabase(&$oConnection) -{ - $asAdminsInfo = selectRows(array('select'=>getTableColumnNames(USER_TABLE, false, false, false), 'from'=>USER_TABLE, 'constraint'=>array('admin'=>1))); - - if(!$asAdminsInfo) - { - relocate(getError('Aucun administrateur trouvé dans la base de données'), 'install'); - } - - $bResult = install($oConnection, DB_NAME, $asAdminsInfo); - if($bResult) - { - addFeed('RESET', DB_NAME, 'database'); - addMessage(getSuccess(array('Base de données réinitialisée', getHtml('Pour des raisons de sécurité, vous allez être déconnecté', 'strong')))); - logMeOut(); - return true; - } - return $bResult; -} -function uploadFile($asFileInfo, $sDestFolder, $asAuthorizedFileExt) -{ - $bResult = false; - $sFileExt = getExtension($asFileInfo['name']); - if(in_array($sFileExt, $asAuthorizedFileExt)) - { - if($asFileInfo['size'] 1) : - addMessage(getWarning(array('Erreur de taille pour la requête :', $sQuery, 'taille = '.$iCount))); - case ($iCount > 0) : - $asResult = array_shift($asResult); - return (count($asColumnName)>0)?array_intersect_key($asResult, array_flip($asColumnName)):$asResult; - } -} -function getUniqueValue($sQuery, $sColumnName=0, $sTypeQuery=__FUNCTION__) -{ - $asResult = getUniqueQuery($sQuery, array($sColumnName), false, $sTypeQuery); - return array_shift($asResult); -} -function setQuery($sQuery, $bDieOnError=true, $sTypeQuery=__FUNCTION__) -{ - return getQuery($sQuery, $bDieOnError, $sTypeQuery); -} - -function selectRows($asInfo) -{ - $sAttributes = array('select'=>"SELECT", 'from'=>"FROM", 'constraint'=>"WHERE", 'groupBy'=>"GROUP BY", 'orderBy'=>"ORDER BY"); - $asRowSeparators = array('select'=>", ", 'from'=>"", 'constraint'=>" AND ", 'groupBy'=>", ", 'orderBy'=>", "); - $asOperators = array('constraint'=>" = ", 'orderBy'=>" "); - - $sQuery = "/* ".basename(__FILE__)." ".__LINE__." */"; - foreach($sAttributes as $sStatement => $sKeyWord) - { - $asSelection = array_key_exists($sStatement, $asInfo)?$asInfo[$sStatement]:array(); - if(!is_array($asSelection)) - { - $asSelection = array($asSelection); - } - - //if provided values - if(count($asSelection)>0) - { - cleanSql($asSelection); - $sQuery .= " ".$sKeyWord." "; - - //in case of double value input - if(array_key_exists($sStatement, $asOperators)) - { - if($sStatement=='constraint' && array_key_exists('constOpe', $asInfo)) - { - $asOperators[$sStatement] = $asInfo['constOpe']; - } - $sQuery .= implodeAll($asSelection, $asOperators[$sStatement], $asRowSeparators[$sStatement]); - } - else - { - $sQuery .= implode($asRowSeparators[$sStatement], $asSelection); - } - } - //default value for select - elseif($sStatement=='select') - { - $sQuery .= " ".$sKeyWord." * "; - } - } - return getArrayQuery($sQuery, true); -} -function selectRow($sTableName, $asConstraints, $asColumnNames=array(), $bStringOnly=false) -{ - cleanSql($sTableName); - cleanSql($asConstraints); - - $asQueryValues = array(); - foreach($asConstraints as $oColumnName =>$oValue) - { - //check for column names - if(is_numeric($oColumnName)) - { - $oColumnName = getTableColumnNames($sTableName, $oColumnName); - } - $sQuote = getQuote($sTableName, $oColumnName); - - $asQueryValues[$oColumnName] = $oColumnName." = ".$sQuote.$oValue.$sQuote; - } - $sConstraint = (count($asQueryValues)>0)?"WHERE ".implode(" AND ", $asQueryValues):""; - - //requested columns - $sColumns = (count($asColumnNames)>0)?implode(", ", $asColumnNames):"*"; - - $sQuery = "SELECT /* ".basename(__FILE__)." ".__LINE__." */ $sColumns - FROM $sTableName - $sConstraint"; - - return getUniqueQuery($sQuery, array(), $bStringOnly); -} -function selectValue($sTableName, $sColumnName, $asConstraints=array()) -{ - if(is_numeric($asConstraints)) - { - $asConstraints = array('id_'.$sTableName=>$asConstraints); - } - - $asResult = selectRow($sTableName, $asConstraints, array($sColumnName)); - if(!$asResult || !isset($asResult[$sColumnName])) - { - return false; - } - else - { - return $asResult[$sColumnName]; - } -} -function insertUpdateRow($sTableName, $asData, $asKeys=array()) -{ - $sTableIdName = 'id_'.$sTableName; - - //check for data in the db - if($asKeys==array()) - { - $asKeys[] = $sTableIdName; - } - $asValues = array_intersect_key($asData, array_flip($asKeys)); - $iTableId = selectValue($sTableName, $sTableIdName, $asValues); - - //insert - if(!$iTableId) - { - $iTableId = insertRow($sTableName, $asData); - } - //Update - else - { - if(array_key_exists($sTableIdName, $asData)) - { - unset($asData[$sTableIdName]); - } - $iTableId = updateRow($sTableName, $iTableId, $asData); - } - return $iTableId; -} -function insertRow($sTableName, $asData) -{ - cleanSql($sTableName); - cleanSql($asData); - - $asQueryValues = array(); - foreach($asData as $oColumnName =>$oValue) - { - //check for column names - if(is_numeric($oColumnName)) - { - $oColumnName = getTableColumnNames($sTableName, $oColumnName, false); - } - $sQuote = getQuote($sTableName, $oColumnName); - - $asQueryValues[$oColumnName] = $sQuote.$oValue.$sQuote; - } - $sQuery = "INSERT /* ".basename(__FILE__)." ".__LINE__." */ - INTO ".$sTableName." (`".implode("`, `", array_keys($asQueryValues))."`) - VALUES (".implode(", ", $asQueryValues).")"; - - setQuery($sQuery); - return getMaxIncrementedValue($sTableName); -} -function updateRow($sTableName, $iTableId, $asData) -{ - cleanSql($sTableName); - cleanSql($iTableId); - cleanSql($asData); - - $asSets = array(); - foreach($asData as $oColumnName=>$oColumnValue) - { - //check for column names - if(is_numeric($oColumnName)) - { - $oColumnName = getTableColumnNames($sTableName, $oColumnName, false); - } - $sQuote = getQuote($sTableName, $oColumnName); - $asSets[] = "`$oColumnName` = ".$sQuote.$oColumnValue.$sQuote; - } - $sQuery = "UPDATE /* ".basename(__FILE__)." ".__LINE__." */ $sTableName - SET ".implode(", ", $asSets)." - WHERE ".getId($sTableName)." = ".$iTableId." LIMIT 1"; - setQuery($sQuery); - return $iTableId; -} -function deleteRow($sTableName, $iTableId) -{ - cleanSql($sTableName); - cleanSql($iTableId); - - //linked tables - switch($sTableName) - { - case is_array($sTableName): - $asTables = $sTableName; - break; - case USER_TABLE : - $asTables = array(USER_TABLE, RESULT_TABLE); - break; - case QCM_TABLE : - $asTables = getQcmTables(); - break; - case QUESTION_TABLE : - $asTables = array(QUESTION_TABLE, ANSWER_TABLE); - break; - case is_string($sTableName) : - $asTables = array($sTableName); - break; - default: - $asTables = array(); - } - foreach($asTables as $sTable) - { - setQuery("DELETE /* ".basename(__FILE__)." ".__LINE__." */ FROM ".$sTable." WHERE id_".$sTableName." = ".$iTableId); - } -} -function setQcmValidity($iQcmId, $bValid) -{ - $sQcmName = getTextFromId(QCM_TABLE, $iQcmId); - updateRow(QCM_TABLE, $iQcmId, array('valid'=>$bValid?'1':'0')); - addFeed($bValid?'ACTIVATE':'DESACTIVATE', $iQcmId, QCM_TABLE, $sQcmName); -} -function getListe($asInfo) -{ - //TODO remplacer par selectRows - $sAttributes = array('select'=>"", 'from'=>"FROM", 'constraint'=>"WHERE", 'groupBy'=>"GROUP BY", 'orderBy'=>"ORDER BY"); - $sQuery = "SELECT /* ".basename(__FILE__)." ".__LINE__." */"; - foreach($sAttributes as $sStatement => $sKeyWord) - { - $sSeparator = ($sStatement=='constraint')?" AND ":", "; - if(array_key_exists($sStatement, $asInfo)) - { - $sQuery .= " ".$sKeyWord." ".(is_array($asInfo[$sStatement])?implode($sSeparator, $asInfo[$sStatement]):$asInfo[$sStatement]); - } - elseif($sStatement=='select') - { - $sQuery .= " ".$sKeyWord." * "; - } - } - - return getArrayQuery($sQuery, true); -} -function arrayKeyFilter($asArray, $sCallBack) -{ - $asValidKeys = array_flip(array_filter(array_keys($asArray), $sCallBack)); - return array_intersect_key($asArray, $asValidKeys); -} - -//feed functions -function addFeed($sAction, $sSource, $sType, $sOldValue='', $sNewValue='' , $iRefId=0, $sAuthor='') -{ - if($sAuthor=='') - { - $sAuthor = isset($_SESSION['user'])?$_SESSION['firstName'].' '.$_SESSION['lastName']:'bot'; - } - return insertRow(FEED_TABLE, array($sAuthor, $sAction, $sSource, $sType, $sOldValue, $sNewValue, $iRefId)); -} -function cleanRss($oText) -{ - $asForbiddenChars = array('&', '<', '>', '"', '\''); - $asReplacementCode = array( '&', '<', '>', '"', '''); - if(!is_array($oText)) - { - return str_replace($asForbiddenChars, $asReplacementCode, $oText); - } - elseif(count($oText)>0) - { - $oTextKeys = array_map('cleanRss', array_keys($oText)); - $oTextValues = array_map('cleanRss', $oText); - return array_combine($oTextKeys, $oTextValues); - } -} - -/** - * Get one or more qcm infos (questions + answers) - * - * Output architecture : - * - * Array - * ( - * [id_qcm] => Array - * ( - * ['qcm'] => qcm_name - * ['id_user'] => author - * [QUESTION_TABLE] => Array - * ( - * [id_question] => Array - * ( - * [QUESTION_TABLE] => question_title - * [ANSWER_TABLE] => Array - * ( - * [answer_id] => Array - * ( - * [ANSWER_TABLE] => answer_title - * ['right_answer'] => right_answer - * ) - * [answer_id] => ... - * ) - * ) - * [id_question] => ... - * ) - * ) - * [id_qcm] => ... - * ) - * - * @param array $oQcmIds liste of qcm to get - */ -function getQcm($oQcmIds=false) -{ - $sQcmConstraint = ""; - $bOneQcm = false; - if(is_numeric($oQcmIds)) - { - $bOneQcm = true; - $sQcmConstraint = " WHERE id_".QCM_TABLE." = ".$oQcmIds; - } - elseif(is_array($oQcmIds)) - { - $sQcmConstraint = " WHERE id_".QCM_TABLE." IN(".implode(',', $oQcmIds); - } - $oQcm = getQuery( "SELECT /* ".basename(__FILE__)." ".__LINE__." */ ".getId(QCM_TABLE).", ".QCM_TABLE.", id_".USER_TABLE." - FROM ".QCM_TABLE. - $sQcmConstraint." - ORDER BY ".getId(QCM_TABLE)); - while($asQcms = mysql_fetch_array($oQcm)) - { - $asResults[$asQcms['id_'.QCM_TABLE]][QCM_TABLE] = $asQcms[QCM_TABLE]; - $asResults[$asQcms['id_'.QCM_TABLE]]['id_'.USER_TABLE] = $asQcms['id_'.USER_TABLE]; - $oQuestion = getQuery( "SELECT /* ".basename(__FILE__)." ".__LINE__." */ ".getId(QUESTION_TABLE).", ".QUESTION_TABLE.", image - FROM ".QUESTION_TABLE. - $sQcmConstraint." - ORDER BY ".getId(QUESTION_TABLE)); - while($asQuestion = mysql_fetch_array($oQuestion)) - { - $asResults[$asQcms['id_'.QCM_TABLE]][QUESTION_TABLE][$asQuestion['id_'.QUESTION_TABLE]][QUESTION_TABLE] = $asQuestion[QUESTION_TABLE]; - $asResults[$asQcms['id_'.QCM_TABLE]][QUESTION_TABLE][$asQuestion['id_'.QUESTION_TABLE]]['image'] = $asQuestion['image']; - $oAnswer = getQuery("SELECT /* ".basename(__FILE__)." ".__LINE__." */ ".getId(ANSWER_TABLE).", ".ANSWER_TABLE.", ".RIGHT_ANSWER." - FROM ".ANSWER_TABLE. - $sQcmConstraint." - ".(($sQcmConstraint!='')?"AND":"WHERE")." id_".QUESTION_TABLE." = ".$asQuestion['id_'.QUESTION_TABLE]." - ORDER BY ".getId(ANSWER_TABLE)); - while($asAnswer = mysql_fetch_array($oAnswer)) - { - $asResults [$asQcms['id_'.QCM_TABLE]] - [QUESTION_TABLE] - [$asQuestion['id_'.QUESTION_TABLE]] - [ANSWER_TABLE] - [$asAnswer['id_'.ANSWER_TABLE]] = array(ANSWER_TABLE => $asAnswer[ANSWER_TABLE], RIGHT_ANSWER=>$asAnswer[RIGHT_ANSWER]); - } - } - } - return $bOneQcm?$asResults[$oQcmIds]:$asResults ; -} -function getQcmName($iQcmId) -{ - return selectValue(QCM_TABLE, QCM_TABLE, $iQcmId); -} -function getNbQuestions($iQcmId) -{ - return selectValue(QUESTION_TABLE, 'COUNT(1)', array('id_qcm'=>$iQcmId)); -} -function getUserFromLogin($sLastName, $sFirstName) -{ - if($sLastName!='' && $sFirstName!='') - { - return selectRow(USER_TABLE, array('user_last_name'=>strtolower($sLastName), 'user_first_name'=>strtolower($sFirstName))); - } - else - { - return false; - } -} -function getTextFromId($sTableName, $iTableId) -{ - $sTextColumnName = $sTableName; - $sAdditionalInfo = ''; - switch($sTableName) - { - case USER_TABLE: - $sAdditionalInfo = selectValue($sTableName, USER_TABLE.'_first_name', $iTableId).' '; - $sTextColumnName = USER_TABLE.'_last_name'; - break; - case FEED_TABLE: - $sTextColumnName = 'type'; - } - return $sAdditionalInfo.selectValue($sTableName, $sTextColumnName, $iTableId); -} -function getTimeStampFromFile($sFileName) -{ - return getTimeStampFromBackUp(file_get_contents($sFileName)); -} -function getTimeStampFromBackUp($sBackUp) -{ - preg_match('/\/\* ID (?P\S+) \*\//', $sBackUp, $asMatches); - if(!array_key_exists('date', $asMatches)) - { - return 0; - } - $asData = explode('_', str_replace('.'.DB_EXT_FILE, '', basename($asMatches['date']))); - if(count($asData)!=3) - { - return 0; - } - list($sDbName, $sDate, $sTime) = $asData; - $asDate = explode('.', $sDate); - $asTime = explode('h', $sTime); - if(count($asDate)!=3 || count($asTime)!=2) - { - return 0; - } - return strtotime($asDate[2].'-'.$asDate[1].'-'.$asDate[0].' '.$asTime[0].':'.$asTime[1].':00'); -} -function getLastBackUp($sInfo) -{ - foreach(glob(BACKUP_FOLDER.'*.'.DB_EXT_FILE) as $sFileName) - { - $asTimeStamp[getTimeStampFromFile($sFileName)] = $sFileName; - } - if(isset($asTimeStamp)) - { - ksort($asTimeStamp); - switch($sInfo) - { - case 'timeStamp': - return array_pop(array_keys($asTimeStamp)); - case 'fileName': - return basename(array_pop($asTimeStamp)); - case 'file': - return file_get_contents(array_pop($asTimeStamp)); - default: - return getWarning('Info '.$Info.' inconnue'); - } - } - else - { - return false; - } -} - -//Results related -function checkPreviousResults($iUserId, $iQcmId) -{ - $iResultId = selectValue(RESULT_TABLE, 'id_'.RESULT_TABLE, array('id_'.USER_TABLE=>$iUserId, 'id_'.QCM_TABLE=>$iQcmId)); - return ($iResultId !== false); -} -function addResult($iUserId, $iQcmId, $iMark) -{ - insertRow(RESULT_TABLE, array($iUserId, $iQcmId, $iMark)); -} -function getSQLResultsConstraints($aiInfoSelect) -{ - $asConstraintColumns = array('grade' => false, 'class' => false, USER_TABLE => true, QCM_TABLE => true); - $sConstraints = array('noAdmin' => USER_TABLE.".admin = 0"); - foreach($asConstraintColumns as $sConstraintColumn => $bIsTable) - { - if(array_key_exists($sConstraintColumn, $aiInfoSelect) && $aiInfoSelect[$sConstraintColumn]>0) - { - $aiConstraintIds = $aiInfoSelect[$sConstraintColumn]; - $sConstraints[$sConstraintColumn] = ($bIsTable?getId($sConstraintColumn):$sConstraintColumn).((is_array($aiConstraintIds))?" IN (".implode(',', $aiConstraintIds).")":" = ".$aiConstraintIds); - } - } - return "WHERE ".implode(" AND ", $sConstraints); -} -function getResults($aiInfoSelect) -{ - //TODO class Qcm - if(isset($aiInfoSelect['outputOrder'])) - { - $asOutputOrder = $aiInfoSelect['outputOrder']; - } - else - { - $asOutputOrder = array('grade', 'class', 'id_'.USER_TABLE, 'id_'.QCM_TABLE); - } - $oResults = getQuery( "SELECT /* ".basename(__FILE__)." ".__LINE__." */ grade, class, ".USER_TABLE."_last_name, ".USER_TABLE."_first_name, ".getId(USER_TABLE).", ".RESULT_TABLE.".id_".QCM_TABLE.", ".QCM_TABLE.", result - FROM ".RESULT_TABLE." - LEFT JOIN ".USER_TABLE." USING(id_".USER_TABLE.") - LEFT JOIN ".QCM_TABLE." ON(".RESULT_TABLE.".id_".QCM_TABLE." = ".getId(QCM_TABLE).") - ".getSQLResultsConstraints($aiInfoSelect)." - ORDER BY ".QCM_TABLE.", grade, class, ".USER_TABLE."_last_name"); - - while($asCurrentResult = mysql_fetch_array($oResults)) - { - $asResults [$asCurrentResult[$asOutputOrder[0]]] - [$asCurrentResult[$asOutputOrder[1]]] - [$asCurrentResult[$asOutputOrder[2]]] - [$asCurrentResult[$asOutputOrder[3]]] = array( QCM_TABLE => $asCurrentResult[QCM_TABLE], - USER_TABLE.'_first_name' => $asCurrentResult[USER_TABLE.'_first_name'], - USER_TABLE.'_last_name' => $asCurrentResult[USER_TABLE.'_last_name'], - RESULT_TABLE => $asCurrentResult['result']); - } - return isset($asResults)?$asResults:false; -} -function getResultsAverage($iOutOf, $aiInfoSelect) -{ - $iAvg = getUniqueValue( "SELECT /* ".basename(__FILE__)." ".__LINE__." */ AVG(result) as resultAvg - FROM ".RESULT_TABLE." - LEFT JOIN ".USER_TABLE." USING(id_".USER_TABLE.") - LEFT JOIN ".QCM_TABLE." ON(".RESULT_TABLE.".id_".QCM_TABLE." = ".getId(QCM_TABLE).") - ".getSQLResultsConstraints($aiInfoSelect), 'resultAvg'); - return roundMark($iOutOf, $iAvg); -} -function shuffle_assoc($asArray) -{ - $aiArrayKeys = array_keys($asArray); - shuffle($aiArrayKeys); - foreach($aiArrayKeys as $iKey) - { - $asShuffledArray[$iKey] = $asArray[$iKey]; - } - return $asShuffledArray; -} -function roundMark($iOutOf, $iMark) -{ - return round($iMark*$iOutOf, DECIMAL_LIMIT); -} - -/* QCM Builders */ - -//HTML question builders -function getQuestionPattern() -{ - $sQuestionId = '#new#'.QUESTION_TABLE.'#questionId#'; - return array - ( - 'html' => ' - - - X - #image# - - #answersValue# - #rightAnswersValue# - ', - 'variables' => array('#questionNum#', '#new#', '#questionId#', '#questionValue#', '#answersValue#', '#rightAnswersValue#', '#image#'), - 'defaultValues' => array('#questionId#', 'new', '#questionId#', DEFAULT_QUESTION_INPUT, getInputHtml('Answer'), getInputHtml('RightAnswer'), getInputHtml('Image')) - ); -} -function getAnswerPattern() -{ - $sAnswerId = '#new#'.QUESTION_TABLE.'#questionId#'.ANSWER_TABLE.'#answerId#'; - return array - ( - 'html' => '', - 'variables' => array('#questionId#', '#answerId#', '#new#', '#answerValue#'), - 'defaultValues' => array('#questionId#', '#answerId#', 'new', DEFAULT_ANSWER_INPUT) - ); -} -function getRightAnswerPattern() -{ - $sRightAnswerId = '#new#'.QUESTION_TABLE.'#questionId#'.ANSWER_TABLE.'#rightAnswerId#'.RIGHT_ANSWER.'#rightAnswerId#'; - return array - ( - 'html' => '
', - 'variables' => array('#questionId#', '#rightAnswerId#', '#new#', '#rightAnswerChecked#'), - 'defaultValues' => array('#questionId#', '#answerId#', 'new', '') - ); -} -function getCurrentAnswerPattern() -{ - return array - ( - 'html' => '', - 'variables' => array('#questionId#', '#answerNumber#'), - 'defaultValues' => array('!+questionId+!', '1') - ); -} -function getImagePattern() -{ - $sQuestionId = '#new#'.QUESTION_TABLE.'#questionId#'; - return array - ( - 'html' => '#image#

#imageText# :

', - 'variables' => array('#image#', '#imageText#', '#new#', '#questionId#'), - 'defaultValues' => array('', ADD_IMAGE_TEXT, 'new', '#questionId#') - ); -} - -function getInputHtml($sType, $oData=false) -{ - $asHtml = call_user_func('get'.$sType.'Pattern'); - $sInput = str_replace - ( - $asHtml['variables'], - (!$oData)?$asHtml['defaultValues']:$oData, - $asHtml['html'] - ); - return (!$oData)?printJsString($sInput):$sInput; -} -function printJsString($sText) -{ - return str_replace(array("\'", "'", "!", chr(10), chr(13), chr(9)),array("'", "\'", "'", '', '', ''), $sText); -} -function checkQcm($iQcmId) -{ - $asQcm = getQcm($iQcmId); - $asErrors = array(); - - //no qcm name - if($asQcm[QCM_TABLE] == DEFAULT_QCM_NAME) - { - $asErrors[] = getWarning('Le QCM n\'a aucun nom'); - } - - if(isset($asQcm[QUESTION_TABLE]) && count($asQcm[QUESTION_TABLE])>0) - { - $iQuestionNum = 0; - foreach($asQcm[QUESTION_TABLE] as $iQuestionId => $asAnswers) - { - $iQuestionNum++; - $iNbAnswers = 0; - $iNbRightAnswers = 0; - - //empty question - if($asAnswers[QUESTION_TABLE]=='' || $asAnswers[QUESTION_TABLE]==DEFAULT_QUESTION_INPUT) - { - $asErrors[] = 'Question '.$iQuestionNum.' : vide'; - } - if(isset($asAnswers[ANSWER_TABLE]) && count($asAnswers[ANSWER_TABLE])>0) - { - foreach($asAnswers[ANSWER_TABLE] as $iAnswerId => $asAnswer) - { - $iNbRightAnswers += $asAnswer[RIGHT_ANSWER]; - - //No answer and a valid answer checked - if($asAnswer[ANSWER_TABLE]=='' && $asAnswer[RIGHT_ANSWER]>0) - { - $asErrors[] = 'Question '.$iQuestionNum.', réponse '.$iNbAnswers.' : - Aucune réponse n\'a été écrite, - mais une bonne réponse a été cochée'; - } - } - } - else - { - //No answer for a defined question - $asErrors[] = 'Question '.$iQuestionNum.' : Aucune réponse possible n\'a été ajoutée'; - } - - //No right answer - if($iNbRightAnswers==0) - { - $asErrors[] = 'Question '.$iQuestionNum.' : Aucune bonne réponse n\'a été cochée'; - } - } - } - else - { - //No question - $asErrors[] = 'Aucune question n\'a été écrite'; - } - - $bResult = true; - if(count($asErrors)>0) - { - array_unshift($asErrors, 'QCM incomplet', 'les éléments suivants comportent une erreur :'); - addMessage(getError($asErrors)); - $bResult = false; - } - return $bResult; -} - -//SQL Questions builders -function parseQuestion($sKey) -{ - $asTables = array(QUESTION_TABLE, ANSWER_TABLE, RIGHT_ANSWER); - if(strpos($sKey, QUESTION_TABLE) === false) - { - return false; - } - else - { - $aiParsedKey = array(); - $iCurrentIndex = -1; - for($i=0;$i2)?false:$aiParsedKey; - } -} - -/* Security Functions */ - -//Authorizations -function pageAccessManagement($sRequestedPage) -{ - //check on logon - $bGrantedAccess = false; - $bConnected = checkSession(); - $asAuth = isset($_GET['auth'])?unserialize(decodeUrl($_GET['auth'])):array(); - if(isAuthorizedPage($sRequestedPage)) - { - $bGrantedAccess = true; - } - elseif($sRequestedPage=='download' || $sRequestedPage=='remote') - { - $bResult = false; - if($sRequestedPage=='download' && $bConnected) - { - $sFileName = isset($_POST['generate'])?generateCsv($_POST['file'], $_POST['content']):$_REQUEST['file']; - $bResult = download($sFileName, array('csv', 'sql', 'zip', 'gz')); - } - elseif($sRequestedPage=='remote' && is_array($asAuth) && count($asAuth)>0 && checkExternalAccess($asAuth['lastname'], $asAuth['firstname'], $asAuth['pass'])) - { - $bResult = remote($_GET['action']); - } - die($bResult?'':getCleanMessage()); - } - elseif(isset($_SESSION['user'])) - { - if(!$bConnected || $sRequestedPage == 'logout') - { - addMessage(logMeOut()); - } - elseif(isAdminOnlyPage($sRequestedPage) && !isAdmin()) //stop displaying page (requires admin status) - { - relocate(getError('Zone réservée aux administrateurs')); - } - else - { - $bGrantedAccess = true; - } - } - elseif(isset($_GET['register'])) - { - $bGrantedAccess = ($_GET['register'] == 1)?register($_POST):logMeIn($_POST['login'], $_POST['firstName'], $_POST['pass']); - if($bGrantedAccess && isset($_COOKIE[EXPECTED_PAGE])) - { - $sRequestedPage = $_COOKIE[EXPECTED_PAGE]; - setcookie(EXPECTED_PAGE, '', time()-3600); - } - } - elseif($sRequestedPage!='logout') - { - setcookie(EXPECTED_PAGE, $sRequestedPage, time()+3600); - } - - //Choose corresponding page - if($bGrantedAccess) - { - if($sRequestedPage!='logon' && array_key_exists($sRequestedPage, getPageDescription())) - { - $sPage = $sRequestedPage; - } - else - { - $sPage = DEFAULT_LOGGED_PAGE; - } - } - else - { - $sPage = 'logon'; - } - return $sPage; -} -function logMeIn($sLastName, $sFirstName, $sPass) -{ - $asUser = getUserFromLogin($sLastName, $sFirstName); - if(!$asUser) - { - addMessage(getError('Utilisateur inconnu')); - } - elseif(checkPassword($sPass, $asUser['pass'])) - { - setSession($asUser); - addMessage(getSuccess('Connexion réussie ! Bienvenue '.ucwords($_SESSION['firstName'].' '.$_SESSION['lastName']))); - //addFeed('CONNECT', $asUser['id_'.USER_TABLE], USER_TABLE, $asUser[USER_TABLE.'_first_name'].' '.$asUser[USER_TABLE.'_last_name']); - return true; - } - else - { - addMessage(getError('Mot de passe incorrect')); - } - return false; -} -function checkExternalAccess($sLastName, $sFirstName, $sPass) -{ - $asUser = getUserFromLogin($sLastName, $sFirstName); - return ($asUser && ($sPass == $asUser['pass']) && $asUser['admin']); -} -function logMeOut($bRelocate=true) -{ - //carry messages through sessions - $sMessages = getCleanMessage(); - - //destroy session - $_SESSION = array(); - $bResult = session_destroy(); - - //start new session and redirect towards the log-in panel - session_start(); - if($bRelocate) - { - relocate($sMessages.($bResult?getSuccess('Vous êtes déconnecté'):getError(array('Echec de la déconnexion', 'Veuillez fermer le navigateur et l\'ouvrir de nouveau'))), 'logon'); - } - return $bResult; -} -function relocate($oMessage, $sPage=DEFAULT_LOGGED_PAGE, $asVar=array()) -{ - //clean buffer - ob_end_clean(); - - //set user action result message - if(!isset($_SESSION)) - { - session_start(); - } - addMessage($oMessage); - - //load new page with specific variables - $asVar['page'] = $sPage; - header('Location:index.php?'.implodeAll($asVar, '=', '&')); - die(); -} -function register($asData) -{ - $sLastName = strtolower($asData['login']); - $sFirstName = strtolower($asData['firstname']); - $sPass = $asData['pass']; - $bExistingUser = getUserFromLogin($sLastName, $sFirstName); - - $sErrorMessage = ''; - if($sFirstName=='' || $sLastName=='' || $sPass=="" || $asData['pass2']=='') - { - $sErrorMessage = 'Tous les champs ne sont pas remplis'; - } - elseif(htmlspecialchars($sLastName, ENT_QUOTES)!=$sLastName || htmlspecialchars($sFirstName, ENT_QUOTES)!=$sFirstName) - { - $sErrorMessage = 'Les caract&egrav;res HTML sont interdits dans les noms et prénoms'; - } - elseif($sPass != $asData['pass2']) - { - $sErrorMessage = 'Les mots de passes ne sont pas les mêmes'; - } - elseif($bExistingUser) - { - $sErrorMessage = 'Il existe déjà un compte ayant ce nom et ce prénom dans la base de données'; - } - - if($sErrorMessage != '') - { - addMessage(getError($sErrorMessage)); - } - else - { - $iUserId = insertRow(USER_TABLE, array($sFirstName, $sLastName, $asData['grade'], $asData['class'], encryptPassword($sPass), 0)); - addMessage(getSuccess('Félicitation '.$sFirstName.' '.$sLastName.' ! Votre compte est créé')); - addFeed('CREATE', $iUserId, USER_TABLE, $sFirstName.' '.$sLastName, '', 0, $sFirstName.' '.$sLastName); - return logMeIn($sLastName, $sFirstName, $sPass); - } - return false; -} -function isAdmin($iUserId=false) -{ - if(!checkSession()) //not connected or wrong id - { - $bIsAdmin = false; - } - else - { - $iUserId = ($iUserId===false)?$_SESSION['user']:$iUserId; - $bIsAdmin = selectValue(USER_TABLE, 'admin', $iUserId); - } - return $bIsAdmin; -} -function isAuthorizedPage($sPage) -{ - $asAuthorizedPages = array('install', 'register', 'qcmProcess', 'qcmResults', 'rss'); - return in_array($sPage,$asAuthorizedPages); -} -function isAdminOnlyPage($sPage) -{ - $asAdminOnlyPages = array('account_admin', 'statsAdmin', 'test', 'version', 'backUpCreator', 'buildCsv', 'download', 'search'); - return in_array($sPage, $asAdminOnlyPages); -} -function setSession($asUser) -{ - if(!is_array($asUser)) - { - $asUser = selectRow(USER_TABLE, array($asUser)); - } - $_SESSION['user'] = $asUser['id_user']; - $_SESSION['lastName'] = $asUser['user_last_name']; - $_SESSION['firstName'] = $asUser['user_first_name']; - $_SESSION['grade'] = $asUser['grade']; - $_SESSION['class'] = $asUser['class']; - $_SESSION['sessionId'] = getSessionId(); -} -function checkSession() -{ - return array_key_exists('user', $_SESSION) - && is_numeric($_SESSION['user']) - && array_key_exists('sessionId', $_SESSION) - && $_SESSION['sessionId'] == getSessionId(); -} -function getSessionId() -{ - return encryptPassword($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR']); -} -function checkOrigin($sPrevPage, $asExtraCheck=array()) -{ - $asUrlParts = parse_url(array_key_exists('HTTP_REFERER', $_SERVER)?$_SERVER['HTTP_REFERER']:''); - parse_str(array_key_exists('query', $asUrlParts)?$asUrlParts['query']:'', $asUrlVariables); - - $bExtraCheck = true; - $asExtraCheck['page'] = $sPrevPage; - foreach($asExtraCheck as $sGetVar=>$sGetValue) - { - if(!isset($asUrlVariables[$sGetVar]) || $asUrlVariables[$sGetVar]!=$sGetValue) - { - $bExtraCheck = false; - break; - } - } - - return $bExtraCheck; -} - -//encoding functions -function encryptPassword($sPass) -{ - return md5(shuffleText($sPass)); -} -function checkPassword($sClearPass,$sEncodedPass) -{ - return encryptPassword($sClearPass) == $sEncodedPass; -} -function encodeUrl($sUrl) -{ - return base64_encode(serialize(explode("\n", shuffleText($sUrl)))); -} -function decodeUrl($sEncodedUrl) -{ - return shuffleText(implode("\n", unserialize(base64_decode($sEncodedUrl)))); -} -function shuffleText($sText) -{ -/* - $sRandomText = <<< RANDTEXT - let's_mess%a&bit;with~it,!just§for¨the^sake*of-it -RANDTEXT; -*/ - $sRandomText = "let's_mess%a&bit;with~it,!just§for¨the^sake*of-it"; - for($iIndex=0; $iIndex < strlen($sText); $iIndex++) - { - $sText[$iIndex] = $sRandomText[$iIndex%strlen($sRandomText)] ^ $sText[$iIndex]; - } - return $sText; -} -function cleanPost(&$asData) -{ - //get rid of magic quotes - if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) - { - cleanData($asData, 'stripslashes'); - } -} -function cleanData(&$oData, $sCleaningFunc) -{ - if(!is_array($oData)) - { - $oData = call_user_func($sCleaningFunc, $oData); - } - elseif(count($oData)>0) - { - $asKeys = array_map($sCleaningFunc, array_keys($oData)); - $asValues = array_map($sCleaningFunc, $oData); - $oData = array_combine($asKeys, $asValues); - } -} - -/* HTML Display Functions */ - -//Global application messages -function addMessage($sMessage) -{ - if(!isset($_SESSION['message'])) - { - $_SESSION['message'] = ''; - } - $_SESSION['message'] .= $sMessage; -} -function getCleanMessage() -{ - $sMessage = ''; - if(isset($_SESSION['message'])) - { - $sMessage = $_SESSION['message']; - unset($_SESSION['message']); - } - return $sMessage; -} - -//Error / Success handling -function getError($oMessage=false, $bSqlError=false, $bDie=false) -{ - if(!$oMessage) - { - $oMessage = 'Une erreur inconnue est apparue'; - } - $sErrorMessage = getParagraph($oMessage, 'error', 'Erreur '.($bSqlError?'SQL ':'').'!'); - if($bDie) - { - echo $sErrorMessage; - die('die() called by '.__FUNCTION__); - } - else - { - return $sErrorMessage; - } -} -function getWarning($sText) -{ - return getParagraph($sText, 'warning', 'Attention :'); -} -function getSuccess($sText) -{ - return getParagraph($sText, 'success'); -} -function getNotice($sText) -{ - return getParagraph($sText, 'notice'); -} - -//compute HTML -function getImage($sSrc, $sAlt='', $sClass='', $sStyle='', $asExtraAttr=array()) -{ - $sAlt = ($sAlt=='')?basename($sSrc):$sAlt; - $asExtraAttr = array_merge(array('src'=>$sSrc, 'alt'=>$sAlt), $asExtraAttr); - return getHtml('', 'img', $sClass, $sStyle, $asExtraAttr, true); -} -function getA($sLink, $oText, $sTitle='', $sClass='', $sStyle='', $asExtraAttr=array()) -{ - $asExtraAttr = array_merge(array('href'=>$sLink, 'title'=>$sTitle), $asExtraAttr); - return getHtml($oText, 'a', $sClass, $sStyle, $asExtraAttr); -} -function getParagraph($oText, $sClass='', $sTitle='') -{ - $sComments = ''; - if(is_array($oText)) - { - $sFirstLine = array_shift($oText); - $iLine=0; - foreach($oText as $sCommentTitle=>$sLine) - { - if(!is_numeric($sCommentTitle)) - { - $sCommentTitle = getHtml($sCommentTitle, 'span', '', 'font-weight:bold;').' : '; - } - else - { - $sCommentTitle = ''; - } - $sComments .= "\n".getHtml($sCommentTitle.$sLine, 'p', ($iLine==0)?'notice':''); - $iLine++; - } - } - else - { - $sFirstLine = $oText; - } - $sTitle = getHtml($sTitle.' '.$sFirstLine, 'p', $sClass); - return getHtml($sTitle.$sComments, 'div', $sClass.' rounded'); -} -function getHtml($oText, $sTag, $sClass='', $sStyle='', $asExtraAttr=array(), $bAutoClose=false, $sInter='') -{ - if($sClass!='') - { - $asExtraAttr['class'] = $sClass; - } - if($sStyle!='') - { - $asExtraAttr['style'] = $sStyle; - } - $sHtmlAttr = ''; - foreach($asExtraAttr as $sAttrName=>$sAttrValue) - { - $sHtmlAttr .= ' '.$sAttrName.'="'.$sAttrValue.'"'; - } - if($bAutoClose) - { - return encapsulate('', "\n".'<'.$sTag.$sHtmlAttr, ' />'); - } - else - { - return encapsulate($oText, "\n".'<'.$sTag.$sHtmlAttr.'>', '', $sInter); - } -} -function encapsulate($oText, $sPre='', $sPost=false, $sInter='') -{ - if($sPost===false) - { - $sPost = $sPre; - } - if(is_array($oText)) - { - $oText = implode($sPost.$sInter.$sPre, $oText); - } - return $sPre.$oText.$sPost; -} -function implodeAll($asText, $asKeyValueSeparator='', $sRowSeparator='', $sKeyPre='', $sValuePost=false) -{ - if($sValuePost===false) - { - $sValuePost = $sKeyPre; - } - $asCombinedText = array(); - - //if unique value for key value separator - if(!is_array($asKeyValueSeparator)) - { - $asKeyValueSeparator = array_combine(array_keys($asText), array_fill(0, count($asText), $asKeyValueSeparator)); - } - - foreach($asText as $sKey=>$sValue) - { - $asCombinedText[] = $sKeyPre.$sKey.$asKeyValueSeparator[$sKey].$sValue.$sValuePost; - } - return implode($sRowSeparator, $asCombinedText); -} -function getSelect($asListe, $sOptionIdKey, $sOptionDescKey='', $asAddedValues=array(), $sSelectedValue='', $sFormName='') -{ - $asOptions = array(); - $asOptionsHtml=''; - $sSelectName = str_replace('id_', '', $sOptionIdKey); - if($sOptionDescKey=='') - { - $sOptionDescKey = $sOptionIdKey; - } - foreach($asListe as $asListValues) - { - $asOptions[$asListValues[$sOptionIdKey]] = $asListValues[$sOptionDescKey]; - } - if(count($asAddedValues)>0) - { - $asOptions += $asAddedValues; - } - ksort($asOptions); - foreach($asOptions as $sOptionId=>$sOptionDesc) - { - $asOptionsHtml .= "\n".''; - } - $sAutoSubmit = ($sFormName!='')?' onchange="document.forms[\''.$sFormName.'\'].submit();"':''; - return ''; -} -function getMenu($sRequestedPage, $bAdmin) -{ - $sDisplayMenu = ''; - switch($sRequestedPage) - { - case 'logon': - $sCurrentPage = DEFAULT_LOGGED_PAGE; - break; - case 'qcmProcess': - $sCurrentPage = 'qcmCreator'; - break; - default: - $sCurrentPage = $sRequestedPage; - } - $asMenuItems = array('Accueil' => DEFAULT_LOGGED_PAGE, 'Créer un nouveau QCM' => 'qcmCreator', 'Compte' => 'account', 'Notes' => 'stats'); - if(isset($_SESSION['user'])) - { - if($bAdmin) - { - $asMenuItems['Back-up'] = 'backUpCreator'; - $asMenuItems['Notes'] = 'statsAdmin'; - $asMenuItems['Compte'] = 'account_admin'; - } - $asMenuItems['Déconnexion'] = 'logout'; - } - foreach ($asMenuItems as $sMenuItem => $sItemLink) - { - $sClass = 'top-left-rounded top-right-rounded'.(($sCurrentPage == $sItemLink)?' current':''); - $sDisplayMenu .= getA('?page='.$sItemLink, $sMenuItem, getPageDescription($sItemLink) , $sClass)."\n"; - } - return $sDisplayMenu; -} -function getClasses($aiClass=array(), $sFormName='') -{ - $iUserGrade = isset($aiClass['grade'])?$aiClass['grade']:''; - $iUserClass = isset($aiClass['class'])?$aiClass['class']:''; - $sAutoSubmit = ($sFormName!='')?' onchange="document.forms[\''.$sFormName.'\'].submit();"':''; - $sSelects = ' ème '; -} -function getChangelogTypeSelect($iChangeLogId=false, $sTypeSelected='') -{ - if(!$iChangeLogId) - { - $sStyle = ''; - $iChangeLogId = '0'; - $sChangelogAction = 'addChangelog'; - } - else - { - $sStyle = 'class="nude" '; - $sChangelogAction = 'modifyChangelog'; - } - $sSelectType = ''; -} -function getOutOfForm($iOutOf=20, $bSelectOnly=true, $sAction='', $sText='Note') -{ - $sFormStart = $sFormEnd = $sClass = $sOnChange = ''; - if(!$bSelectOnly) - { - if($sAction=='') - { - $sAction = $_SERVER['REQUEST_URI']; - } - $sFormStart = '
'.$sText.' sur '; - $sFormEnd = '
'; - $sClass = ' class="mergeWithTh"'; - $sOnChange = ' onchange="outof.submit();"'; - } - foreach(array(5, 10, 20, 100) as $iOptionId) - { - $sSeleted = ($iOptionId==$iOutOf)?' selected':''; - $asHtmlOptions[] = ''; - } - $sHtmlSelect = ''.implode($asHtmlOptions).''; - return $sFormStart.$sHtmlSelect.$sFormEnd; -} - -/* User Environment Functions */ - -function getElapsedTime($sStartTime) -{ - list($iCurrentMilli, $iCurrentSeconde, $iStartMilli, $iStartSeconde) = explode(' ', microtime().' '.$sStartTime); - return round($iCurrentSeconde + $iCurrentMilli -($iStartSeconde + $iStartMilli), 4); -} -function getOS() -{ - $sUserAgent = strtolower($_SERVER['HTTP_USER_AGENT']); - if(strpos($sUserAgent, 'mac')!==false || strpos($sUserAgent, 'apple')!==false) - { - $sUserOS = OS_MAC; - } - elseif(strpos($sUserAgent, 'windows')!==false) - { - $sUserOS = OS_WINDOWS; - } - else - { - $sUserOS = OS_LINUX; - } - return $sUserOS; -} -function getBrowser() -{ - $sUserAgent = strtolower($_SERVER['HTTP_USER_AGENT']); - $asBrowsers = array('msie', 'firefox', 'opera', 'safari', 'chrome'); - foreach($asBrowsers as $sBrowser) - { - if(strpos($sUserAgent, $sBrowser)!==false) - { - break; - } - } - return $sBrowser; -} -function feedback($sMessage) -{ - if(FEEDBACK_MAIL != '') - { - $sHtmlMessage = getHtml('Erreur SQL', 'h2').'
'.getHtml('User Id:'.$_SESSION['user'].' at '.date('r'), 'em').'
'.$sMessage; - $sPlainMessage = strip_tags(str_replace('
', "\n", $sMessage)); - - $iBoundary = uniqid("HTMLEMAIL"); - $sHeaders = 'From: feedback@'.DOMAIN."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: multipart/alternative;'. - 'boundary = '.$iBoundary."\r\n\r\n". - 'MIME encoded Message'. - '--'.$iBoundary."\r\n". - 'Content-Type: text/plain; charset=ISO-8859-1'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n\r\n". - chunk_split(base64_encode($sPlainMessage)). - '--'.$iBoundary."\r\n". - 'Content-Type: text/html; charset=ISO-8859-1'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n\r\n". - chunk_split(base64_encode($sHtmlMessage)); - - @mail(FEEDBACK_MAIL, 'SQL Error', '', $sHeaders); - } -} - -/* File Functions */ - -function remote($iActionId) -{ - if($iActionId==CREATE_NEW_BACKUP || $iActionId==ACCESS_POINT_NEW_VERSION) - { - createBackUp(true); - } - if($iActionId==ACCESS_POINT_LAST_VERSION || $iActionId==ACCESS_POINT_NEW_VERSION) - { - return download(encodeUrl(getLastBackUp('fileName')), array('sql')); - } -} -function download($sEncodedFilePath, $asAuthExt) -{ - if($sEncodedFilePath=='' || count($asAuthExt)==0) - { - relocate(getError('Informations incomplètes sur le fichier')); - } - $sFileName = basename(decodeUrl($sEncodedFilePath)); - $sFilePath = BACKUP_FOLDER.$sFileName; - $sFileFullPath = dirname($_SERVER['SCRIPT_FILENAME'])."/".$sFilePath; - - if(!in_array(getExtension($sFileName), $asAuthExt)) - { - relocate(getError('Fichier interdit : '.$sFileName)); - } - elseif(!file_exists($sFilePath)) - { - relocate(getError('Fichier introuvable : '.$sFileName)); - } - else - { - //get mime type - if(class_exists('finfo')) - { - $oFileInfo = new finfo(FILEINFO_MIME); - $sMimetype = $oFileInfo->file($sFileFullPath); - } - else - { - $sMimetype = 'application/force-download'; - } - - //set headers - header('Pragma: public'); - header('Expires: 0'); - header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); - header('Cache-Control: public'); - header('Content-Description: File Transfer'); - header('Content-Type: '.$sMimetype); - header('Content-Disposition: attachment; filename='.$sFileName); - header('Content-Transfer-Encoding: binary'); - header('Content-Length: '.filesize($sFilePath)); - - // download - if ($oFile = @fopen($sFilePath, 'rb')) - { - while(!feof($oFile)) - { - print(fread($oFile, 1024*8)); - flush(); - if(connection_status() != 0) - { - @fclose($oFile); - } - } - @fclose($oFile); - } - } - return true; -} -function generateCsv($sFile, $sContent) -{ - if($sFile=='' || $sContent=='') - { - relocate(getError('Informations incomplètes sur le fichier')); - } - else - { - $asCsvContent = unserialize(urldecode($sContent)); - $sCsvFileName = $sFile.'_'.date(FILE_DATE_FORMAT).'.csv'; - $oCsvFile = fopen(BACKUP_FOLDER.$sCsvFileName, 'w'); - if(!$oCsvFile) - { - relocate(getError(array('Impossible d\'écrire dans le dossier : '.BACKUP_FOLDER, 'Vérifiez les droits d\'écriture'))); - } - else - { - foreach($asCsvContent as $asCsvLine) - { - fputs($oCsvFile, implode('|', $asCsvLine)."\n"); - } - fclose($oCsvFile); - return encodeUrl($sCsvFileName); - } - } -} -function resizeRenameImage($sFilePath, $sNewFileName) -{ - list($iWidth, $iHeight) = getimagesize($sFilePath); - - $sExt = getExtension($sFilePath); - $sNewFilePath = IMAGE_FOLDER.$sNewFileName.'.'.$sExt; - - if($iWidth>MAX_IMAGE_WIDTH) - { - //new sizes - $iResizedWidth = MAX_IMAGE_WIDTH; - $iResizedHeight = ($iResizedWidth / $iWidth) * $iHeight; - - //create image from source - $oSource = call_user_func('imagecreatefrom'.$sExt, $sFilePath); - - //Resize - $oThumb = imagecreatetruecolor($iResizedWidth, $iResizedHeight); - imagecopyresized($oThumb, $oSource, 0, 0, 0, 0, $iResizedWidth, $iResizedHeight, $iWidth, $iHeight); - - //Save - call_user_func_array('image'.$sExt, array($oThumb, $sNewFilePath)); - } - else - { - rename($sFilePath, $sNewFilePath); - } - unlink($sFilePath); -} -function getExtension($sFileName) -{ - $sFileInfo = pathinfo($sFileName); - $sExt = strtolower($sFileInfo['extension']); - return $sExt=='jpg'?'jpeg':$sExt; -} - -/* Debug Functions */ - -function pre($sText, $sTitle='Test', $bDie=false, $bLog=false) -{ - if($bLog) - { - file_put_contents('log', ($sTitle!=''?$sTitle." :\n":'').print_r($sText, true)."\n\n"); - } - echo '
'.$sTitle.'
'.print_r($sText, true).'
'; - if($bDie) - { - die('[die() called by the test function '.__FUNCTION__.'()]'); - } -} -?> \ No newline at end of file diff --git a/current_version/.svn/text-base/frontal.php.svn-base b/current_version/.svn/text-base/frontal.php.svn-base deleted file mode 100644 index 159b2f3..0000000 --- a/current_version/.svn/text-base/frontal.php.svn-base +++ /dev/null @@ -1,140 +0,0 @@ -#qcmName#', 'Voulez-vous vraiment #qcmAction# le QCM : "#qcmName#" ?'); -$oEditInputBox = new InputBox( 'Modification du QCM : #qcmName#', - 'Voulez-vous faire une copie du QCM : "#qcmName#" avant de le modifier ?', - array('Oui'=>'goTo(\'?page=qcmCreator&qcm=#idQcm#©Qcm=1\')', 'Non'=>'goTo(\'?page=qcmCreator&qcm=#idQcm#©Qcm=0\')')); - -//display valid and not valid (unfinished) QCM -$asParams = array - ( - 'notValid' => array - ( - 'title' => 'QCM non finalisés', - 'valid' => '0', - 'displayConstraint' => $bAdmin?array():array('id_'.USER_TABLE=>$_SESSION['user']), - 'goTo' => 'Creator', - 'copyQcm' => false, - 'deleteAction' => 'deleteQcm', - 'deleteTitle' => 'Supprimer', - 'editTitle' => 'Activer' - ), - 'valid' => array - ( - 'title' => 'QCM disponibles', - 'valid' => '1', - 'displayConstraint' => array(), - 'goTo' => 'Reader', - 'copyQcm' => true, - 'deleteAction' => 'desactivateQcm', - 'deleteTitle' => 'Désactiver', - 'editTitle' => 'Editer' - ) - ); - -foreach($asParams as $sParamName => $asParamValues) -{ - $asConstraints = array_merge(array('valid'=>$asParamValues['valid']), $asParamValues['displayConstraint']); - $asQcms = selectRows(array('from'=>QCM_TABLE, 'constraint'=>$asConstraints)); - $iTotal = 0; - if(count($asQcms) > 0) - { - $asDisplay[$sParamName] = '

'.$asParamValues['title'].' :

- - - - - - - - '; - - foreach($asQcms as $asQcmRow) - { - $iQcmId = $asQcmRow['id_'.QCM_TABLE]; - - //link to the QCM - $asDisplay[$sParamName] .= ''; - - //get author info - $asAuthorInfo = selectRow(USER_TABLE, array($asQcmRow['id_'.USER_TABLE]), array(USER_TABLE.'_first_name', USER_TABLE.'_last_name')); - $asDisplay[$sParamName] .= ''; - - if($asQcmRow['id_user']==$_SESSION['user'] || $bAdmin) - { - $sFormName = 'form'.$iQcmId; - - //set input box properties - $oDeleteInputBox->setTags(array('formName'=>$sFormName, 'qcmName'=>$asQcmRow[QCM_TABLE], 'qcmAction'=>$asParamValues['deleteTitle'])); - $oEditInputBox->setTags(array('idQcm'=>$iQcmId, 'qcmName'=>$asQcmRow[QCM_TABLE])); - - - if($sParamName=='valid') - { - $sEdition = ''; - } - else - { - $sEdition = ' - - - '; - } - - - $asDisplay[$sParamName] .= ' - '; - } - else - { - $asDisplay[$sParamName] .= ''; - } - $iTotal++; - } - $asDisplay[$sParamName] .= '
nom du QCMAuteurDernière modification'.$asParamValues['editTitle'].' le QCM'.$asParamValues['deleteTitle'].' le QCM

'.$asQcmRow[QCM_TABLE].'

'.ucwords($asAuthorInfo[USER_TABLE.'_first_name']).' '.ucwords($asAuthorInfo[USER_TABLE.'_last_name']).'

'.date('d/m/Y H:i:s', strtotime($asQcmRow['led'])).'

'.$sEdition.' -
- - -
-
Un total de '.$iTotal.' QCM
'; - if($iTotal==0) - { - unset($asDisplay[$sParamName]); - } - next($asParams); - } - elseif($sParamName == 'valid') - { - $asDisplay[$sParamName] = getNotice('Aucun Qcm n\'est disponible'); - } -} -echo implode("\n",$asDisplay); -echo $oDeleteInputBox->getHtml(); -echo $oEditInputBox->getHtml(); -?> \ No newline at end of file diff --git a/current_version/.svn/text-base/functions.js.svn-base b/current_version/.svn/text-base/functions.js.svn-base deleted file mode 100644 index ccb8c32..0000000 --- a/current_version/.svn/text-base/functions.js.svn-base +++ /dev/null @@ -1,143 +0,0 @@ -/* JavaScript Document. summoned by index.php */ - -function emptyBox(id) -{ - if(document.forms['qcmCreator'].elements[id].value == "Tapez ici la question..." || document.forms['qcmCreator'].elements[id].value == "Tapez ici une reponse...") - { - document.forms['qcmCreator'].elements[id].value = ""; - } -} - -function goTo(url) -{ - window.location.href = url; -} - -function setFocus(id, element) -{ - if(!element) - { - document.getElementById(id).focus(); - } - else - { - document.forms[id].elements[element].focus(); - } -} - -function setSelection(form, element) -{ - document.forms[form].elements[element].select(); -} - -function submitForm(formName) -{ - document.forms[formName].submit(); -} - -function validateBackUp(id) -{ - document.forms['restore'].backUpId.value = id; - submitForm('restore'); -} - -document.onmousemove = setXY; - -function mouseX(evt) -{ - if (evt.pageX) - { - return evt.pageX; - } - else if (evt.clientX) - { - return evt.clientX + (document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft); - } - else return null; -} - -function mouseY(evt) -{ - if (evt.pageY) - { - return evt.pageY; - } - else if (evt.clientY) - { - return evt.clientY + (document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop); - } - else return null; -} - -function setXY(evt) -{ - X = mouseX(evt); - Y = mouseY(evt); -} - -function hover(id, forceSet) -{ - var className = document.getElementById(id).className; - var index = className.indexOf('Hover'); - if(index === -1 && (!forceSet || forceSet=='y')) - { - document.getElementById(id).className = className+" "+className+"Hover"; - } - else if(index !== -1 && (!forceSet || forceSet=='n')) - { - var spacePos = className.indexOf(' '); - document.getElementById(id).className = className.substring(0, spacePos); - } -} - -function disableBox(form, element, forceSet) -{ - if(!forceSet) - { - document.forms[form].elements[element].disabled = !document.forms[form].elements[element].disabled; - } - else - { - document.forms[form].elements[element].disabled = (forceSet=='y')?true:false; - } - if(document.getElementById(element+'Delete')) - { - hover(element+'Delete', forceSet); - } - return document.forms[form].elements[element].disabled?'y':'n'; -} -function disableDiv(id, forceSet) -{ - var className = document.getElementById(id).className; - var index = className.indexOf('Disabled'); - if(index === -1 && (!forceSet || forceSet=='y')) - { - document.getElementById(id).className = className+"Disabled"; - } - else if(!forceSet || forceSet=='n') - { - document.getElementById(id).className = className.replace(/Disabled/g, ""); - } - return (document.getElementById(id).className.indexOf('Disabled')===-1)?'n':'y'; -} -function setBoxDisplay(id, forceSet) -{ - if(!forceSet) - { - document.getElementById(id).style.display = (document.getElementById(id).style.display=='none')?'':'none'; - } - else - { - document.getElementById(id).style.display = (forceSet=='y')?'':'none'; - } -} - -function concatenateKeyWords(keywords) -{ - return keywords.replace(/ /g, '+'); -} - -function replaceInnerText(id, newText) -{ - document.getElementById(id).innerHTML = newText; -} \ No newline at end of file diff --git a/current_version/.svn/text-base/index.php.svn-base b/current_version/.svn/text-base/index.php.svn-base deleted file mode 100644 index aae9d86..0000000 --- a/current_version/.svn/text-base/index.php.svn-base +++ /dev/null @@ -1,156 +0,0 @@ - - Recherche - '; -} -$sConnectedUser = $bConnected?'Connecté : '.getHtml(ucwords($_SESSION['firstName'].' '.$_SESSION['lastName']), 'strong'):'Non connecté'; -$asInfoDisplay['connectedUser'] = getHtml($sConnectedUser, 'p', 'connectedUser rounded'); -$asGeneralDisplay['info'] = getHtml(getHtml(getHtml($asInfoDisplay, 'td', 'blank', 'padding:0;width:33%;'), 'tr'), 'table', 'maxWidth', 'border-spacing:0;'); - -//display browser warning -if(getBrowser() == 'msie') -{ - $asGeneralDisplay['main']['browser'] = getWarning(array('Le navigateur Internet Explorer est déconseillé pour cette application', - 'Nous vous conseillons un navigateur optimisé (et gratuit) tel que - Firefox')); -} - -/** - * Get included file - * Available variables within file: - * $bNoTemplate Boolean Display the application template - * $oConnection Object Database connection handle - * $iUserId Integer User Id (===false is not connected) - * $bAdmin Boolean Is the current user an admin - * $sPage String Page displayed - * $sScriptStartTime String  Time at which the script started to be executed - */ -$bNoTemplate = false; -ob_start(); -require_once($sPagePath); -$asGeneralDisplay['main']['file'] = ob_get_clean(); - -//display message -$asGeneralDisplay['message'] = getCleanMessage(); -if($bAdmin && $sPage==DEFAULT_LOGGED_PAGE) -{ - $asGeneralDisplay['message'] .= getCleanPublication($iUserId); -} - -//display included file -if($bNoTemplate) -{ - echo $asGeneralDisplay['main']['file']; - die(); -} - -//display Menu -$asGeneralDisplay['menu'] = getMenu($sPage, $bAdmin); - -//display footer -$sLogLink = 'Version '.CURRENT_VERSION; -$asGeneralDisplay['rss'] = ''; -if($bAdmin) -{ - $sLogLink = getA('?page=version', $sLogLink, 'changelog et téléchargement'); - $asGeneralDisplay['rss'] = getHtml(getA('?page=rss', getImage('images/feedIcon.png', 'flux rss'), 'flux rss'), 'p'); -} -$asGeneralDisplay['version'] = $sLogLink; - -//close SQL connection -if($oConnection) -{ - mysql_close($oConnection); -} - -//combine main part -$asGeneralDisplay['main'] = $asGeneralDisplay['message']."\n".implode("\n", $asGeneralDisplay['main']); - -?> - - - - - - - - - - - QCM - <?php echo $sPageDesc; ?> - - - preloaded image - preloaded image - - - -
-
-
- -
- - - \ No newline at end of file diff --git a/current_version/.svn/text-base/install.php.svn-base b/current_version/.svn/text-base/install.php.svn-base deleted file mode 100644 index d8726f2..0000000 --- a/current_version/.svn/text-base/install.php.svn-base +++ /dev/null @@ -1,154 +0,0 @@ - $_POST['DB_SERVER'], - 'DB_LOGIN' => $_POST['DB_LOGIN'], - 'DB_PASS' => $_POST['DB_PASS'], - 'DB_NAME' => $_POST['DB_NAME'], - 'FEEDBACK_MAIL' => $_POST['FEEDBACK_MAIL'], - 'MAX_CLASS' => $_POST['MAX_CLASS'], - 'MIN_GRADE' => $_POST['MIN_GRADE'], - 'MAX_GRADE' => $_POST['MAX_GRADE'], - 'READY_TO_USE' => $_POST['READY_TO_USE']); - $sSettingsFile = ''; - if(file_put_contents(SETTINGS_FILE, $sSettingsFile, FILE_APPEND)) - { - relocate(getSuccess('Installation terminée')); - } - else - { - addMessage(getError(array('Création de fichier impossible', 'Vérifier les droits sur le dossier principal'))); - } - } - } -} -else -{ - logMeOut(false); -} - -if(file_exists(SETTINGS_FILE)) -{ - $sDbServer = DB_SERVER; - $sDbLogin = DB_LOGIN; - $sDbName = DB_NAME; - $sFeedBackMail = FEEDBACK_MAIL; - $iMaxClass = MAX_CLASS; - $iMinGrade = MIN_GRADE; - $iMaxGrade = MAX_GRADE; -} - -//TODO getHtmlTable() -?> -

Bienvenue dans QcmMaker v !

-

Veuillez entrer les informations suivantes :

-
-
- Informations server - - - - - - - - - - - - - - - - - - - - - -
Adresse de votre server
login MySql
Mot-de-passe MySql
Nom de la base de données
Supprimer la base de données '' (si existante)
-
-
- Informations administrateur - - - - - - - - - - - - - - - - - - - - - - -
Création du compte administrateur
Prénom
Nom de famille
Mot de passe
Mot de passe (une nouvelle fois)
Adresse email de votre administrateur (optionel)
-
-
- Paramètres supplémentaires - - - - - - - - - - - - - - -
Nombre de classes maximum par section
Première section concernéeème
Dernière section concernéeème
-
-

-
diff --git a/current_version/.svn/text-base/log.svn-base b/current_version/.svn/text-base/log.svn-base deleted file mode 100644 index 6fce327..0000000 --- a/current_version/.svn/text-base/log.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -data : -INSERT /* config.php 830 */ - INTO changelog (`led`, `version`, `type`, `changelog`, `progress`) - VALUES ('0000-00-00 00:00:00', 0.1, 'new feature', 'Création de QCM', 1) - diff --git a/current_version/.svn/text-base/logon.php.svn-base b/current_version/.svn/text-base/logon.php.svn-base deleted file mode 100644 index de2685e..0000000 --- a/current_version/.svn/text-base/logon.php.svn-base +++ /dev/null @@ -1,19 +0,0 @@ -
- - - - - - - - - - - - - - - - -
Connexion
Prénom
Nom
Mot de passe
Créer un compte
-
\ No newline at end of file diff --git a/current_version/.svn/text-base/qcmCreator.php.svn-base b/current_version/.svn/text-base/qcmCreator.php.svn-base deleted file mode 100644 index 0336e43..0000000 --- a/current_version/.svn/text-base/qcmCreator.php.svn-base +++ /dev/null @@ -1,278 +0,0 @@ -cloneQcm()->iQcmId; - } - */ - - $bEdition=true; - $asQcm = getQcm($iQcmId); - $sQcmName = isset($asQcm[QCM_TABLE])?$asQcm[QCM_TABLE]:''; - $sQcmAuthorId = isset($asQcm['id_'.USER_TABLE])?$asQcm['id_'.USER_TABLE]:''; - $asQuestions = isset($asQcm[QUESTION_TABLE])?$asQcm[QUESTION_TABLE]:array(); - - foreach($asQuestions as $iQuestionId => $asAnswers) - { - $asDisplayAnswers = $asDisplayRightAnswers = array(); - $iNbAnswers = 0; - $iNbQuestions++; - $sQuestion = $asAnswers[QUESTION_TABLE]; - - //image - $sImageName = $asAnswers['image']; - if($sImageName!='') - { - $sImage = getImage(IMAGE_FOLDER.$sImageName, '', '', '', array('id'=>'question'.$iQuestionId.'imageSrc')); - $sXButton = 'X'; - $sImage = $sXButton.getHtml($sImage, 'div', 'qcmReader', '', array('id'=>'question'.$iQuestionId.'imageDiv')); - $sImageDiv = getInputHtml('Image', array($sImage, 'Remplacer par une nouvelle image', '', $iQuestionId)); - } - else - { - $sImageDiv = getInputHtml('Image', array('', ADD_IMAGE_TEXT, '', $iQuestionId)); - } - - if(array_key_exists(ANSWER_TABLE, $asAnswers) && count($asAnswers[ANSWER_TABLE])>0) - { - foreach($asAnswers[ANSWER_TABLE] as $iAnswerId => $asAnswer) - { - $iNbAnswers++; - $asDisplayAnswers[$iAnswerId] = getInputHtml('Answer', array($iQuestionId, $iAnswerId, '', $asAnswer[ANSWER_TABLE])); - $asDisplayRightAnswers[$iAnswerId] = getInputHtml('RightAnswer', array($iQuestionId, $iAnswerId, '', $asAnswer[RIGHT_ANSWER]?' CHECKED':'')); - } - } - $asAnswersCurrentState[] = getInputHtml('CurrentAnswer', array($iQuestionId, $iNbAnswers)); - $asDisplayQuestions[] = getInputHtml('Question', array($iNbQuestions, '', $iQuestionId, $sQuestion, implode($asDisplayAnswers), implode($asDisplayRightAnswers), $sImageDiv)); - $sAdditionalBoxesScript .= 'addAnswer('.$iQuestionId.');'; - } - - //check Qcm - if(!checkOrigin('qcmCreator')) - { - checkQcm($iQcmId); - } -} -?> - -
- - - - - - - - - - - -

Nom du QCM :

 
Libellé de la questionRéponses possiblesBonne(s) réponse(s)
- - - - - - - -
une fois les questions complétées, cliquez sur le bouton 'Créer le QCM'
- - - - - -   - " /> -
-
- - \ No newline at end of file diff --git a/current_version/.svn/text-base/qcmProcess.php.svn-base b/current_version/.svn/text-base/qcmProcess.php.svn-base deleted file mode 100644 index 95f9336..0000000 --- a/current_version/.svn/text-base/qcmProcess.php.svn-base +++ /dev/null @@ -1,121 +0,0 @@ -$_POST['author'], QCM_TABLE=>$sQcmName); - $iQcmId = $bNewQcm?insertRow(QCM_TABLE, $asData):updateRow(QCM_TABLE, $_POST['id_'.QCM_TABLE], $asData); - setQcmValidity($iQcmId, false); - - //feed - $iRefFeedId = addFeed($bNewQcm?'CREATE':'MODIFY', $iQcmId, QCM_TABLE, $sQcmName); - - //Add the QCM questions, images & answers to the database - $asQuestionIds = $asFeedIds = array(); - foreach($_POST as $sKey => $sValue) - { - $asDataKeys = parseQuestion($sKey); - if($asDataKeys && $sValue!=DEFAULT_QUESTION_INPUT && $sValue!=DEFAULT_ANSWER_INPUT) - { - $bNew = (strpos($sKey, 'new') !== false); - $iQuestionId = $asDataKeys[QUESTION_TABLE]; - switch(count($asDataKeys)) - { - case 1: //Add a question + image - $asData = array($iQcmId, $sValue); - if($bNew) - { - $asQuestionIds[$iQuestionId] = insertRow(QUESTION_TABLE, $asData); - } - else - { - $asQuestionIds[$iQuestionId] = updateRow(QUESTION_TABLE, $iQuestionId, $asData); - } - $asFeedIds[$iQuestionId] = addFeed($bNew?'CREATE':'MODIFY', $iRefFeedId, QUESTION_TABLE, $sValue, '', $iRefFeedId); - - //image - $sImageName = $_FILES[$sKey.'image']['name']; - if($sImageName!='') - { - $oError = uploadFile($_FILES[$sKey.'image'], IMAGE_FOLDER, array('jpg', 'jpeg', 'bmp', 'png')); - if(is_string($oError)) - { - addMessage($oError); - } - else - { - $sImageNewName = 'qcm'.$iQcmId.'question'.$asQuestionIds[$iQuestionId].'v'.date('dmYHis'); - resizeRenameImage(IMAGE_FOLDER.$sImageName, $sImageNewName); - $bNewImage = (selectValue(QUESTION_TABLE, 'image', $asQuestionIds[$iQuestionId])==''); - updateRow(QUESTION_TABLE, $asQuestionIds[$iQuestionId], array('image'=>$sImageNewName.'.'.getExtension($sImageName))); - addFeed($bNewImage?'CREATE':'MODIFY', $asFeedIds[$iQuestionId], 'image', $sImageNewName, '', $iRefFeedId); - } - } - break; - case 2: //Add an answer - //Add a question (empty) in the case of an answer without linked questions - if(!array_key_exists($iQuestionId, $asQuestionIds)) - { - $asQuestionIds[$iQuestionId] = insertRow(QUESTION_TABLE, array($iQcmId, '')); - } - $bRightAnswer = isset($_POST[$sKey.RIGHT_ANSWER.$asDataKeys[ANSWER_TABLE]])?'1':'0'; - $asData = array($asQuestionIds[$iQuestionId], $iQcmId, $sValue, $bRightAnswer); - if($bNew) - { - insertRow(ANSWER_TABLE, $asData); - } - else - { - updateRow(ANSWER_TABLE, $asDataKeys[ANSWER_TABLE], $asData); - } - addFeed($bNew?'CREATE':'MODIFY', $asFeedIds[$iQuestionId], ANSWER_TABLE, $sValue, '', $iRefFeedId); - break; - } - } - } - - //delete questions / images / answers - foreach(array_filter(explode(',', $_POST['deletedData'])) as $sDeletedItem) - { - $asDataKeys = parseQuestion($sDeletedItem); - if(strpos($sDeletedItem, 'new') === false && $asDataKeys!=false && count($asDataKeys)>0) - { - if(strpos($sDeletedItem, 'image')!==false) - { - $sImagePath = IMAGE_FOLDER.selectValue(QUESTION_TABLE, 'image', $asDataKeys[QUESTION_TABLE]); - updateRow(QUESTION_TABLE, $asDataKeys[QUESTION_TABLE], array('image'=>'')); - addFeed('DELETE', $asDataKeys[QUESTION_TABLE], 'image', $sImagePath, '', $iRefFeedId); - } - else - { - $sTable = (count($asDataKeys)==1)?QUESTION_TABLE:ANSWER_TABLE; - deleteRow($sTable, $asDataKeys[$sTable]); - addFeed('DELETE', $asDataKeys[$sTable], $sTable, $sImagePath, '', $iRefFeedId); - } - } - } - - //Check Qcm - if(checkQcm($iQcmId)) - { - setQcmValidity($iQcmId, true); - relocate(getSuccess('Modifications enregistrées'), 'qcmReader', array('qcm'=>$iQcmId)); - } - else - { - relocate('', 'qcmCreator', array('qcm'=>$iQcmId)); - } -} -?> \ No newline at end of file diff --git a/current_version/.svn/text-base/qcmReader.php.svn-base b/current_version/.svn/text-base/qcmReader.php.svn-base deleted file mode 100644 index 0e1fa40..0000000 --- a/current_version/.svn/text-base/qcmReader.php.svn-base +++ /dev/null @@ -1,60 +0,0 @@ - $asAnswers) - { - $asDisplayAnswers = $asDisplayRightAnswers = array(); - $iNbAnswers = 0; - $iNbQuestions++; - foreach($asAnswers[ANSWER_TABLE] as $iAnswerId => $asAnswer) - { - $iNbAnswers++; - $asDisplayAnswers[$iAnswerId] = '

'.$iNbAnswers.'. '.$asAnswer[ANSWER_TABLE].'

'; - $asDisplayRightAnswers[$iAnswerId] = getInputHtml('RightAnswer', array($iQuestionId, $iAnswerId, '', '')); - } - - $sImage = ($asAnswers['image']!='')?getHtml(getImage(IMAGE_FOLDER.$asAnswers['image']), 'div', 'qcmReader'):''; - $asDisplayQuestions[$iQuestionId] = ' - '.$iNbQuestions.'. - '.$asAnswers[QUESTION_TABLE].'
'.$sImage.' - '.implode("\n", $asDisplayAnswers).' - '.implode("\n", $asDisplayRightAnswers).' - '; - } -} -?> -
- - - - - - - - -

- - - -
-
\ No newline at end of file diff --git a/current_version/.svn/text-base/qcmResults.php.svn-base b/current_version/.svn/text-base/qcmResults.php.svn-base deleted file mode 100644 index 37cfbd7..0000000 --- a/current_version/.svn/text-base/qcmResults.php.svn-base +++ /dev/null @@ -1,81 +0,0 @@ -$_POST['qcm'])) || !isset($_POST['user'])) -{ - relocate(getError('Vous devez répondre à un QCM pour accéder à à la page de résultats')); -} -else -{ - //reconnect session - setSession($_POST['user']); - - //input Qcm data - $iQcmId = $_POST['qcm']; - $asQcm = getQcm($iQcmId); - $sQcmName = $asQcm[QCM_TABLE]; - - //display QCM results - $iNbRightAnswers = 0; - $iNbQuestions = getNbQuestions($iQcmId); - foreach($asQcm[QUESTION_TABLE] as $iQuestionId => $asQuestion) - { - $bAnswerUserResult = true; - $asDisplayRightResults = $asDisplayUserResults = ''; - $asDisplayResults[$iQuestionId] = ''.$asQuestion[QUESTION_TABLE].''; - foreach($asQuestion[ANSWER_TABLE] as $iAnswerId => $asAnswer) - { - $bUserAnswer = isset($_POST[QUESTION_TABLE.$iQuestionId.ANSWER_TABLE.$iAnswerId.RIGHT_ANSWER.$iAnswerId]); - $bRightAnswer = ($asAnswer[RIGHT_ANSWER] == '1'); - $bAnswerUserResult = ($bAnswerUserResult && $bUserAnswer==$bRightAnswer); - $asDisplayRightResults .= $asAnswer[RIGHT_ANSWER]?'

• '.$asAnswer[ANSWER_TABLE].'

':'' ; - $asDisplayUserResults .= $bUserAnswer?'

• '.$asAnswer[ANSWER_TABLE].'

':'' ; - - } - $asDisplayResults[$iQuestionId] .= ''.$asDisplayRightResults.''.$asDisplayUserResults.''; - if($bAnswerUserResult) - { - $asDisplayResults[$iQuestionId] .= "Vrai"; - $iNbRightAnswers++; - } - else - { - $asDisplayResults[$iQuestionId] .= "Faux"; - } - $asDisplayResults[$iQuestionId] .= ''; - } - - //Update results table - $sUpdateResult = ''; - $bplayed = checkPreviousResults($_SESSION['user'], $iQcmId); - if($bplayed) - { - $sUpdateResult = '(Votre note n\'a pas été enregistrée)'; - } - else - { - addResult($_SESSION['user'], $iQcmId, $iNbRightAnswers/$iNbQuestions); - addFeed('CREATE', $_SESSION['firstName'].' '.$_SESSION['lastName'], RESULT_TABLE, getTextFromId(QCM_TABLE, $iQcmId)); - } -} -?> - - - - - - - - - - - - - - - -

- Résultats

Question

Bonnes réponses

Vos réponses

Votre résultat

-

-

-
\ No newline at end of file diff --git a/current_version/.svn/text-base/register.php.svn-base b/current_version/.svn/text-base/register.php.svn-base deleted file mode 100644 index bad0dd1..0000000 --- a/current_version/.svn/text-base/register.php.svn-base +++ /dev/null @@ -1,36 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - -
Création de compte
Prénom
Nom de famille
Classe
Mot de passe
Mot de passe (une nouvelle fois)
- -    - -
-
\ No newline at end of file diff --git a/current_version/.svn/text-base/rss.php.svn-base b/current_version/.svn/text-base/rss.php.svn-base deleted file mode 100644 index 6abd890..0000000 --- a/current_version/.svn/text-base/rss.php.svn-base +++ /dev/null @@ -1,226 +0,0 @@ -FEED_TABLE, 'constraint'=>array('id_ref'=>'0'))); -$sRssFeedUrl = cleanRss('http://'.$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME'].'?page=rss'); -$asItems = array(); -foreach($asRssFeed as $asRssItem) -{ - $sTitle = $sDesc = ''; - switch($asRssItem['action']) - { - case 'CREATE': - $sTitle .= 'Création '; - switch($asRssItem['type']) - { - case 'database': - $sTitle .= 'd\'une nouvelle sauvegarde'; - $sDesc = 'Une nouvelle sauvegarde de la base de données "'.$asRssItem['source'].'" a été créée. - Chemin : '.$asRssItem['old_value']; - break; - case QCM_TABLE: - $sTitle .= 'd\'un QCM'; - $sDesc = 'Le QCM nommé "'.$asRssItem['old_value'].'" a été créé'; - break; - case QUESTION_TABLE: - $sTitle .= 'd\'une question'; - $sDesc = 'La question "'.$asRssItem['old_value'].'" a été créé'; - break; - case 'image': - $sTitle .= 'd\'une image'; - $sDesc = 'L\'image "'.$asRssItem['old_value'].'" a été ajouté'; - break; - case ANSWER_TABLE: - $sTitle .= 'd\'une proposition de réponse'; - $sDesc = 'La proposition de réponse "'.$asRssItem['old_value'].'" a été créé'; - break; - case RESULT_TABLE: - $sTitle .= 'd\'un résultat de qcm'; - $sDesc = 'L\'utilisateur "'.ucwords($asRssItem['source']).'" a répondu au qcm "'.$asRssItem['old_value'].'"'; - break; - case USER_TABLE: - $sTitle .= 'd\'un compte utilisateur'; - $sDesc = 'L\'utilisateur "'.ucwords($asRssItem['old_value']).'" s\'est enregistré'; - break; - case CHANGELOG_TABLE: - $sTitle .= 'd\'un changelog'; - $sDesc = 'La modification n°'.$asRssItem['source'].'. "'.$asRssItem['old_value'].'" a été ajouté'; - break; - } - break; - case 'MODIFY': - $sTitle .= 'Modification '; - switch($asRssItem['type']) - { - case USER_TABLE.'_name': - $sTitle .= 'du nom d\'un utilisateur'; - $sDesc = 'l\'utilisateur "'.ucwords($asRssItem['old_value']).'" est dorénavant nommé '.$asRssItem['new_value']; - break; - case USER_TABLE.'_class': - $sTitle .= 'de la classe d\'un utilisateur '; - $sDesc = 'l\'utilisateur "'.ucwords($asRssItem['source']).'" est passé de la classe '.$asRssItem['old_value'].' à la classe '.$asRssItem['new_value']; - break; - case QCM_TABLE: - $sTitle .= 'd\'un QCM'; - $sDesc = 'Le QCM nommé "'.$asRssItem['old_value'].'" a été modifié'; - break; - case QUESTION_TABLE: - $sTitle .= 'd\'une question'; - $sDesc = 'La question "'.$asRssItem['old_value'].'" a été modifiée'; - break; - case 'image': - $sTitle .= 'd\'une image'; - $sDesc = 'L\'image "'.$asRssItem['old_value'].'" a été modifié'; - break; - case ANSWER_TABLE: - $sTitle .= 'd\'une proposition de réponse'; - $sDesc = 'La proposition de réponse "'.$asRssItem['old_value'].'" a été modifé'; - break; - case CHANGELOG_TABLE: - $sTitle .= 'd\'un changelog'; - $sDesc = 'La modification n°'.$asRssItem['source'].'. "'.$asRssItem['old_value'].'" a été modifiée. - Nouvelle modification : "'.$asRssItem['new_value'].'"'; - break; - } - break; - case 'ACTIVATE': - $sTitle .= 'Activation '; - switch($asRssItem['type']) - { - case QCM_TABLE: - $sTitle .= 'd\'un qcm'; - $sDesc = 'Le qcm "'.$asRssItem['old_value'].'" a été activé'; - break; - case CHANGELOG_TABLE: - $sTitle .= 'd\'un changelog'; - $sDesc = 'La modification n°'.$asRssItem['source'].'. "'.$asRssItem['old_value'].'" est achevé'; - break; - } - break; - case 'DESACTIVATE': - $sTitle .= 'Désactivation '; - switch($asRssItem['type']) - { - case QCM_TABLE: - $sTitle .= 'd\'un qcm'; - $sDesc = 'Le qcm "'.$asRssItem['old_value'].'" a été désactivé'; - break; - case CHANGELOG_TABLE: - $sTitle .= 'd\'un changelog'; - $sDesc = 'La modification n°'.$asRssItem['source'].'. "'.$asRssItem['old_value'].'" est passé en mode "non achevé"'; - break; - } - break; - case 'DELETE': - $sTitle .= 'Suppression '; - switch($asRssItem['type']) - { - case USER_TABLE: - $sTitle .= 'd\'un utilisateur'; - $sDesc = 'Le compte de l\'utilisateur "'.$asRssItem['old_value'].'" a été supprimé'; - break; - case QCM_TABLE: - $sTitle .= 'd\'un qcm '; - $sDesc = 'Le qcm intitulé "'.$asRssItem['old_value'].'" a été supprimé'; - break; - case QUESTION_TABLE: - $sTitle .= 'd\'une question'; - $sDesc = 'La question "'.$asRssItem['old_value'].'" a été supprimée'; - break; - case 'image': - $sTitle .= 'd\'une image'; - $sDesc = 'L\'image "'.$asRssItem['old_value'].'" a été supprimée'; - break; - case ANSWER_TABLE: - $sTitle .= 'd\'une proposition de réponse'; - $sDesc = 'La proposition de réponse "'.$asRssItem['old_value'].'" a été supprimée'; - break; - case CHANGELOG_TABLE: - $sTitle .= 'd\'un changelog'; - $sDesc = 'La modification n°'.$asRssItem['source'].'. "'.$asRssItem['old_value'].'" a été abandonné'; - break; - } - break; - case 'RESET': - $sTitle .= 'Réinitialisation de la base de données '; - $sDesc = 'La base de données "'.$asRssItem['source'].'" a été supprimée et réinstallée'; - break; - case 'RESTORE': - $sTitle .= 'Restauration de la base de données '; - $sDesc = 'La base de données "'.$asRssItem['old_value'].'" a été restaurée'; - break; - case 'UPLOAD': - $sTitle .= 'Upload d\'une base de données '; - $sDesc = 'La base de données "'.$asRssItem['old_value'].'" '; - switch($asRssItem['type']) - { - case 'file': - $sDesc .= 'a été uploadé'; - break; - case 'sync': - $sDesc = 'a été synchronisée avec le site '.$asRssItem['source']; - break; - } - break; - case 'CONNECT': - $sTitle .= 'Connexion d\'un utilisateur'; - $sDesc = 'L\'utilisateur "'.ucwords($asRssItem['old_value']).'" s\'est connecté'; - break; - } - $sAuthor = str_replace(' ', '.', strtolower($asRssItem['author'])).'@'.DOMAIN.' ('.ucwords($asRssItem['author']).')'; - - if($sTitle!='' && $sDesc!='') - { - $sRssItem = getHtml(cleanRss($sTitle), 'title'); - $sRssItem .= getHtml(cleanRss($sAuthor), 'author'); - $sRssItem .= getHtml($sRssFeedUrl, 'link'); - $sRssItem .= getHtml(cleanRss($sDesc.'.'), 'description'); - $sRssItem .= getHtml(cleanRss(date('r', strtotime($asRssItem['led']))), 'pubDate'); - $sRssItem .= getHtml(cleanRss($sRssFeedUrl.'&id='.$asRssItem['id_'.FEED_TABLE]), 'guid', '', '', array('isPermaLink'=>'true')); - - $asItems[] = getHtml($sRssItem, 'item'); - } -} - -function fillFeed($sText) -{ - $asColumnNames = getTableColumnNames(FEED_TABLE); - foreach($asColumnNames as $sColumnName) - { - $sText = str_replace('#'.$sColumnName.'#', $_POST[$sColumnName], $sText); - } -} - -function getFeedTitle($sAction, $sType) -{ - -} - -function getFeedDesc($sAction, $sType) -{ - -} - -//last feed update -$sPubDate = date('r', strtotime(getUniqueValue("SELECT /* ".basename(__FILE__)." ".__LINE__." */ MAX(led) FROM ".FEED_TABLE))); - -//feed header -$sRssFeed = ''; -$sRssFeedHeader = getHtml('QcmMaker Rss Feed', 'title'); -$sRssFeedHeader .= getHtml($sRssFeedUrl, 'link'); -$sRssFeedHeader .= getHtml('Copyright (C) '.date('Y').' François Lutran', 'copyright'); -$sRssFeedHeader .= getHtml('Users Activity', 'description'); -$sRssFeedHeader .= getHtml('', 'atom:link', '', '', array('href'=>$sRssFeedUrl, 'rel'=>'self', 'type'=>'application/atom+xml'), true); -$sRssFeedHeader .= getHtml('fr', 'language'); -$sRssFeedHeader .= getHtml(cleanRss($sPubDate), 'pubDate'); -$sRssFeedHeader .= getHtml('qcmMaker rss Feed generator', 'generator'); -$sRssFeedHeader .= getHtml(cleanRss(FEEDBACK_MAIL.' (Webmaster)'), 'webMaster'); - -//feed items -$sRssFeed .= getHtml(getHtml($sRssFeedHeader.implode("\n", $asItems), 'channel'), 'rss', '', '', array('version'=>'2.0', 'xmlns:atom'=>'http://www.w3.org/2005/Atom')); - -echo $sRssFeed; -?> \ No newline at end of file diff --git a/current_version/.svn/text-base/search.php.svn-base b/current_version/.svn/text-base/search.php.svn-base deleted file mode 100644 index 37b5a84..0000000 --- a/current_version/.svn/text-base/search.php.svn-base +++ /dev/null @@ -1,76 +0,0 @@ -$iRank) - { - $asColumnDisplayed = array_filter(array_keys($asResult[$sRowId]), 'filterTable'); - $asResultRow = array_intersect_key($asResult[$sRowId], array_flip($asColumnDisplayed)); - - $sColumnNames = getHtml(ucwords(str_replace('_', ' ', getHtml(array_keys($asResultRow), 'th'))), 'tr'); - $sHtmlRank = getHtml('Rang : '.$iRank, 'p', '', 'font-size:small;margin-top:10px;margin-bottom:0;'); - $asSearchResults[] = $sHtmlRank.getHtml($sColumnNames.getHtml(getHtml($asResultRow, 'td'), 'tr'), 'table', 'maxWidth'); - } - } - else - { - relocate(getWarning(array('Aucun r�sultat', 'Recherche effectu�e sur les mots : '.$sHtmlKeyWords))); - } -} - -function filterTable($sColumnName) -{ - return (!is_numeric($sColumnName) && $sColumnName!='pass'); -} -?> -

Mots recherch�s :

-

R�sultat1)?'s':''; ?> de la recherche :

- \ No newline at end of file diff --git a/current_version/.svn/text-base/settings.php.svn-base b/current_version/.svn/text-base/settings.php.svn-base deleted file mode 100644 index 2593ab2..0000000 --- a/current_version/.svn/text-base/settings.php.svn-base +++ /dev/null @@ -1,34 +0,0 @@ - \ No newline at end of file diff --git a/current_version/.svn/text-base/stats.php.svn-base b/current_version/.svn/text-base/stats.php.svn-base deleted file mode 100644 index f6a41a2..0000000 --- a/current_version/.svn/text-base/stats.php.svn-base +++ /dev/null @@ -1,44 +0,0 @@ - $_SESSION['grade'], 'class' => $_SESSION['class'], USER_TABLE => $_SESSION['user']); -$asResults = getResults($aiConstraints); - -if(!$asResults) -{ - $asDisplay = array('

Aucune note.Vous avez répondu à aucun QCM

', ); - $sDisplayAverage = 'Moyenne : Aucune donnée disponible'; -} -else -{ - $asResults = $asResults[$_SESSION['grade']][$_SESSION['class']][$_SESSION['user']]; - $iUserGlobalAvg = getResultsAverage($iOutOf, $aiConstraints); - $aiConstraints[USER_TABLE] = false; - $aiConstraints[QCM_TABLE] = array_keys($asResults); - $iClassGlobalAvg = getResultsAverage($iOutOf, $aiConstraints); - foreach($asResults as $iQcmId => $asQcmResultInfo) - { - $aiConstraints[QCM_TABLE] = $iQcmId; - $iClassAvg = getResultsAverage($iOutOf, $aiConstraints); - $asDisplay[$iQcmId] = ''.$asQcmResultInfo[QCM_TABLE].''.roundMark($iOutOf, $asQcmResultInfo[RESULT_TABLE]).' / '.$iOutOf.''.$iClassAvg.' / '.$iOutOf.''; - } - $sDisplayAverage = 'Moyenne : '.$iUserGlobalAvg.' / '.$iOutOf.'Moyenne de la classe : '.$iClassGlobalAvg.' / '.$iOutOf.''; -} -?> - - - - - - - - - - - - - - -

Les notes de

QCMMoyenne de la classe
\ No newline at end of file diff --git a/current_version/.svn/text-base/statsAdmin.php.svn-base b/current_version/.svn/text-base/statsAdmin.php.svn-base deleted file mode 100644 index 819f986..0000000 --- a/current_version/.svn/text-base/statsAdmin.php.svn-base +++ /dev/null @@ -1,135 +0,0 @@ -$iGrade, 'class'=>$iClass, USER_TABLE=>$_POST[USER_TABLE], QCM_TABLE=>$_POST[QCM_TABLE], 'outputOrder'=>$asOutputOrder); - foreach($asConstraintColumns as $sConstraintColumn=>$sConstraintValue) - { - if($sConstraintValue > 0) - { - $asResultsConstraints[$sConstraintColumn] = $sConstraintValue; - } - } - $asResults = getResults($asResultsConstraints); - - //Display results & building export file - if(!$asResults) - { - $asResultsDisplay = getWarning('Aucune note disponible'); - } - else - { - foreach($asResults as $iQcmId=>$asQcmInfo) - { - $sQcmName = getQcmName($iQcmId); - $asResultsDisplay .= ''; - $asExportCsv[] = array('QCM', $sQcmName); - foreach($asQcmInfo as $iGradeId=>$asGradeInfo) - { - foreach($asGradeInfo as $iClassId=>$asClassInfo) - { - $sClass = $iGradeId.GRADE_CLASS_SEPARATOR.$iClassId; - $asResultsDisplay .= ''; - $asResultsDisplay .= ''; - $asExportCsv[] = array(''); - $asExportCsv[] = array('Classe', $sClass, 'Note sur', $iOutOf); - $dClassAvgMark = getResultsAverage($iOutOf, array('grade' => $iGradeId, 'class' => $iClassId, QCM_TABLE=>$iQcmId)); - $asResultsDisplay .= ' - - - - '; - $asExportCsv[] = array('Eleve', 'Note', 'Moyenne de l\'eleve'); - foreach($asClassInfo as $iUserId=>$asUserInfo) - { - $dUserAvgMark = getResultsAverage($iOutOf, array('grade' => $iGradeId, 'class' => $iClassId, USER_TABLE=>$iUserId, QCM_TABLE=>array_keys($asResults))); - $sUserLastName = ucwords($asUserInfo[USER_TABLE.'_last_name']); - $sUserFirstName = ucwords($asUserInfo[USER_TABLE.'_first_name']); - $sUserName = ''.$sUserLastName.' '.$sUserFirstName; - $asResultsDisplay .= ' - - - - '; - $asExportCsv[] = array($sUserLastName.' '.$sUserFirstName, roundMark($iOutOf, $asUserInfo[RESULT_TABLE]), $dUserAvgMark); - } - $asResultsDisplay .= ''; - $asExportCsv[] = array('Moyenne de la '.$sClass, $dClassAvgMark); - } - } - $asResultsDisplay .= '

QCM "'.$sQcmName.'"

'.$sClass.'

EleveNoteMoyenne
'.$sUserLastName.' '.$sUserFirstName.''.roundMark($iOutOf, $asUserInfo[RESULT_TABLE]).' / '.$iOutOf.''.$dUserAvgMark.' / '.$iOutOf.'
Moyenne de la '.$sClass.' : '.$dClassAvgMark.' / '.$iOutOf.'
Haut de page'; - $asExportCsv[] = array(''); - } - } -} -else -{ - $bDisableExport = true; -} - -//QCM selection -$asQcms = getListe(array( 'select'=>array(getId(QCM_TABLE), QCM_TABLE), - 'from'=>QCM_TABLE, - 'orderBy'=>QCM_TABLE)); -$sSelectQcm = getSelect($asQcms, 'id_'.QCM_TABLE, QCM_TABLE, array(0=>'Tous'), isset($_POST['qcm'])?$_POST['qcm']:''); - -//Classes selection -$asClasses = getListe(array('select'=>array( "CONCAT(grade, '".GRADE_CLASS_SEPARATOR."', class) AS gradeClass", 'grade', 'class'), - 'from'=>USER_TABLE, - 'constraint'=>"admin=0", - 'groupBy' => 'gradeClass', - 'orderBy'=>array('grade', 'class'))); -$sSelectClasses = getSelect($asClasses, 'gradeClass', '', array('0'.GRADE_CLASS_SEPARATOR.'0'=>'Toutes'), isset($_POST['gradeClass'])?$_POST['gradeClass']:''); - -//Students selection -$asStudents = getListe(array( 'select'=>array(getId(USER_TABLE), "CONCAT(user_last_name, ' ', user_first_name) AS name"), - 'from'=>USER_TABLE, - 'constraint'=>"admin=0", - 'orderBy'=>'user_last_name')); -$sSelectStudents = getSelect($asStudents, 'id_'.USER_TABLE, 'name', array(0=>'Tous'), isset($_POST['user'])?$_POST['user']:''); - -$sSelectOutOf = getOutOfForm(isset($_POST['outofvalue'])?$_POST['outofvalue']:20); - -//pre($_POST); -// -?> -

Choisissez l'affichage :

-
- - - - - - - - - - - - - - - - -
QCMClasseÉlèveDénominateurValidation
value="Télécharger ces notes" onclick="document.forms['getCsv'].submit();" />
- -

-
-
- - - -
\ No newline at end of file diff --git a/current_version/.svn/text-base/style.css.svn-base b/current_version/.svn/text-base/style.css.svn-base deleted file mode 100644 index 2f303d9..0000000 --- a/current_version/.svn/text-base/style.css.svn-base +++ /dev/null @@ -1,506 +0,0 @@ -@CHARSET "ISO-8859-1"; - -/* Global */ - -*:focus { - outline:none; -} -body { - margin:auto; - padding:0; - width:1024px; - min-width:1024px; - background-color:#CCC; - font-family: Verdana, Geneva, sans-serif; - font-size: medium; - font-style: normal; - font-weight: normal; - text-align: left; -} - -/* Structure */ - -#header { - margin:50px auto 80px auto; - text-align:center; - background-color:#FFFFFF; - padding:10px; - width:500px; - border:2px solid #000000; -} -#topMenu { - margin-bottom:5px; - text-align:center; -} -#main { - padding:10px; - border:2px solid #000000; - background-color:#FFFFFF; -} -#info { - margin-bottom:10px; -} -#content { - clear:both; -} -#footer { - padding:5px 10px 50px 10px; -} -.layer { - position:fixed; - top:0; - left:0; - width:100%; - height:100%; - background-color:white; - opacity:0.8; -} -.inputBox { - width:500px; -} -.preload { - display:none; -} -.center { - margin:4px auto; -} -.no-margin { - margin:0; -} -.qcmReader, .qcmReaderDisabled { - margin:10px auto; - padding:15px; - width:90%; - background-color:#FFFFFF; - border:1px solid #006; - border-radius:5px; -moz-border-radius:5px; -webkit-border-radius:5px; -} -.rounded { - border-width:1px; - border-style:solid; - border-radius:10px; -moz-border-radius:10px; -webkit-border-radius:10px; -} -.top-left-rounded { - border-radius:10px 0 0 0; -moz-border-radius-topleft: 10px; -webkit-border-top-left-radius: 10px; -} -.top-right-rounded { - border-radius:0 10px 0 0; -moz-border-radius-topright: 10px; -webkit-border-top-right-radius: 10px; -} -.bottom-right-rounded { - border-radius:0 0 10px 0; -moz-border-radius-bottomright: 10px; -webkit-border-bottom-right-radius: 10px; -} -.bottom-left-rounded { - border-radius:0 0 0 10px; -moz-border-radius-bottomleft: 10px; -webkit-border-bottom-left-radius: 10px; -} -.bottom-rounded { - border-radius:0 0 10px 10px; - -moz-border-radius-bottomleft: 10px; -webkit-border-bottom-left-radius: 10px; - -moz-border-radius-bottomright: 10px; -webkit-border-bottom-right-radius: 10px; -} - -hr.separator { - margin:3px; - height:33px; - border:none; - background:none; - color:#FFFFFF; -} - -/* Table */ -table { - margin:auto; - border-spacing:2px; -} -table.maxWidth, #info table { - width:100%; -} -table.joinedTable { - margin-top:-2px; -} -table.stats { - background-color: #F5F5FF; - margin-top:50px; - border:1px solid #000000; -} -table tr { - text-align:center; - font-size:small; -} -table tr th { - border:1px solid #006; - text-align:center; - background-color:#006; - color:#FFFFFF; - font-size:medium; -} -table tr td { - border:1px solid #006; - background-color:#D5FFFF; - padding:5px; -} -table tr td.qcmSelection { - color:#006; - cursor:pointer; - text-align:left; - padding-left:50px; - font-weight:bold; - background:#D5FFFF url(images/qcm_selection.gif) 20px 50% no-repeat; -} -table tr td.qcmSelection:hover, table tr td.qcmSelection:active { - color:#000000; - border-color:#000000; - background:#d5ffd7 url(images/qcm_selection_hover.gif) 20px 50% no-repeat; -} -table tr td.qcmSelection:active { - background-image:url(images/qcm_selection_active.gif); -} -table tr td.left { - text-align:left; - padding-left:10px; -} -table tr td.true{ - font-weight:bold; - background-color:#0F0; -} -table tr td.false{ - font-weight:bold; - background-color:#F00; - color:#FFFFFF; -} -.green { - background-color:#d5ffd7; -} -.blank { - background-color:transparent; - border:none; - padding-top:10px; - padding-bottom:10px; -} - -/* Form */ -input, textarea { - margin:auto; - border:1px solid #006; - padding:2px 5px; - border-radius:5px; -moz-border-radius:5px; -webkit-border-radius:5px; -} -input:disabled, textarea:disabled, textarea.disabled, .qcmReaderDisabled { - border-color:#aca899; - background-color:#D5FFFF; - color:#aca899; -} -input.nude, select.nude { - border:none; - background:none; -} -input[type=checkbox], input[type=checkbox]:disabled { - border:none; -} -input[type=button], input[type=submit] { - background:#FFFFFF url(images/button_gradient.gif) 0 100% repeat-x; - font-weight:bold; - color:#006; -} -input[type=button]:hover, input[type=submit]:hover { - background-image:url(images/button_gradient_hover.gif); - background-position:0 0; -} -input[type=button]:active, input[type=submit]:active { - background-color:#006; - background-image:none; - color:#FFFFFF; -} -input[type=button]:disabled, input[type=submit]:disabled { - background-image:none; - color:#aca899; -} -input[type="file"] { - border:1px solid #006; -} -.centered { - margin-top:4px; -} -textarea { - font-family:Verdana, Geneva, sans-serif; - font-size:small; - width:90%; - margin:10px auto; - padding:5px; -} -.spaceRight { - padding-right:25px; -} -select { - border:1px solid #006; - background:white; -} -select.mergeWithTh { - background-color:#006; - border-color:#FFFFFF; - color:#FFFFFF; - font-weight:bold; - font-size:medium; -} -.answerBox { - padding:3px; - height:25px; -} - -/* Text */ -h3 { - font-style:italic; - color:#666; -} -h1 span.logo { - border:3px solid #000000; - padding:0 8px 2px; - background-color:#CCCCCC; -} -fieldset { - border:1px solid #000000; - background-color:#F5F5FF; - padding:10px 10px 20px 10px; - margin-top:20px; -} -legend { - padding: 1px 6px 2px; - font-size: medium; - border:1px solid #000000; - background:#FFFFFF url(images/button_gradient.gif) 0 100% repeat-x; -} -a, a:visited { - color:#006; -} -a:hover { - color:#000000; -} -a:active { - outline: none; -} -a.beta { - position:absolute; - margin-left:740px; - margin-top:-30px; - padding:10px 20px; - color:#000000; - font-size:25pt; - font-style:italic; - text-decoration:none; - background-color:#FFFFFF; - border:2px solid #000000; -} -a.beta:hover { - background-color:#000000; - color:#FFFFFF; - border-color:#FFFFFF; -} -a.top { - position:absolute; - top:0; -} -a.toTheTop { - float:right; - margin-top:5px; - padding:2px 5px 2px 30px; - background:#D5FFFF url(images/arrow.png) 5px 1px no-repeat; - font-size:small; - text-decoration:none; - border:1px solid #006; -} -a.toTheTop:hover { - background-color:#d5ffd7; - background-position:5px 0; - color:#000000; -} -a.toTheTop:active { - background-color:#006; - background-position: 5px 0; - color:#FFFFFF; -} -a.deleteQuestion, a.deleteAnswer, a.XButton, a.deleteImage { - padding:2px 5px; - border:1px solid #006; - background-color:#FFFFFF; - text-decoration:none; - font-weight:bold; -} -a.deleteQuestion, a.deleteImage { - position:absolute; - margin-top:10px; - margin-left:-22px; - border-radius:0 5px; -moz-border-radius:0 5px; -webkit-border-radius:0 5px; -} -a.deleteAnswer { - position:absolute; - margin-left:-22px; - border-radius:0 5px 5px 0; -moz-border-radius:0 5px 5px 0; -webkit-border-radius:0 5px 5px 0; -} -a.deleteImage { - margin-top:139px; - margin-right:0; -} -a.XButton { - padding:1px 3px; - color:#006; - font-size:x-small; -} -a.deleteQuestion:hover, a.deleteQuestionHover, a.deleteAnswer:hover, a.deleteAnswerHover, a.XButton:hover, a.deleteImage:hover, a.deleteImageHover { - background-color:#006; - color:#FFFFFF; -} -a.XButton:hover { - text-decoration:none; -} -a.download { - padding:5px 10px 5px 28px; - text-decoration:none; - font-weight:bold; - color:#000066; - border-color:#000066; - background:url(images/arrow_down.png) 5px center no-repeat, url(images/button_gradient.gif) left bottom repeat-x; -} -a.download:hover { - background:url(images/arrow_down.png) 5px 60% no-repeat, url(images/button_gradient_hover.gif) left top repeat-x; -} -#topMenu a { - margin-left:10px; - margin-right:10px; - padding:5px 10px; - background-color:#E5E5E5; - color:#000000; - border:1px solid #666; - border-bottom-color:#000000; - font-weight:bold; - text-decoration:none; -} -#topMenu a.current { - border-width:2px; - border-color:#000000; - border-bottom-color:#FFFFFF; - background-color:#FFFFFF; -} -#topMenu a:hover { - border-color:#000000; - border-bottom-width:2px; - border-bottom-color:#FFFFFF; - background:#FFFFFF url(images/button_gradient_hover.gif) 0 0 repeat-x; -} -#main p { - padding-left:3px; -} -#main p.center { - text-align:center; -} -#main div.error, #main div.warning, #main div.success, #main div.notice { - border:1px solid #000000; - padding:5px; - margin-top:10px; - margin-bottom:10px; -} -#main div.error { - border-color:red; -} -#main div.warning { - border-color:orange; -} -#main div.success { - border-color:#008000; -} -#main p.error, #main p.warning, #main p.success, #main p.notice { - font-size:large; - padding:0; - margin: 0; -} -#main p.error { - color:red; - font-weight:bold; -} -#main p.warning { - color:orange; -} -#main p.success { - color:#008000; -} -#main p.notice { - margin:0; - font-size:medium; - font-style:italic; -} -#main .panel p { - font-size:small; -} -#info p.pageTitle, #info p.connectedUser { - padding:1px 5px; - margin:0; - border:1px solid #000000; - font-size:medium; -} -#info p.pageTitle { - float:left; -} -#info p.connectedUser { - float:right; -} -#footer p{ - text-align:center; - font-size: x-small; - margin-top:0; -} -p.code, p.keyring { - font-family:"Courier New"; - overflow:auto; -} -p.keyring { - overflow:hidden; - width:964px; -} -p.question{ - text-align:left; - margin:15px 0 15px 40px ; -} -p.important, ul li { - font-size:medium; - font-weight:bold; -} -p.tresimportant { - font-size:x-large; - font-weight:bold; -} -p.separator { - text-align:center; - font-weight:bold; - font-size:large; -} -ul li { - margin-top:10px; -} -ul li a { - text-decoration:none; -} -ul li a:hover { - text-decoration:underline; -} -ul li ul li { - margin:2px; - font-size:small; - font-weight:normal; - font-style:italic; -} -.noinfo{ - font-style:italic; - color:#666; - margin:auto; -} -.divDisabled { - background-color:#aca899; -} -.text { -} -.textDisabled { - color:#aca899; -} - -/* Image */ -img { - border:none; -} \ No newline at end of file diff --git a/current_version/.svn/text-base/styleIe.css.svn-base b/current_version/.svn/text-base/styleIe.css.svn-base deleted file mode 100644 index 47fcb33..0000000 --- a/current_version/.svn/text-base/styleIe.css.svn-base +++ /dev/null @@ -1,3 +0,0 @@ -a.beta { - margin-left:480px; -} \ No newline at end of file diff --git a/current_version/.svn/text-base/test.php.svn-base b/current_version/.svn/text-base/test.php.svn-base deleted file mode 100644 index f90cef1..0000000 --- a/current_version/.svn/text-base/test.php.svn-base +++ /dev/null @@ -1,100 +0,0 @@ -'; - $asDisplay[2] = ''; - $i=0; - while($asCurrentRow = mysql_fetch_array($oResult)) - { - $asDisplay[2] .= ''; - foreach($asCurrentRow as $index=>$value) - { - if(!is_numeric($index)) - { - if($i==0) - { - $asTitles[] = $index; - } - $asDisplay[2] .= ''.$value.''; - } - } - $asDisplay[2] .= ''; - $i++; - } - $asDisplay[1] = ''.implode('', $asTitles).''; - $asDisplay[3] = ''; - ksort($asDisplay); - $sResult = implode("\n", $asDisplay); - } -} - -/* - -//Other Tests -pre(selectRows(array( 'select'=>array(getId(QCM_TABLE), QCM_TABLE), - 'from'=>QCM_TABLE, - 'constraint'=>array('valid' => '1'), - 'orderBy'=>array(QCM_TABLE=>'ASC'))), 'apres'); - -pre(getListe(array( 'select'=>array(getId(QCM_TABLE), QCM_TABLE), - 'from'=>QCM_TABLE, - 'constraint'=>"valid = 1", - 'orderBy'=>QCM_TABLE)), 'avant'); - -pre(getListe(array('select'=>array( "CONCAT(grade, '".GRADE_CLASS_SEPARATOR."', class) AS gradeClass", 'grade', 'class'), - 'from'=>USER_TABLE, - 'constraint'=>"admin=0", - 'groupBy' => 'gradeClass', - 'orderBy'=>array('grade', 'class'))), 'avant'); - -$as2 = selectRows(array('select'=>array('grade', 'class'), - 'from'=>USER_TABLE, - 'constraint'=>array('admin'=>'0'), - 'groupBy' => array('grade', 'class'), - 'orderBy'=>array('grade'=>'ASC', 'class'=>'ASC'))); - -foreach($as2 as $s2Key=>$s2) -{ - $as2[$s2Key]['gradeClass'] = $s2['grade'].GRADE_CLASS_SEPARATOR.$s2['class']; -} - -pre($as2, 'apres'); - -*/ -?> -
- -
- - \ No newline at end of file diff --git a/current_version/.svn/text-base/version.php.svn-base b/current_version/.svn/text-base/version.php.svn-base deleted file mode 100644 index 176e890..0000000 --- a/current_version/.svn/text-base/version.php.svn-base +++ /dev/null @@ -1,158 +0,0 @@ -1, 'version'=>NEXT_VERSION)); - break; - case 'rollback': - $sAction = 'DESACTIVATE'; - $sDesc = getTextFromId(CHANGELOG_TABLE, $iChangelogId); - updateRow(CHANGELOG_TABLE, $iChangelogId, array('progress'=>0, 'version'=>'0')); - break; - case 'deleteChangelog': - $sAction = 'DELETE'; - $sDesc = getTextFromId(CHANGELOG_TABLE, $iChangelogId); - deleteRow(CHANGELOG_TABLE, $iChangelogId); - break; - case 'modifyChangelog': - $sAction = 'MODIFY'; - $sDesc = getTextFromId(CHANGELOG_TABLE, $iChangelogId); - $sNewValue = $_POST[$iChangelogId.'description']; - updateRow(CHANGELOG_TABLE, $iChangelogId, array(CHANGELOG_TABLE=>$sNewValue, 'type'=>$_POST[$iChangelogId.'type'])); - break; - case 'publishChangelog': - if(publishChangeLog($iChangelogId)) - { - addMessage(getSuccess('Changelog Publié')); - } - break; - } - if($sAction!='') - { - addFeed($sAction, $iChangelogId, CHANGELOG_TABLE, $sDesc, $sNewValue); - } -} - -//displays versions log, future features and bug fixes -$sUserOS = getOS(); -$sPack = 'qcm_v'.STABLE_VERSION.'.'.(($sUserOS==OS_MAC || $sUserOS==OS_WINDOWS)?'zip':'tar.gz'); -$sCurrentVersion = CURRENT_VERSION.(IS_BETA?' (béta)':''); - -//add a changelog -$sAddChangelogType = getChangelogTypeSelect(); -$sAddChangelogProgress = ''; -$sAddChangelogButton = ''; -$asNextVersionDisplay = array($sAddChangelogType.'  Effectué : '.$sAddChangelogProgress.' '.$sAddChangelogButton); - -$oLogs = selectRows(array('from'=>CHANGELOG_TABLE, 'orderBy'=>array('version'=>'DESC', 'progress'=>'DESC', 'type'=>'ASC', 'led'=>'DESC'))); -foreach($oLogs as $asLogs) -{ - $sDescription = ucfirst($asLogs[CHANGELOG_TABLE]); - $sType = $asLogs['type']; - $sVersion = $asLogs['version']; - - //dates - $iTimeStamp = strtotime($asLogs['led']); - $sDate = ($asLogs['led']>0)?' ('.date('d/m/Y', $iTimeStamp).')':''; - if($sDate!='' && (!isset($asMaxTimeStamp[$sVersion]) || $iTimeStamp > $asMaxTimeStamp[$sVersion])) - { - $asMaxTimeStamp[$sVersion] = $iTimeStamp; - $asMaxDates[$sVersion] = $sDate; - } - - $sSeparator = ' : '; - - //current version - if($sVersion==0 || $sVersion==NEXT_VERSION) - { - $iChangeLogId = $asLogs['id_'.CHANGELOG_TABLE]; - - //on progress - if($asLogs['progress']==0) - { - $sAction = 'complete'; - $sActionTitle = 'En cours'; - $sType = getChangelogTypeSelect($iChangeLogId, $sType); - $sDescription = ''; - $sDeleteButton = ' X'; - $sSubmitButton = ' Ok'; - $sSeparator = substr($sSeparator, 0, -1); - $sPublishButton = ''; - $sDate = ''; - } - //completed - else - { - $sDeleteButton = $sSubmitButton = ' '; - $sAction = 'rollback'; - $sActionTitle = 'Fini'; - $sPublishButton = ' Publier'; - } - $sProgressLink = '['.$sActionTitle.']'; - $asNextVersionDisplay[] = $sProgressLink.$sPublishButton.$sDeleteButton.$sSubmitButton.$sType.$sSeparator.$sDescription.$sDate; - } - //old versions - else - { - $asLogDisplay[$sVersion][] = $sType.$sSeparator.$sDescription.$sDate; - } -} - -$sVersionDisplay = ''; -if(isset($asLogDisplay)) -{ - foreach($asLogDisplay as $sVersion=>$asChanges) - { - $sHtmlVersion = 'v'.$sVersion.(array_key_exists($sVersion, $asMaxDates)?$asMaxDates[$sVersion]:''); - $sVersionDisplay .= getHtml($sHtmlVersion.getHtml(getHtml($asChanges, 'li'), 'ul'), 'li'); - } -} -$sNextVersionDisplay = 'v'.$sCurrentVersion.getHtml(getHtml($asNextVersionDisplay, 'li'), 'ul'); -?> - -
-
- Téléchargements v -

Télécharger

-
-
En développement v -
    -
  • -
-
-
Historique -
    - -
-
- - -
\ No newline at end of file