Skip to content
Snippets Groups Projects
Commit 4cfd10fd authored by Eric Bremner's avatar Eric Bremner Committed by Kevin Paxman
Browse files

ISTWCMS-5753: adding CSV content report

parent d218ced8
No related branches found
No related tags found
1 merge request!269Feature/istwcms 5753 ebremner csv content report
<?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;
}
}
...@@ -34,3 +34,11 @@ uw_cfg_common.content_type_usage_page: ...@@ -34,3 +34,11 @@ uw_cfg_common.content_type_usage_page:
_title: 'Content type Use' _title: 'Content type Use'
requirements: requirements:
_permission: 'access content' _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'
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment