Bonjour,
Je suis occupé à modifier un site qui a été développé par plusieurs personnes, entre autre par moi (à 90%), mais par d'autres personnes aussi.
J'ai plusieurs erreurs dans mes logs qui concerne la génération d'un fichier Excel avec PHPExcel :
J'utilise la version PHP 5.6.31[14-Jan-2018 20:27:01 Europe/Brussels] PHP Fatal error: Uncaught exception 'Exception' with message 'la classe business/Exception n'existe pas' in /Applications/MAMP/htdocs/stageoff_local/excel/Autoloader.class.php:35
Stack trace:
#0 [internal function]: stageOff\Autoloader::_autoload('stageOff\\busine...')
#1 /Applications/MAMP/htdocs/stageoff_local/excel/business/DocumentExcel.class.php(154): spl_autoload_call('stageOff\\busine...')
#2 /Applications/MAMP/htdocs/stageoff_local/excel/business/DocumentExcel.class.php(170): stageOff\business\DocumentExcel->getTypeOfficine('378')
#3 /Applications/MAMP/htdocs/stageoff_local/excel/business/DocumentExcelUnique.class.php(24): stageOff\business\DocumentExcel->readStage('378')
#4 /Applications/MAMP/htdocs/stageoff_local/excel/controller/GeneratorDocument.class.php(40): stageOff\business\DocumentExcelUnique->__construct('2', '378')
#5 /Applications/MAMP/htdocs/stageoff_local/excel/get_link_excel.php(10): stageOff\controller\GeneratorDocument::getLinkDocumentUnique('378', '2')
#6 {main}
thrown in /Applications/MAMP/htdocs/stageoff_local/excel/Autoloader.class.php on line 35
Voici le code de l'auto loader :
Je vous joins également d'autres fichiers cités dans les erreurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?php namespace stageOff; use Exception; use stageOff\model\config; /** * Classe static pour charger les classes utilisées dans l'app * * @author */ class Autoloader { public static function register() { spl_autoload_register(array(__CLASS__, '_autoload')); } private static function _autoload($class){ if(strpos($class, __NAMESPACE__ . "\\") === 0) { $class = str_replace(__NAMESPACE__ . '\\', '', $class); $class = str_replace('\\', '/', $class); if(file_exists(config::read('PATH'). '/' . $class . '.class.php')) { require_once $class . '.class.php'; } elseif(file_exists($class . '.class.php')) { require_once $class . '.class.php'; } elseif(file_exists('../' . config::read('PATH'). '/' .$class . '.class.php')) { require_once $class . '.class.php'; } else { throw new Exception ('la classe ' . $class . ' n\'existe pas'); } } } }
DocumentExcel.class.php(
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
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
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222 <?php namespace stageOff\business; use stageOff\model\config; use stageOff\data\DatabaseAccess; /** * Description of DocumentExcel * * @author Alexandre */ abstract class DocumentExcel { const TYPE_QUESTIONNAIRE_ETUDIANT = 1; const TYPE_QUESTIONNAIRE_MDS = 2; const SAVE_FOLDER = 'evaluation'; const STAGE_OFFINICAL = 1; const STAGE_HOSPITALIER = 2; const DOCUMENT_ETUDIANT = 3; const PHARMACIE_OFFICINAL = 1; const PHARMACIE_HOSPITALIERE = 2; /** * @var PHPExcel objet document excel */ private $_excel_doc; /** * @var int Type du questionnaire = Etudiant ou MDS; */ private $_type_questionnaire; /** * @var DatabaseAccess */ private $_db_access; /** * * @param int $type_questionnaire Type du questionnaire voulu * @throws Exception */ public function __construct($type_questionnaire) { $this->setTypeQuestionnaire($type_questionnaire); $this->initDbAccess(); } //<editor-fold defaultstate="collapsed" desc="Generate Doc"> /** * Generer le document excel */ public function generateDocument() { $this->initExcelDoc(); $this->addContain(); $this->saveDocument(); } protected abstract function addContain(); public function initExcelDoc() { $this->setExcelDoc(new \PHPExcel()); } protected function createSheetExcel($stage){ if($this->getTypeQuestionnaire() == self::TYPE_QUESTIONNAIRE_ETUDIANT) { return new SheetExcelEtudiant($stage); } return new SheetExcelMDS($stage); } /** * Fonction retirant les accents d'une chaine de caractère * @param string $input * @return string */ protected function deleteAccent($input) { $str = htmlentities($input, ENT_NOQUOTES, 'utf-8'); $str = preg_replace('#&([A-za-z])(?:acute|cedil|caron|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str); $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. 'œ' return preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères } /** * Attache une feuille excel au document excel * @param Worksheet $sheet La feuille excel à attacher */ protected function attachSheetToDoc($sheet) { $this->getExcelDoc()->addSheet($sheet); } /** * Détache une feuille excel du document si celle-ci est attaché * @param Worksheet $sheet Feuille excel à détacher * @return boolean Retourne vrai si la feuille était attaché et a bien été détaché * ou false si la feuille n'était pas attaché */ protected function detachSheetToDoc($sheet) { $sheet_index = $this->getExcelDoc()->getIndex( $this->getExcelDoc()->getSheetByName($sheet->getTitle())); if($sheet_index === NULL) { return FALSE; } $this->getExcelDoc()->removeSheetByIndex($sheet_index); return TRUE; } protected function saveDocument() { $writer = new \PHPExcel_Writer_Excel2007($this->getExcelDoc()); $writer->save(config::read('ROOT') . $this->getSavePath() . $this->getFileName() .'.xlsx'); } //</editor-fold> //<editor-fold defaultstate="collapsed" desc="getter&setter"> /** * Retourne le lien vers le document excel * @return string */ public function getLink() { return './' . $this->getSavePath() . $this->getFileName() .'.xlsx'; } /** * Retourne le nom du document excel * @return string */ public abstract function getFileName(); /** * Retourne le chemin relative vers le dossier on sont stocker les Excels * @return string */ protected abstract function getSavePath(); /** * Retourne le type du lieu de stage qui peut etre soit officinal ou hospitalier * @param int $id_stage identifiant du stage * @return int * @throws Exception */ protected function getTypeOfficine($id_stage) { $type_officine = $this->getDbAccess()->getTypeOfficine($id_stage); if($type_officine == self::PHARMACIE_OFFICINAL) { return self::STAGE_OFFINICAL; } elseif($type_officine == self:: PHARMACIE_HOSPITALIERE) { return self::STAGE_HOSPITALIER; } else { throw new Exception('Aucun type de questionnaire trouvé pour ce stage'); } } /** * Retourne un stage de la base de donnée par rapport à un idée et au type * du questionnaire * @param int $id_stage identifiant du stage * @return Stage * @throws Exception */ protected function readStage($id_stage) { if($this->getTypeQuestionnaire() == self::TYPE_QUESTIONNAIRE_ETUDIANT) { return $this->getDbAccess()->getStage($id_stage, self::DOCUMENT_ETUDIANT); } return $this->getDbAccess()->getStage($id_stage, $this->getTypeOfficine($id_stage)); } public function getExcelDoc() { return $this->_excel_doc; } public function setExcelDoc($excel_doc) { $this->_excel_doc = $excel_doc; $this->_excel_doc->removeSheetByIndex(0); } public function getTypeQuestionnaire() { return $this->_type_questionnaire; } /** * * @param int $type_questionnaire * @throws Exception */ public function setTypeQuestionnaire($type_questionnaire) { if(!$this->typeQuestionnaireExist($type_questionnaire)) { throw new Exception("Type du questionnaire inconnu!"); } $this->_type_questionnaire = $type_questionnaire; } /** * Verifie que le type du questionnaire existe * @param int $type_questionnaire type du questionnaire * @return boolean */ protected function typeQuestionnaireExist($type_questionnaire) { return $type_questionnaire == self::TYPE_QUESTIONNAIRE_ETUDIANT || $type_questionnaire == self::TYPE_QUESTIONNAIRE_MDS; } public function initDbAccess() { $this->setDbAccess(new DatabaseAccess()); } public function getDbAccess() { return $this->_db_access; } public function setDbAccess($db_access) { $this->_db_access = $db_access; } //</editor-fold> }Merci d'avance pour l'aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?php namespace stageOff\business; /** * Description of DocumentExcelUnique * * @author */ class DocumentExcelUnique extends DocumentExcel{ const SAVE_SUBFOLDER_ETU = 'evaluation_par_etudiant'; const SAVE_SUBFOLDER_MDS = 'evaluation_par_mds'; /** * @var SheetExcel Feuille excel lié au document */ private $_sheet_excel; /** * * @param int $type_questionnaire Type du questionnaire voulu * @param int $id_stage Identifiant du stage lié au document */ public function __construct($type_questionnaire, $id_stage) { parent::__construct($type_questionnaire); $stage = $this->readStage($id_stage); $this->setSheetExcel($this->createSheetExcel($stage)); } protected function addContain() { $this->getSheetExcel()->createSheet($this->getExcelDoc()); } //<editor-fold defaultstate="collapsed" desc="getter&setter"> /** * Retourne le nom du document excel * @return string */ public function getFileName() { $info_etu = 'etu_' . $this->deleteAccent( $this->getSheetExcel()->getStage()->getEtudiant()); $info_mds = 'mds_' . $this->deleteAccent( $this->getSheetExcel()->getStage()->getMaitreDeStage()); $periode = ' ' . $this->getSheetExcel()->getStage()->getPeriode(); if($this->getTypeQuestionnaire() == self::TYPE_QUESTIONNAIRE_ETUDIANT) { return $info_etu . '-' . $info_mds . $periode; } //Questionnaire Des MDS if($this->getTypeOfficine($this->getSheetExcel()->getStage()->getId()) == self::STAGE_OFFINICAL) { return $info_mds . '-' . $info_etu . $periode . ' (Officinal)'; } return $info_mds . '-' . $info_etu . $periode . ' (Hospitalier)'; } /** * Retourne le chemin relative vers le dossier on sont stocker les Excels * @return string */ protected function getSavePath() { $path = self::SAVE_FOLDER; if($this->getTypeQuestionnaire() == self::TYPE_QUESTIONNAIRE_ETUDIANT && self::SAVE_SUBFOLDER_ETU != '') { $path .= '/'. self::SAVE_SUBFOLDER_ETU; } elseif ($this->getTypeQuestionnaire() == self::TYPE_QUESTIONNAIRE_MDS && self::SAVE_SUBFOLDER_MDS != '') { $path .= '/'. self::SAVE_SUBFOLDER_MDS; } return $path . '/'; } /** * * @return SheetExcel */ public function getSheetExcel() { return $this->_sheet_excel; } /** * * @param ExcelSheet $sheet */ public function setSheetExcel($sheet) { $this->_sheet_excel = $sheet; } //</editor-fold> }
bee
Partager