/**
  * Akce pro odebrání celého obsahu rule clipboard z konkrétního rulesetu
  * @param int $id
  * @param int $miner
  * @param int $ruleset
  * @param string $returnRules ='' - IDčka oddělená čárkami, případně jedno ID
  * @throws ForbiddenRequestException
  * @throws BadRequestException
  */
 public function actionRemoveRulesFromRuleSet($id = null, $miner, $ruleset, $returnRules = '')
 {
     //načtení dané úlohy a zkontrolování přístupu k mineru
     $task = $this->tasksFacade->findTask($id);
     $this->checkMinerAccess($task->miner);
     $ruleIdsArr = explode(',', str_replace(';', ',', $returnRules));
     //najití RuleSetu a kontroly
     $ruleSet = $this->ruleSetsFacade->findRuleSet($ruleset);
     $this->ruleSetsFacade->checkRuleSetAccess($ruleSet, $this->user->id);
     //přidání pravidel
     $this->ruleSetsFacade->removeAllRuleClipboardRulesFromRuleSet($task, $ruleSet);
     $result = array();
     if (count($ruleIdsArr) > 0) {
         foreach ($ruleIdsArr as $ruleId) {
             try {
                 $rule = $this->rulesFacade->findRule($ruleId);
                 //TODO optimalizovat kontroly...
                 $ruleTask = $rule->task;
                 if ($ruleTask->taskId != $task->taskId) {
                     throw new InvalidArgumentException();
                 }
                 if ($ruleTask->miner->minerId != $miner) {
                     throw new InvalidArgumentException();
                 }
                 $result[$rule->ruleId] = $rule->getBasicDataArr();
             } catch (\Exception $e) {
                 continue;
             }
         }
     }
     $this->sendJsonResponse(array('rules' => $result));
 }
 /**
  * Akce pro odebrání všech pravidel z rulesetu
  * @param int $id
  */
 public function actionRemoveAllRules($id)
 {
     //najití RuleSetu a kontroly
     $ruleSet = $this->ruleSetsFacade->findRuleSet($id);
     $this->ruleSetsFacade->checkRuleSetAccess($ruleSet, $this->user->id);
     //smazání
     $this->ruleSetsFacade->removeAllRulesFromRuleSet($ruleSet);
     $this->sendJsonResponse(['state' => 'ok']);
 }
 /**
  * Funkce pro nalezení rule setu dle zadaného ID a kontrolu oprávnění aktuálního uživatele pracovat s daným rule setem
  * @param int $ruleSetId
  * @return RuleSet
  * @throws \Nette\Application\BadRequestException
  */
 private function findRuleSetWithCheckAccess($ruleSetId)
 {
     try {
         /** @var RuleSet $ruleSet */
         $ruleSet = $this->ruleSetsFacade->findRuleSet($ruleSetId);
     } catch (EntityNotFoundException $e) {
         $this->error('Requested rule set was not found.');
         return null;
     }
     //kontrola možnosti pracovat s daným rule setem
     $this->ruleSetsFacade->checkRuleSetAccess($ruleSet, $this->getCurrentUser()->userId);
     return $ruleSet;
 }
 /**
  * Funkce pro kontrolu vstupů pro vytvoření nového mineru
  */
 public function validateCreate()
 {
     $currentUser = $this->getCurrentUser();
     /** @noinspection PhpMethodParametersCountMismatchInspection */
     $this->input->field('name')->addRule(IValidator::REQUIRED, 'Name is required!');
     /** @noinspection PhpMethodParametersCountMismatchInspection */
     $this->input->field('type')->addRule(IValidator::REQUIRED, 'Miner type is required!');
     /** @noinspection PhpMethodParametersCountMismatchInspection */
     $this->input->field('datasourceId')->addRule(IValidator::REQUIRED, 'Datasource ID is required!')->addRule(IValidator::CALLBACK, 'Requested datasource was not found, or is not accessible!', function ($value) use($currentUser) {
         try {
             $this->datasource = $this->datasourcesFacade->findDatasource($value);
             if ($this->datasourcesFacade->checkDatasourceAccess($this->datasource, $currentUser)) {
                 //kontrola dostupnosti kompatibilního mineru s vybraným datasource
                 $availableMinerTypes = $this->minersFacade->getAvailableMinerTypes($this->datasource->type);
                 return !empty($availableMinerTypes[$this->getInput()->getData()['type']]);
             } else {
                 return false;
             }
         } catch (\Exception $e) {
             return false;
         }
     });
     /** @noinspection PhpMethodParametersCountMismatchInspection */
     $this->input->field('ruleSetId')->addRule(IValidator::CALLBACK, 'Requested rule set was not found, or is not accessible!', function ($value) use($currentUser) {
         if (empty($value)) {
             return true;
         }
         try {
             $this->ruleSet = $this->ruleSetsFacade->findRuleSet($value);
             $this->ruleSetsFacade->checkRuleSetAccess($this->ruleSet, $currentUser);
             return true;
         } catch (\Exception $e) {
             return false;
         }
     });
 }