public function doPostSnapshot($data, $form) { $this->setCurrentActionType(self::ACTION_SNAPSHOT); $project = $this->getCurrentProject(); if (!$project) { return $this->project404Response(); } $validEnvs = $project->DNEnvironmentList()->filterByCallback(function ($item) { return $item->canUploadArchive(); }); // Validate $data['EnvironmentID'] by checking against $validEnvs. $environment = $validEnvs->find('ID', $data['EnvironmentID']); if (!$environment) { throw new LogicException('Invalid environment'); } $dataArchive = DNDataArchive::create(['UploadToken' => DNDataArchive::generate_upload_token()]); $form->saveInto($dataArchive); $dataArchive->write(); return $this->redirect(Controller::join_links($project->Link(), 'postsnapshotsuccess', $dataArchive->ID)); }