/**
  * re initialize all taskjob of a taskjob
  *
  * @param $tasks_id integer id of the task
  *
  * @return bool TRUE if all taskjob are ready (so finished from old runnning job)
  *
  **/
 function reinitializeTaskjobs($tasks_id, $disableTimeVerification = 0)
 {
     global $DB;
     $pfTask = new PluginFusioninventoryTask();
     $pfTaskjob = new PluginFusioninventoryTaskjob();
     $pfTaskjobstate = new PluginFusioninventoryTaskjobstate();
     $pfTaskjoblog = new PluginFusioninventoryTaskjoblog();
     $query = "SELECT *, UNIX_TIMESTAMP(datetime_start) as date_scheduled_timestamp\n            FROM `" . $pfTask->getTable() . "`\n         WHERE `id`='" . $tasks_id . "'\n         LIMIT 1";
     $result = $DB->query($query);
     $data = $DB->fetch_assoc($result);
     $period = $pfTaskjob->periodicityToTimestamp($data['periodicity_type'], $data['periodicity_count']);
     // Calculate next execution from last
     $queryJob = "SELECT * FROM `" . $pfTaskjob->getTable() . "`\n         WHERE `plugin_fusioninventory_tasks_id`='" . $tasks_id . "'\n         ORDER BY `id` DESC";
     $resultJob = $DB->query($queryJob);
     $nb_taskjobs = $DB->numrows($resultJob);
     // get only with execution_id (same +1) as task
     $queryJob = "SELECT * FROM `" . $pfTaskjob->getTable() . "`\n         WHERE `plugin_fusioninventory_tasks_id`='" . $tasks_id . "'\n            AND `execution_id`='" . ($data['execution_id'] + 1) . "'\n         ORDER BY `id` DESC";
     $finished = 2;
     $resultJob = $DB->query($queryJob);
     $nb_finished = 0;
     while ($dataJob = $DB->fetch_array($resultJob)) {
         $a_taskjobstateuniqs = $pfTaskjobstate->find("`plugin_fusioninventory_taskjobs_id`='" . $dataJob['id'] . "'", 'id DESC', 1);
         $a_taskjobstateuniq = current($a_taskjobstateuniqs);
         $a_taskjobstate = $pfTaskjobstate->find("`plugin_fusioninventory_taskjobs_id`='" . $dataJob['id'] . "'\n                              AND `uniqid`='" . $a_taskjobstateuniq['uniqid'] . "'");
         $taskjobstatefinished = 0;
         foreach ($a_taskjobstate as $statedata) {
             $a_joblog = $pfTaskjoblog->find("`plugin_fusioninventory_taskjobstates_id`='" . $statedata['id'] . "'\n                              AND (`state`='2' OR `state`='4' OR `state`='5')");
             if (count($a_joblog) > 0) {
                 $taskjobstatefinished++;
             }
         }
         if (count($a_taskjobstate) == $taskjobstatefinished and count($a_taskjobstate) > 0) {
             if ($finished == '2') {
                 $finished = 1;
             }
             $nb_finished++;
         } else {
             $finished = 0;
         }
     }
     if ($nb_finished != $nb_taskjobs) {
         if ($disableTimeVerification == '1') {
             // Forcerun
             $queryJob2 = "SELECT * FROM `" . $pfTaskjob->getTable() . "`\n            WHERE `plugin_fusioninventory_tasks_id`='" . $tasks_id . "'\n               AND `execution_id`='" . $data['execution_id'] . "'\n            ORDER BY `id` DESC";
             $resultJob2 = $DB->query($queryJob2);
             if ($DB->numrows($resultJob2) == $nb_taskjobs) {
                 $finished = 1;
                 return TRUE;
             } else {
                 $finished = 0;
             }
         } else {
             $finished = 0;
         }
     }
     // if all jobs are finished, we calculate if we reinitialize all jobs
     if ($finished == "1") {
         $exe = $data['execution_id'];
         unset($data['execution_id']);
         $queryUpdate = "UPDATE `" . $pfTaskjob->getTable() . "`\n            SET `status`='0'\n            WHERE `plugin_fusioninventory_tasks_id`='" . $data['id'] . "'";
         $DB->query($queryUpdate);
         if ($period != '0') {
             if (is_null($data['date_scheduled_timestamp'])) {
                 $data['date_scheduled_timestamp'] = date('U');
             }
             if ($data['date_scheduled_timestamp'] + $period <= date('U') and $period = !'0') {
                 $periodtotal = $period;
                 for ($i = 2; $data['date_scheduled_timestamp'] + $periodtotal <= date('U'); $i++) {
                     $periodtotal = $period * $i;
                 }
                 $data['datetime_start'] = date("Y-m-d H:i:s", $data['date_scheduled_timestamp'] + $periodtotal);
             } else {
                 if ($data['date_scheduled_timestamp'] > date('U')) {
                     // Don't update date next execution
                 } else {
                     $data['datetime_start'] = date("Y-m-d H:i:s", $data['date_scheduled_timestamp'] + $period);
                 }
             }
         }
         $data['execution_id'] = $exe + 1;
         unset($data['comment']);
         $pfTask->update($data);
         return TRUE;
     } else {
         return FALSE;
     }
 }