mirror of
https://github.com/YunoHost-Apps/limesurvey_ynh.git
synced 2024-09-03 19:36:32 +02:00
146 lines
5.1 KiB
PHP
146 lines
5.1 KiB
PHP
<?php
|
|
/*
|
|
* LimeSurvey
|
|
* Copyright (C) 2007-2011 The LimeSurvey Project Team / Carsten Schmitz
|
|
* All rights reserved.
|
|
* License: GNU/GPL License v2 or later, see LICENSE.php
|
|
* LimeSurvey is free software. This version may have been modified pursuant
|
|
* to the GNU General Public License, and as distributed it includes or
|
|
* is derivative of works licensed under the GNU General Public License or
|
|
* other free or open source software licenses.
|
|
* See COPYRIGHT.php for copyright notices and details.
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* A Survey object may be loaded from the database via the SurveyDao
|
|
* (which follows the Data Access Object pattern). Data access is broken
|
|
* into two separate functions: the first loads the survey structure from
|
|
* the database, and the second loads responses from the database. The
|
|
* data loading is structured in this way to provide for speedy access in
|
|
* the event that a survey's response table contains a large number of records.
|
|
* The responses can be loaded a user-defined number at a time for output
|
|
* without having to load the entire set of responses from the database.
|
|
*
|
|
* The Survey object contains methods to conveniently access data that it
|
|
* contains in an attempt to encapsulate some of the complexity of its internal
|
|
* format.
|
|
*
|
|
* Data formatting operations that may be specific to the data export routines
|
|
* are relegated to the Writer class hierarcy and work with the Survey object
|
|
* and FormattingOptions objects to provide proper style/content when exporting
|
|
* survey information.
|
|
*
|
|
* Some guess work has been done when deciding what might be specific to exports
|
|
* and what is not. In general, anything that requires altering of data fields
|
|
* (abbreviating, concatenating, etc...) has been moved into the writers and
|
|
* anything that is a direct access call with no formatting logic is a part of
|
|
* the Survey object.
|
|
*
|
|
* - elameno
|
|
*/
|
|
Yii::import('application.helpers.admin.export.*');
|
|
class ExportSurveyResultsService
|
|
{
|
|
/**
|
|
* Hold the available export types
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $_exports;
|
|
|
|
/**
|
|
* Root function for any export results action
|
|
*
|
|
* @param mixed $iSurveyId
|
|
* @param mixed $sLanguageCode
|
|
* @param csv|doc|pdf|xls $sExportPlugin Type of export
|
|
* @param FormattingOptions $oOptions
|
|
* @param string $sFilter
|
|
*/
|
|
function exportSurvey($iSurveyId, $sLanguageCode, $sExportPlugin, FormattingOptions $oOptions, $sFilter = '')
|
|
{
|
|
//Do some input validation.
|
|
if (empty($iSurveyId))
|
|
{
|
|
safeDie('A survey ID must be supplied.');
|
|
}
|
|
if (empty($sLanguageCode))
|
|
{
|
|
safeDie('A language code must be supplied.');
|
|
}
|
|
if (empty($oOptions))
|
|
{
|
|
safeDie('Formatting options must be supplied.');
|
|
}
|
|
if (empty($oOptions->selectedColumns))
|
|
{
|
|
safeDie('At least one column must be selected for export.');
|
|
}
|
|
//echo $oOptions->toString().PHP_EOL;
|
|
$writer = null;
|
|
|
|
$iSurveyId = sanitize_int($iSurveyId);
|
|
if ($oOptions->output=='display')
|
|
{
|
|
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
|
|
header("Pragma: public");
|
|
}
|
|
|
|
$exports = $this->getExports();
|
|
|
|
if (array_key_exists($sExportPlugin, $exports) && !empty($exports[$sExportPlugin])) {
|
|
// This must be a plugin, now use plugin to load the right class
|
|
$event = new PluginEvent('newExport');
|
|
$event->set('type', $sExportPlugin);
|
|
$oPluginManager = App()->getPluginManager();
|
|
$oPluginManager->dispatchEvent($event, $exports[$sExportPlugin]);
|
|
$writer = $event->get('writer');
|
|
}
|
|
|
|
if (!($writer instanceof IWriter)) {
|
|
throw new Exception(sprintf('Writer for %s should implement IWriter', $sExportPlugin));
|
|
}
|
|
|
|
$surveyDao = new SurveyDao();
|
|
$survey = $surveyDao->loadSurveyById($iSurveyId, $sLanguageCode);
|
|
$writer->init($survey, $sLanguageCode, $oOptions);
|
|
|
|
$surveyDao->loadSurveyResults($survey, $oOptions->responseMinRecord, $oOptions->responseMaxRecord, $sFilter, $oOptions->responseCompletionState);
|
|
|
|
$writer->write($survey, $sLanguageCode, $oOptions,true);
|
|
$result = $writer->close();
|
|
|
|
// Close resultset if needed
|
|
if ($survey->responses instanceof CDbDataReader) {
|
|
$survey->responses->close();
|
|
}
|
|
|
|
if ($oOptions->output=='file')
|
|
{
|
|
return $writer->filename;
|
|
} else {
|
|
return $result;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get an array of available export types
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getExports()
|
|
{
|
|
if (is_null($this->_exports)) {
|
|
$event = new PluginEvent('listExportPlugins');
|
|
$oPluginManager = App()->getPluginManager();
|
|
$oPluginManager->dispatchEvent($event);
|
|
|
|
$exports = $event->get('exportplugins', array());
|
|
|
|
$this->_exports = $exports;
|
|
}
|
|
|
|
return $this->_exports;
|
|
}
|
|
}
|