This repository has been archived by the owner on Mar 23, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathciviexportexcel.php
184 lines (149 loc) · 5.28 KB
/
civiexportexcel.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
<?php
require_once 'civiexportexcel.civix.php';
use CRM_Civiexportexcel_ExtensionUtil as E;
/**
* Implementation of hook_civicrm_config
*/
function civiexportexcel_civicrm_config(&$config) {
_civiexportexcel_civix_civicrm_config($config);
}
/**
* Implementation of hook_civicrm_xmlMenu
*
* @param $files array(string)
*/
function civiexportexcel_civicrm_xmlMenu(&$files) {
_civiexportexcel_civix_civicrm_xmlMenu($files);
}
/**
* Implementation of hook_civicrm_install
*/
function civiexportexcel_civicrm_install() {
return _civiexportexcel_civix_civicrm_install();
}
/**
* Implementation of hook_civicrm_uninstall
*/
function civiexportexcel_civicrm_uninstall() {
return _civiexportexcel_civix_civicrm_uninstall();
}
/**
* Implementation of hook_civicrm_enable
*/
function civiexportexcel_civicrm_enable() {
return _civiexportexcel_civix_civicrm_enable();
}
/**
* Implementation of hook_civicrm_disable
*/
function civiexportexcel_civicrm_disable() {
return _civiexportexcel_civix_civicrm_disable();
}
/**
* Implementation of hook_civicrm_upgrade
*
* @param $op string, the type of operation being performed; 'check' or 'enqueue'
* @param $queue CRM_Queue_Queue, (for 'enqueue') the modifiable list of pending up upgrade tasks
*
* @return mixed based on op. for 'check', returns array(boolean) (TRUE if upgrades are pending)
* for 'enqueue', returns void
*/
function civiexportexcel_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) {
return _civiexportexcel_civix_civicrm_upgrade($op, $queue);
}
/**
* Implementation of hook_civicrm_managed
*
* Generate a list of entities to create/deactivate/delete when this module
* is installed, disabled, uninstalled.
*/
function civiexportexcel_civicrm_managed(&$entities) {
return _civiexportexcel_civix_civicrm_managed($entities);
}
/**
* Implementation of hook_civicrm_buildForm().
*
* Used to add a 'Export to Excel' button in the Report forms.
*/
function civiexportexcel_civicrm_buildForm($formName, &$form) {
// Reports extend the CRM_Report_Form class.
// We use that to check whether we should inject the Excel export buttons.
if (is_subclass_of($form, 'CRM_Report_Form')) {
$smarty = CRM_Core_Smarty::singleton();
$vars = $smarty->get_template_vars();
$form->_excelButtonName = $form->getButtonName('submit', 'excel');
$label = (! empty($vars['instanceId']) ? E::ts('Export to Excel') : E::ts('Preview Excel'));
$form->addElement('submit', $form->_excelButtonName, $label);
CRM_Core_Region::instance('page-body')->add(array(
'template' => 'CRM/Report/Form/Actions-civiexportexcel.tpl',
));
// This hook also gets called when we click on a submit button,
// so we can handle that part here too.
$buttonName = $form->controller->getButtonName();
$output = CRM_Utils_Request::retrieve('output', 'String', CRM_Core_DAO::$_nullObject);
if ($form->_excelButtonName == $buttonName || $output == 'excel2007') {
$form->assign('printOnly', TRUE);
$printOnly = TRUE;
$form->assign('outputMode', 'excel2007');
// FIXME: this duplicates part of CRM_Report_Form::postProcess()
// since we do not have a place to hook into, we hi-jack the form process
// before it gets into postProcess.
// get ready with post process params
$form->beginPostProcess();
// build query
$sql = $form->buildQuery(FALSE);
// build array of result based on column headers. This method also allows
// modifying column headers before using it to build result set i.e $rows.
$rows = array();
$form->buildRows($sql, $rows);
// format result set.
// This seems to cause more problems than it fixes.
// $form->formatDisplay($rows);
// Show stats on a second Excel page.
$stats = $form->statistics($rows);
// assign variables to templates
$form->doTemplateAssignment($rows);
// FIXME: END.
CRM_CiviExportExcel_Utils_Report::export2excel2007($form, $rows, $stats);
}
}
}
/**
* Implements hook_civicrm_export().
*
* Called mostly to export search results.
*/
function civiexportexcel_civicrm_export($exportTempTable, $headerRows, $sqlColumns, $exportMode) {
$writeHeader = true;
$rows = array();
$query = "SELECT * FROM $exportTempTable";
$dao = CRM_Core_DAO::executeQuery($query);
while ($dao->fetch()) {
$row = array();
foreach ($sqlColumns as $column => $dontCare) {
$row[$column] = $dao->$column;
}
$rows[] = $row;
}
$dao->free();
CRM_CiviExportExcel_Utils_SearchExport::export2excel2007($headerRows, $sqlColumns, $rows);
}
/**
* Implements hook_civicrm_alterMailParams().
*
* Intercepts outgoing report emails, in order to attach the
* excel2007 version of the report.
*
* TODO: we should really propose a patch to CRM_Report_Form::endPostProcess().
*/
function civiexportexcel_attach_to_email(&$form, &$rows, &$attachments) {
$config = CRM_Core_Config::singleton();
$filename = 'CiviReport.xlsx';
$fullname = $config->templateCompileDir . CRM_Utils_File::makeFileName($filename);
CRM_CiviExportExcel_Utils_Report::generateFile($form, $rows, $fullname);
$attachments[] = array(
'fullPath' => $fullname,
'mime_type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'cleanName' => $filename,
);
}