Overview
Comment:Vérification de la présence des fichiers avant envoi
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 0acb6d101e7a3d3a3a8ec0bfae2447f3a9a13693
User & Date: bohwaz on 2015-02-20 06:45:19
Other Links: manifest | tags
Context
2015-02-24
03:33
Le champ ID ne peut pas être supprimé, donc pas besoin de vérifier qu'il n'a pas été supprimé check-in: 52d5f95d59 user: bohwaz tags: trunk
2015-02-20
06:45
Vérification de la présence des fichiers avant envoi check-in: 0acb6d101e user: bohwaz tags: trunk
2015-02-19
07:06
Rapprochement fonctionnel check-in: 4bf13fe01e user: bohwaz tags: trunk
Changes

Modified src/include/lib/Garradin/Fichiers.php from [9f13370bd2] to [0cd1cbc469].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
...
178
179
180
181
182
183
184





















185
186
187
188
189
190
191
<?php

namespace Garradin;

class Fichiers
{
	protected $allowed_files_extensions = [
		'jpeg', 'jpg', 'jpe', 'gif', 'png', 'svg', 'svgz', 'psd', 'bmp', 'ico', // Images
		'pdf', 'txt', 'rtf', 'tex', 'lyx', 'html', 'epub', 'mobi', 'ps', 'xml', // Textes
		'sxw', 'sxc', 'sxd', 'sxi', 'sxf', 'odt', 'odg', 'odp', 'ods', 'odc', 'odf', // Libre Office
		'docx', 'xlsx', 'doc', 'xls', 'ppsx', 'pps', 'pptx', 'ppt', 'pub', // Microsoft
		'webm', 'mp4', 'flv', 'mkv', 'avi', 'mov', // Vidéos
		'mp3', 'm4a', 'aac', 'ogg', 'mid', // Audio
		'zip', 'rar', '7z', 'gz', 'xz', 'bz2', 'bz', 'tar', // Archives
		'sqlite', 'swf', // Divers
	];

	public $type;
	public $titre;
	public $nom;
	public $date;
	public $hash;
	public $taille;
	public $id;
................................................................................
	{
		return (boolean) DB::getInstance()->simpleQuerySingle(
			'SELECT 1 FROM fichiers_contenu WHERE hash = ?;', 
			false, 
			trim(strtolower($hash))
		);
	}






















	/**
	 * Upload du fichier par POST
	 * @param  array  $file  Caractéristiques du fichier envoyé
	 * @param  string $titre Titre descriptif du fichier
	 * @return boolean TRUE en cas de succès
	 */






<
<
<
<
<
<
<
<
<
<
<







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







1
2
3
4
5
6











7
8
9
10
11
12
13
...
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
<?php

namespace Garradin;

class Fichiers
{











	public $type;
	public $titre;
	public $nom;
	public $date;
	public $hash;
	public $taille;
	public $id;
................................................................................
	{
		return (boolean) DB::getInstance()->simpleQuerySingle(
			'SELECT 1 FROM fichiers_contenu WHERE hash = ?;', 
			false, 
			trim(strtolower($hash))
		);
	}

	/**
	 * Retourne un tableau de hash trouvés dans la DB parmi une liste de hash fournis
	 * @param  array  $list Liste de hash à vérifier
	 * @return array        Liste des hash trouvés
	 */
	static public function checkHashList($list)
	{
		$hash_list = '';
		$db = DB::getInstance();

		foreach ($list as $hash)
		{
			$hash_list .= '\'' . $db->escapeString($hash) . '\',';
		}

		$hash_list = substr($hash_list, 0, -1);

		return $db->queryFetchAssoc('SELECT hash, 1
			FROM fichiers_contenu WHERE hash IN (' . $hash_list . ');');
	}

	/**
	 * Upload du fichier par POST
	 * @param  array  $file  Caractéristiques du fichier envoyé
	 * @param  string $titre Titre descriptif du fichier
	 * @return boolean TRUE en cas de succès
	 */

Modified src/templates/admin/wiki/_fichiers.tpl from [67e6c5be20] to [37679bfb54].

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19



















20
 <form method="post" enctype="multipart/form-data" action="{$self_url|escape}" id="f_upload">
    <fieldset>
        <legend>Téléverser un fichier</legend>
        <input type="hidden" name="MAX_FILE_SIZE" value="{$max_size|escape}" id="f_maxsize" />
        <dl>
            <dt><label for="f_fichier">Sélectionner un fichier</label></dt>
            <dd class="help">Taille maximale : {$max_size|format_bytes}</dd>
            <dd><input type="file" name="fichier" id="f_fichier" /></dd>
            <dt><label for="f_titre">Titre du fichier (description)</label></dt>
            <dd><input type="text" name="titre" id="f_titre" /></dd>
        </dl>
        <p class="submit">
            <input type="submit" id="f_submit" value="Envoyer le fichier" />
        </p>
    </fieldset>
</form>




















{include file="admin/_foot.tpl"}







|









>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 <form method="post" enctype="multipart/form-data" action="{$self_url|escape}" id="f_upload">
    <fieldset>
        <legend>Téléverser un fichier</legend>
        <input type="hidden" name="MAX_FILE_SIZE" value="{$max_size|escape}" id="f_maxsize" />
        <dl>
            <dt><label for="f_fichier">Sélectionner un fichier</label></dt>
            <dd class="help">Taille maximale : {$max_size|format_bytes}</dd>
            <dd class="fileUpload"><input type="file" name="fichier" id="f_fichier" data-hash-check /></dd>
            <dt><label for="f_titre">Titre du fichier (description)</label></dt>
            <dd><input type="text" name="titre" id="f_titre" /></dd>
        </dl>
        <p class="submit">
            <input type="submit" id="f_submit" value="Envoyer le fichier" />
        </p>
    </fieldset>
</form>

<script type="text/javascript">
{literal}
uploadHelper($('#f_fichier'), {
    width: 1920,
    height: 1920,
    resize: true,
    bytes: 'o',
    size_error_msg: 'Le fichier %file fait %size, soit plus que la taille maximale autorisée de %max_size.'
});

$('#f_fichier').onchange = function () {
    var name = this.value.replace(/\.[^.]+/g, '');
    name = name.replace(/[_.-]+/g, ' ');
    name = name.replace(/\w/, function (match) { return match.toUpperCase(); });
    $('#f_titre').value = name;
}
{/literal}
</script>

{include file="admin/_foot.tpl"}

Modified src/www/admin/static/admin.css from [c5459a3acb] to [bb9a3efdda].

1189
1190
1191
1192
1193
1194
1195



















    overflow: auto;
}

.hidden {
    display: none;
}



























>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
    overflow: auto;
}

.hidden {
    display: none;
}

form#f_upload fieldset {
    position: relative;
}

form .fileUpload .uploadHelper_progress {
    position: absolute;
    bottom: 1em;
    left: 1em;
    right: 1em;
    text-align: center;
    padding: 1em;
    background: #ddd;
    box-shadow: 0px 0px 5px #999;
    border-radius: .5em;
}

form .fileUpload progress {
    width: 50%;
}

Added src/www/admin/static/scripts/upload_helper.min.js version [9a296fb1c0].

cannot compute difference between binary files

Modified src/www/admin/wiki/_fichiers.php from [32bc736d10] to [feb671808a].

11
12
13
14
15
16
17







18
19
20
21
22
23
24
..
37
38
39
40
41
42
43
44
45
46
$page = $wiki->getById(Utils::get('page'));
$error = false;

if (!$page)
{
    throw new UserException('Page introuvable.');
}








if (Utils::post('submit'))
{
    if (!Utils::CSRF_check('file_upload_'.$page['id']))
    {
        $error = 'Une erreur est survenue, merci de renvoyer le formulaire.';
    }
................................................................................
    }
}

$tpl->assign('max_size', Utils::getMaxUploadSize());
$tpl->assign('error', $error);
$tpl->assign('sent', isset($_GET['sent']) ? true : false);

$tpl->assign('custom_js', ['file_upload.js']);

$tpl->display('admin/wiki/_fichiers.tpl');







>
>
>
>
>
>
>







 







|


11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
..
44
45
46
47
48
49
50
51
52
53
$page = $wiki->getById(Utils::get('page'));
$error = false;

if (!$page)
{
    throw new UserException('Page introuvable.');
}

// Vérification des hash avant upload
if ($hash_check = Utils::post('uploadHelper_hashCheck'))
{
    echo json_encode(Fichiers::checkHashList($hash_check));
    exit;
}

if (Utils::post('submit'))
{
    if (!Utils::CSRF_check('file_upload_'.$page['id']))
    {
        $error = 'Une erreur est survenue, merci de renvoyer le formulaire.';
    }
................................................................................
    }
}

$tpl->assign('max_size', Utils::getMaxUploadSize());
$tpl->assign('error', $error);
$tpl->assign('sent', isset($_GET['sent']) ? true : false);

$tpl->assign('custom_js', ['upload_helper.min.js']);

$tpl->display('admin/wiki/_fichiers.tpl');