public function actionRunTest($hash)
 {
     Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
     $site = null;
     $test = null;
     $sites = SiteController::getAvailableSites();
     foreach ($sites as $s) {
         foreach ($s->tests as $t) {
             if ($t->hash === $hash) {
                 $site = $s;
                 $test = $t;
             }
         }
     }
     $response = ['message' => null, 'run' => false, 'passed' => false, 'state' => 'error', 'log' => null];
     if (is_null($response['message'])) {
         $this->run($site, $test);
         $response['run'] = $test->ran();
         $response['log'] = $test->getLog();
         $response['passed'] = $test->passed();
         $response['state'] = $test->state;
         $response['title'] = $test->title;
     }
     return $response;
 }
 /**
  * Routed Actions - Views Rendering
  */
 public function actionIndex()
 {
     $sites = SiteController::getAvailableSites();
     // Checking the configuration
     $logging_passed = true;
     foreach ($sites as $site) {
         if (!$site->logging['passed']) {
             $logging_passed = false;
         }
     }
     $checks = ['configuration' => CodeceptionController::checkConfiguration(), 'executable' => CodeceptionController::checkExecutable(), 'logging' => $logging_passed];
     return $this->render('index', ['sites' => $sites, 'checks' => $checks]);
 }