Initial commit
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<buildpath>
|
||||
<buildpathentry kind="src" path=""/>
|
||||
<buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
|
||||
</buildpath>
|
||||
@@ -0,0 +1,5 @@
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 44
|
||||
/svn/!svn/ver/43/trunk/.externalToolBuilders
|
||||
END
|
||||
@@ -0,0 +1,28 @@
|
||||
10
|
||||
|
||||
dir
|
||||
204
|
||||
https://qcmmaker.googlecode.com/svn/trunk/.externalToolBuilders
|
||||
https://qcmmaker.googlecode.com/svn
|
||||
|
||||
|
||||
|
||||
2010-02-26T17:33:26.657075Z
|
||||
43
|
||||
Francois.Lutran
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1abcc3b6-0f78-11df-b47a-af0d17c1a499
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
## Jul - deny access to the top-level git repository
|
||||
RewriteEngine On
|
||||
RewriteRule \.git - [F,L]
|
||||
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>qcmmaker</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.wst.validation.validationbuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.dltk.core.scriptbuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
|
||||
<nature>org.eclipse.php.core.PHPNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
@@ -0,0 +1,95 @@
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 31
|
||||
/svn/!svn/ver/190/trunk/Archive
|
||||
END
|
||||
New Version TODO List
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 59
|
||||
/svn/!svn/ver/190/trunk/Archive/New%20Version%20TODO%20List
|
||||
END
|
||||
qcm_v2.0.zip
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 43
|
||||
/svn/!svn/ver/76/trunk/Archive/qcm_v2.0.zip
|
||||
END
|
||||
qcm_v1.2.zip
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 42
|
||||
/svn/!svn/ver/3/trunk/Archive/qcm_v1.2.zip
|
||||
END
|
||||
qcm_v2.1.zip
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 44
|
||||
/svn/!svn/ver/190/trunk/Archive/qcm_v2.1.zip
|
||||
END
|
||||
qcm_v1.3.zip
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 42
|
||||
/svn/!svn/ver/3/trunk/Archive/qcm_v1.3.zip
|
||||
END
|
||||
imageMaker.php
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 45
|
||||
/svn/!svn/ver/70/trunk/Archive/imageMaker.php
|
||||
END
|
||||
qcm_v2.2.zip
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 44
|
||||
/svn/!svn/ver/190/trunk/Archive/qcm_v2.2.zip
|
||||
END
|
||||
qcm_v2.0.tar.gz
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 46
|
||||
/svn/!svn/ver/76/trunk/Archive/qcm_v2.0.tar.gz
|
||||
END
|
||||
qcm_v1.2.tar.gz
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 45
|
||||
/svn/!svn/ver/3/trunk/Archive/qcm_v1.2.tar.gz
|
||||
END
|
||||
qcm_v1.5.zip
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 43
|
||||
/svn/!svn/ver/10/trunk/Archive/qcm_v1.5.zip
|
||||
END
|
||||
qcm_v2.1.tar.gz
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 47
|
||||
/svn/!svn/ver/190/trunk/Archive/qcm_v2.1.tar.gz
|
||||
END
|
||||
qcm_v1.3.tar.gz
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 45
|
||||
/svn/!svn/ver/3/trunk/Archive/qcm_v1.3.tar.gz
|
||||
END
|
||||
qcm_v2.2.tar.gz
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 47
|
||||
/svn/!svn/ver/190/trunk/Archive/qcm_v2.2.tar.gz
|
||||
END
|
||||
qcm_v1.5.tar.gz
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 46
|
||||
/svn/!svn/ver/10/trunk/Archive/qcm_v1.5.tar.gz
|
||||
END
|
||||
corners.svg
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 42
|
||||
/svn/!svn/ver/10/trunk/Archive/corners.svg
|
||||
END
|
||||
@@ -0,0 +1,541 @@
|
||||
10
|
||||
|
||||
dir
|
||||
204
|
||||
https://qcmmaker.googlecode.com/svn/trunk/Archive
|
||||
https://qcmmaker.googlecode.com/svn
|
||||
|
||||
|
||||
|
||||
2010-09-11T12:22:57.471260Z
|
||||
190
|
||||
francois.lutran
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1abcc3b6-0f78-11df-b47a-af0d17c1a499
|
||||
|
||||
New Version TODO List
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-09-11T12:23:35.000000Z
|
||||
933905cc82252b6bf9669df51ec8d400
|
||||
2010-09-11T12:22:57.471260Z
|
||||
190
|
||||
francois.lutran
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
493
|
||||
|
||||
photoshop
|
||||
dir
|
||||
|
||||
qcm_v2.0.zip
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-03-24T17:28:47.000000Z
|
||||
dc8e23a2e40def6dc6bfd7490dbd49b2
|
||||
2010-03-22T19:31:07.865763Z
|
||||
76
|
||||
Francois.Lutran
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
52510
|
||||
|
||||
qcm_v1.2.zip
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-02-02T19:33:45.000000Z
|
||||
d22d94a897010ab5e97b6fdc6d5cf4b8
|
||||
2010-02-01T21:43:55.771214Z
|
||||
3
|
||||
Francois.Lutran
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
24546
|
||||
|
||||
qcm_v2.1.zip
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-09-11T12:23:35.000000Z
|
||||
e09b43c61e51060511dae2f8bcc151ee
|
||||
2010-09-11T12:22:57.471260Z
|
||||
190
|
||||
francois.lutran
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
56027
|
||||
|
||||
qcm_v1.3.zip
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-02-02T19:33:45.000000Z
|
||||
24384569c5241928dade0f2e111a2240
|
||||
2010-02-01T21:43:55.771214Z
|
||||
3
|
||||
Francois.Lutran
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
29073
|
||||
|
||||
imageMaker.php
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-03-17T01:00:05.000000Z
|
||||
c5f9dd152ddf43f9b5085de411caeba8
|
||||
2010-03-16T19:47:33.943166Z
|
||||
70
|
||||
Francois.Lutran
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
283
|
||||
|
||||
qcm_v2.2.zip
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-09-11T12:23:35.000000Z
|
||||
148aa8548e3e65904956e59a14e6fef5
|
||||
2010-09-11T12:22:57.471260Z
|
||||
190
|
||||
francois.lutran
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
390605
|
||||
|
||||
qcm_v2.0.tar.gz
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-03-24T17:28:47.000000Z
|
||||
85870d8a0f27135c5fda108f090938c0
|
||||
2010-03-22T19:31:07.865763Z
|
||||
76
|
||||
Francois.Lutran
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
42481
|
||||
|
||||
qcm_v1.2.tar.gz
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-02-02T19:33:45.000000Z
|
||||
511c930038ff79682df433036faff70d
|
||||
2010-02-01T21:43:55.771214Z
|
||||
3
|
||||
Francois.Lutran
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
21695
|
||||
|
||||
qcm_v1.5.zip
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-02-04T01:00:07.000000Z
|
||||
b3f4cd1f6973ef379b963dcaefc72dce
|
||||
2010-02-03T21:13:42.502035Z
|
||||
10
|
||||
Francois.Lutran
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
39807
|
||||
|
||||
qcm_v2.1.tar.gz
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-09-11T12:23:35.000000Z
|
||||
159abd8deb27644e3b5886f64563d184
|
||||
2010-09-11T12:22:57.471260Z
|
||||
190
|
||||
francois.lutran
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
46413
|
||||
|
||||
qcm_v2.2.tar.gz
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-09-11T12:23:35.000000Z
|
||||
2e0e8d97b096abc2553f6128a1658f52
|
||||
2010-09-11T12:22:57.471260Z
|
||||
190
|
||||
francois.lutran
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
361038
|
||||
|
||||
qcm_v1.3.tar.gz
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-02-02T19:33:45.000000Z
|
||||
95cb52ff48522706a62f5a1ba1eda598
|
||||
2010-02-01T21:43:55.771214Z
|
||||
3
|
||||
Francois.Lutran
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
23538
|
||||
|
||||
qcm_v1.5.tar.gz
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-02-04T01:00:07.000000Z
|
||||
d925550478e7f25aefd45eaa82f3f52b
|
||||
2010-02-03T21:13:42.502035Z
|
||||
10
|
||||
Francois.Lutran
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
29378
|
||||
|
||||
corners.svg
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-02-04T01:00:07.000000Z
|
||||
85d9a4dcd0d604e5b8a2a81adbe57078
|
||||
2010-02-03T21:13:42.502035Z
|
||||
10
|
||||
Francois.Lutran
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
213
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
||||
@@ -0,0 +1,8 @@
|
||||
1. Change version number in /current_version/config.php
|
||||
2. Empty /current_version/Download/ and /current_version/images/qcm/ (except qcm1question1.jpeg)
|
||||
3. Update changelog : select led, version, type, changelog from changelog where version > 0 and version <= CURRENT_VERSION and progress = 1 order by version ASC
|
||||
4. Copy Data into new folder (qcm_vx.x) in /archive/
|
||||
5. delete settings.php, test.php
|
||||
6. compress into .zip and .tar.gz
|
||||
7. Copy file into /current_version/download/
|
||||
8. Update SVN
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" ?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<rect fill="white" x="0" y="0" width="100%" height="100%" />
|
||||
<rect fill="transparent" x="0" y="0" width="100%" height="100%" rx="10px"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 213 B |
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
header ('Content-type: image/png');
|
||||
$oImage = imagecreatetruecolor($_GET['width'], $_GET['height']);
|
||||
$text_color = imagecolorallocate($oImage, 233, 14, 91);
|
||||
imagestring($oImage, 1, 5, 5, 'A Simple Text String', $text_color);
|
||||
imagepng($oImage);
|
||||
imagedestroy($oImage);
|
||||
?>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
1. Change version number in /current_version/config.php
|
||||
2. Empty /current_version/Download/ and /current_version/images/qcm/ (except qcm1question1.jpeg)
|
||||
3. Update changelog : select led, version, type, changelog from changelog where version > 0 and version <= CURRENT_VERSION and progress = 1 order by version ASC
|
||||
4. Copy Data into new folder (qcm_vx.x) in /archive/
|
||||
5. delete settings.php, test.php
|
||||
6. compress into .zip and .tar.gz
|
||||
7. Copy file into /current_version/download/
|
||||
8. Update SVN
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" ?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<rect fill="white" x="0" y="0" width="100%" height="100%" />
|
||||
<rect fill="transparent" x="0" y="0" width="100%" height="100%" rx="10px"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 213 B |
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
header ('Content-type: image/png');
|
||||
$oImage = imagecreatetruecolor($_GET['width'], $_GET['height']);
|
||||
$text_color = imagecolorallocate($oImage, 233, 14, 91);
|
||||
imagestring($oImage, 1, 5, 5, 'A Simple Text String', $text_color);
|
||||
imagepng($oImage);
|
||||
imagedestroy($oImage);
|
||||
?>
|
||||
@@ -0,0 +1,41 @@
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 39
|
||||
/svn/!svn/ver/3/trunk/Archive/photoshop
|
||||
END
|
||||
arrow.psd
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 49
|
||||
/svn/!svn/ver/3/trunk/Archive/photoshop/arrow.psd
|
||||
END
|
||||
qcmSelectionHover.psd
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 61
|
||||
/svn/!svn/ver/3/trunk/Archive/photoshop/qcmSelectionHover.psd
|
||||
END
|
||||
beta version.psd
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 58
|
||||
/svn/!svn/ver/3/trunk/Archive/photoshop/beta%20version.psd
|
||||
END
|
||||
qcmSelectionActive.psd
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 62
|
||||
/svn/!svn/ver/3/trunk/Archive/photoshop/qcmSelectionActive.psd
|
||||
END
|
||||
favicon.psd
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 51
|
||||
/svn/!svn/ver/3/trunk/Archive/photoshop/favicon.psd
|
||||
END
|
||||
qcmSelection.psd
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 56
|
||||
/svn/!svn/ver/3/trunk/Archive/photoshop/qcmSelection.psd
|
||||
END
|
||||
@@ -0,0 +1,232 @@
|
||||
10
|
||||
|
||||
dir
|
||||
204
|
||||
https://qcmmaker.googlecode.com/svn/trunk/Archive/photoshop
|
||||
https://qcmmaker.googlecode.com/svn
|
||||
|
||||
|
||||
|
||||
2010-02-01T21:43:55.771214Z
|
||||
3
|
||||
Francois.Lutran
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1abcc3b6-0f78-11df-b47a-af0d17c1a499
|
||||
|
||||
arrow.psd
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-02-02T19:33:45.000000Z
|
||||
7849d3bca5af6776ebbcf9adef21cd8a
|
||||
2010-02-01T21:43:55.771214Z
|
||||
3
|
||||
Francois.Lutran
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
26680
|
||||
|
||||
qcmSelectionHover.psd
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-02-02T19:33:45.000000Z
|
||||
c92146f3cd68537f84116904dea8981e
|
||||
2010-02-01T21:43:55.771214Z
|
||||
3
|
||||
Francois.Lutran
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
160590
|
||||
|
||||
beta version.psd
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-02-02T19:33:45.000000Z
|
||||
3e83806dc3d984f2e5988ba6c3e514e9
|
||||
2010-02-01T21:43:55.771214Z
|
||||
3
|
||||
Francois.Lutran
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
196809
|
||||
|
||||
qcmSelectionActive.psd
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-02-02T19:33:45.000000Z
|
||||
78cbd1667af67529d15aaeab5174714b
|
||||
2010-02-01T21:43:55.771214Z
|
||||
3
|
||||
Francois.Lutran
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
161486
|
||||
|
||||
favicon.psd
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-02-02T19:33:45.000000Z
|
||||
d9213ef70e41ec5e01c0d758e201bdf9
|
||||
2010-02-01T21:43:55.771214Z
|
||||
3
|
||||
Francois.Lutran
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
157428
|
||||
|
||||
qcmSelection.psd
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2010-02-02T19:33:45.000000Z
|
||||
16a1f1e21a70535eea9abd936bc08993
|
||||
2010-02-01T21:43:55.771214Z
|
||||
3
|
||||
Francois.Lutran
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
159750
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,155 @@
|
||||
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
|
||||
@@ -0,0 +1,6 @@
|
||||
K 10
|
||||
svn:ignore
|
||||
V 13
|
||||
settings.php
|
||||
|
||||
END
|
||||
@@ -0,0 +1,896 @@
|
||||
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
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 10
|
||||
text/plain
|
||||
END
|
||||
@@ -0,0 +1,5 @@
|
||||
K 14
|
||||
svn:executable
|
||||
V 1
|
||||
*
|
||||
END
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 10
|
||||
text/plain
|
||||
END
|
||||
@@ -0,0 +1,5 @@
|
||||
K 13
|
||||
svn:mime-type
|
||||
V 10
|
||||
text/plain
|
||||
END
|
||||
@@ -0,0 +1,230 @@
|
||||
<?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êmes';
|
||||
$bfailedPassModif = ($sErrorMessage!='');
|
||||
if($bfailedPassModif)
|
||||
{
|
||||
echo getError($sErrorMessage);
|
||||
}
|
||||
else
|
||||
{
|
||||
updateRow(USER_TABLE, $iSelectedUserId, array('pass'=>encryptPassword($_POST['pass'])));
|
||||
echo getSuccess('Mot de passe modifié');
|
||||
}
|
||||
}
|
||||
elseif($_GET['type']=='info' && $_POST['login']!='' && $_POST['firstname']!='')
|
||||
{
|
||||
$sLastName = strtolower($_POST['login']);
|
||||
$sFirstName = strtolower($_POST['firstname']);
|
||||
//Check if someone has already been registered by that name
|
||||
$asChangedUserInfo = getUserFromLogin($sLastName, $sFirstName);
|
||||
$bUserAvailable = !$asChangedUserInfo || $iSelectedUserId==$asChangedUserInfo['id_user'];
|
||||
if($bUserAvailable)
|
||||
{
|
||||
$asUserModif = array( 'user_first_name'=>$sFirstName,
|
||||
'user_last_name'=>$sLastName,
|
||||
'grade'=>$_POST['grade'],
|
||||
'class'=>$_POST['class']);
|
||||
if($bAdmin)
|
||||
{
|
||||
$asUserModif['admin'] = isset($_POST['admin'])?'1':'0';
|
||||
}
|
||||
|
||||
$asUserInfo = selectRow(USER_TABLE, array($iSelectedUserId));
|
||||
updateRow(USER_TABLE, $iSelectedUserId, $asUserModif);
|
||||
|
||||
//feed
|
||||
$sModifiedUserName = $asUserInfo[USER_TABLE.'_first_name'].' '.$asUserInfo[USER_TABLE.'_last_name'];
|
||||
if($sModifiedUserName != $sFirstName.' '.$sLastName)
|
||||
{
|
||||
addFeed('MODIFY', $sModifiedUserName, USER_TABLE.'_name', $sModifiedUserName, $sFirstName.' '.$sLastName);
|
||||
}
|
||||
if($asUserInfo['grade']!=$_POST['grade'] || $asUserInfo['class']!=$_POST['class'])
|
||||
{
|
||||
addFeed('MODIFY', $sModifiedUserName, USER_TABLE.'_class', $asUserInfo['grade'].GRADE_CLASS_SEPARATOR.$asUserInfo['class'], $_POST['grade'].GRADE_CLASS_SEPARATOR.$_POST['class']);
|
||||
}
|
||||
|
||||
echo getSuccess('Coordonnées modifiées');
|
||||
|
||||
if($iSelectedUserId==$_SESSION['user'])
|
||||
{
|
||||
setSession($_SESSION['user']);
|
||||
if($sLastName!=$asSelectedUserInfo['user_last_name'] || $sFirstName!=$asSelectedUserInfo['user_first_name'])
|
||||
{
|
||||
echo getWarning(array('Changement de login pour l\'authentification', 'Votre nouveau login est :', 'Nom : '.$sLastName, 'Prénom : '.$sFirstName));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
echo getError('Ce nom existe déjà dans la base de données');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
echo getError('Champs incomplets');
|
||||
$bfailedPassModif = ($_GET['type']=="pass");
|
||||
}
|
||||
}
|
||||
|
||||
//student class selection / teacher
|
||||
$sTeacherClass = 'Professeur<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è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é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"> <input type="submit" value="Changer les paramè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
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,280 @@
|
||||
<?php
|
||||
|
||||
/* displays user's account settings */
|
||||
|
||||
define('DEL_USER_TAG', 'deluser');
|
||||
|
||||
//delete users
|
||||
//TODO plusieurs eleves � 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 été supprimés : '.implode(', ', $asDeletedUserNames)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//modify user account
|
||||
$iSelectedUserId = isset($_REQUEST['studentId'])?$_REQUEST['studentId']:$_SESSION['user'];
|
||||
$asSelectedUserInfo = selectRow(USER_TABLE, array($iSelectedUserId));
|
||||
|
||||
//modifications submit
|
||||
$bfailedPassModif = false;
|
||||
if(isset($_POST['submit']))
|
||||
{
|
||||
if($_GET['type']=='pass' && $_POST['pass']!='' && $_POST['oldpass']!='')
|
||||
{
|
||||
$sErrorMessage = checkPassword($_POST['oldpass'],$asSelectedUserInfo['pass'])?"":'Mot de passe incorrect';
|
||||
$sErrorMessage .= ($_POST['pass']==$_POST['pass2'])?"":'Les mots de passe ne sont pas les mêmes';
|
||||
$bfailedPassModif = ($sErrorMessage!='');
|
||||
if($bfailedPassModif)
|
||||
{
|
||||
echo getError($sErrorMessage);
|
||||
}
|
||||
else
|
||||
{
|
||||
updateRow(USER_TABLE, $iSelectedUserId, array('pass'=>encryptPassword($_POST['pass'])));
|
||||
echo getSuccess('Mot de passe modifié');
|
||||
}
|
||||
}
|
||||
elseif($_GET['type']=='info' && $_POST['login']!='' && $_POST['firstname']!='')
|
||||
{
|
||||
$sLastName = strtolower($_POST['login']);
|
||||
$sFirstName = strtolower($_POST['firstname']);
|
||||
|
||||
//Check if someone has already been registered by that name
|
||||
$asChangedUserInfo = getUserFromLogin($sLastName, $sFirstName);
|
||||
$bUserAvailable = !$asChangedUserInfo || $iSelectedUserId==$asChangedUserInfo['id_user'];
|
||||
if($bUserAvailable)
|
||||
{
|
||||
$asUserModif = array( 'user_first_name'=>$sFirstName,
|
||||
'user_last_name'=>$sLastName,
|
||||
'grade'=>$_POST['grade'],
|
||||
'class'=>$_POST['class']);
|
||||
if($bAdmin)
|
||||
{
|
||||
$asUserModif['admin'] = isset($_POST['admin'])?'1':'0';
|
||||
}
|
||||
|
||||
$asUserInfo = selectRow(USER_TABLE, array($iSelectedUserId));
|
||||
updateRow(USER_TABLE, $iSelectedUserId, $asUserModif);
|
||||
|
||||
//feed
|
||||
$sModifiedUserName = $asUserInfo[USER_TABLE.'_first_name'].' '.$asUserInfo[USER_TABLE.'_last_name'];
|
||||
if($sModifiedUserName != $sFirstName.' '.$sLastName)
|
||||
{
|
||||
addFeed('MODIFY', $sModifiedUserName, USER_TABLE.'_name', $sModifiedUserName, $sFirstName.' '.$sLastName);
|
||||
}
|
||||
if($asUserInfo['grade']!=$_POST['grade'] || $asUserInfo['class']!=$_POST['class'])
|
||||
{
|
||||
addFeed('MODIFY', $sModifiedUserName, USER_TABLE.'_class', $asUserInfo['grade'].GRADE_CLASS_SEPARATOR.$asUserInfo['class'], $_POST['grade'].GRADE_CLASS_SEPARATOR.$_POST['class']);
|
||||
}
|
||||
|
||||
echo getSuccess('Coordonnées modifiées');
|
||||
|
||||
if($iSelectedUserId==$_SESSION['user'])
|
||||
{
|
||||
setSession($_SESSION['user']);
|
||||
if($sLastName!=$asSelectedUserInfo['user_last_name'] || $sFirstName!=$asSelectedUserInfo['user_first_name'])
|
||||
{
|
||||
echo getWarning(array('Changement de login pour l\'authentification', 'Votre nouveau login est :', 'Nom : '.$sLastName, 'Prénom : '.$sFirstName));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
echo getError('Ce nom existe déjà dans la base de données');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
echo getError('Champs incomplets');
|
||||
$bfailedPassModif = ($_GET['type']=="pass");
|
||||
}
|
||||
}
|
||||
|
||||
//student class selection / teacher
|
||||
$sTeacherClass = 'Professeur<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é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"> <input type="submit" value="Changer les paramè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è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; ?> élève(s) (<?php echo $sGradeClass; ?>)</th></tr>
|
||||
</table>
|
||||
<div style="text-align:center;margin-top:10px;"><input type="submit" value="Supprimer" /></div>
|
||||
</form>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,178 @@
|
||||
<?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ès interdit'));
|
||||
}
|
||||
|
||||
//check external link
|
||||
if(isset($_GET['action']) && $_GET['action']!='')
|
||||
{
|
||||
if(!checkOrigin('backUpCreator'))
|
||||
{
|
||||
relocate(getError('Aucun lien externe autorisé'));
|
||||
}
|
||||
|
||||
//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ûr de vouloir procéder à une réintallation complète ? (vous allez perdre toutes vos données)', array('Oui'=>'document.forms[\'reset\'].submit()', 'Non'=>''));
|
||||
|
||||
$sTitle = 'Suppression de la base de données courante';
|
||||
$sWarningMessage = 'Etes-vous sur de vouloir remplacer la base de données par celle-ci ? Il est fortement conseillé de créer une sauvegarde avant une telle opération.';
|
||||
$oUploadInputBox = new InputBox($sTitle, $sWarningMessage, array('Oui'=>'', 'Non'=>'document.forms[\'upload\'].restoreDb.checked = false;'));
|
||||
$oSyncInputBox = new InputBox($sTitle, $sWarningMessage, array('Oui'=>'', 'Non'=>'document.forms[\'sync\'].restoreDb.checked = false;'));
|
||||
|
||||
//display available backups
|
||||
$asFileList = glob(BACKUP_FOLDER.'*.'.DB_EXT_FILE);
|
||||
$iFileNb = count($asFileList);
|
||||
$iFilePerPage = 10;
|
||||
|
||||
//page switcher load
|
||||
$oPageSwitcher = new PageSwitch('pageNb', $iFileNb, $iFilePerPage);
|
||||
|
||||
foreach($asFileList as $sFileName)
|
||||
{
|
||||
//set input box variables
|
||||
$sBackUpId = encodeUrl(basename($sFileName));
|
||||
$sTimeStamp = getTimeStampFromFile($sFileName);
|
||||
$sBackUpName = date(LAYOUT_DATE_FORMAT, $sTimeStamp);
|
||||
$oRestoreInputBox->setTags(array('backUpId'=>$sBackUpId, 'backUpDate'=>$sBackUpName));
|
||||
|
||||
$sLinkBackUp[$sTimeStamp] = ' <tr>
|
||||
<td>Le '.$sBackUpName.'</td>
|
||||
<td><input type="button" value="Télé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é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élé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().' '.$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éer une sauvegarde</legend>
|
||||
<form name="download" action="?page=backUpCreator&action=download" method="post">
|
||||
<p>Sauvegarde de la base de données <strong><?php echo DB_NAME; ?></strong> incluant les tables <?php echo implode(', ', getTables()); ?>.</p>
|
||||
<p>Inclure les requête de suppression de la base avant réé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érer ici le fichier de sauvegarde (.sql) : <input type="file" name="backUpFile" /></p>
|
||||
<p>remplacer la base de donné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ès</legend>
|
||||
<form name="sync" action="?page=backUpCreator&action=sync" method="post">
|
||||
<p>
|
||||
Insé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è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ées actuelle celle du point d'accè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électionner la clé" /></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é-initialisation complète</legend>
|
||||
<form name="reset" action="?page=backUpCreator&action=reset" method="post">
|
||||
<p>Tout supprimer et réinitialiser l'application (aka la mé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();
|
||||
?>
|
||||
@@ -0,0 +1,68 @@
|
||||
0000-00-00 00:00:00 0.1 new feature Création de QCM
|
||||
0000-00-00 00:00:00 1.0 new feature affichage des notes en direct
|
||||
0000-00-00 00:00:00 1.0 new feature compte utilisateur
|
||||
0000-00-00 00:00:00 1.0 new feature lecture de QCM
|
||||
0000-00-00 00:00:00 1.1 new feature visionnage des notes obtenues
|
||||
0000-00-00 00:00:00 1.1 new feature modification de compte
|
||||
0000-00-00 00:00:00 1.1 new feature menus
|
||||
0000-00-00 00:00:00 1.2 new feature calcul de moyenne par classe
|
||||
0000-00-00 00:00:00 1.2 new feature modification des comptes par l admin
|
||||
0000-00-00 00:00:00 1.2 new feature visionnage des notes par classe
|
||||
0000-00-00 00:00:00 1.2 new feature onglet admin
|
||||
0000-00-00 00:00:00 1.2 bug fix temps limite pour la création des QCM supprimée
|
||||
0000-00-00 00:00:00 1.2 bug fix caractères spéciaux lors de créations de qcm
|
||||
0000-00-00 00:00:00 1.3 design Beta tag
|
||||
0000-00-00 00:00:00 1.3 design positionnement des paragraphes sur la page de versions
|
||||
0000-00-00 00:00:00 1.3 design couleurs des boutons
|
||||
0000-00-00 00:00:00 1.3 design Ajout bouton Déconnexion
|
||||
0000-00-00 00:00:00 1.3 design Bords arrondis
|
||||
0000-00-00 00:00:00 1.3 new feature Téléchargement
|
||||
0000-00-00 00:00:00 1.3 new feature Les réponses de l'élève apparaissent sur les résultats des QCM
|
||||
0000-00-00 00:00:00 1.3 new feature Suppression de compte
|
||||
0000-00-00 00:00:00 1.3 bug fix auto logout à la fin de l'édition de QCM
|
||||
0000-00-00 00:00:00 1.3 bug fix couleurs des moyennes
|
||||
0000-00-00 00:00:00 1.5 design Logo qcm
|
||||
0000-00-00 00:00:00 1.5 design Notification du compte connecté
|
||||
0000-00-00 00:00:00 1.5 new feature Export de la base de données
|
||||
0000-00-00 00:00:00 1.5 new feature remontée vers le haut du document
|
||||
0000-00-00 00:00:00 1.5 new feature Bouton export en csv (Excel)
|
||||
0000-00-00 00:00:00 1.5 new feature Option de finalisation des qcm
|
||||
0000-00-00 00:00:00 1.5 new feature Téléchargements silencieux
|
||||
0000-00-00 00:00:00 1.5 bug fix encodage du mot de passe
|
||||
0000-00-00 00:00:00 1.5 bug fix doublon de login à la création et à la modification de login
|
||||
0000-00-00 00:00:00 1.5 bug fix onglet paramètre : possibilité de changements sans vérification du mot de passe
|
||||
0000-00-00 00:00:00 1.5 bug fix restructuration de l installation
|
||||
0000-00-00 00:00:00 1.5 bug fix saut de lignes dans le libellé des questions
|
||||
0000-00-00 00:00:00 2.0 new feature Téléchargement en csv avec coma separator embedded
|
||||
0000-00-00 00:00:00 2.0 new feature Upload et restoration de backup
|
||||
0000-00-00 00:00:00 2.0 new feature retour à la page en cours après déconnexion
|
||||
0000-00-00 00:00:00 2.0 bug fix suppression complète des qcm : QCM + notes
|
||||
0000-00-00 00:00:00 2.0 bug fix Restructuration complete des questions et des resultats (SQL)
|
||||
0000-00-00 00:00:00 2.1 new feature Mélange des questions des QCM en lecture (mode anti-triche)
|
||||
0000-00-00 00:00:00 2.1 design remplacement des fenetres javascript par des layers en html
|
||||
0000-00-00 00:00:00 2.1 new feature Ajout d'une table pour le changelog
|
||||
0000-00-00 00:00:00 2.1 bug fix modifier l'appel des fichiers de back up pour respecter l'ordre des dates
|
||||
2010-02-28 15:52:23 2.1 bug fix ajouter les dates de modifications dans lhistorique des versions
|
||||
2010-02-28 20:55:08 2.1 bug fix log in par nom de famille et prénom (siblings)
|
||||
2010-03-04 13:54:26 2.1 new feature Création dynamique de base de données
|
||||
2010-03-04 13:36:51 2.1 bug fix Couper la liste des backups à 10 (et afficher un bouton)
|
||||
2010-03-04 13:55:04 2.1 new feature Point d'accès pour back up : export et import de base de données vers ou depuis un url
|
||||
2010-03-10 09:27:12 2.1 bug fix Renforcement des sécurités d'accès (qcmResults & qcmProcess)
|
||||
2010-03-09 09:48:01 2.1 bug fix qcmProcess.php : redirection en fin de traitement
|
||||
2010-03-08 21:43:54 2.1 bug fix Fix : ajout de réponses sans question liée (NULL)
|
||||
2010-05-17 16:07:06 2.2 new feature Log des changements utilisateur + flux rss
|
||||
2010-04-21 16:23:32 2.2 bug fix Interface dynamique admin <-> eleve (grade + class) dans la gestion des comptes
|
||||
2010-04-21 16:21:38 2.2 new feature Report Admin sur les erreurs SQL et relocate()
|
||||
2010-05-17 16:08:15 2.2 bug fix Download en fonction (tout passe par index.php !)
|
||||
2010-03-29 00:52:20 2.2 bug fix Check usage of insertUpdateRow() and optimize function
|
||||
2010-06-08 20:12:53 2.2 bug fix Bug des apostrophes dans le cas d'un server configuré avec des magic quotes
|
||||
2010-04-21 10:21:42 2.2 bug fix ajouter changelog au moment de l'installation initiale
|
||||
2010-04-01 18:27:06 2.2 new feature moteur de recherche
|
||||
2010-04-05 19:17:55 2.2 new feature Kit d'installation facile
|
||||
2010-04-21 10:21:15 2.2 new feature téléchargement en zip ou gz en fonction du HTTP_USER_AGENT
|
||||
2010-03-12 14:17:47 2.2 bug fix secure access point (v2 : shuffle firstname / name / pass)
|
||||
2010-03-17 22:42:46 2.2 bug fix Secure le logon : isset($_SESSION['user']) avec une deuxieme validation sur HTTP_USER_AGENT + IP
|
||||
2010-05-17 16:08:40 2.2 new feature image dans les questions
|
||||
2010-06-25 13:40:14 2.2 bug fix Gerer le mode message
|
||||
2010-06-21 19:21:42 2.2 bug fix modification du fonctionnement des dates des fichiers de back up
|
||||
2010-06-25 15:59:12 2.2 new feature remote control
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,140 @@
|
||||
<?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é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#©Qcm=1\')', 'Non'=>'goTo(\'?page=qcmCreator&qcm=#idQcm#©Qcm=0\')'));
|
||||
|
||||
//display valid and not valid (unfinished) QCM
|
||||
$asParams = array
|
||||
(
|
||||
'notValid' => array
|
||||
(
|
||||
'title' => 'QCM non finalisés',
|
||||
'valid' => '0',
|
||||
'displayConstraint' => $bAdmin?array():array('id_'.USER_TABLE=>$_SESSION['user']),
|
||||
'goTo' => 'Creator',
|
||||
'copyQcm' => false,
|
||||
'deleteAction' => 'deleteQcm',
|
||||
'deleteTitle' => 'Supprimer',
|
||||
'editTitle' => 'Activer'
|
||||
),
|
||||
'valid' => array
|
||||
(
|
||||
'title' => 'QCM disponibles',
|
||||
'valid' => '1',
|
||||
'displayConstraint' => array(),
|
||||
'goTo' => 'Reader',
|
||||
'copyQcm' => true,
|
||||
'deleteAction' => 'desactivateQcm',
|
||||
'deleteTitle' => 'Désactiver',
|
||||
'editTitle' => 'Editer'
|
||||
)
|
||||
);
|
||||
|
||||
foreach($asParams as $sParamName => $asParamValues)
|
||||
{
|
||||
$asConstraints = array_merge(array('valid'=>$asParamValues['valid']), $asParamValues['displayConstraint']);
|
||||
$asQcms = selectRows(array('from'=>QCM_TABLE, 'constraint'=>$asConstraints));
|
||||
$iTotal = 0;
|
||||
if(count($asQcms) > 0)
|
||||
{
|
||||
$asDisplay[$sParamName] = '<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è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();
|
||||
?>
|
||||
@@ -0,0 +1,143 @@
|
||||
/* 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;
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
<?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', 'β', '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é : '.getHtml(ucwords($_SESSION['firstName'].' '.$_SESSION['lastName']), 'strong'):'Non connecté';
|
||||
$asInfoDisplay['connectedUser'] = getHtml($sConnectedUser, 'p', 'connectedUser rounded');
|
||||
$asGeneralDisplay['info'] = getHtml(getHtml(getHtml($asInfoDisplay, 'td', 'blank', 'padding:0;width:33%;'), 'tr'), 'table', 'maxWidth', 'border-spacing:0;');
|
||||
|
||||
//display browser warning
|
||||
if(getBrowser() == 'msie')
|
||||
{
|
||||
$asGeneralDisplay['main']['browser'] = getWarning(array('Le navigateur Internet Explorer est déconseillé pour cette application',
|
||||
'Nous vous conseillons un navigateur optimisé (et gratuit) tel que
|
||||
<a href="http://www.mozilla-europe.org/fr/firefox/" title="Télé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éléchargement');
|
||||
$asGeneralDisplay['rss'] = getHtml(getA('?page=rss', getImage('images/feedIcon.png', 'flux rss'), 'flux rss'), 'p');
|
||||
}
|
||||
$asGeneralDisplay['version'] = $sLogLink;
|
||||
|
||||
//close SQL connection
|
||||
if($oConnection)
|
||||
{
|
||||
mysql_close($oConnection);
|
||||
}
|
||||
|
||||
//combine main part
|
||||
$asGeneralDisplay['main'] = $asGeneralDisplay['message']."\n".implode("\n", $asGeneralDisplay['main']);
|
||||
|
||||
?>
|
||||
<!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>Évaluation par <span class="logo">Q</span>CM</h1>
|
||||
<h3>Collè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ée en <?php echo getElapsedTime($sScriptStartTime); ?> seconde(s). Application réalisée par M. Lutran pour le collè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>
|
||||
@@ -0,0 +1,154 @@
|
||||
<?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érifier les identifiants')));
|
||||
}
|
||||
elseif($sFirstName=='' || $sLastName=='')
|
||||
{
|
||||
addMessage(getError('Informations incomplètes'));
|
||||
}
|
||||
elseif($_POST['pass']!=$_POST['pass2'])
|
||||
{
|
||||
addMessage(getError('Les mots de passes ne sont pas les mê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ée'));
|
||||
}
|
||||
else
|
||||
{
|
||||
addMessage(getError(array('Création de fichier impossible', 'Vérifier les droits sur le dossier principal')));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
logMeOut(false);
|
||||
}
|
||||
|
||||
if(file_exists(SETTINGS_FILE))
|
||||
{
|
||||
$sDbServer = DB_SERVER;
|
||||
$sDbLogin = DB_LOGIN;
|
||||
$sDbName = DB_NAME;
|
||||
$sFeedBackMail = FEEDBACK_MAIL;
|
||||
$iMaxClass = MAX_CLASS;
|
||||
$iMinGrade = MIN_GRADE;
|
||||
$iMaxGrade = MAX_GRADE;
|
||||
}
|
||||
|
||||
//TODO getHtmlTable()
|
||||
?>
|
||||
<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é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é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éation du compte administrateur</th></tr>
|
||||
<tr>
|
||||
<td>Pré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ètres supplé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ère section concernée</td>
|
||||
<td class="left"><input type="text" name="MIN_GRADE" value="<?php echo $iMinGrade; ?>" />ème</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="bottom-left-rounded">Dernière section concernée</td>
|
||||
<td class="bottom-right-rounded left"><input type="text" name="MAX_GRADE" value="<?php echo $iMaxGrade; ?>" />ème</td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
<p style="text-align:center;"><input style="margin-top:10px;" type="submit" value ="Valider" /></p>
|
||||
</form>
|
||||
@@ -0,0 +1,5 @@
|
||||
data :
|
||||
INSERT /* config.php 830 */
|
||||
INTO changelog (`led`, `version`, `type`, `changelog`, `progress`)
|
||||
VALUES ('0000-00-00 00:00:00', 0.1, 'new feature', 'Création de QCM', 1)
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
<form action="?page=logon&register=0" method="post">
|
||||
<table>
|
||||
<tr><th colspan="2" class="top-left-rounded top-right-rounded">Connexion</th></tr>
|
||||
<tr>
|
||||
<td>Pré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éer un compte</a></td></tr>
|
||||
</table>
|
||||
</form>
|
||||
@@ -0,0 +1,278 @@
|
||||
<?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"> </td></tr>
|
||||
<tr>
|
||||
<th width="50%" class="top-left-rounded">Libellé de la question</th>
|
||||
<th width="30%">Réponses possibles</th>
|
||||
<th width="10%" class="top-right-rounded">Bonne(s) ré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étées, cliquez sur le bouton 'Cré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">
|
||||
|
||||
<input type="submit" value="<?php echo $bEdition?"Modifier le QCM":"Cré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>
|
||||
@@ -0,0 +1,121 @@
|
||||
<?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é à 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ées'), 'qcmReader', array('qcm'=>$iQcmId));
|
||||
}
|
||||
else
|
||||
{
|
||||
relocate('', 'qcmCreator', array('qcm'=>$iQcmId));
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,60 @@
|
||||
<?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°'.$_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éjà répondu à ce QCM. Les résultats ne seront pas compté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ésultats" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
@@ -0,0 +1,81 @@
|
||||
<?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épondre à un QCM pour accéder à à la page de résultats'));
|
||||
}
|
||||
else
|
||||
{
|
||||
//reconnect session
|
||||
setSession($_POST['user']);
|
||||
|
||||
//input Qcm data
|
||||
$iQcmId = $_POST['qcm'];
|
||||
$asQcm = getQcm($iQcmId);
|
||||
$sQcmName = $asQcm[QCM_TABLE];
|
||||
|
||||
//display QCM results
|
||||
$iNbRightAnswers = 0;
|
||||
$iNbQuestions = getNbQuestions($iQcmId);
|
||||
foreach($asQcm[QUESTION_TABLE] as $iQuestionId => $asQuestion)
|
||||
{
|
||||
$bAnswerUserResult = true;
|
||||
$asDisplayRightResults = $asDisplayUserResults = '';
|
||||
$asDisplayResults[$iQuestionId] = '<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>• '.$asAnswer[ANSWER_TABLE].'</p>':'' ;
|
||||
$asDisplayUserResults .= $bUserAnswer?'<p>• '.$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 été enregistré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é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éponses</p></th>
|
||||
<th width="25%"><p>Vos réponses</p></th>
|
||||
<th width="10%" class="top-right-rounded"><p>Votre ré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>
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
$sLogin = isset($_POST['login'])?$_POST['login']:'';
|
||||
$sFirstName = isset($_POST['firstname'])?$_POST['firstname']:'';
|
||||
?>
|
||||
<form action="?page=logon®ister=1" method="post">
|
||||
<table>
|
||||
<tr><th colspan="2" class="top-left-rounded top-right-rounded">Création de compte</th></tr>
|
||||
<tr>
|
||||
<td>Pré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">
|
||||
|
||||
<input type="submit" value="S'enregistrer">
|
||||
</th>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
@@ -0,0 +1,226 @@
|
||||
<?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éation ';
|
||||
switch($asRssItem['type'])
|
||||
{
|
||||
case 'database':
|
||||
$sTitle .= 'd\'une nouvelle sauvegarde';
|
||||
$sDesc = 'Une nouvelle sauvegarde de la base de données "'.$asRssItem['source'].'" a été créée.
|
||||
Chemin : '.$asRssItem['old_value'];
|
||||
break;
|
||||
case QCM_TABLE:
|
||||
$sTitle .= 'd\'un QCM';
|
||||
$sDesc = 'Le QCM nommé "'.$asRssItem['old_value'].'" a été créé';
|
||||
break;
|
||||
case QUESTION_TABLE:
|
||||
$sTitle .= 'd\'une question';
|
||||
$sDesc = 'La question "'.$asRssItem['old_value'].'" a été créé';
|
||||
break;
|
||||
case 'image':
|
||||
$sTitle .= 'd\'une image';
|
||||
$sDesc = 'L\'image "'.$asRssItem['old_value'].'" a été ajouté';
|
||||
break;
|
||||
case ANSWER_TABLE:
|
||||
$sTitle .= 'd\'une proposition de réponse';
|
||||
$sDesc = 'La proposition de réponse "'.$asRssItem['old_value'].'" a été créé';
|
||||
break;
|
||||
case RESULT_TABLE:
|
||||
$sTitle .= 'd\'un résultat de qcm';
|
||||
$sDesc = 'L\'utilisateur "'.ucwords($asRssItem['source']).'" a répondu au qcm "'.$asRssItem['old_value'].'"';
|
||||
break;
|
||||
case USER_TABLE:
|
||||
$sTitle .= 'd\'un compte utilisateur';
|
||||
$sDesc = 'L\'utilisateur "'.ucwords($asRssItem['old_value']).'" s\'est enregistré';
|
||||
break;
|
||||
case CHANGELOG_TABLE:
|
||||
$sTitle .= 'd\'un changelog';
|
||||
$sDesc = 'La modification n°'.$asRssItem['source'].'. "'.$asRssItem['old_value'].'" a été ajouté';
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'MODIFY':
|
||||
$sTitle .= 'Modification ';
|
||||
switch($asRssItem['type'])
|
||||
{
|
||||
case USER_TABLE.'_name':
|
||||
$sTitle .= 'du nom d\'un utilisateur';
|
||||
$sDesc = 'l\'utilisateur "'.ucwords($asRssItem['old_value']).'" est dorénavant nommé '.$asRssItem['new_value'];
|
||||
break;
|
||||
case USER_TABLE.'_class':
|
||||
$sTitle .= 'de la classe d\'un utilisateur ';
|
||||
$sDesc = 'l\'utilisateur "'.ucwords($asRssItem['source']).'" est passé de la classe '.$asRssItem['old_value'].' à la classe '.$asRssItem['new_value'];
|
||||
break;
|
||||
case QCM_TABLE:
|
||||
$sTitle .= 'd\'un QCM';
|
||||
$sDesc = 'Le QCM nommé "'.$asRssItem['old_value'].'" a été modifié';
|
||||
break;
|
||||
case QUESTION_TABLE:
|
||||
$sTitle .= 'd\'une question';
|
||||
$sDesc = 'La question "'.$asRssItem['old_value'].'" a été modifiée';
|
||||
break;
|
||||
case 'image':
|
||||
$sTitle .= 'd\'une image';
|
||||
$sDesc = 'L\'image "'.$asRssItem['old_value'].'" a été modifié';
|
||||
break;
|
||||
case ANSWER_TABLE:
|
||||
$sTitle .= 'd\'une proposition de réponse';
|
||||
$sDesc = 'La proposition de réponse "'.$asRssItem['old_value'].'" a été modifé';
|
||||
break;
|
||||
case CHANGELOG_TABLE:
|
||||
$sTitle .= 'd\'un changelog';
|
||||
$sDesc = 'La modification n°'.$asRssItem['source'].'. "'.$asRssItem['old_value'].'" a été modifiée.
|
||||
Nouvelle modification : "'.$asRssItem['new_value'].'"';
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'ACTIVATE':
|
||||
$sTitle .= 'Activation ';
|
||||
switch($asRssItem['type'])
|
||||
{
|
||||
case QCM_TABLE:
|
||||
$sTitle .= 'd\'un qcm';
|
||||
$sDesc = 'Le qcm "'.$asRssItem['old_value'].'" a été activé';
|
||||
break;
|
||||
case CHANGELOG_TABLE:
|
||||
$sTitle .= 'd\'un changelog';
|
||||
$sDesc = 'La modification n°'.$asRssItem['source'].'. "'.$asRssItem['old_value'].'" est achevé';
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'DESACTIVATE':
|
||||
$sTitle .= 'Désactivation ';
|
||||
switch($asRssItem['type'])
|
||||
{
|
||||
case QCM_TABLE:
|
||||
$sTitle .= 'd\'un qcm';
|
||||
$sDesc = 'Le qcm "'.$asRssItem['old_value'].'" a été désactivé';
|
||||
break;
|
||||
case CHANGELOG_TABLE:
|
||||
$sTitle .= 'd\'un changelog';
|
||||
$sDesc = 'La modification n°'.$asRssItem['source'].'. "'.$asRssItem['old_value'].'" est passé en mode "non achevé"';
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'DELETE':
|
||||
$sTitle .= 'Suppression ';
|
||||
switch($asRssItem['type'])
|
||||
{
|
||||
case USER_TABLE:
|
||||
$sTitle .= 'd\'un utilisateur';
|
||||
$sDesc = 'Le compte de l\'utilisateur "'.$asRssItem['old_value'].'" a été supprimé';
|
||||
break;
|
||||
case QCM_TABLE:
|
||||
$sTitle .= 'd\'un qcm ';
|
||||
$sDesc = 'Le qcm intitulé "'.$asRssItem['old_value'].'" a été supprimé';
|
||||
break;
|
||||
case QUESTION_TABLE:
|
||||
$sTitle .= 'd\'une question';
|
||||
$sDesc = 'La question "'.$asRssItem['old_value'].'" a été supprimée';
|
||||
break;
|
||||
case 'image':
|
||||
$sTitle .= 'd\'une image';
|
||||
$sDesc = 'L\'image "'.$asRssItem['old_value'].'" a été supprimée';
|
||||
break;
|
||||
case ANSWER_TABLE:
|
||||
$sTitle .= 'd\'une proposition de réponse';
|
||||
$sDesc = 'La proposition de réponse "'.$asRssItem['old_value'].'" a été supprimée';
|
||||
break;
|
||||
case CHANGELOG_TABLE:
|
||||
$sTitle .= 'd\'un changelog';
|
||||
$sDesc = 'La modification n°'.$asRssItem['source'].'. "'.$asRssItem['old_value'].'" a été abandonné';
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'RESET':
|
||||
$sTitle .= 'Réinitialisation de la base de données ';
|
||||
$sDesc = 'La base de données "'.$asRssItem['source'].'" a été supprimée et réinstallée';
|
||||
break;
|
||||
case 'RESTORE':
|
||||
$sTitle .= 'Restauration de la base de données ';
|
||||
$sDesc = 'La base de données "'.$asRssItem['old_value'].'" a été restaurée';
|
||||
break;
|
||||
case 'UPLOAD':
|
||||
$sTitle .= 'Upload d\'une base de données ';
|
||||
$sDesc = 'La base de données "'.$asRssItem['old_value'].'" ';
|
||||
switch($asRssItem['type'])
|
||||
{
|
||||
case 'file':
|
||||
$sDesc .= 'a été uploadé';
|
||||
break;
|
||||
case 'sync':
|
||||
$sDesc = 'a été synchronisée avec le site '.$asRssItem['source'];
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'CONNECT':
|
||||
$sTitle .= 'Connexion d\'un utilisateur';
|
||||
$sDesc = 'L\'utilisateur "'.ucwords($asRssItem['old_value']).'" s\'est connecté';
|
||||
break;
|
||||
}
|
||||
$sAuthor = str_replace(' ', '.', strtolower($asRssItem['author'])).'@'.DOMAIN.' ('.ucwords($asRssItem['author']).')';
|
||||
|
||||
if($sTitle!='' && $sDesc!='')
|
||||
{
|
||||
$sRssItem = getHtml(cleanRss($sTitle), 'title');
|
||||
$sRssItem .= getHtml(cleanRss($sAuthor), 'author');
|
||||
$sRssItem .= getHtml($sRssFeedUrl, 'link');
|
||||
$sRssItem .= getHtml(cleanRss($sDesc.'.'), 'description');
|
||||
$sRssItem .= getHtml(cleanRss(date('r', strtotime($asRssItem['led']))), 'pubDate');
|
||||
$sRssItem .= getHtml(cleanRss($sRssFeedUrl.'&id='.$asRssItem['id_'.FEED_TABLE]), 'guid', '', '', array('isPermaLink'=>'true'));
|
||||
|
||||
$asItems[] = getHtml($sRssItem, 'item');
|
||||
}
|
||||
}
|
||||
|
||||
function fillFeed($sText)
|
||||
{
|
||||
$asColumnNames = getTableColumnNames(FEED_TABLE);
|
||||
foreach($asColumnNames as $sColumnName)
|
||||
{
|
||||
$sText = str_replace('#'.$sColumnName.'#', $_POST[$sColumnName], $sText);
|
||||
}
|
||||
}
|
||||
|
||||
function getFeedTitle($sAction, $sType)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
function getFeedDesc($sAction, $sType)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//last feed update
|
||||
$sPubDate = date('r', strtotime(getUniqueValue("SELECT /* ".basename(__FILE__)." ".__LINE__." */ MAX(led) FROM ".FEED_TABLE)));
|
||||
|
||||
//feed header
|
||||
$sRssFeed = '<?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ç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;
|
||||
?>
|
||||
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
/* Search database for keywords */
|
||||
|
||||
//security check
|
||||
if(!function_exists('checkOrigin') || !$bAdmin)
|
||||
{
|
||||
require_once 'config.php';
|
||||
relocate(getError('Accè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�e sur les mots : '.$sHtmlKeyWords)));
|
||||
}
|
||||
}
|
||||
|
||||
function filterTable($sColumnName)
|
||||
{
|
||||
return (!is_numeric($sColumnName) && $sColumnName!='pass');
|
||||
}
|
||||
?>
|
||||
<p>Mots recherch�s : <?php echo $sHtmlKeyWords; ?></p>
|
||||
<p>R�sultat<?php echo (count($asSearchResults)>1)?'s':''; ?> de la recherche :</p>
|
||||
<?php echo implode($asSearchResults); ?>
|
||||
@@ -0,0 +1,34 @@
|
||||
<?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é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);
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,44 @@
|
||||
<?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épondu à aucun QCM</p></td></tr>', );
|
||||
$sDisplayAverage = '<th colspan="3" class="bottom-left-rounded bottom-right-rounded">Moyenne : Aucune donné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>
|
||||
@@ -0,0 +1,135 @@
|
||||
<?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>Élève</th>
|
||||
<th>Dé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élé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>
|
||||
@@ -0,0 +1,506 @@
|
||||
@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;
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
a.beta {
|
||||
margin-left:480px;
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
<?php
|
||||
|
||||
/* Tests */
|
||||
/* TODO to be deleted on production */
|
||||
|
||||
//restricted area (admin)
|
||||
if(!function_exists('checkOrigin') || !$bAdmin)
|
||||
{
|
||||
require_once 'config.php';
|
||||
relocate(getError('Accè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ête envoyée', 'Query : '.$sSqlQuery));
|
||||
}
|
||||
elseif(mysql_num_rows($oResult)==0)
|
||||
{
|
||||
$sResult = getWarning(array('Aucun ré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>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user