Skip to content

Commit

Permalink
Merge pull request #8286 from mtshaw3/replace-phpexcel
Browse files Browse the repository at this point in the history
Refactored out PHPExcel library to use PHPSpreadsheet instead
  • Loading branch information
escopecz committed Jan 8, 2020
2 parents 8157f98 + 83669df commit f67cb09
Show file tree
Hide file tree
Showing 9 changed files with 275 additions and 59 deletions.
2 changes: 1 addition & 1 deletion LICENSE.txt
Expand Up @@ -85,7 +85,7 @@ PHP

Password-compat - MIT - Copyright (c) 2012 Anthony Ferrara

PHPExcel - LGPL - Copyright (c) 2006 - 2014 PHPExcel
PhpSpreadsheet - MIT - Copyright (c) 2019 PhpSpreadsheet Authors

Symfony - MIT - Copyright (c) 2004-2013 Fabien Potencier

Expand Down
10 changes: 6 additions & 4 deletions app/bundles/FormBundle/Model/SubmissionModel.php
Expand Up @@ -48,6 +48,8 @@
use Mautic\LeadBundle\Model\LeadModel;
use Mautic\LeadBundle\Tracker\Service\DeviceTrackingService\DeviceTrackingServiceInterface;
use Mautic\PageBundle\Model\PageModel;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\StreamedResponse;
Expand Down Expand Up @@ -557,10 +559,10 @@ function () use ($results, $form, $translator, $viewOnlyFields) {

return new Response($content);
case 'xlsx':
if (class_exists('PHPExcel')) {
if (class_exists(Spreadsheet::class)) {
$response = new StreamedResponse(
function () use ($results, $form, $translator, $name, $viewOnlyFields) {
$objPHPExcel = new \PHPExcel();
$objPHPExcel = new Spreadsheet();
$objPHPExcel->getProperties()->setTitle($name);

$objPHPExcel->createSheet();
Expand Down Expand Up @@ -612,7 +614,7 @@ function () use ($results, $form, $translator, $name, $viewOnlyFields) {
++$count;
}

$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter = IOFactory::createWriter($objPHPExcel, 'Xlsx');
$objWriter->setPreCalculateFormulas(false);

$objWriter->save('php://output');
Expand All @@ -627,7 +629,7 @@ function () use ($results, $form, $translator, $name, $viewOnlyFields) {

return $response;
}
throw new \Exception('PHPExcel is required to export to Excel spreadsheets');
throw new \Exception('PHPSpreadsheet is required to export to Excel spreadsheets');
default:
return new Response();
}
Expand Down
5 changes: 4 additions & 1 deletion app/bundles/FormBundle/Views/Result/index.html.php
Expand Up @@ -8,6 +8,9 @@
*
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/

use PhpOffice\PhpSpreadsheet\Spreadsheet;

$view->extend('MauticCoreBundle:Default:content.html.php');
$view['slots']->set('mauticContent', 'formresult');
$view['slots']->set('headerTitle', $view['translator']->trans('mautic.form.result.header.index', [
Expand Down Expand Up @@ -39,7 +42,7 @@
'primary' => true,
];

if (class_exists('PHPExcel')) {
if (class_exists(Spreadsheet::class)) {
$buttons[] = [
'attr' => [
'data-toggle' => '',
Expand Down
18 changes: 9 additions & 9 deletions app/bundles/ReportBundle/Form/Type/ReportType.php
Expand Up @@ -216,9 +216,9 @@ public function buildForm(FormBuilderInterface $builder, array $options)
'filters',
ReportFiltersType::class,
[
'type' => FilterSelectorType::class,
'label' => false,
'options' => [
'entry_type' => FilterSelectorType::class,
'label' => false,
'entry_options' => [
'filterList' => $filters->choices,
'operatorList' => $filters->operatorChoices,
'required' => false,
Expand All @@ -241,9 +241,9 @@ public function buildForm(FormBuilderInterface $builder, array $options)
'aggregators',
CollectionType::class,
[
'type' => AggregatorType::class,
'label' => false,
'options' => [
'entry_type' => AggregatorType::class,
'label' => false,
'entry_options' => [
'columnList' => $groupByColumns->choices,
'required' => false,
],
Expand All @@ -258,9 +258,9 @@ public function buildForm(FormBuilderInterface $builder, array $options)
'tableOrder',
CollectionType::class,
[
'type' => TableOrderType::class,
'label' => false,
'options' => [
'entry_type' => TableOrderType::class,
'label' => false,
'entry_options' => [
'columnList' => $columns->choices,
'required' => false,
],
Expand Down
22 changes: 15 additions & 7 deletions app/bundles/ReportBundle/Model/ExcelExporter.php
Expand Up @@ -12,6 +12,9 @@
namespace Mautic\ReportBundle\Model;

use Mautic\CoreBundle\Templating\Helper\FormatterHelper;
use PhpOffice\PhpSpreadsheet\Exception;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;

/**
* Class CsvExporter.
Expand All @@ -35,16 +38,16 @@ public function __construct(FormatterHelper $formatterHelper)
*/
public function export(array $reportData, $name)
{
if (!class_exists('PHPExcel')) {
throw new \Exception('PHPExcel is required to export to Excel spreadsheets');
if (!class_exists(Spreadsheet::class)) {
throw new \Exception('PHPSpreadsheet is required to export to Excel spreadsheets');
}

if (!array_key_exists('data', $reportData) || !array_key_exists('columns', $reportData)) {
throw new \InvalidArgumentException("Keys 'data' and 'columns' have to be provided");
}

try {
$objPHPExcel = new \PHPExcel();
$objPHPExcel = new Spreadsheet();
$objPHPExcel->getProperties()->setTitle($name);

$objPHPExcel->createSheet();
Expand All @@ -57,7 +60,12 @@ public function export(array $reportData, $name)
foreach ($data as $k => $v) {
if (0 === $count) {
//set the header
$header[] = $k;
foreach ($reportData['columns'] as $c) {
if ($c['alias'] == $k) {
$header[] = $c['label'];
break;
}
}
}
$row[] = htmlspecialchars_decode($this->formatterHelper->_($v, $reportData['columns'][$reportData['dataColumns'][$k]]['type'], true), ENT_QUOTES);
}
Expand All @@ -73,12 +81,12 @@ public function export(array $reportData, $name)
unset($row, $reportData['data'][$count]);
}

$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter = IOFactory::createWriter($objPHPExcel, 'Xlsx');
$objWriter->setPreCalculateFormulas(false);

$objWriter->save('php://output');
} catch (\PHPExcel_Exception $e) {
throw new \Exception('PHPExcel Error', 0, $e);
} catch (Exception $e) {
throw new \Exception('PHPSpreadsheet Error', 0, $e);
}
}
}
5 changes: 3 additions & 2 deletions app/bundles/ReportBundle/Model/ReportModel.php
Expand Up @@ -32,6 +32,7 @@
use Mautic\ReportBundle\Generator\ReportGenerator;
use Mautic\ReportBundle\Helper\ReportHelper;
use Mautic\ReportBundle\ReportEvents;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\HttpFoundation\Response;
Expand Down Expand Up @@ -470,8 +471,8 @@ function () use ($reportDataResult) {
return new Response($content);

case 'xlsx':
if (!class_exists('PHPExcel')) {
throw new \Exception('PHPExcel is required to export to Excel spreadsheets');
if (!class_exists(Spreadsheet::class)) {
throw new \Exception('PHPSpreadsheet is required to export to Excel spreadsheets');
}

$response = new StreamedResponse(
Expand Down
7 changes: 5 additions & 2 deletions app/bundles/ReportBundle/Views/Report/details.html.php
Expand Up @@ -8,6 +8,9 @@
*
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/

use PhpOffice\PhpSpreadsheet\Spreadsheet;

$header = $view['translator']->trans(
'mautic.report.report.header.view',
['%name%' => $view->escape($view['translator']->trans($report->getName()))]
Expand Down Expand Up @@ -52,7 +55,7 @@
'iconClass' => 'fa fa-file-text-o',
];

if (class_exists('PHPExcel')) {
if (class_exists(Spreadsheet::class)) {
$buttons[] = [
'attr' => [
'data-toggle' => 'download',
Expand Down Expand Up @@ -94,7 +97,7 @@
],
'routeBase' => 'report',
'langVar' => 'report.report',
'postCustomButtons' => $buttons,
'customButtons' => $buttons,
]
)
);
Expand Down
4 changes: 2 additions & 2 deletions composer.json
Expand Up @@ -76,11 +76,11 @@
"friendsofsymfony/rest-bundle": "~2.6.0",
"friendsofsymfony/oauth-server-bundle": "~1.6.0",
"willdurand/oauth-server-bundle": "dev-release-0.0.3",
"oneup/uploader-bundle": "~2.0",
"jms/serializer-bundle": "~3.5.0",
"phpoffice/phpexcel": "1.8.1",
"joomla/http": "~1.3.3",
"joomla/filter": "~1.3.5",
"oneup/uploader-bundle": "~2.0",
"phpoffice/phpspreadsheet": "^1.10",
"mrclay/minify": "2.2.0",
"jbroadway/urlify": "^1.0",
"geoip2/geoip2": "~2.0",
Expand Down

0 comments on commit f67cb09

Please sign in to comment.