| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 | 
							- <?php
 
- //Déclaration d'un item de menu dans le menu principal
 
- function import_menu(&$menuItems){
 
- 	global $myUser;
 
- 	if(!$myUser->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('<br>',"\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('<br>',"\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");
 
- ?>
 
 
  |