diff --git a/src/Controller/UwDownloadCsvController.php b/src/Controller/UwDownloadCsvController.php new file mode 100644 index 0000000000000000000000000000000000000000..8cb5a23e008a0348e19b52036b33c23b8bae2294 --- /dev/null +++ b/src/Controller/UwDownloadCsvController.php @@ -0,0 +1,121 @@ +<?php + +namespace Drupal\uw_cfg_common\Controller; + +use Drupal\Core\Controller\ControllerBase; +use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\path_alias\AliasManager; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\HttpFoundation\Response; + +/** + * Provides CSV files for specific UW sites. + */ +class UwDownloadCsvController extends ControllerBase{ + + /** + * Entity type manager from the core. + * + * @var Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected $entityTypeManager; + + /** + * @var \Drupal\path_alias\AliasManager + * The path alias. + */ + protected $pathAlias; + + /** + * CSV Report constructor. + * + * @param Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager + * The entity type manager. + * @param Drupal\path_alias\AliasManager $pathAlias + * The path alias. + */ + public function __construct( + EntityTypeManagerInterface $entityTypeManager, + AliasManager $pathAlias + ) { + $this->entityTypeManager = $entityTypeManager; + $this->pathAlias = $pathAlias; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('entity_type.manager'), + $container->get('path_alias.manager') + ); + } + + /** + * Provides a CSV file for content on a site. + * + * @return Response + * The page response. + * + * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException + * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException + */ + public function uwContentReport() { + + // Get all the nodes. + $nodes = $this->entityTypeManager->getStorage('node')->loadMultiple(); + + // Just in case there are no nodes, there should always + // be a home page though, this is just to ensure no errors. + $response = NULL; + + if ($nodes) { + + // The header of the CSV. + $data = [ + $this->t('Node ID'), + $this->t('Title'), + $this->t('Content type'), + $this->t('Path'), + $this->t('Published'), + $this->t('Created'), + $this->t('Last updated'), + ]; + + // Put header for CSV into format to be used in CSV. + $rows[] = implode(',', $data); + + // Step through each of the nodes and get the info. + foreach ($nodes as $node) { + + // Pull out the info about the node. + $data = [ + 'nid' => $node->id(), + 'title' => '"' . $node->getTitle() . '"', + 'type' => $node->type->entity->label(), + 'path' => $this->pathAlias->getAliasByPath('/node/' . $node->id()), + 'published' => $node->status->value, + 'created' => date('Y-d-m G:i', $node->getCreatedTime()), + 'updated' => date('Y-d-m G:i', $node->getChangedTime()), + ]; + + // Store the node info for use later in the CSV. + $rows[] = implode(',', $data); + } + + // Put the info into a large CSV format. + $content = implode("\n", $rows); + + // Create the response for the CSV page. + $response = new Response($content); + + // Set the headers for the CSV. + $response->headers->set('Content-Type', 'text/csv'); + $response->headers->set('Content-Disposition', 'attachment; filename="content_report.csv"'); + } + + return $response; + } + +} diff --git a/uw_cfg_common.routing.yml b/uw_cfg_common.routing.yml index 28c3b4ca13ae22f53f9bcd0a1a28276cfc422290..ebab60655947fc3177c6738f777bc8b1086e3238 100644 --- a/uw_cfg_common.routing.yml +++ b/uw_cfg_common.routing.yml @@ -34,3 +34,11 @@ uw_cfg_common.content_type_usage_page: _title: 'Content type Use' requirements: _permission: 'access content' +uw_cfg_common.uw_content_report_csv: + path: '/admin/reports/uw_content_report_csv' + defaults: + _title: 'Download Customers' + _controller: \Drupal\uw_cfg_common\Controller\UwDownloadCsvController::uwContentReport + requirements: + _permission: 'access content' +