config = $configFileReader->getDatabaseConfig(); $defaultOptions = [ 'body_format' => 'content_editor_html', 'calendar_bundle' => 'private_event', 'end_date_field_name' => 'end_date', 'start_date_field_name' => 'start_date' ]; $this->options = array_merge($defaultOptions, $options); } public function getEvents() { $events = []; $results = $this->executeQueryResult( 'SELECT n.nid, n.uuid, MAX(nr.vid) AS vid FROM `node` n INNER JOIN `node_revision` nr ON nr.nid = n.nid WHERE (n.`type` = ? OR n.`type` = ?) GROUP BY n.nid, n.uuid', ['s', 's'], ['private_event', 'public_event'] ); $startDateTableName = sprintf('node_revision__field_%s', $this->options['start_date_field_name']); $startDateFieldName = sprintf('field_%s_value', $this->options['start_date_field_name']); $endDateTableName = sprintf('node_revision__field_%s', $this->options['end_date_field_name']); $endDateFieldName = sprintf('field_%s_value', $this->options['end_date_field_name']); foreach ($results as $result) { $nodeResults = $this->executeQueryResult( sprintf( 'SELECT * ' . 'FROM `node_field_data` n ' . 'LEFT OUTER JOIN `%s` ns ON ns.`entity_id` = n.`nid` AND ns.`revision_id` = n.`vid` ' . 'LEFT OUTER JOIN `%s` ne ON ne.`entity_id` = n.`nid` AND ne.`revision_id` = n.`vid` ' . 'LEFT OUTER JOIN `node_revision__body` nb ON nb.`entity_id` = n.`nid` AND nb.`revision_id` = n.`vid` ' . 'WHERE n.`nid` = ? AND n.`vid` = ?', $startDateTableName, $endDateTableName ), ['i', 'i'], [$result['nid'], $result['vid']] ); $event = new Event(); $event->setTitle($nodeResults[0]['title']); $event->setDescription(trim($nodeResults[0]['body_value'])); if (!empty($nodeResults[0][$startDateFieldName])) { $event->setStartDate(new \DateTime($nodeResults[0][$startDateFieldName])); } if (!empty($nodeResults[0][$endDateFieldName])) { $event->setEndDate(new \DateTime($nodeResults[0][$endDateFieldName])); } $event->setUid($result['uuid']); $events[] = $event; } return $events; } }