Merge pull request #5060 from eileenmcnaughton/api-comment-fixes
[civicrm-core.git] / CRM / Contribute / Import / Form / Preview.php
CommitLineData
6a488035
TO
1<?php
2/*
3 +--------------------------------------------------------------------+
39de6fd5 4 | CiviCRM version 4.6 |
6a488035 5 +--------------------------------------------------------------------+
06b69b18 6 | Copyright CiviCRM LLC (c) 2004-2014 |
6a488035
TO
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
9 | |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
13 | |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
18 | |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
d25dd0ee 26 */
6a488035
TO
27
28/**
29 *
30 * @package CRM
06b69b18 31 * @copyright CiviCRM LLC (c) 2004-2014
6a488035
TO
32 * $Id$
33 *
34 */
35
36/**
37 * This class previews the uploaded file and returns summary
38 * statistics
39 */
f532671f 40class CRM_Contribute_Import_Form_Preview extends CRM_Import_Form_Preview {
6a488035
TO
41
42 /**
100fef9d 43 * Set variables up before form is built
6a488035
TO
44 *
45 * @return void
6a488035
TO
46 */
47 public function preProcess() {
bf3adfdb 48 $skipColumnHeader = $this->controller->exportValue('DataSource', 'skipColumnHeader');
6a488035
TO
49
50 //get the data from the session
353ffa53
TO
51 $dataValues = $this->get('dataValues');
52 $mapper = $this->get('mapper');
53 $softCreditFields = $this->get('softCreditFields');
1221efe9 54 $mapperSoftCreditType = $this->get('mapperSoftCreditType');
353ffa53
TO
55 $invalidRowCount = $this->get('invalidRowCount');
56 $conflictRowCount = $this->get('conflictRowCount');
57 $mismatchCount = $this->get('unMatchCount');
6a488035
TO
58
59 //get the mapping name displayed if the mappingId is set
60 $mappingId = $this->get('loadMappingId');
61 if ($mappingId) {
62 $mapDAO = new CRM_Core_DAO_Mapping();
63 $mapDAO->id = $mappingId;
64 $mapDAO->find(TRUE);
65 $this->assign('loadedMapping', $mappingId);
66 $this->assign('savedName', $mapDAO->name);
67 }
68
69 if ($skipColumnHeader) {
70 $this->assign('skipColumnHeader', $skipColumnHeader);
71 $this->assign('rowDisplayCount', 3);
72 }
73 else {
74 $this->assign('rowDisplayCount', 2);
75 }
76
77 if ($invalidRowCount) {
a05662ef 78 $urlParams = 'type=' . CRM_Import_Parser::ERROR . '&parser=CRM_Contribute_Import_Parser';
6a488035
TO
79 $this->set('downloadErrorRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams));
80 }
81
82 if ($conflictRowCount) {
a05662ef 83 $urlParams = 'type=' . CRM_Import_Parser::CONFLICT . '&parser=CRM_Contribute_Import_Parser';
6a488035
TO
84 $this->set('downloadConflictRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams));
85 }
86
87 if ($mismatchCount) {
a05662ef 88 $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Contribute_Import_Parser';
6a488035
TO
89 $this->set('downloadMismatchRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams));
90 }
91
92 $properties = array(
353ffa53
TO
93 'mapper',
94 'softCreditFields',
1221efe9 95 'mapperSoftCreditType',
353ffa53
TO
96 'dataValues',
97 'columnCount',
98 'totalRowCount',
99 'validRowCount',
100 'invalidRowCount',
101 'conflictRowCount',
6a488035
TO
102 'downloadErrorRecordsUrl',
103 'downloadConflictRecordsUrl',
104 'downloadMismatchRecordsUrl',
105 );
106
107 foreach ($properties as $property) {
108 $this->assign($property, $this->get($property));
109 }
110 }
111
6a488035
TO
112 /**
113 * Process the mapped fields and map it into the uploaded file
114 * preview the file and extract some summary statistics
115 *
116 * @return void
6a488035
TO
117 */
118 public function postProcess() {
353ffa53 119 $fileName = $this->controller->exportValue('DataSource', 'uploadFile');
bf3adfdb 120 $skipColumnHeader = $this->controller->exportValue('DataSource', 'skipColumnHeader');
353ffa53 121 $invalidRowCount = $this->get('invalidRowCount');
6a488035 122 $conflictRowCount = $this->get('conflictRowCount');
353ffa53 123 $onDuplicate = $this->get('onDuplicate');
1221efe9 124 $mapperSoftCreditType = $this->get('mapperSoftCreditType');
6a488035
TO
125
126 $config = CRM_Core_Config::singleton();
127 $seperator = $config->fieldSeparator;
128
129 $mapper = $this->controller->exportValue('MapField', 'mapper');
130 $mapperKeys = array();
131 $mapperSoftCredit = array();
132 $mapperPhoneType = array();
133
134 foreach ($mapper as $key => $value) {
135 $mapperKeys[$key] = $mapper[$key][0];
1221efe9 136 if (isset($mapper[$key][0]) && $mapper[$key][0] == 'soft_credit' && isset($mapper[$key])) {
137 $mapperSoftCredit[$key] = isset($mapper[$key][1]) ? $mapper[$key][1] : '';
138 $mapperSoftCreditType[$key] = $mapperSoftCreditType[$key]['value'];
6a488035
TO
139 }
140 else {
874c9be7 141 $mapperSoftCredit[$key] = $mapperSoftCreditType[$key] = NULL;
6a488035
TO
142 }
143 }
144
1221efe9 145 $parser = new CRM_Contribute_Import_Parser_Contribution($mapperKeys, $mapperSoftCredit, $mapperPhoneType, $mapperSoftCreditType);
6a488035
TO
146
147 $mapFields = $this->get('fields');
148
149 foreach ($mapper as $key => $value) {
150 $header = array();
151 if (isset($mapFields[$mapper[$key][0]])) {
152 $header[] = $mapFields[$mapper[$key][0]];
153 }
154 $mapperFields[] = implode(' - ', $header);
155 }
156 $parser->run($fileName, $seperator,
157 $mapperFields,
158 $skipColumnHeader,
a05662ef 159 CRM_Import_Parser::MODE_IMPORT,
6a488035
TO
160 $this->get('contactType'),
161 $onDuplicate
162 );
163
68ef454c 164 // Add all the necessary variables to the form.
a05662ef 165 $parser->set($this, CRM_Import_Parser::MODE_IMPORT);
6a488035 166
68ef454c 167 // Check if there is any error occurred.
6a488035
TO
168
169 $errorStack = CRM_Core_Error::singleton();
170 $errors = $errorStack->getErrors();
171 $errorMessage = array();
172
173 if (is_array($errors)) {
174 foreach ($errors as $key => $value) {
175 $errorMessage[] = $value['message'];
176 }
177
178 $errorFile = $fileName['name'] . '.error.log';
179
180 if ($fd = fopen($errorFile, 'w')) {
181 fwrite($fd, implode('\n', $errorMessage));
182 }
183 fclose($fd);
184
185 $this->set('errorFile', $errorFile);
a05662ef 186 $urlParams = 'type=' . CRM_Import_Parser::ERROR . '&parser=CRM_Contribute_Import_Parser';
6a488035 187 $this->set('downloadErrorRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams));
a05662ef 188 $urlParams = 'type=' . CRM_Import_Parser::CONFLICT . '&parser=CRM_Contribute_Import_Parser';
6a488035 189 $this->set('downloadConflictRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams));
a05662ef 190 $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Contribute_Import_Parser';
6a488035
TO
191 $this->set('downloadMismatchRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams));
192 }
193 }
96025800 194
6a488035 195}