50 ? 50 : $itemPerPage;
if($_['export'] == 'true') $itemPerPage = 5000;
$response['pagination'] = Import::paginate($itemPerPage,(!empty($_['page'])?$_['page']:0),$query,$data,'main');
$imports = Import::staticQuery($query,$data,true,0);
$response['rows'] = array();
foreach($imports as $import){
$row = $import->toArray();
$row['entity'] = basename(dirname($row['entity'])).' > '.str_replace('.class.php','',basename($row['entity']));
if($_['export'] == 'true'){
$row['created'] = date('d-m-Y',$row['created']);
$row['updated'] = date('d-m-Y',$row['updated']);
}
$response['rows'][] = $row;
}
/* Mode export */
if($_['export'] == 'true'){
if(empty($response['rows'])) $response['rows'][] = array('Vide'=>'Aucune données');
$fieldsMapping = array();
foreach (Import::fields(false) as $key => $value)
$fieldsMapping[$value['label']] = $key;
$stream = Excel::exportArray($response['rows'],$fieldsMapping ,'Export');
File::downloadStream($stream,'export-import-'.date('d-m-Y').'.xlsx');
exit();
}
});
//Ajout ou modification d'élément import
Action::register('import_save',function(&$response){
global $_,$myUser;
require_once(__DIR__.SLASH.'Import.class.php');
$item = Import::provide();
if($myUser->can('import','configure')){
$oldItem = clone $item;
$item->label = $_['label'];
$item->entity = $_['entity'];
$item->startLine = $_['startLine'];
$item->headerLine = $_['headerLine'];
$item->hasheader = $_['hasheader'];
if(isset($_['meta'])) $item->meta = json_encode($_['meta']);
//verification des droits sur le plugin de l'entitée ciblée
if(!empty($_['entity'])){
$plugin = dirname($item->entity);
$plugin = $plugin == 'class' ? 'core':$plugin;
$plugin = Plugin::parseManifest($plugin.SLASH.'app.json');
if(!$myUser->can($plugin,'edit')) throw new Exception("Vousz n'avez pas la permission d'edition nécessaire sur le module ".$plugin->name." pour sauvegarder cet import");
}
$item->save();
}
if($myUser->can('import','read')){
//Ajout upload Excel
if(!empty($_['file']))
File::save_component('file', 'import/'.$item->id.'/{{label}}');
}
$response = $item->toArray();
});
//Suppression d'élement import
Action::register('import_delete',function(&$response){
global $_;
User::check_access('import','configure');
require_once(__DIR__.SLASH.'Import.class.php');
if(empty($_['id']) || !is_numeric($_['id'])) throw new Exception("Identifiant incorrect");
Import::remove($_['id']);
});
//Import : Gestion upload Excel
Action::register('import_file',function(&$response){
require_once(__DIR__.SLASH.'Import.class.php');
$allowedExtensions = array();
foreach(Import::templates() as $template)
$allowedExtensions[] = $template->extension;
File::handle_component(array(
'namespace' => 'import', //stockés dans file/import/
'access' => 'import',
'extension' => implode(',',$allowedExtensions),
'limit' => 1,
'size' => '1000000000', // taille max
'storage' => 'import/{{data.id}}/*.*' //chemin complet vers le fichier stocké
),$response);
});
Action::register('import_mapping_deduction',function(&$response){
global $_;
User::check_access('import','read');
require_once(__DIR__.SLASH.'ImportMapping.class.php');
require_once(__ROOT__.SLASH.'plugin/import/Import.class.php');
$import = Import::provide();
$importmappings = ImportMapping::loadAll(array('import'=>$import->id));
require_once($import->entity);
$class = str_replace('.class.php','',basename($import->entity));
$instance = new $class();
$entityFields = $instance->fields(false);
$entityLinks = property_exists($instance,'links') ? $instance->links : array();
$files = glob(File::dir().'import/'.$import->id.'/*.*');
if(count($files)==0) return;
$excel = $files[0];
$template = Import::templates(getExt($excel));
if(!$template) throw new Exception('Cette extension n\'est pas prise en charge par le module import');
$template->meta = json_decode($import->meta,true);
$excel = $template->toArray($excel);
$header = array();
if(count($excel)==0) throw new Exception("L'excel est vide");
//récuperation des en-têtes nominatives (A,B ...)
$columns = array();
$maxColumn = 0;
//calcul du nombre max de colonnes
foreach($excel as $line){
$columnCount = count($line);
$maxColumn = $columnCount>$maxColumn ? $columnCount: $maxColumn;
}
for($i=0;$i<$maxColumn+1;$i++){
$columns[]= array('value'=>import_column_letter($i));
}
//SI un header existe, on récupere les libellés liés aux entete nominatives (ex: A = "Référence")
if($import->hasheader){
$columnsNames = $excel[$import->headerLine-1];
foreach ($columnsNames as $i => $name) {
$columns[$i]['label']= $name['value'];
}
}
$dataColumns = isset($excel[$import->startLine]) ? $excel[$import->startLine] : array();
$response['excelCount'] = count($columns);
$response['entityCount'] = 0;
foreach($columns as $i=>$cell){
//si la cellule est vide, on continue
if($template->emptyCell($cell)) continue;
$importmapping = new ImportMapping();
$importmapping->import = $import->id;
$sample = isset($dataColumns[$i]) ? $dataColumns[$i] : array('value'=>'');
//Déduction du type de valeur en fonction du nom de colonne ou de la valeur
$deductedType = $template->cellType($cell,$sample);
$deductedColumn = array();
//déduction de l'attribut entité en fonction du nom de colonne (si existant)
if(isset($cell['label'])){
$cell['label'] = str_replace('
',' ',$cell['label']);
$slugValue = slugify($cell['label']);
foreach($entityFields as $entityField){
$levenshtein = levenshtein(slugify($entityField['label']),$slugValue );
//correspondance parfaite
if($levenshtein == 0){
$deductedColumn = $entityField;
break;
}
//correspondance a 2 lettres près
if( $levenshtein < 2 && strlen($slugValue)> 4 ){
$deductedColumn = $entityField;
break;
}
//si la colonne excel commence par le nom de la colonne courante
if(strpos($slugValue,slugify($entityField['label']))===0){
$deductedColumn = $entityField;
}
}
if(isset($deductedColumn['column'])){
$importmapping->entityField = $deductedColumn['column'];
$deductedType = $deductedColumn['fieldtype'];
if(isset($entityLinks[$importmapping->entityField])){
$subClassFile = __ROOT__.SLASH.$entityLinks[$importmapping->entityField];
//par defaut on lie a l'id de la sous classes
$importmapping->entitySubField = 'id';
//si un attribut label existe sur la sous classe on utilise celui la
if(file_exists($subClassFile)){
require_once($subClassFile);
$subClass = str_replace('.class.php','',basename($subClassFile));
if(property_exists($subClass,'label')) $importmapping->entitySubField = 'label';
}
}
$response['entityCount']++;
}
}
$importmapping->excelColumn = $cell['value'];
if(isset($cell['label'])) $importmapping->excelColumnName = $cell['label'];
$macro = Import::macros($deductedType);
if($macro != false) $importmapping->modifier = $macro['slug'];
$importmapping->save();
}
});
/** IMPORTMAPPING / LINE D\'IMPORT MAPPéE **/
//Récuperation d'une liste de line d\'import mappée
Action::register('import_mapping_search',function(&$response){
global $_;
User::check_access('import','read');
require_once(__DIR__.SLASH.'ImportMapping.class.php');
require_once(__ROOT__.SLASH.'plugin/import/Import.class.php');
$import = Import::provide();
$importmappings = ImportMapping::loadAll(array('import'=>$import->id),array('id'));
require_once($import->entity);
$class = str_replace('.class.php','',basename($import->entity));
$instance = new $class();
$entityFields = $instance->fields(false);
$response['rows'] = array();
$fieldTypes = FieldType::available();
foreach($importmappings as $importmapping){
$row = $importmapping->toArray();
if( isset($entityFields[$row['entityField']]) ){
$field = $entityFields[$row['entityField']];
$row['entityField'] = $field['column'];
$row['entityFieldType'] = isset($fieldTypes[$field['fieldtype']]) ? $fieldTypes[$field['fieldtype']] : '';
}
$response['rows'][] = $row;
}
});
Action::register('import_execute',function(&$response){
global $_,$myUser;
User::check_access('import','read');
require_once(__DIR__.SLASH.'Import.class.php');
require_once(__DIR__.SLASH.'ImportMapping.class.php');
$import = Import::provide();
if(empty($import->id)) throw new Exception('Id import manquant');
//verification des droits sur le plugin de l'entitée ciblée
$plugin = dirname($import->entity);
$plugin = $plugin == 'class' ? 'core':$plugin;
$plugin = Plugin::parseManifest($plugin.SLASH.'app.json');
if(!$myUser->can($plugin->folder,'edit')){
throw new Exception("Vous n'avez pas la permission d'edition nécessaire sur le module ".$plugin->name." ('".$plugin->folder."') pour utiliser cet import");
}
$mapping = array();
$fixedValues = array();
//contient les colonnes qui doivent rester uniques et leurs valeurs
$uniqueColumns = array();
foreach(ImportMapping::loadAll(array('import'=>$import->id)) as $importmapping){
$mapping[$importmapping->excelColumn] = $importmapping;
if(!empty($importmapping->unique)) $uniqueColumns[$importmapping->entityField] = array();
//remplissage d'un tableau des valeurs fixes (non présentes dans l'excel)
if(!empty($importmapping->excelColumnFixedValue) ) $fixedValues[$importmapping->entityField] = $importmapping->excelColumnFixedValue;
}
require_once($import->entity);
$class = str_replace('.class.php','',basename($import->entity));
$instance = new $class();
$entityFields = $instance->fields(false);
$entityLinks = $instance->links;
$files = glob(File::dir().'import/'.$_['id'].'/*.*');
if(count($files)==0) throw new Exception('Excel inexistant');
$excelPath = $files[0];
$response['fileName'] = basename($excelPath);
$template = Import::templates(getExt($excelPath));
if(!$template) throw new Exception('Extension de fichier non prise en charge');
$template->meta = json_decode($import->meta,true);
$excel = $template->toArray($excelPath);
$headers = array();
//récuperation des en-têtes (si non existantes on genere des en-êtes A,B ...)
$response['columns'] = array();
$maxColumn = 0;
//calcul du nombre max de colonnes
foreach($excel as $line){
$columnCount = count($line);
$maxColumn = $columnCount>$maxColumn ? $columnCount: $maxColumn;
}
for($i=0;$i!=$maxColumn;$i++){
$letter = import_column_letter($i);
$headers[]= array('value'=>$letter);
$response['columns'][] = $letter;
}
$entityLabel = $class;
if(property_exists($instance,'entityLabel') && !empty($instance->entityLabel)) $entityLabel = $instance->entityLabel;
$context = array(
'excel' => $excel,
'import' => $import,
'columns' => $response['columns'],
'plugin' => basename(dirname($import->entity)),
'entity' => $class,
'entityLabel' => $entityLabel,
'headers' => $headers
);
$linkCache = array();
$excelCount = count($excel);
History::put('import',$import->id,'lancement de l\'import ('.$excelCount.' lignes)',History::TYPE_EDIT);
$response['stats'] = array(
'total' => array('label'=>'Total','slug'=>'total','value'=>$excelCount),
'imported' => array('label'=>'Importé','slug'=>'imported','value'=>0),
'error' => array('label'=>'Erreur','slug'=>'error','value'=>0)
);
foreach(ImportMapping::uniqueness() as $slug=>$unique){
if(empty($slug)) continue;
$response['stats'][$slug] = array('label'=>$unique['label'],'slug'=>$slug,'value'=>0);
}
if(!empty($uniqueColumns)){
foreach($class::loadAll() as $item){
foreach($uniqueColumns as $attribute=>$values){
if(!empty($item->$attribute)) $uniqueColumns[$attribute][] = $item->$attribute;
}
}
}
//tableau de cache des classes tierces des relations n-n
$subRelatedCache = array();
foreach($excel as $i => $line){
if($i<$import->startLine -1){
$response['stats']['total']['value']--;
continue;
}
$relatedInstances = array();
$lineNumber = $i+($import->hasheader?2:1) -1;
$context['lineNumber'] = $lineNumber;
$context['i'] = $i;
$context['line'] = $line;
$instance = new $class();
if($template->emptyLine($line)){
$response['stats']['total']['value']--;
continue;
}
foreach($line as $u=>$cell){
$columnName = isset($headers[$u])? $headers[$u]['value'] : $u;
$context['columnNumber'] = $u;
$context['columnName'] = $columnName;
try{
if($template->emptyCell($cell)) continue;
if(!isset($mapping[$columnName])) continue;
$importmapping = $mapping[$columnName];
if(empty($importmapping->entityField))continue;
$entityField = isset($entityFields[$importmapping->entityField]) ? $entityFields[$importmapping->entityField] : null;
$context['entityField'] = $entityField;
if(!empty($importmapping->modifier)){
$macro = Import::macros($importmapping->modifier);
$mutator = $macro['mutator'];
$cell['value'] = $mutator($cell['value'],$context);
}
$attribute = $importmapping->entityField;
//Si le champ est lié a une autre entité en n-1 (un champs de l'entité courante point vers l'id d'une autre entité)
if(isset($entityLinks[$importmapping->entityField]) && basename($entityLinks[$importmapping->entityField])!='Dictionary.class.php'){
$file = $entityLinks[$importmapping->entityField];
require_once(__ROOT__.SLASH.$file);
$subClass = str_replace('.class.php','',basename($file));
if(!isset($linkCache[$file])) $linkCache[$file] = array();
if(!isset($linkCache[$file][$cell['value']])){
//on recherche l'entrée ciblé en base ayant le libellé de la valeur excel
$subInstance = $subClass::load(array($importmapping->entitySubField=>$cell['value']));
if(is_object($subInstance) && $subInstance->id!=0) $linkCache[$file][$cell['value']] = $subInstance->id;
}
//on remplace la valeur par l'id de l'objet trouvé
if( isset($linkCache[$file][$cell['value']]) && is_numeric($linkCache[$file][$cell['value']])) $cell['value'] = $linkCache[$file][$cell['value']];
}
//Si le champ est lié a une autre entité
if(!empty($importmapping->entityRelatedField)){
//On récupere le chemin de la classe de l'autre entité
$relatedFile = $importmapping->entityRelated;
//on vérifie que le fichier de classe existe
if(file_exists($relatedFile)){
//on inclus le fichier de classe
require_once($relatedFile);
//on récupere le nom de la classe
$relatedClass = str_replace('.class.php','',basename($relatedFile));
//on l'instancie
$relatedManager = new $relatedClass();
//on récupere les champs de la classe en questions
$relatedManagerFields = $relatedManager->fields(false);
//Pour chaques champs
foreach($relatedManagerFields as $relatedInstanceField){
//Si une classe tierce est liée (attribut 'link') est qu'elle a le même nom que la classe
//principale qui est importée on la stock en tant que colonne de relation
if(isset($relatedInstanceField['link']) && basename($relatedInstanceField['link']) == basename($import->entity) ){
$relationColumn = $relatedInstanceField['column'];
}
}
$attribute = $importmapping->entityRelatedField;
$attributePath = explode('.',$attribute);
//si le champ est en relation 1-n (une autre entité point vers l'id de l'entitée courante)
if(count($attributePath)==1){
$relatedInstance = isset($relatedInstances[$relationColumn]) ? $relatedInstances[$relationColumn] : array('instance'=> new $relatedClass(),'childs'=>array());
$relatedInstance['instance']->$attribute = $cell['value'];
if(isset($relationColumn)) $relatedInstances[$relationColumn] = $relatedInstance;
continue;
}else if(count($attributePath)>1){
//relations n-n (une autre entité pointe vers l'id de l'entitée courante elle même pointée par une troisieme entitée)
// pour le moment ne gère pas en recursive, un seul niveau de n-n pris en charge
/*
$relatedInstance = isset($relatedInstances['tender']) ? $relatedInstances['tender'] : array('instance'=> new Assigment(),'childs'=>array());
*/
$relatedInstance = isset($relatedInstances[$relationColumn]) ? $relatedInstances[$relationColumn] : array('instance'=> new $relatedClass(),'childs'=>array());
//$relatedManagerField = $relatedManagerFields['assignee'];
$relatedManagerField = $relatedManagerFields[$attributePath[0]];
//requie_once(__ROOT__.SLASH.'/plugin/publictender/Assignee.class.php')
require_once(__ROOT__.SLASH.$relatedManagerField['link']);
//$childClass = Assignee;
$childClass = str_replace('.class.php','',basename($relatedManagerField['link']));
if(isset($relatedInstance['childs'][$attributePath[0]]['instance'])){
$childInstance = $relatedInstance['childs'][$attributePath[0]]['instance'];
}else{
$childInstance = new $childClass();
}
$property = $attributePath[1];
$childInstance->$property = $cell['value'];
$relatedInstance['childs'][$attributePath[0]] = array('instance'=>$childInstance);
if(isset($relationColumn)) $relatedInstances[$relationColumn] = $relatedInstance;
continue;
}else{
continue;
}
}
}
//Vérification de l'unicité si activée
if(!empty($importmapping->unique)){
$uniqueExistingValues = $uniqueColumns[$importmapping->entityField];
//Si la valeur existe déja
if(in_array($cell['value'],$uniqueExistingValues)){
switch($importmapping->unique){
//si on a configuré le skip, on ignore la nouvelle ligne importée
case ImportMapping::UNIQUE_SKIP:
import_report_line($response,$context,ImportMapping::UNIQUE_SKIP,'Ignoré','Ligne non unique, ligne d\'import ignorée');
$response['stats'][ImportMapping::UNIQUE_SKIP]['value']++;
//on utilise 3 car le switch est lui même considéré comme une boucle par php
continue 3;
break;
//si on a configuré le erase, on supprime la ligne existante en base
case ImportMapping::UNIQUE_ERASE:
$class::delete(array($importmapping->entityField => $cell['value']));
import_report_line($response,$context,ImportMapping::UNIQUE_ERASE,'Écrasé','Ligne non unique, correspondance en base ecrasée');
$response['stats'][ImportMapping::UNIQUE_ERASE]['value']++;
break;
}
}
//on ajoute la nouvelle valeur unique dans le tableau de gestion des unicités
$uniqueColumns[$importmapping->entityField][] = $cell['value'];
}
$instance->$attribute = $cell['value'];
}catch(Exception $e){
import_report_line($response,$context,'error','Erreur',$e->getMessage().' L'.$e->getLine());
$response['stats']['error']['value']++;
History::put('import',$import->id,'L'.$lineNumber.' colonne '.($context['columnNumber']+1).' : '.$e->getMessage().' ('.$e->getLine().')','error');
continue;
}
}
//remplissage des valeurs fixes pour l'objet
foreach($fixedValues as $enfityField=>$value){
$instance->$enfityField = $value;
}
$response['stats']['imported']['value']++;
$instance->save();
foreach($relatedInstances as $property=>$relatedInstance){
//n-n
if(!empty($relatedInstance['childs'])){
foreach($relatedInstance['childs'] as $subProperty => $subRelatedInstance){
//On verifie si l'entité tierce est existante en base
$filters = array();
$subRelatedClass = get_class($subRelatedInstance['instance']);
foreach($subRelatedInstance['instance']->fields() as $field){
if(in_array($field,array('created','id','updated','updater','creator'))) continue;
$filters[$field] = $subRelatedInstance['instance']->$field;
}
$filterChain = sha1(json_encode($filters));
if(isset($subRelatedCache[$filterChain])){
$existing = $subRelatedCache[$filterChain];
}else{
$existing = $subRelatedClass::load($filters);
if($existing != false) $subRelatedCache[$filterChain] = $existing;
}
//si l'entité tierce n'est pas existante, on la créé
if(!$existing){
$subRelatedInstance['instance']->save();
//si l'entité tierce existe, on la prend comme référence
}else{
$subRelatedInstance['instance'] = $existing;
}
$subRelatedCache[$filterChain] = $subRelatedInstance['instance'];
$relatedInstance['instance']->$subProperty = $subRelatedInstance['instance']->id;
$relatedInstance['instance']->$property = $instance->id;
$relatedInstance['instance']->save();
}
//1-n
}else{
$relatedInstance['instance']->$property = $instance->id;
$relatedInstance['instance']->save();
}
}
}
if(file_exists($excelPath)) unlink($excelPath);
History::put('import',$import->id,'Fin de l\'import, '.$response['stats']['imported']['value'].'/'.$response['stats']['total']['value'].' importés',History::TYPE_EDIT);
});
//Ajout ou modification d'élément line d\'import mappée
Action::register('import_template_setting',function(&$response){
global $_;
User::check_access('import','configure');
require_once(__DIR__.SLASH.'Import.class.php');
require_once(__DIR__.SLASH.'ImportMapping.class.php');
$import = Import::provide('import');
$files = glob(File::dir().'import/'.$import->id.'/*.*');
if(count($files)==0) return $response['form'] = '';
$excel = $files[0];
$template = Import::templates(getExt($excel));
$meta = json_decode($import->meta,true);
$template->meta = $meta;
$excel = $template->toArray($excel);
$response['headers'] = array();
$maxColumn = 0;
//calcul du nombre max de colonnes
foreach($excel as $line){
$columnCount = count($line);
$maxColumn = $columnCount>$maxColumn ? $columnCount: $maxColumn;
}
for($i=0;$i!=$maxColumn;$i++){
$letter = import_column_letter($i);
$response['headers'][$letter]= array('value'=>$letter);
}
$response['form'] = '';
foreach($template->settings() as $slug=>$field){
$field['id'] = $slug;
if(isset($meta[$field['id']])) $field['value'] = $meta[$field['id']];
$field['attributes']['onchange'] = '"import_save()"';
$field = FieldType::toHtml($field,null,array('allowCustomLabel'=>true));
$response['form'] .= $field['label'].' '.(!empty($field['legend'])?''.$field['legend'].'':'').' '.$field['input'];
}
});
//Ajout ou modification d'élément line d\'import mappée
Action::register('import_mapping_save',function(&$response){
global $_;
User::check_access('import','configure');
require_once(__DIR__.SLASH.'Import.class.php');
require_once(__DIR__.SLASH.'ImportMapping.class.php');
$item = ImportMapping::provide();
$item->excelColumn = isset($_['excelColumn']) ? $_['excelColumn'] : 'Sans titre';
$item->excelColumnFixedValue = isset($_['excelColumnFixedValue']) ? $_['excelColumnFixedValue'] : '';
$item->modifier = isset($_['modifier']) ? $_['modifier']: '';
$item->entityField = isset($_['entityField']) ? $_['entityField']: '';
$item->entitySubField = isset($_['entitySubField']) ? $_['entitySubField']: '';
$item->entityRelated = isset($_['entityRelated']) ? $_['entityRelated']: '';
$item->entityRelatedField = isset($_['entityRelatedField']) ? $_['entityRelatedField']: '';
$item->unique = isset($_['unique']) ? $_['unique']: '';
$item->import = $_['import'];
$item->save();
$response = $item->toArray();
});
//Récuperation ou edition d'élément line d\'import mappée
Action::register('import_mapping_edit',function(&$response){
global $_;
User::check_access('import','configure');
require_once(__DIR__.SLASH.'ImportMapping.class.php');
$response = ImportMapping::getById($_['id'])->toArray();
if(!isset($response['modifier'])) $response['modifier'] = '';
});
//Suppression d'élement line d\'import mappée
Action::register('import_mapping_delete',function(&$response){
global $_;
User::check_access('import','configure');
require_once(__DIR__.SLASH.'ImportMapping.class.php');
if(empty($_['id'])) throw new Exception("Identifiant incorrect");
if($_['id'] == 'all'){
ImportMapping::delete(array('import'=>$_['import']));
}else{
ImportMapping::deleteById($_['id']);
}
});
/* COMPOSANT*/
//recherche autocomplete
Action::register('import_autocomplete',function(&$response){
global $myUser,$_;
require_once(__DIR__.SLASH.'Import.class.php');
if (!$myUser->connected()) throw new Exception("Vous devez être connecté", 401);
$response['rows'] = array();
$data = array("%".$_['keyword']."%");
//retourne en priorité les matchs à 100%, pour les match keyword%, puis les autres
$query = 'SELECT c.* FROM '.Import::tableName().' c WHERE (c.label LIKE ?) ';
$query .= ' LIMIT 10';
$devices = Import::staticQuery($query,$data,true);
foreach($devices as $item){
$response['rows'][] = array(
'label'=>html_entity_decode($item->label, ENT_QUOTES),
'id'=>$item->id,
);
}
});
//Récuperation valeur composant depuis l'uid
Action::register('import_by_uid',function(&$response){
global $myUser,$_;
if (!$myUser->connected()) throw new Exception("Vous devez être connecté",401);
require_once(__DIR__.SLASH.'Import.class.php');
$response['items'] = array();
$query = 'SELECT main.* FROM '.Import::tableName().' main WHERE main.id IN(';
$query .= implode(',', array_fill(0, count($_['items']), '?'));
$query .= ')';
foreach(Import::staticQuery($query,$_['items'],true) as $item) {
$row = $item->toArray();
$row['label'] = html_entity_decode($row['label'], ENT_QUOTES);
$response['items'][$row['id']] = $row;
}
});
//Sauvegarde des configurations de Import
Action::register('import_setting_save',function(&$response){
global $_,$conf;
User::check_access('import','configure');
//Si input file "multiple", possibilité de normaliser le
//tableau $_FILES récupéré avec la fonction => normalize_php_files();
foreach(Configuration::setting('import') as $key=>$value){
if(!is_array($value)) continue;
$allowed[] = $key;
}
foreach ($_['fields'] as $key => $value) {
if(in_array($key, $allowed))
$conf->put($key,$value);
}
});
?>