id_tache = $id_tache; } //formulaire spécifique au type de tâche function show_form ($param='') { global $dbh,$charset; global $deflt_upload_repertoire; //On créer le sélecteur pour choisir le repertoire d'upload $query="SELECT * FROM upload_repertoire"; $result=pmb_mysql_query($query,$dbh); $select=""; if(pmb_mysql_num_rows($result)){ $select.=""; }else{ $select.=$this->msg['planificateur_scan_docnum_no_upload_repertoire']; } $form_task .= "
$select
"; return $form_task; } /** * Liste le contenu du repertoire $upload_folder * Ne tiens compte que des fichiers * * @param string $upload_folder * @return array */ function list_docnum($upload_folder){ $list=array(); $tmp_list=scandir($upload_folder); foreach ($tmp_list as $item){ if(!is_dir($upload_folder.$item) && file_exists($upload_folder.$item)&& preg_match('/^(a|b|n)([0-9]+)(\.|\-).+$/', $item)){ $list[]=$item; } } return $list; } function task_execution() { global $charset, $msg, $PMBusername; $reussi=0; $error_count=0; $errors=array(); if (SESSrights & ADMINISTRATION_AUTH) { $parameters = $this->unserialize_task_params(); if (method_exists($this->proxy, "pmbesScanDocnum_get_doc_num")) { if ($parameters["upload_folder"] && $parameters["upload_repertoire"]) { //on liste les documents dans le fichier upload_folder $list_docnum=$this->list_docnum($parameters["upload_folder"]); if(sizeof($list_docnum)){ //il y en a $percent = 0; $p_value = (int) 100/count($list_docnum); $this->report[] = "".$this->msg["planificateur_scan_docnum_doc_a_traiter"]."".count($list_docnum).""; foreach ($list_docnum as $docnum){ $this->listen_commande(array(&$this, 'traite_commande')); //fonction a rappeller (traite commande) if($this->statut == WAITING) { $this->send_command(RUNNING); } if($this->statut == RUNNING) { $explnum=array(); $explnum['explnum_nomfichier']=$docnum; $explnum['explnum_repertoire']=$parameters["upload_repertoire"]; $match=array(); if(preg_match('/^b([0-9]+)(\.|\-).+$/', $docnum, $match)){ $explnum['explnum_bulletin']=$match[1]; }elseif(preg_match('/^a([0-9]+)(\.|\-).+$/', $docnum, $match)){ $explnum['explnum_notice']=$match[1]; }elseif(preg_match('/^n([0-9]+)(\.|\-).+$/', $docnum, $match)){ $explnum['explnum_notice']=$match[1]; } $report = $this->proxy->pmbesScanDocnum_get_doc_num($explnum, $parameters["upload_folder"]); foreach ($report as $msg_type=>$values){ switch ($msg_type){ case 'error': foreach($values as $error_msg){ if($errors[$error_msg]){ $errors[$error_msg]++; }else{ $errors[$error_msg]=1; } $error_count++; } break; case 'info': $reussi=$reussi+$values; break; } } $percent+=$p_value; $this->update_progression($percent); } } }else { $this->update_progression(100); $this->report[] = "".$this->msg["planificateur_scan_docnum_no_docnum"].""; } } else { $this->report[] = "".$this->msg["planificateur_scan_docnum_bad_params"].""; } } else { $this->report[] = "".sprintf($msg["planificateur_function_rights"],"get_doc_num","pmbesScanDocnum",$PMBusername).""; } } else { $this->report[] = "".sprintf($msg["planificateur_rights_bad_user_rights"], $PMBusername).""; } if($reussi){ $this->report[] = "".$this->msg['planificateur_scan_docnum_doc_traites']."$reussi"; } if($errors){ $this->report[] = "".$this->msg['planificateur_scan_docnum_doc_non_traites']."$error_count"; foreach($errors as $error_msg=>$error_nb){ $this->report[] = "$error_msg$error_nb"; } } // $this->show_report($this->report); } function traite_commande($cmd,$message) { switch ($cmd) { case RESUME: $this->send_command(WAITING); break; case SUSPEND: $this->suspend_scan_docnum(); break; case STOP: $this->finalize(); die(); break; case FAIL: $this->finalize(); die(); break; } } function make_serialized_task_params() { global $upload_folder,$upload_repertoire; $t = parent::make_serialized_task_params(); if ($upload_folder) { $t["upload_folder"]=stripslashes($upload_folder); } if ($upload_repertoire){ $t["upload_repertoire"]=stripslashes($upload_repertoire); } return serialize($t); } function unserialize_task_params() { $params = $this->get_task_params(); return $params; } function suspend_scan_docnum() { while ($this->statut == SUSPENDED) { sleep(20); $this->listen_commande(array(&$this,"traite_commande")); } } }