can('import','read')) return; $menuItems[] = array( 'sort'=>3, 'url'=>'index.php?module=import', 'label'=>'Import', 'icon'=> 'fas fa-file-import', 'color'=> '#2ecc71' ); } //Cette fonction va generer une page quand on clique sur Import dans menu function import_page(){ global $_; if(!isset($_['module']) || $_['module'] !='import') return; $page = !isset($_['page']) ? 'list.import' : $_['page']; $page = str_replace('..','',$page); $file = __DIR__.SLASH.'page.'.$page.'.php'; if(!file_exists($file)) throw new Exception("Page ".$page." inexistante"); require_once($file); } //Fonction executée lors de l'activation du plugin function import_install($id){ if($id != 'fr.core.import') return; Entity::install(__DIR__); } //Fonction executée lors de la désactivation du plugin function import_uninstall($id){ if($id != 'fr.core.import') return; Entity::uninstall(__DIR__); } //Déclaration des sections de droits du plugin Right::register('import',array('label'=>'Gestion des droits sur le plugin Import')); //cette fonction comprends toutes les actions du plugin qui ne nécessitent pas de vue html function import_action(){ require_once(__DIR__.SLASH.'action.php'); } //Déclaration du menu de réglages function import_menu_setting(&$settingMenu){ global $myUser; if(!$myUser->can('import','configure')) return; $settingMenu[]= array( 'sort' =>1, 'url' => 'setting.php?section=global.import', 'icon' => 'fas fa-angle-right', 'label' => 'Import' ); } //Déclaration des pages de réglages function import_content_setting(){ global $_; if(file_exists(__DIR__.SLASH.'setting.'.$_['section'].'.php')) require_once(__DIR__.SLASH.'setting.'.$_['section'].'.php'); } //Récupere la lettre excel (ou le groupe de lettres) en fonction du numéro de colonne function import_column_letter($columnNumber){ $alphabet = str_split('ABCDEFGHIJKLMNOPQRSTUVWXYZ'); $multiplicator = floor($columnNumber / 26); $columnNumber = $columnNumber - ($multiplicator*26); $parentLetter = ($multiplicator!=0) ? import_column_letter($multiplicator-1) :''; return $parentLetter.$alphabet[$columnNumber]; } function import_report_line(&$response,$context,$type,$typeLabel,$message){ if(!isset($response['lines'][$context['lineNumber']])) $response['lines'][$context['lineNumber']] = array('state'=>ImportMapping::UNIQUE_SKIP,'columns'=>array()); foreach($context['columns'] as $i=>$columnLetter){ if(!isset($response['lines'][$context['lineNumber']])) $response['lines'][$context['lineNumber']] = array('columns'=>array()); if(!isset($context['line'][$i])) $context['line'][$i] = array('value'=>''); $response['lines'][$context['lineNumber']]['columns'][$i] = array('value'=>$context['line'][$i]['value']); } $response['lines'][$context['lineNumber']]['columns'][$context['columnNumber']]['state'] = $type ; $response['lines'][$context['lineNumber']]['columns'][$context['columnNumber']]['stateLabel'] = $typeLabel ; $response['lines'][$context['lineNumber']]['columns'][$context['columnNumber']]['message'] = $message; } function import_import_macros(&$macros){ $macros = array( 'dictionary' => array( 'slug'=>'dictionary', 'label'=>'Convertir en liste configurable', 'description'=>'Convertis les valeurs en dictionnaire (liste configurable)', 'mutator'=> function($value,$context = array()){ if(!isset($context['dictionnaries'])) $context['dictionnaries'] = array(); $parentSlug = slugify($context['plugin']).'_'.slugify($context['entity']).'_'.$context['entityField']['column']; //récuperation du dico racine / construition si inexistant if(!isset($context['dictionnaries'][$parentSlug])){ $parent = Dictionary::bySlug($parentSlug); if(!$parent){ $parent = new Dictionary(); $parent->slug = $parentSlug; $parent->label = $context['entityLabel'].' : '.$context['entityField']['label']; $parent->parent = 0; $parent->state = Dictionary::ACTIVE; $parent->save(); } $context['dictionnaries'][$parentSlug] = array('id'=>$parent->id,'childs'=>array()); } $valueSlug = $parentSlug.'_'.slugify($value); if(!isset($context['dictionnaries'][$parentSlug]['childs'][$valueSlug])){ $item = Dictionary::bySlug($valueSlug); if(!$item){ $item = new Dictionary(); $item->slug = $valueSlug; $item->label = $value; $item->parent = $context['dictionnaries'][$parentSlug]['id']; $item->state = Dictionary::ACTIVE; $item->save(); } $context['dictionnaries'][$parentSlug]['childs'][$valueSlug] = $item->id; } return $context['dictionnaries'][$parentSlug]['childs'][$valueSlug]; }), 'firm' => array( 'slug'=>'firm', 'label'=>'Convertir en établissement ERP', 'description'=>'Convertis les textes en établissement ERP (si existants)', 'mutator'=> function($value,&$context = array()){ if(!isset($context['firms'])){ $context['firms'] = array(); foreach(Firm::loadAll() as $firm){ $context['firms'][slugify($firm->label)] = $firm; } } //var_dump($value,slugify($value),$context['firms']); if(!isset($context['firms'][slugify($value)])) return ''; return $context['firms'][slugify($value)]->id; }), 'price' => array( 'slug'=>'price', 'label'=>'Convertir en prix € ERP', 'description'=>'Convertis les textes en prix € ERP', 'mutator'=> function($value,&$context = array()){ $value = str_replace(',','.',$value); $value = preg_replace('/[^0-9\.]/i','',$value); return $value; }), 'breakline' => array( 'slug'=>'breakline', 'label'=>'Convertir les sauts de lignes', 'description'=>'Convertir les sauts de lignes HTML en saut de lignes classiques', 'mutator'=> function($value,&$context = array()){ $value = str_replace('
',"\n",$value); return $value; }), 'boolean' => array( 'slug'=>'boolean', 'label'=>'Convertir en vrai/faux ERP', 'description'=>'Convertis les oui/non O/N en vrai/faux ERP', 'mutator'=> function($value,&$context = array()){ $value = str_replace(array(' ',"\r","\n","\t"),'',mb_strtolower($value)); switch($value){ case 'o': case 'oui': case 'x': case 'yes': case 'ok': case 'vrai': case '1': $value = 1; break; case 'n': case 'non': case 'no': case 'ko': case 'faux': case '0': $value = 0; break; default: $value = ''; break; } return $value; }), 'date' => array( 'slug' => 'date', 'label'=>'Convertir en date ERP', 'description'=>'Convertis la date excel en date ERP (timestamp)', 'mutator'=> function($value,&$context = array()){ $value = trim($value); if(empty($value)) return ''; $date = explode('/',str_replace(array('-',' '), '/', $value)); if(count($date)<3) return 0; if(strlen($date[2]) == 4){ $year = $date[2]; $month = $date[1]; $day = $date[0]; }else if(strlen($date[0]) == 4){ $year = $date[0]; $month = $date[1]; $day = $date[2]; }else{ return 0; } if(!is_numeric($month)){ $numericMonth = false; $longNames = array('janvier','fevrier','mars','avril','mai','juin','juillet','aout','septembre','octobre','novembre','decembre'); $shortNames = array('jan','fev','mar','avr','mai','juin','juil','aout','sept','oct','nov','dec'); if(isset( $longNames[slugify($month)] ))$numericMonth = $longNames[slugify($month)]; if(isset( $shortNames[slugify($month)] ))$numericMonth = $shortNames[slugify($month)]; $month = $numericMonth; if(!$month) return 0; } $m = 0; $h = 0; if(isset($date[3])){ list($h,$m) = explode(':',$date[3]); } if(!is_numeric($day) || !is_numeric($month) || !is_numeric($year)) return 0; return mktime($h,$m,0,$month,$day,$year); } ), 'empty-breakline' => array( 'slug'=>'empty-breakline', 'label'=>'Supprimer les sauts de lignes', 'description'=>'Supprimer les sauts de lignes (texte et html)', 'mutator'=> function($value,&$context = array()){ $value = str_replace(array('
',"\n","\r"),"",$value); return $value; }) ); } require_once(__DIR__.SLASH.'action.php'); //Déclaration des settings de base //Types possibles : voir FieldType.class.php. Un simple string définit une catégorie. Configuration::setting('import',array( "Général", //'import_enable' => array("label"=>"Activer","type"=>"boolean"), )); /* */ //Déclation des assets Plugin::addCss("/css/main.css"); Plugin::addJs("/js/main.js"); Plugin::addCss("/css/component.css"); Plugin::addJs("/js/component.js"); //Mapping hook / fonctions Plugin::addHook("install", "import_install"); Plugin::addHook("uninstall", "import_uninstall"); Plugin::addHook("menu_main", "import_menu"); Plugin::addHook("page", "import_page"); Plugin::addHook("menu_setting", "import_menu_setting"); Plugin::addHook("content_setting", "import_content_setting"); Plugin::addHook("import_macros","import_import_macros"); ?>