protected function update(Import\ImportStream $stream, Import\ImportContext $context) { $this->datasourceName = $context->get('datasourceName'); $reports = $stream->get('reports'); if (empty($reports)) { return; } $metamodel = data_controller_get_metamodel(); $this->datasets = $metamodel->datasets; foreach ( $reports as $reportKey => $report ) { $report = (object) $report; $existingReport = gd_report_get_by_uuid($report->uuid,$this->datasourceName); if ( !$existingReport ) { // create $node = $this->createReport($report); if ( !empty($node->nid ) ) { $reports[$reportKey] = $node; } else { throw new Exception('Report node creation failed'); } } else { $existingReport->title = $report->title; $existingReport->field_report_desc[$existingReport->language][0]['value'] = $report->description; $existingReport->field_report_datasource[$existingReport->language][0]['value'] = $this->datasourceName; $existingReport->field_report_custom_view[$existingReport->language][0]['value'] = $report->custom_view; $existingReport->field_report_tags[$existingReport->language] = array(); if (!empty($report->tags)) { foreach ($report->tags as $tid) { $existingReport->field_report_tags[$existingReport->language][] = array('tid' => $tid); } } // update dataset references $existingReport->field_report_dataset_sysnames[$existingReport->language] = array(); foreach ( $report->datasets as $datasetIdentifier ) { $dataset = GD_DatasetMetaModelLoaderHelper::findDatasetByUUID($this->datasets,$datasetIdentifier); if (!isset($dataset)) { $datasetName = NameSpaceHelper::addNameSpace(gd_datasource_get_active(), $datasetIdentifier); $dataset = $metamodel->getDataset($datasetName); } $existingReport->field_report_dataset_sysnames[$existingReport->language][] = array('value'=>$dataset->name); } $this->processConfig($report->config); $existingReport->field_report_conf[$existingReport->language][0]['value'] = json_encode($report->config); gd_report_save($existingReport); $event = new DefaultEvent(); $event->type = 101; // see gd_health_monitoring_database_install() for more details $event->owner = $existingReport->nid; EventRecorderFactory::getInstance()->record($event); $reports[$reportKey] = $existingReport; } } $stream->set('reports',$reports); }
protected function processConfigReports (&$config) { // TODO Services casts everything to array not objects $config = (object) $config; // dashboard reports foreach ( $config->items as $key => $item ) { // TODO Services casts everything to array not objects $item = (object) $item; if ( $item->type == 'report' ) { $reportNode = gd_report_get_by_uuid($item->content,$this->datasourceName); // TODO Services casts everything to array not objects $config->items[$key] = (object) $config->items[$key]; $config->items[$key]->content = $reportNode->nid; } } // drill down reports foreach ( $config->drilldowns as $key => $drilldown ) { // TODO Services casts everything to array not objects $config->drilldowns[$key] = (object) $config->drilldowns[$key]; // report nid update $reportNode = gd_report_get_by_uuid($drilldown->report,$this->datasourceName); $config->drilldowns[$key]->report = (int) $reportNode->nid; // column name update $config->drilldowns[$key]->column = DatasetImportHelper::getNewColumnName($drilldown->column,$this->datasets); } }