/** * Test creating dates from timestamps, and manipulating timezones. * * @param int $input * Input argument for DateTimePlus::createFromTimestamp(). * @param array $initial * An array containing: * - 'timezone_initial' - Timezone argument for DateTimePlus. * - 'format_initial' - Format argument for DateTimePlus. * - 'expected_initial_date' - Expected output from DateTimePlus::format(). * - 'expected_initial_timezone' - Expected output from * DateTimePlus::getTimeZone()::getName(). * - 'expected_initial_offset' - Expected output from DateTimePlus::getOffset(). * @param array $transform * An array containing: * - 'timezone_transform' - Argument to transform date to another timezone via * DateTimePlus::setTimezone(). * - 'format_transform' - Format argument to use when transforming date to * another timezone. * - 'expected_transform_date' - Expected output from DateTimePlus::format(), * after timezone transform. * - 'expected_transform_timezone' - Expected output from * DateTimePlus::getTimeZone()::getName(), after timezone transform. * - 'expected_transform_offset' - Expected output from * DateTimePlus::getOffset(), after timezone transform. * * @dataProvider providerTestTimestamp */ public function testTimestamp($input, array $initial, array $transform) { // Initialize a new date object. $date = DateTimePlus::createFromTimestamp($input, $initial['timezone']); $this->assertDateTimestamp($date, $input, $initial, $transform); }
/** * {@inheritdoc} */ public function render() { if (empty($this->view->rowPlugin)) { debug('Drupal\\views\\Plugin\\views\\style\\VerticalTimeline: Missing row plugin'); return; } // If anything needs to be different in preview, do it here. if (!empty($this->view->live_preview)) { //return; } $rows = array(); $options = $this->options; $field = $options['date_field']; $prev_group = ''; foreach ($this->view->result as $row_index => $row) { $this->view->row_index = $row_index; $row = $this->view->rowPlugin->render($row); $date = ''; if (isset($this->view->field[$field])) { // Create the group header, when required, and insert it into the rows array. $node = $row['#row']->_entity; $raw = $node->get($options['date_field'])->value; // Massage the date into the format required by the header. switch ($options['group_heading']) { case 'century': $obj = is_numeric($raw) ? DateTimePlus::createFromTimestamp($raw) : new DateTimePlus($raw); $date = substr($obj->format('Y'), 0, 2) . '00'; break; case 'format': $obj = is_numeric($raw) ? DateTimePlus::createFromTimestamp($raw) : new DateTimePlus($raw); $date = $obj->format($options['group_heading_format']); break; case 'date': $date = $style->getField($id, $field); $date = strip_tags(htmlspecialchars_decode($date)); //$date = \Drupal::service('renderer')->render($date); break; default: $date = NULL; break; } // See if this is a new header, different than the previous one. $group = $date; if ($group != $prev_group) { $row['group'] = ['#type' => 'markup', '#markup' => $date]; } $prev_group = $group; } $rows[] = $row; } $build = array('#theme' => $this->themeFunctions(), '#view' => $this->view, '#options' => $this->options, '#rows' => $rows); unset($this->view->row_index); return $build; }