@@ -20,25 +20,25 @@ public function extraInformations()
2020 return null ;
2121 }
2222
23- /*
24- Come parametro di questa funzione si usa il nome della sotto-classe di
25- CSVImporter che si intende usare, scritto tutto minuscolo
26- */
23+ /**
24+ * Come parametro di questa funzione si usa il nome della sotto-classe di
25+ * CSVImporter che si intende usare, scritto tutto minuscolo
26+ */
2727 public static function getImporter ($ type )
2828 {
2929 $ classname = 'App \\Importers \\CSV \\' . ucwords ($ type );
3030 return new $ classname ();
3131 }
3232
33- private function startReader (Request $ request , string $ path )
33+ private function startReader (array $ request , string $ path )
3434 {
3535 $ reader = Reader::from ($ path , 'r ' );
3636 $ options = Info::getDelimiterStats ($ reader , [', ' , '; ' , "\t" ]);
3737 arsort ($ options );
3838 $ target_separator = array_keys ($ options )[0 ];
3939 $ reader ->setDelimiter ($ target_separator );
4040
41- $ skip = $ request-> has ( 'skip_header ' );
41+ $ skip = isset ( $ request[ 'skip_header ' ] );
4242 if ($ skip ) {
4343 $ reader ->setHeaderOffset (0 );
4444 }
@@ -47,83 +47,90 @@ private function startReader(Request $request, string $path)
4747 return $ reader ;
4848 }
4949
50+ /**
51+ * Se la sotto-classe specifica un attributo "sorted_fields" tra i
52+ * parametri, pre-popolo l'array dei campi selezionati in fase di
53+ * revisione del CSV. Questo viene usato, ad esempio, dall'importer
54+ * "Products" per inizializzare l'importazione dei prodotti di un certo
55+ * fornitore usando sempre le stesse colonne (anziché doverle
56+ * riassegnare a mano ogni volta)
57+ */
58+ private function retrievePreSortedFields ($ parameters )
59+ {
60+ $ selected = [];
61+ $ sorted = $ parameters ['sorted_fields ' ];
62+ $ fields = $ this ->fields ();
63+
64+ foreach ($ parameters ['columns ' ] as $ index => $ c ) {
65+ if (isset ($ sorted [$ index ]) && isset ($ fields [$ sorted [$ index ]])) {
66+ $ selected [] = (object ) [
67+ 'label ' => $ fields [$ sorted [$ index ]]->label ,
68+ 'name ' => $ sorted [$ index ],
69+ ];
70+ }
71+ else {
72+ $ selected [] = (object ) [
73+ 'label ' => __ ('texts.imports.ignore_slot ' ),
74+ 'name ' => 'none ' ,
75+ ];
76+ }
77+ }
78+
79+ return $ selected ;
80+ }
81+
5082 private function retrievePreSelectedFields (&$ parameters )
5183 {
84+ if (isset ($ parameters ['sorted_fields ' ]) && !empty ($ parameters ['sorted_fields ' ])) {
85+ return $ this ->retrievePreSortedFields ($ parameters );
86+ }
87+
5288 $ selected = [];
5389
5490 /*
55- Se la sotto-classe specifica un attributo "sorted_fields" tra i
56- parametri, pre-popolo l'array dei campi selezionati in fase di
57- revisione del CSV. Questo viene usato, ad esempio, dall'importer
58- "Products" per inizializzare l'importazione dei prodotti di un certo
59- fornitore usando sempre le stesse colonne (anziché doverle
60- riassegnare a mano ogni volta)
91+ Qui cerco di auto-assegnare le colonne in funzione
92+ dell'intestazione nella prima riga del CSV. Se funziona, devo
93+ badare a non considerare la prima riga (perché, appunto,
94+ contiene una intestazione e non dei dati da importare)
6195 */
62- if (isset ($ parameters ['sorted_fields ' ]) && !empty ($ parameters ['sorted_fields ' ])) {
63- $ sorted = $ parameters ['sorted_fields ' ];
64- $ fields = $ this ->fields ();
96+ $ mapped_cols = 0 ;
6597
66- foreach ($ parameters ['columns ' ] as $ index => $ c ) {
67- if (isset ($ sorted [$ index ]) && isset ($ fields [$ sorted [$ index ]])) {
68- $ selected [] = (object ) [
69- 'label ' => $ fields [$ sorted [$ index ]]->label ,
70- 'name ' => $ sorted [$ index ],
71- ];
72- }
73- else {
74- $ selected [] = (object ) [
75- 'label ' => __ ('texts.imports.ignore_slot ' ),
76- 'name ' => 'none ' ,
77- ];
78- }
79- }
80- }
81- else {
82- /*
83- Qui cerco di auto-assegnare le colonne in funzione
84- dell'intestazione nella prima riga del CSV. Se funziona, devo
85- badare a non considerare la prima riga (perché, appunto,
86- contiene una intestazione e non dei dati da importare)
87- */
88- $ mapped_cols = 0 ;
89-
90- foreach ($ parameters ['columns ' ] as $ c ) {
91- $ found = false ;
92-
93- foreach ($ parameters ['sorting_fields ' ] as $ sf => $ sf_meta ) {
94- if ($ sf_meta ->label == $ c ) {
95- $ selected [] = (object ) [
96- 'label ' => $ c ,
97- 'name ' => $ sf ,
98- ];
99-
100- $ mapped_cols ++;
101- $ found = true ;
102- break ;
103- }
104- }
98+ foreach ($ parameters ['columns ' ] as $ c ) {
99+ $ found = false ;
105100
106- if ($ found == false ) {
101+ foreach ($ parameters ['sorting_fields ' ] as $ sf => $ sf_meta ) {
102+ if ($ sf_meta ->label == $ c ) {
107103 $ selected [] = (object ) [
108- 'label ' => __ ( ' texts.imports.ignore_slot ' ) ,
109- 'name ' => ' none ' ,
104+ 'label ' => $ c ,
105+ 'name ' => $ sf ,
110106 ];
107+
108+ $ mapped_cols ++;
109+ $ found = true ;
110+ break ;
111111 }
112112 }
113113
114- if ($ mapped_cols > count ($ parameters ['columns ' ]) / 2 ) {
115- $ parameters ['skip_header ' ] = true ;
114+ if (!$ found ) {
115+ $ selected [] = (object ) [
116+ 'label ' => __ ('texts.imports.ignore_slot ' ),
117+ 'name ' => 'none ' ,
118+ ];
116119 }
117120 }
118121
122+ if ($ mapped_cols > count ($ parameters ['columns ' ]) / 2 ) {
123+ $ parameters ['skip_header ' ] = true ;
124+ }
125+
119126 return $ selected ;
120127 }
121128
122- protected function storeUploadedFile ($ request , $ parameters )
129+ protected function storeUploadedFile (array $ request , array $ parameters )
123130 {
124131 try {
125- $ f = $ request-> file ( 'file ' , null ) ;
126- if (is_null ($ f ) || $ f ->isValid () === false ) {
132+ $ f = $ request[ 'file ' ] ;
133+ if (is_null ($ f ) || ! $ f ->isValid ()) {
127134 throw new \InvalidArgumentException ('File non caricato correttamente, possibili problemi con la dimensione ' );
128135 }
129136
@@ -188,10 +195,10 @@ private function mandatoryFields()
188195 return $ ret ;
189196 }
190197
191- protected function initRead ($ request )
198+ protected function initRead (array $ request )
192199 {
193- $ path = $ request-> input ( 'path ' ) ;
194- $ columns = $ request-> input ( 'column ' ) ;
200+ $ path = $ request[ 'path ' ] ;
201+ $ columns = $ request[ 'column ' ] ;
195202
196203 $ testable = $ this ->mandatoryFields ();
197204 $ tested = $ this ->getColumnsIndex ($ columns , $ testable );
@@ -264,13 +271,13 @@ public function finalTemplate()
264271
265272 abstract public function fields ();
266273
267- abstract public function testAccess ($ request );
274+ abstract public function testAccess (array $ request );
268275
269- abstract public function guess ($ request );
276+ abstract public function guess (array $ request );
270277
271- abstract public function select ($ request );
278+ abstract public function select (array $ request );
272279
273280 abstract public function formatSelect ($ parameters );
274281
275- abstract public function run ($ request );
282+ abstract public function run (array $ request );
276283}
0 commit comments