/**
  * Funkce pro načtení plných výsledků úlohy z PMML
  *
  * @return TaskState
  */
 public function importResultsPMML()
 {
     #region zjištění jména souboru, který se má importovat (a kontrola, jestli tu nějaký takový soubor je)
     $importData = $this->task->getImportData();
     $taskState = $this->task->getTaskState();
     if (!empty($importData)) {
         $filename = array_shift($importData);
         if (file_exists($filename)) {
             //FIXME optimalizace načítání výsledků - vyřešení duplicitních cedentů (aby nedocházelo k jejich duplicitnímu importu
             $importedRulesCount = 0;
             $this->fullParseRulesPMML(simplexml_load_file($filename), $importedRulesCount, true);
             #region aktualizace TaskState
             $taskState->importData = $importData;
             $taskState->importState = Task::IMPORT_STATE_WAITING;
             if (empty($importData)) {
                 if ($taskState->state == Task::STATE_SOLVED || $taskState->state == Task::STATE_INTERRUPTED) {
                     $taskState->importState = Task::IMPORT_STATE_DONE;
                 }
             }
             #endregion aktualizace TaskState
             //smažeme importovaný soubor
             FileSystem::delete($filename);
         }
     }
     #endregion
     return $taskState;
 }
 /**
  * Funkce pro zastavení dolování
  * @return TaskState
  */
 public function stopMining()
 {
     $taskState = $this->task->getTaskState();
     if ($taskState->state == Task::STATE_SOLVED || $taskState->state != Task::STATE_IN_PROGRESS) {
         return $taskState;
     }
     try {
         $this->cancelRemoteMinerTask($this->getRemoteMinerTaskName());
         $this->task->state = Task::STATE_INTERRUPTED;
     } catch (\Exception $e) {
     }
     return $this->task->getTaskState();
 }
 /**
 * Funkce pro připravení úlohy na základě jednoduchého pole s konfigurací (například přes API)
 *
 *@param Miner $miner
 * @param array $settingsArr
 * @param Task|null $updateTask=null
 * @return Task
 * @throws \InvalidArgumentException
 */
 public function prepareSimpleTask(Miner $miner, $settingsArr, Task $updateTask = null)
 {
     //prepare apropriate task...
     if ($updateTask instanceof Task) {
         $task = $updateTask;
         if ($task->miner->minerId != $miner->minerId) {
             throw new \InvalidArgumentException('Invalid combination of miner and task!');
         }
     } else {
         $task = new Task();
     }
     //prepare task settings from $settings
     if (isset($settingsArr['succedent']) && !isset($settingsArr['consequent'])) {
         $settingsArr['consequent'] = $settingsArr['succedent'];
     }
     $taskSettings = ['limitHits' => max(1, @$settingsArr['limitHits']), 'rule0' => ['id' => 0, 'groupFields' => true, 'antecedent' => ['type' => 'cedent', 'connective' => ['id' => 2, 'name' => 'AND', 'type' => 'and'], 'level' => 1, 'children' => $this->prepareSimpleTaskAttributesArr(@$settingsArr['antecedent'])], 'IMs' => $this->prepareSimpleTaskIMsArr(@$settingsArr['IMs']), 'specialIMs' => $this->prepareSimpleTaskSpecialIMsArr(@$settingsArr['specialIMs']), 'succedent' => ['type' => 'cedent', 'connective' => ['id' => 2, 'name' => 'AND', 'type' => 'and'], 'level' => 1, 'children' => $this->prepareSimpleTaskAttributesArr($settingsArr['consequent'])]], 'rules' => 1, 'debug' => false, 'strict' => false, 'taskMode' => 'task', 'taskName' => $settingsArr['name']];
     //configure task object
     $task->miner = $miner;
     $task->type = $miner->type;
     $task->name = $settingsArr['name'];
     $task->state = Task::STATE_NEW;
     $task->setTaskSettings($taskSettings);
     return $task;
 }