Account Suspended
Account Suspended
This Account has been suspended.
Contact your hosting provider for more information.
 All Data Structures Functions Variables Pages
ImportDataAnalyzer.php
1 <?php
2  /*********************************************************************************
3  * Zurmo is a customer relationship management program developed by
4  * Zurmo, Inc. Copyright (C) 2017 Zurmo Inc.
5  *
6  * Zurmo is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU Affero General Public License version 3 as published by the
8  * Free Software Foundation with the addition of the following permission added
9  * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
10  * IN WHICH THE COPYRIGHT IS OWNED BY ZURMO, ZURMO DISCLAIMS THE WARRANTY
11  * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
12  *
13  * Zurmo is distributed in the hope that it will be useful, but WITHOUT
14  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15  * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Affero General Public License along with
19  * this program; if not, see http://www.gnu.org/licenses or write to the Free
20  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21  * 02110-1301 USA.
22  *
23  * You can contact Zurmo, Inc. with a mailing address at 27 North Wacker Drive
24  * Suite 370 Chicago, IL 60606. or at email address contact@zurmo.com.
25  *
26  * The interactive user interfaces in original and modified versions
27  * of this program must display Appropriate Legal Notices, as required under
28  * Section 5 of the GNU Affero General Public License version 3.
29  *
30  * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
31  * these Appropriate Legal Notices must retain the display of the Zurmo
32  * logo and Zurmo copyright notice. If the display of the logo is not reasonably
33  * feasible for technical reasons, the Appropriate Legal Notices must display the words
34  * "Copyright Zurmo Inc. 2017. All rights reserved".
35  ********************************************************************************/
36 
44  {
45  const STATUS_CLEAN = 1;
46 
47  const STATUS_WARN = 2;
48 
49  const STATUS_SKIP = 3;
50 
55  protected $importRules;
56 
61  protected $dataProvider;
62 
67  protected $messagesData = array();
68 
69  protected $mappingData;
70 
71  protected $sanitizableColumnNames;
72 
73  private $customFieldsInstructionData;
74 
75  public static function getStatusLabelByType($type)
76  {
77  assert('is_int($type)');
78  if ($type == self::STATUS_CLEAN)
79  {
80  $label = Zurmo::t('ImportModule', 'Ok');
81  }
82  elseif ($type == self::STATUS_WARN)
83  {
84  $label = Zurmo::t('Core', 'Warning');
85  }
86  elseif ($type == self::STATUS_SKIP)
87  {
88  $label = Zurmo::t('Core', 'Skip');
89  }
90  return $label;
91  }
92 
93  public static function getStatusLabelAndVisualIdentifierContentByType($type)
94  {
95  assert('is_int($type)');
96  $label = static::getStatusLabelByType($type);
97  if ($type == self::STATUS_CLEAN)
98  {
99  $stageContent = ' stage-true';
100  }
101  elseif ($type == self::STATUS_WARN)
102  {
103  $stageContent = null;
104  }
105  elseif ($type == self::STATUS_SKIP)
106  {
107  $stageContent = ' stage-false';
108  }
109  $content = ZurmoHtml::tag('div', array('class' => "import-item-stage-status" . $stageContent),
110  '<i>&#9679;</i>' . ZurmoHtml::tag('span', array(), $label));
111  return ZurmoHtml::wrapAndRenderContinuumButtonContent($content);
112  }
113 
114  protected static function resolveAttributeNameByRules(AttributeImportRules $attributeImportRules)
115  {
116  $attributeNames = $attributeImportRules->getRealModelAttributeNames();
117  if (count($attributeNames) > 1 || $attributeNames == null)
118  {
119  return null;
120  }
121  else
122  {
123  return $attributeNames[0];
124  }
125  }
126 
133  public function __construct($importRules, ImportDataProvider $dataProvider, array $mappingData, array $sanitizableColumnNames)
134  {
135  assert('$importRules instanceof ImportRules');
136  $this->importRules = $importRules;
137  $this->dataProvider = $dataProvider;
138  $this->mappingData = $mappingData;
139  $this->sanitizableColumnNames = $sanitizableColumnNames;
140  }
141 
142  public function analyzePage()
143  {
144  $data = $this->dataProvider->getData(true);
145  foreach ($data as $rowBean)
146  {
147  assert('$rowBean->id != null');
148  $columnMessages = array();
149  $shouldSkipRow = false;
150  foreach ($this->sanitizableColumnNames as $columnName)
151  {
152  $attributeIndexOrDerivedType = $this->mappingData[$columnName]['attributeIndexOrDerivedType'];
153  $penultimateModelClassName = ImportUtil::getPenultimateModelClassNameByImportRules($this->importRules);
154  $attributeImportRules = AttributeImportRulesFactory::
156  $this->importRules->getType(),
157  $attributeIndexOrDerivedType,
158  $penultimateModelClassName);
159  $modelClassName = $attributeImportRules->getModelClassName();
160  $attributeName = static::resolveAttributeNameByRules($attributeImportRules);
161  if (null != $attributeValueSanitizerUtilTypes = $attributeImportRules->getSanitizerUtilTypesInProcessingOrder())
162  {
163  assert('is_array($attributeValueSanitizerUtilTypes)');
164  foreach ($attributeValueSanitizerUtilTypes as $attributeValueSanitizerUtilType)
165  {
166  $sanitizer = ImportSanitizerUtilFactory::
167  make($attributeValueSanitizerUtilType, $modelClassName, $attributeName,
168  $columnName, $this->mappingData[$columnName], null, $penultimateModelClassName,
169  $attributeIndexOrDerivedType);
170  $sanitizer->analyzeByRow($rowBean);
171  if ($sanitizer->getShouldSkipRow())
172  {
173  $shouldSkipRow = true;
174  }
175  foreach ($sanitizer->getAnalysisMessages() as $message)
176  {
177  $columnMessages[$columnName][] = $message;
178  }
179  $classToEvaluate = new ReflectionClass($sanitizer);
180  if ($classToEvaluate->implementsInterface('ImportSanitizerHasCustomFieldValuesInterface'))
181  {
182  $missingCustomFieldValues = $sanitizer->getMissingCustomFieldValues();
183  $this->getCustomFieldsInstructionData()->addMissingValuesByColumnName($missingCustomFieldValues, $columnName);
184  }
185  }
186  }
187  }
188 
189  if (!empty($columnMessages))
190  {
191  $rowBean->serializedAnalysisMessages = serialize($columnMessages);
192  if ($shouldSkipRow)
193  {
194  $rowBean->analysisStatus = static::STATUS_SKIP;
195  }
196  else
197  {
198  $rowBean->analysisStatus = static::STATUS_WARN;
199  }
200  }
201  else
202  {
203  $rowBean->serializedAnalysisMessages = null;
204  $rowBean->analysisStatus = static::STATUS_CLEAN;
205  }
206  ZurmoRedBean::store($rowBean);
207  }
208  }
209 
210  public function getCustomFieldsInstructionData()
211  {
212  if ($this->customFieldsInstructionData === null)
213  {
214  $this->customFieldsInstructionData = new CustomFieldsInstructionData();
215  }
216  return $this->customFieldsInstructionData;
217  }
218  }
219 ?>
__construct($importRules, ImportDataProvider $dataProvider, array $mappingData, array $sanitizableColumnNames)
static getSanitizerUtilTypesInProcessingOrder()
static makeByImportRulesTypeAndAttributeIndexOrDerivedType($importRulesType, $attributeIndexOrDerivedType, $penultimateModelClassName=null, $explicitReadWriteModelPermissions=null)
static getPenultimateModelClassNameByImportRules(ImportRules $importRules)
Definition: ImportUtil.php:609
Generated on Wed Jul 8 2020 07:10:34
Account Suspended
Account Suspended
This Account has been suspended.
Contact your hosting provider for more information.