1
2
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
<?php
// src/controller/HeadFootController.php
declare(strict_types=1);
use App\Entity\NodeDataAsset;
use App\Entity\Asset;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\EntityManager;
class HeadFootController
{
static public function setTextData(EntityManager $entityManager, string $request_params, array $json): void
{
$params_array = explode('_', $request_params); // header_title, header_description, footer_name, footer_address, footer_email
if(count($params_array) !== 2){
echo json_encode(['success' => false]);
die;
}
$model = new Model($entityManager);
if($model->findWhateverNode('name_node', $params_array[0])){
$node_data = $model->getNode()->getNodeData();
$node_data->updateData($params_array[1], $json['new_text']); // $params_array[1] n'est pas contrôlé
$entityManager->flush();
echo json_encode(['success' => true]);
}
else{
echo json_encode(['success' => false]);
}
die;
}
static public function uploadAsset(EntityManager $entityManager, string $request_params): void
{
if(empty($_FILES)){
http_response_code(400);
echo json_encode(['success' => false]);
}
else{
if(!is_dir(Asset::USER_PATH)){
mkdir(Asset::USER_PATH, 0700, true);
}
/* -- téléchargement -- */
$file = $_FILES['file'];
$allowed_extensions = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'tiff', 'tif', 'ico', 'bmp']; // pas de SVG
$extension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
if(!in_array($extension, $allowed_extensions) || $extension === 'jpg'){
$extension = 'jpeg';
}
$mime_type = mime_content_type($file['tmp_name']);
$hash = hash_file('sha256', $file['tmp_name']);
/* -- instance d'Asset -- */
$model = new Model($entityManager);
$result = $model->getWhatever('App\Entity\Asset', 'hash', $hash);
if(count($result) > 0){ // asset existant trouvé
$asset = $result[0];
// correction des informations
$name = $asset->getFileName(); // permet à priori de réécrire par dessus le précédent fichier
//$asset->setFileName($name);
$asset->setMimeType($mime_type);
}
else{
$name = Security::secureFileName(pathinfo($file['name'], PATHINFO_FILENAME));
$name = uniqid($name . '_') . '.' . $extension;
$asset = new Asset($name, $mime_type, $hash);
}
/* -- écriture du fichier sur le disque -- */
if(!ImageUploadController::imagickCleanImage(file_get_contents($file['tmp_name']), Asset::USER_PATH . $name, $extension)){ // recréer l’image pour la nettoyer
http_response_code(500);
echo json_encode(['success' => false, 'message' => 'Erreur image non valide.']);
}
else{
$params_array = explode('_', $request_params); // head_favicon, header_logo, header_background, footer_logo
/* -- table intermédiaire node_data/asset-- */
if($model->findWhateverNode('name_node', $params_array[0])){ // noeud (head, header ou footer)
$node_data = $model->getNode()->getNodeData();
// recherche à l'aide du rôle
$old_nda = null;
foreach($node_data->getNodeDataAssets() as $nda){
if($nda->getRole() === $request_params){
$old_nda = $nda;
$old_nda->setAsset($asset);
break;
}
}
// entrée pas trouvée
if($old_nda === null){
$new_nda = new NodeDataAsset($node_data, $asset, $request_params); // $request_params sera le rôle de l'asset
$entityManager->persist($new_nda);
}
if(count($result) === 0){
$entityManager->persist($asset);
}
$entityManager->flush();
echo json_encode(['success' => true, 'location' => Asset::USER_PATH . $name, 'mime_type' => $mime_type]);
}
else{
http_response_code(500);
echo json_encode(['success' => false, 'message' => "Erreur noeud non trouvé, c'est pas du tout normal!"]);
}
}
}
die;
}
//static public function uploadImage(EntityManager $entityManager, array $request_params): void
}
|