Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactored out PHPExcel library to use PHPSpreadsheet instead #8286

Merged
merged 4 commits into from Jan 8, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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