Account Suspended
Account Suspended
This Account has been suspended.
Contact your hosting provider for more information.
 All Data Structures Functions Variables Pages
DropDownSanitizerUtil.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 
41  {
42  protected $missingCustomFieldValues = array();
43 
49  public static function supportsSanitizingWithInstructions()
50  {
51  return true;
52  }
53 
54  public function getMissingCustomFieldValues()
55  {
56  return $this->missingCustomFieldValues;
57  }
58 
62  public function analyzeByRow(RedBean_OODBBean $rowBean)
63  {
64  if ($rowBean->{$this->columnName} != null)
65  {
66  $customFieldData = CustomFieldDataModelUtil::
67  getDataByModelClassNameAndAttributeName($this->modelClassName, $this->attributeName);
68  $dropDownValues = unserialize($customFieldData->serializedData);
69  $dropDownValues = ArrayUtil::resolveArrayToLowerCase($dropDownValues);
70  if (!in_array(strtolower($rowBean->{$this->columnName}), $dropDownValues))
71  {
72  $label = Zurmo::t('ImportModule', '{value} is new. This value will be added upon import.',
73  array('{value}' => $rowBean->{$this->columnName}));
74  $this->analysisMessages[] = $label;
75  $this->missingCustomFieldValues[] = $rowBean->{$this->columnName};
76  }
77  }
78  }
79 
87  public function sanitizeValue($value)
88  {
89  $customFieldsInstructionData = $this->getCustomFieldsInstructionDataFromColumnMappingData();
90  if (!isset($customFieldsInstructionData[CustomFieldsInstructionData::ADD_MISSING_VALUES]))
91  {
92  $customFieldsInstructionData[CustomFieldsInstructionData::ADD_MISSING_VALUES] = array();
93  }
94  if ($value == null)
95  {
96  return $value;
97  }
98  $customFieldData = CustomFieldDataModelUtil::
100  $this->modelClassName, $this->attributeName);
101  $dropDownValues = unserialize($customFieldData->serializedData);
102  $lowerCaseDropDownValues = ArrayUtil::resolveArrayToLowerCase($dropDownValues);
103  $generateMissingPickListError = false;
104  //does the value already exist in the custom field data
105  if (in_array(TextUtil::strToLowerWithDefaultEncoding($value), $lowerCaseDropDownValues))
106  {
107  $keyToUse = array_search(TextUtil::strToLowerWithDefaultEncoding($value), $lowerCaseDropDownValues);
108  $resolvedValueToUse = $dropDownValues[$keyToUse];
109  }
110  else
111  {
112  //if the value does not already exist, then check the instructions data.
113  $lowerCaseValuesToAdd = ArrayUtil::resolveArrayToLowerCase(
114  $customFieldsInstructionData[CustomFieldsInstructionData::ADD_MISSING_VALUES]);
115  if (in_array(TextUtil::strToLowerWithDefaultEncoding($value), $lowerCaseValuesToAdd))
116  {
117  $keyToAddAndUse = array_search(TextUtil::strToLowerWithDefaultEncoding($value), $lowerCaseValuesToAdd);
118  $resolvedValueToUse = $customFieldsInstructionData[CustomFieldsInstructionData::ADD_MISSING_VALUES][$keyToAddAndUse];
119  $unserializedData = unserialize($customFieldData->serializedData);
120  $unserializedData[] = $resolvedValueToUse;
121  $customFieldData->serializedData = serialize($unserializedData);
122  $saved = $customFieldData->save();
123  assert('$saved');
124  }
125  elseif (isset($customFieldsInstructionData[CustomFieldsInstructionData::MAP_MISSING_VALUES]))
126  {
127  $lowerCaseMissingValuesToMap = ArrayUtil::resolveArrayToLowerCase(
128  $customFieldsInstructionData[CustomFieldsInstructionData::MAP_MISSING_VALUES]);
129  if (isset($lowerCaseMissingValuesToMap[TextUtil::strToLowerWithDefaultEncoding($value)]))
130  {
131  $keyToUse = array_search($lowerCaseMissingValuesToMap[TextUtil::strToLowerWithDefaultEncoding($value)],
132  $lowerCaseDropDownValues);
133  if ($keyToUse === false)
134  {
135  throw new InvalidValueToSanitizeException(Zurmo::t('ImportModule', 'Pick list value specified ' .
136  'is missing from existing pick list, has a specified mapping value, ' .
137  'but the mapping value is not a valid value.'));
138  }
139  else
140  {
141  $resolvedValueToUse = $dropDownValues[$keyToUse];
142  }
143  }
144  else
145  {
146  $generateMissingPickListError = true;
147  }
148  }
149  else
150  {
151  $generateMissingPickListError = true;
152  }
153  if ($generateMissingPickListError)
154  {
155  throw new InvalidValueToSanitizeException(Zurmo::t(
156  'ImportModule', 'Pick list value specified is missing from existing pick list and no valid instructions ' .
157  'were provided on how to resolve this.'));
158  }
159  }
160  $customField = new OwnedCustomField();
161  $customField->value = $resolvedValueToUse;
162  $customField->data = $customFieldData;
163  return $customField;
164  }
165 
166  protected function assertMappingRuleDataIsValid()
167  {
168  assert('$this->mappingRuleData == null');
169  }
170 
171  protected function getCustomFieldsInstructionDataFromColumnMappingData()
172  {
173  if (isset($this->columnMappingData['customFieldsInstructionData']))
174  {
175  return $this->columnMappingData['customFieldsInstructionData'];
176  }
177  return null;
178  }
179  }
180 ?>
analyzeByRow(RedBean_OODBBean $rowBean)
static strToLowerWithDefaultEncoding($string)
Definition: TextUtil.php:47
static getDataByModelClassNameAndAttributeName($modelClassName, $attributeName)
Generated on Thu Aug 6 2020 07:10:32
Account Suspended
Account Suspended
This Account has been suspended.
Contact your hosting provider for more information.