mirror of
https://github.com/openvk/openvk
synced 2024-12-22 16:42:32 +03:00
feat(geo): add ability to change point name and...
...fix federal cities name and territorial integrity
This commit is contained in:
parent
a714a0aa16
commit
959a6d6ac3
8 changed files with 54 additions and 4 deletions
|
@ -639,7 +639,7 @@ final class Wall extends VKAPIRequestHandler
|
||||||
$res['name'] = 'Geopoint';
|
$res['name'] = 'Geopoint';
|
||||||
}
|
}
|
||||||
|
|
||||||
$post->setGeo(json_encode($res));
|
$post->setGeo($res);
|
||||||
$post->setGeo_Lat($latitude);
|
$post->setGeo_Lat($latitude);
|
||||||
$post->setGeo_Lon($longitude);
|
$post->setGeo_Lon($longitude);
|
||||||
}
|
}
|
||||||
|
|
|
@ -463,6 +463,21 @@ class Post extends Postable
|
||||||
return (object) json_decode($this->getRecord()->geo, true, JSON_UNESCAPED_UNICODE);
|
return (object) json_decode($this->getRecord()->geo, true, JSON_UNESCAPED_UNICODE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setGeo($encoded_object): void
|
||||||
|
{
|
||||||
|
$final_geo = $encoded_object['name'];
|
||||||
|
$neutral_names = ["Россия", "Russia", "Росія", "Россія", "Украина", "Ukraine", "Україна", "Украіна"];
|
||||||
|
foreach($neutral_names as $name) {
|
||||||
|
if(str_contains($final_geo, $name.", ")) {
|
||||||
|
$final_geo = str_replace($name.", ", "", $final_geo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$encoded_object['name'] = ovk_proc_strtr($final_geo, 255);
|
||||||
|
$encoded = json_encode($encoded_object);
|
||||||
|
$this->stateChanges("geo", $encoded);
|
||||||
|
}
|
||||||
|
|
||||||
function getLat(): ?float
|
function getLat(): ?float
|
||||||
{
|
{
|
||||||
return (float) $this->getRecord()->geo_lat ?? NULL;
|
return (float) $this->getRecord()->geo_lat ?? NULL;
|
||||||
|
@ -478,6 +493,7 @@ class Post extends Postable
|
||||||
return (object) [
|
return (object) [
|
||||||
'type' => 'point',
|
'type' => 'point',
|
||||||
'coordinates' => $this->getLat() . ',' . $this->getLon(),
|
'coordinates' => $this->getLat() . ',' . $this->getLon(),
|
||||||
|
'name' => $this->getGeo()->name,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -346,7 +346,7 @@ final class WallPresenter extends OpenVKPresenter
|
||||||
$post->setSuggested(1);
|
$post->setSuggested(1);
|
||||||
|
|
||||||
if ($geo) {
|
if ($geo) {
|
||||||
$post->setGeo(json_encode($geo));
|
$post->setGeo($geo);
|
||||||
$post->setGeo_Lat($latitude);
|
$post->setGeo_Lat($latitude);
|
||||||
$post->setGeo_Lon($longitude);
|
$post->setGeo_Lon($longitude);
|
||||||
}
|
}
|
||||||
|
|
|
@ -856,6 +856,10 @@ h4 {
|
||||||
padding: 0 4px;
|
padding: 0 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#geo-name {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
.post-signature span {
|
.post-signature span {
|
||||||
color: grey;
|
color: grey;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2634,7 +2634,7 @@ u(document).on('click', "#__geoAttacher", async (e) => {
|
||||||
const marker = {
|
const marker = {
|
||||||
lat: currentMarker._latlng.lat,
|
lat: currentMarker._latlng.lat,
|
||||||
lng: currentMarker._latlng.lng,
|
lng: currentMarker._latlng.lng,
|
||||||
name: escapeHtml(geo_name)
|
name: geo_name
|
||||||
}
|
}
|
||||||
buttons.find(`input[name='geo']`).nodes[0].value = JSON.stringify(marker)
|
buttons.find(`input[name='geo']`).nodes[0].value = JSON.stringify(marker)
|
||||||
buttons.find(`.post-has-geo`).html(`
|
buttons.find(`.post-has-geo`).html(`
|
||||||
|
@ -2712,6 +2712,25 @@ u(document).on('click', '.post-has-geo #small_remove_button', (e) => {
|
||||||
form.find(`input[name='geo']`).nodes[0].value = ''
|
form.find(`input[name='geo']`).nodes[0].value = ''
|
||||||
})
|
})
|
||||||
|
|
||||||
|
u(document).on('click', '#geo-name', (e) => {
|
||||||
|
const current_value = escapeHtml(e.target.innerHTML)
|
||||||
|
const msg = new CMessageBox({
|
||||||
|
title: tr('change_geo_name'),
|
||||||
|
unique_name: 'geo_change_name_menu',
|
||||||
|
body: `
|
||||||
|
<div>
|
||||||
|
<input type="text" maxlength="255" name="final_value" placeholder="${tr('change_geo_name_new')}" value="${current_value}">
|
||||||
|
</div>
|
||||||
|
`,
|
||||||
|
buttons: [tr('save'), tr('cancel')],
|
||||||
|
callbacks: [() => {
|
||||||
|
const new_value = u(`input[name='final_value']`).nodes[0].value
|
||||||
|
u('#geo-name').html(escapeHtml(new_value))
|
||||||
|
}, Function.noop]
|
||||||
|
})
|
||||||
|
u(`input[name='final_value']`).nodes[0].focus()
|
||||||
|
})
|
||||||
|
|
||||||
function openGeo(data, owner_id, virtual_id) {
|
function openGeo(data, owner_id, virtual_id) {
|
||||||
MessageBox(tr("geotag"), "<div id=\"osm-map\"></div>", [tr("nearest_posts"), tr("close")], [async () => {
|
MessageBox(tr("geotag"), "<div id=\"osm-map\"></div>", [tr("nearest_posts"), tr("close")], [async () => {
|
||||||
const posts = await OVKAPI.call('wall.getNearby', {owner_id: owner_id, post_id: virtual_id})
|
const posts = await OVKAPI.call('wall.getNearby', {owner_id: owner_id, post_id: virtual_id})
|
||||||
|
|
|
@ -298,13 +298,18 @@ function short_geo_name(address_osm)
|
||||||
final_arr.push(address_osm.state_district)
|
final_arr.push(address_osm.state_district)
|
||||||
}
|
}
|
||||||
if(address_osm.city) {
|
if(address_osm.city) {
|
||||||
|
if(address_osm.city != address_osm.state) {
|
||||||
final_arr.push(address_osm.city)
|
final_arr.push(address_osm.city)
|
||||||
|
}
|
||||||
} else if(address_osm.town) {
|
} else if(address_osm.town) {
|
||||||
final_arr.push(address_osm.town)
|
final_arr.push(address_osm.town)
|
||||||
}
|
}
|
||||||
if(address_osm.city_district) {
|
if(address_osm.city_district) {
|
||||||
final_arr.push(address_osm.city_district)
|
final_arr.push(address_osm.city_district)
|
||||||
}
|
}
|
||||||
|
if(address_osm.village) {
|
||||||
|
final_arr.push(address_osm.village)
|
||||||
|
}
|
||||||
if(address_osm.road) {
|
if(address_osm.road) {
|
||||||
final_arr.push(address_osm.road)
|
final_arr.push(address_osm.road)
|
||||||
}
|
}
|
||||||
|
|
|
@ -291,6 +291,9 @@
|
||||||
"no_nearest_posts" = "No nearby posts";
|
"no_nearest_posts" = "No nearby posts";
|
||||||
"shown_last_nearest_posts" = "Showing last $1 posts per month";
|
"shown_last_nearest_posts" = "Showing last $1 posts per month";
|
||||||
|
|
||||||
|
"change_geo_name" = "Change geo name";
|
||||||
|
"change_geo_name_new" = "New name";
|
||||||
|
|
||||||
/* Friends */
|
/* Friends */
|
||||||
|
|
||||||
"friends" = "Friends";
|
"friends" = "Friends";
|
||||||
|
|
|
@ -270,6 +270,9 @@
|
||||||
"no_nearest_posts" = "Нет ближайших постов";
|
"no_nearest_posts" = "Нет ближайших постов";
|
||||||
"shown_last_nearest_posts" = "Показаны последние $1 постов за месяц";
|
"shown_last_nearest_posts" = "Показаны последние $1 постов за месяц";
|
||||||
|
|
||||||
|
"change_geo_name" = "Изменить название точки";
|
||||||
|
"change_geo_name_new" = "Новое название";
|
||||||
|
|
||||||
/* Friends */
|
/* Friends */
|
||||||
|
|
||||||
"friends" = "Друзья";
|
"friends" = "Друзья";
|
||||||
|
|
Loading…
Reference in a new issue