/** * Update settings * * @param int $id * @param SettingsRequestManager $settingRequest * @return * @internal param TempRequest|SettingsRequestManager $request */ public function update($id, SettingsRequestManager $settingRequest) { $currentUser = auth()->user(); if ($currentUser->isNotAdmin()) { return redirect()->back()->withResponse(['type' => 'warning', 'code' => ['message', ['message' => 'You do not have the correct privileges to view this page.']]]); } $input = $settingRequest->requestHandler->all(); $newPublishingType = $input['publishing_type'][0]['publishing']; $oldIdentifier = $this->organization->reporting_org[0]['reporting_organization_identifier']; $settings = $this->settingsManager->getSettings($this->organization->id); $publishingType = $settings->publishing_type; $activities = $this->activityManager->getActivities($this->organization->id); if ($publishingType != $newPublishingType) { $publishedFiles = $this->activityManager->getActivityPublishedFiles(Session::get('org_id')); if (count($publishedFiles)) { $this->generateNewFiles($newPublishingType, $activities); } } $reportingOrgIdentifier = $input['reporting_organization_info'][0]['reporting_organization_identifier']; foreach ($activities as $activity) { $status = $activity['published_to_registry']; $otherIdentifier = (array) $activity->other_identifier; if ($status == 1 && !in_array(["reference" => $oldIdentifier, "type" => "B1", 'owner_org' => []], $otherIdentifier) && $oldIdentifier !== $reportingOrgIdentifier) { $otherIdentifier[] = ['reference' => $oldIdentifier, 'type' => 'B1', 'owner_org' => []]; $this->otherIdentifierManager->update(['other_identifier' => $otherIdentifier], $activity); } } $result = $this->settingsManager->updateSettings($input, $this->organization, $this->settings); if (!$result) { $response = ['type' => 'danger', 'code' => ['update_failed', ['name' => 'Settings']]]; return redirect()->back()->withResponse($response); } $response = ['type' => 'success', 'code' => ['updated', ['name' => 'Settings']]]; return redirect()->to(config('app.admin_dashboard'))->withResponse($response); }
/** * Download of activity xml files * @param $activityId * @return \Illuminate\Http\Response */ public function downloadActivityXml($activityId) { $activityData = $this->activityManager->getActivityData($activityId); $activityElement = $this->activityManager->getActivityElement(); $xmlService = $activityElement->getActivityXmlService(); $xml = $xmlService->generateTemporaryActivityXml($this->activityManager->getActivityData($activityId), $this->activityManager->getTransactionData($activityId), $this->activityManager->getResultData($activityId), $this->settingsManager->getSettings($activityData['organization_id']), $activityElement, $this->organizationManager->getOrganizationElement(), $this->organizationManager->getOrganization($activityData->organization_id)); return response()->make($xml, 200, ['Content-type' => 'text/xml', 'Content-Disposition' => sprintf('attachment; filename=activityXmlFile.xml')]); }
/** * Stores the activity by uploading csv * @param Request $request * @param UploadActivityRequest $uploadActivityRequest * @param CsvImportValidator $csvImportValidator * @param IatiIdentifierRepository $iatiIdentifierRepository * @return $this */ public function store(Request $request, UploadActivityRequest $uploadActivityRequest, CsvImportValidator $csvImportValidator, IatiIdentifierRepository $iatiIdentifierRepository) { $organization = $this->organizationManager->getOrganization($this->organizationId); $this->authorize('add_activity', $organization); $settings = $this->settingsManager->getSettings($this->organizationId); $defaultFieldValues = $settings->default_field_values; $defaultFieldGroups = $settings->default_field_groups; if (!isset($organization->reporting_org[0])) { $response = ['type' => 'warning', 'code' => ['settings', ['name' => 'activity']]]; return redirect('/settings')->withResponse($response); } $identifiers = []; $activityIdentifiers = $iatiIdentifierRepository->getIdentifiersForOrganization(); foreach ($activityIdentifiers as $identifier) { $identifiers[] = $identifier->identifier['activity_identifier']; } $file = $request->file('activity'); $uploadedActivityArray = $this->uploadActivityManager->getVersion()->getExcel()->load($file)->toArray(); $geopolitical = $defaultFieldGroups[0]['Geopolitical Information']; foreach ($uploadedActivityArray as $activity) { $recipientRegionExist = array_key_exists('recipient_region', $geopolitical); if (!$recipientRegionExist && !is_null($activity['recipient_region'])) { return redirect()->back()->withResponse(['type' => 'danger', 'code' => ['recipient_region_unselected_in_settings', ['name' => 'Activity']]]); } } if ($this->uploadActivityManager->isEmptyCsv($file)) { return redirect()->back()->withResponse(['type' => 'danger', 'code' => ['empty_template', ['name' => 'Activity']]]); } $validator = $csvImportValidator->validator->isValidActivityCsv($file, $identifiers); if (!$validator) { $response = ['type' => 'danger', 'code' => ['csv_template_error', ['name' => '']]]; return redirect()->back()->withResponse($response); } elseif ($validator->fails()) { $failedRows = $validator->failures(); $uploadedActivities = $this->uploadActivityManager->getVersion()->getExcel()->load($file)->toArray(); $validActivities = array_keys(array_diff_key($uploadedActivities, $failedRows)); $validActivityIndices = []; foreach ($validActivities as $validActivity) { $validActivityIndices[] = $validActivity + 1; } $filename = 'temporary-' . $this->organizationId . 'activity'; $this->temporarilyStoreCsvFor($validActivities, $filename); $validCsvFilePath = storage_path() . '/exports/' . $filename . '.csv'; if (!$this->saveValidatedActivities($validCsvFilePath, $defaultFieldValues)) { return redirect()->back()->withResponse(['type' => 'warning', 'code' => ['save_failed', ['name' => 'Activity']]]); } return $this->invalidActivities($validator, $validActivityIndices, $failedRows); } $check = $this->uploadActivityManager->save($file, $organization, $defaultFieldValues); if (is_a($check, 'Illuminate\\View\\View')) { return $check; } $response = $check ? ['type' => 'success', 'code' => ['updated', ['name' => 'Activities']]] : ['type' => 'danger', 'code' => ['update_failed', ['name' => 'Activities']]]; return redirect()->to(sprintf('/activity'))->withResponse($response); }
/** * it validates organization schema according to version standard * @param $id * @param null $version * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function validateOrganization($id, $version = null) { $organization = $this->organizationManager->getOrganization($id); $settings = $this->settingsManager->getSettings($id); $organizationData = $this->organizationManager->getOrganizationData($id); $orgElem = $this->organizationManager->getOrganizationElement(); if ($version == null) { $version = config('app.default_version_name'); } return $this->validateCompletedOrganization($organization, $settings, $organizationData, $orgElem, $version); }
/** Returns status of the published data of organization. * @param $organization_id * @return string */ public function getPublishedOrganizationStatus($organization_id) { $organization_data = $this->organizationManager->getPublishedOrganizationData($organization_id); $settings = $this->settingsManager->getSettings($organization_id); $autoPublishing = getVal($settings->toArray(), ['registry_info', 0, 'publish_files'], 'no'); $status = 'unlinked'; if ($organization_data) { if ($autoPublishing == "no") { $status = $organization_data->published_to_register == 1 ? "Linked" : "Unlinked"; } else { $status = $organization_data->published_to_register == 1 ? "Linked" : "unlinked"; } } return $status; }
/** * @param DatabaseManager $databaseManager * @param SettingsManager $settingsManager * @param UpgradeManager $upgradeManager */ function __construct(DatabaseManager $databaseManager, SettingsManager $settingsManager, UpgradeManager $upgradeManager) { $this->middleware('auth'); $this->orgId = session('org_id'); $db_organization = $databaseManager->table('organizations')->select('name')->where('id', '=', $this->orgId)->first(); $this->orgName = $db_organization->name; $settings = $settingsManager->getSettings($this->orgId); $this->currentVersion = $settings ? $settings->version : null; $db_versions = $databaseManager->table('versions')->get(); $versions = []; foreach ($db_versions as $ver) { $versions[] = $ver->version; } $this->versions = $versions; $versionKey = array_search($this->currentVersion, $versions); $this->version = end($versions) === $this->currentVersion ? null : $versions[$versionKey + 1]; $this->upgradeManager = $upgradeManager; }
/** * masquerade as an specific organization by superadmin * @param $orgId * @param $userId * @return \Illuminate\Http\RedirectResponse */ public function masqueradeOrganization($orgId, $userId) { $database = app(DatabaseManager::class); $settings = $this->settingsManager->getSettings($orgId); Session::put('org_id', $orgId); $current_version = isset($settings) ? $settings->version : config('app.default_version'); Session::put('current_version', $current_version); $versions_db = $database->table('versions')->get(); $versions = []; foreach ($versions_db as $ver) { $versions[] = $ver->version; } $versionKey = array_search($current_version, $versions); $next_version = end($versions) == $current_version ? null : $versions[$versionKey + 1]; Session::put('next_version', $next_version); Session::put('version', 'V' . str_replace('.', '', $current_version)); Auth::loginUsingId($userId); return redirect()->to(config('app.admin_dashboard')); }