/** * Saves/modifies/deletes reports * * @param array $settings Array of reports to create/modify * @param string $projectId optional Projects id. * @throws Scalr_UI_Exception_NotFound * @throws \Scalr\Exception\AnalyticsException * @throws \Scalr\Exception\ModelException */ protected function saveReports($settings, $projectId = null) { $uuids = []; foreach ($settings['items'] as $item) { $report = new ReportEntity(); if ($item['uuid']) { $report->findPk($item['uuid']); if (!$report->hasAccessPermissions($this->getUser())) { continue; } } $report->subjectType = $item['subjectType']; $subject = null; if ($report->subjectType == ReportEntity::SUBJECT_TYPE_CC && $item['subjectId']) { $subject = $this->getContainer()->analytics->ccs->get($item['subjectId']); } elseif ($report->subjectType == ReportEntity::SUBJECT_TYPE_PROJECT && $item['subjectId']) { $subject = $this->getContainer()->analytics->projects->get($item['subjectId']); } elseif ($item['subjectType'] == -1) { $report->subjectType = null; $report->subjectId = null; } if ($report->subjectType) { if ($item['subjectId'] && !$subject) { throw new Scalr_UI_Exception_NotFound(); } $report->subjectId = $item['subjectId'] ? $item['subjectId'] : null; } $report->period = $item['period']; $report->emails = $item['emails']; $report->status = $item['status']; $report->save(); $uuids[] = $report->uuid; } $criteria = [['accountId' => null]]; if ($projectId) { $criteria[] = ['subjectId' => $projectId]; } foreach (ReportEntity::find($criteria) as $report) { /* @var $report ReportEntity */ if (!in_array($report->uuid, $uuids) && $report->hasAccessPermissions($this->getUser())) { $report->delete(); } } }