123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- <?php
- //Déclaration d'un item de menu dans le menu principal
- function skanman_menu(&$menuItems){
- global $myUser;
- if(!$myUser->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 <code>apt-get install imagemagick</code>");
- 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");
|