/** * 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')]); }
/** * @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; }
/** * 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); }
/** * Change the segmentation for an Organization. * @param Request $request * @return mixed */ public function changeSegmentation(Request $request) { $segmentationChange = $this->settingsService->changeSegmentation($request->all()); if (null === $segmentationChange || false === $segmentationChange) { $response = ['type' => 'warning', 'messages' => $this->getMessageFor($segmentationChange)]; return redirect()->to(config('app.admin_dashboard'))->withResponse($response); } if (!$this->settingsManager->updateSettings(json_decode($request->get('settings'), true), $this->organization, $this->settings)) { $response = ['type' => 'danger', 'messages' => ['Failed to update Settings']]; return redirect()->to(config('app.admin_dashboard'))->withResponse($response); } $response = ['type' => 'success', 'messages' => ['Settings updated successfully.']]; return redirect()->to(config('app.admin_dashboard'))->withResponse($response); }
/** 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; }
/** * 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')); }