/**
  * updates activity sector
  * @param                      $id
  * @param Request              $request
  * @param SectorRequestManager $sectorRequestManager
  * @return \Illuminate\Http\RedirectResponse
  */
 public function update($id, Request $request, SectorRequestManager $sectorRequestManager)
 {
     $activityData = $this->activityManager->getActivityData($id);
     if (Gate::denies('ownership', $activityData)) {
         return redirect()->back()->withResponse($this->getNoPrivilegesMessage());
     }
     $this->authorizeByRequestType($activityData, 'sector');
     $sectors = $request->all();
     foreach ($sectors['sector'] as &$sector) {
         if ($sector['sector_vocabulary'] == 1 || $sector['sector_vocabulary'] == '') {
             $sector['sector_vocabulary'] = 1;
             $sector['sector_category_code'] = '';
             $sector['sector_text'] = '';
         } elseif ($sector['sector_vocabulary'] == 2) {
             $sector['sector_code'] = '';
             $sector['sector_text'] = '';
         } else {
             $sector['sector_code'] = '';
             $sector['sector_category_code'] = '';
         }
     }
     if ($this->sectorManager->update($sectors, $activityData)) {
         $this->activityManager->resetActivityWorkflow($id);
         $response = ['type' => 'success', 'code' => ['updated', ['name' => 'Sector']]];
         return redirect()->to(sprintf('/activity/%s', $id))->withResponse($response);
     }
     $response = ['type' => 'danger', 'code' => ['update_failed', ['name' => 'Sector']]];
     return redirect()->back()->withInput()->withResponse($response);
 }
 /**
  * updates activity recipient region
  * @param                               $id
  * @param Request                       $request
  * @param RecipientRegionRequestManager $recipientRegionRequestManager
  * @return \Illuminate\Http\RedirectResponse
  */
 public function update($id, Request $request, RecipientRegionRequestManager $recipientRegionRequestManager)
 {
     $activityData = $this->activityManager->getActivityData($id);
     if (Gate::denies('ownership', $activityData)) {
         return redirect()->back()->withResponse($this->getNoPrivilegesMessage());
     }
     $this->authorizeByRequestType($activityData, 'recipient_region');
     $activityTransactions = $this->transactionManager->getTransactions($id);
     $count = 0;
     if ($activityTransactions) {
         foreach ($activityTransactions as $transactions) {
             $transactionDetail = $transactions->transaction;
             removeEmptyValues($transactionDetail);
             if (!empty($transactionDetail['recipient_country']) || !empty($transactionDetail['recipient_region'])) {
                 $count++;
             }
         }
     }
     if ($count > 0) {
         $response = ['type' => 'warning', 'code' => ['message', ['message' => 'You cannot save Recipient Region in activity level because you have already saved recipient country or region in transaction level.']]];
         return redirect()->back()->withInput()->withResponse($response);
     }
     $recipientRegions = $request->all();
     foreach ($recipientRegions['recipient_region'] as &$recipientRegion) {
         $recipientRegion['region_vocabulary'] != '' ?: ($recipientRegion['region_vocabulary'] = '1');
     }
     if ($this->recipientRegionManager->update($recipientRegions, $activityData)) {
         $this->activityManager->resetActivityWorkflow($id);
         $response = ['type' => 'success', 'code' => ['updated', ['name' => 'Recipient Region']]];
         return redirect()->to(sprintf('/activity/%s', $id))->withResponse($response);
     }
     $response = ['type' => 'danger', 'code' => ['update_failed', ['name' => 'Recipient Region']]];
     return redirect()->back()->withInput()->withResponse($response);
 }
 /**
  * it validates activity schema according to version standard
  * @param      $id
  * @param null $version
  * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  */
 public function validateActivity($id, $version = null)
 {
     $activityData = $this->activityManager->getActivityData($id);
     $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();
     if ($version == null) {
         $version = config('app.default_version_name');
     }
     return $this->validateCompletedActivity($activityData, $transactionData, $resultData, $settings, $activityElement, $orgElem, $organization, $version);
 }
 public function update($id, Request $request, ConditionRequestManager $conditionRequestManager)
 {
     $activityData = $this->activityManager->getActivityData($id);
     if (Gate::denies('ownership', $activityData)) {
         return redirect()->back()->withResponse($this->getNoPrivilegesMessage());
     }
     $this->authorizeByRequestType($activityData, 'conditions');
     $condition = $request->except(['_token', '_method']);
     if ($this->conditionManager->update($condition, $activityData)) {
         $this->activityManager->resetActivityWorkflow($id);
         $response = ['type' => 'success', 'code' => ['updated', ['name' => 'Conditions']]];
         return redirect()->to(sprintf('/activity/%s', $id))->withResponse($response);
     }
     $response = ['type' => 'danger', 'code' => ['update_failed', ['name' => 'Related Activity']]];
     return redirect()->back()->withInput()->withResponse($response);
 }
 /**
  * updates activity title
  * @param                     $id
  * @param Request             $request
  * @param TitleRequestManager $titleRequestManager
  * @return \Illuminate\Http\RedirectResponse
  */
 public function update($id, Request $request, TitleRequestManager $titleRequestManager)
 {
     if (!$this->currentUserIsAuthorizedForActivity($id)) {
         return redirect()->back()->withResponse($this->getNoPrivilegesMessage());
     }
     $activityData = $this->titleManager->getActivityData($id);
     $this->authorizeByRequestType($activityData, 'title');
     $activityTitle = $request->all();
     if ($this->titleManager->update($activityTitle, $activityData)) {
         $this->activityManager->resetActivityWorkflow($id);
         $response = ['type' => 'success', 'code' => ['updated', ['name' => 'Activity Title']]];
         return redirect()->to(sprintf('/activity/%s', $id))->withResponse($response);
     }
     $response = ['type' => 'danger', 'code' => ['update_failed', ['name' => 'Activity Title']]];
     return redirect()->back()->withInput()->withResponse($response);
 }
 /**
  * @param                      $id
  * @param Request              $request
  * @param BudgetRequestManager $budgetRequestManager
  * @return mixed
  */
 public function update($id, Request $request, BudgetRequestManager $budgetRequestManager)
 {
     $activityData = $this->activityManager->getActivityData($id);
     if (Gate::denies('ownership', $activityData)) {
         return redirect()->back()->withResponse($this->getNoPrivilegesMessage());
     }
     $this->authorizeByRequestType($activityData, 'budget');
     $budget = $request->all();
     if ($this->budgetManager->update($budget, $activityData)) {
         $this->activityManager->resetActivityWorkflow($id);
         $response = ['type' => 'success', 'code' => ['updated', ['name' => 'Budget']]];
         return redirect()->to(sprintf('/activity/%s', $id))->withResponse($response);
     }
     $response = ['type' => 'danger', 'code' => ['update_failed', ['name' => 'Budget']]];
     return redirect()->back()->withInput()->withResponse($response);
 }
 /**
  * generate new xml files with published activities
  * @param $newPublishingType
  * @param $activities
  */
 protected function generateNewFiles($newPublishingType, $activities)
 {
     $activityElement = $this->activityManager->getActivityElement();
     $xmlService = $activityElement->getActivityXmlService();
     $orgIdentifier = $this->organization->reporting_org[0]['reporting_organization_identifier'];
     $publisherId = $this->settings->registry_info[0]['publisher_id'];
     if ($newPublishingType == "unsegmented") {
         $filename = $publisherId . '-activities.xml';
         $activitiesXml = [];
         foreach ($activities as $activity) {
             if ($activity->activity_workflow == 3) {
                 $publishedActivity = sprintf('%s-%s.xml', $publisherId, $activity->id);
                 $this->generateXmlIfDoesNotExist($publishedActivity, $activity);
                 $activitiesXml[] = $publishedActivity;
             }
         }
         $xmlService->getMergeXml($activitiesXml, $filename);
         $xmlService->savePublishedFiles($filename, Session::get('org_id'), $activitiesXml);
     } elseif ($newPublishingType == "segmented") {
         $activitiesXml = [];
         foreach ($activities as $activity) {
             if ($activity->activity_workflow == 3) {
                 $filename = sprintf('%s-%s.xml', $publisherId, $xmlService->segmentedXmlFile($activity));
                 $publishedActivity = sprintf('%s-%s.xml', $publisherId, $activity->id);
                 $this->generateXmlIfDoesNotExist($publishedActivity, $activity);
                 $activitiesXml[$filename][] = $publishedActivity;
             }
         }
         foreach ($activitiesXml as $filename => $xmlFiles) {
             $xmlService->getMergeXml($xmlFiles, $filename);
             $xmlService->savePublishedFiles($filename, Session::get('org_id'), $xmlFiles);
         }
     }
 }
 /**
  * @param                              $activityId
  * @param IatiIdentifierRequestManager $iatiIdentifierRequestManager
  * @param Request                      $request
  * @return \Illuminate\Http\RedirectResponse
  */
 public function update($activityId, IatiIdentifierRequestManager $iatiIdentifierRequestManager, Request $request)
 {
     $activityData = $this->activityManager->getActivityData($activityId);
     if (Gate::denies('ownership', $activityData)) {
         return redirect()->back()->withResponse($this->getNoPrivilegesMessage());
     }
     $iatiIdentifierData = $this->iatiIdentifierManager->getActivityData($activityId);
     $this->authorizeByRequestType($iatiIdentifierData, 'identifier');
     $input = $request->all();
     if ($this->iatiIdentifierManager->update($input, $iatiIdentifierData)) {
         $this->activityManager->resetActivityWorkflow($activityId);
         $response = ['type' => 'success', 'code' => ['updated', ['name' => 'Activity Iati Identifier']]];
         return redirect()->to(sprintf('/activity/%s', $activityId))->withResponse($response);
     }
     $response = ['type' => 'danger', 'code' => ['update_failed', ['name' => 'Activity Iati Identifier']]];
     return redirect()->route('activity.iati-identifier.index', $activityId)->withInput()->withResponse($response);
 }
 /**
  * update country budget item
  * @param                                 $id
  * @param Request                         $request
  * @param CountryBudgetItemRequestManager $countryBudgetItemRequestManager
  * @return mixed
  */
 public function update($id, Request $request, CountryBudgetItemRequestManager $countryBudgetItemRequestManager)
 {
     $activityData = $this->activityManager->getActivityData($id);
     if (Gate::denies('ownership', $activityData)) {
         return redirect()->back()->withResponse($this->getNoPrivilegesMessage());
     }
     $this->authorizeByRequestType($activityData, 'country_budget_items');
     $countryBudgetItems = $request->all();
     foreach ($countryBudgetItems['country_budget_item'] as &$countryBudgetItem) {
         $code = $countryBudgetItem['vocabulary'] == 1 ? 'code_text' : 'code';
         $countryBudgetItem['budget_item'][0][$code] = '';
     }
     if ($this->countryBudgetItemManager->update($countryBudgetItems, $activityData)) {
         $this->activityManager->resetActivityWorkflow($id);
         $response = ['type' => 'success', 'code' => ['updated', ['name' => 'Country Budget Item']]];
         return redirect()->to(sprintf('/activity/%s', $id))->withResponse($response);
     }
     $response = ['type' => 'danger', 'code' => ['update_failed', ['name' => 'Country Budget Item']]];
     return redirect()->back()->withInput()->withResponse($response);
 }
 /**
  * updates activity participating organization
  * @param                                         $id
  * @param Request                                 $request
  * @param ParticipatingOrganizationRequestManager $participatingOrganizationRequestManager
  * @return \Illuminate\Http\RedirectResponse
  */
 public function update($id, Request $request, ParticipatingOrganizationRequestManager $participatingOrganizationRequestManager)
 {
     $activityData = $this->activityManager->getActivityData($id);
     if (Gate::denies('ownership', $activityData)) {
         return redirect()->back()->withResponse($this->getNoPrivilegesMessage());
     }
     $this->authorizeByRequestType($activityData, 'participating_organization');
     $participatingOrganization = $request->all();
     if (!$this->validateData($request->get('participating_organization'))) {
         $response = ['type' => 'warning', 'code' => ['participating_org', ['name' => 'participating organization']]];
         return redirect()->back()->withInput()->withResponse($response);
     }
     if ($this->participatingOrganizationManager->update($participatingOrganization, $activityData)) {
         $this->activityManager->resetActivityWorkflow($id);
         $response = ['type' => 'success', 'code' => ['updated', ['name' => 'Activity Participating Organization']]];
         return redirect()->to(sprintf('/activity/%s', $id))->withResponse($response);
     }
     $response = ['type' => 'danger', 'code' => ['update_failed', ['name' => 'Activity Participating Organization']]];
     return redirect()->back()->withInput()->withResponse($response);
 }
 /**
  * deletes data block from transaction
  * @param $id
  * @param $transactionId
  * @param $jsonPath
  */
 public function deleteBlock($id, $transactionId, $jsonPath)
 {
     $result = $this->transactionManager->deleteBlock($transactionId, $jsonPath);
     if ($result) {
         $this->activityManager->resetActivityWorkflow($id);
         $response = ['type' => 'success', 'code' => ['transaction_block_removed', ['element' => 'activity']]];
     } else {
         $response = ['type' => 'danger', 'code' => ['transaction_block_not_removed', ['element' => 'activity']]];
     }
     return redirect()->back()->withResponse($response);
 }
 /**
  * generate activity xml
  * @param Activity $activity
  */
 public function generateXml(Activity $activity)
 {
     $activity_id = $activity->id;
     $org_id = $activity->organization_id;
     $settings = $this->getSettings($org_id);
     $transactionData = $this->activityManager->getTransactionData($activity_id);
     $resultData = $this->activityManager->getResultData($activity_id);
     $organization = $this->organizationManager->getOrganization($org_id);
     $orgElem = $this->organizationManager->getOrganizationElement();
     $activityElement = $this->activityManager->getActivityElement();
     $xmlService = $activityElement->getActivityXmlService();
     $xmlService->generateActivityXml($activity, $transactionData, $resultData, $settings, $activityElement, $orgElem, $organization);
 }
 /**
  * Remove all the sector details from every transactions of the activity.
  * @param $activityId
  */
 public function removeTransactionSector($activityId)
 {
     $activity = $this->activityManager->getActivityData($activityId);
     if (Gate::denies('ownership', $activity)) {
         return redirect()->back()->withResponse($this->getNoPrivilegesMessage());
     }
     $sector = $this->activityManager->removeTransactionSector($activityId);
     if ($sector) {
         $response = ['type' => 'success', 'messages' => ['Sector details has been removed from Transaction level.']];
     } else {
         $response = ['type' => 'danger', 'messages' => ['Failed to remove Sector details from Transaction level.']];
     }
     return redirect()->back()->withResponse($response);
 }
 /**
  * store the uploaded transaction
  * @param Request                  $request
  * @param                          $id
  * @param UploadTransactionRequest $uploadTransactionRequest
  * @param CsvImportValidator       $csvImportValidator
  * @return $this
  */
 public function store(Request $request, $id, UploadTransactionRequest $uploadTransactionRequest, CsvImportValidator $csvImportValidator)
 {
     $activity = $this->activityManager->getActivityData($id);
     if (Gate::denies('ownership', $activity)) {
         return redirect()->back()->withResponse($this->getNoPrivilegesMessage());
     }
     $this->authorize('add_activity', $activity);
     $file = $request->file('transaction');
     if ($this->uploadTransactionManager->isEmptyCsv($file)) {
         return redirect()->back()->withResponse(['type' => 'danger', 'code' => ['empty_template', ['name' => 'Transaction']]]);
     }
     $validator = $this->validatorForCurrentCsvType($file, $csvImportValidator);
     if (null === $validator) {
         return redirect()->back()->withResponse(['type' => 'danger', 'code' => ['header_mismatch', ['name' => 'Transaction']]]);
     }
     if (null !== $validator && $validator->fails()) {
         $response = ['type' => 'danger', 'messages' => $validator->errors()->all()];
         return redirect()->back()->withInput()->withResponse($response);
     }
     $this->uploadTransactionManager->save($file, $activity);
     $this->activityManager->resetActivityWorkflow($id);
     $response = ['type' => 'success', 'code' => ['updated', ['name' => 'Transactions']]];
     return redirect()->to(sprintf('/activity/%s/transaction', $id))->withResponse($response);
 }
 /**
  * Remove result from storage.
  * @param  int $id
  * @param      $resultId
  * @return \Illuminate\Http\Response
  */
 public function destroy($id, $resultId)
 {
     $activityData = $this->activityManager->getActivityData($id);
     if (Gate::denies('ownership', $activityData)) {
         return redirect()->back()->withResponse($this->getNoPrivilegesMessage());
     }
     $this->authorize('delete_activity', $activityData);
     $activityResult = $this->resultManager->getResult($resultId, $id);
     if ($this->resultManager->deleteResult($activityResult)) {
         $this->activityManager->resetActivityWorkflow($id);
         $response = ['type' => 'success', 'code' => ['deleted', ['name' => 'Result']]];
     } else {
         $response = ['type' => 'danger', 'code' => ['delete_failed', ['name' => 'result']]];
     }
     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;
         });
     }
 }
 /** Returns all the activities of the organization
  * @param $orgId
  * @return \App\Models\Activity\Activity
  */
 public function getActivitiesOfOrganization($orgId)
 {
     $activities = $this->activityManager->getActivities($orgId);
     return $activities;
 }