/** * @param $id * @param Request $request * @param ActivityElementValidator $activityElementValidator * @return \Illuminate\Http\RedirectResponse */ public function updateStatus($id, Request $request, ActivityElementValidator $activityElementValidator) { $activityData = $this->activityManager->getActivityData($id); if (Gate::denies('ownership', $activityData)) { return redirect()->back()->withResponse($this->getNoPrivilegesMessage()); } $this->authorize('edit_activity', $activityData); $input = $request->all(); $activityWorkflow = $input['activity_workflow']; if ($activityWorkflow == 3) { $this->authorize('publish_activity', $activityData); } $settings = $this->settingsManager->getSettings($activityData['organization_id']); $transactionData = $this->activityManager->getTransactionData($id); $resultData = $this->activityManager->getResultData($id); $organization = $this->organizationManager->getOrganization($activityData->organization_id); $orgElem = $this->organizationManager->getOrganizationElement(); $activityElement = $this->activityManager->getActivityElement(); $xmlService = $activityElement->getActivityXmlService(); if ($activityWorkflow == 1) { $validationMessage = $activityElementValidator->validateActivity($activityData, $transactionData); if ($validationMessage) { $response = ['type' => 'warning', 'code' => ['message', ['message' => $validationMessage]]]; return redirect()->back()->withResponse($response); } $messages = $xmlService->validateActivitySchema($activityData, $transactionData, $resultData, $settings, $activityElement, $orgElem, $organization); if ($messages != []) { $response = ['type' => 'danger', 'messages' => $messages, 'activity' => 'true']; return redirect()->back()->withResponse($response); } } elseif ($activityWorkflow == 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); } $xmlService->generateActivityXml($activityData, $transactionData, $resultData, $settings, $activityElement, $orgElem, $organization); if ($settings['registry_info'][0]['publish_files'] == 'yes') { $publishedStatus = $this->publishToRegistry(); $this->activityManager->updateStatus($input, $activityData); if ($publishedStatus) { $this->activityManager->makePublished($activityData); $this->activityManager->activityInRegistry($activityData); $this->twitter->post($settings, $organization); $response = ['type' => 'success', 'code' => ['publish_registry_publish', ['name' => '']]]; return redirect()->back()->withResponse($response); } else { $response = ['type' => 'warning', 'code' => ['publish_registry', ['name' => '']]]; return redirect()->back()->withResponse($response); } } } $statusLabel = ['Completed', 'Verified', 'Published']; $response = $this->activityManager->updateStatus($input, $activityData) ? ['type' => 'success', 'code' => ['activity_statuses', ['name' => $statusLabel[$activityWorkflow - 1]]]] : ['type' => 'danger', 'code' => ['activity_statuses_failed', ['name' => $statusLabel[$activityWorkflow - 1]]]]; return redirect()->back()->withResponse($response); }
/** * Publish an Activity. * * If the auto-publish option is set, the Activity data is published into the IATI Registry. * @param $activity * @param $details * @return bool */ public function publish($activity, array $details) { try { $organization = $activity->organization; $settings = $organization->settings; $version = $settings->version; $this->xmlServiceProvider->initializeGenerator($version)->generate($activity, $this->organizationManager->getOrganizationElement(), $this->activityManager->getActivityElement()); if (getVal($settings['registry_info'], [0, 'publish_files']) == 'yes') { $this->publisher->publishFile($organization->settings['registry_info'], $this->organizationDataProvider->fileBeingPublished($activity->id), $organization, $organization->settings->publishing_type); $this->activityManager->activityInRegistry($activity); $this->twitter->post($organization->settings, $organization); } $this->update($details, $activity); return true; } catch (\ErrorException $exception) { $this->logger->error($exception); return null; } catch (Exception $exception) { $this->logger->error($exception); return array_first(explode("\n", $exception->getMessage()), function () { return true; }); } }