can('skanman','read')) return; $menuItems[] = array( 'sort'=>3, 'url'=>'index.php?module=skanman', 'label'=>'Scanner', 'icon'=> 'fas fa-file-medical-alt', 'color'=> '#1abc9c' ); } //Cette fonction va generer une page quand on clique sur Scanner dans menu function skanman_page(){ global $_; if(!isset($_['module']) || $_['module'] !='skanman') return; $page = !isset($_['page']) ? 'list.scanfile' : $_['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 skanman_install($id){ if($id != 'fr.core.skanman') return; if(!preg_match('/ImageMagick [0-9\.]*/i',shell_exec('convert -version'))) throw new Exception("Imagemagick est manquant sur le système, merci de l'installer avec la commande apt-get install imagemagick"); Entity::install(__DIR__); global $conf; $conf->put('skanman_api_token',base64_encode('m1y3'.time().'h4$h'.mt_rand(0,1000).'43v3r')); $conf->put('skanman_api_user','admin'); $conf->put('skanman_scan_light','50'); $conf->put('skanman_scan_contrast','10'); $conf->put('skanman_scan_resolution','240'); $conf->put('skanman_scan_page_height','297'); $conf->put('skanman_synchronization_version',time()); $conf->put('skanman_sort_category','sort'); foreach( array( array('label'=>'Factures','icon'=>'fas fa-file-invoice-dollar','slug'=>'invoice','sort'=>0), array('label'=>'Devis','icon'=>'far fa-file-alt','slug'=>'offer','sort'=>1), array('label'=>'Frais','icon'=>'fas fa-ticket-alt','slug'=>'charge','sort'=>2), array('label'=>'Mon dossier','icon'=>'far fa-eye','slug'=>'mine','sort'=>3,'scope'=>'user','editable'=>false), array('label'=>'E-Mail','icon'=>'far fa-envelope-open','slug'=>'mail','sort'=>4,'scope'=>'user','editable'=>false), array('label'=>'À trier','icon'=>'fas fa-random','slug'=>'sort','sort'=>5,'selected'=>true) ) as $value) { $item = ScanCategory::provide(); $item->slug = $value['slug']; $item->label = $value['label']; $item->icon = $value['icon']; $item->sort = $value['sort']; if(!empty($value['selected'])) $item->selected = $value['selected']; $item->editable = !empty($value['editable']) ? $value['editable'] : true; $item->path = '/'.$value['label']; $item->scope = !empty($value['scope']) ? $value['scope'] :''; $item->save(); } } //Fonction executée lors de la désactivation du plugin function skanman_uninstall($id){ if($id != 'fr.core.skanman') return; Entity::uninstall(__DIR__); } //Déclaration des sections de droits du plugin function skanman_section(&$sections){ $sections['skanman'] = "Gestion des droits sur le plugin Scanner"; } //Déclaration du menu de réglages function skanman_menu_setting(&$settingMenu){ global $myUser; if(!$myUser->can('skanman','configure')) return; $settingMenu[]= array( 'sort' =>1, 'url' => 'setting.php?section=global.skanman', 'icon' => 'fas fa-angle-right', 'label' => 'Scanner' ); } //Déclaration des pages de réglages function skanman_content_setting(){ global $_; if(file_exists(__DIR__.SLASH.'setting.'.$_['section'].'.php')) require_once(__DIR__.SLASH.'setting.'.$_['section'].'.php'); } //Affichage du/des widget(s) function skanman_widget(&$widgets){ require_once(PLUGIN_PATH.'dashboard'.SLASH.'DashboardWidget.class.php'); $modelWidget = new DashboardWidget(); $modelWidget->model = 'skanman'; $modelWidget->title = 'Scanner'; $modelWidget->icon = 'fas fa-file-medical-alt'; $modelWidget->background = '#1abc9c'; $modelWidget->load = 'action.php?action=skanman_widget_load'; $modelWidget->js = [Plugin::url().'/js/widget.js']; $modelWidget->css = [Plugin::url().'/css/widget.css']; $modelWidget->description = ""; $widgets[] = $modelWidget; } //Déclaration des settings de base //Types possibles : voir FieldType.class.php. Un simple string définit une catégorie. Configuration::setting('skanman',array( "Général", 'skanman_api_token' => array("label"=>"Token API","type"=>"password"), 'skanman_api_user' => array("label"=>"Utilisateur de l'api","type"=>"user"), 'skanman_mail_body' => array("label"=>"Message d'envois de scan par mail","type"=>"wysiwyg"), 'skanman_scan_light' => array("label"=>"Brillance du scan (0-100)","legend"=>"Conseillé : 0","type"=>"number"), 'skanman_scan_contrast' => array("label"=>"Contraste du scan (0-100)","legend"=>"Conseillé : 0","type"=>"number"), "Scan par défaut", 'skanman_scan_format' => array("label"=>"Format","type"=>"list", 'values' => array('a4' => 'Feuille A4','ticket' => 'Ticket de caisse'), 'default' => 'a4' ), 'skanman_scan_face' => array("label"=>"Face scannée","type"=>"list", 'values' => array('recto' => 'Recto','recto-verso' => 'Recto/verso'), 'default' => 'recto' ), 'skanman_scan_color' => array("label"=>"Couleur","type"=>"list", 'values' => array('color' => 'Couleur','black' => 'Noir & blanc'), 'default' => 'color' ), 'skanman_scan_stack' => array("label"=>"Numeriser en","type"=>"list", 'values' => array('one-file' => 'Un document pour toutes les numérisations','multiple-files' => 'Un document par numérisation'), 'default' => 'one-file' ), 'skanman_scan_resolution' => array("label"=>"Résolution du scan (100|150|200|300|400|600 dpi)","legend"=>"Conseillé : 300","type"=>"number"), 'skanman_ocr_enable' => array("label"=>"Activer le tag automatique par OCR (experimental)","placeholder"=>"necessite l'installation du paquet ocrmypdf","type"=>"boolean"), 'skanman_scan_page_height' => array("label"=>"Hauteur de page du scan (mm)","legend"=>"Conseillé : 297","type"=>"number"), 'skanman_image_rotate' => array("label"=>"Faire pivoter les images scannées de x degrés","legend"=>"Conseillé : 180","type"=>"number"), 'skanman_image_to_pdf' => array("label"=>"Convertir les images en PDF","type"=>"boolean"), 'skanman_users_rank'=> array("label"=>"Rang des utilisateurs","legend"=>"Rang des utilisateurs disponibles sur l'interface du scanner (mon dossier)","type"=>"rank"), 'skanman_sort_category' => array("label"=>"Catégorie de tri","type"=>"text"), 'skanman_scan_logo' => array("label"=>"Logo du scanner","type"=>"image", "attributes"=>array( "data-action"=>"skanman_scan_logo", "data-id"=>"logo", "data-data"=>"{\"variant\":\"light\"}", )), 'skanman_scan_css' => array("label"=>"Style personnalisé (css)","type"=>"textarea"), )); require_once(__DIR__.SLASH.'action.php'); require_once(__DIR__.SLASH.'api.php'); //Declaration des évenements et entités workflow Plugin::addHook("workflow_event", function(&$events){ Plugin::need('workflow/WorkflowEvent'); //Evenement entité $event = WorkflowEvent::registerEntity(__DIR__.SLASH.'Scanfile.class.php'); $event['events']['skanman-file-send'] = 'Lors d\'un scan'; $events[] = $event; }); function skanman_cron($time){ global $_; //Nettoyage a minuit des fichiers meta n'ayant plus de fichier ged liés (fichier supprimés depuis la ged) if(date('H:i', $time)!='00:00' && !isset($_['force-skanman'])) return; //Vidage des dossiers temporaires $constructionDirectory = File::dir().'skanman'.SLASH.'tmp'; if(file_exists($constructionDirectory)) delete_folder_tree($constructionDirectory, true); require_once(__DIR__.SLASH.'Scanfile.class.php'); Plugin::need('document/Element'); $query = Scanfile::staticQuery('SELECT t1.id FROM {{table}} t1 LEFT JOIN '.Element::tableName().' t2 ON t1.element = t2.id WHERE t2.id IS NULL'); if(!$query) return; $ids = array(); foreach($query->fetchAll() as $line){ $ids[] = $line['id']; } if(count($ids)==0) return; Scanfile::delete(array('id:IN'=>$ids)); } //Déclation des assets Plugin::addCss("/css/main.css"); Plugin::addJs("/js/pdf.min.js"); Plugin::addJs("/js/component.js"); Plugin::addJs("/js/main.js"); //Mapping hook / fonctions Plugin::addHook("install", "skanman_install"); Plugin::addHook("uninstall", "skanman_uninstall"); Plugin::addHook("section", "skanman_section"); Plugin::addHook("menu_main", "skanman_menu"); Plugin::addHook("cron", "skanman_cron"); Plugin::addHook("page", "skanman_page"); Plugin::addHook("menu_setting", "skanman_menu_setting"); Plugin::addHook("content_setting", "skanman_content_setting"); Plugin::addHook("widget", "skanman_widget");