Skip to content
Snippets Groups Projects
Commit ee1ab42e authored by Kevin Paxman's avatar Kevin Paxman
Browse files

Merge branch 'feature/ISTWCMS-5753-ebremner-csv-content-report' into '1.0.x'

Feature/istwcms 5753 ebremner csv content report

See merge request !269
parents d218ced8 eb04866b
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\Config\ConfigFactory;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\path_alias\AliasManager;
use Drupal\transliterate_filenames\SanitizeName;
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;
/**
* The path alias.
*
* @var \Drupal\path_alias\AliasManager
*/
protected $pathAlias;
/**
* Sanitize name.
*
* @var Drupal\transliterate_filenames\SanitizeName
*/
protected $sanitizeName;
/**
* The config factory.
*
* @var \Drupal\Core\Config\ConfigFactory
*/
protected $configFactory;
/**
* CSV Report constructor.
*
* @param Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager
* The entity type manager.
* @param Drupal\path_alias\AliasManager $pathAlias
* The path alias.
* @param Drupal\transliterate_filenames\SanitizeName $sanitizeName
* The sanitize name.
* @param Drupal\Core\Config\ConfigFactory $configFactory
* The config factory.
*/
public function __construct(
EntityTypeManagerInterface $entityTypeManager,
AliasManager $pathAlias,
SanitizeName $sanitizeName,
ConfigFactory $configFactory
) {
$this->entityTypeManager = $entityTypeManager;
$this->pathAlias = $pathAlias;
$this->sanitizeName = $sanitizeName;
$this->configFactory = $configFactory;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('entity_type.manager'),
$container->get('path_alias.manager'),
$container->get('transliterate_filenames.sanitize_name'),
$container->get('config.factory')
);
}
/**
* Provides a CSV file for content on a site.
*
* @return Symfony\Component\HttpFoundation\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, making sure the title is CSV-safe.
$data = [
'nid' => $node->id(),
'title' => '"' . str_replace('"', '""', $node->getTitle()) . '"',
'type' => $node->type->entity->label(),
'path' => $this->pathAlias->getAliasByPath('/node/' . $node->id()),
'published' => $node->status->value == 1 ? 'yes' : 'no',
'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);
// Determine the filename for the CSV.
$sitename = $this->configFactory->get('system.site')->get('name');
$filename = $sitename . '_content_report.csv';
// Make sure we are using a safe filename.
$filename = $this->sanitizeName->sanitizeFilename($filename);
// Set the headers for the CSV.
$response->headers->set('Content-Type', 'text/csv');
$response->headers->set('Content-Disposition', 'attachment; filename="' . $filename . '"');
}
return $response;
}
}
......@@ -49,3 +49,4 @@ permissions:
- 'customize shortcut links'
- 'edit users role expire'
- 'enable disable ofis profiles'
- 'view UW CSV reports'
......@@ -55,4 +55,5 @@ dependencies:
- 'scheduler:scheduler'
- 'simple_sitemap:simple_sitemap'
- 'subpathauto:subpathauto'
- 'transliterate_filenames:transliterate_filenames'
- 'uw_media:uw_media'
......@@ -389,3 +389,8 @@ uw_site_management.wcms_how_to_documents:
menu_name: uw-menu-site-management
url: https://uwaterloo.ca/web-resources/wcms-users/training-and-support/wcms-how-documents
weight: 0
uw_site_management.uw_content_report_csv:
title: 'Content report (CSV)'
menu_name: uw-menu-site-management
route_name: uw_cfg_common.uw_content_report_csv
weight: 0
......@@ -21,3 +21,6 @@
'rearrange profiles':
title: 'Rearrange profiles'
description: 'Allows access to the rearrange profiles page.'
'view UW CSV reports':
title: 'View UW CSV reports'
description: 'Allows access to UW CSV reports.'
......@@ -34,3 +34,10 @@ 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 UW content report (CSV)'
_controller: \Drupal\uw_cfg_common\Controller\UwDownloadCsvController::uwContentReport
requirements:
_permission: 'view UW CSV reports'
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