42 protected static $skippedAttributes = array();
51 assert(
'$model instanceof RedBeanModel || $model instanceof ModelForm');
52 assert(
'is_array($data)');
53 foreach ($data as $attributeName => $value)
55 if ($value !== null && static::isNotMarkedSkipped($attributeName))
57 if (!is_array($value))
59 if ($model->isAttribute($attributeName) && $model->isAttributeSafe($attributeName))
62 $model, $attributeName);
63 if ($designerType ==
'Date' && !empty($value))
65 $data[$attributeName] = DateTimeUtil::resolveValueForDateDBFormatted($value);
67 if ($designerType ==
'DateTime' && !empty($value))
71 $data[$attributeName] = static::purifyHtml($data[$attributeName]);
85 if ($model->isAttributeSafe($attributeName) && $designerType !=
'TagCloud')
87 if ($designerType ==
'MixedDateTypesForSearch' && isset($value[
'firstDate']) &&
88 $value[
'firstDate'] != null)
90 $data[$attributeName][
'firstDate'] = DateTimeUtil::
91 resolveValueForDateDBFormatted(
94 if ($designerType ==
'MixedDateTypesForSearch' && isset($value[
'secondDate']) &&
95 $value[
'secondDate'] != null)
97 $data[$attributeName][
'secondDate'] = DateTimeUtil::
98 resolveValueForDateDBFormatted(
99 $value[
'secondDate']);
102 elseif (isset($value[
'values']) && is_string($value[
'values']) && $designerType ==
'TagCloud')
104 if ($data[$attributeName][
'values'] ==
'')
106 $data[$attributeName][
'values'] = array();
110 $data[$attributeName][
'values'] = explode(
',', $data[$attributeName][
'values']);
113 if ($designerType ==
'CheckBox')
115 $data[$attributeName] = $value[
'value'];
119 array_walk_recursive($data[$attributeName], array(get_called_class(),
'purifyHtmlAndModifyInput'));
135 assert(
'is_array($sanitizedData)');
136 assert(
'is_string($elementName) || is_int($elementName)');
137 if (!isset($sanitizedData[$elementName]))
141 return array($elementName => $sanitizedData[$elementName]);
151 assert(
'is_array($sanitizedData)');
152 assert(
'is_string($elementName) || is_int($elementName)');
153 if (isset($sanitizedData[$elementName]))
155 unset($sanitizedData[$elementName]);
157 return $sanitizedData;
167 if (is_string($text))
169 $safeCharacters = array(
'&' =>
'&',
176 $purifier =
new CHtmlPurifier();
177 $purifier->options = array(
'Cache.SerializerPermissions' => 0777,
178 'Attr.AllowedFrameTargets' =>
'_blank');
179 $purifiedText = $purifier->purify($text);
180 foreach ($safeCharacters as $specialCharacter => $purifiedCode)
182 if (strpos($text, $specialCharacter) !==
false)
184 $purifiedText = str_replace($purifiedCode, $specialCharacter, $purifiedText);
187 $text = $purifiedText;
201 assert(
'is_scalar($item) || empty($item)');
204 $item = static::purifyHtml($item);
208 protected static function isNotMarkedSkipped($attributeName)
210 return !(in_array($attributeName, static::$skippedAttributes));
static getDesignerType($model, $attributeName)
static sanitizeDataByDesignerTypeForSavingModel($model, $data)
static convertDateTimeLocaleFormattedDisplayToDbFormattedDateTimeWithSecondsAsZero($localeFormattedDateTime)
static purifyHtmlAndModifyInput(&$item)
static removeElementFromDataForSavingModel($sanitizedData, $elementName)
static sanitizeDataToJustHavingElementForSavingModel($sanitizedData, $elementName)