remove svn files

This commit is contained in:
2016-08-07 21:37:50 +02:00
parent f435c392c1
commit 74fc982e6f
32 changed files with 0 additions and 6479 deletions

View File

@@ -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

View File

@@ -1,6 +0,0 @@
K 10
svn:ignore
V 13
settings.php
END

View File

@@ -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

View File

@@ -1,5 +0,0 @@
K 13
svn:mime-type
V 10
text/plain
END

View File

@@ -1,5 +0,0 @@
K 14
svn:executable
V 1
*
END

View File

@@ -1,5 +0,0 @@
K 13
svn:mime-type
V 10
text/plain
END

View File

@@ -1,5 +0,0 @@
K 13
svn:mime-type
V 10
text/plain
END

View File

@@ -1,230 +0,0 @@
<?php
/* displays user's account settings */
//delete user
if(isset($_POST['deleteUserId']))
{
$iDeletedUserId = $_POST['deleteUserId'];
if(isAdmin($iDeletedUserId))
{
echo getError('Il est impossible de supprimer un compte administrateur');
}
else
{
$sDeletedUserName = getTextFromId(USER_TABLE, $iDeletedUserId);
deleteRow(USER_TABLE, $iDeletedUserId);
addFeed('DELETE', $iDeletedUserId , USER_TABLE, $sDeletedUserName, '');
}
}
//modify user account
$iSelectedUserId = isset($_POST['studentId'])?$_POST['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&ecirc;mes';
$bfailedPassModif = ($sErrorMessage!='');
if($bfailedPassModif)
{
echo getError($sErrorMessage);
}
else
{
updateRow(USER_TABLE, $iSelectedUserId, array('pass'=>encryptPassword($_POST['pass'])));
echo getSuccess('Mot de passe modifi&eacute;');
}
}
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&eacute;es modifi&eacute;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&eacute;nom : '.$sFirstName));
}
}
}
else
{
echo getError('Ce nom existe d&eacute;j&agrave; dans la base de donn&eacute;es');
}
}
else
{
echo getError('Champs incomplets');
$bfailedPassModif = ($_GET['type']=="pass");
}
}
//student class selection / teacher
$sTeacherClass = 'Professeur<input type="hidden" name="grade" value="0"><input type="hidden" name="class" value="0">';
$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 = '<tr>
<td>Admin</td>
<td><input type="checkbox" name="admin" '.($bIsSelectedUserAdmin?'CHECKED ':'').' onclick="switchClassType();" /></td>
</tr>';
?>
<script type="text/javascript">
function switchClassType()
{
if(document.forms['modif'].elements['admin'].checked)
{
replaceInnerText('studentTeacher', '<?php echo $sTeacherClass; ?>');
}
else
{
replaceInnerText('studentTeacher', '<?php echo $sStudentClass; ?>');
}
}
</script>
<form action="?page=account" method="post" name="getEleve">
<table>
<tr>
<td class="top-left-rounded bottom-left-rounded">El&egrave;ve</td>
<td class="top-right-rounded bottom-right-rounded">
<select name="studentId" onchange="document.forms['getEleve'].submit();">
<?php
$asUsers = selectRows(array('from'=>USER_TABLE, 'orderBy'=>array('class'=>'asc', 'user_last_name'=>'asc')));
foreach($asUsers as $asUser)
{
echo '<option value="'.$asUser['id_'.USER_TABLE].'"'.(($iSelectedUserId==$asUser['id_'.USER_TABLE])?' selected="selected"':'').'>
'.$asUser['grade'].GRADE_CLASS_SEPARATOR.$asUser['class'].' - '.ucwords($asUser['user_last_name'].' '.$asUser['user_first_name']).
'</option>'."\n";
}
?>
</select>
</td>
</tr>
<tr>
<td colspan="2" class="blank">
<input type="button" value="Supprimer ce compte" onclick="if(confirm('Etes-vous sur de vouloir supprimer le compte de <?php echo $asSelectedUserInfo['user_last_name']." ".$asSelectedUserInfo['user_first_name']; ?> ?'))document.deleteUser.submit();" />
</td>
</tr>
</table>
</form>
<?php
}
//forms display : info and password modifications
if((isset($_GET['type']) && $_GET['type']=="pass" && !isset($_POST['submit'])) || $bfailedPassModif)
{
?>
<br />
<form action="?page=account&type=pass" method="post" name="updateAccount">
<table>
<tr><th colspan="2" class="top-left-rounded top-right-rounded">Changer de mot de passe</th></tr>
<tr>
<td>Ancien mot de passe</td>
<td><input type="password" name="oldpass" /></td>
</tr>
<tr>
<td>Nouveau mot de passe</td>
<td><input type="password" name="pass" /></td>
</tr>
<tr>
<td class="bottom-left-rounded">Nouveau mot de passe (une nouvelle fois)</td>
<td class="bottom-right-rounded"><input type="password" name="pass2" /></td>
</tr>
<tr>
<td colspan="2" class="blank">
<input type="hidden" value="ok" name="submit" />
<input type="hidden" value="<?php echo $iSelectedUserId; ?>" name="studentId" />
<input type="button" name="annuler" onclick="goTo('?page=account');" value="Annuler"> <input type="submit" value="Changer le mot de passe">
</td>
</tr>
</table>
</form>
<br />
<?php
}
else
{
?>
<br />
<form action="?page=account&type=info" method="post" name="modif">
<table>
<tr><th colspan="2" class="top-left-rounded top-right-rounded">Modification de compte</th></tr>
<tr>
<td>Pr&eacute;nom</td>
<td><input type="text" name="firstname" value="<?php echo ucwords(isset($_POST['firstname'])?$_POST['firstname']:$asSelectedUserInfo['user_first_name']); ?>" /></td>
</tr>
<tr>
<td>Nom de famille</td>
<td><input type="text" name="login" value="<?php echo ucwords(isset($_POST['login'])?$_POST['login']:$asSelectedUserInfo['user_last_name']); ?>" /></td>
</tr>
<tr>
<td>Classe</td>
<td id="studentTeacher">
<?php echo $bIsSelectedUserAdmin?$sTeacherClass:$sStudentClass; ?>
</td>
</tr>
<?php echo $sPromoteAdmin; ?>
<tr>
<td class="bottom-left-rounded">Mot de passe</td>
<td class="bottom-right-rounded"><input type="button" value="Changer le mot de passe" onclick="pass.submit();" /></td>
</tr>
<tr>
<th colspan="2" class="blank">
<input type="hidden" value="ok" name="submit" />
<input type="hidden" value="<?php echo $iSelectedUserId; ?>" name="studentId" />
<input type="button" name="annuler" onclick="goTo('?page=logon');" value="Annuler">&nbsp;&nbsp;<input type="submit" value="Changer les param&egrave;tres" />
</th>
</tr>
</table>
</form>
<form action="?page=account&type=pass" method="post" name="pass">
<input type="hidden" name="studentId" value="<?php echo $iSelectedUserId; ?>" />
</form>
<form action="?page=account" method="post" name="deleteUser">
<input type="hidden" name="deleteUserId" value="<?php echo $iSelectedUserId; ?>" />
</form>
<?php
}
?>

View File

@@ -1,280 +0,0 @@
<?php
/* displays user's account settings */
define('DEL_USER_TAG', 'deluser');
//delete users
//TODO plusieurs eleves <20> la fois
if(isset($_GET['action']) && $_GET['action']=='delusers')
{
$asDeletedUserNames = array();
foreach($_POST as $sKey=>$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 &eacute;t&eacute; supprim&eacute;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&ecirc;mes';
$bfailedPassModif = ($sErrorMessage!='');
if($bfailedPassModif)
{
echo getError($sErrorMessage);
}
else
{
updateRow(USER_TABLE, $iSelectedUserId, array('pass'=>encryptPassword($_POST['pass'])));
echo getSuccess('Mot de passe modifi&eacute;');
}
}
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&eacute;es modifi&eacute;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&eacute;nom : '.$sFirstName));
}
}
}
else
{
echo getError('Ce nom existe d&eacute;j&agrave; dans la base de donn&eacute;es');
}
}
else
{
echo getError('Champs incomplets');
$bfailedPassModif = ($_GET['type']=="pass");
}
}
//student class selection / teacher
$sTeacherClass = 'Professeur<input type="hidden" name="grade" value="0"><input type="hidden" name="class" value="0">';
$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 = '<tr>
<td>Admin</td>
<td><input type="checkbox" name="admin" '.($bIsSelectedUserAdmin?'CHECKED ':'').' onclick="switchClassType();" /></td>
</tr>';
?>
<script type="text/javascript">
function switchClassType()
{
if(document.forms['modif'].elements['admin'].checked)
{
replaceInnerText('studentTeacher', '<?php echo $sTeacherClass; ?>');
}
else
{
replaceInnerText('studentTeacher', '<?php echo $sStudentClass; ?>');
}
}
</script>
<br />
<form action="?page=account&type=info" method="post" name="modif">
<table>
<tr><th colspan="2" class="top-left-rounded top-right-rounded">Modification de compte</th></tr>
<tr>
<td>Pr&eacute;nom</td>
<td><input type="text" name="firstname" value="<?php echo $asSelectedUserInfo['user_first_name']; ?>" /></td>
</tr>
<tr>
<td>Nom de famille</td>
<td><input type="text" name="login" value="<?php echo $asSelectedUserInfo['user_last_name']; ?>" /></td>
</tr>
<tr>
<td>Classe</td>
<td id="studentTeacher">
<?php echo $bIsSelectedUserAdmin?$sTeacherClass:$sStudentClass; ?>
</td>
</tr>
<?php echo $sPromoteAdmin; ?>
<tr>
<td class="bottom-left-rounded">Mot de passe</td>
<td class="bottom-right-rounded"><input type="button" value="Changer le mot de passe" onclick="pass.submit();" /></td>
</tr>
<tr>
<th colspan="2" class="blank">
<input type="hidden" value="ok" name="submit" />
<input type="hidden" value="<?php echo $iSelectedUserId; ?>" name="studentId" />
<input type="button" name="annuler" onclick="goTo('?page=account_admin');" value="Annuler">&nbsp;&nbsp;<input type="submit" value="Changer les param&egrave;tres" />
</th>
</tr>
</table>
</form>
<form action="?page=account&type=pass" method="post" name="pass">
<input type="hidden" name="studentId" value="<?php echo $iSelectedUserId; ?>" />
</form>
<form action="?page=account" method="post" name="deleteUser">
<input type="hidden" name="deleteUserId" value="<?php echo $iSelectedUserId; ?>" />
</form>
<?php
}
elseif((isset($_GET['type']) && $_GET['type']=="pass" && !isset($_POST['submit'])) || $bfailedPassModif)
{
?>
<br />
<form action="?page=account&type=pass" method="post" name="updateAccount">
<table>
<tr><th colspan="2" class="top-left-rounded top-right-rounded">Changer de mot de passe</th></tr>
<tr>
<td>Ancien mot de passe</td>
<td><input type="password" name="oldpass" /></td>
</tr>
<tr>
<td>Nouveau mot de passe</td>
<td><input type="password" name="pass" /></td>
</tr>
<tr>
<td class="bottom-left-rounded">Nouveau mot de passe (une nouvelle fois)</td>
<td class="bottom-right-rounded"><input type="password" name="pass2" /></td>
</tr>
<tr>
<td colspan="2" class="blank">
<input type="hidden" value="ok" name="submit" />
<input type="hidden" value="<?php echo $iSelectedUserId; ?>" name="studentId" />
<input type="button" name="annuler" onclick="goTo('?page=account_admin');" value="Annuler"> <input type="submit" value="Changer le mot de passe">
</td>
</tr>
</table>
</form>
<br />
<?php
}
else
{
$asPreviousEntries = array();
$asConstraints = array('admin'=>'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[] = '<tr>
<td style="text-align:left;"><strong>'.ucwords($asUser['user_last_name']).'</strong> '.ucwords($asUser['user_first_name']).'</td>
<td>'.$asUser['grade'].GRADE_CLASS_SEPARATOR.$asUser['class'].'</td>
<td><a href="?page=account_admin&type=modif&studentId='.$asUser['id_'.USER_TABLE].'">Modifier</a></td>
<td><input type="checkbox" name="'.DEL_USER_TAG.'_'.$asUser['id_'.USER_TABLE].'" /></td>
</tr>';
}
$iStudentCount = count($asStudents);
$sStudents = ($iStudentCount>0)?implode("\n", $asStudents):'<tr><td colspan="4">Aucun utilisateur dans cette classe</td></tr>';
//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');
?>
<form name="classSelect" method="post" action="?page=<?php echo $sPage;?>">
<p style="text-align:center;margin-top:30px;">Classe : <?php echo $sSelectClasses; ?></p>
</form>
<form method="post" name="deleteUsers" action="?page=<?php echo $sPage;?>&action=delusers">
<table>
<tr>
<th class="top-left-rounded" style="padding:2px 10px;">El&egrave;ve</th>
<th style="padding:2px 10px;">Classe</th>
<th style="padding:2px 10px;">Modifier</th>
<th class="top-right-rounded" style="padding:2px 10px;">Supprimer</th>
</tr>
<?php echo $sStudents; ?>
<tr><th colspan="4" class="bottom-rounded"><?php echo $iStudentCount; ?> &eacute;l&egrave;ve(s) (<?php echo $sGradeClass; ?>)</th></tr>
</table>
<div style="text-align:center;margin-top:10px;"><input type="submit" value="Supprimer" /></div>
</form>
<?php
}
?>

View File

@@ -1,178 +0,0 @@
<?php
/* Create a backup file in /backup/ folder and download a copy to the user hard drive. */
if(!function_exists('checkOrigin') || !$bAdmin)
{
require_once 'config.php';
relocate(getError('Acc&egrave;s interdit'));
}
//check external link
if(isset($_GET['action']) && $_GET['action']!='')
{
if(!checkOrigin('backUpCreator'))
{
relocate(getError('Aucun lien externe autoris&eacute;'));
}
//Set designed actions
switch ($_GET['action'])
{
case 'download':
createBackUp(isset($_POST['dropDb']));
break;
case 'restore':
$sBackFilePath = BACKUP_FOLDER.decodeUrl($_POST['backUpId']);
restoreBackUp($sBackFilePath, $oConnection);
break;
case 'upload' :
uploadBackUp($_FILES['backUpFile'], isset($_POST['restoreDb']), $oConnection);
break;
case 'sync':
$bInternalLink = ($_POST['version']!='');
$sUrl = $_POST['backUpUrl'].($bInternalLink?'/index.php?page=remote&action='.$_POST['version']:'');
$sAuth = isset($_POST['useKeyRing'])?getKeyRing():$_POST['key_ring'];
syncBackUp($sUrl, $bInternalLink, $sAuth, isset($_POST['restoreDb']), $oConnection);
break;
case 'reset' :
resetDatabase($oConnection);
break;
default:
break;
}
}
//set Input Box for restoration
$oRestoreInputBox = new InputBox('Restauration d\'une sauvegarde', 'Etes-vous sur de vouloir charger la sauvegarde du #backUpDate# ?', array('Oui'=>'validateBackUp(\'#backUpId#\')', 'Non'=>''));
$oResetInputBox = new InputBox('Reset complet', 'Etes vous s&ucirc;r de vouloir proc&eacute;der &agrave; une r&eacute;intallation compl&egrave;te ? (vous allez perdre toutes vos donn&eacute;es)', array('Oui'=>'document.forms[\'reset\'].submit()', 'Non'=>''));
$sTitle = 'Suppression de la base de donn&eacute;es courante';
$sWarningMessage = 'Etes-vous sur de vouloir remplacer la base de donn&eacute;es par celle-ci ? Il est fortement conseill&eacute; de cr&eacute;er une sauvegarde avant une telle op&eacute;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] = ' <tr>
<td>Le '.$sBackUpName.'</td>
<td><input type="button" value="T&eacute;l&eacute;charger" onClick="goTo(\'?page=download&file='.$sBackUpId.'\');" /></td>
<td><input type="button" value="Restorer cette sauvegarde" onClick="'.$oRestoreInputBox->getAction().'" /></td>
</tr>';
}
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('<tr><td colspan="3"><p>Aucune sauvegarde disponible</p><p><input type="button" value="Cr&eacute;er une sauvegarde maintenant" onClick="document.download.submit();" /></p></td></tr>');
$sPageSwitchInfo = '';
}
//KeyRing
$sKeyRing = getKeyRing();
?>
<fieldset class="rounded">
<legend class="rounded">Sauvegardes disponibles</legend>
<br />
<form name="restore" action="?page=backUpCreator&action=restore" method="post">
<table class="maxWidth">
<tr>
<th class="top-left-rounded">Date</th>
<th>T&eacute;l&eacute;chargement</th>
<th class="top-right-rounded">Restoration</th>
</tr>
<?php echo implode("\n", $sLinkBackUp); ?>
<tr>
<th colspan="3" class="bottom-left-rounded bottom-right-rounded"><?php echo $oPageSwitcher->getPrevLink().'&nbsp;'.$sPageSwitchInfo.$iFileNb; ?> sauvegardes <?php echo $oPageSwitcher->getNextLink(); ?></th>
</tr>
</table>
<input type="hidden" name="backUpId" value="" />
</form>
</fieldset>
<fieldset class="rounded">
<legend class="rounded">Cr&eacute;er une sauvegarde</legend>
<form name="download" action="?page=backUpCreator&action=download" method="post">
<p>Sauvegarde de la base de donn&eacute;es <strong><?php echo DB_NAME; ?></strong> incluant les tables <?php echo implode(', ', getTables()); ?>.</p>
<p>Inclure les requ&ecirc;te de suppression de la base avant r&eacute;&eacute;criture : <input type="checkbox" name="dropDb" checked="checked" /></p>
<input type="submit" value="Lancer la sauvegarde" />
</form>
</fieldset>
<fieldset class="rounded">
<legend class="rounded">Ajouter une de vos sauvegardes</legend>
<form name="upload" action="?page=backUpCreator&action=upload" method="post" enctype="multipart/form-data">
<p>Ins&eacute;rer ici le fichier de sauvegarde (.sql) : <input type="file" name="backUpFile" /></p>
<p>remplacer la base de donn&eacute;es actuelle par celle-ci :
<input type="checkbox" name="restoreDb" onchange="if(document.forms['upload'].restoreDb.checked)<?php echo $oUploadInputBox->getAction(); ?>" />
</p>
<input type="submit" value="Ajouter la sauvegarde" />
</form>
</fieldset>
<fieldset class="rounded">
<legend class="rounded">Synchroniser la base avec un point d'acc&egrave;s</legend>
<form name="sync" action="?page=backUpCreator&action=sync" method="post">
<p>
Ins&eacute;rer ici l'url de sauvegarde : <input type="text" name="backUpUrl" style="width:250px;" value="<?php echo isset($_POST['backUpUrl'])?$_POST['backUpUrl']:''; ?>" />
<select name="version">
<option value="<?php echo ACCESS_POINT_LAST_VERSION; ?>">Derni&egrave;re version disponible</option>
<option value="<?php echo ACCESS_POINT_NEW_VERSION; ?>">Nouvelle version</option>
<option value="">aucune version (lien directe)</option>
</select>
</p>
<p>remplacer la base de donn&eacute;es actuelle celle du point d'acc&egrave;s : <input type="checkbox" name="restoreDb" onchange="if(document.forms['sync'].restoreDb.checked)<?php echo $oSyncInputBox->getAction(); ?>" /></p>
<p>
Utiliser le KeyRing de cette session pour l'authentification : <input type="checkbox" name="useKeyRing" checked="checked" onclick="setKeyRingInput();" />
<span id="authentification" style="display:none;">
utiliser celui-ci : <input type="text" name="key_ring" style="width:300px;" />
</span>
</p>
<script type="text/javascript">
function setKeyRingInput()
{
var bUseKeyRing = document.forms['sync'].elements['useKeyRing'].checked;
setBoxDisplay('authentification', bUseKeyRing?'n':'y');
}
</script>
<input type="submit" value="Synchroniser" />
</form>
</fieldset>
<fieldset class="rounded">
<legend class="rounded">KeyRing</legend>
<form name="keyring">
<p class="keyring">
<a href="#" onclick="setSelection('keyring', 'keyring');return false;"><img src="images/keyring.png" title="click pour s&eacute;lectionner la cl&eacute;" /></a>
<textarea name="keyring" class="disabled" rows="1" onclick="setSelection('keyring', 'keyring');"><?php echo $sKeyRing; ?></textarea>
</p>
</form>
</fieldset>
<fieldset class="rounded">
<legend class="rounded">R&eacute;-initialisation compl&egrave;te</legend>
<form name="reset" action="?page=backUpCreator&action=reset" method="post">
<p>Tout supprimer et r&eacute;initialiser l'application (aka la m&eacute;thode du bourinos) : <input type="button" value="Lancer" onclick="<?php echo $oResetInputBox->getAction(); ?>" /></p>
</form>
</fieldset>
<?php
echo $oRestoreInputBox->getHtml();
echo $oResetInputBox->getHtml();
echo $oUploadInputBox->getHtml();
echo $oSyncInputBox->getHtml();
?>

View File

@@ -1,68 +0,0 @@
0000-00-00 00:00:00 0.1 new feature Cr&eacute;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&eacute;ation des QCM supprim&eacute;e
0000-00-00 00:00:00 1.2 bug fix caract&egrave;res sp&eacute;ciaux lors de cr&eacute;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&eacute;connexion
0000-00-00 00:00:00 1.3 design Bords arrondis
0000-00-00 00:00:00 1.3 new feature T&eacute;l&eacute;chargement
0000-00-00 00:00:00 1.3 new feature Les r&eacute;ponses de l'&eacute;l&egrave;ve apparaissent sur les r&eacute;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 &agrave; la fin de l'&eacute;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&eacute;
0000-00-00 00:00:00 1.5 new feature Export de la base de donn&eacute;es
0000-00-00 00:00:00 1.5 new feature remont&eacute;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&eacute;l&eacute;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 &agrave; la cr&eacute;ation et &agrave; la modification de login
0000-00-00 00:00:00 1.5 bug fix onglet param&egrave;tre : possibilit&eacute; de changements sans v&eacute;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&eacute; des questions
0000-00-00 00:00:00 2.0 new feature T&eacute;l&eacute;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 &agrave; la page en cours apr&egrave;s d&eacute;connexion
0000-00-00 00:00:00 2.0 bug fix suppression compl&egrave;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&eacute;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&eacute;nom (siblings)
2010-03-04 13:54:26 2.1 new feature Cr&eacute;ation dynamique de base de donn&eacute;es
2010-03-04 13:36:51 2.1 bug fix Couper la liste des backups &agrave; 10 (et afficher un bouton)
2010-03-04 13:55:04 2.1 new feature Point d'acc&egrave;s pour back up : export et import de base de donn&eacute;es vers ou depuis un url
2010-03-10 09:27:12 2.1 bug fix Renforcement des s&eacute;curit&eacute;s d'acc&egrave;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&eacute;ponses sans question li&eacute;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&eacute; 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&eacute;l&eacute;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

File diff suppressed because it is too large Load Diff

View File

@@ -1,140 +0,0 @@
<?php
/* Displays all QCM in the database : finished QCM (and unfinished ones made by the connected user) */
//delete / desactivate a qcm
if(isset($_POST['deleteQcm']))
{
$sDeletedQcmName = getTextFromId(QCM_TABLE, $_POST['deleteQcm']);
deleteRow(QCM_TABLE, $_POST['deleteQcm']);
addFeed('DELETE', $_POST['deleteQcm'], QCM_TABLE, $sDeletedQcmName);
}
elseif(isset($_POST['desactivateQcm']))
{
setQcmValidity($_POST['desactivateQcm'], false);
}
elseif(isset($_POST['activateQcm']))
{
if(checkQcm($_POST['activateQcm']))
{
setQcmValidity($_POST['activateQcm'], true);
}
else
{
echo getError(array('Il reste des erreurs dans ce Qcm.', 'Il est n&eacute;cessaire de les corriger avant d\'activer ce Qcm'));
}
}
//set Input Box
$oDeleteInputBox = new InputBox('Suppression du QCM : <strong>#qcmName#</strong>', 'Voulez-vous vraiment #qcmAction# le QCM : <em>"#qcmName#"</em> ?');
$oEditInputBox = new InputBox( 'Modification du QCM : <strong>#qcmName#</strong>',
'Voulez-vous faire une copie du QCM : <em>"#qcmName#"</em> avant de le modifier ?',
array('Oui'=>'goTo(\'?page=qcmCreator&qcm=#idQcm#&copyQcm=1\')', 'Non'=>'goTo(\'?page=qcmCreator&qcm=#idQcm#&copyQcm=0\')'));
//display valid and not valid (unfinished) QCM
$asParams = array
(
'notValid' => array
(
'title' => 'QCM non finalis&eacute;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&eacute;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] = '<p>'.$asParamValues['title'].' :</p>
<table>
<tr>
<th width="35%" class="top-left-rounded">nom du QCM</th>
<th width="20%">Auteur</th>
<th width="15%">Derni&egrave;re modification</th>
<th width="15%">'.$asParamValues['editTitle'].' le QCM</th>
<th width="15%" class="top-right-rounded">'.$asParamValues['deleteTitle'].' le QCM</th>
</tr>';
foreach($asQcms as $asQcmRow)
{
$iQcmId = $asQcmRow['id_'.QCM_TABLE];
//link to the QCM
$asDisplay[$sParamName] .= '<tr><td class="qcmSelection" onclick="goTo(\'?page=qcm'.$asParamValues['goTo'].'&qcm='.$iQcmId.'\')"><p>'.$asQcmRow[QCM_TABLE].'</p></td>';
//get author info
$asAuthorInfo = selectRow(USER_TABLE, array($asQcmRow['id_'.USER_TABLE]), array(USER_TABLE.'_first_name', USER_TABLE.'_last_name'));
$asDisplay[$sParamName] .= '<td><p>'.ucwords($asAuthorInfo[USER_TABLE.'_first_name']).' '.ucwords($asAuthorInfo[USER_TABLE.'_last_name']).'</p></td><td><p>'.date('d/m/Y H:i:s', strtotime($asQcmRow['led'])).'</p></td>';
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 = '<input type="button" onClick="'.($asParamValues['copyQcm']?$oEditInputBox->getAction():'goTo(\'?page=qcmCreator&qcm='.$iQcmId.'\')').'" value="Editer">';
}
else
{
$sEdition = '<form method="POST" action="?page=frontal">
<input type="hidden" value="'.$iQcmId.'" name="activateQcm" />
<input type="submit" value="Activer">
</form>';
}
$asDisplay[$sParamName] .= '<td>'.$sEdition.'</td>
<td>
<form class="no-margin" name="'.$sFormName.'" method="POST" action="?page=frontal">
<input type="hidden" value="'.$iQcmId.'" name="'.$asParamValues['deleteAction'].'" />
<input type="button" value="'.$asParamValues['deleteTitle'].'" onclick="'.$oDeleteInputBox->getAction().'" />
</form>
</td></tr>';
}
else
{
$asDisplay[$sParamName] .= '<td class="divDisabled"></td><td class="divDisabled"></td></tr>';
}
$iTotal++;
}
$asDisplay[$sParamName] .= '<tr><th colspan="5" class="bottom-left-rounded bottom-right-rounded">Un total de '.$iTotal.' QCM</th></tr></table>';
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();
?>

View File

@@ -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;
}

View File

@@ -1,156 +0,0 @@
<?php
/*
* Copyright (C) 2010 Francois Lutran.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/gpl.html.
*/
/* First page on load */
//connection
session_start();
$sScriptStartTime = microtime();
require_once('config.php');
$oConnection = connection();
//clean data
cleanPost($_POST);
cleanPost($_GET);
cleanPost($_REQUEST);
//Page Management
$sRequestedPage = isset($_GET['page'])?$_GET['page']:DEFAULT_LOGGED_PAGE;
$sPage = pageAccessManagement($sRequestedPage);
$sPagePath = $sPage.'.php';
//Admin
$bConnected = checkSession();
$iUserId = $bConnected?$_SESSION['user']:false;
$bAdmin = isAdmin();
//display header
$asGeneralDisplay['beta'] = ($bAdmin && IS_BETA)?getA('?page=version', '&beta;', 'Envoyer un feedback', 'beta rounded'):'';
//display info
$sPageDesc = getPageDescription($sPage);
$asInfoDisplay['title'] = getHtml($sPageDesc, 'p', 'pageTitle rounded');
$asInfoDisplay['search'] = '';
if($bAdmin)
{
$asInfoDisplay['search'] = '<form name="search" method="post" action="?page=search" onSubmit="this.elements[\'keywords\'].value = concatenateKeyWords(this.elements[\'keywords\'].value);">
Recherche <input type="text" name="keywords" style="border-color:black;" value="'.(isset($_REQUEST['keywords'])?str_replace('+', ' ', $_REQUEST['keywords']):'').'" />
</form>';
}
$sConnectedUser = $bConnected?'Connect&eacute; : '.getHtml(ucwords($_SESSION['firstName'].' '.$_SESSION['lastName']), 'strong'):'Non connect&eacute;';
$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&eacute;conseill&eacute; pour cette application',
'Nous vous conseillons un navigateur optimis&eacute; (et gratuit) tel que
<a href="http://www.mozilla-europe.org/fr/firefox/" title="T&eacute;l&eacute;charger Firefox">Firefox</a>'));
}
/**
* 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&eacute;l&eacute;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']);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="author" content="Franzz" />
<link href="style.css" rel="stylesheet" type="text/css" />
<!--[if IE]>
<link href="styleIe.css" rel="stylesheet" type="text/css" />
<![endif]-->
<script type="text/javascript" src="functions.js"></script>
<link rel="shortcut icon" href="images/favicon.ico" />
<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="?page=rss"/>
<title>QCM - <?php echo $sPageDesc; ?></title>
</head>
<body id="top">
<img src="images/button_gradient_hover.gif" class="preload" alt="preloaded image" />
<img src="images/qcm_selection_hover.gif" class="preload" alt="preloaded image" />
<div id="layer" class="layer" style="display:none;"></div>
<?php echo $asGeneralDisplay['beta']; ?>
<div id="header" class="rounded">
<h1>&Eacute;valuation par <span class="logo">Q</span>CM</h1>
<h3>Coll&egrave;ge International</h3>
</div>
<div id="topMenu"><?php echo $asGeneralDisplay['menu']; ?></div>
<div id="main" class="rounded">
<div id="info"><?php echo $asGeneralDisplay['info']; ?></div>
<?php echo $asGeneralDisplay['main']; ?>
</div>
<div id="footer">
<p>
Page charg&eacute;e en <?php echo getElapsedTime($sScriptStartTime); ?> seconde(s). Application r&eacute;alis&eacute;e par M. Lutran pour le coll&egrave;ge International de Fontainebleau.
<br />Projet sous licence <a href="http://www.gnu.org/licenses/gpl.html" target="_blank">GPLv3</a>. <?php echo $asGeneralDisplay['version']; ?>
</p>
<?php echo $asGeneralDisplay['rss']; ?>
</div>
</body>
</html>

View File

@@ -1,154 +0,0 @@
<?php
/* Setting up settings.php for constants storage */
//common variables
$sDbServer = isset($_POST['DB_SERVER'])?$_POST['DB_SERVER']:'localhost';
$sDbLogin = isset($_POST['DB_LOGIN'])?$_POST['DB_LOGIN']:'root';
$sDbName = isset($_POST['DB_NAME'])?$_POST['DB_NAME']:'dbqcm';
$sFirstName = isset($_POST['firstname'])?$_POST['firstname']:'';
$sLastName = isset($_POST['lastname'])?$_POST['lastname']:'';
$sFeedBackMail = isset($_POST['FEEDBACK_MAIL'])?$_POST['FEEDBACK_MAIL']:'';
$iMaxClass = isset($_POST['MAX_CLASS'])?$_POST['MAX_CLASS']:8;
$iMinGrade = isset($_POST['MIN_GRADE'])?$_POST['MIN_GRADE']:6;
$iMaxGrade = isset($_POST['MAX_GRADE'])?$_POST['MAX_GRADE']:3;
//process
if(isset($_POST['READY_TO_USE']))
{
if(file_exists(SETTINGS_FILE))
{
unlink(SETTINGS_FILE);
}
$oConnection = @mysql_connect($sDbServer, $sDbLogin, $_POST['DB_PASS']);
if(!$oConnection)
{
addMessage(getError(array('Connexion impossible', 'V&eacute;rifier les identifiants')));
}
elseif($sFirstName=='' || $sLastName=='')
{
addMessage(getError('Informations incompl&egrave;tes'));
}
elseif($_POST['pass']!=$_POST['pass2'])
{
addMessage(getError('Les mots de passes ne sont pas les m&ecirc;mes'));
}
else
{
$asAdminInfo = array(array($sFirstName, $sLastName, '0', '0', encryptPassword($_POST['pass']), 1));
if(install($oConnection, $sDbName, $asAdminInfo, isset($_POST['delete_db'])))
{
//setting Constants into file
$asConstants = array( 'DB_SERVER' => $_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 = '<?php '."\n".implodeAll($asConstants, '\', \'', "\n", 'define(\'', '\');')."\n".' ?>';
if(file_put_contents(SETTINGS_FILE, $sSettingsFile, FILE_APPEND))
{
relocate(getSuccess('Installation termin&eacute;e'));
}
else
{
addMessage(getError(array('Cr&eacute;ation de fichier impossible', 'V&eacute;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()
?>
<p>Bienvenue dans QcmMaker v<?php echo STABLE_VERSION; ?> !</p>
<p>Veuillez entrer les informations suivantes : </p>
<form method="post" action="?page=install">
<fieldset class="rounded">
<legend class="rounded">Informations server</legend>
<table class="rounded">
<tr>
<td class="top-left-rounded">Adresse de votre server</td>
<td class="top-right-rounded"><input type="text" name="DB_SERVER" value="<?php echo $sDbServer; ?>" /></td>
</tr>
<tr>
<td>login MySql</td>
<td><input type="text" name="DB_LOGIN" value="<?php echo $sDbLogin; ?>" /></td>
</tr>
<tr>
<td>Mot-de-passe MySql</td>
<td><input type="password" name="DB_PASS" /></td>
</tr>
<tr>
<td>Nom de la base de donn&eacute;es</td>
<td><input type="text" name="DB_NAME" value="<?php echo $sDbName; ?>" onchange="replaceInnerText('db_name', this.value);" /></td>
</tr>
<tr>
<td class="bottom-left-rounded">Supprimer la base de donn&eacute;es '<span id="db_name"><?php echo $sDbName; ?></span>' (si existante)</td>
<td class="bottom-right-rounded"><input type="checkbox" name="delete_db" /></td>
</tr>
</table>
</fieldset>
<fieldset class="rounded">
<legend class="rounded">Informations administrateur</legend>
<table class="rounded">
<tr><th colspan="2" class="top-left-rounded top-right-rounded">Cr&eacute;ation du compte administrateur</th></tr>
<tr>
<td>Pr&eacute;nom</td>
<td><input type="text" name="firstname" value="<?php echo $sFirstName; ?>" /></td>
</tr>
<tr>
<td>Nom de famille</td>
<td><input type="text" name="lastname" value="<?php echo $sLastName; ?>" /></td>
</tr>
<tr>
<td>Mot de passe</td>
<td><input type="password" name="pass" /></td>
</tr>
<tr>
<td>Mot de passe (une nouvelle fois)</td>
<td><input type="password" name="pass2" /></td>
</tr>
<tr>
<td class="bottom-left-rounded">Adresse email de votre administrateur (optionel)</td>
<td class="bottom-right-rounded"><input type="text" name="FEEDBACK_MAIL" value="<?php echo $sFeedBackMail; ?>" /></td>
</tr>
</table>
</fieldset>
<fieldset class="rounded">
<legend class="rounded">Param&egrave;tres suppl&eacute;mentaires</legend>
<input type="hidden" name="READY_TO_USE" value="1" />
<table class="rounded">
<tr>
<td class="top-left-rounded">Nombre de classes maximum par section</td>
<td class="top-right-rounded left"><input type="text" name="MAX_CLASS" value="<?php echo $iMaxClass; ?>" /></td>
</tr>
<tr>
<td>Premi&egrave;re section concern&eacute;e</td>
<td class="left"><input type="text" name="MIN_GRADE" value="<?php echo $iMinGrade; ?>" />&egrave;me</td>
</tr>
<tr>
<td class="bottom-left-rounded">Derni&egrave;re section concern&eacute;e</td>
<td class="bottom-right-rounded left"><input type="text" name="MAX_GRADE" value="<?php echo $iMaxGrade; ?>" />&egrave;me</td>
</tr>
</table>
</fieldset>
<p style="text-align:center;"><input style="margin-top:10px;" type="submit" value ="Valider" /></p>
</form>

View File

@@ -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&eacute;ation de QCM', 1)

View File

@@ -1,19 +0,0 @@
<form action="?page=logon&amp;register=0" method="post">
<table>
<tr><th colspan="2" class="top-left-rounded top-right-rounded">Connexion</th></tr>
<tr>
<td>Pr&eacute;nom</td>
<td><input type="text" name="firstName" value="<?php echo isset($_POST['firstName'])?$_POST['firstName']:''; ?>" /></td>
</tr>
<tr>
<td>Nom</td>
<td><input type="text" name="login" value="<?php echo isset($_POST['login'])?$_POST['login']:''; ?>" /></td>
</tr>
<tr>
<td class="bottom-left-rounded">Mot de passe</td>
<td class="bottom-right-rounded"><input type="password" name="pass" /></td>
</tr>
<tr><th colspan="2" class="blank"><input type="submit" value="Connexion" /></th></tr>
<tr><td colspan="2" class="rounded"><a href="?page=register">Cr&eacute;er un compte</a></td></tr>
</table>
</form>

View File

@@ -1,278 +0,0 @@
<?php
/* Displays the qcm form */
//Edition or creation selector
$bEdition = false;
$iNbQuestions = 0;
$asDisplayQuestions = $asAnswersCurrentState = array();
$sAdditionalBoxesScript = 'addQuestion();';
//get The Qcm in the database
if(isset($_GET['qcm']))
{
$iQcmId = $_GET['qcm'];
/*
if($_GET['copyQcm'])
{
$oQcm = new qcm($iQcmId);
$iQcmId = $oQcm->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 = '<a href="#" id="question'.$iQuestionId.'ImageDelete" class="deleteImage" title="Supprimer cette image" onclick="deleteImage(\'question'.$iQuestionId.'\');return false;">X</a>';
$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);
}
}
?>
<script type="text/javascript">
temp = new Array();
function save(formId)
{
for(var i in document.forms[formId].elements)
{
var elem = document.forms[formId].elements[i];
if(elem.type == 'text' || elem.type == 'textarea')
{
temp[elem.name] = elem.value;
}
else if(elem.type == 'checkbox')
{
temp[elem.name] = elem.checked;
}
}
}
function load(formId)
{
for(var i in document.forms[formId].elements)
{
var elem = document.forms[formId].elements[i];
if(temp[elem.name])
{
if(elem.type == 'checkbox')
{
document.forms[formId].elements[elem.name].checked = temp[elem.name];
}
else
{
document.forms[formId].elements[elem.name].value = temp[elem.name];
}
}
}
}
function addQuestion(idRequestingQuestion)
{
var questionId = parseInt(document.forms['temp'].elements['currentquestion'].value);
if(!idRequestingQuestion || idRequestingQuestion==questionId)
{
save('qcmCreator');
questionId++;
newQuestion = '<?php echo getInputHtml('Question'); ?>';
newQuestion = newQuestion.replace(/\#questionId\#/g, questionId);
newQuestion = newQuestion.replace(/\#answerId\#/g, 1);
document.getElementById("questionpanel").innerHTML += newQuestion;
document.getElementById("temp").innerHTML += '<?php echo getInputHtml('CurrentAnswer'); ?>';
document.forms['temp'].elements['currentquestion'].value = questionId;
load('qcmCreator');
if(idRequestingQuestion)
{
document.forms['qcmCreator'].elements['newquestion'+(questionId-1)].focus();
}
}
}
function addAnswer(questionId, idRequestingAnswer)
{
var answerId = parseInt(document.forms['temp'].elements["question"+questionId+"currentanswer"].value);
if(!idRequestingAnswer || idRequestingAnswer==answerId)
{
save('qcmCreator');
answerId++;
newAnswer = '<?php echo getInputHtml('Answer'); ?>';
newAnswer = newAnswer.replace(/\#answerId\#/g, answerId);
newAnswer = newAnswer.replace(/\#questionId\#/g, questionId);
newRightAnswer = '<?php echo getInputHtml('RightAnswer'); ?>';
newRightAnswer = newRightAnswer.replace(/\#answerId\#/g, answerId);
newRightAnswer = newRightAnswer.replace(/\#questionId\#/g, questionId);
document.getElementById("question"+questionId+"answerpanel").innerHTML += newAnswer;
document.getElementById("question"+questionId+"rightanswerpanel").innerHTML += newRightAnswer;
document.forms['temp'].elements["question"+questionId+"currentanswer"].value = answerId;
load('qcmCreator');
if(idRequestingAnswer)
{
document.forms['qcmCreator'].elements['newquestion'+questionId+'answer'+(answerId-1)].focus();
}
}
}
function setDeletedData(id, forceSet)
{
var deletedData = document.forms['qcmCreator'].elements['deletedData'].value;
var index = deletedData.indexOf(id);
if(index === -1 && (!forceSet || forceSet=='y'))
{
deletedData += id+',';
}
else if(index !== -1 && (!forceSet || forceSet=='n'))
{
deletedData = deletedData.replace(new RegExp(id+',', 'i'), '');
}
document.forms['qcmCreator'].elements['deletedData'].value = deletedData;
}
function deleteQuestion(id)
{
var action = disableBox('qcmCreator', id);
disableBox('qcmCreator', id+'image', action);
disableImage(id, action);
setDeletedData(id);
for(var i in document.forms['qcmCreator'].elements)
{
var elem = document.forms['qcmCreator'].elements[i];
if((elem.type == 'text') && elem.id.indexOf(id) !== -1)
{
deleteAnswer(elem.id, action);
}
}
}
function deleteAnswer(id, forceSet)
{
var action = disableBox('qcmCreator', id, forceSet);
setDeletedData(id, forceSet);
var index = id.length-1;
var rightAnswerId = '';
while(id.charAt(index).toString().search(/^[0-9]+$/) == 0)
{
rightAnswerId += id.charAt(index);
index--;
}
disableBox('qcmCreator', id+'<?php echo RIGHT_ANSWER; ?>'+rightAnswerId, forceSet);
//enable related question
var relatedQuestion = id.substring(0, id.indexOf('<?php echo ANSWER_TABLE; ?>'));
if(!document.forms['qcmCreator'].elements[relatedQuestion])
{
relatedQuestion = relatedQuestion.substring(3);
}
if(action == 'n' && document.forms['qcmCreator'].elements[relatedQuestion].disabled)
{
deleteQuestion(relatedQuestion);
}
}
function deleteImage(id, forceSet)
{
action = disableImage(id, forceSet);
setDeletedData(id+'image');
if(action == 'n' && document.forms['qcmCreator'].elements[id].disabled)
{
deleteQuestion(id);
}
}
function disableImage(id, forceSet)
{
//image
var action = disableDiv(id+"imageDiv", forceSet);
document.getElementById(id+"imageSrc").style.opacity = (action=='y')?0.5:1;
hover(id+'ImageDelete', action);
//input
disableBox("qcmCreator", id+"image", action);
disableDiv(id+"imageText", forceSet);
return action;
}
</script>
<form action="?page=qcmProcess" method="post" name="qcmCreator" enctype="multipart/form-data">
<table class="maxWidth" id="questionpanel">
<tr>
<td colspan="3" class="rounded"><p class="important">Nom du QCM : <input type="text" name="qcm" value="<?php echo $bEdition?$sQcmName:''; ?>" /></p></td>
</tr>
<tr><td colspan="3" class="blank">&nbsp;</td></tr>
<tr>
<th width="50%" class="top-left-rounded">Libell&eacute; de la question</th>
<th width="30%">R&eacute;ponses possibles</th>
<th width="10%" class="top-right-rounded">Bonne(s) r&eacute;ponse(s)</th>
</tr>
<?php echo implode($asDisplayQuestions); ?>
</table>
<table class="maxWidth joinedTable">
<tr>
<th colspan="3" class="bottom-left-rounded bottom-right-rounded">une fois les questions compl&eacute;t&eacute;es, cliquez sur le bouton 'Cr&eacute;er le QCM'</th>
</tr>
<tr>
<td class="blank" colspan="4">
<input type="hidden" name="user" value="<?php echo $_SESSION['user']; ?>" />
<input type="hidden" name="author" value="<?php echo $bEdition?$sQcmAuthorId:$_SESSION['user']; ?>" />
<input type="hidden" name="id_<?php echo QCM_TABLE; ?>" value="<?php echo $bEdition?$iQcmId:'new'; ?>" />
<input type="hidden" name="deletedData" id="deletedData" value="">
<input type="button" name="annuler" onclick="goTo('?page=frontal');" value="Annuler">
&nbsp;
<input type="submit" value="<?php echo $bEdition?"Modifier le QCM":"Cr&eacute;er le QCM"; ?>" />
</td>
</tr>
</table>
</form>
<form id="temp" name="temp" style="display:none;">
<input type="hidden" name="currentquestion" id="currentquestion" value="<?php echo getMaxIncrementedValue(QUESTION_TABLE); ?>">
<?php echo implode($asAnswersCurrentState); ?>
</form>
<script type="text/javascript">
<?php echo $sAdditionalBoxesScript; ?>
</script>

View File

@@ -1,121 +0,0 @@
<?php
/* Check the questions and answers, and add the QCM into database */
if(!checkOrigin('qcmCreator') || !isset($_POST['user']))
{
relocate(getError(array('Processus incorrect', 'Retour forc&eacute; &agrave; l\'accueil')));
}
else
{
//reconnection in case of session time out
setSession($_POST['user']);
$sQcmName = ($_POST[QCM_TABLE] != '')?$_POST[QCM_TABLE]:DEFAULT_QCM_NAME;
//Add / update the Qcm and unvalidate the qcm
$bNewQcm = ($_POST['id_'.QCM_TABLE]=='new');
$asData = array('id_user'=>$_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&eacute;es'), 'qcmReader', array('qcm'=>$iQcmId));
}
else
{
relocate('', 'qcmCreator', array('qcm'=>$iQcmId));
}
}
?>

View File

@@ -1,60 +0,0 @@
<?php
/* Displays the selected QCM and check for previous results */
if(!isset($_GET['qcm']) || !is_numeric($_GET['qcm']) || $_GET['qcm']<=0)
{
echo getError(array('Qcm inconnu', 'Qcm n&deg;'.$_GET['qcm']));
}
else
{
$iQcmId = $_GET['qcm'];
$asQcm = getQcm($iQcmId);
$sQcmName = $asQcm[QCM_TABLE];
//check if the user had already played this QCM
$bplayed = checkPreviousResults($_SESSION['user'], $iQcmId);
echo $bplayed?getWarning('Vous avez d&eacute;j&agrave; r&eacute;pondu &agrave; ce QCM. Les r&eacute;sultats ne seront pas compt&eacute;s'):'';
//display the questions
$iNbQuestions = 0;
foreach(shuffle_assoc($asQcm[QUESTION_TABLE]) as $iQuestionId => $asAnswers)
{
$asDisplayAnswers = $asDisplayRightAnswers = array();
$iNbAnswers = 0;
$iNbQuestions++;
foreach($asAnswers[ANSWER_TABLE] as $iAnswerId => $asAnswer)
{
$iNbAnswers++;
$asDisplayAnswers[$iAnswerId] = '<p class="question">'.$iNbAnswers.'. '.$asAnswer[ANSWER_TABLE].'</p>';
$asDisplayRightAnswers[$iAnswerId] = getInputHtml('RightAnswer', array($iQuestionId, $iAnswerId, '', ''));
}
$sImage = ($asAnswers['image']!='')?getHtml(getImage(IMAGE_FOLDER.$asAnswers['image']), 'div', 'qcmReader'):'';
$asDisplayQuestions[$iQuestionId] = '<tr>
<td width="10%">'.$iNbQuestions.'.</td>
<td width="60%">'.$asAnswers[QUESTION_TABLE].'<br />'.$sImage.'</td>
<td>'.implode("\n", $asDisplayAnswers).'</td>
<td>'.implode("\n", $asDisplayRightAnswers).'</td>
</tr>';
}
}
?>
<form action="?page=qcmResults" method="post">
<table class="maxWidth">
<tr>
<th colspan="4" class="top-left-rounded top-right-rounded"><p class="tresimportant"><?php echo $sQcmName; ?></p></th>
</tr>
<?php
echo implode("\n", $asDisplayQuestions);
?>
<tr>
<td colspan="4" class="bottom-left-rounded bottom-right-rounded">
<input type="hidden" name="qcm" value="<?php echo $iQcmId; ?>" />
<input type="hidden" name="user" value="<?php echo $_SESSION['user']; ?>" />
<input style="margin:10px;font-size:large;" type="submit" value="R&eacute;sultats" />
</td>
</tr>
</table>
</form>

View File

@@ -1,81 +0,0 @@
<?php
/* return user's results */
//reconnection in case of session time out
if(!checkOrigin('qcmReader', array('qcm'=>$_POST['qcm'])) || !isset($_POST['user']))
{
relocate(getError('Vous devez r&eacute;pondre &agrave; un QCM pour acc&eacute;der &agrave; &agrave; la page de r&eacute;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] = '<tr><td>'.$asQuestion[QUESTION_TABLE].'</td>';
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]?'<p>&bull; '.$asAnswer[ANSWER_TABLE].'</p>':'' ;
$asDisplayUserResults .= $bUserAnswer?'<p>&bull; '.$asAnswer[ANSWER_TABLE].'</p>':'' ;
}
$asDisplayResults[$iQuestionId] .= '<td class="left">'.$asDisplayRightResults.'</td><td class="left">'.$asDisplayUserResults.'</td>';
if($bAnswerUserResult)
{
$asDisplayResults[$iQuestionId] .= "<td class=\"true\">Vrai</td>";
$iNbRightAnswers++;
}
else
{
$asDisplayResults[$iQuestionId] .= "<td class=\"false\">Faux</td>";
}
$asDisplayResults[$iQuestionId] .= '</tr>';
}
//Update results table
$sUpdateResult = '';
$bplayed = checkPreviousResults($_SESSION['user'], $iQcmId);
if($bplayed)
{
$sUpdateResult = '(Votre note n\'a pas &eacute;t&eacute; enregistr&eacute;e)';
}
else
{
addResult($_SESSION['user'], $iQcmId, $iNbRightAnswers/$iNbQuestions);
addFeed('CREATE', $_SESSION['firstName'].' '.$_SESSION['lastName'], RESULT_TABLE, getTextFromId(QCM_TABLE, $iQcmId));
}
}
?>
<table>
<tr>
<th colspan="4" class="rounded"><p class="tresimportant"><?php echo $sQcmName; ?> - R&eacute;sultats</p></th>
</tr>
<tr><td class="blank"></td></tr>
<tr>
<th class="top-left-rounded" width="40%"><p>Question</p></th>
<th width="25%"><p>Bonnes r&eacute;ponses</p></th>
<th width="25%"><p>Vos r&eacute;ponses</p></th>
<th width="10%" class="top-right-rounded"><p>Votre r&eacute;sultat</p></th>
</tr>
<?php echo implode("\n", $asDisplayResults); ?>
<tr>
<td colspan="4" class="bottom-left-rounded bottom-right-rounded">
<p class="tresimportant"><?php echo ucwords($_SESSION['firstName'].' '.$_SESSION['lastName']).', votre note : '.round($iNbRightAnswers/$iNbQuestions*20, 2).'/20'; ?></p>
<p><?php echo $sUpdateResult; ?></p>
</td>
</tr>
</table>

View File

@@ -1,36 +0,0 @@
<?php
$sLogin = isset($_POST['login'])?$_POST['login']:'';
$sFirstName = isset($_POST['firstname'])?$_POST['firstname']:'';
?>
<form action="?page=logon&register=1" method="post">
<table>
<tr><th colspan="2" class="top-left-rounded top-right-rounded">Cr&eacute;ation de compte</th></tr>
<tr>
<td>Pr&eacute;nom</td>
<td><input type="text" name="firstname" value="<?php echo $sFirstName; ?>" /></td>
</tr>
<tr>
<td>Nom de famille</td>
<td><input type="text" name="login" value="<?php echo $sLogin; ?>" /></td>
</tr>
<tr>
<td>Classe</td>
<td><?php echo getClasses(); ?></td>
</tr>
<tr>
<td>Mot de passe</td>
<td><input type="password" name="pass" /></td>
</tr>
<tr>
<td class="bottom-left-rounded">Mot de passe (une nouvelle fois)</td>
<td class="bottom-right-rounded"><input type="password" name="pass2" /></td>
</tr>
<tr>
<th colspan="2" class="blank">
<input type="button" name="annuler" onclick="goTo('?page=logon');" value="Annuler">
&nbsp;&nbsp;
<input type="submit" value="S'enregistrer">
</th>
</tr>
</table>
</form>

View File

@@ -1,226 +0,0 @@
<?php
/* RSS Feed */
$bNoTemplate = true;
$asRssFeed = selectRows(array('from'=>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<43>ation ';
switch($asRssItem['type'])
{
case 'database':
$sTitle .= 'd\'une nouvelle sauvegarde';
$sDesc = 'Une nouvelle sauvegarde de la base de donn<6E>es "'.$asRssItem['source'].'" a <20>t<EFBFBD> cr<63><72>e.
Chemin : '.$asRssItem['old_value'];
break;
case QCM_TABLE:
$sTitle .= 'd\'un QCM';
$sDesc = 'Le QCM nomm<6D> "'.$asRssItem['old_value'].'" a <20>t<EFBFBD> cr<63><72>';
break;
case QUESTION_TABLE:
$sTitle .= 'd\'une question';
$sDesc = 'La question "'.$asRssItem['old_value'].'" a <20>t<EFBFBD> cr<63><72>';
break;
case 'image':
$sTitle .= 'd\'une image';
$sDesc = 'L\'image "'.$asRssItem['old_value'].'" a <20>t<EFBFBD> ajout<75>';
break;
case ANSWER_TABLE:
$sTitle .= 'd\'une proposition de r<>ponse';
$sDesc = 'La proposition de r<>ponse "'.$asRssItem['old_value'].'" a <20>t<EFBFBD> cr<63><72>';
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<74>';
break;
case CHANGELOG_TABLE:
$sTitle .= 'd\'un changelog';
$sDesc = 'La modification n<>'.$asRssItem['source'].'. "'.$asRssItem['old_value'].'" a <20>t<EFBFBD> ajout<75>';
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<6F>navant nomm<6D> '.$asRssItem['new_value'];
break;
case USER_TABLE.'_class':
$sTitle .= 'de la classe d\'un utilisateur ';
$sDesc = 'l\'utilisateur "'.ucwords($asRssItem['source']).'" est pass<73> de la classe '.$asRssItem['old_value'].' <20> la classe '.$asRssItem['new_value'];
break;
case QCM_TABLE:
$sTitle .= 'd\'un QCM';
$sDesc = 'Le QCM nomm<6D> "'.$asRssItem['old_value'].'" a <20>t<EFBFBD> modifi<66>';
break;
case QUESTION_TABLE:
$sTitle .= 'd\'une question';
$sDesc = 'La question "'.$asRssItem['old_value'].'" a <20>t<EFBFBD> modifi<66>e';
break;
case 'image':
$sTitle .= 'd\'une image';
$sDesc = 'L\'image "'.$asRssItem['old_value'].'" a <20>t<EFBFBD> modifi<66>';
break;
case ANSWER_TABLE:
$sTitle .= 'd\'une proposition de r<>ponse';
$sDesc = 'La proposition de r<>ponse "'.$asRssItem['old_value'].'" a <20>t<EFBFBD> modif<69>';
break;
case CHANGELOG_TABLE:
$sTitle .= 'd\'un changelog';
$sDesc = 'La modification n<>'.$asRssItem['source'].'. "'.$asRssItem['old_value'].'" a <20>t<EFBFBD> modifi<66>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 <20>t<EFBFBD> activ<69>';
break;
case CHANGELOG_TABLE:
$sTitle .= 'd\'un changelog';
$sDesc = 'La modification n<>'.$asRssItem['source'].'. "'.$asRssItem['old_value'].'" est achev<65>';
break;
}
break;
case 'DESACTIVATE':
$sTitle .= 'D<>sactivation ';
switch($asRssItem['type'])
{
case QCM_TABLE:
$sTitle .= 'd\'un qcm';
$sDesc = 'Le qcm "'.$asRssItem['old_value'].'" a <20>t<EFBFBD> d<>sactiv<69>';
break;
case CHANGELOG_TABLE:
$sTitle .= 'd\'un changelog';
$sDesc = 'La modification n<>'.$asRssItem['source'].'. "'.$asRssItem['old_value'].'" est pass<73> en mode "non achev<65>"';
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 <20>t<EFBFBD> supprim<69>';
break;
case QCM_TABLE:
$sTitle .= 'd\'un qcm ';
$sDesc = 'Le qcm intitul<75> "'.$asRssItem['old_value'].'" a <20>t<EFBFBD> supprim<69>';
break;
case QUESTION_TABLE:
$sTitle .= 'd\'une question';
$sDesc = 'La question "'.$asRssItem['old_value'].'" a <20>t<EFBFBD> supprim<69>e';
break;
case 'image':
$sTitle .= 'd\'une image';
$sDesc = 'L\'image "'.$asRssItem['old_value'].'" a <20>t<EFBFBD> supprim<69>e';
break;
case ANSWER_TABLE:
$sTitle .= 'd\'une proposition de r<>ponse';
$sDesc = 'La proposition de r<>ponse "'.$asRssItem['old_value'].'" a <20>t<EFBFBD> supprim<69>e';
break;
case CHANGELOG_TABLE:
$sTitle .= 'd\'un changelog';
$sDesc = 'La modification n<>'.$asRssItem['source'].'. "'.$asRssItem['old_value'].'" a <20>t<EFBFBD> abandonn<6E>';
break;
}
break;
case 'RESET':
$sTitle .= 'R<>initialisation de la base de donn<6E>es ';
$sDesc = 'La base de donn<6E>es "'.$asRssItem['source'].'" a <20>t<EFBFBD> supprim<69>e et r<>install<6C>e';
break;
case 'RESTORE':
$sTitle .= 'Restauration de la base de donn<6E>es ';
$sDesc = 'La base de donn<6E>es "'.$asRssItem['old_value'].'" a <20>t<EFBFBD> restaur<75>e';
break;
case 'UPLOAD':
$sTitle .= 'Upload d\'une base de donn<6E>es ';
$sDesc = 'La base de donn<6E>es "'.$asRssItem['old_value'].'" ';
switch($asRssItem['type'])
{
case 'file':
$sDesc .= 'a <20>t<EFBFBD> upload<61>';
break;
case 'sync':
$sDesc = 'a <20>t<EFBFBD> synchronis<69>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<63>';
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 = '<?xml version="1.0" encoding="ISO-8859-1" ?>';
$sRssFeedHeader = getHtml('QcmMaker Rss Feed', 'title');
$sRssFeedHeader .= getHtml($sRssFeedUrl, 'link');
$sRssFeedHeader .= getHtml('Copyright (C) '.date('Y').' Fran<61>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;
?>

View File

@@ -1,76 +0,0 @@
<?php
/* Search database for keywords */
//security check
if(!function_exists('checkOrigin') || !$bAdmin)
{
require_once 'config.php';
relocate(getError('Acc&egrave;s interdit'));
}
if(!isset($_REQUEST['keywords']))
{
relocate(getError('Cherchez au moins un mot'));
}
else
{
$asKeyWords = explode('+', $_REQUEST['keywords']);
$sHtmlKeyWords = getHtml($asKeyWords, 'em', '', '', array(), false, ', ');
foreach($asKeyWords as $sKeyWord)
{
foreach(getTables() as $sTableName)
{
$asColumnConstraint = "";
foreach(getTableColumnNames($sTableName) as $sColumnName)
{
if(strpos($sColumnName, 'id_')===false && $sColumnName != 'pass')
{
if($asColumnConstraint != "")
{
$asColumnConstraint .= "OR";
}
$asColumnConstraint .= " $sColumnName LIKE '%$sKeyWord%' ";
}
}
$sQuery = "SELECT /* ".basename(__FILE__)." ".__LINE__." */ *
FROM $sTableName
WHERE $asColumnConstraint";
$asTableResult = getArrayQuery($sQuery);
foreach($asTableResult as $asRow)
{
$sRowId = $sTableName.$asRow['id_'.$sTableName];
$asResult[$sRowId] = $asRow;
$asRank[$sRowId] = isset($asRank[$sRowId])?($asRank[$sRowId]+1):1;
}
}
}
if(isset($asRank))
{
arsort($asRank);
foreach($asRank as $sRowId=>$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<74>e sur les mots : '.$sHtmlKeyWords)));
}
}
function filterTable($sColumnName)
{
return (!is_numeric($sColumnName) && $sColumnName!='pass');
}
?>
<p>Mots recherch<63>s : <?php echo $sHtmlKeyWords; ?></p>
<p>R<>sultat<?php echo (count($asSearchResults)>1)?'s':''; ?> de la recherche :</p>
<?php echo implode($asSearchResults); ?>

View File

@@ -1,34 +0,0 @@
<?php
/*------------------------Remplacer les valeurs ci-dessous par vos parametres-----------------------*/
//remplacez par l'adresse de votre server
@define('DB_SERVER', 'localhost');
//remplacez par votre login mysql
@define('DB_LOGIN', 'root');
//remplacez par votre mot de passe mysql
@define('DB_PASS', '0nadmin');
//remplacez par le mot de passe de votre choix
@define('ADMIN_PASS', '123456');
//remplacer par l'adresse email de votre administrateur
@define('FEEDBACK_MAIL', 'francois.lutran@gmail.com');
/*------------------Remplacer les valeurs ci-dessous par vos parametres [OPTIONNEL]-----------------*/
//Nom de la base de donn<6E>es
@define('DB_NAME', 'dbqcm');
//Nombre maximum de class pour une meme section
@define('MAX_CLASS', 8);
//Premiere section (6 pour 6eme)
@define('MIN_GRADE', 6);
//Derniere section (3 pour 3eme)
@define('MAX_GRADE', 3);
?>

View File

@@ -1,44 +0,0 @@
<?php
/* displays user's grades */
$iOutOf = isset($_POST['outofvalue'])?$_POST['outofvalue']:20;
$aiConstraints = array('grade' => $_SESSION['grade'], 'class' => $_SESSION['class'], USER_TABLE => $_SESSION['user']);
$asResults = getResults($aiConstraints);
if(!$asResults)
{
$asDisplay = array('<tr><td colspan="3"><p class="noinfo">Aucune note.Vous avez r&eacute;pondu &agrave; aucun QCM</p></td></tr>', );
$sDisplayAverage = '<th colspan="3" class="bottom-left-rounded bottom-right-rounded">Moyenne : Aucune donn&eacute;e disponible</th>';
}
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] = '<tr><td>'.$asQcmResultInfo[QCM_TABLE].'</td><td>'.roundMark($iOutOf, $asQcmResultInfo[RESULT_TABLE]).' / '.$iOutOf.'</td><td>'.$iClassAvg.' / '.$iOutOf.'</td></tr>';
}
$sDisplayAverage = '<th colspan="2" class="bottom-left-rounded">Moyenne : '.$iUserGlobalAvg.' / '.$iOutOf.'</th><th class="bottom-right-rounded">Moyenne de la classe : '.$iClassGlobalAvg.' / '.$iOutOf.'</th>';
}
?>
<table class="maxWidth">
<tr>
<td colspan="3" class="rounded"><p class="tresimportant">Les notes de <?php echo $_SESSION['firstName']." ".$_SESSION['lastName']; ?></p></td>
</tr>
<tr><td colspan="3" class="blank"></td></tr>
<tr>
<th class="top-left-rounded">QCM</th>
<th><?php echo getOutOfForm($iOutOf, false, '?page=stats', 'Note de '.$_SESSION['firstName'].' '.$_SESSION['lastName'].' :'); ?></th>
<th class="top-right-rounded">Moyenne de la classe</th>
</tr>
<?php echo implode("\n", $asDisplay); ?>
<tr>
<?php echo $sDisplayAverage; ?>
</tr>
</table>

View File

@@ -1,135 +0,0 @@
<?php
/* Display students grades, by QCM and classes. Add a download button (csv format) */
//TODO lorsque le mask sera installé, remplir la page et le csv en meme temps
//Results
$asResultsDisplay = '';
$asExportCsv = array();
$iClass= 0;
if(isset($_POST['qcm']))
{
$bDisableExport = false;
$iOutOf = $_POST['outofvalue'];
list($iGrade, $iClass) = explode(GRADE_CLASS_SEPARATOR, $_POST['gradeClass']);
$asResultsConstraints = array();
$asOutputOrder = array('id_'.QCM_TABLE, 'grade', 'class', 'id_'.USER_TABLE);
$asConstraintColumns = array('grade'=>$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 .= '<table class="maxWidth stats rounded"><tr><td colspan="3" class="rounded"><p class="tresimportant">QCM <em>"'.$sQcmName.'"</em></p></td></tr>';
$asExportCsv[] = array('QCM', $sQcmName);
foreach($asQcmInfo as $iGradeId=>$asGradeInfo)
{
foreach($asGradeInfo as $iClassId=>$asClassInfo)
{
$sClass = $iGradeId.GRADE_CLASS_SEPARATOR.$iClassId;
$asResultsDisplay .= '<tr><td colspan="3" class="blank"></td></tr>';
$asResultsDisplay .= '<tr><td colspan="3" class="top-left-rounded top-right-rounded"><p class="important">'.$sClass.'</p></td></tr>';
$asExportCsv[] = array('');
$asExportCsv[] = array('Classe', $sClass, 'Note sur', $iOutOf);
$dClassAvgMark = getResultsAverage($iOutOf, array('grade' => $iGradeId, 'class' => $iClassId, QCM_TABLE=>$iQcmId));
$asResultsDisplay .= '<tr>
<th>Eleve</th>
<th>Note</th>
<th>Moyenne</th>
</tr>';
$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 = '<strong>'.$sUserLastName.'</strong> '.$sUserFirstName;
$asResultsDisplay .= '<tr>
<td style="text-align:left;"><strong>'.$sUserLastName.'</strong> '.$sUserFirstName.'</td>
<td>'.roundMark($iOutOf, $asUserInfo[RESULT_TABLE]).' / '.$iOutOf.'</td>
<td>'.$dUserAvgMark.' / '.$iOutOf.'</td>
</tr>';
$asExportCsv[] = array($sUserLastName.' '.$sUserFirstName, roundMark($iOutOf, $asUserInfo[RESULT_TABLE]), $dUserAvgMark);
}
$asResultsDisplay .= '<tr><td colspan="3" class="bottom-left-rounded bottom-right-rounded">Moyenne de la '.$sClass.' : '.$dClassAvgMark.' / '.$iOutOf.'</td></tr>';
$asExportCsv[] = array('Moyenne de la '.$sClass, $dClassAvgMark);
}
}
$asResultsDisplay .= '</table><a href="#top" class="toTheTop rounded">Haut de page</a>';
$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);
//<select multiple="multiple" name="test" ><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option></select>
?>
<p>Choisissez l'affichage :</p>
<form method="post" action="?page=statsAdmin" name="stats">
<table class="maxWidth">
<tr>
<th class="top-left-rounded">QCM</th>
<th>Classe</th>
<th>&Eacute;l&egrave;ve</th>
<th>D&eacute;nominateur</th>
<th class="top-right-rounded">Validation</th>
</tr>
<tr>
<td class="bottom-left-rounded"><?php echo $sSelectQcm; ?></td>
<td><?php echo $sSelectClasses; ?></td>
<td><?php echo $sSelectStudents; ?></td>
<td><?php echo $sSelectOutOf; ?></td>
<td class="bottom-right-rounded"><input type="submit" value="Ok" /></td>
</tr>
<tr><td colspan="5" class="blank"><input type="button"<?php echo $bDisableExport?' disabled':''; ?> value="T&eacute;l&eacute;charger ces notes" onclick="document.forms['getCsv'].submit();" /></td></tr>
</table>
<?php echo $asResultsDisplay; ?>
<br /><br />
</form>
<form action="?page=download" method="post" name="getCsv">
<input type="hidden" name="generate" value="1" />
<input type="hidden" name="file" value="<?php echo 'notes'.($iClass>0?$_POST['gradeClass']:''); ?>" />
<input type="hidden" name="content" value="<?php echo urlencode(serialize($asExportCsv)); ?>" />
</form>

View File

@@ -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;
}

View File

@@ -1,3 +0,0 @@
a.beta {
margin-left:480px;
}

View File

@@ -1,100 +0,0 @@
<?php
/* Tests */
/* TODO to be deleted on production */
//restricted area (admin)
if(!function_exists('checkOrigin') || !$bAdmin)
{
require_once 'config.php';
relocate(getError('Acc&egrave;s interdit'));
}
//Direct Access to database
$sSqlQuery = isset($_POST['sql'])?$_POST['sql']:"";
$sResult = '';
if($sSqlQuery!="")
{
$oResult = getQuery($sSqlQuery, false);
if($oResult===false)
{
$sResult = getError(array('', mysql_error(), 'Query : '.$sSqlQuery), true);
}
elseif($oResult===true)
{
$sResult = getSuccess(array('Requ&ecirc;te envoy&eacute;e', 'Query : '.$sSqlQuery));
}
elseif(mysql_num_rows($oResult)==0)
{
$sResult = getWarning(array('Aucun r&eacute;sultat', 'Query : '.$sSqlQuery));
}
else
{
$asDisplay[0] = '<table>';
$asDisplay[2] = '';
$i=0;
while($asCurrentRow = mysql_fetch_array($oResult))
{
$asDisplay[2] .= '<tr>';
foreach($asCurrentRow as $index=>$value)
{
if(!is_numeric($index))
{
if($i==0)
{
$asTitles[] = $index;
}
$asDisplay[2] .= '<td>'.$value.'</td>';
}
}
$asDisplay[2] .= '</tr>';
$i++;
}
$asDisplay[1] = '<tr style="font-weight:bold;"><td>'.implode('</td><td>', $asTitles).'</td></tr>';
$asDisplay[3] = '</table>';
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');
*/
?>
<form method="post" style="text-align:center;margin:30px;">
<input type="text" id="sql" name="sql" size="100%" value="<?php echo $sSqlQuery; ?>" />
</form>
<?php echo $sResult; ?>
<script type="text/javascript">
setFocus('sql');
</script>

View File

@@ -1,158 +0,0 @@
<?php
/* Log */
//modify a changelog
if(isset($_POST['action']))
{
$iChangelogId = isset($_POST['changelogId'])?$_POST['changelogId']:'';
$sAction = $sDesc = $sNewValue = '';
switch($_POST['action'])
{
case 'addChangelog':
if($_POST['0description']!='')
{
$iChangelogId = insertRow(CHANGELOG_TABLE, array($_POST['0description'], $_POST['0progress']?NEXT_VERSION:'0', $_POST['0type'], $_POST['0progress']));
$sAction = 'CREATE';
$sDesc = $_POST['0description'];
}
break;
case 'complete':
$sAction = 'ACTIVATE';
$sDesc = getTextFromId(CHANGELOG_TABLE, $iChangelogId);
updateRow(CHANGELOG_TABLE, $iChangelogId, array('progress'=>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&eacute;'));
}
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&eacute;ta)':'');
//add a changelog
$sAddChangelogType = getChangelogTypeSelect();
$sAddChangelogProgress = '<select name="0progress"><option value="0">Non</option><option value="1">Oui</option></select>';
$sAddChangelogButton = '<input type="button" onclick="setFormAction(0, \'addChangelog\', 1)" value="Ok" />';
$asNextVersionDisplay = array($sAddChangelogType.'&nbsp;<input type="text" name="0description" onclick="setFormAction(\'0\', \'addChangelog\');" style="width:500px;" /> Effectu&eacute; : '.$sAddChangelogProgress.'&nbsp;'.$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)?'&nbsp;('.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 = '<input type="text" onclick="setFormAction('.$iChangeLogId.', \'modifyChangelog\');" class="nude" style="width:500px;font-size:small;font-style:italic;font-family:Verdana,Geneva,sans-serif;" name="'.$iChangeLogId.'description" value="'.$sDescription.'" />';
$sDeleteButton = '&nbsp;<a href="#" class="XButton rounded" onclick="setFormAction('.$iChangeLogId.', \'deleteChangelog\', 1);return false;">X</a>';
$sSubmitButton = '&nbsp;<a href="#" class="XButton rounded" onclick="setFormAction('.$iChangeLogId.', \'modifyChangelog\', 1);return false;">Ok</a>';
$sSeparator = substr($sSeparator, 0, -1);
$sPublishButton = '';
$sDate = '';
}
//completed
else
{
$sDeleteButton = $sSubmitButton = '&nbsp;';
$sAction = 'rollback';
$sActionTitle = 'Fini';
$sPublishButton = '&nbsp;<a href="#" class="XButton rounded" onclick="setFormAction('.$iChangeLogId.', \'publishChangelog\', 1);return false;">Publier</a>';
}
$sProgressLink = '<a style="font-weight:bold;" href="#" onclick="setFormAction('.$iChangeLogId.', \''.$sAction.'\', \'1\');return false;">['.$sActionTitle.']</a>';
$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');
?>
<script type="text/javascript">
function setFormAction(changeLogId, action, submit)
{
document.forms['changelog'].elements['changelogId'].value = changeLogId;
document.forms['changelog'].elements['action'].value = action;
if(submit)
{
document.forms['changelog'].submit();
}
}
</script>
<form name="changelog" method="post">
<fieldset class="rounded">
<legend class="rounded">T&eacute;l&eacute;chargements <strong>v<?php echo STABLE_VERSION; ?></strong></legend>
<p style="text-align:center;"><a class="download rounded" href="?page=download&file=<?php echo encodeUrl($sPack); ?>" title="T&eacute;l&eacute;charger la derni&egrave;re version">T&eacute;l&eacute;charger</a></p>
</fieldset>
<fieldset class="rounded"><legend class="rounded">En d&eacute;veloppement <strong>v<?php echo NEXT_VERSION; ?></strong></legend>
<ul>
<li><?php echo $sNextVersionDisplay; ?></li>
</ul>
</fieldset>
<fieldset class="rounded"><legend class="rounded">Historique</legend>
<ul>
<?php echo $sVersionDisplay; ?>
</ul>
</fieldset>
<input type="hidden" name="action" value="addChangeLog" />
<input type="hidden" name="changelogId" value="" />
</form>