3namespace Bitrix\Fileman\UserField;
5use Bitrix\Main\Security\Random;
6use Bitrix\Main\Text\GeoHash;
7use Bitrix\Main\Localization\Loc;
8use Bitrix\Main\Text\HtmlFilter;
10Loc::loadMessages(__FILE__);
23 "USER_TYPE_ID" => static::USER_TYPE_ID,
24 "CLASS_NAME" => __CLASS__,
25 "DESCRIPTION" =>
GetMessage(
"USER_TYPE_GEO_DESCRIPTION"),
26 "BASE_TYPE" => \CUserTypeManager::BASE_TYPE_STRING,
27 "EDIT_CALLBACK" =>
array(__CLASS__,
'GetPublicEdit'),
28 "VIEW_CALLBACK" =>
array(__CLASS__,
'GetPublicView'),
36 return $helper->getColumnTypeByField(
39 'validation' =>
function()
42 new \Bitrix\Main\Entity\Validator\Length(
null, 100),
51 $scale = intval($arUserField[
"SETTINGS"][
"INIT_MAP_SCALE"]);
52 $lat = doubleval($arUserField[
"SETTINGS"][
"INIT_MAP_LAT"]);
53 $lon = doubleval($arUserField[
"SETTINGS"][
"INIT_MAP_LON"]);
56 'INIT_MAP_SCALE' => $scale,
57 'INIT_MAP_LAT' => $lat,
58 'INIT_MAP_LON' => $lon,
67 $value = $encodedValue;
75 if($fetched[
'VALUE'] <>
'')
78 $fetched[
'VALUE'] = $decodedValue;
81 return $fetched[
'VALUE'];
88 $mapId = (is_array($arUserField) ? $arUserField[
'FIELD_NAME'] :
'_new') .
'_settings';
93 $scale = intval(
$GLOBALS[$arHtmlControl[
"NAME"]][
"INIT_MAP_SCALE"]);
94 $lat = doubleval(
$GLOBALS[$arHtmlControl[
"NAME"]][
"INIT_MAP_LAT"]);
95 $lon = doubleval(
$GLOBALS[$arHtmlControl[
"NAME"]][
"INIT_MAP_LON"]);
97 elseif(is_array($arUserField))
99 $scale = intval($arUserField[
"SETTINGS"][
"INIT_MAP_SCALE"]);
100 $lat = doubleval($arUserField[
"SETTINGS"][
"INIT_MAP_LAT"]);
101 $lon = doubleval($arUserField[
"SETTINGS"][
"INIT_MAP_LON"]);
111 <td valign="top">'.GetMessage(
"USER_TYPE_GEO_INIT_MAP").
':</td>
118 'INIT_MAP_SCALE' => $scale,
119 'INIT_MAP_LAT' => $lat,
120 'INIT_MAP_LON' => $lon,
124 var mapId =
'<?=$mapId?>';
126 function waitForMap()
128 if(window.GLOBAL_arMapObjects ===
null)
133 if(window.GLOBAL_arMapObjects[mapId] && window.google && window.google.maps && window.google.maps.event)
135 var map = window.GLOBAL_arMapObjects[mapId];
137 var getDataFromMap =
function()
139 BX(
'init_scale').value = map.getZoom();
140 BX(
'init_lat').value = map.getCenter().lat();
141 BX(
'init_lng').value = map.getCenter().lng();
144 map.addListener(
'bounds_changed', getDataFromMap);
150 setTimeout(waitForMap, 300);
165 <td>'.GetMessage(
"USER_TYPE_GEO_INIT_MAP_SCALE").
':</td>
167 <input type="text" name="'.$arHtmlControl[
"NAME"].
'[INIT_MAP_SCALE]" size="5" maxlength="5" readonly="readonly" value="'.$scale.
'" id="init_scale" />
171 <td>'.GetMessage(
"USER_TYPE_GEO_INIT_MAP_LAT").
':</td>
173 <input type="text" name="'.$arHtmlControl[
"NAME"].
'[INIT_MAP_LAT]" size="20" maxlength="50" readonly="readonly" value="'.$lat.
'" id="init_lat" />
177 <td>'.GetMessage(
"USER_TYPE_GEO_INIT_MAP_LON").
':</td>
179 <input type="text" name="'.$arHtmlControl[
"NAME"].
'[INIT_MAP_LON]" size="20" maxlength="50" readonly="readonly" value="'.$lon.
'" id="init_lng" />
190 return static::showAdminEdit($arUserField, $arHtmlControl,
false);
195 return static::showAdminEdit($arUserField, $arHtmlControl,
true);
198 protected function showAdminEdit($arUserField, $arHtmlControl, $multiple =
false)
204 $value = $arHtmlControl[
'VALUE'];
205 if(!is_array($value))
207 $value =
array($value);
210 $pointList =
array();
211 foreach($value as $point)
215 $pointList[] = explode(
';', $point);
219 $center = static::getCenter($arUserField, $pointList);
222 'MAP_ID' => $arUserField[
'FIELD_NAME'],
223 'MULTIPLE' => $multiple ?
'Y' :
'N',
224 'POINTS' => $pointList,
225 'INIT_MAP_SCALE' => $arUserField[
'SETTINGS'][
'INIT_MAP_SCALE'],
226 'INIT_MAP_LAT' => $center[0],
227 'INIT_MAP_LON' => $center[1],
228 ),
null,
array(
'HIDE_ICONS' =>
'Y'));
230 if(!is_array($arHtmlControl[
'VALUE']))
232 $arHtmlControl[
'VALUE'] =
array($arHtmlControl[
'VALUE']);
235 <span
style=
"display: none;" id=
"<?=$arUserField['FIELD_NAME']?>_valuewrap">
237 foreach($arHtmlControl[
'VALUE'] as $value)
240 <input type=
"hidden" name=
"<?=$arHtmlControl['NAME']?>" value=
"<?=$value?>" />
246 BX.Fileman.Map.instance(
'<?=\CUtil::JSEscape($arUserField['FIELD_NAME
'])?>').addListener(
function(map, points)
250 for(var i = 0; i < points.length; i++)
252 str +=
'<input type="hidden" name="<?=$arHtmlControl['NAME
']?>" value="' + points[i].getPosition().join(
';') +
'" />';
255 BX(
'<?=$arUserField['FIELD_NAME
']?>_valuewrap').innerHTML = str;
261 return ob_get_clean();
268 $mapId = $arUserField[
'FIELD_NAME'].
'_edit_'.Random::getString(5);
270 $fieldName = static::getFieldName($arUserField, $arAdditionalParameters);
271 $value = static::getFieldValue($arUserField, $arAdditionalParameters);
273 $pointList =
array();
275 foreach($value as $point)
279 $pointList[] = explode(
';', $point);
285 $center = static::getCenter($arUserField, $pointList);
290 'MAP_WIDTH' =>
'100%',
291 'MULTIPLE' => $arUserField[
'MULTIPLE'] ==
'Y' ?
'Y' :
'N',
292 'POINTS' => $pointList,
293 'INIT_MAP_SCALE' => $arUserField[
'SETTINGS'][
'INIT_MAP_SCALE'],
294 'INIT_MAP_LAT' => $center[0],
295 'INIT_MAP_LON' => $center[1],
296 ),
null,
array(
'HIDE_ICONS' =>
'Y'));
299<span
style=
"display: none;" id=
"<?=$arUserField['FIELD_NAME']?>_valuewrap">
300 <input type=
"hidden" name=
"<?=HtmlFilter::encode($fieldName)?>" value=
""/>
302foreach($value as $point)
307 <input type=
"hidden" name=
"<?=HtmlFilter::encode($fieldName)?>" value=
"<?=$point?>"/>
314 BX.Fileman.Map.instance(
'<?=\CUtil::JSEscape($mapId)?>').addListener(
function(map, points)
316 var str =
'<input type="hidden" name="<?=\CUtil::JSEscape(HtmlFilter::encode($fieldName))?>" value=""/>';
318 for(var i = 0; i < points.length; i++)
320 str +=
'<input type="hidden" name="<?=\CUtil::JSEscape(HtmlFilter::encode($fieldName))?>" value="' + points[i].getPosition().join(
';') +
'" />';
323 BX(
'<?=HtmlFilter::encode($arUserField['FIELD_NAME
'])?>_valuewrap').innerHTML = str;
324 var inputList = BX.Main.UF.Factory.get(BX.Main.UF.TypeGeo.USER_TYPE_ID).findInput(BX(
'<?=\CUtil::JSEscape($arUserField['FIELD_NAME
'])?>_valuewrap'),
'<?=\CUtil::JSEscape($fieldName)?>');
326 if(inputList.length > 0)
328 BX.fireEvent(inputList[0],
'change');
333 $html .= ob_get_clean();
342 $mapId = $arUserField[
'FIELD_NAME'].
'_view_'.Random::getString(5);
344 $value = static::normalizeFieldValue($arUserField[
"VALUE"]);
346 $placemarkList =
array();
347 $pointList =
array();
349 if(
count($value) > 0)
351 foreach($value as $point)
355 $c = explode(
';', $point);
356 $placemarkList[] =
array(
367 $center = static::getCenter($arUserField, $pointList);
372 'MAP_WIDTH' =>
'100%',
373 'MAP_DATA' => serialize(
array(
374 'google_scale' => $arUserField[
'SETTINGS'][
'INIT_MAP_SCALE'],
375 'google_lat' => $center[0],
376 'google_lon' => $center[1],
377 'PLACEMARKS' => $placemarkList
379 ),
null,
array(
'HIDE_ICONS' =>
'Y'));
381 return ob_get_clean();
384 protected static function getCenter($arUserField, $pointList)
386 $center =
array(0, 0);
389 if(
count($pointList) > 0)
391 foreach($pointList as $point)
395 $center[0] += $point[0];
396 $center[1] += $point[1];
405 $center =
array($arUserField[
'SETTINGS'][
'INIT_MAP_LAT'], $arUserField[
'SETTINGS'][
'INIT_MAP_LON']);
409 $center[0] = $center[0] / $pointCount;
410 $center[1] = $center[1] / $pointCount;
onAfterFetch($userfield, $fetched)
prepareSettings($arUserField)
static getPublicView($arUserField, $arAdditionalParameters=array())
showAdminEdit($arUserField, $arHtmlControl, $multiple=false)
getEditFormHTMLMulty($arUserField, $arHtmlControl)
getEditFormHTML($arUserField, $arHtmlControl)
static getDBColumnType($arUserField)
onBeforeSave($userField, $value)
static getPublicEdit($arUserField, $arAdditionalParameters=array())
getSettingsHtml($arUserField, $arHtmlControl, $bVarsFromForm)
static getCenter($arUserField, $pointList)
static getConnection($name="")
static encode(array $coordinate, $length=self::MAX_LENGTH)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
GetMessage($name, $aReplace=null)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
$GLOBALS['_____370096793']