/** * @param $id * @param Request $request * @param OrganizationElementValidator $orgElementValidator * @return \Illuminate\Http\RedirectResponse */ public function updateStatus($id, Request $request, OrganizationElementValidator $orgElementValidator) { $organization = $this->organizationManager->getOrganization($id); if (Gate::denies('belongsToOrganization', $organization)) { return redirect()->back()->withResponse($this->getNoPrivilegesMessage()); } $input = $request->all(); $status = $input['status']; if ($status == 3) { $this->authorize('publish_activity', $organization); } $organization = $this->organizationManager->getOrganization($id); $organizationData = $this->organizationManager->getOrganizationData($id); $settings = $this->settingsManager->getSettings($id); $orgElem = $this->organizationManager->getOrganizationElement(); $xmlService = $orgElem->getOrgXmlService(); if ($status === "1") { $validationMessage = $orgElementValidator->validateOrganization($organizationData); if ($validationMessage) { $response = ['type' => 'warning', 'code' => ['message', ['message' => $validationMessage]]]; return redirect()->back()->withResponse($response); } $messages = $xmlService->validateOrgSchema($organization, $organizationData, $settings, $orgElem); if ($messages != []) { $response = ['type' => 'danger', 'messages' => $messages, 'organization' => 'true']; return redirect()->back()->withResponse($response); } } else { if ($status === "3") { if (empty($settings['registry_info'][0]['publisher_id']) && empty($settings['registry_info'][0]['api_id'])) { $response = ['type' => 'warning', 'code' => ['settings_registry_info', ['name' => '']]]; return redirect()->to('/settings')->withResponse($response); } $result = $xmlService->generateOrgXml($organization, $organizationData, $settings, $orgElem); if (!$result) { $this->organizationManager->updateStatus($input, $organizationData); $response = ['type' => 'warning', 'code' => ['publish_registry', ['name' => '']]]; return redirect()->back()->withResponse($response); } } } $statusLabel = ['Completed', 'Verified', 'Published']; $response = $this->organizationManager->updateStatus($input, $organizationData) ? ['type' => 'success', 'code' => ['org_statuses', ['name' => $statusLabel[$status - 1]]]] : ['type' => 'danger', 'code' => ['org_statuses_failed', ['name' => $statusLabel[$status - 1]]]]; return redirect()->back()->withResponse($response); }